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
package/dist/cli/index.js CHANGED
@@ -1,13 +1,15 @@
1
+ import { createRequire } from "node:module";
1
2
  import { join } from "node:path";
2
3
  import { $env, $hook, $inject, $module, Alepha, AlephaError, OPTIONS, t } from "alepha";
3
4
  import { FileSystemProvider } from "alepha/file";
4
5
  import { $command, CliProvider } from "alepha/command";
5
6
  import { $logger } from "alepha/logger";
6
- import { spawn } from "node:child_process";
7
+ import { exec, spawn } from "node:child_process";
7
8
  import { access, mkdir, readFile, readdir, unlink, writeFile } from "node:fs/promises";
8
9
  import { boot, buildClient, buildServer, copyAssets, generateCloudflare, generateDocker, generateSitemap, generateVercel, prerenderPages } from "alepha/vite";
9
10
  import { tsImport } from "tsx/esm/api";
10
11
  import { readFileSync } from "node:fs";
12
+ import { promisify } from "node:util";
11
13
  import * as os from "node:os";
12
14
 
13
15
  //#region ../../src/cli/assets/appRouterTs.ts
@@ -115,18 +117,17 @@ run(alepha);
115
117
  //#endregion
116
118
  //#region ../../src/cli/assets/mainTs.ts
117
119
  const mainTs = () => `
118
- import { Alepha, run } from "alepha";
119
- import { $logger } from "alepha/logger";
120
-
121
- const alepha = Alepha.create();
120
+ import { run } from "alepha";
121
+ import { $route } from "alepha/server";
122
122
 
123
- alepha.with(() => {
124
- const log = $logger();
125
-
126
- log.info("Hello from Alepha!");
127
- });
123
+ class App {
124
+ root = $route({
125
+ path: "/",
126
+ handler: () => "Hello, Alepha!",
127
+ });
128
+ }
128
129
 
129
- run(alepha);
130
+ run(App);
130
131
  `.trim();
131
132
 
132
133
  //#endregion
@@ -272,6 +273,13 @@ var AlephaCliUtils = class {
272
273
  generatePackageJsonContent(modes) {
273
274
  const dependencies = { alepha: `^${version}` };
274
275
  const devDependencies = {};
276
+ const scripts = {
277
+ dev: "alepha dev",
278
+ build: "alepha build",
279
+ lint: "alepha lint",
280
+ typecheck: "alepha typecheck",
281
+ verify: "alepha verify"
282
+ };
275
283
  if (modes.ui) {
276
284
  dependencies["@alepha/ui"] = `^${version}`;
277
285
  modes.react = true;
@@ -286,11 +294,7 @@ var AlephaCliUtils = class {
286
294
  type: "module",
287
295
  dependencies,
288
296
  devDependencies,
289
- scripts: {
290
- dev: "alepha dev",
291
- build: "alepha build",
292
- verify: "alepha verify"
293
- }
297
+ scripts
294
298
  };
295
299
  }
296
300
  /**
@@ -309,8 +313,9 @@ var AlephaCliUtils = class {
309
313
  try {
310
314
  await access(packageJsonPath);
311
315
  } catch (error) {
312
- await writeFile(packageJsonPath, JSON.stringify(this.generatePackageJsonContent(modes), null, 2));
313
- return;
316
+ const obj = this.generatePackageJsonContent(modes);
317
+ await writeFile(packageJsonPath, JSON.stringify(obj, null, 2));
318
+ return obj;
314
319
  }
315
320
  const content = await readFile(packageJsonPath, "utf8");
316
321
  const packageJson$1 = JSON.parse(content);
@@ -323,6 +328,7 @@ var AlephaCliUtils = class {
323
328
  Object.assign(packageJson$1.devDependencies, newPackageJson.devDependencies);
324
329
  Object.assign(packageJson$1.scripts, newPackageJson.scripts);
325
330
  await writeFile(packageJsonPath, JSON.stringify(packageJson$1, null, 2));
331
+ return packageJson$1;
326
332
  }
327
333
  async ensureConfig(root, opts) {
328
334
  const tasks = [];
@@ -332,7 +338,7 @@ var AlephaCliUtils = class {
332
338
  if (opts.indexHtml) tasks.push(this.ensureIndexHtml(root));
333
339
  if (opts.biomeJson) tasks.push(this.ensureBiomeConfig(root));
334
340
  if (opts.editorconfig) tasks.push(this.ensureEditorConfig(root));
335
- await Promise.all(tasks);
341
+ return await Promise.all(tasks);
336
342
  }
337
343
  /**
338
344
  * Ensure tsconfig.json exists in the project.
@@ -450,88 +456,27 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
450
456
  `.trim();
451
457
  }
452
458
  /**
453
- * Prepare Drizzle configuration files for a database provider.
459
+ * Load environment variables from a .env file.
454
460
  *
455
- * Creates temporary entities.js and drizzle.config.js files needed
456
- * for Drizzle Kit commands to run properly.
457
- *
458
- * @param options - Configuration options including kit, provider info, and paths
459
- * @returns Path to the generated drizzle.config.js file
461
+ * Reads the .env file in the specified root directory and sets
462
+ * the environment variables in process.env.
460
463
  */
461
- async prepareDrizzleConfig(options) {
462
- const models = Object.keys(options.kit.getModels(options.provider));
463
- const entitiesJs = this.generateEntitiesJs(options.entry, options.providerName, models);
464
- const config = {
465
- schema: await this.writeConfigFile("entities.js", entitiesJs, options.rootDir),
466
- out: `./migrations/${options.providerName}`,
467
- dialect: options.dialect,
468
- dbCredentials: { url: options.providerUrl }
469
- };
470
- if (options.dialect === "sqlite") {
471
- let url = options.providerUrl;
472
- url = url.replace("sqlite://", "").replace("file://", "");
473
- url = join(options.rootDir, url);
474
- config.dbCredentials = { url };
475
- }
476
- if (options.providerName === "pglite") config.driver = "pglite";
477
- const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;
478
- return await this.writeConfigFile("drizzle.config.js", drizzleConfigJs, options.rootDir);
479
- }
480
- async loadEnvFile(root) {
481
- const envPath = join(root, ".env");
482
- try {
483
- const lines = (await readFile(envPath, "utf8")).split("\n");
484
- for (const line of lines) {
485
- const [key, ...rest] = line.split("=");
486
- if (key) {
487
- const value = rest.join("=");
488
- process.env[key.trim()] = value.trim();
464
+ async loadEnvFile(root, files = [".env"]) {
465
+ for (const it of files) for (const file of [it, `${it}.local`]) {
466
+ const envPath = join(root, file);
467
+ try {
468
+ const lines = (await readFile(envPath, "utf8")).split("\n");
469
+ for (const line of lines) {
470
+ const [key, ...rest] = line.split("=");
471
+ if (key) {
472
+ const value = rest.join("=");
473
+ process.env[key.trim()] = value.trim();
474
+ }
489
475
  }
476
+ this.log.debug(`Loaded environment variables from ${envPath}`);
477
+ } catch {
478
+ this.log.debug(`No ${file} file found at ${envPath}, skipping load.`);
490
479
  }
491
- this.log.debug(`Loaded environment variables from ${envPath}`);
492
- } catch {
493
- this.log.debug(`No .env file found at ${envPath}, skipping load.`);
494
- }
495
- }
496
- /**
497
- * Run a drizzle-kit command for all database providers in an Alepha instance.
498
- *
499
- * Iterates through all repository providers, prepares Drizzle config for each,
500
- * and executes the specified drizzle-kit command.
501
- *
502
- * @param options - Configuration including command to run, flags, and logging
503
- */
504
- async runDrizzleKitCommand(options) {
505
- const rootDir = options.root;
506
- await this.loadEnvFile(rootDir);
507
- this.log.debug(`Using project root: ${rootDir}`);
508
- const { alepha, entry } = await this.loadAlephaFromServerEntryFile(rootDir, options.args);
509
- const drizzleKitProvider = alepha.inject("DrizzleKitProvider");
510
- const repositoryProvider = alepha.inject("RepositoryProvider");
511
- const accepted = /* @__PURE__ */ new Set([]);
512
- for (const primitive of repositoryProvider.getRepositories()) {
513
- const provider = primitive.provider;
514
- const providerName = provider.name;
515
- const dialect = provider.dialect;
516
- if (accepted.has(providerName)) continue;
517
- accepted.add(providerName);
518
- if (options.provider && options.provider !== providerName) {
519
- this.log.debug(`Skipping provider '${providerName}' (filter: ${options.provider})`);
520
- continue;
521
- }
522
- this.log.info("");
523
- this.log.info(options.logMessage(providerName, dialect));
524
- const drizzleConfigJsPath = await this.prepareDrizzleConfig({
525
- kit: drizzleKitProvider,
526
- provider,
527
- providerName,
528
- providerUrl: provider.url,
529
- dialect,
530
- entry,
531
- rootDir
532
- });
533
- const flags = options.commandFlags ? ` ${options.commandFlags}` : "";
534
- await this.exec(`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`, { env: { NODE_OPTIONS: "--import tsx" } });
535
480
  }
536
481
  }
537
482
  async getPackageManager(root, flags) {
@@ -615,6 +560,15 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
615
560
  }
616
561
  }
617
562
  /**
563
+ * Check if Expo is present in the project.
564
+ *
565
+ * @param root - The root directory of the project
566
+ * @returns True if expo is in dependencies or devDependencies
567
+ */
568
+ async hasExpo(root) {
569
+ return this.hasDependency(root, "expo");
570
+ }
571
+ /**
618
572
  * Install a dependency if it's missing from the project.
619
573
  *
620
574
  * Automatically detects the package manager (yarn, pnpm, npm) and installs
@@ -671,6 +625,231 @@ var BiomeCommands = class {
671
625
  });
672
626
  };
673
627
 
628
+ //#endregion
629
+ //#region ../../src/cli/commands/ChangelogCommands.ts
630
+ const execAsync = promisify(exec);
631
+ const DEFAULT_IGNORE = [
632
+ "project",
633
+ "release",
634
+ "starter",
635
+ "example",
636
+ "chore",
637
+ "ci",
638
+ "build",
639
+ "test",
640
+ "style"
641
+ ];
642
+ function parseCommit(line, config) {
643
+ const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
644
+ if (!match) return null;
645
+ const [, hash, message] = match;
646
+ const breaking = message.includes("!:") || message.toLowerCase().includes("breaking");
647
+ const ignore = config.ignore ?? DEFAULT_IGNORE;
648
+ const conventionalMatch = message.match(/^(feat|fix|docs|refactor|perf|revert)(?:\(([^)]+)\))?!?:\s*(.+)$/i);
649
+ if (conventionalMatch) {
650
+ const [, type, scope, description] = conventionalMatch;
651
+ if (scope) {
652
+ const baseScope = scope.split("/")[0];
653
+ if (ignore.includes(baseScope) || ignore.includes(scope)) return null;
654
+ }
655
+ if (!scope && ignore.includes(type.toLowerCase())) return null;
656
+ return {
657
+ hash: hash.substring(0, 8),
658
+ type: type.toLowerCase(),
659
+ scope: scope || null,
660
+ description: description.trim(),
661
+ breaking
662
+ };
663
+ }
664
+ const moduleMatch = message.match(/^([a-z][a-z0-9-]*(?:\/[a-z][a-z0-9-]*)?):\s*(.+)$/i);
665
+ if (moduleMatch) {
666
+ const [, module, description] = moduleMatch;
667
+ const baseModule = module.split("/")[0];
668
+ if (ignore.includes(baseModule)) return null;
669
+ if (config.scopes && !config.scopes.includes(baseModule)) return null;
670
+ const desc = description.toLowerCase();
671
+ let type = "improve";
672
+ if (desc.includes("fix") || desc.includes("bug") || desc.includes("issue")) type = "fix";
673
+ else if (desc.includes("add") || desc.includes("new") || desc.includes("implement")) type = "feat";
674
+ return {
675
+ hash: hash.substring(0, 8),
676
+ type,
677
+ scope: module,
678
+ description: description.trim(),
679
+ breaking
680
+ };
681
+ }
682
+ return null;
683
+ }
684
+ function formatCommit(commit) {
685
+ return `- ${commit.scope ? `**${commit.scope}**: ` : ""}${commit.description} (\`${commit.hash}\`)`;
686
+ }
687
+ function generateChangelog(entries) {
688
+ let output = "# Changelog\n\n";
689
+ output += "All notable changes to this project will be documented in this file.\n\n";
690
+ for (const entry of entries) {
691
+ output += `## [${entry.version}] - ${entry.date}\n\n`;
692
+ output += formatEntry(entry);
693
+ }
694
+ return output;
695
+ }
696
+ function formatEntry(entry) {
697
+ let output = "";
698
+ if (entry.breaking.length > 0) {
699
+ output += "### Breaking Changes\n\n";
700
+ for (const commit of entry.breaking) output += `${formatCommit(commit)}\n`;
701
+ output += "\n";
702
+ }
703
+ if (entry.features.length > 0) {
704
+ output += "### Features\n\n";
705
+ for (const commit of entry.features) output += `${formatCommit(commit)}\n`;
706
+ output += "\n";
707
+ }
708
+ if (entry.fixes.length > 0) {
709
+ output += "### Bug Fixes\n\n";
710
+ for (const commit of entry.fixes) output += `${formatCommit(commit)}\n`;
711
+ output += "\n";
712
+ }
713
+ return output;
714
+ }
715
+ async function loadConfig(root) {
716
+ try {
717
+ const pkgPath = join(root, "package.json");
718
+ return JSON.parse(await readFile(pkgPath, "utf8")).changelog ?? {};
719
+ } catch {
720
+ return {};
721
+ }
722
+ }
723
+ var ChangelogCommands = class {
724
+ changelog = $command({
725
+ name: "changelog",
726
+ description: "Generate CHANGELOG.md from git commits",
727
+ flags: t.object({
728
+ release: t.optional(t.boolean({
729
+ when: ["--release", "-r"],
730
+ description: "Output release notes for the latest version only (for GitHub Release)"
731
+ })),
732
+ preview: t.optional(t.boolean({
733
+ when: ["--preview", "-p"],
734
+ description: "Preview unreleased changes (commits since last tag)"
735
+ })),
736
+ output: t.optional(t.string({
737
+ when: ["--output", "-o"],
738
+ description: "Output file path (defaults to CHANGELOG.md, use - for stdout)"
739
+ })),
740
+ limit: t.optional(t.number({
741
+ when: ["--limit", "-l"],
742
+ description: "Limit number of versions to include"
743
+ }))
744
+ }),
745
+ handler: async ({ flags, run, root }) => {
746
+ const config = await loadConfig(root);
747
+ const git = async (cmd) => {
748
+ const { stdout } = await execAsync(`git ${cmd}`, { cwd: root });
749
+ return stdout;
750
+ };
751
+ const tags = (await git("tag --sort=-version:refname")).trim().split("\n").filter((tag) => tag.match(/^\d+\.\d+\.\d+$/));
752
+ if (tags.length === 0) throw new Error("No version tags found");
753
+ if (flags.preview) {
754
+ const latestTag = tags[0];
755
+ const commitsOutput = await git(`log ${latestTag}..HEAD --oneline`);
756
+ if (!commitsOutput.trim()) {
757
+ console.log("No unreleased changes since", latestTag);
758
+ return;
759
+ }
760
+ const entry = {
761
+ version: "Unreleased",
762
+ date: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
763
+ features: [],
764
+ fixes: [],
765
+ docs: [],
766
+ improvements: [],
767
+ breaking: []
768
+ };
769
+ for (const line of commitsOutput.trim().split("\n")) {
770
+ if (!line.trim()) continue;
771
+ const commit = parseCommit(line, config);
772
+ if (!commit) continue;
773
+ if (commit.breaking) entry.breaking.push(commit);
774
+ switch (commit.type) {
775
+ case "feat":
776
+ entry.features.push(commit);
777
+ break;
778
+ case "fix":
779
+ entry.fixes.push(commit);
780
+ break;
781
+ case "docs":
782
+ entry.docs.push(commit);
783
+ break;
784
+ case "refactor":
785
+ case "perf":
786
+ case "improve":
787
+ entry.improvements.push(commit);
788
+ break;
789
+ }
790
+ }
791
+ if (!(entry.features.length > 0 || entry.fixes.length > 0 || entry.breaking.length > 0)) {
792
+ console.log("No public changes since", latestTag);
793
+ return;
794
+ }
795
+ console.log(`## [Unreleased] - since ${latestTag}\n`);
796
+ console.log(formatEntry(entry));
797
+ return;
798
+ }
799
+ const entries = [];
800
+ const limit = flags.limit || (flags.release ? 1 : tags.length);
801
+ for (let i = 0; i < Math.min(limit, tags.length); i++) {
802
+ const tag = tags[i];
803
+ const prevTag = tags[i + 1];
804
+ const date = (await git(`log -1 --format=%ci ${tag}`)).trim().split(" ")[0];
805
+ const commitsOutput = await git(`log ${prevTag ? `${prevTag}..${tag}` : tag} --oneline`);
806
+ const entry = {
807
+ version: tag,
808
+ date,
809
+ features: [],
810
+ fixes: [],
811
+ docs: [],
812
+ improvements: [],
813
+ breaking: []
814
+ };
815
+ for (const line of commitsOutput.trim().split("\n")) {
816
+ if (!line.trim()) continue;
817
+ const commit = parseCommit(line, config);
818
+ if (!commit) continue;
819
+ if (commit.breaking) entry.breaking.push(commit);
820
+ switch (commit.type) {
821
+ case "feat":
822
+ entry.features.push(commit);
823
+ break;
824
+ case "fix":
825
+ entry.fixes.push(commit);
826
+ break;
827
+ case "docs":
828
+ entry.docs.push(commit);
829
+ break;
830
+ case "refactor":
831
+ case "perf":
832
+ case "improve":
833
+ entry.improvements.push(commit);
834
+ break;
835
+ }
836
+ }
837
+ if (entry.features.length > 0 || entry.fixes.length > 0 || entry.breaking.length > 0) entries.push(entry);
838
+ }
839
+ if (entries.length === 0) {
840
+ console.log("No public commits found");
841
+ return;
842
+ }
843
+ let output;
844
+ if (flags.release) output = formatEntry(entries[0]);
845
+ else output = generateChangelog(entries);
846
+ const outputPath = flags.output ?? "CHANGELOG.md";
847
+ if (outputPath === "-") console.log(output);
848
+ else await run(`Writing ${outputPath}`, () => writeFile(join(root, outputPath), output, "utf8"));
849
+ }
850
+ });
851
+ };
852
+
674
853
  //#endregion
675
854
  //#region ../../src/cli/commands/CoreCommands.ts
676
855
  var CoreCommands = class {
@@ -722,6 +901,7 @@ var CoreCommands = class {
722
901
  }),
723
902
  handler: async ({ run, flags, root }) => {
724
903
  if (flags.ui) flags.react = true;
904
+ const isExpo = await this.utils.hasExpo(root);
725
905
  await run({
726
906
  name: "ensuring configuration files",
727
907
  handler: async () => {
@@ -729,9 +909,9 @@ var CoreCommands = class {
729
909
  tsconfigJson: true,
730
910
  packageJson: flags,
731
911
  biomeJson: true,
732
- viteConfigTs: true,
912
+ viteConfigTs: !isExpo,
733
913
  editorconfig: true,
734
- indexHtml: !!flags.react
914
+ indexHtml: !!flags.react && !isExpo
735
915
  });
736
916
  if (!flags.react) await this.utils.ensureSrcMain(root);
737
917
  }
@@ -743,6 +923,8 @@ var CoreCommands = class {
743
923
  } else if (pm === "pnpm") await this.utils.ensurePnpm(root);
744
924
  else await this.utils.ensureNpm(root);
745
925
  await run(`${pm} install`, { alias: `installing dependencies with ${pm}` });
926
+ if (!isExpo) await this.utils.ensureDependency(root, "vite", { run });
927
+ await this.utils.ensureDependency(root, "@biomejs/biome", { run });
746
928
  if (flags.test) {
747
929
  await this.utils.ensureTestDir(root);
748
930
  await run(`${pm} ${pm === "yarn" ? "add" : "install"} -D vitest`, { alias: "setup testing with Vitest" });
@@ -753,7 +935,10 @@ var CoreCommands = class {
753
935
 
754
936
  //#endregion
755
937
  //#region ../../src/cli/commands/DrizzleCommands.ts
756
- const drizzleCommandFlags = t.object({ provider: t.optional(t.text({ description: "Database provider name to target (e.g., 'postgres', 'sqlite')" })) });
938
+ const drizzleCommandFlags = t.object({
939
+ provider: t.optional(t.text({ description: "Database provider name to target (e.g., 'postgres', 'sqlite')" })),
940
+ mode: t.optional(t.text({ description: "Environment variable file(s) to load (e.g., 'production' to load .env.production) https://vite.dev/guide/env-and-mode" }))
941
+ });
757
942
  var DrizzleCommands = class {
758
943
  log = $logger();
759
944
  utils = $inject(AlephaCliUtils);
@@ -838,12 +1023,13 @@ var DrizzleCommands = class {
838
1023
  flags: t.extend(drizzleCommandFlags, { custom: t.optional(t.text({ description: "Custom migration name for drizzle-kit generate --custom" })) }),
839
1024
  handler: async ({ args, flags, root }) => {
840
1025
  const commandFlags = flags.custom ? `--custom=${flags.custom}` : void 0;
841
- await this.utils.runDrizzleKitCommand({
1026
+ await this.runDrizzleKitCommand({
842
1027
  root,
843
1028
  args,
844
1029
  command: "generate",
845
1030
  commandFlags,
846
1031
  provider: flags.provider,
1032
+ env: flags.mode,
847
1033
  logMessage: (providerName, dialect) => `Generate '${providerName}' migrations (${dialect}) ...`
848
1034
  });
849
1035
  }
@@ -866,11 +1052,12 @@ var DrizzleCommands = class {
866
1052
  })),
867
1053
  flags: drizzleCommandFlags,
868
1054
  handler: async ({ root, args, flags }) => {
869
- await this.utils.runDrizzleKitCommand({
1055
+ await this.runDrizzleKitCommand({
870
1056
  root,
871
1057
  args,
872
1058
  command: "push",
873
1059
  provider: flags.provider,
1060
+ env: flags.mode,
874
1061
  logMessage: (providerName, dialect) => `Push '${providerName}' schema (${dialect}) ...`
875
1062
  });
876
1063
  }
@@ -893,11 +1080,12 @@ var DrizzleCommands = class {
893
1080
  })),
894
1081
  flags: drizzleCommandFlags,
895
1082
  handler: async ({ root, args, flags }) => {
896
- await this.utils.runDrizzleKitCommand({
1083
+ await this.runDrizzleKitCommand({
897
1084
  root,
898
1085
  args,
899
1086
  command: "migrate",
900
1087
  provider: flags.provider,
1088
+ env: flags.mode,
901
1089
  logMessage: (providerName, dialect) => `Migrate '${providerName}' database (${dialect}) ...`
902
1090
  });
903
1091
  }
@@ -920,15 +1108,102 @@ var DrizzleCommands = class {
920
1108
  })),
921
1109
  flags: drizzleCommandFlags,
922
1110
  handler: async ({ root, args, flags }) => {
923
- await this.utils.runDrizzleKitCommand({
1111
+ await this.runDrizzleKitCommand({
924
1112
  root,
925
1113
  args,
926
1114
  command: "studio",
927
1115
  provider: flags.provider,
1116
+ env: flags.mode,
928
1117
  logMessage: (providerName, dialect) => `Launch Studio for '${providerName}' (${dialect}) ...`
929
1118
  });
930
1119
  }
931
1120
  });
1121
+ /**
1122
+ * Run a drizzle-kit command for all database providers in an Alepha instance.
1123
+ *
1124
+ * Iterates through all repository providers, prepares Drizzle config for each,
1125
+ * and executes the specified drizzle-kit command.
1126
+ *
1127
+ * @param options - Configuration including command to run, flags, and logging
1128
+ */
1129
+ async runDrizzleKitCommand(options) {
1130
+ const rootDir = options.root;
1131
+ const envFiles = [".env"];
1132
+ if (options.env) envFiles.push(`.env.${options.env}`);
1133
+ await this.utils.loadEnvFile(rootDir, envFiles);
1134
+ this.log.debug(`Using project root: ${rootDir}`);
1135
+ const { alepha, entry } = await this.utils.loadAlephaFromServerEntryFile(rootDir, options.args);
1136
+ const drizzleKitProvider = alepha.inject("DrizzleKitProvider");
1137
+ const repositoryProvider = alepha.inject("RepositoryProvider");
1138
+ const accepted = /* @__PURE__ */ new Set([]);
1139
+ for (const primitive of repositoryProvider.getRepositories()) {
1140
+ const provider = primitive.provider;
1141
+ const providerName = provider.name;
1142
+ const dialect = provider.dialect;
1143
+ if (accepted.has(providerName)) continue;
1144
+ accepted.add(providerName);
1145
+ if (options.provider && options.provider !== providerName) {
1146
+ this.log.debug(`Skipping provider '${providerName}' (filter: ${options.provider})`);
1147
+ continue;
1148
+ }
1149
+ this.log.info("");
1150
+ this.log.info(options.logMessage(providerName, dialect));
1151
+ const drizzleConfigJsPath = await this.prepareDrizzleConfig({
1152
+ kit: drizzleKitProvider,
1153
+ provider,
1154
+ providerName,
1155
+ providerUrl: provider.url,
1156
+ dialect,
1157
+ entry,
1158
+ rootDir
1159
+ });
1160
+ const flags = options.commandFlags ? ` ${options.commandFlags}` : "";
1161
+ await this.utils.exec(`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`, { env: { NODE_OPTIONS: "--import tsx" } });
1162
+ }
1163
+ }
1164
+ /**
1165
+ * Prepare Drizzle configuration files for a database provider.
1166
+ *
1167
+ * Creates temporary entities.js and drizzle.config.js files needed
1168
+ * for Drizzle Kit commands to run properly.
1169
+ *
1170
+ * @param options - Configuration options including kit, provider info, and paths
1171
+ * @returns Path to the generated drizzle.config.js file
1172
+ */
1173
+ async prepareDrizzleConfig(options) {
1174
+ const models = Object.keys(options.kit.getModels(options.provider));
1175
+ const entitiesJs = this.utils.generateEntitiesJs(options.entry, options.providerName, models);
1176
+ const config = {
1177
+ schema: await this.utils.writeConfigFile("entities.js", entitiesJs, options.rootDir),
1178
+ out: `./migrations/${options.providerName}`,
1179
+ dialect: options.dialect,
1180
+ dbCredentials: { url: options.providerUrl }
1181
+ };
1182
+ if (options.providerName === "d1") config.driver = "d1-http";
1183
+ if (options.providerName === "pglite") config.driver = "pglite";
1184
+ if (options.dialect === "sqlite") if (options.providerName === "d1") {
1185
+ const token = process.env.CLOUDFLARE_API_TOKEN;
1186
+ if (!token) throw new AlephaError("CLOUDFLARE_API_TOKEN environment variable is not set. https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit");
1187
+ const accountId = process.env.CLOUDFLARE_ACCOUNT_ID;
1188
+ if (!accountId) throw new AlephaError("CLOUDFLARE_ACCOUNT_ID environment variable is not set. https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit");
1189
+ const url = options.providerUrl;
1190
+ if (!url.startsWith("cloudflare-d1://")) throw new AlephaError("D1 provider URL must start with 'cloudflare-d1://'.");
1191
+ const [, databaseId] = url.replace("cloudflare-d1://", "").replace("cloudflare-d1:", "").split(":");
1192
+ if (!databaseId) throw new AlephaError("Database ID is missing in the D1 provider URL. Cloudflare D1 URL format: cloudflare-d1://<database_name>:<database_id>");
1193
+ config.dbCredentials = {
1194
+ accountId,
1195
+ databaseId,
1196
+ token
1197
+ };
1198
+ } else {
1199
+ let url = options.providerUrl;
1200
+ url = url.replace("sqlite://", "").replace("file://", "");
1201
+ url = join(options.rootDir, url);
1202
+ config.dbCredentials = { url };
1203
+ }
1204
+ const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;
1205
+ return await this.utils.writeConfigFile("drizzle.config.js", drizzleConfigJs, options.rootDir);
1206
+ }
932
1207
  };
933
1208
 
934
1209
  //#endregion
@@ -958,7 +1233,7 @@ var VerifyCommands = class {
958
1233
  await run("alepha typecheck");
959
1234
  if ((await this.utils.readPackageJson(root)).devDependencies?.vitest) await run("alepha test");
960
1235
  if (await this.utils.exists(root, "migrations")) await run("alepha db:check-migrations");
961
- await run("alepha build");
1236
+ if (!await this.utils.hasExpo(root)) await run("alepha build");
962
1237
  await run("alepha clean");
963
1238
  }
964
1239
  });
@@ -983,6 +1258,7 @@ var ViteCommands = class {
983
1258
  env = $env(t.object({ VITEST_ARGS: t.string({ default: "" }) }));
984
1259
  run = $command({
985
1260
  name: "run",
1261
+ hide: true,
986
1262
  description: "Run a TypeScript file directly",
987
1263
  flags: t.object({ watch: t.optional(t.boolean({
988
1264
  description: "Watch file for changes",
@@ -1012,10 +1288,15 @@ var ViteCommands = class {
1012
1288
  description: "Filepath to run"
1013
1289
  })),
1014
1290
  handler: async ({ args, root }) => {
1291
+ const expo = await this.utils.hasExpo(root);
1015
1292
  await this.utils.ensureConfig(root, {
1016
- viteConfigTs: true,
1293
+ viteConfigTs: !expo,
1017
1294
  tsconfigJson: true
1018
1295
  });
1296
+ if (expo) {
1297
+ await this.utils.exec(`expo start`);
1298
+ return;
1299
+ }
1019
1300
  const entry = await boot.getServerEntry(root, args);
1020
1301
  this.log.trace("Entry file found", { entry });
1021
1302
  try {
@@ -1049,6 +1330,8 @@ var ViteCommands = class {
1049
1330
  }),
1050
1331
  handler: async ({ flags, args, run, root }) => {
1051
1332
  process.env.ALEPHA_BUILD_MODE = "cli";
1333
+ process.env.NODE_ENV = "production";
1334
+ if (await this.utils.hasExpo(root)) return;
1052
1335
  await this.utils.ensureConfig(root, {
1053
1336
  viteConfigTs: true,
1054
1337
  tsconfigJson: true
@@ -1059,7 +1342,8 @@ var ViteCommands = class {
1059
1342
  const clientDir = "public";
1060
1343
  await this.utils.ensureDependency(root, "vite", { run });
1061
1344
  await run.rm("dist", { alias: "clean dist" });
1062
- const viteAlephaBuildOptions = (await import(join(root, "vite.config.ts")))?.default?.plugins.find((it) => !!it[OPTIONS])?.[OPTIONS] ?? {};
1345
+ const viteAlephaBuildOptions = (await createRequire(import.meta.url)("vite").resolveConfig({}, "build", "production")).plugins.find((it) => it.name === "alepha:build")?.[OPTIONS] || {};
1346
+ await this.utils.loadEnvFile(root, [".env", ".env.production"]);
1063
1347
  const stats = flags.stats ?? viteAlephaBuildOptions.stats ?? false;
1064
1348
  const hasServer = viteAlephaBuildOptions.serverEntry !== false;
1065
1349
  let hasClient = false;
@@ -1067,12 +1351,14 @@ var ViteCommands = class {
1067
1351
  await access(join(root, "index.html"));
1068
1352
  hasClient = true;
1069
1353
  } catch {}
1354
+ const clientOptions = typeof viteAlephaBuildOptions.client === "object" ? viteAlephaBuildOptions.client : {};
1070
1355
  if (hasClient) await run({
1071
1356
  name: "vite build client",
1072
1357
  handler: () => buildClient({
1073
1358
  silent: true,
1074
1359
  dist: `${distDir}/${clientDir}`,
1075
- stats
1360
+ stats,
1361
+ precompress: clientOptions.precompress
1076
1362
  })
1077
1363
  });
1078
1364
  await run({
@@ -1093,15 +1379,14 @@ var ViteCommands = class {
1093
1379
  if (clientBuilt && hasServer) await unlink(`${distDir}/${clientDir}/index.html`);
1094
1380
  }
1095
1381
  });
1096
- await run({
1097
- name: "copy assets",
1098
- handler: () => copyAssets({
1099
- entry: `${distDir}/index.js`,
1100
- distDir
1101
- })
1382
+ await copyAssets({
1383
+ root,
1384
+ entry: `${distDir}/index.js`,
1385
+ distDir,
1386
+ run
1102
1387
  });
1103
1388
  if (hasClient) {
1104
- const sitemapBaseUrl = flags.sitemap ?? (typeof viteAlephaBuildOptions.client === "object" ? viteAlephaBuildOptions.client.sitemap?.hostname : void 0);
1389
+ const sitemapBaseUrl = flags.sitemap ?? clientOptions.sitemap?.hostname;
1105
1390
  if (sitemapBaseUrl) await run({
1106
1391
  name: "add sitemap",
1107
1392
  handler: async () => {
@@ -1111,12 +1396,13 @@ var ViteCommands = class {
1111
1396
  }));
1112
1397
  }
1113
1398
  });
1114
- if (flags.prerender ?? (typeof viteAlephaBuildOptions.client === "object" ? viteAlephaBuildOptions.client.prerender : false)) await run({
1399
+ if (flags.prerender ?? clientOptions.prerender) await run({
1115
1400
  name: "pre-render pages",
1116
1401
  handler: async () => {
1117
1402
  await prerenderPages({
1118
1403
  dist: `${distDir}/${clientDir}`,
1119
- entry: `${distDir}/index.js`
1404
+ entry: `${distDir}/index.js`,
1405
+ compress: clientOptions.precompress
1120
1406
  });
1121
1407
  }
1122
1408
  });
@@ -1132,10 +1418,16 @@ var ViteCommands = class {
1132
1418
  })
1133
1419
  });
1134
1420
  }
1135
- if (flags.cloudflare || viteAlephaBuildOptions.cloudflare) await run({
1136
- name: "add Cloudflare config",
1137
- handler: () => generateCloudflare({ distDir })
1138
- });
1421
+ if (flags.cloudflare || viteAlephaBuildOptions.cloudflare) {
1422
+ const config = typeof viteAlephaBuildOptions.cloudflare === "boolean" ? {} : viteAlephaBuildOptions.cloudflare;
1423
+ await run({
1424
+ name: "add Cloudflare config",
1425
+ handler: () => generateCloudflare({
1426
+ distDir,
1427
+ config
1428
+ })
1429
+ });
1430
+ }
1139
1431
  if (flags.docker || viteAlephaBuildOptions.docker) {
1140
1432
  const dockerConfig = typeof viteAlephaBuildOptions.docker === "object" ? viteAlephaBuildOptions.docker : {};
1141
1433
  await run({
@@ -1182,6 +1474,7 @@ const AlephaCli = $module({
1182
1474
  name: "alepha.cli",
1183
1475
  services: [
1184
1476
  AlephaCliExtension,
1477
+ ChangelogCommands,
1185
1478
  CoreCommands,
1186
1479
  DrizzleCommands,
1187
1480
  VerifyCommands,
@@ -1208,7 +1501,9 @@ var AlephaPackageBuilderCli = class {
1208
1501
  });
1209
1502
  pkgData.exports = {};
1210
1503
  for (const item of modules) {
1211
- const path = item.name === "core" ? "." : `./${item.name.replace("-", "/")}`;
1504
+ let m = `./${item.name.replace("core", "")}`;
1505
+ if (m.endsWith("/")) m = m.slice(0, -1);
1506
+ const path = m;
1212
1507
  pkgData.exports[path] = {};
1213
1508
  pkgData.exports[path].types = `./src/${item.name}/index.ts`;
1214
1509
  if (item.native) pkgData.exports[path]["react-native"] = `./src/${item.name}/index.native.ts`;
@@ -1226,11 +1521,8 @@ var AlephaPackageBuilderCli = class {
1226
1521
  const tmpDir = join(root, "node_modules/.alepha");
1227
1522
  await this.fs.mkdir(tmpDir, { recursive: true }).catch(() => {});
1228
1523
  await this.fs.writeFile(join(tmpDir, "module-dependencies.json"), JSON.stringify(modules, null, 2));
1229
- const external = [
1230
- "alepha",
1231
- packageName,
1232
- ...modules.map((item) => `${packageName}/${item.name.replace("-", "/")}`)
1233
- ];
1524
+ const tsconfig = await readFile(join(root, "../../tsconfig.json"), "utf-8");
1525
+ const external = Object.keys(JSON.parse(tsconfig).compilerOptions.paths);
1234
1526
  await run.rm(this.dist);
1235
1527
  const build = async (item) => {
1236
1528
  const entries = [];
@@ -1243,7 +1535,11 @@ var AlephaPackageBuilderCli = class {
1243
1535
  sourcemap: true,
1244
1536
  fixedExtension: false,
1245
1537
  platform: "node",
1246
- external
1538
+ external,
1539
+ dts: {
1540
+ sourcemap: true,
1541
+ resolve: false
1542
+ }
1247
1543
  });
1248
1544
  if (item.native) entries.push({
1249
1545
  entry: join(src, "index.native.ts"),
@@ -1261,10 +1557,9 @@ var AlephaPackageBuilderCli = class {
1261
1557
  dts: false,
1262
1558
  external
1263
1559
  });
1264
- const config = join(tmpDir, `tsdown-${item.name}.config.js`);
1560
+ const config = join(tmpDir, `tsdown-${item.name.replace("/", "-")}.config.js`);
1265
1561
  await this.fs.writeFile(config, `export default ${JSON.stringify(entries, null, 2)};`);
1266
1562
  await run(`npx tsdown -c=${config}`);
1267
- await this.fs.rm(config);
1268
1563
  };
1269
1564
  const concurrency = Math.ceil(os.cpus().length / 2);
1270
1565
  const queue = modules.slice();
@@ -1341,32 +1636,37 @@ function detectCircularDependencies(modules) {
1341
1636
  }
1342
1637
  async function analyzeModules(srcDir, packageName) {
1343
1638
  const modules = [];
1344
- const entries = await readdir(srcDir, { withFileTypes: true });
1345
- for (const entry of entries) if (entry.isDirectory()) {
1346
- const moduleName = entry.name;
1347
- const modulePath = join(srcDir, moduleName);
1348
- const dependencies = /* @__PURE__ */ new Set();
1349
- const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
1350
- const hasNative = await fileExists(join(modulePath, "index.native.ts"));
1351
- const hasNode = await fileExists(join(modulePath, "index.node.ts"));
1352
- const files = await getAllFiles(modulePath);
1353
- for (const file of files) {
1354
- const deps = extractAlephaDependencies(await readFile(file, "utf-8"), packageName, moduleName);
1355
- for (const dep of deps) {
1356
- if (dep.endsWith(".ts")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`);
1357
- if (dep.includes("-")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`);
1358
- dependencies.add(dep);
1359
- }
1639
+ async function scanDirectory(dir, prefix) {
1640
+ const entries = await readdir(dir, { withFileTypes: true });
1641
+ for (const entry of entries) if (entry.isDirectory()) {
1642
+ const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
1643
+ const modulePath = join(dir, entry.name);
1644
+ if (await fileExists(join(modulePath, "index.ts"))) {
1645
+ const dependencies = /* @__PURE__ */ new Set();
1646
+ const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
1647
+ const hasNative = await fileExists(join(modulePath, "index.native.ts"));
1648
+ const hasNode = await fileExists(join(modulePath, "index.node.ts"));
1649
+ const files = await getAllFiles(modulePath);
1650
+ for (const file of files) {
1651
+ const deps = extractAlephaDependencies(await readFile(file, "utf-8"), packageName, moduleName);
1652
+ for (const dep of deps) {
1653
+ if (dep.endsWith(".ts")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`);
1654
+ if (dep.includes("-")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`);
1655
+ dependencies.add(dep);
1656
+ }
1657
+ }
1658
+ const module = {
1659
+ name: moduleName,
1660
+ dependencies: Array.from(dependencies)
1661
+ };
1662
+ if (hasNative) module.native = true;
1663
+ if (hasBrowser) module.browser = true;
1664
+ if (hasNode) module.node = true;
1665
+ modules.push(module);
1666
+ } else await scanDirectory(modulePath, moduleName);
1360
1667
  }
1361
- const module = {
1362
- name: moduleName,
1363
- dependencies: Array.from(dependencies)
1364
- };
1365
- if (hasNative) module.native = true;
1366
- if (hasBrowser) module.browser = true;
1367
- if (hasNode) module.node = true;
1368
- modules.push(module);
1369
1668
  }
1669
+ await scanDirectory(srcDir, "");
1370
1670
  detectCircularDependencies(modules);
1371
1671
  return modules;
1372
1672
  }