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
@@ -37,8 +37,10 @@ export class AlephaPackageBuilderCli {
37
37
  pkgData.exports = {};
38
38
 
39
39
  for (const item of modules) {
40
- const path =
41
- item.name === "core" ? "." : `./${item.name.replace("-", "/")}`;
40
+ let m = `./${item.name.replace("core", "")}`;
41
+ if (m.endsWith("/")) m = m.slice(0, -1);
42
+ const path = m;
43
+
42
44
  pkgData.exports[path] = {};
43
45
  // order is important here for compatibility
44
46
  pkgData.exports[path].types = `./src/${item.name}/index.ts`;
@@ -77,13 +79,14 @@ export class AlephaPackageBuilderCli {
77
79
  JSON.stringify(modules, null, 2),
78
80
  );
79
81
 
80
- const external = [
81
- "alepha",
82
- packageName,
83
- ...modules.map(
84
- (item) => `${packageName}/${item.name.replace("-", "/")}`,
85
- ),
86
- ];
82
+ const tsconfig = await readFile(
83
+ join(root, "../../tsconfig.json"),
84
+ "utf-8",
85
+ );
86
+
87
+ const external: string[] = Object.keys(
88
+ JSON.parse(tsconfig).compilerOptions.paths,
89
+ );
87
90
 
88
91
  await run.rm(this.dist);
89
92
 
@@ -100,6 +103,10 @@ export class AlephaPackageBuilderCli {
100
103
  fixedExtension: false,
101
104
  platform: "node", // TODO: node must be enabled only if index.node.ts exists
102
105
  external,
106
+ dts: {
107
+ sourcemap: true,
108
+ resolve: false,
109
+ },
103
110
  });
104
111
 
105
112
  if (item.native) {
@@ -124,13 +131,16 @@ export class AlephaPackageBuilderCli {
124
131
  });
125
132
  }
126
133
 
127
- const config = join(tmpDir, `tsdown-${item.name}.config.js`);
134
+ const config = join(
135
+ tmpDir,
136
+ `tsdown-${item.name.replace("/", "-")}.config.js`,
137
+ );
128
138
  await this.fs.writeFile(
129
139
  config,
130
140
  `export default ${JSON.stringify(entries, null, 2)};`,
131
141
  );
132
142
  await run(`npx tsdown -c=${config}`);
133
- await this.fs.rm(config);
143
+ //await this.fs.rm(config);
134
144
  };
135
145
 
136
146
  const concurrency = Math.ceil(os.cpus().length / 2);
@@ -257,57 +267,76 @@ export async function analyzeModules(
257
267
  packageName: string,
258
268
  ): Promise<Module[]> {
259
269
  const modules: Module[] = [];
260
- const entries = await readdir(srcDir, { withFileTypes: true });
261
-
262
- for (const entry of entries) {
263
- if (entry.isDirectory()) {
264
- const moduleName = entry.name;
265
- const modulePath = join(srcDir, moduleName);
266
- const dependencies = new Set<string>();
267
-
268
- // Check for browser/node entry points
269
- const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
270
- const hasNative = await fileExists(join(modulePath, "index.native.ts"));
271
- const hasNode = await fileExists(join(modulePath, "index.node.ts"));
272
-
273
- // Get all .ts/.tsx files in this module
274
- const files = await getAllFiles(modulePath);
275
-
276
- for (const file of files) {
277
- const content = await readFile(file, "utf-8");
278
- const deps = extractAlephaDependencies(
279
- content,
280
- packageName,
281
- moduleName,
282
- );
283
- for (const dep of deps) {
284
- if (dep.endsWith(".ts")) {
285
- throw new Error(
286
- `Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,
287
- );
288
- }
289
- if (dep.includes("-")) {
290
- throw new Error(
291
- `Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,
270
+
271
+ async function scanDirectory(dir: string, prefix: string): Promise<void> {
272
+ const entries = await readdir(dir, { withFileTypes: true });
273
+
274
+ for (const entry of entries) {
275
+ if (entry.isDirectory()) {
276
+ const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
277
+ const modulePath = join(dir, entry.name);
278
+
279
+ // Check if this directory has an index.ts (is a module)
280
+ const hasIndex = await fileExists(join(modulePath, "index.ts"));
281
+
282
+ if (hasIndex) {
283
+ // This is a module
284
+ const dependencies = new Set<string>();
285
+
286
+ // Check for browser/node entry points
287
+ const hasBrowser = await fileExists(
288
+ join(modulePath, "index.browser.ts"),
289
+ );
290
+ const hasNative = await fileExists(
291
+ join(modulePath, "index.native.ts"),
292
+ );
293
+ const hasNode = await fileExists(join(modulePath, "index.node.ts"));
294
+
295
+ // Get all .ts/.tsx files in this module
296
+ const files = await getAllFiles(modulePath);
297
+
298
+ for (const file of files) {
299
+ const content = await readFile(file, "utf-8");
300
+ const deps = extractAlephaDependencies(
301
+ content,
302
+ packageName,
303
+ moduleName,
292
304
  );
305
+ for (const dep of deps) {
306
+ if (dep.endsWith(".ts")) {
307
+ throw new Error(
308
+ `Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,
309
+ );
310
+ }
311
+ if (dep.includes("-")) {
312
+ throw new Error(
313
+ `Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,
314
+ );
315
+ }
316
+ dependencies.add(dep);
317
+ }
293
318
  }
294
- dependencies.add(dep);
295
- }
296
- }
297
319
 
298
- const module: Module = {
299
- name: moduleName,
300
- dependencies: Array.from(dependencies),
301
- };
320
+ const module: Module = {
321
+ name: moduleName,
322
+ dependencies: Array.from(dependencies),
323
+ };
302
324
 
303
- if (hasNative) module.native = true;
304
- if (hasBrowser) module.browser = true;
305
- if (hasNode) module.node = true;
325
+ if (hasNative) module.native = true;
326
+ if (hasBrowser) module.browser = true;
327
+ if (hasNode) module.node = true;
306
328
 
307
- modules.push(module);
329
+ modules.push(module);
330
+ } else {
331
+ // No index.ts, check subdirectories for modules
332
+ await scanDirectory(modulePath, moduleName);
333
+ }
334
+ }
308
335
  }
309
336
  }
310
337
 
338
+ await scanDirectory(srcDir, "");
339
+
311
340
  // Check for circular dependencies
312
341
  detectCircularDependencies(modules);
313
342
 
@@ -6,4 +6,4 @@ export class AppRouter {
6
6
  component: () => "Hello World",
7
7
  });
8
8
  }
9
- `.trim()
9
+ `.trim();
@@ -30,4 +30,4 @@ export const biomeJson = `
30
30
  }
31
31
  }
32
32
  }
33
- `.trim()
33
+ `.trim();
@@ -12,4 +12,4 @@ export const indexHtml = (
12
12
  <script type="module" src="${browserEntry}"></script>
13
13
  </body>
14
14
  </html>
15
- `.trim()
15
+ `.trim();
@@ -7,4 +7,4 @@ const alepha = Alepha.create();
7
7
  alepha.with(AppRouter);
8
8
 
9
9
  run(alepha);
10
- `.trim()
10
+ `.trim();
@@ -1,14 +1,13 @@
1
1
  export const mainTs = () => `
2
- import { Alepha, run } from "alepha";
3
- import { $logger } from "alepha/logger";
2
+ import { run } from "alepha";
3
+ import { $route } from "alepha/server";
4
4
 
5
- const alepha = Alepha.create();
5
+ class App {
6
+ root = $route({
7
+ path: "/",
8
+ handler: () => "Hello, Alepha!",
9
+ });
10
+ }
6
11
 
7
- alepha.with(() => {
8
- const log = $logger();
9
-
10
- log.info("Hello from Alepha!");
11
- });
12
-
13
- run(alepha);
12
+ run(App);
14
13
  `.trim();
@@ -11,4 +11,4 @@ export default {
11
11
  globals: true,
12
12
  },
13
13
  };
14
- `.trim()
14
+ `.trim();
@@ -0,0 +1,389 @@
1
+ import { exec } from "node:child_process";
2
+ import { readFile, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { t } from "alepha";
6
+ import { $command } from "alepha/command";
7
+
8
+ const execAsync = promisify(exec);
9
+
10
+ interface Commit {
11
+ hash: string;
12
+ type: string;
13
+ scope: string | null;
14
+ description: string;
15
+ breaking: boolean;
16
+ }
17
+
18
+ interface ChangelogEntry {
19
+ version: string;
20
+ date: string;
21
+ features: Commit[];
22
+ fixes: Commit[];
23
+ docs: Commit[];
24
+ improvements: Commit[];
25
+ breaking: Commit[];
26
+ }
27
+
28
+ interface ChangelogConfig {
29
+ /**
30
+ * Commit prefixes to ignore (e.g., "project", "release", "chore")
31
+ */
32
+ ignore?: string[];
33
+ /**
34
+ * Module scopes to recognize (e.g., "ui", "cli", "core")
35
+ * If not provided, all non-ignored scopes are included
36
+ */
37
+ scopes?: string[];
38
+ }
39
+
40
+ const DEFAULT_IGNORE = [
41
+ "project",
42
+ "release",
43
+ "starter",
44
+ "example",
45
+ "chore",
46
+ "ci",
47
+ "build",
48
+ "test",
49
+ "style",
50
+ ];
51
+
52
+ function parseCommit(line: string, config: ChangelogConfig): Commit | null {
53
+ const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
54
+ if (!match) return null;
55
+
56
+ const [, hash, message] = match;
57
+ const breaking =
58
+ message.includes("!:") || message.toLowerCase().includes("breaking");
59
+ const ignore = config.ignore ?? DEFAULT_IGNORE;
60
+
61
+ // Conventional commit: feat(scope): description or feat!: description
62
+ const conventionalMatch = message.match(
63
+ /^(feat|fix|docs|refactor|perf|revert)(?:\(([^)]+)\))?!?:\s*(.+)$/i,
64
+ );
65
+ if (conventionalMatch) {
66
+ const [, type, scope, description] = conventionalMatch;
67
+
68
+ // Skip if scope matches ignore list
69
+ if (scope) {
70
+ const baseScope = scope.split("/")[0];
71
+ if (ignore.includes(baseScope) || ignore.includes(scope)) {
72
+ return null;
73
+ }
74
+ }
75
+
76
+ // Skip if type (without scope) matches ignore list (e.g., "docs" in ignore)
77
+ if (!scope && ignore.includes(type.toLowerCase())) {
78
+ return null;
79
+ }
80
+
81
+ return {
82
+ hash: hash.substring(0, 8),
83
+ type: type.toLowerCase(),
84
+ scope: scope || null,
85
+ description: description.trim(),
86
+ breaking,
87
+ };
88
+ }
89
+
90
+ // Module-specific commit: module: description or module/submodule: description
91
+ const moduleMatch = message.match(
92
+ /^([a-z][a-z0-9-]*(?:\/[a-z][a-z0-9-]*)?):\s*(.+)$/i,
93
+ );
94
+ if (moduleMatch) {
95
+ const [, module, description] = moduleMatch;
96
+ const baseModule = module.split("/")[0];
97
+
98
+ // Skip ignored prefixes
99
+ if (ignore.includes(baseModule)) {
100
+ return null;
101
+ }
102
+
103
+ // If scopes are defined, check if this is a known scope
104
+ if (config.scopes && !config.scopes.includes(baseModule)) {
105
+ return null;
106
+ }
107
+
108
+ // Determine type based on description keywords
109
+ const desc = description.toLowerCase();
110
+ let type = "improve";
111
+ if (
112
+ desc.includes("fix") ||
113
+ desc.includes("bug") ||
114
+ desc.includes("issue")
115
+ ) {
116
+ type = "fix";
117
+ } else if (
118
+ desc.includes("add") ||
119
+ desc.includes("new") ||
120
+ desc.includes("implement")
121
+ ) {
122
+ type = "feat";
123
+ }
124
+
125
+ return {
126
+ hash: hash.substring(0, 8),
127
+ type,
128
+ scope: module,
129
+ description: description.trim(),
130
+ breaking,
131
+ };
132
+ }
133
+
134
+ return null;
135
+ }
136
+
137
+ function formatCommit(commit: Commit): string {
138
+ const scope = commit.scope ? `**${commit.scope}**: ` : "";
139
+ return `- ${scope}${commit.description} (\`${commit.hash}\`)`;
140
+ }
141
+
142
+ function generateChangelog(entries: ChangelogEntry[]): string {
143
+ let output = "# Changelog\n\n";
144
+ output +=
145
+ "All notable changes to this project will be documented in this file.\n\n";
146
+
147
+ for (const entry of entries) {
148
+ output += `## [${entry.version}] - ${entry.date}\n\n`;
149
+ output += formatEntry(entry);
150
+ }
151
+
152
+ return output;
153
+ }
154
+
155
+ function formatEntry(entry: ChangelogEntry): string {
156
+ let output = "";
157
+
158
+ if (entry.breaking.length > 0) {
159
+ output += "### Breaking Changes\n\n";
160
+ for (const commit of entry.breaking) {
161
+ output += `${formatCommit(commit)}\n`;
162
+ }
163
+ output += "\n";
164
+ }
165
+
166
+ if (entry.features.length > 0) {
167
+ output += "### Features\n\n";
168
+ for (const commit of entry.features) {
169
+ output += `${formatCommit(commit)}\n`;
170
+ }
171
+ output += "\n";
172
+ }
173
+
174
+ if (entry.fixes.length > 0) {
175
+ output += "### Bug Fixes\n\n";
176
+ for (const commit of entry.fixes) {
177
+ output += `${formatCommit(commit)}\n`;
178
+ }
179
+ output += "\n";
180
+ }
181
+
182
+ return output;
183
+ }
184
+
185
+ async function loadConfig(root: string): Promise<ChangelogConfig> {
186
+ try {
187
+ const pkgPath = join(root, "package.json");
188
+ const pkg = JSON.parse(await readFile(pkgPath, "utf8"));
189
+ return pkg.changelog ?? {};
190
+ } catch {
191
+ return {};
192
+ }
193
+ }
194
+
195
+ export class ChangelogCommands {
196
+ public readonly changelog = $command({
197
+ name: "changelog",
198
+ description: "Generate CHANGELOG.md from git commits",
199
+ flags: t.object({
200
+ release: t.optional(
201
+ t.boolean({
202
+ when: ["--release", "-r"],
203
+ description:
204
+ "Output release notes for the latest version only (for GitHub Release)",
205
+ }),
206
+ ),
207
+ preview: t.optional(
208
+ t.boolean({
209
+ when: ["--preview", "-p"],
210
+ description: "Preview unreleased changes (commits since last tag)",
211
+ }),
212
+ ),
213
+ output: t.optional(
214
+ t.string({
215
+ when: ["--output", "-o"],
216
+ description:
217
+ "Output file path (defaults to CHANGELOG.md, use - for stdout)",
218
+ }),
219
+ ),
220
+ limit: t.optional(
221
+ t.number({
222
+ when: ["--limit", "-l"],
223
+ description: "Limit number of versions to include",
224
+ }),
225
+ ),
226
+ }),
227
+ handler: async ({ flags, run, root }) => {
228
+ const config = await loadConfig(root);
229
+
230
+ const git = async (cmd: string) => {
231
+ const { stdout } = await execAsync(`git ${cmd}`, { cwd: root });
232
+ return stdout;
233
+ };
234
+
235
+ // Get all tags sorted by version
236
+ const tagsOutput = await git("tag --sort=-version:refname");
237
+ const tags = tagsOutput
238
+ .trim()
239
+ .split("\n")
240
+ .filter((tag) => tag.match(/^\d+\.\d+\.\d+$/));
241
+
242
+ if (tags.length === 0) {
243
+ throw new Error("No version tags found");
244
+ }
245
+
246
+ // Preview mode: show unreleased changes
247
+ if (flags.preview) {
248
+ const latestTag = tags[0];
249
+ const commitsOutput = await git(`log ${latestTag}..HEAD --oneline`);
250
+
251
+ if (!commitsOutput.trim()) {
252
+ console.log("No unreleased changes since", latestTag);
253
+ return;
254
+ }
255
+
256
+ const entry: ChangelogEntry = {
257
+ version: "Unreleased",
258
+ date: new Date().toISOString().split("T")[0],
259
+ features: [],
260
+ fixes: [],
261
+ docs: [],
262
+ improvements: [],
263
+ breaking: [],
264
+ };
265
+
266
+ for (const line of commitsOutput.trim().split("\n")) {
267
+ if (!line.trim()) continue;
268
+ const commit = parseCommit(line, config);
269
+ if (!commit) continue;
270
+
271
+ if (commit.breaking) entry.breaking.push(commit);
272
+
273
+ switch (commit.type) {
274
+ case "feat":
275
+ entry.features.push(commit);
276
+ break;
277
+ case "fix":
278
+ entry.fixes.push(commit);
279
+ break;
280
+ case "docs":
281
+ entry.docs.push(commit);
282
+ break;
283
+ case "refactor":
284
+ case "perf":
285
+ case "improve":
286
+ entry.improvements.push(commit);
287
+ break;
288
+ }
289
+ }
290
+
291
+ const hasCommits =
292
+ entry.features.length > 0 ||
293
+ entry.fixes.length > 0 ||
294
+ entry.breaking.length > 0;
295
+
296
+ if (!hasCommits) {
297
+ console.log("No public changes since", latestTag);
298
+ return;
299
+ }
300
+
301
+ console.log(`## [Unreleased] - since ${latestTag}\n`);
302
+ console.log(formatEntry(entry));
303
+ return;
304
+ }
305
+
306
+ const entries: ChangelogEntry[] = [];
307
+ const limit = flags.limit || (flags.release ? 1 : tags.length);
308
+
309
+ for (let i = 0; i < Math.min(limit, tags.length); i++) {
310
+ const tag = tags[i];
311
+ const prevTag = tags[i + 1];
312
+
313
+ // Get tag date
314
+ const dateOutput = await git(`log -1 --format=%ci ${tag}`);
315
+ const date = dateOutput.trim().split(" ")[0];
316
+
317
+ // Get commits between tags
318
+ const range = prevTag ? `${prevTag}..${tag}` : tag;
319
+ const commitsOutput = await git(`log ${range} --oneline`);
320
+
321
+ const entry: ChangelogEntry = {
322
+ version: tag,
323
+ date,
324
+ features: [],
325
+ fixes: [],
326
+ docs: [],
327
+ improvements: [],
328
+ breaking: [],
329
+ };
330
+
331
+ for (const line of commitsOutput.trim().split("\n")) {
332
+ if (!line.trim()) continue;
333
+ const commit = parseCommit(line, config);
334
+ if (!commit) continue;
335
+
336
+ if (commit.breaking) entry.breaking.push(commit);
337
+
338
+ switch (commit.type) {
339
+ case "feat":
340
+ entry.features.push(commit);
341
+ break;
342
+ case "fix":
343
+ entry.fixes.push(commit);
344
+ break;
345
+ case "docs":
346
+ entry.docs.push(commit);
347
+ break;
348
+ case "refactor":
349
+ case "perf":
350
+ case "improve":
351
+ entry.improvements.push(commit);
352
+ break;
353
+ }
354
+ }
355
+
356
+ // Only add entry if it has any commits
357
+ const hasCommits =
358
+ entry.features.length > 0 ||
359
+ entry.fixes.length > 0 ||
360
+ entry.breaking.length > 0;
361
+
362
+ if (hasCommits) {
363
+ entries.push(entry);
364
+ }
365
+ }
366
+
367
+ if (entries.length === 0) {
368
+ console.log("No public commits found");
369
+ return;
370
+ }
371
+
372
+ let output: string;
373
+ if (flags.release) {
374
+ output = formatEntry(entries[0]);
375
+ } else {
376
+ output = generateChangelog(entries);
377
+ }
378
+
379
+ const outputPath = flags.output ?? "CHANGELOG.md";
380
+ if (outputPath === "-") {
381
+ console.log(output);
382
+ } else {
383
+ await run(`Writing ${outputPath}`, () =>
384
+ writeFile(join(root, outputPath), output, "utf8"),
385
+ );
386
+ }
387
+ },
388
+ });
389
+ }
@@ -51,10 +51,6 @@ export class CoreCommands {
51
51
  name: "init",
52
52
  description: "Add missing Alepha configuration files to the project",
53
53
  flags: t.object({
54
- // TODO:
55
- // force: t.boolean({
56
- // description: "If true, all config files will be overwritten",
57
- // }),
58
54
  // choose package manager
59
55
  yarn: t.optional(t.boolean({ description: "Use Yarn package manager" })),
60
56
  pnpm: t.optional(t.boolean({ description: "Use pnpm package manager" })),
@@ -76,6 +72,8 @@ export class CoreCommands {
76
72
  flags.react = true;
77
73
  }
78
74
 
75
+ const isExpo = await this.utils.hasExpo(root);
76
+
79
77
  await run({
80
78
  name: "ensuring configuration files",
81
79
  handler: async () => {
@@ -83,9 +81,9 @@ export class CoreCommands {
83
81
  tsconfigJson: true,
84
82
  packageJson: flags,
85
83
  biomeJson: true,
86
- viteConfigTs: true,
84
+ viteConfigTs: !isExpo,
87
85
  editorconfig: true,
88
- indexHtml: !!flags.react,
86
+ indexHtml: !!flags.react && !isExpo,
89
87
  });
90
88
 
91
89
  // Create src/main.ts if src directory is empty or doesn't exist
@@ -111,6 +109,12 @@ export class CoreCommands {
111
109
  alias: `installing dependencies with ${pm}`,
112
110
  });
113
111
 
112
+ if (!isExpo) {
113
+ await this.utils.ensureDependency(root, "vite", { run });
114
+ }
115
+
116
+ await this.utils.ensureDependency(root, "@biomejs/biome", { run });
117
+
114
118
  // Install vitest and create test directory if --test flag is set
115
119
  if (flags.test) {
116
120
  await this.utils.ensureTestDir(root);