alepha 0.13.7 → 0.14.0

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 (512) hide show
  1. package/README.md +5 -2
  2. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  3. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  4. package/assets/swagger-ui/swagger-ui.css +1 -1
  5. package/dist/{api-audits → api/audits}/index.browser.js +4 -4
  6. package/dist/api/audits/index.browser.js.map +1 -0
  7. package/dist/{api-audits → api/audits}/index.d.ts +10 -9
  8. package/dist/api/audits/index.d.ts.map +1 -0
  9. package/dist/{api-audits → api/audits}/index.js +8 -8
  10. package/dist/api/audits/index.js.map +1 -0
  11. package/dist/{api-files → api/files}/index.browser.js +5 -5
  12. package/dist/api/files/index.browser.js.map +1 -0
  13. package/dist/{api-files → api/files}/index.d.ts +18 -10
  14. package/dist/api/files/index.d.ts.map +1 -0
  15. package/dist/{api-files → api/files}/index.js +10 -10
  16. package/dist/api/files/index.js.map +1 -0
  17. package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
  18. package/dist/api/jobs/index.browser.js.map +1 -0
  19. package/dist/{api-jobs → api/jobs}/index.d.ts +168 -167
  20. package/dist/api/jobs/index.d.ts.map +1 -0
  21. package/dist/{api-jobs → api/jobs}/index.js +9 -9
  22. package/dist/api/jobs/index.js.map +1 -0
  23. package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
  24. package/dist/api/notifications/index.browser.js.map +1 -0
  25. package/dist/api/notifications/index.d.ts +327 -0
  26. package/dist/api/notifications/index.d.ts.map +1 -0
  27. package/dist/{api-notifications → api/notifications}/index.js +11 -11
  28. package/dist/api/notifications/index.js.map +1 -0
  29. package/dist/{api-parameters → api/parameters}/index.browser.js +2 -2
  30. package/dist/api/parameters/index.browser.js.map +1 -0
  31. package/dist/{api-parameters → api/parameters}/index.d.ts +11 -11
  32. package/dist/api/parameters/index.d.ts.map +1 -0
  33. package/dist/{api-parameters → api/parameters}/index.js +7 -7
  34. package/dist/api/parameters/index.js.map +1 -0
  35. package/dist/{api-users → api/users}/index.browser.js +6 -6
  36. package/dist/api/users/index.browser.js.map +1 -0
  37. package/dist/{api-users → api/users}/index.d.ts +836 -836
  38. package/dist/api/users/index.d.ts.map +1 -0
  39. package/dist/{api-users → api/users}/index.js +99 -766
  40. package/dist/api/users/index.js.map +1 -0
  41. package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
  42. package/dist/api/verifications/index.browser.js.map +1 -0
  43. package/dist/api/verifications/index.d.ts +248 -0
  44. package/dist/api/verifications/index.d.ts.map +1 -0
  45. package/dist/{api-verifications → api/verifications}/index.js +11 -11
  46. package/dist/api/verifications/index.js.map +1 -0
  47. package/dist/batch/index.d.ts.map +1 -0
  48. package/dist/bucket/index.d.ts.map +1 -0
  49. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  50. package/dist/cache/core/index.d.ts.map +1 -0
  51. package/dist/cache/{index.js → core/index.js} +5 -5
  52. package/dist/cache/core/index.js.map +1 -0
  53. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  54. package/dist/cache/redis/index.d.ts.map +1 -0
  55. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  56. package/dist/cache/redis/index.js.map +1 -0
  57. package/dist/cli/index.d.ts +78 -58
  58. package/dist/cli/index.d.ts.map +1 -0
  59. package/dist/cli/index.js +454 -154
  60. package/dist/cli/index.js.map +1 -1
  61. package/dist/command/index.d.ts +15 -5
  62. package/dist/command/index.d.ts.map +1 -0
  63. package/dist/command/index.js +45 -6
  64. package/dist/command/index.js.map +1 -1
  65. package/dist/core/index.browser.js +1334 -1318
  66. package/dist/core/index.browser.js.map +1 -1
  67. package/dist/core/index.d.ts +75 -71
  68. package/dist/core/index.d.ts.map +1 -0
  69. package/dist/core/index.js +1337 -1321
  70. package/dist/core/index.js.map +1 -1
  71. package/dist/core/index.native.js +1337 -1321
  72. package/dist/core/index.native.js.map +1 -1
  73. package/dist/datetime/index.d.ts.map +1 -0
  74. package/dist/email/index.d.ts.map +1 -0
  75. package/dist/fake/index.d.ts.map +1 -0
  76. package/dist/file/index.d.ts.map +1 -0
  77. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  78. package/dist/lock/core/index.d.ts.map +1 -0
  79. package/dist/lock/{index.js → core/index.js} +5 -5
  80. package/dist/lock/core/index.js.map +1 -0
  81. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  82. package/dist/lock/redis/index.d.ts.map +1 -0
  83. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  84. package/dist/lock/redis/index.js.map +1 -0
  85. package/dist/logger/index.d.ts +1 -0
  86. package/dist/logger/index.d.ts.map +1 -0
  87. package/dist/mcp/index.d.ts +820 -0
  88. package/dist/mcp/index.d.ts.map +1 -0
  89. package/dist/mcp/index.js +978 -0
  90. package/dist/mcp/index.js.map +1 -0
  91. package/dist/orm/index.d.ts +180 -107
  92. package/dist/orm/index.d.ts.map +1 -0
  93. package/dist/orm/index.js +260 -174
  94. package/dist/orm/index.js.map +1 -1
  95. package/dist/queue/core/index.d.ts +548 -0
  96. package/dist/queue/core/index.d.ts.map +1 -0
  97. package/dist/queue/core/index.js +391 -0
  98. package/dist/queue/core/index.js.map +1 -0
  99. package/dist/queue/redis/index.d.ts +28 -0
  100. package/dist/queue/redis/index.d.ts.map +1 -0
  101. package/dist/queue/redis/index.js +43 -0
  102. package/dist/queue/redis/index.js.map +1 -0
  103. package/dist/redis/index.d.ts.map +1 -0
  104. package/dist/retry/index.d.ts.map +1 -0
  105. package/dist/router/index.d.ts.map +1 -0
  106. package/dist/scheduler/index.d.ts +1 -1
  107. package/dist/scheduler/index.d.ts.map +1 -0
  108. package/dist/scheduler/index.js +1 -393
  109. package/dist/scheduler/index.js.map +1 -1
  110. package/dist/security/index.d.ts +1 -1
  111. package/dist/security/index.d.ts.map +1 -0
  112. package/dist/security/index.js +2 -1413
  113. package/dist/security/index.js.map +1 -1
  114. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  115. package/dist/server/auth/index.browser.js.map +1 -0
  116. package/dist/{server-auth → server/auth}/index.d.ts +167 -167
  117. package/dist/server/auth/index.d.ts.map +1 -0
  118. package/dist/server/auth/index.js +742 -0
  119. package/dist/server/auth/index.js.map +1 -0
  120. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  121. package/dist/server/cache/index.d.ts.map +1 -0
  122. package/dist/{server-cache → server/cache}/index.js +2 -2
  123. package/dist/server/cache/index.js.map +1 -0
  124. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  125. package/dist/server/compress/index.d.ts.map +1 -0
  126. package/dist/{server-compress → server/compress}/index.js +2 -2
  127. package/dist/server/compress/index.js.map +1 -0
  128. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  129. package/dist/server/cookies/index.browser.js.map +1 -0
  130. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  131. package/dist/server/cookies/index.d.ts.map +1 -0
  132. package/dist/{server-cookies → server/cookies}/index.js +4 -4
  133. package/dist/server/cookies/index.js.map +1 -0
  134. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  135. package/dist/server/core/index.browser.js.map +1 -0
  136. package/dist/server/{index.d.ts → core/index.d.ts} +36 -36
  137. package/dist/server/core/index.d.ts.map +1 -0
  138. package/dist/server/{index.js → core/index.js} +27 -27
  139. package/dist/server/core/index.js.map +1 -0
  140. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  141. package/dist/server/cors/index.d.ts.map +1 -0
  142. package/dist/{server-cors → server/cors}/index.js +3 -3
  143. package/dist/server/cors/index.js.map +1 -0
  144. package/dist/{server-health → server/health}/index.d.ts +3 -3
  145. package/dist/server/health/index.d.ts.map +1 -0
  146. package/dist/{server-health → server/health}/index.js +3 -3
  147. package/dist/server/health/index.js.map +1 -0
  148. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  149. package/dist/server/helmet/index.d.ts.map +1 -0
  150. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  151. package/dist/server/helmet/index.js.map +1 -0
  152. package/dist/{server-links → server/links}/index.browser.js +5 -5
  153. package/dist/server/links/index.browser.js.map +1 -0
  154. package/dist/{server-links → server/links}/index.d.ts +40 -40
  155. package/dist/server/links/index.d.ts.map +1 -0
  156. package/dist/{server-links → server/links}/index.js +7 -7
  157. package/dist/server/links/index.js.map +1 -0
  158. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  159. package/dist/server/metrics/index.d.ts.map +1 -0
  160. package/dist/server/metrics/index.js +74 -0
  161. package/dist/server/metrics/index.js.map +1 -0
  162. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  163. package/dist/server/multipart/index.d.ts.map +1 -0
  164. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  165. package/dist/server/multipart/index.js.map +1 -0
  166. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  167. package/dist/server/proxy/index.d.ts.map +1 -0
  168. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  169. package/dist/server/proxy/index.js.map +1 -0
  170. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  171. package/dist/server/rate-limit/index.d.ts.map +1 -0
  172. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  173. package/dist/server/rate-limit/index.js.map +1 -0
  174. package/dist/{server-security → server/security}/index.browser.js +1 -1
  175. package/dist/server/security/index.browser.js.map +1 -0
  176. package/dist/{server-security → server/security}/index.d.ts +4 -4
  177. package/dist/server/security/index.d.ts.map +1 -0
  178. package/dist/{server-security → server/security}/index.js +4 -4
  179. package/dist/server/security/index.js.map +1 -0
  180. package/dist/{server-static → server/static}/index.d.ts +3 -3
  181. package/dist/server/static/index.d.ts.map +1 -0
  182. package/dist/{server-static → server/static}/index.js +3 -3
  183. package/dist/server/static/index.js.map +1 -0
  184. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  185. package/dist/server/swagger/index.d.ts.map +1 -0
  186. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  187. package/dist/server/swagger/index.js.map +1 -0
  188. package/dist/sms/index.d.ts.map +1 -0
  189. package/dist/thread/index.d.ts.map +1 -0
  190. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  191. package/dist/topic/core/index.d.ts.map +1 -0
  192. package/dist/topic/{index.js → core/index.js} +6 -6
  193. package/dist/topic/core/index.js.map +1 -0
  194. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  195. package/dist/topic/redis/index.d.ts.map +1 -0
  196. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  197. package/dist/topic/redis/index.js.map +1 -0
  198. package/dist/vite/index.d.ts +21 -2
  199. package/dist/vite/index.d.ts.map +1 -0
  200. package/dist/vite/index.js +48 -19
  201. package/dist/vite/index.js.map +1 -1
  202. package/dist/websocket/index.d.ts.map +1 -0
  203. package/package.json +162 -158
  204. package/src/{api-files → api/files}/index.ts +1 -0
  205. package/src/{api-parameters → api/parameters}/index.ts +1 -1
  206. package/src/{api-users → api/users}/primitives/$userRealm.ts +1 -1
  207. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +6 -7
  208. package/src/{api-verifications → api/verifications}/index.ts +2 -0
  209. package/src/cli/apps/AlephaCli.ts +2 -0
  210. package/src/cli/apps/AlephaPackageBuilderCli.ts +83 -54
  211. package/src/cli/assets/appRouterTs.ts +1 -1
  212. package/src/cli/assets/biomeJson.ts +1 -1
  213. package/src/cli/assets/indexHtml.ts +1 -1
  214. package/src/cli/assets/mainBrowserTs.ts +1 -1
  215. package/src/cli/assets/mainTs.ts +9 -10
  216. package/src/cli/assets/viteConfigTs.ts +1 -1
  217. package/src/cli/commands/ChangelogCommands.ts +389 -0
  218. package/src/cli/commands/CoreCommands.ts +10 -6
  219. package/src/cli/commands/DrizzleCommands.ts +204 -4
  220. package/src/cli/commands/VerifyCommands.ts +4 -1
  221. package/src/cli/commands/ViteCommands.ts +46 -25
  222. package/src/cli/services/AlephaCliUtils.ts +52 -164
  223. package/src/command/providers/CliProvider.ts +76 -5
  224. package/src/core/providers/SchemaValidator.ts +24 -2
  225. package/src/mcp/errors/McpError.ts +72 -0
  226. package/src/mcp/helpers/jsonrpc.ts +163 -0
  227. package/src/mcp/index.ts +132 -0
  228. package/src/mcp/interfaces/McpTypes.ts +248 -0
  229. package/src/mcp/primitives/$prompt.ts +188 -0
  230. package/src/mcp/primitives/$resource.ts +171 -0
  231. package/src/mcp/primitives/$tool.ts +285 -0
  232. package/src/mcp/providers/McpServerProvider.ts +382 -0
  233. package/src/mcp/transports/SseMcpTransport.ts +172 -0
  234. package/src/mcp/transports/StdioMcpTransport.ts +126 -0
  235. package/src/orm/index.ts +12 -0
  236. package/src/orm/providers/drivers/CloudflareD1Provider.ts +164 -0
  237. package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -1
  238. package/src/queue/{index.ts → core/index.ts} +2 -3
  239. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  240. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  241. package/src/queue/core/providers/QueueProvider.ts +23 -0
  242. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  243. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  244. package/src/server/{index.ts → core/index.ts} +1 -0
  245. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  246. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  247. package/src/vite/plugins/viteAlephaBuild.ts +8 -2
  248. package/src/vite/plugins/viteAlephaDev.ts +6 -2
  249. package/src/vite/tasks/buildServer.ts +1 -1
  250. package/src/vite/tasks/copyAssets.ts +32 -8
  251. package/src/vite/tasks/generateCloudflare.ts +43 -15
  252. package/src/vite/tasks/runAlepha.ts +1 -0
  253. package/dist/api-audits/index.browser.js.map +0 -1
  254. package/dist/api-audits/index.js.map +0 -1
  255. package/dist/api-files/index.browser.js.map +0 -1
  256. package/dist/api-files/index.js.map +0 -1
  257. package/dist/api-jobs/index.browser.js.map +0 -1
  258. package/dist/api-jobs/index.js.map +0 -1
  259. package/dist/api-notifications/index.browser.js.map +0 -1
  260. package/dist/api-notifications/index.d.ts +0 -327
  261. package/dist/api-notifications/index.js.map +0 -1
  262. package/dist/api-parameters/index.browser.js.map +0 -1
  263. package/dist/api-parameters/index.js.map +0 -1
  264. package/dist/api-users/index.browser.js.map +0 -1
  265. package/dist/api-users/index.js.map +0 -1
  266. package/dist/api-verifications/index.browser.js.map +0 -1
  267. package/dist/api-verifications/index.d.ts +0 -229
  268. package/dist/api-verifications/index.js.map +0 -1
  269. package/dist/cache/index.js.map +0 -1
  270. package/dist/cache-redis/index.js.map +0 -1
  271. package/dist/lock/index.js.map +0 -1
  272. package/dist/lock-redis/index.js.map +0 -1
  273. package/dist/queue/index.d.ts +0 -1265
  274. package/dist/queue/index.js +0 -1037
  275. package/dist/queue/index.js.map +0 -1
  276. package/dist/queue-redis/index.d.ts +0 -82
  277. package/dist/queue-redis/index.js +0 -872
  278. package/dist/queue-redis/index.js.map +0 -1
  279. package/dist/server/index.browser.js.map +0 -1
  280. package/dist/server/index.js.map +0 -1
  281. package/dist/server-auth/index.browser.js.map +0 -1
  282. package/dist/server-auth/index.js +0 -1973
  283. package/dist/server-auth/index.js.map +0 -1
  284. package/dist/server-cache/index.js.map +0 -1
  285. package/dist/server-compress/index.js.map +0 -1
  286. package/dist/server-cookies/index.browser.js.map +0 -1
  287. package/dist/server-cookies/index.js.map +0 -1
  288. package/dist/server-cors/index.js.map +0 -1
  289. package/dist/server-health/index.js.map +0 -1
  290. package/dist/server-helmet/index.js.map +0 -1
  291. package/dist/server-links/index.browser.js.map +0 -1
  292. package/dist/server-links/index.js.map +0 -1
  293. package/dist/server-metrics/index.js +0 -4532
  294. package/dist/server-metrics/index.js.map +0 -1
  295. package/dist/server-multipart/index.js.map +0 -1
  296. package/dist/server-proxy/index.js.map +0 -1
  297. package/dist/server-rate-limit/index.js.map +0 -1
  298. package/dist/server-security/index.browser.js.map +0 -1
  299. package/dist/server-security/index.js.map +0 -1
  300. package/dist/server-static/index.js.map +0 -1
  301. package/dist/server-swagger/index.js.map +0 -1
  302. package/dist/topic/index.js.map +0 -1
  303. package/dist/topic-redis/index.js.map +0 -1
  304. package/src/queue/interfaces/QueueJob.ts +0 -459
  305. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  306. package/src/queue/providers/QueueProvider.ts +0 -319
  307. package/src/queue/providers/WorkerProvider.ts +0 -344
  308. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  309. /package/src/{api-audits → api/audits}/controllers/AuditController.ts +0 -0
  310. /package/src/{api-audits → api/audits}/entities/audits.ts +0 -0
  311. /package/src/{api-audits → api/audits}/index.browser.ts +0 -0
  312. /package/src/{api-audits → api/audits}/index.ts +0 -0
  313. /package/src/{api-audits → api/audits}/primitives/$audit.ts +0 -0
  314. /package/src/{api-audits → api/audits}/schemas/auditQuerySchema.ts +0 -0
  315. /package/src/{api-audits → api/audits}/schemas/auditResourceSchema.ts +0 -0
  316. /package/src/{api-audits → api/audits}/schemas/createAuditSchema.ts +0 -0
  317. /package/src/{api-audits → api/audits}/services/AuditService.ts +0 -0
  318. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  319. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  320. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  321. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  322. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  323. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  324. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  325. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  326. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  327. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  328. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  329. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  330. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  331. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  332. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  333. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  334. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  335. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  336. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  337. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  338. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  339. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  340. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  341. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  342. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  343. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  344. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  345. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  346. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  347. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  348. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  349. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  350. /package/src/{api-parameters → api/parameters}/controllers/ConfigController.ts +0 -0
  351. /package/src/{api-parameters → api/parameters}/entities/parameters.ts +0 -0
  352. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  353. /package/src/{api-parameters → api/parameters}/primitives/$config.ts +0 -0
  354. /package/src/{api-parameters → api/parameters}/schedulers/ConfigActivationScheduler.ts +0 -0
  355. /package/src/{api-parameters → api/parameters}/services/ConfigStore.ts +0 -0
  356. /package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +0 -0
  357. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  358. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  359. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  360. /package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -0
  361. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  362. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  363. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  364. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  365. /package/src/{api-users → api/users}/index.ts +0 -0
  366. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  367. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  368. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  369. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  370. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  371. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  372. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  373. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  374. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  375. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  376. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  377. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  378. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  379. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  380. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  381. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  382. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  383. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  384. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  385. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  386. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  387. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  388. /package/src/{api-users → api/users}/services/RegistrationService.ts +0 -0
  389. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  390. /package/src/{api-users → api/users}/services/SessionService.ts +0 -0
  391. /package/src/{api-users → api/users}/services/UserService.ts +0 -0
  392. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  393. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  394. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  395. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  396. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  397. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  398. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  399. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  400. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  401. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  402. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  403. /package/src/cache/{index.ts → core/index.ts} +0 -0
  404. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  405. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  406. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  407. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  408. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  409. /package/src/lock/{index.ts → core/index.ts} +0 -0
  410. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  411. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  412. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  413. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  414. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  415. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  416. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  417. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  418. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  419. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  420. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  421. /package/src/{server-auth → server/auth}/index.ts +0 -0
  422. /package/src/{server-auth → server/auth}/primitives/$auth.ts +0 -0
  423. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  424. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  425. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  426. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  427. /package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +0 -0
  428. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  429. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  430. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  431. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  432. /package/src/{server-cache → server/cache}/index.ts +0 -0
  433. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  434. /package/src/{server-compress → server/compress}/index.ts +0 -0
  435. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  436. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  437. /package/src/{server-cookies → server/cookies}/index.ts +0 -0
  438. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  439. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  440. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  441. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  442. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  443. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  444. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  445. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  446. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  447. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  448. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  449. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  450. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  451. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  452. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  453. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  454. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  455. /package/src/server/{primitives → core/primitives}/$action.ts +0 -0
  456. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  457. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  458. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  459. /package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +0 -0
  460. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  461. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  462. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  463. /package/src/server/{providers → core/providers}/ServerRouterProvider.ts +0 -0
  464. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  465. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  466. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  467. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  468. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  469. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  470. /package/src/{server-cors → server/cors}/index.ts +0 -0
  471. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  472. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  473. /package/src/{server-health → server/health}/index.ts +0 -0
  474. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  475. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  476. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  477. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  478. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  479. /package/src/{server-links → server/links}/index.ts +0 -0
  480. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  481. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  482. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  483. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  484. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  485. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  486. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  487. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  488. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  489. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  490. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  491. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  492. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  493. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  494. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  495. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  496. /package/src/{server-security → server/security}/index.ts +0 -0
  497. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  498. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  499. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  500. /package/src/{server-static → server/static}/index.ts +0 -0
  501. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  502. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  503. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  504. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  505. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  506. /package/src/topic/{index.ts → core/index.ts} +0 -0
  507. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  508. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  509. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  510. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  511. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  512. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
@@ -5,7 +5,6 @@ import { $inject, Alepha, AlephaError } from "alepha";
5
5
  import type { RunnerMethod } from "alepha/command";
6
6
  import { FileSystemProvider } from "alepha/file";
7
7
  import { $logger } from "alepha/logger";
8
- import type { DrizzleKitProvider, RepositoryProvider } from "alepha/orm";
9
8
  import { boot } from "alepha/vite";
10
9
  import { tsImport } from "tsx/esm/api";
11
10
  import { appRouterTs } from "../assets/appRouterTs.ts";
@@ -196,6 +195,14 @@ export class AlephaCliUtils {
196
195
 
197
196
  const devDependencies: Record<string, string> = {};
198
197
 
198
+ const scripts: Record<string, string> = {
199
+ dev: "alepha dev",
200
+ build: "alepha build",
201
+ lint: "alepha lint",
202
+ typecheck: "alepha typecheck",
203
+ verify: "alepha verify",
204
+ };
205
+
199
206
  if (modes.ui) {
200
207
  dependencies["@alepha/ui"] = `^${version}`;
201
208
  modes.react = true;
@@ -212,11 +219,7 @@ export class AlephaCliUtils {
212
219
  type: "module",
213
220
  dependencies,
214
221
  devDependencies,
215
- scripts: {
216
- dev: "alepha dev",
217
- build: "alepha build",
218
- verify: "alepha verify",
219
- },
222
+ scripts,
220
223
  };
221
224
  }
222
225
 
@@ -234,16 +237,14 @@ export class AlephaCliUtils {
234
237
  public async ensurePackageJson(
235
238
  root: string,
236
239
  modes: DependencyModes,
237
- ): Promise<void> {
240
+ ): Promise<object> {
238
241
  const packageJsonPath = join(root, "package.json");
239
242
  try {
240
243
  await access(packageJsonPath);
241
244
  } catch (error) {
242
- await writeFile(
243
- packageJsonPath,
244
- JSON.stringify(this.generatePackageJsonContent(modes), null, 2),
245
- );
246
- return;
245
+ const obj = this.generatePackageJsonContent(modes);
246
+ await writeFile(packageJsonPath, JSON.stringify(obj, null, 2));
247
+ return obj;
247
248
  }
248
249
 
249
250
  const content = await readFile(packageJsonPath, "utf8");
@@ -261,6 +262,8 @@ export class AlephaCliUtils {
261
262
  Object.assign(packageJson.scripts, newPackageJson.scripts);
262
263
 
263
264
  await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
265
+
266
+ return packageJson;
264
267
  }
265
268
 
266
269
  public async ensureConfig(
@@ -273,8 +276,8 @@ export class AlephaCliUtils {
273
276
  biomeJson?: boolean;
274
277
  editorconfig?: boolean;
275
278
  },
276
- ) {
277
- const tasks: Promise<void>[] = [];
279
+ ): Promise<Array<void | object>> {
280
+ const tasks: Promise<void | object>[] = [];
278
281
 
279
282
  if (opts.packageJson) {
280
283
  tasks.push(
@@ -300,7 +303,7 @@ export class AlephaCliUtils {
300
303
  tasks.push(this.ensureEditorConfig(root));
301
304
  }
302
305
 
303
- await Promise.all(tasks);
306
+ return await Promise.all(tasks);
304
307
  }
305
308
 
306
309
  /**
@@ -491,159 +494,33 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
491
494
  }
492
495
 
493
496
  /**
494
- * Prepare Drizzle configuration files for a database provider.
495
- *
496
- * Creates temporary entities.js and drizzle.config.js files needed
497
- * for Drizzle Kit commands to run properly.
497
+ * Load environment variables from a .env file.
498
498
  *
499
- * @param options - Configuration options including kit, provider info, and paths
500
- * @returns Path to the generated drizzle.config.js file
499
+ * Reads the .env file in the specified root directory and sets
500
+ * the environment variables in process.env.
501
501
  */
502
- public async prepareDrizzleConfig(options: {
503
- kit: any;
504
- provider: any;
505
- providerName: string;
506
- providerUrl: string;
507
- dialect: string;
508
- entry: string;
509
- rootDir: string;
510
- }): Promise<string> {
511
- const models = Object.keys(options.kit.getModels(options.provider));
512
- const entitiesJs = this.generateEntitiesJs(
513
- options.entry,
514
- options.providerName,
515
- models,
516
- );
517
-
518
- const entitiesJsPath = await this.writeConfigFile(
519
- "entities.js",
520
- entitiesJs,
521
- options.rootDir,
522
- );
523
-
524
- const config: Record<string, any> = {
525
- schema: entitiesJsPath,
526
- out: `./migrations/${options.providerName}`,
527
- dialect: options.dialect,
528
- dbCredentials: {
529
- url: options.providerUrl,
530
- },
531
- };
532
-
533
- if (options.dialect === "sqlite") {
534
- let url = options.providerUrl;
535
- url = url.replace("sqlite://", "").replace("file://", "");
536
- url = join(options.rootDir, url);
537
-
538
- config.dbCredentials = {
539
- url,
540
- };
541
- }
542
-
543
- if (options.providerName === "pglite") {
544
- config.driver = "pglite";
545
- }
546
-
547
- const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;
548
-
549
- return await this.writeConfigFile(
550
- "drizzle.config.js",
551
- drizzleConfigJs,
552
- options.rootDir,
553
- );
554
- }
555
-
556
- public async loadEnvFile(root: string): Promise<void> {
557
- const envPath = join(root, ".env");
558
- try {
559
- const envContent = await readFile(envPath, "utf8");
560
- const lines = envContent.split("\n");
561
- for (const line of lines) {
562
- const [key, ...rest] = line.split("=");
563
- if (key) {
564
- const value = rest.join("=");
565
- process.env[key.trim()] = value.trim();
502
+ public async loadEnvFile(
503
+ root: string,
504
+ files: string[] = [".env"],
505
+ ): Promise<void> {
506
+ for (const it of files) {
507
+ for (const file of [it, `${it}.local`]) {
508
+ const envPath = join(root, file);
509
+ try {
510
+ const envContent = await readFile(envPath, "utf8");
511
+ const lines = envContent.split("\n");
512
+ for (const line of lines) {
513
+ const [key, ...rest] = line.split("=");
514
+ if (key) {
515
+ const value = rest.join("=");
516
+ process.env[key.trim()] = value.trim();
517
+ }
518
+ }
519
+ this.log.debug(`Loaded environment variables from ${envPath}`);
520
+ } catch {
521
+ this.log.debug(`No ${file} file found at ${envPath}, skipping load.`);
566
522
  }
567
523
  }
568
- this.log.debug(`Loaded environment variables from ${envPath}`);
569
- } catch {
570
- this.log.debug(`No .env file found at ${envPath}, skipping load.`);
571
- }
572
- }
573
-
574
- /**
575
- * Run a drizzle-kit command for all database providers in an Alepha instance.
576
- *
577
- * Iterates through all repository providers, prepares Drizzle config for each,
578
- * and executes the specified drizzle-kit command.
579
- *
580
- * @param options - Configuration including command to run, flags, and logging
581
- */
582
- public async runDrizzleKitCommand(options: {
583
- root: string;
584
- args?: string;
585
- command: string;
586
- commandFlags?: string;
587
- provider?: string;
588
- logMessage: (providerName: string, dialect: string) => string;
589
- }): Promise<void> {
590
- const rootDir = options.root;
591
-
592
- await this.loadEnvFile(rootDir);
593
-
594
- this.log.debug(`Using project root: ${rootDir}`);
595
-
596
- const { alepha, entry } = await this.loadAlephaFromServerEntryFile(
597
- rootDir,
598
- options.args,
599
- );
600
-
601
- const drizzleKitProvider =
602
- alepha.inject<DrizzleKitProvider>("DrizzleKitProvider");
603
- const repositoryProvider =
604
- alepha.inject<RepositoryProvider>("RepositoryProvider");
605
- const accepted = new Set<string>([]);
606
-
607
- for (const primitive of repositoryProvider.getRepositories()) {
608
- const provider = primitive.provider;
609
- const providerName = provider.name;
610
- const dialect = provider.dialect;
611
-
612
- if (accepted.has(providerName)) {
613
- continue;
614
- }
615
- accepted.add(providerName);
616
-
617
- // Skip if provider filter is set and doesn't match
618
- if (options.provider && options.provider !== providerName) {
619
- this.log.debug(
620
- `Skipping provider '${providerName}' (filter: ${options.provider})`,
621
- );
622
- continue;
623
- }
624
-
625
- this.log.info("");
626
- this.log.info(options.logMessage(providerName, dialect));
627
-
628
- const drizzleConfigJsPath = await this.prepareDrizzleConfig({
629
- kit: drizzleKitProvider,
630
- provider,
631
- providerName,
632
- providerUrl: provider.url,
633
- dialect,
634
- entry,
635
- rootDir,
636
- });
637
-
638
- const flags = options.commandFlags ? ` ${options.commandFlags}` : "";
639
- await this.exec(
640
- `drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`,
641
- {
642
- env: {
643
- NODE_OPTIONS: "--import tsx",
644
- },
645
- },
646
- );
647
524
  }
648
525
  }
649
526
 
@@ -789,6 +666,16 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
789
666
  }
790
667
  }
791
668
 
669
+ /**
670
+ * Check if Expo is present in the project.
671
+ *
672
+ * @param root - The root directory of the project
673
+ * @returns True if expo is in dependencies or devDependencies
674
+ */
675
+ async hasExpo(root: string): Promise<boolean> {
676
+ return this.hasDependency(root, "expo");
677
+ }
678
+
792
679
  /**
793
680
  * Install a dependency if it's missing from the project.
794
681
  *
@@ -839,4 +726,5 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
839
726
  export interface DependencyModes {
840
727
  react?: boolean;
841
728
  ui?: boolean;
729
+ expo?: boolean;
842
730
  }
@@ -146,6 +146,7 @@ export class CliProvider {
146
146
  argv,
147
147
  command.options.args,
148
148
  command.name === "",
149
+ command.flags,
149
150
  );
150
151
 
151
152
  await this.alepha.context.run(async () => {
@@ -297,9 +298,12 @@ export class CliProvider {
297
298
  ): Record<string, any> {
298
299
  const result: Record<string, any> = {};
299
300
 
300
- for (const arg of argv.filter((a) => a.startsWith("-"))) {
301
+ for (let i = 0; i < argv.length; i++) {
302
+ const arg = argv[i];
303
+ if (!arg.startsWith("-")) continue;
304
+
301
305
  const [rawKey, ...valueParts] = arg.replace(/^-{1,2}/, "").split("=");
302
- const value = valueParts.join("=");
306
+ let value = valueParts.join("=");
303
307
 
304
308
  const def = flagDefs.find((d) => d.aliases.includes(rawKey));
305
309
  if (!def) continue;
@@ -307,6 +311,7 @@ export class CliProvider {
307
311
  if (t.schema.isBoolean(def.schema)) {
308
312
  result[def.key] = true;
309
313
  } else if (value) {
314
+ // Value provided via --flag=value syntax
310
315
  try {
311
316
  if (t.schema.isObject(def.schema) || t.schema.isArray(def.schema)) {
312
317
  result[def.key] = JSON.parse(value);
@@ -317,24 +322,90 @@ export class CliProvider {
317
322
  throw new CommandError(`Invalid JSON value for flag --${rawKey}`);
318
323
  }
319
324
  } else {
320
- throw new CommandError(`Flag --${rawKey} requires a value.`);
325
+ // Check for space-separated value: --flag value
326
+ const nextArg = argv[i + 1];
327
+ if (nextArg && !nextArg.startsWith("-")) {
328
+ value = nextArg;
329
+ try {
330
+ if (t.schema.isObject(def.schema) || t.schema.isArray(def.schema)) {
331
+ result[def.key] = JSON.parse(value);
332
+ } else {
333
+ result[def.key] = value;
334
+ }
335
+ } catch {
336
+ throw new CommandError(`Invalid JSON value for flag --${rawKey}`);
337
+ }
338
+ } else {
339
+ throw new CommandError(`Flag --${rawKey} requires a value.`);
340
+ }
321
341
  }
322
342
  }
323
343
 
324
344
  return result;
325
345
  }
326
346
 
347
+ /**
348
+ * Get indices of argv elements that are consumed by flags (including space-separated values).
349
+ */
350
+ protected getFlagConsumedIndices(
351
+ argv: string[],
352
+ flagDefs: { key: string; aliases: string[]; schema: TSchema }[],
353
+ ): Set<number> {
354
+ const consumed = new Set<number>();
355
+
356
+ for (let i = 0; i < argv.length; i++) {
357
+ const arg = argv[i];
358
+ if (!arg.startsWith("-")) continue;
359
+
360
+ consumed.add(i);
361
+
362
+ const [rawKey, ...valueParts] = arg.replace(/^-{1,2}/, "").split("=");
363
+ const hasEqualValue = valueParts.length > 0;
364
+
365
+ const def = flagDefs.find((d) => d.aliases.includes(rawKey));
366
+ if (!def) continue;
367
+
368
+ // If not a boolean flag and no = value, the next arg is consumed as the value
369
+ if (!t.schema.isBoolean(def.schema) && !hasEqualValue) {
370
+ const nextArg = argv[i + 1];
371
+ if (nextArg && !nextArg.startsWith("-")) {
372
+ consumed.add(i + 1);
373
+ }
374
+ }
375
+ }
376
+
377
+ return consumed;
378
+ }
379
+
327
380
  protected parseCommandArgs(
328
381
  argv: string[],
329
382
  schema?: TSchema,
330
383
  isRootCommand = false,
384
+ flagSchema?: TObject,
331
385
  ): any {
332
386
  if (!schema) {
333
387
  return undefined;
334
388
  }
335
389
 
336
- // Extract positional arguments (non-flag arguments)
337
- const positionalArgs = argv.filter((arg) => !arg.startsWith("-"));
390
+ // Get indices consumed by flags (including space-separated values)
391
+ const flagDefs = flagSchema
392
+ ? Object.entries(flagSchema.properties).map(([key, value]) => ({
393
+ key,
394
+ aliases: [
395
+ key,
396
+ ...((value as any).aliases ??
397
+ ((value as any).alias ? [(value as any).alias] : undefined) ??
398
+ []),
399
+ ],
400
+ schema: value as TSchema,
401
+ }))
402
+ : [];
403
+ const consumedIndices = this.getFlagConsumedIndices(argv, flagDefs);
404
+
405
+ // Extract positional arguments (non-flag arguments that aren't consumed as flag values)
406
+ const positionalArgs = argv.filter(
407
+ (arg, idx) => !arg.startsWith("-") && !consumedIndices.has(idx),
408
+ );
338
409
  // For root commands, there's no command name to remove; otherwise slice off the command name
339
410
  const argsOnly = isRootCommand ? positionalArgs : positionalArgs.slice(1);
340
411
 
@@ -1,10 +1,12 @@
1
1
  import type { TSchema } from "typebox";
2
2
  import { Compile, type Validator } from "typebox/compile";
3
3
  import { TypeBoxError } from "../errors/TypeBoxError.ts";
4
- import type { Static } from "./TypeProvider.ts";
4
+ import { $hook } from "../primitives/$hook.ts";
5
+ import { type Static, t, Value } from "./TypeProvider.ts";
5
6
 
6
7
  export class SchemaValidator {
7
8
  protected cache = new Map<TSchema, Validator>();
9
+ protected useEval: boolean = true;
8
10
 
9
11
  /**
10
12
  * Validate the value against the provided schema.
@@ -23,7 +25,11 @@ export class SchemaValidator {
23
25
  });
24
26
 
25
27
  try {
26
- return this.getValidator(schema).Parse(newValue);
28
+ //
29
+ if (!this.useEval) {
30
+ return Value.Parse(schema, newValue);
31
+ }
32
+ return this.getValidator(schema).Parse(newValue) as Static<T>;
27
33
  } catch (error: any) {
28
34
  if (error.cause?.errors?.[0]) {
29
35
  throw new TypeBoxError(error.cause.errors[0]);
@@ -130,6 +136,22 @@ export class SchemaValidator {
130
136
  }
131
137
  return false;
132
138
  };
139
+
140
+ protected onConfigure = $hook({
141
+ on: "configure",
142
+ handler: () => {
143
+ this.useEval = this.canEval();
144
+ },
145
+ });
146
+
147
+ protected canEval(): boolean {
148
+ try {
149
+ Compile(t.object({ test: t.string() })).Parse({ test: "value" });
150
+ return true;
151
+ } catch {
152
+ return false;
153
+ }
154
+ }
133
155
  }
134
156
 
135
157
  export interface ValidateOptions {
@@ -0,0 +1,72 @@
1
+ import { JsonRpcErrorCodes } from "../helpers/jsonrpc.ts";
2
+
3
+ // ---------------------------------------------------------------------------------------------------------------------
4
+
5
+ export class McpError extends Error {
6
+ name = "McpError";
7
+ code: number;
8
+
9
+ constructor(
10
+ message: string,
11
+ code: number = JsonRpcErrorCodes.INTERNAL_ERROR,
12
+ ) {
13
+ super(message);
14
+ this.code = code;
15
+ }
16
+ }
17
+
18
+ // ---------------------------------------------------------------------------------------------------------------------
19
+
20
+ export class McpMethodNotFoundError extends McpError {
21
+ name = "McpMethodNotFoundError";
22
+
23
+ constructor(method: string) {
24
+ super(`Method not found: ${method}`, JsonRpcErrorCodes.METHOD_NOT_FOUND);
25
+ }
26
+ }
27
+
28
+ // ---------------------------------------------------------------------------------------------------------------------
29
+
30
+ export class McpToolNotFoundError extends McpError {
31
+ name = "McpToolNotFoundError";
32
+ tool: string;
33
+
34
+ constructor(tool: string) {
35
+ super(`Tool not found: ${tool}`, JsonRpcErrorCodes.METHOD_NOT_FOUND);
36
+ this.tool = tool;
37
+ }
38
+ }
39
+
40
+ // ---------------------------------------------------------------------------------------------------------------------
41
+
42
+ export class McpResourceNotFoundError extends McpError {
43
+ name = "McpResourceNotFoundError";
44
+ uri: string;
45
+
46
+ constructor(uri: string) {
47
+ super(`Resource not found: ${uri}`, JsonRpcErrorCodes.METHOD_NOT_FOUND);
48
+ this.uri = uri;
49
+ }
50
+ }
51
+
52
+ // ---------------------------------------------------------------------------------------------------------------------
53
+
54
+ export class McpPromptNotFoundError extends McpError {
55
+ name = "McpPromptNotFoundError";
56
+ prompt: string;
57
+
58
+ constructor(prompt: string) {
59
+ super(`Prompt not found: ${prompt}`, JsonRpcErrorCodes.METHOD_NOT_FOUND);
60
+ this.prompt = prompt;
61
+ }
62
+ }
63
+
64
+ // ---------------------------------------------------------------------------------------------------------------------
65
+
66
+ export class McpInvalidParamsError extends McpError {
67
+ name = "McpInvalidParamsError";
68
+
69
+ constructor(message: string) {
70
+ super(message, JsonRpcErrorCodes.INVALID_PARAMS);
71
+ }
72
+ }
@@ -0,0 +1,163 @@
1
+ import { AlephaError } from "alepha";
2
+ import type {
3
+ JsonRpcError,
4
+ JsonRpcNotification,
5
+ JsonRpcRequest,
6
+ JsonRpcResponse,
7
+ } from "../interfaces/McpTypes.ts";
8
+
9
+ // ---------------------------------------------------------------------------------------------------------------------
10
+ // Constants
11
+ // ---------------------------------------------------------------------------------------------------------------------
12
+
13
+ export const JSONRPC_VERSION = "2.0" as const;
14
+
15
+ export const MCP_PROTOCOL_VERSION = "2024-11-05" as const;
16
+
17
+ export const JsonRpcErrorCodes = {
18
+ PARSE_ERROR: -32700,
19
+ INVALID_REQUEST: -32600,
20
+ METHOD_NOT_FOUND: -32601,
21
+ INVALID_PARAMS: -32602,
22
+ INTERNAL_ERROR: -32603,
23
+ } as const;
24
+
25
+ // ---------------------------------------------------------------------------------------------------------------------
26
+ // Response Builders
27
+ // ---------------------------------------------------------------------------------------------------------------------
28
+
29
+ export function createResponse(
30
+ id: string | number,
31
+ result: unknown,
32
+ ): JsonRpcResponse {
33
+ return {
34
+ jsonrpc: JSONRPC_VERSION,
35
+ id,
36
+ result,
37
+ };
38
+ }
39
+
40
+ export function createErrorResponse(
41
+ id: string | number,
42
+ error: JsonRpcError,
43
+ ): JsonRpcResponse {
44
+ return {
45
+ jsonrpc: JSONRPC_VERSION,
46
+ id,
47
+ error,
48
+ };
49
+ }
50
+
51
+ export function createNotification(
52
+ method: string,
53
+ params?: Record<string, unknown>,
54
+ ): JsonRpcNotification {
55
+ return {
56
+ jsonrpc: JSONRPC_VERSION,
57
+ method,
58
+ params,
59
+ };
60
+ }
61
+
62
+ // ---------------------------------------------------------------------------------------------------------------------
63
+ // Error Builders
64
+ // ---------------------------------------------------------------------------------------------------------------------
65
+
66
+ export function createParseError(message = "Parse error"): JsonRpcError {
67
+ return {
68
+ code: JsonRpcErrorCodes.PARSE_ERROR,
69
+ message,
70
+ };
71
+ }
72
+
73
+ export function createInvalidRequestError(
74
+ message = "Invalid request",
75
+ ): JsonRpcError {
76
+ return {
77
+ code: JsonRpcErrorCodes.INVALID_REQUEST,
78
+ message,
79
+ };
80
+ }
81
+
82
+ export function createMethodNotFoundError(method: string): JsonRpcError {
83
+ return {
84
+ code: JsonRpcErrorCodes.METHOD_NOT_FOUND,
85
+ message: `Method not found: ${method}`,
86
+ };
87
+ }
88
+
89
+ export function createInvalidParamsError(message: string): JsonRpcError {
90
+ return {
91
+ code: JsonRpcErrorCodes.INVALID_PARAMS,
92
+ message,
93
+ };
94
+ }
95
+
96
+ export function createInternalError(message: string): JsonRpcError {
97
+ return {
98
+ code: JsonRpcErrorCodes.INTERNAL_ERROR,
99
+ message,
100
+ };
101
+ }
102
+
103
+ // ---------------------------------------------------------------------------------------------------------------------
104
+ // Message Parsing
105
+ // ---------------------------------------------------------------------------------------------------------------------
106
+
107
+ export function parseMessage(data: string): JsonRpcRequest {
108
+ let parsed: unknown;
109
+
110
+ try {
111
+ parsed = JSON.parse(data);
112
+ } catch {
113
+ throw new JsonRpcParseError("Invalid JSON");
114
+ }
115
+
116
+ if (!isValidJsonRpcRequest(parsed)) {
117
+ throw new JsonRpcParseError("Invalid JSON-RPC request");
118
+ }
119
+
120
+ return parsed;
121
+ }
122
+
123
+ export function isValidJsonRpcRequest(value: unknown): value is JsonRpcRequest {
124
+ if (typeof value !== "object" || value === null) {
125
+ return false;
126
+ }
127
+
128
+ const obj = value as Record<string, unknown>;
129
+
130
+ if (obj.jsonrpc !== JSONRPC_VERSION) {
131
+ return false;
132
+ }
133
+
134
+ if (typeof obj.method !== "string") {
135
+ return false;
136
+ }
137
+
138
+ if (
139
+ obj.id !== undefined &&
140
+ typeof obj.id !== "string" &&
141
+ typeof obj.id !== "number"
142
+ ) {
143
+ return false;
144
+ }
145
+
146
+ if (obj.params !== undefined && typeof obj.params !== "object") {
147
+ return false;
148
+ }
149
+
150
+ return true;
151
+ }
152
+
153
+ export function isNotification(request: JsonRpcRequest): boolean {
154
+ return request.id === undefined;
155
+ }
156
+
157
+ // ---------------------------------------------------------------------------------------------------------------------
158
+ // Errors
159
+ // ---------------------------------------------------------------------------------------------------------------------
160
+
161
+ export class JsonRpcParseError extends AlephaError {
162
+ name = "JsonRpcParseError";
163
+ }