alepha 0.21.2 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. package/README.md +0 -1
  2. package/dist/api/audits/index.browser.js.map +1 -1
  3. package/dist/api/audits/index.d.ts +393 -403
  4. package/dist/api/audits/index.d.ts.map +1 -1
  5. package/dist/api/audits/index.js +25 -56
  6. package/dist/api/audits/index.js.map +1 -1
  7. package/dist/api/files/index.browser.js +31 -1
  8. package/dist/api/files/index.browser.js.map +1 -1
  9. package/dist/api/files/index.d.ts +313 -208
  10. package/dist/api/files/index.d.ts.map +1 -1
  11. package/dist/api/files/index.js +152 -42
  12. package/dist/api/files/index.js.map +1 -1
  13. package/dist/api/jobs/index.browser.js +2 -2
  14. package/dist/api/jobs/index.browser.js.map +1 -1
  15. package/dist/api/jobs/index.d.ts +282 -285
  16. package/dist/api/jobs/index.d.ts.map +1 -1
  17. package/dist/api/jobs/index.js +39 -33
  18. package/dist/api/jobs/index.js.map +1 -1
  19. package/dist/api/keys/index.d.ts +217 -222
  20. package/dist/api/keys/index.d.ts.map +1 -1
  21. package/dist/api/keys/index.js.map +1 -1
  22. package/dist/api/notifications/index.browser.js.map +1 -1
  23. package/dist/api/notifications/index.d.ts +188 -195
  24. package/dist/api/notifications/index.d.ts.map +1 -1
  25. package/dist/api/notifications/index.js.map +1 -1
  26. package/dist/api/oauth/index.d.ts +71 -76
  27. package/dist/api/oauth/index.d.ts.map +1 -1
  28. package/dist/api/oauth/index.js.map +1 -1
  29. package/dist/api/organizations/index.browser.js.map +1 -1
  30. package/dist/api/organizations/index.d.ts +104 -109
  31. package/dist/api/organizations/index.d.ts.map +1 -1
  32. package/dist/api/organizations/index.js.map +1 -1
  33. package/dist/api/parameters/index.browser.js +43 -16
  34. package/dist/api/parameters/index.browser.js.map +1 -1
  35. package/dist/api/parameters/index.d.ts +488 -344
  36. package/dist/api/parameters/index.d.ts.map +1 -1
  37. package/dist/api/parameters/index.js +175 -35
  38. package/dist/api/parameters/index.js.map +1 -1
  39. package/dist/api/payments/index.d.ts +396 -402
  40. package/dist/api/payments/index.d.ts.map +1 -1
  41. package/dist/api/payments/index.js.map +1 -1
  42. package/dist/api/subscriptions/index.d.ts +644 -652
  43. package/dist/api/subscriptions/index.d.ts.map +1 -1
  44. package/dist/api/subscriptions/index.js +1 -1
  45. package/dist/api/subscriptions/index.js.map +1 -1
  46. package/dist/api/users/index.browser.js +7 -0
  47. package/dist/api/users/index.browser.js.map +1 -1
  48. package/dist/api/users/index.d.ts +1106 -1005
  49. package/dist/api/users/index.d.ts.map +1 -1
  50. package/dist/api/users/index.js +307 -64
  51. package/dist/api/users/index.js.map +1 -1
  52. package/dist/api/verifications/index.browser.js.map +1 -1
  53. package/dist/api/verifications/index.d.ts +137 -143
  54. package/dist/api/verifications/index.d.ts.map +1 -1
  55. package/dist/api/verifications/index.js.map +1 -1
  56. package/dist/background/index.d.ts +95 -0
  57. package/dist/background/index.d.ts.map +1 -0
  58. package/dist/background/index.js +121 -0
  59. package/dist/background/index.js.map +1 -0
  60. package/dist/background/index.workerd.js +110 -0
  61. package/dist/background/index.workerd.js.map +1 -0
  62. package/dist/batch/index.d.ts +5 -7
  63. package/dist/batch/index.d.ts.map +1 -1
  64. package/dist/batch/index.js.map +1 -1
  65. package/dist/bin/index.js.map +1 -1
  66. package/dist/bucket/index.d.ts +76 -54
  67. package/dist/bucket/index.d.ts.map +1 -1
  68. package/dist/bucket/index.js +58 -11
  69. package/dist/bucket/index.js.map +1 -1
  70. package/dist/bucket/index.workerd.js +200 -5
  71. package/dist/bucket/index.workerd.js.map +1 -1
  72. package/dist/cache/core/index.d.ts +7 -10
  73. package/dist/cache/core/index.d.ts.map +1 -1
  74. package/dist/cache/core/index.js.map +1 -1
  75. package/dist/cache/core/index.workerd.js.map +1 -1
  76. package/dist/cache/database/index.d.ts +22 -26
  77. package/dist/cache/database/index.d.ts.map +1 -1
  78. package/dist/cache/database/index.js.map +1 -1
  79. package/dist/cache/redis/index.d.ts +4 -7
  80. package/dist/cache/redis/index.d.ts.map +1 -1
  81. package/dist/cache/redis/index.js.map +1 -1
  82. package/dist/captcha/index.d.ts +3 -6
  83. package/dist/captcha/index.d.ts.map +1 -1
  84. package/dist/captcha/index.js.map +1 -1
  85. package/dist/cli/config/index.d.ts.map +1 -1
  86. package/dist/cli/config/index.js.map +1 -1
  87. package/dist/cli/core/index.d.ts +458 -249
  88. package/dist/cli/core/index.d.ts.map +1 -1
  89. package/dist/cli/core/index.js +372 -660
  90. package/dist/cli/core/index.js.map +1 -1
  91. package/dist/cli/devtools/index.d.ts +3 -5
  92. package/dist/cli/devtools/index.d.ts.map +1 -1
  93. package/dist/cli/devtools/index.js.map +1 -1
  94. package/dist/cli/i18n/index.d.ts +20 -17
  95. package/dist/cli/i18n/index.d.ts.map +1 -1
  96. package/dist/cli/i18n/index.js +45 -11
  97. package/dist/cli/i18n/index.js.map +1 -1
  98. package/dist/cli/platform/index.d.ts +126 -1342
  99. package/dist/cli/platform/index.d.ts.map +1 -1
  100. package/dist/cli/platform/index.js +136 -2374
  101. package/dist/cli/platform/index.js.map +1 -1
  102. package/dist/cli/platform-lib/index.d.ts +1472 -0
  103. package/dist/cli/platform-lib/index.d.ts.map +1 -0
  104. package/dist/cli/platform-lib/index.js +2660 -0
  105. package/dist/cli/platform-lib/index.js.map +1 -0
  106. package/dist/cli/vendor/index.d.ts +17 -21
  107. package/dist/cli/vendor/index.d.ts.map +1 -1
  108. package/dist/cli/vendor/index.js.map +1 -1
  109. package/dist/command/index.d.ts +20 -19
  110. package/dist/command/index.d.ts.map +1 -1
  111. package/dist/command/index.js +39 -10
  112. package/dist/command/index.js.map +1 -1
  113. package/dist/{containers → container}/core/index.d.ts +13 -15
  114. package/dist/container/core/index.d.ts.map +1 -0
  115. package/dist/{containers → container}/core/index.js +23 -14
  116. package/dist/container/core/index.js.map +1 -0
  117. package/dist/{containers → container}/core/index.workerd.js +37 -22
  118. package/dist/container/core/index.workerd.js.map +1 -0
  119. package/dist/core/index.browser.js +27 -1
  120. package/dist/core/index.browser.js.map +1 -1
  121. package/dist/core/index.d.ts +48 -24
  122. package/dist/core/index.d.ts.map +1 -1
  123. package/dist/core/index.js +27 -1
  124. package/dist/core/index.js.map +1 -1
  125. package/dist/core/index.native.js +27 -1
  126. package/dist/core/index.native.js.map +1 -1
  127. package/dist/core/index.workerd.js +27 -1
  128. package/dist/core/index.workerd.js.map +1 -1
  129. package/dist/crypto/index.browser.js.map +1 -1
  130. package/dist/crypto/index.d.ts +5 -8
  131. package/dist/crypto/index.d.ts.map +1 -1
  132. package/dist/crypto/index.js.map +1 -1
  133. package/dist/datetime/index.d.ts +3 -4
  134. package/dist/datetime/index.d.ts.map +1 -1
  135. package/dist/datetime/index.js.map +1 -1
  136. package/dist/email/brevo/index.d.ts +2 -4
  137. package/dist/email/brevo/index.d.ts.map +1 -1
  138. package/dist/email/brevo/index.js.map +1 -1
  139. package/dist/email/cloudflare/index.d.ts +20 -7
  140. package/dist/email/cloudflare/index.d.ts.map +1 -1
  141. package/dist/email/cloudflare/index.js +46 -9
  142. package/dist/email/cloudflare/index.js.map +1 -1
  143. package/dist/email/core/index.d.ts +6 -9
  144. package/dist/email/core/index.d.ts.map +1 -1
  145. package/dist/email/core/index.js.map +1 -1
  146. package/dist/email/core/index.workerd.js.map +1 -1
  147. package/dist/email/smtp/index.d.ts +10 -13
  148. package/dist/email/smtp/index.d.ts.map +1 -1
  149. package/dist/email/smtp/index.js +107 -32
  150. package/dist/email/smtp/index.js.map +1 -1
  151. package/dist/fake/index.d.ts +1 -2
  152. package/dist/fake/index.d.ts.map +1 -1
  153. package/dist/fake/index.js.map +1 -1
  154. package/dist/lock/core/index.d.ts +9 -14
  155. package/dist/lock/core/index.d.ts.map +1 -1
  156. package/dist/lock/core/index.js.map +1 -1
  157. package/dist/lock/redis/index.d.ts +2 -4
  158. package/dist/lock/redis/index.d.ts.map +1 -1
  159. package/dist/lock/redis/index.js.map +1 -1
  160. package/dist/logger/index.d.ts +105 -76
  161. package/dist/logger/index.d.ts.map +1 -1
  162. package/dist/logger/index.js +196 -174
  163. package/dist/logger/index.js.map +1 -1
  164. package/dist/mcp/index.d.ts +25 -20
  165. package/dist/mcp/index.d.ts.map +1 -1
  166. package/dist/mcp/index.js +23 -0
  167. package/dist/mcp/index.js.map +1 -1
  168. package/dist/orm/core/index.browser.js.map +1 -1
  169. package/dist/orm/core/index.bun.js +19 -1
  170. package/dist/orm/core/index.bun.js.map +1 -1
  171. package/dist/orm/core/index.d.ts +76 -62
  172. package/dist/orm/core/index.d.ts.map +1 -1
  173. package/dist/orm/core/index.js +20 -2
  174. package/dist/orm/core/index.js.map +1 -1
  175. package/dist/orm/postgres/index.bun.js.map +1 -1
  176. package/dist/orm/postgres/index.d.ts +28 -20
  177. package/dist/orm/postgres/index.d.ts.map +1 -1
  178. package/dist/orm/postgres/index.js.map +1 -1
  179. package/dist/queue/core/index.d.ts +12 -15
  180. package/dist/queue/core/index.d.ts.map +1 -1
  181. package/dist/queue/core/index.js.map +1 -1
  182. package/dist/queue/core/index.workerd.js.map +1 -1
  183. package/dist/queue/redis/index.d.ts +3 -5
  184. package/dist/queue/redis/index.d.ts.map +1 -1
  185. package/dist/queue/redis/index.js.map +1 -1
  186. package/dist/react/auth/index.browser.js +9 -2
  187. package/dist/react/auth/index.browser.js.map +1 -1
  188. package/dist/react/auth/index.d.ts +14 -9
  189. package/dist/react/auth/index.d.ts.map +1 -1
  190. package/dist/react/auth/index.js +9 -2
  191. package/dist/react/auth/index.js.map +1 -1
  192. package/dist/react/core/index.d.ts +7 -8
  193. package/dist/react/core/index.d.ts.map +1 -1
  194. package/dist/react/core/index.js +6 -3
  195. package/dist/react/core/index.js.map +1 -1
  196. package/dist/react/form/index.d.ts +2 -5
  197. package/dist/react/form/index.d.ts.map +1 -1
  198. package/dist/react/form/index.js +16 -15
  199. package/dist/react/form/index.js.map +1 -1
  200. package/dist/react/head/index.browser.js.map +1 -1
  201. package/dist/react/head/index.d.ts +2 -4
  202. package/dist/react/head/index.d.ts.map +1 -1
  203. package/dist/react/head/index.js.map +1 -1
  204. package/dist/react/i18n/index.d.ts +90 -11
  205. package/dist/react/i18n/index.d.ts.map +1 -1
  206. package/dist/react/i18n/index.js +147 -11
  207. package/dist/react/i18n/index.js.map +1 -1
  208. package/dist/react/intro/index.d.ts +1 -2
  209. package/dist/react/intro/index.d.ts.map +1 -1
  210. package/dist/react/intro/index.js +2 -2
  211. package/dist/react/intro/index.js.map +1 -1
  212. package/dist/react/router/index.browser.js +193 -24
  213. package/dist/react/router/index.browser.js.map +1 -1
  214. package/dist/react/router/index.d.ts +434 -222
  215. package/dist/react/router/index.d.ts.map +1 -1
  216. package/dist/react/router/index.js +249 -35
  217. package/dist/react/router/index.js.map +1 -1
  218. package/dist/react/sitemap/index.browser.js +35 -0
  219. package/dist/react/sitemap/index.browser.js.map +1 -0
  220. package/dist/react/sitemap/index.d.ts +92 -0
  221. package/dist/react/sitemap/index.d.ts.map +1 -0
  222. package/dist/react/sitemap/index.js +131 -0
  223. package/dist/react/sitemap/index.js.map +1 -0
  224. package/dist/react/testing/index.d.ts +1 -2
  225. package/dist/react/testing/index.d.ts.map +1 -1
  226. package/dist/react/testing/index.js +16 -17
  227. package/dist/react/testing/index.js.map +1 -1
  228. package/dist/react/ui/index.d.ts +20 -25
  229. package/dist/react/ui/index.d.ts.map +1 -1
  230. package/dist/react/ui/index.js.map +1 -1
  231. package/dist/redis/index.bun.js.map +1 -1
  232. package/dist/redis/index.d.ts +17 -19
  233. package/dist/redis/index.d.ts.map +1 -1
  234. package/dist/redis/index.js.map +1 -1
  235. package/dist/retry/index.d.ts +2 -4
  236. package/dist/retry/index.d.ts.map +1 -1
  237. package/dist/retry/index.js.map +1 -1
  238. package/dist/router/index.d.ts.map +1 -1
  239. package/dist/router/index.js.map +1 -1
  240. package/dist/scheduler/index.d.ts +10 -13
  241. package/dist/scheduler/index.d.ts.map +1 -1
  242. package/dist/scheduler/index.js.map +1 -1
  243. package/dist/scheduler/index.workerd.js.map +1 -1
  244. package/dist/security/index.browser.js.map +1 -1
  245. package/dist/security/index.d.ts +45 -48
  246. package/dist/security/index.d.ts.map +1 -1
  247. package/dist/security/index.js.map +1 -1
  248. package/dist/server/auth/index.browser.js.map +1 -1
  249. package/dist/server/auth/index.d.ts +272 -173
  250. package/dist/server/auth/index.d.ts.map +1 -1
  251. package/dist/server/auth/index.js +1608 -15
  252. package/dist/server/auth/index.js.map +1 -1
  253. package/dist/server/cookies/index.browser.js.map +1 -1
  254. package/dist/server/cookies/index.d.ts +20 -7
  255. package/dist/server/cookies/index.d.ts.map +1 -1
  256. package/dist/server/cookies/index.js +22 -3
  257. package/dist/server/cookies/index.js.map +1 -1
  258. package/dist/server/core/index.browser.js.map +1 -1
  259. package/dist/server/core/index.d.ts +106 -73
  260. package/dist/server/core/index.d.ts.map +1 -1
  261. package/dist/server/core/index.js +44 -0
  262. package/dist/server/core/index.js.map +1 -1
  263. package/dist/server/cors/index.d.ts +11 -14
  264. package/dist/server/cors/index.d.ts.map +1 -1
  265. package/dist/server/cors/index.js.map +1 -1
  266. package/dist/server/etag/index.d.ts +6 -9
  267. package/dist/server/etag/index.d.ts.map +1 -1
  268. package/dist/server/etag/index.js.map +1 -1
  269. package/dist/server/health/index.d.ts +18 -21
  270. package/dist/server/health/index.d.ts.map +1 -1
  271. package/dist/server/health/index.js.map +1 -1
  272. package/dist/server/links/index.browser.js +2 -0
  273. package/dist/server/links/index.browser.js.map +1 -1
  274. package/dist/server/links/index.d.ts +63 -67
  275. package/dist/server/links/index.d.ts.map +1 -1
  276. package/dist/server/links/index.js +2 -0
  277. package/dist/server/links/index.js.map +1 -1
  278. package/dist/server/metrics/index.d.ts +5 -7
  279. package/dist/server/metrics/index.d.ts.map +1 -1
  280. package/dist/server/metrics/index.js.map +1 -1
  281. package/dist/server/proxy/index.d.ts +3 -5
  282. package/dist/server/proxy/index.d.ts.map +1 -1
  283. package/dist/server/proxy/index.js.map +1 -1
  284. package/dist/server/rate-limit/index.d.ts +10 -13
  285. package/dist/server/rate-limit/index.d.ts.map +1 -1
  286. package/dist/server/rate-limit/index.js.map +1 -1
  287. package/dist/server/static/index.d.ts +3 -5
  288. package/dist/server/static/index.d.ts.map +1 -1
  289. package/dist/server/static/index.js.map +1 -1
  290. package/dist/server/swagger/index.d.ts +5 -8
  291. package/dist/server/swagger/index.d.ts.map +1 -1
  292. package/dist/server/swagger/index.js.map +1 -1
  293. package/dist/sms/index.d.ts +3 -5
  294. package/dist/sms/index.d.ts.map +1 -1
  295. package/dist/sms/index.js.map +1 -1
  296. package/dist/system/index.browser.js.map +1 -1
  297. package/dist/system/index.d.ts +2 -4
  298. package/dist/system/index.d.ts.map +1 -1
  299. package/dist/system/index.js.map +1 -1
  300. package/dist/system/index.workerd.js.map +1 -1
  301. package/dist/topic/core/index.d.ts +4 -6
  302. package/dist/topic/core/index.d.ts.map +1 -1
  303. package/dist/topic/core/index.js.map +1 -1
  304. package/dist/topic/redis/index.d.ts +5 -8
  305. package/dist/topic/redis/index.d.ts.map +1 -1
  306. package/dist/topic/redis/index.js.map +1 -1
  307. package/package.json +59 -23
  308. package/src/api/audits/__tests__/AuditService.spec.ts +18 -110
  309. package/src/api/audits/controllers/AdminAuditController.ts +14 -0
  310. package/src/api/audits/services/AuditService.ts +21 -88
  311. package/src/api/files/__tests__/FileService.spec.ts +207 -2
  312. package/src/api/files/index.ts +3 -0
  313. package/src/api/files/schemas/fileCreatorSummarySchema.ts +22 -0
  314. package/src/api/files/schemas/fileResourceSchema.ts +10 -1
  315. package/src/api/files/services/FileService.ts +170 -72
  316. package/src/api/jobs/__tests__/$job.spec.ts +24 -1
  317. package/src/api/jobs/index.ts +4 -3
  318. package/src/api/jobs/primitives/$job.ts +7 -3
  319. package/src/api/jobs/providers/DirectJobDispatcher.ts +17 -36
  320. package/src/api/jobs/providers/JobProvider.ts +53 -24
  321. package/src/api/jobs/schemas/jobConfigAtom.ts +1 -1
  322. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +4 -1
  323. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +3 -1
  324. package/src/api/parameters/__tests__/$parameter.spec.ts +19 -2
  325. package/src/api/parameters/audits/ParameterAudits.ts +17 -0
  326. package/src/api/parameters/controllers/AdminParameterController.ts +95 -19
  327. package/src/api/parameters/index.ts +3 -0
  328. package/src/api/parameters/schemas/activateParameterBodySchema.ts +3 -3
  329. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +3 -2
  330. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +25 -0
  331. package/src/api/parameters/schemas/parameterResponseSchema.ts +5 -0
  332. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +4 -2
  333. package/src/api/parameters/services/ParameterProvider.ts +69 -6
  334. package/src/api/subscriptions/jobs/SubscriptionJobs.ts +1 -1
  335. package/src/api/users/__tests__/AdminSessionController.spec.ts +37 -0
  336. package/src/api/users/audits/SessionAudits.ts +33 -0
  337. package/src/api/users/audits/UserAudits.ts +19 -43
  338. package/src/api/users/controllers/AdminUserController.ts +66 -1
  339. package/src/api/users/controllers/RealmController.ts +1 -0
  340. package/src/api/users/entities/sessions.ts +6 -0
  341. package/src/api/users/entities/users.ts +2 -0
  342. package/src/api/users/index.ts +9 -1
  343. package/src/api/users/primitives/$realm.ts +29 -0
  344. package/src/api/users/providers/RealmProvider.ts +15 -0
  345. package/src/api/users/schemas/realmConfigSchema.ts +14 -0
  346. package/src/api/users/schemas/sessionResourceSchema.ts +16 -0
  347. package/src/api/users/schemas/updateUserSchema.ts +1 -8
  348. package/src/api/users/schemas/userQuerySchema.ts +7 -0
  349. package/src/api/users/services/CredentialService.ts +15 -6
  350. package/src/api/users/services/IdentityService.ts +2 -1
  351. package/src/api/users/services/RegistrationService.ts +2 -1
  352. package/src/api/users/services/SessionCrudService.ts +19 -2
  353. package/src/api/users/services/SessionService.ts +39 -19
  354. package/src/api/users/services/UserService.ts +106 -8
  355. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +96 -0
  356. package/src/background/index.ts +37 -0
  357. package/src/background/index.workerd.ts +28 -0
  358. package/src/background/providers/BackgroundTaskProvider.ts +70 -0
  359. package/src/background/providers/WorkerdBackgroundTaskProvider.ts +43 -0
  360. package/src/bucket/__tests__/$bucket.spec.ts +18 -0
  361. package/src/bucket/__tests__/LocalFileStorageProvider.spec.ts +5 -0
  362. package/src/bucket/__tests__/MemoryFileStorageProvider.spec.ts +5 -0
  363. package/src/bucket/__tests__/NodeS3BucketProvider.spec.ts +23 -4
  364. package/src/bucket/__tests__/shared.ts +30 -0
  365. package/src/bucket/index.ts +5 -5
  366. package/src/bucket/index.workerd.ts +11 -4
  367. package/src/bucket/primitives/$bucket.ts +27 -0
  368. package/src/bucket/providers/FileStorageProvider.ts +13 -0
  369. package/src/bucket/providers/LocalFileStorageProvider.ts +17 -1
  370. package/src/bucket/providers/MemoryFileStorageProvider.ts +7 -0
  371. package/src/bucket/providers/{CloudflareR2Provider.ts → R2FileStorageProvider.ts} +10 -1
  372. package/src/bucket/providers/{NodeS3BucketProvider.ts → S3FileStorageProvider.ts} +27 -5
  373. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +25 -1
  374. package/src/cli/core/__tests__/init.spec.ts +0 -219
  375. package/src/cli/core/atoms/buildOptions.ts +0 -12
  376. package/src/cli/core/commands/__tests__/BuildCommand.spec.ts +43 -0
  377. package/src/cli/core/commands/build.ts +105 -37
  378. package/src/cli/core/commands/init.ts +0 -12
  379. package/src/cli/core/commands/pack.ts +133 -0
  380. package/src/cli/core/index.ts +3 -3
  381. package/src/cli/core/providers/ViteDevServerProvider.ts +40 -16
  382. package/src/cli/core/services/PackageManagerUtils.ts +0 -16
  383. package/src/cli/core/services/ProjectScaffolder.ts +29 -291
  384. package/src/cli/core/tasks/BuildCloudflareTask.ts +382 -56
  385. package/src/cli/core/tasks/BuildDockerTask.ts +33 -3
  386. package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
  387. package/src/cli/core/tasks/BuildTask.ts +34 -0
  388. package/src/cli/core/templates/apiIndexTs.ts +1 -22
  389. package/src/cli/core/templates/mainCss.ts +0 -1
  390. package/src/cli/core/templates/webAppRouterTs.ts +0 -99
  391. package/src/cli/core/templates/webIndexTs.ts +1 -22
  392. package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
  393. package/src/cli/i18n/services/I18nCheckService.ts +65 -11
  394. package/src/cli/platform/__tests__/SecretsCommand.spec.ts +5 -3
  395. package/src/cli/platform/commands/SecretsCommand.ts +8 -6
  396. package/src/cli/platform/commands/platform.ts +192 -46
  397. package/src/cli/platform/index.ts +12 -52
  398. package/src/cli/{platform → platform-lib}/__tests__/CloudflareAdapter.spec.ts +426 -169
  399. package/src/cli/{platform → platform-lib}/__tests__/NamingService.spec.ts +91 -4
  400. package/src/cli/{platform → platform-lib}/__tests__/VercelAdapter.spec.ts +56 -85
  401. package/src/cli/{platform → platform-lib}/adapters/CloudflareAdapter.ts +519 -190
  402. package/src/cli/{platform → platform-lib}/adapters/PlatformAdapter.ts +62 -35
  403. package/src/cli/{platform → platform-lib}/adapters/VercelAdapter.ts +6 -10
  404. package/src/cli/{platform → platform-lib}/atoms/platformOptions.ts +34 -1
  405. package/src/cli/platform-lib/index.ts +67 -0
  406. package/src/cli/platform-lib/services/NamingService.ts +136 -0
  407. package/src/cli/{platform → platform-lib}/services/PlatformInspector.ts +60 -13
  408. package/src/cli/{platform → platform-lib}/services/PlatformOrchestrator.ts +54 -43
  409. package/src/cli/{platform → platform-lib}/services/WranglerApi.ts +4 -2
  410. package/src/command/__tests__/Runner.spec.ts +20 -0
  411. package/src/command/helpers/EnvUtils.ts +19 -3
  412. package/src/command/helpers/Runner.ts +12 -2
  413. package/src/command/providers/CliProvider.ts +34 -1
  414. package/src/{containers → container}/core/__tests__/$container.spec.ts +5 -5
  415. package/src/{containers → container}/core/index.ts +4 -4
  416. package/src/{containers → container}/core/index.workerd.ts +19 -3
  417. package/src/{containers → container}/core/primitives/$container.ts +1 -1
  418. package/src/{containers → container}/core/providers/CloudflareContainerProvider.ts +17 -19
  419. package/src/{containers → container}/core/providers/ContainerProvider.ts +16 -2
  420. package/src/{containers → container}/core/providers/MockContainerProvider.ts +1 -1
  421. package/src/core/Alepha.ts +49 -1
  422. package/src/core/__tests__/$env.spec.ts +42 -0
  423. package/src/core/__tests__/dump.spec.ts +47 -0
  424. package/src/email/cloudflare/__tests__/CloudflareEmailProvider.spec.ts +42 -10
  425. package/src/email/cloudflare/index.ts +14 -5
  426. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +54 -9
  427. package/src/logger/__tests__/Logger.spec.ts +55 -0
  428. package/src/logger/index.ts +13 -0
  429. package/src/logger/services/Logger.ts +31 -1
  430. package/src/mcp/__tests__/McpServerProvider.spec.ts +71 -0
  431. package/src/mcp/providers/McpServerProvider.ts +55 -0
  432. package/src/orm/__tests__/orm-showcase-tests.ts +27 -0
  433. package/src/orm/__tests__/orm-showcase.spec.ts +12 -0
  434. package/src/orm/core/interfaces/PgQuery.ts +4 -1
  435. package/src/orm/core/services/Repository.ts +27 -11
  436. package/src/react/auth/hooks/useAuth.ts +10 -5
  437. package/src/react/core/__tests__/useQuery.browser.spec.tsx +25 -0
  438. package/src/react/core/hooks/useAction.ts +14 -3
  439. package/src/react/core/hooks/useQuery.ts +24 -4
  440. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
  441. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
  442. package/src/react/form/services/FormModel.ts +57 -39
  443. package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
  444. package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
  445. package/src/react/i18n/components/Translate.tsx +47 -0
  446. package/src/react/i18n/index.ts +2 -0
  447. package/src/react/i18n/providers/I18nProvider.ts +171 -12
  448. package/src/react/intro/components/GettingStartedAdminSlide.tsx +2 -2
  449. package/src/react/router/__tests__/$page.spec.tsx +3 -2
  450. package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
  451. package/src/react/router/__tests__/page-can.spec.ts +18 -13
  452. package/src/react/router/hooks/useQueryParams.ts +114 -14
  453. package/src/react/router/index.browser.ts +4 -0
  454. package/src/react/router/index.shared.ts +1 -0
  455. package/src/react/router/index.ts +9 -0
  456. package/src/react/router/primitives/$page.ts +85 -4
  457. package/src/react/router/providers/ReactBrowserRouterProvider.ts +18 -8
  458. package/src/react/router/providers/ReactPageProvider.ts +12 -1
  459. package/src/react/router/providers/ReactServerProvider.ts +96 -14
  460. package/src/react/router/providers/RootComponentsProvider.ts +13 -0
  461. package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
  462. package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
  463. package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
  464. package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
  465. package/src/react/sitemap/index.browser.ts +21 -0
  466. package/src/react/sitemap/index.ts +25 -0
  467. package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
  468. package/src/react/sitemap/primitives/$sitemap.ts +196 -0
  469. package/src/react/ui/services/SchemaControl.ts +3 -4
  470. package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
  471. package/src/server/auth/__tests__/authFederationClient.spec.ts +40 -0
  472. package/src/server/auth/__tests__/federationAssertion.spec.ts +146 -0
  473. package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
  474. package/src/server/auth/helpers/appleClientSecret.ts +24 -0
  475. package/src/server/auth/helpers/federationAssertion.ts +74 -0
  476. package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
  477. package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
  478. package/src/server/auth/index.ts +4 -0
  479. package/src/server/auth/primitives/$authFederationBroker.ts +273 -0
  480. package/src/server/auth/primitives/$authFederationClient.ts +89 -0
  481. package/src/server/auth/providers/ServerAuthProvider.ts +18 -4
  482. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +70 -0
  483. package/src/server/cookies/providers/ServerCookiesProvider.ts +23 -3
  484. package/src/server/core/interfaces/ServerRequest.ts +8 -0
  485. package/src/server/core/primitives/$route.ts +27 -0
  486. package/src/server/core/providers/ServerMultipartProvider.ts +19 -0
  487. package/src/server/links/providers/LinkProvider.ts +10 -0
  488. package/dist/containers/core/index.d.ts.map +0 -1
  489. package/dist/containers/core/index.js.map +0 -1
  490. package/dist/containers/core/index.workerd.js.map +0 -1
  491. package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
  492. package/src/cli/core/templates/componentsJsonTs.ts +0 -39
  493. package/src/cli/core/templates/saasAdminLayoutTsx.ts +0 -77
  494. package/src/cli/core/templates/saasAdminPagesTsx.ts +0 -26
  495. package/src/cli/core/templates/saasAuthLayoutTsx.ts +0 -22
  496. package/src/cli/core/templates/saasAuthPagesTsx.ts +0 -62
  497. package/src/cli/core/templates/saasRealmProviderTs.ts +0 -52
  498. package/src/cli/platform/services/NamingService.ts +0 -54
  499. /package/dist/orm/core/{chunk-o8xxKEmq.js → chunk-B4FMCO8f.js} +0 -0
  500. /package/dist/react/testing/{chunk-6Ep1yQYe.js → chunk-BpyX8vjI.js} +0 -0
  501. /package/src/cli/{platform → platform-lib}/__tests__/GitHubSecretStore.spec.ts +0 -0
  502. /package/src/cli/{platform → platform-lib}/__tests__/PlatformCacheProvider.spec.ts +0 -0
  503. /package/src/cli/{platform → platform-lib}/__tests__/PlatformInspector.spec.ts +0 -0
  504. /package/src/cli/{platform → platform-lib}/__tests__/PlatformOrchestrator.spec.ts +0 -0
  505. /package/src/cli/{platform → platform-lib}/__tests__/SecretFilterService.spec.ts +0 -0
  506. /package/src/cli/{platform → platform-lib}/__tests__/detectResources.spec.ts +0 -0
  507. /package/src/cli/{platform → platform-lib}/providers/GitHubSecretStore.ts +0 -0
  508. /package/src/cli/{platform → platform-lib}/providers/MemorySecretStore.ts +0 -0
  509. /package/src/cli/{platform → platform-lib}/providers/PlatformCacheProvider.ts +0 -0
  510. /package/src/cli/{platform → platform-lib}/providers/SecretStoreProvider.ts +0 -0
  511. /package/src/cli/{platform → platform-lib}/schemas/cloudflare.ts +0 -0
  512. /package/src/cli/{platform → platform-lib}/schemas/platform.ts +0 -0
  513. /package/src/cli/{platform → platform-lib}/schemas/vercel.ts +0 -0
  514. /package/src/cli/{platform → platform-lib}/services/CloudflareApi.ts +0 -0
  515. /package/src/cli/{platform → platform-lib}/services/SecretFilterService.ts +0 -0
  516. /package/src/cli/{platform → platform-lib}/services/VercelApi.ts +0 -0
  517. /package/src/cli/{platform → platform-lib}/services/VercelCli.ts +0 -0
  518. /package/src/{containers → container}/core/interfaces/ContainerOptions.ts +0 -0
  519. /package/src/{containers → container}/core/providers/NodeContainerProvider.ts +0 -0
@@ -2,14 +2,13 @@ import { basename, dirname } from "node:path";
2
2
  import { $inject, AlephaError } from "alepha";
3
3
  import type { RunnerMethod } from "alepha/command";
4
4
  import { $logger, ConsoleColorProvider } from "alepha/logger";
5
- import { FileSystemProvider, ShellProvider } from "alepha/system";
5
+ import { FileSystemProvider } from "alepha/system";
6
6
  import { agentMd } from "../templates/agentMd.ts";
7
7
  import { alephaConfigTs } from "../templates/alephaConfigTs.ts";
8
8
  import { apiHelloControllerTs } from "../templates/apiHelloControllerTs.ts";
9
9
  import { apiHelloResponseSchemaTs } from "../templates/apiHelloResponseSchemaTs.ts";
10
10
  import { apiIndexTs } from "../templates/apiIndexTs.ts";
11
11
  import { biomeJson } from "../templates/biomeJson.ts";
12
- import { componentsJsonTs } from "../templates/componentsJsonTs.ts";
13
12
  import { dummySpecTs } from "../templates/dummySpecTs.ts";
14
13
  import { editorconfig } from "../templates/editorconfig.ts";
15
14
  import { gitignore } from "../templates/gitignore.ts";
@@ -17,19 +16,6 @@ import { logoSvg } from "../templates/logoSvg.ts";
17
16
  import { mainBrowserTs } from "../templates/mainBrowserTs.ts";
18
17
  import { mainCss } from "../templates/mainCss.ts";
19
18
  import { mainServerTs } from "../templates/mainServerTs.ts";
20
- import { saasAdminLayoutTsx } from "../templates/saasAdminLayoutTsx.ts";
21
- import {
22
- saasAdminSessionsTsx,
23
- saasAdminUsersTsx,
24
- } from "../templates/saasAdminPagesTsx.ts";
25
- import { saasAuthLayoutTsx } from "../templates/saasAuthLayoutTsx.ts";
26
- import {
27
- saasAuthLoginTsx,
28
- saasAuthRegisterTsx,
29
- saasAuthResetPasswordTsx,
30
- saasAuthVerifyEmailTsx,
31
- } from "../templates/saasAuthPagesTsx.ts";
32
- import { saasRealmProviderTs } from "../templates/saasRealmProviderTs.ts";
33
19
  import { tsconfigJson } from "../templates/tsconfigJson.ts";
34
20
  import { viteConfigTs } from "../templates/viteConfigTs.ts";
35
21
  import { vitestConfigTs } from "../templates/vitestConfigTs.ts";
@@ -56,7 +42,6 @@ export class ProjectScaffolder {
56
42
  protected readonly log = $logger();
57
43
  protected readonly colors = $inject(ConsoleColorProvider);
58
44
  protected readonly fs = $inject(FileSystemProvider);
59
- protected readonly shell = $inject(ShellProvider);
60
45
  protected readonly pm = $inject(PackageManagerUtils);
61
46
  protected readonly utils = $inject(AlephaCliUtils);
62
47
 
@@ -86,13 +71,7 @@ export class ProjectScaffolder {
86
71
  */
87
72
  checkWorkspace?: boolean;
88
73
  packageJson?: boolean | DependencyModes;
89
- /**
90
- * `true` writes a tsconfig.json if one doesn't already exist (parent
91
- * dirs included). `"local"` writes one when none exists *in this
92
- * directory* — used by shadcn since the CLI reads the local
93
- * tsconfig directly for import-alias detection.
94
- */
95
- tsconfigJson?: boolean | "local";
74
+ tsconfigJson?: boolean;
96
75
  biomeJson?: boolean;
97
76
  editorconfig?: boolean;
98
77
  agentMd?: boolean;
@@ -118,12 +97,7 @@ export class ProjectScaffolder {
118
97
  );
119
98
  }
120
99
  if (opts.tsconfigJson) {
121
- tasks.push(
122
- this.ensureTsConfig(root, {
123
- force,
124
- localOnly: opts.tsconfigJson === "local",
125
- }),
126
- );
100
+ tasks.push(this.ensureTsConfig(root, { force }));
127
101
  }
128
102
  if (opts.biomeJson) {
129
103
  tasks.push(this.ensureBiomeConfig(root, { force, checkWorkspace }));
@@ -147,14 +121,9 @@ export class ProjectScaffolder {
147
121
 
148
122
  public async ensureTsConfig(
149
123
  root: string,
150
- opts: { force?: boolean; localOnly?: boolean } = {},
124
+ opts: { force?: boolean } = {},
151
125
  ): Promise<void> {
152
- // Check if tsconfig.json exists in current or parent directories.
153
- // `localOnly: true` skips the parent walk — needed when a tool reads the
154
- // local tsconfig directly (shadcn does this for import-alias detection).
155
- const exists = opts.localOnly
156
- ? await this.fs.exists(this.fs.join(root, "tsconfig.json"))
157
- : await this.existsInParents(root, "tsconfig.json");
126
+ const exists = await this.existsInParents(root, "tsconfig.json");
158
127
  if (!opts.force && exists) {
159
128
  return;
160
129
  }
@@ -312,7 +281,7 @@ export class ProjectScaffolder {
312
281
  */
313
282
  public async ensureApiProject(
314
283
  root: string,
315
- opts: { saas?: boolean; force?: boolean } = {},
284
+ opts: { force?: boolean } = {},
316
285
  ): Promise<void> {
317
286
  const appName = this.getAppName(root);
318
287
 
@@ -328,7 +297,7 @@ export class ProjectScaffolder {
328
297
  await this.ensureFile(
329
298
  root,
330
299
  "src/api/index.ts",
331
- apiIndexTs({ appName, saas: opts.saas }),
300
+ apiIndexTs({ appName }),
332
301
  opts.force,
333
302
  );
334
303
  await this.ensureFile(
@@ -343,46 +312,6 @@ export class ProjectScaffolder {
343
312
  apiHelloResponseSchemaTs(),
344
313
  opts.force,
345
314
  );
346
-
347
- if (opts.saas) {
348
- await this.fs.mkdir(this.fs.join(root, "src/api/providers"), {
349
- recursive: true,
350
- });
351
- await this.ensureFile(
352
- root,
353
- "src/api/providers/RealmProvider.ts",
354
- saasRealmProviderTs(),
355
- opts.force,
356
- );
357
- // Seed the admin email into .env (gitignored) — never into source.
358
- // Detected from `git config user.email`; neutral fallback otherwise.
359
- const adminEmail = (await this.detectGitEmail()) ?? "admin@alepha.dev";
360
- await this.ensureFile(
361
- root,
362
- ".env",
363
- `ADMIN_EMAILS=${adminEmail}\n`,
364
- opts.force,
365
- );
366
- }
367
- }
368
-
369
- /**
370
- * Best-effort lookup for the developer's git email — seeded as
371
- * `ADMIN_EMAILS` in the SaaS project's `.env`. Returns undefined if git
372
- * isn't available or `user.email` isn't configured; the caller then falls
373
- * back to the neutral `admin@alepha.dev`.
374
- */
375
- protected async detectGitEmail(): Promise<string | undefined> {
376
- try {
377
- const stdout = (await this.shell.run("git config --get user.email", {
378
- capture: true,
379
- })) as unknown as string;
380
- const email = (stdout ?? "").trim();
381
- if (!email || !email.includes("@")) return undefined;
382
- return email;
383
- } catch {
384
- return undefined;
385
- }
386
315
  }
387
316
 
388
317
  // ===========================================
@@ -402,8 +331,6 @@ export class ProjectScaffolder {
402
331
  opts: {
403
332
  api?: boolean;
404
333
  tailwind?: boolean;
405
- shadcn?: boolean;
406
- saas?: boolean;
407
334
  force?: boolean;
408
335
  } = {},
409
336
  ): Promise<void> {
@@ -414,15 +341,6 @@ export class ProjectScaffolder {
414
341
  recursive: true,
415
342
  });
416
343
 
417
- if (opts.saas) {
418
- await this.fs.mkdir(this.fs.join(root, "src/web/components/auth"), {
419
- recursive: true,
420
- });
421
- await this.fs.mkdir(this.fs.join(root, "src/web/components/admin"), {
422
- recursive: true,
423
- });
424
- }
425
-
426
344
  // public/favicon.svg
427
345
  await this.fs.mkdir(this.fs.join(root, "public"), { recursive: true });
428
346
  await this.ensureFile(root, "public/favicon.svg", logoSvg, opts.force);
@@ -440,32 +358,17 @@ export class ProjectScaffolder {
440
358
  await this.ensureFile(root, "vite.config.ts", viteConfigTs(), opts.force);
441
359
  }
442
360
 
443
- // shadcn/ui: write components.json before running `shadcn init` — the
444
- // CLI respects an existing config and skips its interactive prompts,
445
- // which lets us pin our aliases (`@/web/*`) and the `@alepha` registry.
446
- // The CLI itself writes the cn() helper, theme tokens, and installs
447
- // runtime deps (clsx, tailwind-merge, class-variance-authority,
448
- // lucide-react, tw-animate-css) — see runShadcnInit below.
449
- if (opts.shadcn) {
450
- await this.ensureFile(
451
- root,
452
- "components.json",
453
- componentsJsonTs(),
454
- opts.force,
455
- );
456
- }
457
-
458
361
  // Web structure
459
362
  await this.ensureFile(
460
363
  root,
461
364
  "src/web/index.ts",
462
- webIndexTs({ appName, saas: opts.saas }),
365
+ webIndexTs({ appName }),
463
366
  opts.force,
464
367
  );
465
368
  await this.ensureFile(
466
369
  root,
467
370
  "src/web/AppRouter.ts",
468
- webAppRouterTs({ api: opts.api, saas: opts.saas }),
371
+ webAppRouterTs({ api: opts.api }),
469
372
  opts.force,
470
373
  );
471
374
  await this.ensureFile(
@@ -480,62 +383,6 @@ export class ProjectScaffolder {
480
383
  mainBrowserTs(),
481
384
  opts.force,
482
385
  );
483
-
484
- if (opts.saas) {
485
- // Auth — layout + 4 pages, each a thin wrapper around the registry
486
- // component that `shadcn add @alepha/auth-*` drops at
487
- // src/web/components/auth-*.tsx.
488
- await this.ensureFile(
489
- root,
490
- "src/web/components/auth/AuthLayout.tsx",
491
- saasAuthLayoutTsx(),
492
- opts.force,
493
- );
494
- await this.ensureFile(
495
- root,
496
- "src/web/components/auth/Login.tsx",
497
- saasAuthLoginTsx(),
498
- opts.force,
499
- );
500
- await this.ensureFile(
501
- root,
502
- "src/web/components/auth/Register.tsx",
503
- saasAuthRegisterTsx(),
504
- opts.force,
505
- );
506
- await this.ensureFile(
507
- root,
508
- "src/web/components/auth/ResetPassword.tsx",
509
- saasAuthResetPasswordTsx(),
510
- opts.force,
511
- );
512
- await this.ensureFile(
513
- root,
514
- "src/web/components/auth/VerifyEmail.tsx",
515
- saasAuthVerifyEmailTsx(),
516
- opts.force,
517
- );
518
-
519
- // Admin — AppShell layout + 5 admin-* pages
520
- await this.ensureFile(
521
- root,
522
- "src/web/components/admin/AdminLayout.tsx",
523
- saasAdminLayoutTsx(),
524
- opts.force,
525
- );
526
- await this.ensureFile(
527
- root,
528
- "src/web/components/admin/Users.tsx",
529
- saasAdminUsersTsx(),
530
- opts.force,
531
- );
532
- await this.ensureFile(
533
- root,
534
- "src/web/components/admin/Sessions.tsx",
535
- saasAdminSessionsTsx(),
536
- opts.force,
537
- );
538
- }
539
386
  }
540
387
 
541
388
  // ===========================================
@@ -588,54 +435,36 @@ export class ProjectScaffolder {
588
435
  api?: boolean;
589
436
  react?: boolean;
590
437
  tailwind?: boolean;
591
- /** boolean toggle, or a string preset id (default `b0` when bare). */
592
- shadcn?: boolean | string;
593
- /** boolean toggle, or a string preset id (default `b0` when bare). */
594
- saas?: boolean | string;
595
438
  force?: boolean;
596
439
  };
597
440
  args?: string;
598
441
  }) {
442
+ if (!args) {
443
+ // If the current directory doesn't look like an existing project
444
+ // (no package.json), default to creating a `my-app/` subdirectory
445
+ // rather than scaffolding into a random cwd.
446
+ const hasPackageJson = await this.fs.exists(
447
+ this.fs.join(root, "package.json"),
448
+ );
449
+ if (!hasPackageJson) {
450
+ args = "my-app";
451
+ }
452
+ }
453
+
599
454
  if (args) {
600
455
  root = this.fs.join(root, args);
601
456
  await this.fs.mkdir(root, { force: true });
602
457
  }
603
458
 
604
- // `--shadcn` / `--saas` are union flags: baretrue, string → preset.
605
- // Capture the preset string (default `b0`), then normalize both flags
606
- // to plain booleans so the rest of the pipeline keeps its boolean
607
- // contract with PackageManagerUtils + ensureWebProject etc.
608
- const shadcnPreset =
609
- (typeof flags.saas === "string" && flags.saas) ||
610
- (typeof flags.shadcn === "string" && flags.shadcn) ||
611
- "b0";
612
-
613
- // Cast to a narrower view so downstream sees pure booleans.
614
- const f = flags as Omit<typeof flags, "shadcn" | "saas"> & {
615
- shadcn?: boolean;
616
- saas?: boolean;
617
- };
618
- f.shadcn = !!flags.shadcn;
619
- f.saas = !!flags.saas;
620
-
621
- // Flag cascading:
622
- // --saas → --shadcn + --api
623
- // --shadcn → --tailwind
624
- // --tailwind→ --react
625
- if (f.saas) {
626
- f.shadcn = true;
627
- f.api = true;
628
- }
629
- if (f.shadcn) {
630
- f.tailwind = true;
631
- }
459
+ // Flag cascading: --tailwind--react
632
460
  if (flags.tailwind) {
633
461
  flags.react = true;
634
462
  }
635
463
 
464
+ const f = flags;
465
+
636
466
  // When codegen flags are set, target directory must be empty (unless --force)
637
- const hasCodegenFlags =
638
- flags.api || flags.react || flags.tailwind || flags.shadcn || flags.saas;
467
+ const hasCodegenFlags = flags.api || flags.react || flags.tailwind;
639
468
  if (hasCodegenFlags && !flags.force) {
640
469
  const files = await this.fs.ls(root);
641
470
  // Allow a directory that only has package.json (common for monorepo packages)
@@ -664,11 +493,7 @@ export class ProjectScaffolder {
664
493
  await this.ensureConfig(root, {
665
494
  force,
666
495
  packageJson: { ...f, isPackage: workspace.isPackage },
667
- // Skip workspace-level configs if they exist at workspace root —
668
- // unless --shadcn is set: the shadcn CLI reads the local
669
- // tsconfig.json directly to detect import aliases (it doesn't
670
- // follow `extends`), so we must ensure one exists in the package.
671
- tsconfigJson: f.shadcn ? "local" : !workspace.config.tsconfigJson,
496
+ tsconfigJson: !workspace.config.tsconfigJson,
672
497
  biomeJson: true,
673
498
  editorconfig: !workspace.config.editorconfig,
674
499
  agentMd: writeAgentMd,
@@ -687,14 +512,12 @@ export class ProjectScaffolder {
687
512
  force,
688
513
  });
689
514
  if (flags.api) {
690
- await this.ensureApiProject(root, { saas: !!flags.saas, force });
515
+ await this.ensureApiProject(root, { force });
691
516
  }
692
517
  if (flags.react && !isExpo) {
693
518
  await this.ensureWebProject(root, {
694
519
  api: !!flags.api,
695
520
  tailwind: !!flags.tailwind,
696
- shadcn: !!flags.shadcn,
697
- saas: !!flags.saas,
698
521
  force,
699
522
  });
700
523
  }
@@ -733,63 +556,8 @@ export class ProjectScaffolder {
733
556
  // worked example for both humans and AI agents.
734
557
  await this.ensureTestDir(root);
735
558
 
736
- // shadcn/ui: run `<pm> shadcn init` against the components.json we wrote
737
- // earlier. shadcn detects the existing config, respects our aliases,
738
- // injects theme tokens into src/main.css, writes src/web/lib/utils.ts,
739
- // and installs runtime deps (clsx, tailwind-merge, etc.).
740
- //
741
- // Flags chosen to keep this fully non-interactive:
742
- // --yes skip confirmation prompts (default in shadcn v4 but
743
- // passed explicitly so older versions also behave)
744
- // --no-monorepo skip the monorepo prompt — we ship a single-app
745
- // layout; users opt into monorepo via `--monorepo`
746
- // on the alepha side later
747
- //
748
- // We deliberately do NOT pass `--defaults` (would force Next.js +
749
- // base-nova preset) or `--template` (only applies to scratch projects;
750
- // ours already has main.server.ts / main.browser.ts).
751
- // Each PM has a different way to exec a project-local binary.
752
- const exec = pmExecPrefix(pmName);
753
-
754
- if (flags.shadcn) {
755
- // Fully non-interactive shadcn init. The `--preset` arg is what makes
756
- // this work — without it shadcn falls back to interactive prompts even
757
- // with --yes/--force. Defaults: vite template + radix base + reinstall
758
- // (so the components.json we pre-wrote stays canonical).
759
- await run(
760
- `${exec} shadcn init --no-monorepo --base radix -t vite --yes --force --reinstall --preset ${escapeShellArg(shadcnPreset)}`,
761
- { alias: `running shadcn init (preset ${shadcnPreset})`, root },
762
- );
763
- // Re-pin our aliases + alepha registry — `shadcn init --force`
764
- // overwrites components.json with the template defaults.
765
- await this.fs.writeFile(
766
- this.fs.join(root, "components.json"),
767
- componentsJsonTs(),
768
- );
769
- }
770
-
771
- // SaaS preset: pull in the auth + admin registry components from the
772
- // public alepha registry (already wired via components.json's
773
- // `registries: { "@alepha": "https://alepha.dev/r/{name}.json" }`).
774
- // Each `shadcn add` writes the component into src/web/components/* and
775
- // pulls its peer primitives + dependencies (sonner, etc.).
776
- if (flags.saas) {
777
- // Pull the public SaaS bundle in one shot — it aggregates control,
778
- // auto-form, alepha-table, use-dialog, app-shell, every auth-*, and
779
- // every admin-* block. Definition lives at
780
- // https://alepha.dev/r/saas.json (see @alepha/ui-registry).
781
- // `--yes --overwrite` is the only combo that works non-interactively
782
- // when registry items would replace files we pre-wrote (auth-login etc.
783
- // overlap with shadcn primitives like button/input).
784
- await run(`${exec} shadcn add @alepha/saas --yes --overwrite`, {
785
- alias: "adding alepha saas registry bundle",
786
- root,
787
- });
788
- }
789
-
790
- // Best-effort lint: shadcn-imported registry components occasionally
791
- // trip biome rules (e.g. noArrayIndexKey on a Fragment loop). The user
792
- // can fix or silence these later — don't block the whole init.
559
+ // Best-effort lint pass don't block init if it fails. The user can
560
+ // fix or silence issues later.
793
561
  try {
794
562
  await run(`${pmName} run lint`, {
795
563
  alias: "running linter",
@@ -881,33 +649,3 @@ export class ProjectScaffolder {
881
649
  }
882
650
  }
883
651
  }
884
-
885
- /**
886
- * Map a package manager name to the command that runs a project-local binary.
887
- *
888
- * - npm: `npx`
889
- * - yarn: `yarn` (yarn auto-resolves binary names; `yarn shadcn ...` works)
890
- * - pnpm: `pnpm exec`
891
- * - bun: `bunx`
892
- *
893
- * Used to invoke `shadcn init` / `shadcn add` regardless of the user's PM —
894
- * `npm shadcn ...` is invalid (it tries to run a script named `shadcn`).
895
- */
896
- /** Quote a value so it survives shell parsing. */
897
- const escapeShellArg = (value: string): string => {
898
- if (/^[A-Za-z0-9_./@:-]+$/.test(value)) return value;
899
- return `'${value.replace(/'/g, "'\\''")}'`;
900
- };
901
-
902
- const pmExecPrefix = (pmName: string): string => {
903
- switch (pmName) {
904
- case "npm":
905
- return "npx";
906
- case "pnpm":
907
- return "pnpm exec";
908
- case "bun":
909
- return "bunx";
910
- default:
911
- return "yarn";
912
- }
913
- };