alepha 0.19.0 → 0.19.2

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 (638) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +6 -9
  3. package/dist/api/audits/index.d.ts +378 -346
  4. package/dist/api/audits/index.d.ts.map +1 -1
  5. package/dist/api/files/index.d.ts +216 -184
  6. package/dist/api/files/index.d.ts.map +1 -1
  7. package/dist/api/files/index.js +5 -1
  8. package/dist/api/files/index.js.map +1 -1
  9. package/dist/api/jobs/index.d.ts +528 -496
  10. package/dist/api/jobs/index.d.ts.map +1 -1
  11. package/dist/api/jobs/index.js +3 -3
  12. package/dist/api/jobs/index.js.map +1 -1
  13. package/dist/api/keys/index.d.ts +202 -202
  14. package/dist/api/keys/index.d.ts.map +1 -1
  15. package/dist/api/notifications/index.d.ts +152 -152
  16. package/dist/api/notifications/index.d.ts.map +1 -1
  17. package/dist/api/organizations/index.browser.js +48 -0
  18. package/dist/api/organizations/index.browser.js.map +1 -0
  19. package/dist/api/organizations/index.d.ts +516 -0
  20. package/dist/api/organizations/index.d.ts.map +1 -0
  21. package/dist/api/organizations/index.js +202 -0
  22. package/dist/api/organizations/index.js.map +1 -0
  23. package/dist/api/parameters/index.d.ts +391 -358
  24. package/dist/api/parameters/index.d.ts.map +1 -1
  25. package/dist/api/parameters/index.js +5 -1
  26. package/dist/api/parameters/index.js.map +1 -1
  27. package/dist/api/users/index.browser.js +7 -5
  28. package/dist/api/users/index.browser.js.map +1 -1
  29. package/dist/api/users/index.d.ts +989 -931
  30. package/dist/api/users/index.d.ts.map +1 -1
  31. package/dist/api/users/index.js +292 -146
  32. package/dist/api/users/index.js.map +1 -1
  33. package/dist/api/verifications/index.d.ts +132 -132
  34. package/dist/api/verifications/index.d.ts.map +1 -1
  35. package/dist/api/verifications/index.js +2 -2
  36. package/dist/api/verifications/index.js.map +1 -1
  37. package/dist/batch/index.d.ts +6 -6
  38. package/dist/batch/index.d.ts.map +1 -1
  39. package/dist/billing/index.d.ts +1048 -0
  40. package/dist/billing/index.d.ts.map +1 -0
  41. package/dist/billing/index.js +713 -0
  42. package/dist/billing/index.js.map +1 -0
  43. package/dist/bin/index.js +0 -2
  44. package/dist/bin/index.js.map +1 -1
  45. package/dist/bucket/index.d.ts +10 -10
  46. package/dist/bucket/index.d.ts.map +1 -1
  47. package/dist/bucket/index.js +2 -2
  48. package/dist/bucket/index.js.map +1 -1
  49. package/dist/cache/core/index.d.ts +9 -9
  50. package/dist/cache/core/index.d.ts.map +1 -1
  51. package/dist/cache/core/index.js +2 -2
  52. package/dist/cache/core/index.js.map +1 -1
  53. package/dist/cache/core/index.workerd.js +2 -2
  54. package/dist/cache/core/index.workerd.js.map +1 -1
  55. package/dist/cache/redis/index.d.ts +6 -6
  56. package/dist/cache/redis/index.d.ts.map +1 -1
  57. package/dist/cache/redis/index.js +2 -2
  58. package/dist/cache/redis/index.js.map +1 -1
  59. package/dist/cli/config/index.d.ts +12 -2
  60. package/dist/cli/config/index.d.ts.map +1 -1
  61. package/dist/cli/config/index.js +4 -0
  62. package/dist/cli/config/index.js.map +1 -1
  63. package/dist/cli/core/index.d.ts +183 -139
  64. package/dist/cli/core/index.d.ts.map +1 -1
  65. package/dist/cli/core/index.js +283 -86
  66. package/dist/cli/core/index.js.map +1 -1
  67. package/dist/cli/devtools/index.d.ts +45 -0
  68. package/dist/cli/devtools/index.d.ts.map +1 -0
  69. package/dist/cli/devtools/index.js +170 -0
  70. package/dist/cli/devtools/index.js.map +1 -0
  71. package/dist/cli/platform/index.d.ts +383 -492
  72. package/dist/cli/platform/index.d.ts.map +1 -1
  73. package/dist/cli/platform/index.js +42 -511
  74. package/dist/cli/platform/index.js.map +1 -1
  75. package/dist/cli/vendor/index.d.ts +196 -0
  76. package/dist/cli/vendor/index.d.ts.map +1 -0
  77. package/dist/cli/vendor/index.js +384 -0
  78. package/dist/cli/vendor/index.js.map +1 -0
  79. package/dist/command/index.d.ts +18 -18
  80. package/dist/command/index.d.ts.map +1 -1
  81. package/dist/command/index.js +2 -2
  82. package/dist/command/index.js.map +1 -1
  83. package/dist/core/index.browser.js +4 -4
  84. package/dist/core/index.browser.js.map +1 -1
  85. package/dist/core/index.d.ts +10 -10
  86. package/dist/core/index.d.ts.map +1 -1
  87. package/dist/core/index.js +4 -4
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/index.native.js +4 -4
  90. package/dist/core/index.native.js.map +1 -1
  91. package/dist/core/index.workerd.js +4 -4
  92. package/dist/core/index.workerd.js.map +1 -1
  93. package/dist/crypto/index.d.ts +7 -7
  94. package/dist/crypto/index.d.ts.map +1 -1
  95. package/dist/datetime/index.d.ts +4 -4
  96. package/dist/datetime/index.d.ts.map +1 -1
  97. package/dist/email/brevo/index.d.ts +4 -4
  98. package/dist/email/brevo/index.d.ts.map +1 -1
  99. package/dist/email/core/index.d.ts +15 -11
  100. package/dist/email/core/index.d.ts.map +1 -1
  101. package/dist/email/core/index.js +12 -35
  102. package/dist/email/core/index.js.map +1 -1
  103. package/dist/email/smtp/index.d.ts +12 -12
  104. package/dist/email/smtp/index.d.ts.map +1 -1
  105. package/dist/email/smtp/index.js +7 -4
  106. package/dist/email/smtp/index.js.map +1 -1
  107. package/dist/fake/index.d.ts +4 -8
  108. package/dist/fake/index.d.ts.map +1 -1
  109. package/dist/fake/index.js +55 -889
  110. package/dist/fake/index.js.map +1 -1
  111. package/dist/lock/core/index.d.ts +13 -13
  112. package/dist/lock/core/index.d.ts.map +1 -1
  113. package/dist/lock/core/index.js +2 -2
  114. package/dist/lock/core/index.js.map +1 -1
  115. package/dist/lock/redis/index.d.ts +4 -4
  116. package/dist/lock/redis/index.d.ts.map +1 -1
  117. package/dist/logger/index.d.ts +16 -15
  118. package/dist/logger/index.d.ts.map +1 -1
  119. package/dist/logger/index.js +5 -2
  120. package/dist/logger/index.js.map +1 -1
  121. package/dist/mcp/index.d.ts +11 -11
  122. package/dist/mcp/index.d.ts.map +1 -1
  123. package/dist/mcp/index.js +2 -2
  124. package/dist/mcp/index.js.map +1 -1
  125. package/dist/orm/core/index.browser.js +11 -1
  126. package/dist/orm/core/index.browser.js.map +1 -1
  127. package/dist/orm/core/index.bun.js +53 -16
  128. package/dist/orm/core/index.bun.js.map +1 -1
  129. package/dist/orm/core/index.d.ts +95 -51
  130. package/dist/orm/core/index.d.ts.map +1 -1
  131. package/dist/orm/core/index.js +55 -14
  132. package/dist/orm/core/index.js.map +1 -1
  133. package/dist/orm/postgres/index.bun.js +17 -11
  134. package/dist/orm/postgres/index.bun.js.map +1 -1
  135. package/dist/orm/postgres/index.d.ts +21 -15
  136. package/dist/orm/postgres/index.d.ts.map +1 -1
  137. package/dist/orm/postgres/index.js +19 -13
  138. package/dist/orm/postgres/index.js.map +1 -1
  139. package/dist/queue/core/index.d.ts +14 -14
  140. package/dist/queue/core/index.d.ts.map +1 -1
  141. package/dist/queue/core/index.js +2 -2
  142. package/dist/queue/core/index.js.map +1 -1
  143. package/dist/queue/core/index.workerd.js +2 -2
  144. package/dist/queue/core/index.workerd.js.map +1 -1
  145. package/dist/queue/redis/index.d.ts +4 -4
  146. package/dist/queue/redis/index.d.ts.map +1 -1
  147. package/dist/queue/redis/index.js +2 -2
  148. package/dist/queue/redis/index.js.map +1 -1
  149. package/dist/react/auth/index.d.ts +9 -9
  150. package/dist/react/auth/index.d.ts.map +1 -1
  151. package/dist/react/core/index.d.ts +6 -6
  152. package/dist/react/core/index.d.ts.map +1 -1
  153. package/dist/react/core/index.js +5 -4
  154. package/dist/react/core/index.js.map +1 -1
  155. package/dist/react/form/index.d.ts +4 -4
  156. package/dist/react/form/index.d.ts.map +1 -1
  157. package/dist/react/head/index.d.ts +4 -4
  158. package/dist/react/head/index.d.ts.map +1 -1
  159. package/dist/react/i18n/index.d.ts +9 -9
  160. package/dist/react/i18n/index.d.ts.map +1 -1
  161. package/dist/react/intro/index.d.ts +2 -2
  162. package/dist/react/intro/index.d.ts.map +1 -1
  163. package/dist/react/intro/index.js +3 -4
  164. package/dist/react/intro/index.js.map +1 -1
  165. package/dist/react/router/index.browser.js +4 -5
  166. package/dist/react/router/index.browser.js.map +1 -1
  167. package/dist/react/router/index.d.ts +215 -215
  168. package/dist/react/router/index.d.ts.map +1 -1
  169. package/dist/react/router/index.js +6 -7
  170. package/dist/react/router/index.js.map +1 -1
  171. package/dist/react/testing/index.d.ts +2 -2
  172. package/dist/react/testing/index.d.ts.map +1 -1
  173. package/dist/react/testing/index.js +2 -4
  174. package/dist/react/testing/index.js.map +1 -1
  175. package/dist/redis/index.d.ts +19 -19
  176. package/dist/redis/index.d.ts.map +1 -1
  177. package/dist/retry/index.d.ts +4 -4
  178. package/dist/retry/index.d.ts.map +1 -1
  179. package/dist/scheduler/index.d.ts +13 -13
  180. package/dist/scheduler/index.d.ts.map +1 -1
  181. package/dist/scheduler/index.js +2 -2
  182. package/dist/scheduler/index.js.map +1 -1
  183. package/dist/scheduler/index.workerd.js +2 -2
  184. package/dist/scheduler/index.workerd.js.map +1 -1
  185. package/dist/security/index.browser.js +1 -1
  186. package/dist/security/index.browser.js.map +1 -1
  187. package/dist/security/index.d.ts +47 -47
  188. package/dist/security/index.d.ts.map +1 -1
  189. package/dist/security/index.js +9 -12
  190. package/dist/security/index.js.map +1 -1
  191. package/dist/server/auth/index.d.ts +170 -169
  192. package/dist/server/auth/index.d.ts.map +1 -1
  193. package/dist/server/auth/index.js +16 -2
  194. package/dist/server/auth/index.js.map +1 -1
  195. package/dist/server/cookies/index.d.ts +7 -7
  196. package/dist/server/cookies/index.d.ts.map +1 -1
  197. package/dist/server/core/index.d.ts +76 -76
  198. package/dist/server/core/index.d.ts.map +1 -1
  199. package/dist/server/core/index.js +23 -17
  200. package/dist/server/core/index.js.map +1 -1
  201. package/dist/server/cors/index.d.ts +13 -13
  202. package/dist/server/cors/index.d.ts.map +1 -1
  203. package/dist/server/cors/index.js +2 -2
  204. package/dist/server/cors/index.js.map +1 -1
  205. package/dist/server/etag/index.d.ts +9 -9
  206. package/dist/server/etag/index.d.ts.map +1 -1
  207. package/dist/server/health/index.d.ts +20 -20
  208. package/dist/server/health/index.d.ts.map +1 -1
  209. package/dist/server/links/index.browser.js +2 -2
  210. package/dist/server/links/index.browser.js.map +1 -1
  211. package/dist/server/links/index.d.ts +66 -66
  212. package/dist/server/links/index.d.ts.map +1 -1
  213. package/dist/server/links/index.js +4 -4
  214. package/dist/server/links/index.js.map +1 -1
  215. package/dist/server/metrics/index.d.ts +7 -7
  216. package/dist/server/metrics/index.d.ts.map +1 -1
  217. package/dist/server/proxy/index.d.ts +5 -5
  218. package/dist/server/proxy/index.d.ts.map +1 -1
  219. package/dist/server/rate-limit/index.d.ts +12 -12
  220. package/dist/server/rate-limit/index.d.ts.map +1 -1
  221. package/dist/server/rate-limit/index.js +2 -2
  222. package/dist/server/rate-limit/index.js.map +1 -1
  223. package/dist/server/static/index.d.ts +5 -5
  224. package/dist/server/static/index.d.ts.map +1 -1
  225. package/dist/server/swagger/index.d.ts +7 -7
  226. package/dist/server/swagger/index.d.ts.map +1 -1
  227. package/dist/server/swagger/index.js +2 -2
  228. package/dist/server/swagger/index.js.map +1 -1
  229. package/dist/sms/index.d.ts +11 -7
  230. package/dist/sms/index.d.ts.map +1 -1
  231. package/dist/sms/index.js +9 -15
  232. package/dist/sms/index.js.map +1 -1
  233. package/dist/system/index.d.ts +4 -4
  234. package/dist/system/index.d.ts.map +1 -1
  235. package/dist/topic/core/index.d.ts +6 -6
  236. package/dist/topic/core/index.d.ts.map +1 -1
  237. package/dist/topic/redis/index.d.ts +7 -7
  238. package/dist/topic/redis/index.d.ts.map +1 -1
  239. package/dist/topic/redis/index.js +2 -2
  240. package/dist/topic/redis/index.js.map +1 -1
  241. package/dist/websocket/index.d.ts +36 -36
  242. package/dist/websocket/index.d.ts.map +1 -1
  243. package/dist/websocket/index.js +2 -2
  244. package/dist/websocket/index.js.map +1 -1
  245. package/package.json +37 -32
  246. package/src/api/files/{controllers → __tests__}/FileController.spec.ts +189 -143
  247. package/src/api/files/{services → __tests__}/FileService.spec.ts +50 -30
  248. package/src/api/files/controllers/FileController.ts +6 -0
  249. package/src/api/jobs/{services → __tests__}/JobService.spec.ts +1 -1
  250. package/src/api/jobs/providers/JobProvider.ts +3 -3
  251. package/src/api/keys/{services → __tests__}/ApiKeyService.spec.ts +1 -1
  252. package/src/api/organizations/__tests__/OrganizationService.spec.ts +193 -0
  253. package/src/api/organizations/controllers/AdminOrganizationController.ts +103 -0
  254. package/src/api/organizations/entities/organizations.ts +20 -0
  255. package/src/api/organizations/index.browser.ts +10 -0
  256. package/src/api/organizations/index.ts +31 -0
  257. package/src/api/organizations/schemas/createOrganizationSchema.ts +10 -0
  258. package/src/api/organizations/schemas/organizationQuerySchema.ts +10 -0
  259. package/src/api/organizations/schemas/organizationResourceSchema.ts +6 -0
  260. package/src/api/organizations/schemas/updateOrganizationSchema.ts +7 -0
  261. package/src/api/organizations/services/OrganizationService.ts +75 -0
  262. package/src/api/parameters/services/ParameterProvider.ts +6 -1
  263. package/src/api/users/__tests__/$realm.spec.ts +191 -0
  264. package/src/api/users/__tests__/RealmProvider.spec.ts +53 -0
  265. package/src/api/users/__tests__/SessionService.spec.ts +778 -0
  266. package/src/api/users/{jobs → __tests__}/UserJobs.spec.ts +1 -1
  267. package/src/api/users/atoms/realmAuthSettingsAtom.ts +24 -0
  268. package/src/api/users/controllers/RealmController.ts +5 -11
  269. package/src/api/users/entities/users.ts +9 -3
  270. package/src/api/users/index.ts +23 -3
  271. package/src/api/users/primitives/$realm.ts +23 -11
  272. package/src/api/users/providers/RealmProvider.ts +23 -3
  273. package/src/api/users/services/RegistrationService.ts +3 -2
  274. package/src/api/users/services/SessionService.ts +249 -8
  275. package/src/api/users/services/UserService.ts +1 -1
  276. package/src/api/verifications/{jobs → __tests__}/VerificationJobs.spec.ts +4 -2
  277. package/src/api/verifications/parameters/VerificationParameters.ts +2 -2
  278. package/src/billing/__tests__/BillingService.spec.ts +136 -0
  279. package/src/billing/__tests__/PaymentMethodService.spec.ts +78 -0
  280. package/src/billing/controllers/AdminBillingController.ts +149 -0
  281. package/src/billing/controllers/BillingController.ts +108 -0
  282. package/src/billing/entities/paymentIntents.ts +34 -0
  283. package/src/billing/entities/paymentMethods.ts +24 -0
  284. package/src/billing/entities/refunds.ts +22 -0
  285. package/src/billing/errors/BillingError.ts +5 -0
  286. package/src/billing/index.ts +76 -0
  287. package/src/billing/providers/BillingProvider.ts +79 -0
  288. package/src/billing/providers/MemoryBillingProvider.ts +139 -0
  289. package/src/billing/schemas/intentSchemas.ts +60 -0
  290. package/src/billing/schemas/paymentMethodSchemas.ts +13 -0
  291. package/src/billing/schemas/refundSchemas.ts +6 -0
  292. package/src/billing/services/BillingService.ts +325 -0
  293. package/src/billing/services/PaymentMethodService.ts +82 -0
  294. package/src/bin/index.ts +0 -2
  295. package/src/bucket/providers/LocalFileStorageProvider.ts +2 -2
  296. package/src/cache/core/{primitives → __tests__}/$cache.middleware.spec.ts +1 -1
  297. package/src/cache/core/{providers → __tests__}/MemoryCacheProvider.spec.ts +1 -1
  298. package/src/cache/core/primitives/$cache.ts +2 -2
  299. package/src/cache/redis/providers/RedisCacheProvider.ts +2 -2
  300. package/src/cli/config/defineConfig.ts +20 -0
  301. package/src/cli/core/{services → __tests__}/ProjectScaffolder.spec.ts +1 -1
  302. package/src/cli/core/{commands/gen → __tests__}/changelog.spec.ts +1 -1
  303. package/src/cli/core/{commands → __tests__}/init.spec.ts +4 -12
  304. package/src/cli/core/assets.ts +0 -1
  305. package/src/cli/core/atoms/devOptions.ts +0 -5
  306. package/src/cli/core/commands/build.ts +2 -2
  307. package/src/cli/core/commands/dev.ts +165 -30
  308. package/src/cli/core/commands/gen/changelog.ts +2 -2
  309. package/src/cli/core/commands/init.ts +2 -7
  310. package/src/cli/core/commands/verify.ts +0 -1
  311. package/src/cli/core/providers/AppEntryProvider.ts +2 -2
  312. package/src/cli/core/providers/ViteDevServerProvider.ts +53 -46
  313. package/src/cli/core/services/PackageManagerUtils.ts +8 -3
  314. package/src/cli/core/services/ProjectScaffolder.ts +20 -20
  315. package/src/cli/core/tasks/BuildClientTask.ts +8 -0
  316. package/src/cli/core/tasks/BuildServerTask.ts +17 -4
  317. package/src/cli/core/templates/alephaConfigTs.ts +0 -6
  318. package/src/cli/core/templates/webAdminDashboardTsx.ts +17 -0
  319. package/src/cli/core/templates/webAppRouterTs.ts +85 -2
  320. package/src/cli/devtools/atoms/devtoolsOptions.ts +26 -0
  321. package/src/cli/devtools/index.ts +194 -0
  322. package/src/cli/platform/{adapters → __tests__}/CloudflareAdapter.spec.ts +2 -2
  323. package/src/cli/platform/{providers → __tests__}/GitHubSecretStore.spec.ts +1 -1
  324. package/src/cli/platform/{services → __tests__}/NamingService.spec.ts +1 -1
  325. package/src/cli/platform/{providers → __tests__}/PlatformCacheProvider.spec.ts +1 -1
  326. package/src/cli/platform/{services → __tests__}/PlatformInspector.spec.ts +1 -1
  327. package/src/cli/platform/{services → __tests__}/PlatformOrchestrator.spec.ts +3 -3
  328. package/src/cli/platform/{services → __tests__}/SecretFilterService.spec.ts +1 -1
  329. package/src/cli/platform/{commands → __tests__}/SecretsCommand.spec.ts +1 -1
  330. package/src/cli/platform/{adapters → __tests__}/VercelAdapter.spec.ts +2 -2
  331. package/src/cli/platform/atoms/platformOptions.ts +2 -10
  332. package/src/cli/platform/commands/SecretsCommand.ts +2 -2
  333. package/src/cli/platform/commands/platform.ts +2 -11
  334. package/src/cli/platform/index.ts +34 -11
  335. package/src/cli/platform/services/PlatformInspector.ts +2 -2
  336. package/src/cli/platform/services/PlatformOrchestrator.ts +0 -9
  337. package/src/cli/vendor/__tests__/VendorService.spec.ts +407 -0
  338. package/src/cli/vendor/atoms/vendorOptions.ts +41 -0
  339. package/src/cli/vendor/commands/VendorCommand.ts +204 -0
  340. package/src/cli/vendor/index.ts +43 -0
  341. package/src/cli/vendor/services/VendorService.ts +338 -0
  342. package/src/command/{providers → __tests__}/CliProvider.spec.ts +1 -1
  343. package/src/command/{helpers → __tests__}/EnvUtils.spec.ts +1 -1
  344. package/src/command/providers/CliProvider.ts +2 -2
  345. package/src/core/{primitives → __tests__}/$atom.spec.ts +2 -2
  346. package/src/core/{primitives → __tests__}/$memoize.spec.ts +1 -1
  347. package/src/core/{primitives → __tests__}/$mode.spec.ts +1 -1
  348. package/src/core/{primitives → __tests__}/$pipeline.spec.ts +1 -1
  349. package/src/core/{primitives → __tests__}/$scope.spec.ts +2 -2
  350. package/src/core/{providers → __tests__}/KeylessJsonSchemaCodec.spec.ts +1 -1
  351. package/src/core/{providers → __tests__}/SchemaValidator.spec.ts +1 -1
  352. package/src/core/{helpers → __tests__}/jsonSchemaToTypeBox.spec.ts +1 -1
  353. package/src/core/index.shared.ts +1 -1
  354. package/src/core/primitives/{$use.ts → $state.ts} +4 -4
  355. package/src/crypto/{providers → __tests__}/BrowserCryptoProvider.browser.spec.ts +1 -1
  356. package/src/crypto/{providers → __tests__}/CryptoProvider.spec.ts +1 -1
  357. package/src/datetime/{primitives → __tests__}/$debounce.spec.ts +1 -1
  358. package/src/datetime/{primitives → __tests__}/$throttle.spec.ts +1 -1
  359. package/src/datetime/{primitives → __tests__}/$timeout.spec.ts +1 -1
  360. package/src/email/brevo/{providers → __tests__}/BrevoEmailProvider.spec.ts +1 -1
  361. package/src/email/core/{providers → __tests__}/LocalEmailProvider.spec.ts +39 -150
  362. package/src/email/core/providers/LocalEmailProvider.ts +13 -51
  363. package/src/email/smtp/providers/NodemailerEmailProvider.ts +2 -2
  364. package/src/lock/core/{primitives → __tests__}/$lock.middleware.spec.ts +1 -1
  365. package/src/lock/core/primitives/$lock.ts +2 -2
  366. package/src/logger/index.ts +10 -4
  367. package/src/mcp/transports/SseMcpTransport.ts +2 -2
  368. package/src/orm/__tests__/ModelBuilder-tests.ts +53 -0
  369. package/src/orm/__tests__/ModelBuilder.spec.ts +80 -0
  370. package/src/orm/__tests__/organization-tests.ts +200 -0
  371. package/src/orm/__tests__/organization.spec.ts +103 -0
  372. package/src/orm/core/{providers/drivers → __tests__}/BunSqliteProvider.bun.spec.ts +5 -2
  373. package/src/orm/core/constants/PG_SYMBOLS.ts +2 -0
  374. package/src/orm/core/index.shared.ts +1 -0
  375. package/src/orm/core/primitives/$entity.ts +31 -0
  376. package/src/orm/core/providers/DatabaseTypeProvider.ts +11 -0
  377. package/src/orm/core/providers/DrizzleKitProvider.ts +1 -1
  378. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +2 -2
  379. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +3 -3
  380. package/src/orm/core/services/ModelBuilder.ts +11 -0
  381. package/src/orm/core/services/QueryManager.ts +16 -2
  382. package/src/orm/core/services/Repository.ts +70 -10
  383. package/src/orm/postgres/{providers → __tests__}/BunPostgresProvider.bun.spec.ts +1 -1
  384. package/src/orm/postgres/services/PostgresModelBuilder.ts +9 -1
  385. package/src/queue/core/providers/WorkerProvider.ts +2 -2
  386. package/src/queue/redis/providers/RedisQueueProvider.ts +2 -2
  387. package/src/react/core/{hooks → __tests__}/useAction.browser.spec.tsx +1 -1
  388. package/src/react/core/hooks/useAction.ts +7 -6
  389. package/src/react/head/{providers → __tests__}/BrowserHeadProvider.browser.spec.ts +1 -1
  390. package/src/react/head/{helpers → __tests__}/SeoExpander.spec.ts +1 -1
  391. package/src/react/i18n/{providers → __tests__}/I18nProvider.spec.ts +1 -1
  392. package/src/react/i18n/{hooks → __tests__}/useI18n.browser.spec.tsx +1 -1
  393. package/src/react/intro/components/GettingStartedDevtoolsSlide.tsx +3 -6
  394. package/src/react/router/{providers → __tests__}/ReactBrowserProvider.browser.spec.ts +1 -1
  395. package/src/react/router/providers/ReactBrowserProvider.ts +2 -2
  396. package/src/react/router/providers/ReactPageProvider.ts +2 -2
  397. package/src/react/router/providers/ReactServerProvider.ts +3 -3
  398. package/src/redis/{providers → __tests__}/BunRedisProvider.bun.spec.ts +4 -4
  399. package/src/retry/{primitives → __tests__}/$retry.middleware.spec.ts +1 -1
  400. package/src/router/{TemplatedPathParser.spec.ts → __tests__/TemplatedPathParser.spec.ts} +1 -1
  401. package/src/scheduler/primitives/$scheduler.ts +2 -2
  402. package/src/security/{primitives → __tests__}/$secure-browser.spec.ts +1 -1
  403. package/src/security/{primitives → __tests__}/$secure.spec.ts +1 -1
  404. package/src/security/primitives/$issuer.ts +1 -1
  405. package/src/security/providers/JwtProvider.ts +6 -10
  406. package/src/security/providers/SecurityProvider.ts +6 -11
  407. package/src/security/schemas/userAccountInfoSchema.ts +3 -3
  408. package/src/server/auth/providers/ServerAuthProvider.ts +24 -2
  409. package/src/server/cookies/{services → __tests__}/CookieParser.spec.ts +1 -1
  410. package/src/server/core/{primitives → __tests__}/$circuit.spec.ts +1 -1
  411. package/src/server/core/{providers → __tests__}/NodeHttpServerProvider.spec.ts +1 -1
  412. package/src/server/core/{providers → __tests__}/ServerBodyParserProvider.spec.ts +31 -1
  413. package/src/server/core/{providers → __tests__}/ServerCompressProvider.spec.ts +1 -1
  414. package/src/server/core/{providers → __tests__}/ServerHelmetProvider.spec.ts +4 -1
  415. package/src/server/core/{providers → __tests__}/ServerMultipartProvider.spec.ts +1 -1
  416. package/src/server/core/{services → __tests__}/ServerRequestParser.spec.ts +1 -1
  417. package/src/server/core/primitives/$action.ts +2 -2
  418. package/src/server/core/primitives/$sse.ts +2 -2
  419. package/src/server/core/providers/ServerBodyParserProvider.ts +21 -12
  420. package/src/server/core/providers/ServerCompressProvider.ts +2 -2
  421. package/src/server/core/providers/ServerHelmetProvider.ts +2 -2
  422. package/src/server/core/providers/ServerMultipartProvider.ts +2 -2
  423. package/src/server/core/providers/ServerRouterProvider.ts +1 -5
  424. package/src/server/cors/{primitives → __tests__}/$cors.spec.ts +1 -1
  425. package/src/server/cors/providers/ServerCorsProvider.ts +2 -2
  426. package/src/server/links/{services → __tests__}/BatchCollector.spec.ts +1 -1
  427. package/src/server/links/providers/LinkProvider.ts +2 -2
  428. package/src/server/links/providers/RemotePrimitiveProvider.ts +2 -2
  429. package/src/server/links/providers/ServerLinksProvider.ts +2 -2
  430. package/src/server/rate-limit/{primitives → __tests__}/$rateLimit.spec.ts +1 -1
  431. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +2 -2
  432. package/src/server/swagger/providers/ServerSwaggerProvider.ts +2 -2
  433. package/src/sms/{providers → __tests__}/LocalSmsProvider.spec.ts +35 -29
  434. package/src/sms/providers/LocalSmsProvider.ts +13 -24
  435. package/src/system/{providers → __tests__}/MemoryFileSystemProvider.spec.ts +1 -1
  436. package/src/system/{providers → __tests__}/MemoryShellProvider.spec.ts +1 -1
  437. package/src/topic/redis/providers/RedisTopicProvider.ts +2 -2
  438. package/src/websocket/{services → __tests__}/RoomManager.spec.ts +1 -1
  439. package/src/websocket/providers/NodeWebSocketServerProvider.ts +2 -2
  440. package/tsconfig.base.json +1 -0
  441. package/assets/devtools-ui/200.html +0 -10
  442. package/assets/devtools-ui/200.html.br +0 -0
  443. package/assets/devtools-ui/404.html +0 -10
  444. package/assets/devtools-ui/404.html.br +0 -0
  445. package/assets/devtools-ui/CNAME +0 -1
  446. package/assets/devtools-ui/asset.CHpVij2M.css +0 -1
  447. package/assets/devtools-ui/asset.CHpVij2M.css.br +0 -0
  448. package/assets/devtools-ui/asset.DJ-i0UDz.css +0 -1
  449. package/assets/devtools-ui/asset.DJ-i0UDz.css.br +0 -0
  450. package/assets/devtools-ui/chunk.1jwpJORo.js +0 -1
  451. package/assets/devtools-ui/chunk.1jwpJORo.js.br +0 -0
  452. package/assets/devtools-ui/chunk.B0r2wfUL.js +0 -1
  453. package/assets/devtools-ui/chunk.B0r2wfUL.js.br +0 -0
  454. package/assets/devtools-ui/chunk.BScN4dVR.js +0 -84
  455. package/assets/devtools-ui/chunk.BScN4dVR.js.br +0 -0
  456. package/assets/devtools-ui/chunk.BispuoY4.js +0 -1
  457. package/assets/devtools-ui/chunk.BispuoY4.js.br +0 -0
  458. package/assets/devtools-ui/chunk.BtrPUUd7.js +0 -2
  459. package/assets/devtools-ui/chunk.BtrPUUd7.js.br +0 -0
  460. package/assets/devtools-ui/chunk.C-KMHgqf.js +0 -1
  461. package/assets/devtools-ui/chunk.C-KMHgqf.js.br +0 -0
  462. package/assets/devtools-ui/chunk.C2zQ3CF6.js +0 -7
  463. package/assets/devtools-ui/chunk.C2zQ3CF6.js.br +0 -0
  464. package/assets/devtools-ui/chunk.C619McpO.js +0 -1
  465. package/assets/devtools-ui/chunk.C619McpO.js.br +0 -0
  466. package/assets/devtools-ui/chunk.C9OsYsVl.js +0 -1
  467. package/assets/devtools-ui/chunk.C9OsYsVl.js.br +0 -3
  468. package/assets/devtools-ui/chunk.CAC_-151.js +0 -1
  469. package/assets/devtools-ui/chunk.CAC_-151.js.br +0 -0
  470. package/assets/devtools-ui/chunk.CCmesWfx.js +0 -1
  471. package/assets/devtools-ui/chunk.CCmesWfx.js.br +0 -0
  472. package/assets/devtools-ui/chunk.CFQDmrcV.js +0 -1
  473. package/assets/devtools-ui/chunk.CFQDmrcV.js.br +0 -0
  474. package/assets/devtools-ui/chunk.CgM71Zau.js +0 -1
  475. package/assets/devtools-ui/chunk.CgM71Zau.js.br +0 -0
  476. package/assets/devtools-ui/chunk.CmHq336a.js +0 -1
  477. package/assets/devtools-ui/chunk.CmHq336a.js.br +0 -0
  478. package/assets/devtools-ui/chunk.CthNMCar.js +0 -1
  479. package/assets/devtools-ui/chunk.CthNMCar.js.br +0 -0
  480. package/assets/devtools-ui/chunk.D2brVJP1.js +0 -1
  481. package/assets/devtools-ui/chunk.D2brVJP1.js.br +0 -0
  482. package/assets/devtools-ui/chunk.DgBKGkiw.js +0 -1
  483. package/assets/devtools-ui/chunk.DgBKGkiw.js.br +0 -0
  484. package/assets/devtools-ui/chunk.NNHHCQsa.js +0 -1
  485. package/assets/devtools-ui/chunk.NNHHCQsa.js.br +0 -0
  486. package/assets/devtools-ui/chunk._CDKKWMo.js +0 -1
  487. package/assets/devtools-ui/chunk._CDKKWMo.js.br +0 -0
  488. package/assets/devtools-ui/entry.B_nOjAod.js +0 -2
  489. package/assets/devtools-ui/entry.B_nOjAod.js.br +0 -0
  490. package/assets/devtools-ui/index.html +0 -10
  491. package/assets/devtools-ui/index.html.br +0 -0
  492. package/dist/devtools/index.browser.js +0 -224
  493. package/dist/devtools/index.browser.js.map +0 -1
  494. package/dist/devtools/index.d.ts +0 -499
  495. package/dist/devtools/index.d.ts.map +0 -1
  496. package/dist/devtools/index.js +0 -782
  497. package/dist/devtools/index.js.map +0 -1
  498. package/dist/mqtt/index.d.ts +0 -164
  499. package/dist/mqtt/index.d.ts.map +0 -1
  500. package/dist/mqtt/index.js +0 -214
  501. package/dist/mqtt/index.js.map +0 -1
  502. package/dist/topic/mqtt/index.d.ts +0 -87
  503. package/dist/topic/mqtt/index.d.ts.map +0 -1
  504. package/dist/topic/mqtt/index.js +0 -88
  505. package/dist/topic/mqtt/index.js.map +0 -1
  506. package/src/api/users/parameters/UserParameters.ts +0 -23
  507. package/src/api/users/services/SessionService.spec.ts +0 -303
  508. package/src/cli/platform/adapters/DockerAdapter.spec.ts +0 -378
  509. package/src/cli/platform/adapters/DockerAdapter.ts +0 -417
  510. package/src/cli/platform/services/DockerComposeGenerator.spec.ts +0 -490
  511. package/src/cli/platform/services/DockerComposeGenerator.ts +0 -353
  512. package/src/cli/platform/services/DockerSshService.spec.ts +0 -47
  513. package/src/cli/platform/services/DockerSshService.ts +0 -61
  514. package/src/devtools/__tests__/DevCollectorProvider.spec.ts +0 -7
  515. package/src/devtools/assets.ts +0 -6
  516. package/src/devtools/entities/logs.ts +0 -21
  517. package/src/devtools/index.browser.ts +0 -11
  518. package/src/devtools/index.shared.ts +0 -15
  519. package/src/devtools/index.ts +0 -39
  520. package/src/devtools/providers/DevToolsMetadataProvider.ts +0 -459
  521. package/src/devtools/providers/DevToolsProvider.ts +0 -280
  522. package/src/devtools/schemas/DevActionMetadata.ts +0 -30
  523. package/src/devtools/schemas/DevAtomMetadata.ts +0 -26
  524. package/src/devtools/schemas/DevBucketMetadata.ts +0 -11
  525. package/src/devtools/schemas/DevCacheMetadata.ts +0 -10
  526. package/src/devtools/schemas/DevEntityMetadata.ts +0 -60
  527. package/src/devtools/schemas/DevEnvMetadata.ts +0 -22
  528. package/src/devtools/schemas/DevMetadata.ts +0 -47
  529. package/src/devtools/schemas/DevModuleMetadata.ts +0 -8
  530. package/src/devtools/schemas/DevPageMetadata.ts +0 -24
  531. package/src/devtools/schemas/DevProviderMetadata.ts +0 -10
  532. package/src/devtools/schemas/DevQueueMetadata.ts +0 -10
  533. package/src/devtools/schemas/DevRealmMetadata.ts +0 -19
  534. package/src/devtools/schemas/DevRouteMetadata.ts +0 -8
  535. package/src/devtools/schemas/DevSchedulerMetadata.ts +0 -11
  536. package/src/devtools/schemas/DevTopicMetadata.ts +0 -11
  537. package/src/mqtt/index.ts +0 -32
  538. package/src/mqtt/providers/MqttClientProvider.ts +0 -63
  539. package/src/mqtt/providers/MqttJsClientProvider.spec.ts +0 -165
  540. package/src/mqtt/providers/MqttJsClientProvider.ts +0 -309
  541. package/src/topic/mqtt/index.ts +0 -30
  542. package/src/topic/mqtt/providers/MqttTopicProvider.spec.ts +0 -160
  543. package/src/topic/mqtt/providers/MqttTopicProvider.ts +0 -146
  544. /package/src/api/audits/{primitives → __tests__}/$audit.spec.ts +0 -0
  545. /package/src/api/audits/{services → __tests__}/AuditService.spec.ts +0 -0
  546. /package/src/api/files/{controllers → __tests__}/AdminFileStatsController.spec.ts +0 -0
  547. /package/src/api/files/{jobs → __tests__}/FileJobs.spec.ts +0 -0
  548. /package/src/api/jobs/{primitives → __tests__}/$job-middleware.spec.ts +0 -0
  549. /package/src/api/parameters/{primitives → __tests__}/$parameter.spec.ts +0 -0
  550. /package/src/api/users/{controllers → __tests__}/AdminIdentityController.spec.ts +0 -0
  551. /package/src/api/users/{controllers → __tests__}/AdminSessionController.spec.ts +0 -0
  552. /package/src/api/users/{controllers → __tests__}/AdminUserController.spec.ts +0 -0
  553. /package/src/api/users/{services → __tests__}/CredentialService.spec.ts +0 -0
  554. /package/src/api/users/{services → __tests__}/RegistrationService.spec.ts +0 -0
  555. /package/src/batch/{primitives → __tests__}/$batch.spec.ts +0 -0
  556. /package/src/batch/{providers → __tests__}/BatchProvider.spec.ts +0 -0
  557. /package/src/bucket/{primitives → __tests__}/$bucket.spec.ts +0 -0
  558. /package/src/bucket/{providers → __tests__}/FileStorageProvider.spec.ts +0 -0
  559. /package/src/bucket/{providers → __tests__}/LocalFileStorageProvider.spec.ts +0 -0
  560. /package/src/bucket/{providers → __tests__}/MemoryFileStorageProvider.spec.ts +0 -0
  561. /package/src/cache/core/{primitives → __tests__}/$cache.spec.ts +0 -0
  562. /package/src/cache/redis/{providers → __tests__}/RedisCacheProvider.spec.ts +0 -0
  563. /package/src/command/{primitives → __tests__}/$command.spec.ts +0 -0
  564. /package/src/command/{helpers → __tests__}/Asker.spec.ts +0 -0
  565. /package/src/command/{helpers → __tests__}/Runner.spec.ts +0 -0
  566. /package/src/core/{primitives → __tests__}/$context.spec.ts +0 -0
  567. /package/src/core/{primitives → __tests__}/$env.spec.ts +0 -0
  568. /package/src/core/{primitives → __tests__}/$hook.spec.ts +0 -0
  569. /package/src/core/{primitives → __tests__}/$inject.spec.ts +0 -0
  570. /package/src/core/{primitives → __tests__}/$module.spec.ts +0 -0
  571. /package/src/core/{providers → __tests__}/CodecManager.spec.ts +0 -0
  572. /package/src/core/{providers → __tests__}/EventManager.spec.ts +0 -0
  573. /package/src/core/{providers → __tests__}/StateManager.spec.ts +0 -0
  574. /package/src/core/{providers → __tests__}/TypeProvider.spec.ts +0 -0
  575. /package/src/datetime/{primitives → __tests__}/$interval.spec.ts +0 -0
  576. /package/src/datetime/{providers → __tests__}/DateTimeProvider.spec.ts +0 -0
  577. /package/src/email/core/{primitives → __tests__}/$email.spec.ts +0 -0
  578. /package/src/fake/{providers → __tests__}/FakeProvider.spec.ts +0 -0
  579. /package/src/lock/core/{providers → __tests__}/MemoryLockProvider.spec.ts +0 -0
  580. /package/src/lock/redis/{providers → __tests__}/RedisLockProvider.spec.ts +0 -0
  581. /package/src/logger/{primitives → __tests__}/$logger.spec.ts +0 -0
  582. /package/src/logger/{services → __tests__}/Logger.spec.ts +0 -0
  583. /package/src/mcp/{primitives → __tests__}/$prompt.spec.ts +0 -0
  584. /package/src/mcp/{primitives → __tests__}/$resource.spec.ts +0 -0
  585. /package/src/mcp/{primitives → __tests__}/$tool.spec.ts +0 -0
  586. /package/src/mcp/{providers → __tests__}/McpServerProvider.spec.ts +0 -0
  587. /package/src/mcp/{helpers → __tests__}/jsonrpc.spec.ts +0 -0
  588. /package/src/orm/core/{helpers → __tests__}/parseQueryString.spec.ts +0 -0
  589. /package/src/queue/core/{primitives → __tests__}/$consumer.spec.ts +0 -0
  590. /package/src/queue/core/{providers → __tests__}/MemoryQueueProvider.spec.ts +0 -0
  591. /package/src/queue/core/{providers → __tests__}/WorkerProvider.spec.ts +0 -0
  592. /package/src/queue/redis/{providers → __tests__}/RedisQueueProvider.spec.ts +0 -0
  593. /package/src/react/form/{hooks → __tests__}/useForm.browser.spec.tsx +0 -0
  594. /package/src/react/head/{hooks → __tests__}/useHead.spec.tsx +0 -0
  595. /package/src/react/i18n/{components → __tests__}/Localize.spec.tsx +0 -0
  596. /package/src/react/router/{primitives → __tests__}/$page.browser.spec.tsx +0 -0
  597. /package/src/react/router/{primitives → __tests__}/$page.middleware.spec.tsx +0 -0
  598. /package/src/react/router/{primitives → __tests__}/$page.spec.tsx +0 -0
  599. /package/src/react/router/{providers → __tests__}/ReactPreloadProvider.spec.ts +0 -0
  600. /package/src/react/router/{providers → __tests__}/ReactServerProvider.spec.tsx +0 -0
  601. /package/src/react/router/{providers → __tests__}/ReactServerTemplateProvider.spec.ts +0 -0
  602. /package/src/retry/{primitives → __tests__}/$retry.spec.ts +0 -0
  603. /package/src/retry/{providers → __tests__}/RetryProvider.spec.ts +0 -0
  604. /package/src/router/{providers → __tests__}/RouterProvider.spec.ts +0 -0
  605. /package/src/security/{primitives → __tests__}/$issuer.spec.ts +0 -0
  606. /package/src/security/{primitives → __tests__}/$permission.spec.ts +0 -0
  607. /package/src/security/{primitives → __tests__}/$role.spec.ts +0 -0
  608. /package/src/security/{primitives → __tests__}/$serviceAccount.spec.ts +0 -0
  609. /package/src/security/{providers → __tests__}/SecurityProvider.spec.ts +0 -0
  610. /package/src/server/cookies/{providers → __tests__}/ServerCookiesProvider.spec.ts +0 -0
  611. /package/src/server/core/{primitives → __tests__}/$action.spec.ts +0 -0
  612. /package/src/server/core/{primitives → __tests__}/$middleware.spec.ts +0 -0
  613. /package/src/server/core/{primitives → __tests__}/$route.spec.ts +0 -0
  614. /package/src/server/core/{primitives → __tests__}/$sse.spec.ts +0 -0
  615. /package/src/server/core/{providers → __tests__}/BunHttpServerProvider.bun.spec.ts +0 -0
  616. /package/src/server/core/{services → __tests__}/HttpClient.spec.ts +0 -0
  617. /package/src/server/core/{providers → __tests__}/ServerLoggerProvider.spec.ts +0 -0
  618. /package/src/server/core/{services → __tests__}/UserAgentParser.spec.ts +0 -0
  619. /package/src/server/cors/{providers → __tests__}/ServerCorsProvider.spec.ts +0 -0
  620. /package/src/server/etag/{providers → __tests__}/ServerEtagProvider.spec.ts +0 -0
  621. /package/src/server/health/{providers → __tests__}/ServerHealthProvider.spec.ts +0 -0
  622. /package/src/server/links/{primitives → __tests__}/$remote.spec.ts +0 -0
  623. /package/src/server/links/{services → __tests__}/BatchEndpoint.spec.ts +0 -0
  624. /package/src/server/links/{providers → __tests__}/LinkProvider.spec.ts +0 -0
  625. /package/src/server/links/{providers → __tests__}/ServerLinksProvider.spec.ts +0 -0
  626. /package/src/server/metrics/{providers → __tests__}/ServerMetricsProvider.spec.ts +0 -0
  627. /package/src/server/proxy/{primitives → __tests__}/$proxy.spec.ts +0 -0
  628. /package/src/server/rate-limit/{providers → __tests__}/ServerRateLimitProvider.spec.ts +0 -0
  629. /package/src/server/static/{primitives → __tests__}/$serve.spec.ts +0 -0
  630. /package/src/server/swagger/{primitives → __tests__}/$swagger.spec.ts +0 -0
  631. /package/src/sms/{primitives → __tests__}/$sms.spec.ts +0 -0
  632. /package/src/sms/{providers → __tests__}/MemorySmsProvider.spec.ts +0 -0
  633. /package/src/system/{services → __tests__}/FileDetector.spec.ts +0 -0
  634. /package/src/system/{providers → __tests__}/NodeFileSystemProvider.spec.ts +0 -0
  635. /package/src/topic/core/{primitives → __tests__}/$subscriber.spec.ts +0 -0
  636. /package/src/topic/core/{providers → __tests__}/MemoryTopicProvider.spec.ts +0 -0
  637. /package/src/topic/redis/{providers → __tests__}/RedisTopicProvider.spec.ts +0 -0
  638. /package/src/websocket/{primitives → __tests__}/$channel.spec.ts +0 -0
@@ -1,11 +1,11 @@
1
1
  import { createRequire } from "node:module";
2
- import { $atom, $hook, $inject, $module, $use, Alepha, AlephaError, __alephaRef, t } from "alepha";
2
+ import { $atom, $hook, $inject, $module, $state, Alepha, AlephaError, __alephaRef, t } from "alepha";
3
3
  import { $command, CliProvider, EnvUtils, Runner } from "alepha/command";
4
4
  import { $logger, ConsoleColorProvider } from "alepha/logger";
5
5
  import { FileSystemProvider, ShellProvider } from "alepha/system";
6
6
  import { createHash } from "node:crypto";
7
7
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
- import { readFile } from "node:fs/promises";
8
+ import { readFile, readdir, stat } from "node:fs/promises";
9
9
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
10
10
  import { fileURLToPath, pathToFileURL } from "node:url";
11
11
  import { analyzer } from "vite-bundle-analyzer";
@@ -13,7 +13,7 @@ import { KV_DEFAULT_BINDING } from "alepha/cache";
13
13
  import { QUEUE_DEFAULT_BINDING } from "alepha/queue";
14
14
  import { promisify } from "node:util";
15
15
  import { brotliCompress, gzip } from "node:zlib";
16
- import { exec } from "node:child_process";
16
+ import { exec, spawn } from "node:child_process";
17
17
  import { ServerSwaggerProvider } from "alepha/server/swagger";
18
18
  //#region ../../src/cli/core/atoms/appEntryOptions.ts
19
19
  const appEntryOptions = $atom({
@@ -89,10 +89,7 @@ const buildOptions = $atom({
89
89
  const devOptions = $atom({
90
90
  name: "alepha.cli.dev.options",
91
91
  description: "Dev configuration options",
92
- schema: t.object({
93
- noDevtools: t.optional(t.boolean({ default: false })),
94
- noViteReactPlugin: t.optional(t.boolean({ default: false }))
95
- }),
92
+ schema: t.object({ noViteReactPlugin: t.optional(t.boolean({ default: false })) }),
96
93
  default: {}
97
94
  });
98
95
  //#endregion
@@ -104,7 +101,7 @@ const devOptions = $atom({
104
101
  */
105
102
  var AppEntryProvider = class {
106
103
  fs = $inject(FileSystemProvider);
107
- options = $use(appEntryOptions);
104
+ options = $state(appEntryOptions);
108
105
  serverEntries = [
109
106
  "main.server.ts",
110
107
  "main.server.tsx",
@@ -589,11 +586,12 @@ var AlephaCliUtils = class {
589
586
  //#endregion
590
587
  //#region ../../package.json
591
588
  var devDependencies = {
592
- "@biomejs/biome": "^2.4.8",
593
- "@electric-sql/pglite": "^0.4.0",
594
- "@faker-js/faker": "^10.3.0",
589
+ "@biomejs/biome": "^2.4.9",
590
+ "@electric-sql/pglite": "^0.4.2",
591
+ "@faker-js/faker": "^10.4.0",
595
592
  "@testing-library/dom": "^10.4.1",
596
593
  "@testing-library/react": "^16.3.2",
594
+ "@types/bun": "^1.3.11",
597
595
  "@types/node": "^25.5.0",
598
596
  "@types/nodemailer": "^7.0.11",
599
597
  "@types/react": "^19.2.14",
@@ -602,15 +600,15 @@ var devDependencies = {
602
600
  "cron-schedule": "^6.0.0",
603
601
  "drizzle-kit": "^0.31.10",
604
602
  "jose": "^6.2.2",
605
- "jsdom": "^29.0.0",
606
- "nodemailer": "^8.0.3",
603
+ "jsdom": "^29.0.1",
604
+ "nodemailer": "^8.0.4",
607
605
  "openid-client": "^6.8.2",
608
606
  "prom-client": "^15.1.3",
609
607
  "react": "^19.2.4",
610
608
  "react-dom": "^19.2.4",
611
609
  "swagger-ui-dist": "^5.32.1",
612
- "tsdown": "^0.21.4",
613
- "vitest": "^4.1.0"
610
+ "tsdown": "^0.21.7",
611
+ "vitest": "^4.1.2"
614
612
  };
615
613
  const version = JSON.parse(readFileSync(new URL("../../../package.json", import.meta.url), "utf-8")).version;
616
614
  //#endregion
@@ -863,7 +861,8 @@ var PackageManagerUtils = class {
863
861
  generatePackageJsonContent(modes) {
864
862
  const alephaDeps = devDependencies;
865
863
  const dependencies = { alepha: `^${version}` };
866
- const devDependencies$1 = { "drizzle-kit": alephaDeps["drizzle-kit"] };
864
+ const devDependencies$1 = {};
865
+ if (!(modes.react && !modes.ui)) devDependencies$1["drizzle-kit"] = alephaDeps["drizzle-kit"];
867
866
  if (!modes.isPackage) {
868
867
  devDependencies$1["@biomejs/biome"] = alephaDeps["@biomejs/biome"];
869
868
  if (modes.test) devDependencies$1.vitest = alephaDeps.vitest;
@@ -903,13 +902,7 @@ var PackageManagerUtils = class {
903
902
  })));
904
903
  }
905
904
  };
906
- //#endregion
907
- //#region ../../src/cli/core/assets.ts
908
- const packageRoot = join(fileURLToPath(import.meta.url), "../../../..");
909
- const cliAssets = {
910
- devtools: join(packageRoot, "assets/devtools-ui"),
911
- logo: join(packageRoot, "assets/logo.svg")
912
- };
905
+ const cliAssets = { logo: join(join(fileURLToPath(import.meta.url), "../../../.."), "assets/logo.svg") };
913
906
  //#endregion
914
907
  //#region ../../src/cli/core/templates/agentMd.ts
915
908
  const agentMd = (type) => {
@@ -961,12 +954,6 @@ export default defineConfig({
961
954
  // runtime: "node",
962
955
  // },
963
956
  //
964
- // platform: {
965
- // environments: {
966
- // production: { adapter: "cloudflare" },
967
- // },
968
- // },
969
- //
970
957
  // env: {
971
958
  // VITE_BUILD_DATE: new Date().toISOString(),
972
959
  // VITE_VERSION: pkg.version,
@@ -1280,13 +1267,45 @@ export default defineConfig({
1280
1267
  `;
1281
1268
  };
1282
1269
  //#endregion
1270
+ //#region ../../src/cli/core/templates/webAdminDashboardTsx.ts
1271
+ const webAdminDashboardTsx = () => {
1272
+ return `import { Flex, Text } from "@alepha/ui";
1273
+
1274
+ const AdminDashboard = () => {
1275
+ return (
1276
+ <Flex direction="column" align="center" justify="center" mih="60vh" gap="md">
1277
+ <Text size="xl" fw={600}>
1278
+ Admin Panel
1279
+ </Text>
1280
+ <Text c="dimmed">Welcome to the admin panel.</Text>
1281
+ </Flex>
1282
+ );
1283
+ };
1284
+
1285
+ export default AdminDashboard;
1286
+ `;
1287
+ };
1288
+ //#endregion
1283
1289
  //#region ../../src/cli/core/templates/webAppRouterTs.ts
1284
1290
  const webAppRouterTs = (options) => {
1285
1291
  const imports = [];
1286
1292
  const classMembers = [];
1287
1293
  if (options.ui) imports.push("import { $ui } from \"@alepha/ui\";");
1288
1294
  if (options.auth) imports.push("import { $uiAuth } from \"@alepha/ui/auth\";");
1289
- if (options.admin) imports.push("import { $uiAdmin } from \"@alepha/ui/admin\";");
1295
+ if (options.admin) {
1296
+ imports.push("import { $uiAdmin } from \"@alepha/ui/admin\";");
1297
+ imports.push("import { AdminUserRouter } from \"@alepha/ui/admin-users\";");
1298
+ imports.push("import { AdminSessionRouter } from \"@alepha/ui/admin-sessions\";");
1299
+ imports.push("import { AdminAuditRouter } from \"@alepha/ui/admin-audits\";");
1300
+ imports.push("import { AdminFileRouter } from \"@alepha/ui/admin-files\";");
1301
+ imports.push("import { AdminParameterRouter } from \"@alepha/ui/admin-parameters\";");
1302
+ imports.push("import { AdminJobRouter } from \"@alepha/ui/admin-jobs\";");
1303
+ imports.push("import { AdminApiKeyRouter } from \"@alepha/ui/admin-keys\";");
1304
+ imports.push("import { AdminNotificationRouter } from \"@alepha/ui/admin-notifications\";");
1305
+ imports.push("import { AdminBillingRouter } from \"@alepha/ui/admin-billing\";");
1306
+ imports.push("import { $inject } from \"alepha\";");
1307
+ imports.push("import { IconLayoutDashboard, IconLockPassword, IconCreditCard } from \"@tabler/icons-react\";");
1308
+ }
1290
1309
  imports.push("import { $page } from \"alepha/react/router\";");
1291
1310
  if (options.api) {
1292
1311
  imports.push("import { $client } from \"alepha/server/links\";");
@@ -1296,7 +1315,69 @@ const webAppRouterTs = (options) => {
1296
1315
  if (options.ui) {
1297
1316
  classMembers.push(" ui = $ui();");
1298
1317
  if (options.auth) classMembers.push(" uiAuth = $uiAuth();");
1299
- if (options.admin) classMembers.push(" uiAdmin = $uiAdmin();");
1318
+ if (options.admin) classMembers.push(` // ── Admin Domain Routers ──────────────────────────
1319
+ protected users = $inject(AdminUserRouter);
1320
+ protected sessions = $inject(AdminSessionRouter);
1321
+ protected audits = $inject(AdminAuditRouter);
1322
+ protected files = $inject(AdminFileRouter);
1323
+ protected parameters = $inject(AdminParameterRouter);
1324
+ protected jobs = $inject(AdminJobRouter);
1325
+ protected apiKeys = $inject(AdminApiKeyRouter);
1326
+ protected notifications = $inject(AdminNotificationRouter);
1327
+ protected billing = $inject(AdminBillingRouter);
1328
+
1329
+ // ── Admin Panel ─────────────────────────────────
1330
+ admin = $uiAdmin({
1331
+ pages: [
1332
+ this.users.adminUsers,
1333
+ this.sessions.adminSessions,
1334
+ this.audits.adminAudits,
1335
+ this.files.adminFiles,
1336
+ this.parameters.adminParameters,
1337
+ this.jobs.adminJobs,
1338
+ this.apiKeys.adminApiKeys,
1339
+ this.notifications.adminNotifications,
1340
+ this.billing.adminBilling,
1341
+ ],
1342
+ sidebarItems: [
1343
+ {
1344
+ label: "Security",
1345
+ children: [
1346
+ { label: "Identity", icon: IconLockPassword, children: [
1347
+ this.users.adminUsers,
1348
+ this.sessions.adminSessions,
1349
+ this.apiKeys.adminApiKeys,
1350
+ ]},
1351
+ this.audits.adminAudits,
1352
+ ],
1353
+ },
1354
+ {
1355
+ label: "System",
1356
+ children: [
1357
+ this.files.adminFiles,
1358
+ this.jobs.adminJobs,
1359
+ this.notifications.adminNotifications,
1360
+ this.parameters.adminParameters,
1361
+ ],
1362
+ },
1363
+ {
1364
+ label: "Commerce",
1365
+ icon: IconCreditCard,
1366
+ children: [
1367
+ this.billing.adminBilling,
1368
+ ],
1369
+ },
1370
+ ],
1371
+ });
1372
+
1373
+ // ── Admin Dashboard ─────────────────────────────
1374
+ adminDashboard = $page({
1375
+ parent: this.admin.adminLayout,
1376
+ path: "/",
1377
+ label: "Dashboard",
1378
+ icon: IconLayoutDashboard,
1379
+ lazy: () => import("./components/AdminDashboard.tsx"),
1380
+ });`);
1300
1381
  classMembers.push(` layout = $page({
1301
1382
  parent: this.ui.root,
1302
1383
  children: () => [this.home],
@@ -1502,6 +1583,7 @@ var ProjectScaffolder = class {
1502
1583
  admin: opts.admin
1503
1584
  }), opts.force);
1504
1585
  await this.ensureFile(root, "src/web/components/Home.tsx", webHomeComponentTsx({ api: opts.api }), opts.force);
1586
+ if (opts.admin) await this.ensureFile(root, "src/web/components/AdminDashboard.tsx", webAdminDashboardTsx(), opts.force);
1505
1587
  await this.ensureFile(root, "src/main.browser.ts", mainBrowserTs(), opts.force);
1506
1588
  }
1507
1589
  /**
@@ -1525,21 +1607,20 @@ var ProjectScaffolder = class {
1525
1607
  root = this.fs.join(root, args);
1526
1608
  await this.fs.mkdir(root, { force: true });
1527
1609
  }
1528
- if (flags.admin) flags.auth = true;
1529
- if (flags.auth) {
1610
+ if (flags.saas) {
1530
1611
  flags.api = true;
1531
1612
  flags.ui = true;
1532
1613
  }
1533
1614
  if (flags.ui) flags.react = true;
1534
1615
  if (flags.tailwind) flags.react = true;
1535
- if ((flags.admin || flags.auth || flags.api || flags.ui || flags.react || flags.tailwind) && !flags.force) {
1616
+ if ((flags.saas || flags.api || flags.ui || flags.react || flags.tailwind) && !flags.force) {
1536
1617
  if ((await this.fs.ls(root)).filter((f) => f !== "package.json").length > 0) throw new AlephaError(`Target directory is not empty (${root}). Use --force to overwrite existing files.`);
1537
1618
  }
1538
1619
  const workspace = await this.pm.getWorkspaceContext(root);
1539
1620
  let agentType = false;
1540
1621
  if (!workspace.isPackage) agentType = await this.utils.isInstalledAsync("claude") ? "claude" : "agents";
1541
1622
  const isExpo = await this.pm.hasExpo(root);
1542
- const adminEmail = flags.auth ? await this.utils.getGitEmail() : void 0;
1623
+ const adminEmail = flags.saas ? await this.utils.getGitEmail() : void 0;
1543
1624
  const force = !!flags.force;
1544
1625
  await run({
1545
1626
  name: "ensuring configuration files",
@@ -1551,7 +1632,7 @@ var ProjectScaffolder = class {
1551
1632
  isPackage: workspace.isPackage
1552
1633
  },
1553
1634
  tsconfigJson: !workspace.config.tsconfigJson,
1554
- biomeJson: !workspace.config.biomeJson,
1635
+ biomeJson: true,
1555
1636
  editorconfig: !workspace.config.editorconfig,
1556
1637
  agentMd: agentType ? { type: agentType } : false
1557
1638
  });
@@ -1562,15 +1643,15 @@ var ProjectScaffolder = class {
1562
1643
  force
1563
1644
  });
1564
1645
  if (flags.api) await this.ensureApiProject(root, {
1565
- auth: !!flags.auth,
1646
+ auth: !!flags.saas,
1566
1647
  adminEmail,
1567
1648
  force
1568
1649
  });
1569
1650
  if (flags.react && !isExpo) await this.ensureWebProject(root, {
1570
1651
  api: !!flags.api,
1571
1652
  ui: !!flags.ui,
1572
- auth: !!flags.auth,
1573
- admin: !!flags.admin,
1653
+ auth: !!flags.saas,
1654
+ admin: !!flags.saas,
1574
1655
  tailwind: !!flags.tailwind,
1575
1656
  force
1576
1657
  });
@@ -1591,7 +1672,7 @@ var ProjectScaffolder = class {
1591
1672
  if (flags.test) await this.ensureTestDir(root);
1592
1673
  await run(`${pmName} run lint`, {
1593
1674
  alias: "running linter",
1594
- root: installRoot
1675
+ root
1595
1676
  });
1596
1677
  if (!workspace.isPackage) {
1597
1678
  if (await this.ensureGitRepo(root, { force })) await run("git add .", {
@@ -1727,6 +1808,12 @@ var BuildClientTask = class extends BuildTask {
1727
1808
  mode: "production",
1728
1809
  logLevel: opts.silent ? "silent" : void 0,
1729
1810
  define: { "process.env.NODE_ENV": "\"production\"" },
1811
+ resolve: { dedupe: [
1812
+ "react",
1813
+ "react-dom",
1814
+ "react/jsx-runtime",
1815
+ "react/jsx-dev-runtime"
1816
+ ] },
1730
1817
  publicDir: "public",
1731
1818
  build: {
1732
1819
  outDir: opts.dist,
@@ -2198,6 +2285,7 @@ var BuildServerTask = class extends BuildTask {
2198
2285
  name: "build server",
2199
2286
  handler: async () => {
2200
2287
  await this.buildServer({
2288
+ root: ctx.root,
2201
2289
  entry: ctx.entry.server,
2202
2290
  distDir,
2203
2291
  clientDir: clientBuilt ? publicDir : void 0,
@@ -2230,6 +2318,12 @@ var BuildServerTask = class extends BuildTask {
2230
2318
  mode: "production",
2231
2319
  logLevel: opts.silent ? "silent" : void 0,
2232
2320
  define: { "process.env.NODE_ENV": "\"production\"" },
2321
+ resolve: { dedupe: [
2322
+ "react",
2323
+ "react-dom",
2324
+ "react/jsx-runtime",
2325
+ "react/jsx-dev-runtime"
2326
+ ] },
2233
2327
  publicDir: false,
2234
2328
  ssr: {
2235
2329
  noExternal: true,
@@ -2272,7 +2366,7 @@ var BuildServerTask = class extends BuildTask {
2272
2366
  const externals = [];
2273
2367
  if (Array.isArray(resolvedConfig?.ssr?.external)) externals.push(...resolvedConfig.ssr.external);
2274
2368
  await this.generateExternals(opts.distDir, externals);
2275
- const entryFile = this.extractEntryFromBundle(opts.entry, result);
2369
+ const entryFile = this.extractEntryFromBundle(opts.root, opts.entry, result);
2276
2370
  let manifest = "";
2277
2371
  let manifestData;
2278
2372
  if (opts.clientDir) {
@@ -2345,8 +2439,8 @@ var BuildServerTask = class extends BuildTask {
2345
2439
  };
2346
2440
  return stripped;
2347
2441
  }
2348
- extractEntryFromBundle(entry, result) {
2349
- const entryFilePath = isAbsolute(entry) ? entry : join(process.cwd(), entry);
2442
+ extractEntryFromBundle(root, entry, result) {
2443
+ const entryFilePath = isAbsolute(entry) ? entry : join(root, entry);
2350
2444
  const normalizedEntryPath = entryFilePath.replace(/\\/g, "/");
2351
2445
  const entryFile = (Array.isArray(result) ? result[0] : result).output.find((it) => "facadeModuleId" in it && it.facadeModuleId === normalizedEntryPath)?.fileName;
2352
2446
  if (!entryFile) throw new AlephaError(`Could not find the entry file "${entryFilePath}" in the build output. Please check your entry file and try again.`);
@@ -2613,7 +2707,7 @@ var BuildCommand = class {
2613
2707
  scaffolder = $inject(ProjectScaffolder);
2614
2708
  boot = $inject(AppEntryProvider);
2615
2709
  viteBuildProvider = $inject(ViteBuildProvider);
2616
- options = $use(buildOptions);
2710
+ options = $state(buildOptions);
2617
2711
  /**
2618
2712
  * Build pipeline: tasks run sequentially in this order.
2619
2713
  * Each task self-guards (checks target, hasClient, etc.).
@@ -3119,6 +3213,30 @@ var ViteDevServerProvider = class {
3119
3213
  isReloading = false;
3120
3214
  needsBrowserReload = false;
3121
3215
  currentReloadPromise = null;
3216
+ extraVitePlugins = [];
3217
+ alephaLoadedHooks = [];
3218
+ /**
3219
+ * Register an additional Vite plugin.
3220
+ * Must be called before init().
3221
+ */
3222
+ addVitePlugin(plugin) {
3223
+ this.extraVitePlugins.push(plugin);
3224
+ }
3225
+ /**
3226
+ * Register a hook called after Alepha is loaded/reloaded.
3227
+ */
3228
+ onAlephaLoaded(hook) {
3229
+ this.alephaLoadedHooks.push(hook);
3230
+ }
3231
+ /**
3232
+ * Trigger a full Alepha reload programmatically.
3233
+ */
3234
+ reload() {
3235
+ this.hasError = true;
3236
+ this.needsBrowserReload = true;
3237
+ this.changedFiles.add("__manual_reload__");
3238
+ this.scheduleReload();
3239
+ }
3122
3240
  /**
3123
3241
  * Initialize the dev server and load Alepha.
3124
3242
  */
@@ -3142,10 +3260,8 @@ var ViteDevServerProvider = class {
3142
3260
  try {
3143
3261
  await this.alepha?.start();
3144
3262
  await this.listen();
3145
- console.log("");
3146
- this.server.printUrls();
3147
- this.server.bindCLIShortcuts({ print: true });
3148
- console.log("");
3263
+ const url = `http://localhost:${this.server.config.server.port ?? 5173}/`;
3264
+ (this.alepha?.log ?? this.log).info(`Listening on ${this.colors.set("CYAN", url)}`);
3149
3265
  } catch (err) {
3150
3266
  this.hasError = true;
3151
3267
  this.currentError = err instanceof Error ? err : new Error(String(err));
@@ -3177,6 +3293,7 @@ var ViteDevServerProvider = class {
3177
3293
  if (viteReact && !this.options.noViteReactPlugin) plugins.push(viteReact());
3178
3294
  plugins.push(this.viteUtils.createTsconfigPathsPlugin());
3179
3295
  plugins.push(this.viteUtils.createSsrPreloadPlugin());
3296
+ plugins.push(...this.extraVitePlugins);
3180
3297
  plugins.push(this.createAlephaPlugin());
3181
3298
  let port;
3182
3299
  if (process.env.SERVER_PORT) port = Number(process.env.SERVER_PORT);
@@ -3188,6 +3305,12 @@ var ViteDevServerProvider = class {
3188
3305
  root: this.options.root,
3189
3306
  plugins,
3190
3307
  appType: "custom",
3308
+ resolve: { dedupe: [
3309
+ "react",
3310
+ "react-dom",
3311
+ "react/jsx-runtime",
3312
+ "react/jsx-dev-runtime"
3313
+ ] },
3191
3314
  server: { port },
3192
3315
  optimizeDeps: { entries: [...this.options.entry.browser ? [this.options.entry.browser] : []] }
3193
3316
  });
@@ -3234,19 +3357,6 @@ var ViteDevServerProvider = class {
3234
3357
  return {
3235
3358
  name: "alepha",
3236
3359
  configureServer: (server) => {
3237
- if (!this.options.noDevtools) server.middlewares.use(async (req, res, next) => {
3238
- if (!(req.url || "/").startsWith("/__devtools") || !req.headers.accept?.includes("text/html")) return next();
3239
- const indexPath = join(cliAssets.devtools, "index.html");
3240
- try {
3241
- let html = await readFile(indexPath, "utf-8");
3242
- html = html.replace("<head>", `<head><script type="module" src="/@vite/client"><\/script>`);
3243
- res.writeHead(200, { "content-type": "text/html" });
3244
- res.end(html);
3245
- } catch (err) {
3246
- this.log.error("Failed to serve devtools UI", err);
3247
- next();
3248
- }
3249
- });
3250
3360
  server.hot.on("connection", () => {
3251
3361
  if (this.currentError) setTimeout(() => this.sendErrorOverlay(this.currentError), 50);
3252
3362
  });
@@ -3396,10 +3506,7 @@ var ViteDevServerProvider = class {
3396
3506
  }
3397
3507
  const alepha = this.getLoadedAlepha();
3398
3508
  alepha.store.set("alepha.vite.server", this.server);
3399
- if (!this.options.noDevtools) {
3400
- const mod = await this.server.ssrLoadModule("alepha/devtools");
3401
- alepha.with(mod.AlephaDevtools);
3402
- }
3509
+ for (const hook of this.alephaLoadedHooks) await hook(alepha, this.server);
3403
3510
  this.alepha = alepha;
3404
3511
  await this.setupAlepha();
3405
3512
  this.hasError = false;
@@ -3556,10 +3663,12 @@ var ViteDevServerProvider = class {
3556
3663
  /**
3557
3664
  * Log a formatted error with stack trace.
3558
3665
  */
3559
- logError(title, _err) {
3666
+ logError(title, err) {
3560
3667
  const c = this.colors;
3561
3668
  console.log();
3562
3669
  console.log(c.set("RED", ` ✗ ${title}`));
3670
+ this.logErrorWithCause(err);
3671
+ console.log();
3563
3672
  console.log(c.set("GREY_DARK", " Waiting for file changes to retry..."));
3564
3673
  console.log();
3565
3674
  }
@@ -3594,32 +3703,122 @@ var DevCommand = class {
3594
3703
  alepha = $inject(Alepha);
3595
3704
  viteDevServer = $inject(ViteDevServerProvider);
3596
3705
  boot = $inject(AppEntryProvider);
3597
- options = $use(devOptions);
3706
+ options = $state(devOptions);
3598
3707
  /**
3599
3708
  * Will run the project in watch mode.
3709
+ *
3710
+ * When run from a workspace root (with apps/ directory), spawns all apps in parallel.
3711
+ * When run from an app directory, starts a single Vite dev server.
3600
3712
  */
3601
3713
  dev = $command({
3602
3714
  name: "dev",
3603
3715
  mode: true,
3604
3716
  description: "Run the project in development mode",
3605
- flags: t.object({
3606
- "no-devtools": t.optional(t.boolean({ description: "Disable devtools" })),
3607
- "no-vite-react-plugin": t.optional(t.boolean({ description: "Disable Vite React plugin" }))
3608
- }),
3717
+ flags: t.object({ only: t.optional(t.string({ description: "Run only specific apps (comma-separated: --only api,companion)" })) }),
3609
3718
  handler: async ({ root, flags }) => {
3610
- await this.scaffolder.ensureConfig(root, { tsconfigJson: true });
3611
- const entry = await this.boot.getAppEntry(root);
3612
- this.log.debug("Entry file found", { entry });
3613
- const options = this.options;
3614
- await this.viteDevServer.init({
3615
- root,
3616
- entry,
3617
- noDevtools: flags["no-devtools"] ?? options.noDevtools ?? false,
3618
- noViteReactPlugin: flags["no-vite-react-plugin"] ?? options.noViteReactPlugin ?? false
3619
- });
3620
- await this.viteDevServer.start();
3719
+ const apps = await this.discoverApps(root);
3720
+ if (apps.length > 0) await this.runMultiple(root, apps, flags);
3721
+ else await this.runSingle(root);
3621
3722
  }
3622
3723
  });
3724
+ /**
3725
+ * Discover apps in the workspace root.
3726
+ *
3727
+ * Looks for directories under apps/ that contain a package.json.
3728
+ * Supports scoped directories (e.g., apps/@passeo/api).
3729
+ * Returns empty array if not in a workspace root.
3730
+ */
3731
+ async discoverApps(root) {
3732
+ const appsDir = join(root, "apps");
3733
+ if (!await this.fs.exists(appsDir)) return [];
3734
+ const entries = await readdir(appsDir);
3735
+ const apps = [];
3736
+ for (const entry of entries) {
3737
+ const appPath = join(appsDir, entry);
3738
+ const pkgPath = join(appPath, "package.json");
3739
+ if (await this.fs.exists(pkgPath)) {
3740
+ apps.push({
3741
+ name: entry,
3742
+ path: appPath
3743
+ });
3744
+ continue;
3745
+ }
3746
+ if ((await stat(appPath).catch(() => null))?.isDirectory()) {
3747
+ const scopedEntries = await readdir(appPath);
3748
+ for (const scopedEntry of scopedEntries) {
3749
+ const scopedPath = join(appPath, scopedEntry);
3750
+ const scopedPkgPath = join(scopedPath, "package.json");
3751
+ if (await this.fs.exists(scopedPkgPath)) apps.push({
3752
+ name: scopedEntry,
3753
+ path: scopedPath
3754
+ });
3755
+ }
3756
+ }
3757
+ }
3758
+ return apps;
3759
+ }
3760
+ /**
3761
+ * Run a single app (existing behavior).
3762
+ */
3763
+ async runSingle(root) {
3764
+ await this.scaffolder.ensureConfig(root, { tsconfigJson: true });
3765
+ const entry = await this.boot.getAppEntry(root);
3766
+ this.log.debug("Entry file found", { entry });
3767
+ const options = this.options;
3768
+ await this.viteDevServer.init({
3769
+ root,
3770
+ entry,
3771
+ noViteReactPlugin: options.noViteReactPlugin ?? false
3772
+ });
3773
+ await this.viteDevServer.start();
3774
+ }
3775
+ /**
3776
+ * Run multiple apps in parallel with colored prefixed output.
3777
+ */
3778
+ async runMultiple(_root, apps, flags) {
3779
+ const only = flags.only;
3780
+ if (only) {
3781
+ const filter = only.split(",").map((s) => s.trim().toLowerCase());
3782
+ apps = apps.filter((app) => filter.includes(app.name.toLowerCase()));
3783
+ }
3784
+ if (apps.length === 0) {
3785
+ this.log.warn("No apps found to run");
3786
+ return;
3787
+ }
3788
+ this.log.debug(`Starting ${apps.length} apps: ${apps.map((a) => a.name).join(", ")}`);
3789
+ const basePort = 5173;
3790
+ const processes = apps.map((app, i) => this.spawnApp(app, basePort + i));
3791
+ const cleanup = () => {
3792
+ for (const proc of processes) proc.kill("SIGTERM");
3793
+ };
3794
+ process.once("SIGINT", cleanup);
3795
+ process.once("SIGTERM", cleanup);
3796
+ await Promise.allSettled(processes.map((proc) => new Promise((resolve) => {
3797
+ proc.on("exit", () => resolve());
3798
+ })));
3799
+ }
3800
+ /**
3801
+ * Spawn a single app process with inherited stdio.
3802
+ *
3803
+ * Each child process gets APP_NAME set, so the Alepha logger
3804
+ * handles prefixing automatically.
3805
+ */
3806
+ spawnApp(app, port) {
3807
+ const proc = spawn("yarn", ["alepha", "dev"], {
3808
+ cwd: app.path,
3809
+ stdio: "inherit",
3810
+ env: {
3811
+ ...process.env,
3812
+ APP_NAME: app.name.toUpperCase(),
3813
+ SERVER_PORT: String(port),
3814
+ FORCE_COLOR: "1"
3815
+ }
3816
+ });
3817
+ proc.on("exit", (code) => {
3818
+ if (code !== 0 && code !== null) this.log.error(`${app.name} exited with code ${code}`);
3819
+ });
3820
+ return proc;
3821
+ }
3623
3822
  };
3624
3823
  //#endregion
3625
3824
  //#region ../../src/cli/core/atoms/changelogOptions.ts
@@ -3730,7 +3929,7 @@ var ChangelogCommand = class {
3730
3929
  log = $logger();
3731
3930
  git = $inject(GitProvider);
3732
3931
  parser = $inject(GitMessageParser);
3733
- config = $use(changelogOptions);
3932
+ config = $state(changelogOptions);
3734
3933
  /**
3735
3934
  * Format a single commit line.
3736
3935
  * Example: `- **cli**: add new command (\`abc1234\`)`
@@ -3960,8 +4159,7 @@ var InitCommand = class {
3960
4159
  description: "Include React dependencies and web module (src/web/)"
3961
4160
  })),
3962
4161
  ui: t.optional(t.boolean({ description: "Include @alepha/ui (components, auth portal, admin portal)" })),
3963
- auth: t.optional(t.boolean({ description: "Include authentication (AppSecurity, $uiAuth). Implies --api --ui --react" })),
3964
- admin: t.optional(t.boolean({ description: "Include admin portal ($uiAdmin). Implies --auth" })),
4162
+ saas: t.optional(t.boolean({ description: "Include authentication, admin portal, API, UI, and React. Everything you need for a SaaS app." })),
3965
4163
  tailwind: t.optional(t.boolean({ description: "Include Tailwind CSS with Vite plugin. Implies --react" })),
3966
4164
  test: t.optional(t.boolean({ description: "Include Vitest and create test directory" })),
3967
4165
  force: t.optional(t.boolean({
@@ -4102,7 +4300,6 @@ var VerifyCommand = class {
4102
4300
  description: "Verify the Alepha project",
4103
4301
  handler: async ({ root, run }) => {
4104
4302
  await run("alepha clean");
4105
- await run("alepha format");
4106
4303
  await run("alepha lint");
4107
4304
  await run("alepha typecheck");
4108
4305
  if ((await this.pm.readPackageJson(root)).devDependencies?.vitest) await run("alepha test");