alepha 0.13.6 → 0.13.8

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 (487) 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/index.browser.js +116 -0
  6. package/dist/api/audits/index.browser.js.map +1 -0
  7. package/dist/api/audits/index.d.ts +1194 -0
  8. package/dist/api/audits/index.js +674 -0
  9. package/dist/api/audits/index.js.map +1 -0
  10. package/dist/{api-files → api/files}/index.browser.js +5 -5
  11. package/dist/api/files/index.browser.js.map +1 -0
  12. package/dist/{api-files → api/files}/index.d.ts +16 -9
  13. package/dist/{api-files → api/files}/index.js +10 -10
  14. package/dist/api/files/index.js.map +1 -0
  15. package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
  16. package/dist/api/jobs/index.browser.js.map +1 -0
  17. package/dist/{api-jobs → api/jobs}/index.d.ts +35 -35
  18. package/dist/{api-jobs → api/jobs}/index.js +9 -9
  19. package/dist/api/jobs/index.js.map +1 -0
  20. package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
  21. package/dist/api/notifications/index.browser.js.map +1 -0
  22. package/dist/api/notifications/index.d.ts +327 -0
  23. package/dist/{api-notifications → api/notifications}/index.js +11 -11
  24. package/dist/api/notifications/index.js.map +1 -0
  25. package/dist/api/parameters/index.browser.js +60 -0
  26. package/dist/api/parameters/index.browser.js.map +1 -0
  27. package/dist/api/parameters/index.d.ts +761 -0
  28. package/dist/api/parameters/index.js +877 -0
  29. package/dist/api/parameters/index.js.map +1 -0
  30. package/dist/{api-users → api/users}/index.browser.js +6 -6
  31. package/dist/api/users/index.browser.js.map +1 -0
  32. package/dist/{api-users → api/users}/index.d.ts +259 -247
  33. package/dist/{api-users → api/users}/index.js +125 -112
  34. package/dist/api/users/index.js.map +1 -0
  35. package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
  36. package/dist/api/verifications/index.browser.js.map +1 -0
  37. package/dist/api/verifications/index.d.ts +248 -0
  38. package/dist/{api-verifications → api/verifications}/index.js +13 -12
  39. package/dist/api/verifications/index.js.map +1 -0
  40. package/dist/bin/index.js +1 -0
  41. package/dist/bin/index.js.map +1 -1
  42. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  43. package/dist/cache/{index.js → core/index.js} +5 -5
  44. package/dist/cache/core/index.js.map +1 -0
  45. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  46. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  47. package/dist/cache/redis/index.js.map +1 -0
  48. package/dist/cli/index.d.ts +71 -9
  49. package/dist/cli/index.js +280 -79
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/command/index.d.ts +63 -2
  52. package/dist/command/index.js +30 -3
  53. package/dist/command/index.js.map +1 -1
  54. package/dist/core/index.browser.js +241 -61
  55. package/dist/core/index.browser.js.map +1 -1
  56. package/dist/core/index.d.ts +170 -90
  57. package/dist/core/index.js +264 -67
  58. package/dist/core/index.js.map +1 -1
  59. package/dist/core/index.native.js +248 -65
  60. package/dist/core/index.native.js.map +1 -1
  61. package/dist/email/index.js +15 -10554
  62. package/dist/email/index.js.map +1 -1
  63. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  64. package/dist/lock/{index.js → core/index.js} +5 -5
  65. package/dist/lock/core/index.js.map +1 -0
  66. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  67. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  68. package/dist/lock/redis/index.js.map +1 -0
  69. package/dist/logger/index.d.ts +4 -4
  70. package/dist/logger/index.js +77 -72
  71. package/dist/logger/index.js.map +1 -1
  72. package/dist/orm/index.d.ts +5 -1
  73. package/dist/orm/index.js +24 -7
  74. package/dist/orm/index.js.map +1 -1
  75. package/dist/queue/core/index.d.ts +548 -0
  76. package/dist/queue/core/index.js +391 -0
  77. package/dist/queue/core/index.js.map +1 -0
  78. package/dist/queue/redis/index.d.ts +28 -0
  79. package/dist/queue/redis/index.js +43 -0
  80. package/dist/queue/redis/index.js.map +1 -0
  81. package/dist/scheduler/index.d.ts +7 -7
  82. package/dist/scheduler/index.js +1 -393
  83. package/dist/scheduler/index.js.map +1 -1
  84. package/dist/security/index.d.ts +1 -1
  85. package/dist/security/index.js +2 -1413
  86. package/dist/security/index.js.map +1 -1
  87. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  88. package/dist/server/auth/index.browser.js.map +1 -0
  89. package/dist/{server-auth → server/auth}/index.d.ts +175 -164
  90. package/dist/server/auth/index.js +742 -0
  91. package/dist/server/auth/index.js.map +1 -0
  92. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  93. package/dist/{server-cache → server/cache}/index.js +2 -2
  94. package/dist/server/cache/index.js.map +1 -0
  95. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  96. package/dist/{server-compress → server/compress}/index.js +2 -2
  97. package/dist/server/compress/index.js.map +1 -0
  98. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  99. package/dist/server/cookies/index.browser.js.map +1 -0
  100. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  101. package/dist/{server-cookies → server/cookies}/index.js +9 -5
  102. package/dist/server/cookies/index.js.map +1 -0
  103. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  104. package/dist/server/core/index.browser.js.map +1 -0
  105. package/dist/server/{index.d.ts → core/index.d.ts} +46 -37
  106. package/dist/server/{index.js → core/index.js} +47 -33
  107. package/dist/server/core/index.js.map +1 -0
  108. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  109. package/dist/{server-cors → server/cors}/index.js +3 -3
  110. package/dist/server/cors/index.js.map +1 -0
  111. package/dist/{server-health → server/health}/index.d.ts +3 -3
  112. package/dist/{server-health → server/health}/index.js +3 -3
  113. package/dist/server/health/index.js.map +1 -0
  114. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  115. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  116. package/dist/server/helmet/index.js.map +1 -0
  117. package/dist/{server-links → server/links}/index.browser.js +5 -5
  118. package/dist/server/links/index.browser.js.map +1 -0
  119. package/dist/{server-links → server/links}/index.d.ts +40 -40
  120. package/dist/{server-links → server/links}/index.js +7 -7
  121. package/dist/server/links/index.js.map +1 -0
  122. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  123. package/dist/server/metrics/index.js +74 -0
  124. package/dist/server/metrics/index.js.map +1 -0
  125. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  126. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  127. package/dist/server/multipart/index.js.map +1 -0
  128. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  129. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  130. package/dist/server/proxy/index.js.map +1 -0
  131. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  132. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  133. package/dist/server/rate-limit/index.js.map +1 -0
  134. package/dist/{server-security → server/security}/index.browser.js +1 -1
  135. package/dist/server/security/index.browser.js.map +1 -0
  136. package/dist/{server-security → server/security}/index.d.ts +4 -4
  137. package/dist/{server-security → server/security}/index.js +4 -4
  138. package/dist/server/security/index.js.map +1 -0
  139. package/dist/{server-static → server/static}/index.d.ts +3 -3
  140. package/dist/{server-static → server/static}/index.js +3 -3
  141. package/dist/server/static/index.js.map +1 -0
  142. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  143. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  144. package/dist/server/swagger/index.js.map +1 -0
  145. package/dist/thread/index.js +2 -2
  146. package/dist/thread/index.js.map +1 -1
  147. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  148. package/dist/topic/{index.js → core/index.js} +6 -6
  149. package/dist/topic/core/index.js.map +1 -0
  150. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  151. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  152. package/dist/topic/redis/index.js.map +1 -0
  153. package/dist/vite/index.d.ts +13 -2
  154. package/dist/vite/index.js +114 -50
  155. package/dist/vite/index.js.map +1 -1
  156. package/dist/websocket/index.browser.js +3 -3
  157. package/dist/websocket/index.browser.js.map +1 -1
  158. package/dist/websocket/index.js +4 -4
  159. package/dist/websocket/index.js.map +1 -1
  160. package/package.json +160 -156
  161. package/src/api/audits/controllers/AuditController.ts +186 -0
  162. package/src/api/audits/entities/audits.ts +132 -0
  163. package/src/api/audits/index.browser.ts +18 -0
  164. package/src/api/audits/index.ts +58 -0
  165. package/src/api/audits/primitives/$audit.ts +159 -0
  166. package/src/api/audits/schemas/auditQuerySchema.ts +23 -0
  167. package/src/api/audits/schemas/auditResourceSchema.ts +9 -0
  168. package/src/api/audits/schemas/createAuditSchema.ts +27 -0
  169. package/src/api/audits/services/AuditService.ts +412 -0
  170. package/src/{api-files → api/files}/index.ts +1 -0
  171. package/src/api/parameters/controllers/ConfigController.ts +324 -0
  172. package/src/api/parameters/entities/parameters.ts +113 -0
  173. package/src/api/parameters/index.ts +60 -0
  174. package/src/api/parameters/primitives/$config.ts +351 -0
  175. package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +30 -0
  176. package/src/api/parameters/services/ConfigStore.ts +491 -0
  177. package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +19 -0
  178. package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -2
  179. package/src/{api-users → api/users}/index.ts +2 -0
  180. package/src/{api-users → api/users}/primitives/$userRealm.ts +18 -3
  181. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +12 -10
  182. package/src/{api-users → api/users}/services/RegistrationService.ts +2 -1
  183. package/src/{api-users → api/users}/services/SessionService.ts +4 -0
  184. package/src/{api-users → api/users}/services/UserService.ts +3 -0
  185. package/src/{api-verifications → api/verifications}/index.ts +9 -1
  186. package/src/bin/index.ts +1 -0
  187. package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
  188. package/src/cli/assets/appRouterTs.ts +1 -1
  189. package/src/cli/assets/biomeJson.ts +2 -2
  190. package/src/cli/assets/dummySpecTs.ts +7 -0
  191. package/src/cli/assets/editorconfig.ts +13 -0
  192. package/src/cli/assets/indexHtml.ts +1 -1
  193. package/src/cli/assets/mainBrowserTs.ts +1 -1
  194. package/src/cli/assets/mainTs.ts +14 -0
  195. package/src/cli/assets/viteConfigTs.ts +1 -1
  196. package/src/cli/commands/BiomeCommands.ts +2 -0
  197. package/src/cli/commands/CoreCommands.ts +38 -15
  198. package/src/cli/commands/VerifyCommands.ts +6 -2
  199. package/src/cli/commands/ViteCommands.ts +28 -18
  200. package/src/cli/services/AlephaCliUtils.ts +243 -37
  201. package/src/command/helpers/Asker.ts +0 -1
  202. package/src/command/primitives/$command.ts +67 -0
  203. package/src/command/providers/CliProvider.ts +39 -8
  204. package/src/core/Alepha.ts +40 -30
  205. package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
  206. package/src/core/index.shared.ts +1 -0
  207. package/src/core/index.ts +30 -3
  208. package/src/core/providers/EventManager.ts +1 -1
  209. package/src/core/providers/SchemaValidator.ts +1 -1
  210. package/src/core/providers/StateManager.ts +23 -12
  211. package/src/core/providers/TypeProvider.ts +26 -34
  212. package/src/logger/index.ts +8 -6
  213. package/src/logger/primitives/$logger.ts +1 -1
  214. package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
  215. package/src/orm/index.ts +6 -0
  216. package/src/orm/services/PgRelationManager.ts +2 -2
  217. package/src/orm/services/PostgresModelBuilder.ts +11 -7
  218. package/src/orm/services/Repository.ts +16 -7
  219. package/src/orm/services/SqliteModelBuilder.ts +10 -0
  220. package/src/queue/{index.ts → core/index.ts} +2 -3
  221. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  222. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  223. package/src/queue/core/providers/QueueProvider.ts +23 -0
  224. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  225. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  226. package/src/{server-auth → server/auth}/primitives/$auth.ts +7 -0
  227. package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +51 -8
  228. package/src/{server-cookies → server/cookies}/index.ts +2 -1
  229. package/src/server/{index.ts → core/index.ts} +7 -0
  230. package/src/server/{primitives → core/primitives}/$action.ts +10 -1
  231. package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +11 -5
  232. package/src/server/{providers → core/providers}/ServerRouterProvider.ts +13 -7
  233. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  234. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  235. package/src/thread/primitives/$thread.ts +2 -2
  236. package/src/vite/index.ts +0 -2
  237. package/src/vite/tasks/buildServer.ts +3 -4
  238. package/src/vite/tasks/copyAssets.ts +32 -8
  239. package/src/vite/tasks/generateCloudflare.ts +35 -19
  240. package/src/vite/tasks/generateDocker.ts +18 -4
  241. package/src/vite/tasks/generateSitemap.ts +5 -7
  242. package/src/vite/tasks/generateVercel.ts +76 -41
  243. package/src/vite/tasks/runAlepha.ts +16 -1
  244. package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
  245. package/src/websocket/services/WebSocketClient.ts +3 -3
  246. package/dist/api-files/index.browser.js.map +0 -1
  247. package/dist/api-files/index.js.map +0 -1
  248. package/dist/api-jobs/index.browser.js.map +0 -1
  249. package/dist/api-jobs/index.js.map +0 -1
  250. package/dist/api-notifications/index.browser.js.map +0 -1
  251. package/dist/api-notifications/index.d.ts +0 -327
  252. package/dist/api-notifications/index.js.map +0 -1
  253. package/dist/api-parameters/index.browser.js +0 -29
  254. package/dist/api-parameters/index.browser.js.map +0 -1
  255. package/dist/api-parameters/index.d.ts +0 -83
  256. package/dist/api-parameters/index.js +0 -63
  257. package/dist/api-parameters/index.js.map +0 -1
  258. package/dist/api-users/index.browser.js.map +0 -1
  259. package/dist/api-users/index.js.map +0 -1
  260. package/dist/api-verifications/index.browser.js.map +0 -1
  261. package/dist/api-verifications/index.d.ts +0 -229
  262. package/dist/api-verifications/index.js.map +0 -1
  263. package/dist/cache/index.js.map +0 -1
  264. package/dist/cache-redis/index.js.map +0 -1
  265. package/dist/cli/dist-BlfFtOk2.js +0 -2770
  266. package/dist/cli/dist-BlfFtOk2.js.map +0 -1
  267. package/dist/lock/index.js.map +0 -1
  268. package/dist/lock-redis/index.js.map +0 -1
  269. package/dist/queue/index.d.ts +0 -1265
  270. package/dist/queue/index.js +0 -1037
  271. package/dist/queue/index.js.map +0 -1
  272. package/dist/queue-redis/index.d.ts +0 -82
  273. package/dist/queue-redis/index.js +0 -872
  274. package/dist/queue-redis/index.js.map +0 -1
  275. package/dist/server/index.browser.js.map +0 -1
  276. package/dist/server/index.js.map +0 -1
  277. package/dist/server-auth/index.browser.js.map +0 -1
  278. package/dist/server-auth/index.js +0 -1943
  279. package/dist/server-auth/index.js.map +0 -1
  280. package/dist/server-cache/index.js.map +0 -1
  281. package/dist/server-compress/index.js.map +0 -1
  282. package/dist/server-cookies/index.browser.js.map +0 -1
  283. package/dist/server-cookies/index.js.map +0 -1
  284. package/dist/server-cors/index.js.map +0 -1
  285. package/dist/server-health/index.js.map +0 -1
  286. package/dist/server-helmet/index.js.map +0 -1
  287. package/dist/server-links/index.browser.js.map +0 -1
  288. package/dist/server-links/index.js.map +0 -1
  289. package/dist/server-metrics/index.js +0 -4532
  290. package/dist/server-metrics/index.js.map +0 -1
  291. package/dist/server-multipart/index.js.map +0 -1
  292. package/dist/server-proxy/index.js.map +0 -1
  293. package/dist/server-rate-limit/index.js.map +0 -1
  294. package/dist/server-security/index.browser.js.map +0 -1
  295. package/dist/server-security/index.js.map +0 -1
  296. package/dist/server-static/index.js.map +0 -1
  297. package/dist/server-swagger/index.js.map +0 -1
  298. package/dist/topic/index.js.map +0 -1
  299. package/dist/topic-redis/index.js.map +0 -1
  300. package/src/api-parameters/controllers/ParameterController.ts +0 -45
  301. package/src/api-parameters/entities/parameters.ts +0 -30
  302. package/src/api-parameters/index.ts +0 -21
  303. package/src/api-parameters/primitives/$config.ts +0 -79
  304. package/src/api-parameters/services/ParameterStore.ts +0 -23
  305. package/src/queue/interfaces/QueueJob.ts +0 -459
  306. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  307. package/src/queue/providers/QueueProvider.ts +0 -319
  308. package/src/queue/providers/WorkerProvider.ts +0 -344
  309. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  310. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  311. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  312. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  313. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  314. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  315. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  316. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  317. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  318. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  319. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  320. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  321. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  322. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  323. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  324. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  325. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  326. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  327. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  328. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  329. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  330. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  331. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  332. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  333. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  334. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  335. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  336. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  337. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  338. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  339. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  340. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  341. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  342. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  343. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  344. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  345. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  346. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  347. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  348. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  349. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  350. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  351. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  352. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  353. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  354. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  355. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  356. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  357. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  358. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  359. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  360. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  361. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  362. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  363. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  364. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  365. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  366. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  367. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  368. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  369. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  370. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  371. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  372. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  373. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  374. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  375. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  376. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  377. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  378. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  379. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  380. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  381. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  382. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  383. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  384. /package/src/cache/{index.ts → core/index.ts} +0 -0
  385. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  386. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  387. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  388. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  389. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  390. /package/src/lock/{index.ts → core/index.ts} +0 -0
  391. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  392. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  393. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  394. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  395. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  396. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  397. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  398. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  399. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  400. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  401. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  402. /package/src/{server-auth → server/auth}/index.ts +0 -0
  403. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  404. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  405. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  406. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  407. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  408. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  409. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  410. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  411. /package/src/{server-cache → server/cache}/index.ts +0 -0
  412. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  413. /package/src/{server-compress → server/compress}/index.ts +0 -0
  414. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  415. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  416. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  417. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  418. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  419. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  420. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  421. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  422. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  423. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  424. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  425. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  426. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  427. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  428. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  429. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  430. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  431. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  432. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  433. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  434. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  435. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  436. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  437. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  438. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  439. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  440. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  441. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  442. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  443. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  444. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  445. /package/src/{server-cors → server/cors}/index.ts +0 -0
  446. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  447. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  448. /package/src/{server-health → server/health}/index.ts +0 -0
  449. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  450. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  451. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  452. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  453. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  454. /package/src/{server-links → server/links}/index.ts +0 -0
  455. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  456. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  457. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  458. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  459. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  460. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  461. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  462. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  463. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  464. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  465. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  466. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  467. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  468. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  469. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  470. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  471. /package/src/{server-security → server/security}/index.ts +0 -0
  472. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  473. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  474. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  475. /package/src/{server-static → server/static}/index.ts +0 -0
  476. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  477. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  478. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  479. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  480. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  481. /package/src/topic/{index.ts → core/index.ts} +0 -0
  482. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  483. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  484. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  485. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  486. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  487. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
package/dist/cli/index.js CHANGED
@@ -36,7 +36,7 @@ const biomeJson = `
36
36
  },
37
37
  "formatter": {
38
38
  "enabled": true,
39
- "indentStyle": "space"
39
+ "useEditorconfig": true
40
40
  },
41
41
  "linter": {
42
42
  "enabled": true,
@@ -57,6 +57,32 @@ const biomeJson = `
57
57
  }
58
58
  `.trim();
59
59
 
60
+ //#endregion
61
+ //#region ../../src/cli/assets/dummySpecTs.ts
62
+ const dummySpecTs = () => `
63
+ import { test, expect } from "vitest";
64
+
65
+ test("dummy test", () => {
66
+ expect(1 + 1).toBe(2);
67
+ });
68
+ `.trim();
69
+
70
+ //#endregion
71
+ //#region ../../src/cli/assets/editorconfig.ts
72
+ const editorconfig = `
73
+ # https://editorconfig.org
74
+
75
+ root = true
76
+
77
+ [*]
78
+ charset = utf-8
79
+ end_of_line = lf
80
+ insert_final_newline = true
81
+ trim_trailing_whitespace = true
82
+ indent_style = space
83
+ indent_size = 2
84
+ `.trim();
85
+
60
86
  //#endregion
61
87
  //#region ../../src/cli/assets/indexHtml.ts
62
88
  const indexHtml = (browserEntry) => `
@@ -86,6 +112,23 @@ alepha.with(AppRouter);
86
112
  run(alepha);
87
113
  `.trim();
88
114
 
115
+ //#endregion
116
+ //#region ../../src/cli/assets/mainTs.ts
117
+ const mainTs = () => `
118
+ import { Alepha, run } from "alepha";
119
+ import { $logger } from "alepha/logger";
120
+
121
+ const alepha = Alepha.create();
122
+
123
+ alepha.with(() => {
124
+ const log = $logger();
125
+
126
+ log.info("Hello from Alepha!");
127
+ });
128
+
129
+ run(alepha);
130
+ `.trim();
131
+
89
132
  //#endregion
90
133
  //#region ../../src/cli/assets/tsconfigJson.ts
91
134
  const tsconfigJson = `
@@ -132,34 +175,39 @@ var AlephaCliUtils = class {
132
175
  /**
133
176
  * Execute a command using npx with inherited stdio.
134
177
  *
135
- * @param command - The command to execute (will be passed to npx)
136
- * @param env - Optional environment variables to set for the command
137
- * @returns Promise that resolves when the process exits
138
- *
139
178
  * @example
140
179
  * ```ts
141
180
  * const runner = alepha.inject(ProcessRunner);
142
181
  * await runner.exec("tsx watch src/index.ts");
143
182
  * ```
144
183
  */
145
- async exec(command, env = {}) {
184
+ async exec(command, options = {}) {
146
185
  const root = process.cwd();
147
186
  this.log.debug(`Executing command: ${command}`, { cwd: root });
187
+ const runExec = async (app$1, args$1) => {
188
+ const prog = spawn(app$1, args$1, {
189
+ stdio: "inherit",
190
+ cwd: root,
191
+ env: {
192
+ ...process.env,
193
+ ...options.env
194
+ }
195
+ });
196
+ await new Promise((resolve) => prog.on("exit", () => {
197
+ resolve();
198
+ }));
199
+ };
200
+ if (options.global) {
201
+ const [app$1, ...args$1] = command.split(" ");
202
+ await runExec(app$1, args$1);
203
+ return;
204
+ }
148
205
  const suffix = process.platform === "win32" ? ".cmd" : "";
149
206
  const [app, ...args] = command.split(" ");
150
- const execPath = await this.checkFileExists(root, `node_modules/.bin/${app}${suffix}`, true);
207
+ let execPath = await this.checkFileExists(root, `node_modules/.bin/${app}${suffix}`, true);
208
+ if (!execPath) execPath = await this.checkFileExists(root, `node_modules/alepha/node_modules/.bin/${app}${suffix}`, true);
151
209
  if (!execPath) throw new AlephaError(`Could not find executable for command '${app}'. Make sure the package is installed.`);
152
- const prog = spawn(execPath, args, {
153
- stdio: "inherit",
154
- cwd: root,
155
- env: {
156
- ...process.env,
157
- ...env
158
- }
159
- });
160
- await new Promise((resolve) => prog.on("exit", () => {
161
- resolve();
162
- }));
210
+ await runExec(execPath, args);
163
211
  }
164
212
  /**
165
213
  * Write a configuration file to node_modules/.alepha directory.
@@ -197,6 +245,24 @@ var AlephaCliUtils = class {
197
245
  await this.fs.rm(join(root, "package-lock.json"), { force: true });
198
246
  await this.fs.rm(join(root, "pnpm-lock.yaml"), { force: true });
199
247
  }
248
+ async ensurePnpm(root) {
249
+ await this.fs.rm(join(root, "package-lock.json"), { force: true });
250
+ await this.fs.rm(join(root, "yarn.lock"), { force: true });
251
+ await this.fs.rm(join(root, ".yarn"), {
252
+ force: true,
253
+ recursive: true
254
+ });
255
+ await this.fs.rm(join(root, ".yarnrc.yml"), { force: true });
256
+ }
257
+ async ensureNpm(root) {
258
+ await this.fs.rm(join(root, "pnpm-lock.yaml"), { force: true });
259
+ await this.fs.rm(join(root, "yarn.lock"), { force: true });
260
+ await this.fs.rm(join(root, ".yarn"), {
261
+ force: true,
262
+ recursive: true
263
+ });
264
+ await this.fs.rm(join(root, ".yarnrc.yml"), { force: true });
265
+ }
200
266
  /**
201
267
  * Generate package.json content with Alepha dependencies.
202
268
  *
@@ -206,6 +272,13 @@ var AlephaCliUtils = class {
206
272
  generatePackageJsonContent(modes) {
207
273
  const dependencies = { alepha: `^${version}` };
208
274
  const devDependencies = {};
275
+ const scripts = {
276
+ dev: "alepha dev",
277
+ build: "alepha build",
278
+ lint: "alepha lint",
279
+ typecheck: "alepha typecheck",
280
+ verify: "alepha verify"
281
+ };
209
282
  if (modes.ui) {
210
283
  dependencies["@alepha/ui"] = `^${version}`;
211
284
  modes.react = true;
@@ -220,11 +293,7 @@ var AlephaCliUtils = class {
220
293
  type: "module",
221
294
  dependencies,
222
295
  devDependencies,
223
- scripts: {
224
- dev: "alepha dev",
225
- build: "alepha build",
226
- verify: "alepha verify"
227
- }
296
+ scripts
228
297
  };
229
298
  }
230
299
  /**
@@ -243,8 +312,9 @@ var AlephaCliUtils = class {
243
312
  try {
244
313
  await access(packageJsonPath);
245
314
  } catch (error) {
246
- await writeFile(packageJsonPath, JSON.stringify(this.generatePackageJsonContent(modes), null, 2));
247
- return;
315
+ const obj = this.generatePackageJsonContent(modes);
316
+ await writeFile(packageJsonPath, JSON.stringify(obj, null, 2));
317
+ return obj;
248
318
  }
249
319
  const content = await readFile(packageJsonPath, "utf8");
250
320
  const packageJson$1 = JSON.parse(content);
@@ -257,6 +327,7 @@ var AlephaCliUtils = class {
257
327
  Object.assign(packageJson$1.devDependencies, newPackageJson.devDependencies);
258
328
  Object.assign(packageJson$1.scripts, newPackageJson.scripts);
259
329
  await writeFile(packageJsonPath, JSON.stringify(packageJson$1, null, 2));
330
+ return packageJson$1;
260
331
  }
261
332
  async ensureConfig(root, opts) {
262
333
  const tasks = [];
@@ -265,7 +336,8 @@ var AlephaCliUtils = class {
265
336
  if (opts.viteConfigTs) tasks.push(this.ensureViteConfig(root));
266
337
  if (opts.indexHtml) tasks.push(this.ensureIndexHtml(root));
267
338
  if (opts.biomeJson) tasks.push(this.ensureBiomeConfig(root));
268
- await Promise.all(tasks);
339
+ if (opts.editorconfig) tasks.push(this.ensureEditorConfig(root));
340
+ return await Promise.all(tasks);
269
341
  }
270
342
  /**
271
343
  * Ensure tsconfig.json exists in the project.
@@ -321,6 +393,16 @@ var AlephaCliUtils = class {
321
393
  await this.ensureFileExists(root, "biome.json", biomeJson, true);
322
394
  }
323
395
  /**
396
+ * Ensure .editorconfig exists in the project.
397
+ *
398
+ * Creates a standard .editorconfig if none exists.
399
+ *
400
+ * @param root - The root directory of the project
401
+ */
402
+ async ensureEditorConfig(root) {
403
+ await this.ensureFileExists(root, ".editorconfig", editorconfig, true);
404
+ }
405
+ /**
324
406
  * Load Alepha instance from a server entry file.
325
407
  *
326
408
  * Dynamically imports the server entry file and extracts the Alepha instance.
@@ -454,10 +536,14 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
454
536
  rootDir
455
537
  });
456
538
  const flags = options.commandFlags ? ` ${options.commandFlags}` : "";
457
- await this.exec(`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`, { NODE_OPTIONS: "--import tsx" });
539
+ await this.exec(`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`, { env: { NODE_OPTIONS: "--import tsx" } });
458
540
  }
459
541
  }
460
- async getPackageManager(root) {
542
+ async getPackageManager(root, flags) {
543
+ if (flags?.yarn) return "yarn";
544
+ if (flags?.pnpm) return "pnpm";
545
+ if (flags?.npm) return "npm";
546
+ if (flags?.bun) return "bun";
461
547
  if (await this.checkFileExists(root, "yarn.lock", true)) return "yarn";
462
548
  if (await this.checkFileExists(root, "pnpm-lock.yaml", true)) return "pnpm";
463
549
  return "npm";
@@ -478,10 +564,100 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
478
564
  async exists(root, dirName) {
479
565
  return this.fs.exists(join(root, dirName));
480
566
  }
567
+ /**
568
+ * Ensure src/main.ts exists with a minimal Alepha bootstrap.
569
+ *
570
+ * Creates the src directory and main.ts file if the src directory
571
+ * doesn't exist or is empty.
572
+ *
573
+ * @param root - The root directory of the project
574
+ */
575
+ async ensureSrcMain(root) {
576
+ const srcDir = join(root, "src");
577
+ const mainPath = join(srcDir, "main.ts");
578
+ if (!await this.fs.exists(srcDir)) {
579
+ await this.fs.mkdir(srcDir, { recursive: true });
580
+ await this.fs.writeFile(mainPath, mainTs());
581
+ return;
582
+ }
583
+ if ((await this.fs.ls(srcDir)).length === 0) await this.fs.writeFile(mainPath, mainTs());
584
+ }
585
+ /**
586
+ * Ensure test directory exists with a dummy test file.
587
+ *
588
+ * Creates the test directory and a dummy.spec.ts file if the test directory
589
+ * doesn't exist or is empty.
590
+ *
591
+ * @param root - The root directory of the project
592
+ */
593
+ async ensureTestDir(root) {
594
+ const testDir = join(root, "test");
595
+ const dummyPath = join(testDir, "dummy.spec.ts");
596
+ if (!await this.fs.exists(testDir)) {
597
+ await this.fs.mkdir(testDir, { recursive: true });
598
+ await this.fs.writeFile(dummyPath, dummySpecTs());
599
+ return;
600
+ }
601
+ if ((await this.fs.ls(testDir)).length === 0) await this.fs.writeFile(dummyPath, dummySpecTs());
602
+ }
481
603
  async readPackageJson(root) {
482
604
  const packageJson$1 = await this.fs.createFile({ path: join(root, "package.json") }).text();
483
605
  return JSON.parse(packageJson$1);
484
606
  }
607
+ /**
608
+ * Check if a dependency is installed in the project.
609
+ *
610
+ * @param root - The root directory of the project
611
+ * @param packageName - The name of the package to check
612
+ * @returns True if the package is in dependencies or devDependencies
613
+ */
614
+ async hasDependency(root, packageName) {
615
+ try {
616
+ const pkg = await this.readPackageJson(root);
617
+ return !!(pkg.dependencies?.[packageName] || pkg.devDependencies?.[packageName]);
618
+ } catch {
619
+ return false;
620
+ }
621
+ }
622
+ /**
623
+ * Check if Expo is present in the project.
624
+ *
625
+ * @param root - The root directory of the project
626
+ * @returns True if expo is in dependencies or devDependencies
627
+ */
628
+ async hasExpo(root) {
629
+ return this.hasDependency(root, "expo");
630
+ }
631
+ /**
632
+ * Install a dependency if it's missing from the project.
633
+ *
634
+ * Automatically detects the package manager (yarn, pnpm, npm) and installs
635
+ * the package as a dev dependency if not already present.
636
+ */
637
+ async ensureDependency(root, packageName, options = {}) {
638
+ const { dev = true } = options;
639
+ if (await this.hasDependency(root, packageName)) {
640
+ this.log.debug(`Dependency '${packageName}' is already installed`);
641
+ return;
642
+ }
643
+ const pm = await this.getPackageManager(root);
644
+ let cmd;
645
+ switch (pm) {
646
+ case "yarn":
647
+ cmd = `yarn add ${dev ? "-D" : ""} ${packageName}`;
648
+ break;
649
+ case "pnpm":
650
+ cmd = `pnpm add ${dev ? "-D" : ""} ${packageName}`;
651
+ break;
652
+ default: cmd = `npm install ${dev ? "--save-dev" : ""} ${packageName}`;
653
+ }
654
+ cmd = cmd.replace(/\s+/g, " ").trim();
655
+ if (options.run) await options.run(cmd, { alias: `installing ${packageName}` });
656
+ else {
657
+ this.log.debug(`Installing ${packageName}`);
658
+ await this.exec(cmd, { global: true });
659
+ }
660
+ }
485
661
  };
486
662
 
487
663
  //#endregion
@@ -494,6 +670,7 @@ var BiomeCommands = class {
494
670
  description: "Format the codebase using Biome",
495
671
  handler: async ({ root }) => {
496
672
  await this.utils.ensureConfig(root, { biomeJson: true });
673
+ await this.utils.ensureDependency(root, "@biomejs/biome");
497
674
  await this.utils.exec(`biome format --fix`);
498
675
  }
499
676
  });
@@ -502,6 +679,7 @@ var BiomeCommands = class {
502
679
  description: "Run linter across the codebase using Biome",
503
680
  handler: async ({ root }) => {
504
681
  await this.utils.ensureConfig(root, { biomeJson: true });
682
+ await this.utils.ensureDependency(root, "@biomejs/biome");
505
683
  await this.utils.exec(`biome check --formatter-enabled=false --fix`);
506
684
  }
507
685
  });
@@ -550,29 +728,42 @@ var CoreCommands = class {
550
728
  flags: t.object({
551
729
  yarn: t.optional(t.boolean({ description: "Use Yarn package manager" })),
552
730
  pnpm: t.optional(t.boolean({ description: "Use pnpm package manager" })),
731
+ npm: t.optional(t.boolean({ description: "Use npm package manager" })),
732
+ bun: t.optional(t.boolean({ description: "Use Bun package manager" })),
553
733
  react: t.optional(t.boolean({ description: "Include Alepha React dependencies" })),
554
- ui: t.optional(t.boolean({ description: "Include Alepha UI dependencies" }))
734
+ ui: t.optional(t.boolean({ description: "Include Alepha UI dependencies" })),
735
+ test: t.optional(t.boolean({ description: "Include Vitest and create test directory" }))
555
736
  }),
556
737
  handler: async ({ run, flags, root }) => {
557
738
  if (flags.ui) flags.react = true;
739
+ const isExpo = await this.utils.hasExpo(root);
558
740
  await run({
559
- name: "Ensuring configuration files",
741
+ name: "ensuring configuration files",
560
742
  handler: async () => {
561
743
  await this.utils.ensureConfig(root, {
562
744
  tsconfigJson: true,
563
745
  packageJson: flags,
564
746
  biomeJson: true,
565
- viteConfigTs: true,
566
- indexHtml: !!flags.react
747
+ viteConfigTs: !isExpo,
748
+ editorconfig: true,
749
+ indexHtml: !!flags.react && !isExpo
567
750
  });
751
+ if (!flags.react) await this.utils.ensureSrcMain(root);
568
752
  }
569
753
  });
570
- const guessedPm = await this.utils.getPackageManager(root);
571
- if (flags.yarn || guessedPm === "yarn") {
754
+ const pm = await this.utils.getPackageManager(root, flags);
755
+ if (pm === "yarn") {
572
756
  await this.utils.ensureYarn(root);
573
757
  await run("yarn set version stable");
574
- await run("yarn install", { alias: "Installing dependencies with Yarn" });
575
- } else await run("npm install", { alias: "Installing dependencies with npm" });
758
+ } else if (pm === "pnpm") await this.utils.ensurePnpm(root);
759
+ else await this.utils.ensureNpm(root);
760
+ await run(`${pm} install`, { alias: `installing dependencies with ${pm}` });
761
+ if (!isExpo) await this.utils.ensureDependency(root, "vite", { run });
762
+ await this.utils.ensureDependency(root, "@biomejs/biome", { run });
763
+ if (flags.test) {
764
+ await this.utils.ensureTestDir(root);
765
+ await run(`${pm} ${pm === "yarn" ? "add" : "install"} -D vitest`, { alias: "setup testing with Vitest" });
766
+ }
576
767
  }
577
768
  });
578
769
  };
@@ -784,7 +975,7 @@ var VerifyCommands = class {
784
975
  await run("alepha typecheck");
785
976
  if ((await this.utils.readPackageJson(root)).devDependencies?.vitest) await run("alepha test");
786
977
  if (await this.utils.exists(root, "migrations")) await run("alepha db:check-migrations");
787
- await run("alepha build");
978
+ if (!await this.utils.hasExpo(root)) await run("alepha build");
788
979
  await run("alepha clean");
789
980
  }
790
981
  });
@@ -794,7 +985,8 @@ var VerifyCommands = class {
794
985
  typecheck = $command({
795
986
  name: "typecheck",
796
987
  description: "Check TypeScript types across the codebase",
797
- handler: async () => {
988
+ handler: async ({ root }) => {
989
+ await this.utils.ensureDependency(root, "typescript");
798
990
  await this.utils.exec("tsc --noEmit");
799
991
  }
800
992
  });
@@ -808,6 +1000,7 @@ var ViteCommands = class {
808
1000
  env = $env(t.object({ VITEST_ARGS: t.string({ default: "" }) }));
809
1001
  run = $command({
810
1002
  name: "run",
1003
+ hide: true,
811
1004
  description: "Run a TypeScript file directly",
812
1005
  flags: t.object({ watch: t.optional(t.boolean({
813
1006
  description: "Watch file for changes",
@@ -837,10 +1030,15 @@ var ViteCommands = class {
837
1030
  description: "Filepath to run"
838
1031
  })),
839
1032
  handler: async ({ args, root }) => {
1033
+ const expo = await this.utils.hasExpo(root);
840
1034
  await this.utils.ensureConfig(root, {
841
- viteConfigTs: true,
1035
+ viteConfigTs: !expo,
842
1036
  tsconfigJson: true
843
1037
  });
1038
+ if (expo) {
1039
+ await this.utils.exec(`expo start`);
1040
+ return;
1041
+ }
844
1042
  const entry = await boot.getServerEntry(root, args);
845
1043
  this.log.trace("Entry file found", { entry });
846
1044
  try {
@@ -853,6 +1051,7 @@ var ViteCommands = class {
853
1051
  await this.utils.exec(cmd);
854
1052
  return;
855
1053
  }
1054
+ await this.utils.ensureDependency(root, "vite");
856
1055
  await this.utils.exec(`vite`);
857
1056
  }
858
1057
  });
@@ -873,6 +1072,7 @@ var ViteCommands = class {
873
1072
  }),
874
1073
  handler: async ({ flags, args, run, root }) => {
875
1074
  process.env.ALEPHA_BUILD_MODE = "cli";
1075
+ if (await this.utils.hasExpo(root)) return;
876
1076
  await this.utils.ensureConfig(root, {
877
1077
  viteConfigTs: true,
878
1078
  tsconfigJson: true
@@ -881,6 +1081,7 @@ var ViteCommands = class {
881
1081
  this.log.trace("Entry file found", { entry });
882
1082
  const distDir = "dist";
883
1083
  const clientDir = "public";
1084
+ await this.utils.ensureDependency(root, "vite", { run });
884
1085
  await run.rm("dist", { alias: "clean dist" });
885
1086
  const viteAlephaBuildOptions = (await import(join(root, "vite.config.ts")))?.default?.plugins.find((it) => !!it[OPTIONS])?.[OPTIONS] ?? {};
886
1087
  const stats = flags.stats ?? viteAlephaBuildOptions.stats ?? false;
@@ -916,12 +1117,11 @@ var ViteCommands = class {
916
1117
  if (clientBuilt && hasServer) await unlink(`${distDir}/${clientDir}/index.html`);
917
1118
  }
918
1119
  });
919
- await run({
920
- name: "copy assets",
921
- handler: () => copyAssets({
922
- entry: `${distDir}/index.js`,
923
- distDir
924
- })
1120
+ await copyAssets({
1121
+ root,
1122
+ entry: `${distDir}/index.js`,
1123
+ distDir,
1124
+ run
925
1125
  });
926
1126
  if (hasClient) {
927
1127
  const sitemapBaseUrl = flags.sitemap ?? (typeof viteAlephaBuildOptions.client === "object" ? viteAlephaBuildOptions.client.sitemap?.hostname : void 0);
@@ -979,12 +1179,7 @@ var ViteCommands = class {
979
1179
  tsconfigJson: true,
980
1180
  viteConfigTs: true
981
1181
  });
982
- try {
983
- await import("./dist-BlfFtOk2.js");
984
- } catch {
985
- this.log.error("Vitest is not installed. Please install it with `npm install -D vitest` or `yarn add -D vitest`.");
986
- process.exit(1);
987
- }
1182
+ await this.utils.ensureDependency(root, "vitest");
988
1183
  await this.utils.exec(`vitest run ${this.env.VITEST_ARGS}`);
989
1184
  }
990
1185
  });
@@ -1036,7 +1231,9 @@ var AlephaPackageBuilderCli = class {
1036
1231
  });
1037
1232
  pkgData.exports = {};
1038
1233
  for (const item of modules) {
1039
- const path = item.name === "core" ? "." : `./${item.name.replace("-", "/")}`;
1234
+ let m = `./${item.name.replace("core", "")}`;
1235
+ if (m.endsWith("/")) m = m.slice(0, -1);
1236
+ const path = m;
1040
1237
  pkgData.exports[path] = {};
1041
1238
  pkgData.exports[path].types = `./src/${item.name}/index.ts`;
1042
1239
  if (item.native) pkgData.exports[path]["react-native"] = `./src/${item.name}/index.native.ts`;
@@ -1057,7 +1254,7 @@ var AlephaPackageBuilderCli = class {
1057
1254
  const external = [
1058
1255
  "alepha",
1059
1256
  packageName,
1060
- ...modules.map((item) => `${packageName}/${item.name.replace("-", "/")}`)
1257
+ ...modules.map((item) => `${packageName}/${item.name.replace("-", "/").replace("/core", "")}`)
1061
1258
  ];
1062
1259
  await run.rm(this.dist);
1063
1260
  const build = async (item) => {
@@ -1089,10 +1286,9 @@ var AlephaPackageBuilderCli = class {
1089
1286
  dts: false,
1090
1287
  external
1091
1288
  });
1092
- const config = join(tmpDir, `tsdown-${item.name}.config.js`);
1289
+ const config = join(tmpDir, `tsdown-${item.name.replace("/", "-")}.config.js`);
1093
1290
  await this.fs.writeFile(config, `export default ${JSON.stringify(entries, null, 2)};`);
1094
1291
  await run(`npx tsdown -c=${config}`);
1095
- await this.fs.rm(config);
1096
1292
  };
1097
1293
  const concurrency = Math.ceil(os.cpus().length / 2);
1098
1294
  const queue = modules.slice();
@@ -1169,32 +1365,37 @@ function detectCircularDependencies(modules) {
1169
1365
  }
1170
1366
  async function analyzeModules(srcDir, packageName) {
1171
1367
  const modules = [];
1172
- const entries = await readdir(srcDir, { withFileTypes: true });
1173
- for (const entry of entries) if (entry.isDirectory()) {
1174
- const moduleName = entry.name;
1175
- const modulePath = join(srcDir, moduleName);
1176
- const dependencies = /* @__PURE__ */ new Set();
1177
- const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
1178
- const hasNative = await fileExists(join(modulePath, "index.native.ts"));
1179
- const hasNode = await fileExists(join(modulePath, "index.node.ts"));
1180
- const files = await getAllFiles(modulePath);
1181
- for (const file of files) {
1182
- const deps = extractAlephaDependencies(await readFile(file, "utf-8"), packageName, moduleName);
1183
- for (const dep of deps) {
1184
- if (dep.endsWith(".ts")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`);
1185
- if (dep.includes("-")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`);
1186
- dependencies.add(dep);
1187
- }
1368
+ async function scanDirectory(dir, prefix) {
1369
+ const entries = await readdir(dir, { withFileTypes: true });
1370
+ for (const entry of entries) if (entry.isDirectory()) {
1371
+ const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
1372
+ const modulePath = join(dir, entry.name);
1373
+ if (await fileExists(join(modulePath, "index.ts"))) {
1374
+ const dependencies = /* @__PURE__ */ new Set();
1375
+ const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
1376
+ const hasNative = await fileExists(join(modulePath, "index.native.ts"));
1377
+ const hasNode = await fileExists(join(modulePath, "index.node.ts"));
1378
+ const files = await getAllFiles(modulePath);
1379
+ for (const file of files) {
1380
+ const deps = extractAlephaDependencies(await readFile(file, "utf-8"), packageName, moduleName);
1381
+ for (const dep of deps) {
1382
+ if (dep.endsWith(".ts")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`);
1383
+ if (dep.includes("-")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`);
1384
+ dependencies.add(dep);
1385
+ }
1386
+ }
1387
+ const module = {
1388
+ name: moduleName,
1389
+ dependencies: Array.from(dependencies)
1390
+ };
1391
+ if (hasNative) module.native = true;
1392
+ if (hasBrowser) module.browser = true;
1393
+ if (hasNode) module.node = true;
1394
+ modules.push(module);
1395
+ } else await scanDirectory(modulePath, moduleName);
1188
1396
  }
1189
- const module = {
1190
- name: moduleName,
1191
- dependencies: Array.from(dependencies)
1192
- };
1193
- if (hasNative) module.native = true;
1194
- if (hasBrowser) module.browser = true;
1195
- if (hasNode) module.node = true;
1196
- modules.push(module);
1197
1397
  }
1398
+ await scanDirectory(srcDir, "");
1198
1399
  detectCircularDependencies(modules);
1199
1400
  return modules;
1200
1401
  }