alepha 0.21.2 → 0.22.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 (463) 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 +289 -292
  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 +211 -216
  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 +1073 -1006
  49. package/dist/api/users/index.d.ts.map +1 -1
  50. package/dist/api/users/index.js +283 -61
  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 +134 -140
  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 +417 -214
  88. package/dist/cli/core/index.d.ts.map +1 -1
  89. package/dist/cli/core/index.js +325 -563
  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 +8 -12
  95. package/dist/cli/i18n/index.d.ts.map +1 -1
  96. package/dist/cli/i18n/index.js.map +1 -1
  97. package/dist/cli/platform/index.d.ts +126 -1342
  98. package/dist/cli/platform/index.d.ts.map +1 -1
  99. package/dist/cli/platform/index.js +136 -2374
  100. package/dist/cli/platform/index.js.map +1 -1
  101. package/dist/cli/platform-lib/index.d.ts +1446 -0
  102. package/dist/cli/platform-lib/index.d.ts.map +1 -0
  103. package/dist/cli/platform-lib/index.js +2597 -0
  104. package/dist/cli/platform-lib/index.js.map +1 -0
  105. package/dist/cli/vendor/index.d.ts +17 -21
  106. package/dist/cli/vendor/index.d.ts.map +1 -1
  107. package/dist/cli/vendor/index.js.map +1 -1
  108. package/dist/command/index.d.ts +21 -20
  109. package/dist/command/index.d.ts.map +1 -1
  110. package/dist/command/index.js +39 -10
  111. package/dist/command/index.js.map +1 -1
  112. package/dist/{containers → container}/core/index.d.ts +13 -15
  113. package/dist/container/core/index.d.ts.map +1 -0
  114. package/dist/{containers → container}/core/index.js +23 -14
  115. package/dist/container/core/index.js.map +1 -0
  116. package/dist/{containers → container}/core/index.workerd.js +37 -22
  117. package/dist/container/core/index.workerd.js.map +1 -0
  118. package/dist/core/index.browser.js +27 -1
  119. package/dist/core/index.browser.js.map +1 -1
  120. package/dist/core/index.d.ts +48 -24
  121. package/dist/core/index.d.ts.map +1 -1
  122. package/dist/core/index.js +27 -1
  123. package/dist/core/index.js.map +1 -1
  124. package/dist/core/index.native.js +27 -1
  125. package/dist/core/index.native.js.map +1 -1
  126. package/dist/core/index.workerd.js +27 -1
  127. package/dist/core/index.workerd.js.map +1 -1
  128. package/dist/crypto/index.browser.js.map +1 -1
  129. package/dist/crypto/index.d.ts +5 -8
  130. package/dist/crypto/index.d.ts.map +1 -1
  131. package/dist/crypto/index.js.map +1 -1
  132. package/dist/datetime/index.d.ts +3 -4
  133. package/dist/datetime/index.d.ts.map +1 -1
  134. package/dist/datetime/index.js.map +1 -1
  135. package/dist/email/brevo/index.d.ts +2 -4
  136. package/dist/email/brevo/index.d.ts.map +1 -1
  137. package/dist/email/brevo/index.js.map +1 -1
  138. package/dist/email/cloudflare/index.d.ts +20 -7
  139. package/dist/email/cloudflare/index.d.ts.map +1 -1
  140. package/dist/email/cloudflare/index.js +46 -9
  141. package/dist/email/cloudflare/index.js.map +1 -1
  142. package/dist/email/core/index.d.ts +6 -9
  143. package/dist/email/core/index.d.ts.map +1 -1
  144. package/dist/email/core/index.js.map +1 -1
  145. package/dist/email/core/index.workerd.js.map +1 -1
  146. package/dist/email/smtp/index.d.ts +10 -13
  147. package/dist/email/smtp/index.d.ts.map +1 -1
  148. package/dist/email/smtp/index.js +107 -32
  149. package/dist/email/smtp/index.js.map +1 -1
  150. package/dist/fake/index.d.ts +1 -2
  151. package/dist/fake/index.d.ts.map +1 -1
  152. package/dist/fake/index.js.map +1 -1
  153. package/dist/lock/core/index.d.ts +9 -14
  154. package/dist/lock/core/index.d.ts.map +1 -1
  155. package/dist/lock/core/index.js.map +1 -1
  156. package/dist/lock/redis/index.d.ts +2 -4
  157. package/dist/lock/redis/index.d.ts.map +1 -1
  158. package/dist/lock/redis/index.js.map +1 -1
  159. package/dist/logger/index.d.ts +105 -76
  160. package/dist/logger/index.d.ts.map +1 -1
  161. package/dist/logger/index.js +196 -174
  162. package/dist/logger/index.js.map +1 -1
  163. package/dist/mcp/index.d.ts +16 -20
  164. package/dist/mcp/index.d.ts.map +1 -1
  165. package/dist/mcp/index.js.map +1 -1
  166. package/dist/orm/core/index.browser.js.map +1 -1
  167. package/dist/orm/core/index.bun.js +19 -1
  168. package/dist/orm/core/index.bun.js.map +1 -1
  169. package/dist/orm/core/index.d.ts +76 -62
  170. package/dist/orm/core/index.d.ts.map +1 -1
  171. package/dist/orm/core/index.js +20 -2
  172. package/dist/orm/core/index.js.map +1 -1
  173. package/dist/orm/postgres/index.bun.js.map +1 -1
  174. package/dist/orm/postgres/index.d.ts +28 -20
  175. package/dist/orm/postgres/index.d.ts.map +1 -1
  176. package/dist/orm/postgres/index.js.map +1 -1
  177. package/dist/queue/core/index.d.ts +12 -15
  178. package/dist/queue/core/index.d.ts.map +1 -1
  179. package/dist/queue/core/index.js.map +1 -1
  180. package/dist/queue/core/index.workerd.js.map +1 -1
  181. package/dist/queue/redis/index.d.ts +3 -5
  182. package/dist/queue/redis/index.d.ts.map +1 -1
  183. package/dist/queue/redis/index.js.map +1 -1
  184. package/dist/react/auth/index.browser.js +9 -2
  185. package/dist/react/auth/index.browser.js.map +1 -1
  186. package/dist/react/auth/index.d.ts +14 -9
  187. package/dist/react/auth/index.d.ts.map +1 -1
  188. package/dist/react/auth/index.js +9 -2
  189. package/dist/react/auth/index.js.map +1 -1
  190. package/dist/react/core/index.d.ts +7 -8
  191. package/dist/react/core/index.d.ts.map +1 -1
  192. package/dist/react/core/index.js +6 -3
  193. package/dist/react/core/index.js.map +1 -1
  194. package/dist/react/form/index.d.ts +2 -4
  195. package/dist/react/form/index.d.ts.map +1 -1
  196. package/dist/react/form/index.js.map +1 -1
  197. package/dist/react/head/index.browser.js.map +1 -1
  198. package/dist/react/head/index.d.ts +2 -4
  199. package/dist/react/head/index.d.ts.map +1 -1
  200. package/dist/react/head/index.js.map +1 -1
  201. package/dist/react/i18n/index.d.ts +47 -11
  202. package/dist/react/i18n/index.d.ts.map +1 -1
  203. package/dist/react/i18n/index.js +33 -1
  204. package/dist/react/i18n/index.js.map +1 -1
  205. package/dist/react/intro/index.d.ts +1 -2
  206. package/dist/react/intro/index.d.ts.map +1 -1
  207. package/dist/react/intro/index.js +2 -2
  208. package/dist/react/intro/index.js.map +1 -1
  209. package/dist/react/router/index.browser.js +65 -19
  210. package/dist/react/router/index.browser.js.map +1 -1
  211. package/dist/react/router/index.d.ts +327 -222
  212. package/dist/react/router/index.d.ts.map +1 -1
  213. package/dist/react/router/index.js +65 -29
  214. package/dist/react/router/index.js.map +1 -1
  215. package/dist/react/testing/index.d.ts +1 -2
  216. package/dist/react/testing/index.d.ts.map +1 -1
  217. package/dist/react/testing/index.js +16 -17
  218. package/dist/react/testing/index.js.map +1 -1
  219. package/dist/react/ui/index.d.ts +20 -25
  220. package/dist/react/ui/index.d.ts.map +1 -1
  221. package/dist/react/ui/index.js.map +1 -1
  222. package/dist/redis/index.bun.js.map +1 -1
  223. package/dist/redis/index.d.ts +17 -19
  224. package/dist/redis/index.d.ts.map +1 -1
  225. package/dist/redis/index.js.map +1 -1
  226. package/dist/retry/index.d.ts +2 -4
  227. package/dist/retry/index.d.ts.map +1 -1
  228. package/dist/retry/index.js.map +1 -1
  229. package/dist/router/index.d.ts.map +1 -1
  230. package/dist/router/index.js.map +1 -1
  231. package/dist/scheduler/index.d.ts +10 -13
  232. package/dist/scheduler/index.d.ts.map +1 -1
  233. package/dist/scheduler/index.js.map +1 -1
  234. package/dist/scheduler/index.workerd.js.map +1 -1
  235. package/dist/security/index.browser.js.map +1 -1
  236. package/dist/security/index.d.ts +45 -48
  237. package/dist/security/index.d.ts.map +1 -1
  238. package/dist/security/index.js.map +1 -1
  239. package/dist/server/auth/index.browser.js.map +1 -1
  240. package/dist/server/auth/index.d.ts +167 -172
  241. package/dist/server/auth/index.d.ts.map +1 -1
  242. package/dist/server/auth/index.js +4 -8
  243. package/dist/server/auth/index.js.map +1 -1
  244. package/dist/server/cookies/index.browser.js.map +1 -1
  245. package/dist/server/cookies/index.d.ts +5 -7
  246. package/dist/server/cookies/index.d.ts.map +1 -1
  247. package/dist/server/cookies/index.js.map +1 -1
  248. package/dist/server/core/index.browser.js.map +1 -1
  249. package/dist/server/core/index.d.ts +88 -73
  250. package/dist/server/core/index.d.ts.map +1 -1
  251. package/dist/server/core/index.js +19 -0
  252. package/dist/server/core/index.js.map +1 -1
  253. package/dist/server/cors/index.d.ts +11 -14
  254. package/dist/server/cors/index.d.ts.map +1 -1
  255. package/dist/server/cors/index.js.map +1 -1
  256. package/dist/server/etag/index.d.ts +6 -9
  257. package/dist/server/etag/index.d.ts.map +1 -1
  258. package/dist/server/etag/index.js.map +1 -1
  259. package/dist/server/health/index.d.ts +18 -21
  260. package/dist/server/health/index.d.ts.map +1 -1
  261. package/dist/server/health/index.js.map +1 -1
  262. package/dist/server/links/index.browser.js +2 -0
  263. package/dist/server/links/index.browser.js.map +1 -1
  264. package/dist/server/links/index.d.ts +63 -67
  265. package/dist/server/links/index.d.ts.map +1 -1
  266. package/dist/server/links/index.js +2 -0
  267. package/dist/server/links/index.js.map +1 -1
  268. package/dist/server/metrics/index.d.ts +5 -7
  269. package/dist/server/metrics/index.d.ts.map +1 -1
  270. package/dist/server/metrics/index.js.map +1 -1
  271. package/dist/server/proxy/index.d.ts +3 -5
  272. package/dist/server/proxy/index.d.ts.map +1 -1
  273. package/dist/server/proxy/index.js.map +1 -1
  274. package/dist/server/rate-limit/index.d.ts +10 -13
  275. package/dist/server/rate-limit/index.d.ts.map +1 -1
  276. package/dist/server/rate-limit/index.js.map +1 -1
  277. package/dist/server/static/index.d.ts +3 -5
  278. package/dist/server/static/index.d.ts.map +1 -1
  279. package/dist/server/static/index.js.map +1 -1
  280. package/dist/server/swagger/index.d.ts +5 -8
  281. package/dist/server/swagger/index.d.ts.map +1 -1
  282. package/dist/server/swagger/index.js.map +1 -1
  283. package/dist/sms/index.d.ts +3 -5
  284. package/dist/sms/index.d.ts.map +1 -1
  285. package/dist/sms/index.js.map +1 -1
  286. package/dist/system/index.browser.js.map +1 -1
  287. package/dist/system/index.d.ts +2 -4
  288. package/dist/system/index.d.ts.map +1 -1
  289. package/dist/system/index.js.map +1 -1
  290. package/dist/system/index.workerd.js.map +1 -1
  291. package/dist/topic/core/index.d.ts +4 -6
  292. package/dist/topic/core/index.d.ts.map +1 -1
  293. package/dist/topic/core/index.js.map +1 -1
  294. package/dist/topic/redis/index.d.ts +5 -8
  295. package/dist/topic/redis/index.d.ts.map +1 -1
  296. package/dist/topic/redis/index.js.map +1 -1
  297. package/package.json +45 -22
  298. package/src/api/audits/__tests__/AuditService.spec.ts +18 -110
  299. package/src/api/audits/controllers/AdminAuditController.ts +14 -0
  300. package/src/api/audits/services/AuditService.ts +21 -88
  301. package/src/api/files/__tests__/FileService.spec.ts +207 -2
  302. package/src/api/files/index.ts +3 -0
  303. package/src/api/files/schemas/fileCreatorSummarySchema.ts +22 -0
  304. package/src/api/files/schemas/fileResourceSchema.ts +10 -1
  305. package/src/api/files/services/FileService.ts +170 -72
  306. package/src/api/jobs/__tests__/$job.spec.ts +24 -1
  307. package/src/api/jobs/index.ts +4 -3
  308. package/src/api/jobs/primitives/$job.ts +7 -3
  309. package/src/api/jobs/providers/DirectJobDispatcher.ts +17 -36
  310. package/src/api/jobs/providers/JobProvider.ts +53 -24
  311. package/src/api/jobs/schemas/jobConfigAtom.ts +1 -1
  312. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +4 -1
  313. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +3 -1
  314. package/src/api/parameters/__tests__/$parameter.spec.ts +19 -2
  315. package/src/api/parameters/audits/ParameterAudits.ts +17 -0
  316. package/src/api/parameters/controllers/AdminParameterController.ts +95 -19
  317. package/src/api/parameters/index.ts +3 -0
  318. package/src/api/parameters/schemas/activateParameterBodySchema.ts +3 -3
  319. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +3 -2
  320. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +25 -0
  321. package/src/api/parameters/schemas/parameterResponseSchema.ts +5 -0
  322. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +4 -2
  323. package/src/api/parameters/services/ParameterProvider.ts +69 -6
  324. package/src/api/subscriptions/jobs/SubscriptionJobs.ts +1 -1
  325. package/src/api/users/__tests__/AdminSessionController.spec.ts +37 -0
  326. package/src/api/users/audits/SessionAudits.ts +33 -0
  327. package/src/api/users/audits/UserAudits.ts +19 -43
  328. package/src/api/users/controllers/AdminUserController.ts +66 -1
  329. package/src/api/users/entities/sessions.ts +6 -0
  330. package/src/api/users/entities/users.ts +2 -0
  331. package/src/api/users/index.ts +9 -1
  332. package/src/api/users/primitives/$realm.ts +3 -0
  333. package/src/api/users/schemas/sessionResourceSchema.ts +16 -0
  334. package/src/api/users/schemas/updateUserSchema.ts +1 -8
  335. package/src/api/users/schemas/userQuerySchema.ts +7 -0
  336. package/src/api/users/services/CredentialService.ts +15 -6
  337. package/src/api/users/services/IdentityService.ts +2 -1
  338. package/src/api/users/services/RegistrationService.ts +2 -1
  339. package/src/api/users/services/SessionCrudService.ts +19 -2
  340. package/src/api/users/services/SessionService.ts +39 -19
  341. package/src/api/users/services/UserService.ts +106 -8
  342. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +96 -0
  343. package/src/background/index.ts +37 -0
  344. package/src/background/index.workerd.ts +28 -0
  345. package/src/background/providers/BackgroundTaskProvider.ts +70 -0
  346. package/src/background/providers/WorkerdBackgroundTaskProvider.ts +43 -0
  347. package/src/bucket/__tests__/$bucket.spec.ts +18 -0
  348. package/src/bucket/__tests__/LocalFileStorageProvider.spec.ts +5 -0
  349. package/src/bucket/__tests__/MemoryFileStorageProvider.spec.ts +5 -0
  350. package/src/bucket/__tests__/NodeS3BucketProvider.spec.ts +23 -4
  351. package/src/bucket/__tests__/shared.ts +30 -0
  352. package/src/bucket/index.ts +5 -5
  353. package/src/bucket/index.workerd.ts +11 -4
  354. package/src/bucket/primitives/$bucket.ts +27 -0
  355. package/src/bucket/providers/FileStorageProvider.ts +13 -0
  356. package/src/bucket/providers/LocalFileStorageProvider.ts +17 -1
  357. package/src/bucket/providers/MemoryFileStorageProvider.ts +7 -0
  358. package/src/bucket/providers/{CloudflareR2Provider.ts → R2FileStorageProvider.ts} +10 -1
  359. package/src/bucket/providers/{NodeS3BucketProvider.ts → S3FileStorageProvider.ts} +27 -5
  360. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +25 -1
  361. package/src/cli/core/__tests__/init.spec.ts +0 -219
  362. package/src/cli/core/commands/__tests__/BuildCommand.spec.ts +43 -0
  363. package/src/cli/core/commands/build.ts +108 -30
  364. package/src/cli/core/commands/init.ts +0 -12
  365. package/src/cli/core/commands/pack.ts +133 -0
  366. package/src/cli/core/index.ts +3 -0
  367. package/src/cli/core/providers/ViteDevServerProvider.ts +40 -16
  368. package/src/cli/core/services/PackageManagerUtils.ts +0 -16
  369. package/src/cli/core/services/ProjectScaffolder.ts +29 -291
  370. package/src/cli/core/tasks/BuildCloudflareTask.ts +353 -47
  371. package/src/cli/core/tasks/BuildDockerTask.ts +33 -3
  372. package/src/cli/core/tasks/BuildTask.ts +34 -0
  373. package/src/cli/core/templates/apiIndexTs.ts +1 -22
  374. package/src/cli/core/templates/mainCss.ts +0 -1
  375. package/src/cli/core/templates/webAppRouterTs.ts +0 -99
  376. package/src/cli/core/templates/webIndexTs.ts +1 -22
  377. package/src/cli/platform/__tests__/SecretsCommand.spec.ts +5 -3
  378. package/src/cli/platform/commands/SecretsCommand.ts +8 -6
  379. package/src/cli/platform/commands/platform.ts +192 -46
  380. package/src/cli/platform/index.ts +12 -52
  381. package/src/cli/{platform → platform-lib}/__tests__/CloudflareAdapter.spec.ts +426 -169
  382. package/src/cli/{platform → platform-lib}/__tests__/NamingService.spec.ts +91 -4
  383. package/src/cli/{platform → platform-lib}/__tests__/VercelAdapter.spec.ts +56 -85
  384. package/src/cli/{platform → platform-lib}/adapters/CloudflareAdapter.ts +402 -165
  385. package/src/cli/{platform → platform-lib}/adapters/PlatformAdapter.ts +62 -35
  386. package/src/cli/{platform → platform-lib}/adapters/VercelAdapter.ts +6 -10
  387. package/src/cli/{platform → platform-lib}/atoms/platformOptions.ts +34 -1
  388. package/src/cli/platform-lib/index.ts +67 -0
  389. package/src/cli/platform-lib/services/NamingService.ts +136 -0
  390. package/src/cli/{platform → platform-lib}/services/PlatformInspector.ts +60 -13
  391. package/src/cli/{platform → platform-lib}/services/PlatformOrchestrator.ts +54 -43
  392. package/src/cli/{platform → platform-lib}/services/WranglerApi.ts +4 -2
  393. package/src/command/__tests__/Runner.spec.ts +20 -0
  394. package/src/command/helpers/EnvUtils.ts +19 -3
  395. package/src/command/helpers/Runner.ts +12 -2
  396. package/src/command/providers/CliProvider.ts +34 -1
  397. package/src/{containers → container}/core/__tests__/$container.spec.ts +5 -5
  398. package/src/{containers → container}/core/index.ts +4 -4
  399. package/src/{containers → container}/core/index.workerd.ts +19 -3
  400. package/src/{containers → container}/core/primitives/$container.ts +1 -1
  401. package/src/{containers → container}/core/providers/CloudflareContainerProvider.ts +17 -19
  402. package/src/{containers → container}/core/providers/ContainerProvider.ts +16 -2
  403. package/src/{containers → container}/core/providers/MockContainerProvider.ts +1 -1
  404. package/src/core/Alepha.ts +49 -1
  405. package/src/core/__tests__/$env.spec.ts +42 -0
  406. package/src/core/__tests__/dump.spec.ts +47 -0
  407. package/src/email/cloudflare/__tests__/CloudflareEmailProvider.spec.ts +42 -10
  408. package/src/email/cloudflare/index.ts +14 -5
  409. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +54 -9
  410. package/src/logger/__tests__/Logger.spec.ts +55 -0
  411. package/src/logger/index.ts +13 -0
  412. package/src/logger/services/Logger.ts +31 -1
  413. package/src/orm/__tests__/orm-showcase-tests.ts +27 -0
  414. package/src/orm/__tests__/orm-showcase.spec.ts +12 -0
  415. package/src/orm/core/interfaces/PgQuery.ts +4 -1
  416. package/src/orm/core/services/Repository.ts +27 -11
  417. package/src/react/auth/hooks/useAuth.ts +10 -5
  418. package/src/react/core/__tests__/useQuery.browser.spec.tsx +25 -0
  419. package/src/react/core/hooks/useAction.ts +14 -3
  420. package/src/react/core/hooks/useQuery.ts +24 -4
  421. package/src/react/i18n/components/Translate.tsx +47 -0
  422. package/src/react/i18n/index.ts +2 -0
  423. package/src/react/intro/components/GettingStartedAdminSlide.tsx +2 -2
  424. package/src/react/router/__tests__/$page.spec.tsx +3 -2
  425. package/src/react/router/__tests__/page-can.spec.ts +18 -13
  426. package/src/react/router/hooks/useQueryParams.ts +114 -14
  427. package/src/react/router/primitives/$page.ts +85 -4
  428. package/src/react/router/providers/ReactBrowserRouterProvider.ts +3 -7
  429. package/src/react/router/providers/ReactServerProvider.ts +4 -13
  430. package/src/react/ui/services/SchemaControl.ts +3 -4
  431. package/src/server/core/providers/ServerMultipartProvider.ts +19 -0
  432. package/src/server/links/providers/LinkProvider.ts +10 -0
  433. package/dist/containers/core/index.d.ts.map +0 -1
  434. package/dist/containers/core/index.js.map +0 -1
  435. package/dist/containers/core/index.workerd.js.map +0 -1
  436. package/src/cli/core/templates/componentsJsonTs.ts +0 -39
  437. package/src/cli/core/templates/saasAdminLayoutTsx.ts +0 -77
  438. package/src/cli/core/templates/saasAdminPagesTsx.ts +0 -26
  439. package/src/cli/core/templates/saasAuthLayoutTsx.ts +0 -22
  440. package/src/cli/core/templates/saasAuthPagesTsx.ts +0 -62
  441. package/src/cli/core/templates/saasRealmProviderTs.ts +0 -52
  442. package/src/cli/platform/services/NamingService.ts +0 -54
  443. /package/dist/orm/core/{chunk-o8xxKEmq.js → chunk-B4FMCO8f.js} +0 -0
  444. /package/dist/react/testing/{chunk-6Ep1yQYe.js → chunk-BpyX8vjI.js} +0 -0
  445. /package/src/cli/{platform → platform-lib}/__tests__/GitHubSecretStore.spec.ts +0 -0
  446. /package/src/cli/{platform → platform-lib}/__tests__/PlatformCacheProvider.spec.ts +0 -0
  447. /package/src/cli/{platform → platform-lib}/__tests__/PlatformInspector.spec.ts +0 -0
  448. /package/src/cli/{platform → platform-lib}/__tests__/PlatformOrchestrator.spec.ts +0 -0
  449. /package/src/cli/{platform → platform-lib}/__tests__/SecretFilterService.spec.ts +0 -0
  450. /package/src/cli/{platform → platform-lib}/__tests__/detectResources.spec.ts +0 -0
  451. /package/src/cli/{platform → platform-lib}/providers/GitHubSecretStore.ts +0 -0
  452. /package/src/cli/{platform → platform-lib}/providers/MemorySecretStore.ts +0 -0
  453. /package/src/cli/{platform → platform-lib}/providers/PlatformCacheProvider.ts +0 -0
  454. /package/src/cli/{platform → platform-lib}/providers/SecretStoreProvider.ts +0 -0
  455. /package/src/cli/{platform → platform-lib}/schemas/cloudflare.ts +0 -0
  456. /package/src/cli/{platform → platform-lib}/schemas/platform.ts +0 -0
  457. /package/src/cli/{platform → platform-lib}/schemas/vercel.ts +0 -0
  458. /package/src/cli/{platform → platform-lib}/services/CloudflareApi.ts +0 -0
  459. /package/src/cli/{platform → platform-lib}/services/SecretFilterService.ts +0 -0
  460. /package/src/cli/{platform → platform-lib}/services/VercelApi.ts +0 -0
  461. /package/src/cli/{platform → platform-lib}/services/VercelCli.ts +0 -0
  462. /package/src/{containers → container}/core/interfaces/ContainerOptions.ts +0 -0
  463. /package/src/{containers → container}/core/providers/NodeContainerProvider.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cli/vendor/atoms/vendorOptions.ts","../../../src/cli/vendor/services/VendorService.ts","../../../src/cli/vendor/commands/VendorCommand.ts","../../../src/cli/vendor/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cli/vendor/atoms/vendorOptions.ts","../../../src/cli/vendor/services/VendorService.ts","../../../src/cli/vendor/commands/VendorCommand.ts","../../../src/cli/vendor/index.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/cli/vendor/atoms/vendorOptions.ts","../../../src/cli/vendor/services/VendorService.ts","../../../src/cli/vendor/commands/VendorCommand.ts","../../../src/cli/vendor/index.ts"],"sourcesContent":["import { $atom, type Static, t } from \"alepha\";\n\n/**\n * Vendor configuration atom.\n *\n * Filled from the `vendor` section of `alepha.config.ts`.\n * Read by `VendorCommand` to resolve remote, branch, and packages.\n */\nexport const vendorOptions = $atom({\n name: \"alepha.cli.vendor.options\",\n description: \"Vendor synchronization configuration\",\n schema: t.optional(\n t.object({\n /**\n * Git remote URL.\n *\n * @default \"git@github.com:feunard/alepha.git\"\n */\n remote: t.optional(t.text()),\n\n /**\n * Branch to sync from.\n *\n * @default \"main\"\n */\n branch: t.optional(t.text()),\n\n /**\n * Parent directory holding the vendored packages in the local project.\n * Relative to the project root. Also where the `vendor.json` lock file\n * is written. The remote is always expected to lay its packages out\n * under `packages/`.\n *\n * @default \".vendor\"\n */\n dir: t.optional(t.text()),\n\n /**\n * Package directory names under `dir` to sync.\n *\n * @example [\"alepha\", \"@alepha/payments-stripe\"]\n */\n packages: t.array(t.text()),\n }),\n ),\n});\n\n/**\n * Type for vendor options.\n */\nexport type VendorOptions = Static<typeof vendorOptions.schema>;\n","import { $inject } from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { FileSystemProvider, ShellProvider } from \"alepha/system\";\n\n/**\n * Parent directory of vendored packages on the remote. Hardcoded because the\n * Alepha monorepo lays its packages out under `packages/` and the vendor\n * tool only targets that layout.\n */\nconst REMOTE_DIR = \"packages\";\n\n/**\n * Options for syncing vendored packages from a remote repository.\n */\nexport interface VendorSyncOptions {\n root: string;\n remote: string;\n branch: string;\n dir: string;\n packages: string[];\n force?: boolean;\n}\n\n/**\n * Result of a vendor sync operation.\n */\nexport interface VendorSyncResult {\n synced: string[];\n errors: string[];\n aborted?: VendorDiffResult;\n}\n\n/**\n * Options for diffing vendored packages against a remote repository.\n */\nexport interface VendorDiffOptions {\n root: string;\n remote: string;\n branch: string;\n dir: string;\n packages: string[];\n}\n\n/**\n * A single line change within a modified file.\n */\nexport interface VendorLineDiff {\n line: number;\n type: \"added\" | \"removed\";\n text: string;\n}\n\n/**\n * A modified file with its line-level changes.\n */\nexport interface VendorFileDiff {\n file: string;\n changes: VendorLineDiff[];\n}\n\n/**\n * Diff result for a single vendored package.\n */\nexport interface VendorPackageDiff {\n name: string;\n added: string[];\n modified: VendorFileDiff[];\n removed: string[];\n}\n\n/**\n * Result of a vendor diff operation.\n */\nexport interface VendorDiffResult {\n packages: VendorPackageDiff[];\n totalChanges: number;\n}\n\n/**\n * Shape of the `<dir>/vendor.json` lock file (where `<dir>` is the\n * configured vendor directory, defaulting to `.vendor`).\n */\nexport interface VendorLock {\n /**\n * Git remote URL the vendored sources were synced from. Recorded so any\n * downstream tool (AI agent, CI script) can re-fetch without needing the\n * project's `alepha.config.ts`.\n */\n remote: string;\n /**\n * Commit hash of the synced sources.\n */\n commit: string;\n}\n\n/**\n * Handles syncing and diffing vendored packages from a remote git repository.\n */\nexport class VendorService {\n protected readonly log = $logger();\n protected readonly shell = $inject(ShellProvider);\n protected readonly fs = $inject(FileSystemProvider);\n\n /**\n * Sync vendored packages from a remote repository.\n *\n * Without `force`: checks for local modifications by comparing the local\n * copy against the last-synced commit (stored in `<dir>/vendor.json`).\n * If modifications are found, aborts without touching local files.\n *\n * With `force` (or first sync): replaces local copies unconditionally.\n */\n async sync(options: VendorSyncOptions): Promise<VendorSyncResult> {\n const synced: string[] = [];\n const errors: string[] = [];\n\n if (!options.force) {\n const lock = await this.readLock(options.root, options.dir);\n\n if (lock) {\n let baselineDir: string | undefined;\n try {\n baselineDir = await this.cloneAtCommit(options.remote, lock.commit);\n const diffResult = await this.diffFromClone(\n options.root,\n baselineDir,\n options.dir,\n options.packages,\n );\n\n if (diffResult.totalChanges > 0) {\n return { synced: [], errors: [], aborted: diffResult };\n }\n } finally {\n if (baselineDir) {\n await this.fs.rm(baselineDir, { recursive: true, force: true });\n }\n }\n }\n }\n\n let tmpDir: string | undefined;\n\n try {\n tmpDir = await this.cloneRemote(options.remote, options.branch);\n\n for (const pkg of options.packages) {\n const remotePkgDir = this.fs.join(tmpDir, REMOTE_DIR, pkg);\n const localPkgDir = this.fs.join(options.root, options.dir, pkg);\n\n const remoteExists = await this.fs.exists(remotePkgDir);\n if (!remoteExists) {\n errors.push(`Package \"${pkg}\" not found in remote`);\n continue;\n }\n\n this.log.debug(`Syncing package: ${pkg}`);\n\n await this.fs.rm(localPkgDir, { recursive: true, force: true });\n await this.fs.cp(remotePkgDir, localPkgDir, { recursive: true });\n await this.removeIgnoredFiles(localPkgDir);\n\n synced.push(pkg);\n }\n\n const commit = await this.getCommitHash(tmpDir);\n await this.writeLock(options.root, options.dir, {\n remote: options.remote,\n commit,\n });\n } finally {\n if (tmpDir) {\n await this.fs.rm(tmpDir, { recursive: true, force: true });\n }\n }\n\n return { synced, errors };\n }\n\n /**\n * Diff vendored packages against the last-synced commit.\n *\n * Reads the commit hash from `<dir>/vendor.json`, clones at that commit,\n * and compares local files to detect modifications since last sync.\n */\n async diff(options: VendorDiffOptions): Promise<VendorDiffResult> {\n const lock = await this.readLock(options.root, options.dir);\n if (!lock) {\n return { packages: [], totalChanges: 0 };\n }\n\n let tmpDir: string | undefined;\n\n try {\n tmpDir = await this.cloneAtCommit(options.remote, lock.commit);\n return await this.diffFromClone(\n options.root,\n tmpDir,\n options.dir,\n options.packages,\n );\n } finally {\n if (tmpDir) {\n await this.fs.rm(tmpDir, { recursive: true, force: true });\n }\n }\n }\n\n /**\n * Diff local packages against an already-cloned remote.\n */\n protected async diffFromClone(\n root: string,\n tmpDir: string,\n dir: string,\n packages: string[],\n ): Promise<VendorDiffResult> {\n const results: VendorPackageDiff[] = [];\n let totalChanges = 0;\n\n for (const pkg of packages) {\n const remotePkgDir = this.fs.join(tmpDir, REMOTE_DIR, pkg);\n const localPkgDir = this.fs.join(root, dir, pkg);\n\n const remoteExists = await this.fs.exists(remotePkgDir);\n const localExists = await this.fs.exists(localPkgDir);\n\n if (!remoteExists && !localExists) {\n results.push({ name: pkg, added: [], modified: [], removed: [] });\n continue;\n }\n\n if (!remoteExists) {\n // No baseline = everything local was added by user\n const localFiles = await this.fs.ls(localPkgDir, { recursive: true });\n results.push({\n name: pkg,\n added: localFiles,\n modified: [],\n removed: [],\n });\n totalChanges += localFiles.length;\n continue;\n }\n\n if (!localExists) {\n // Baseline exists but local doesn't = user deleted everything\n const remoteFiles = await this.fs.ls(remotePkgDir, { recursive: true });\n results.push({\n name: pkg,\n added: [],\n modified: [],\n removed: remoteFiles,\n });\n totalChanges += remoteFiles.length;\n continue;\n }\n\n const result = await this.diffDirectories(localPkgDir, remotePkgDir);\n const pkgChanges =\n result.added.length + result.modified.length + result.removed.length;\n totalChanges += pkgChanges;\n\n results.push({\n name: pkg,\n added: result.added,\n modified: result.modified,\n removed: result.removed,\n });\n }\n\n return { packages: results, totalChanges };\n }\n\n /**\n * Remove test files and ignored directories from a synced package.\n */\n protected async removeIgnoredFiles(pkgDir: string): Promise<void> {\n const allFiles = await this.fs.ls(pkgDir, { recursive: true });\n\n // Remove ignored files\n for (const file of allFiles) {\n if (\n file.endsWith(\".spec.ts\") ||\n file.endsWith(\".spec.tsx\") ||\n file === \"LICENSE\" ||\n file === \"tsdown.config.ts\"\n ) {\n await this.fs.rm(this.fs.join(pkgDir, file), { force: true });\n }\n }\n\n // Remove ignored directories (find all occurrences at any depth)\n for (const file of allFiles) {\n for (const ignored of this.ignoredPaths) {\n if (\n file === ignored ||\n file.startsWith(`${ignored}/`) ||\n file.includes(`/${ignored}/`) ||\n file.endsWith(`/${ignored}`)\n ) {\n // Extract the path to the ignored directory itself\n const idx = file.indexOf(ignored);\n const dirPath = this.fs.join(\n pkgDir,\n file.substring(0, idx + ignored.length),\n );\n await this.fs.rm(dirPath, { recursive: true, force: true });\n }\n }\n }\n }\n\n /**\n * Clone a remote repository into a temporary directory.\n */\n protected async cloneRemote(remote: string, branch: string): Promise<string> {\n const tmpDir = this.fs.join(\n process.env.TMPDIR || \"/tmp\",\n `.alepha-vendor-${Date.now()}`,\n );\n\n this.log.debug(`Cloning ${remote}#${branch} into ${tmpDir}`);\n\n const output = await this.shell.run(\n `git clone --depth 1 --branch ${branch} --filter=blob:none ${remote} ${tmpDir}`,\n { capture: true },\n );\n\n if (output) {\n this.log.debug(output);\n }\n\n return tmpDir;\n }\n\n /**\n * Clone a remote repository at a specific commit hash.\n */\n protected async cloneAtCommit(\n remote: string,\n commit: string,\n ): Promise<string> {\n const tmpDir = this.fs.join(\n process.env.TMPDIR || \"/tmp\",\n `.alepha-vendor-${Date.now()}`,\n );\n\n this.log.debug(`Cloning ${remote}@${commit} into ${tmpDir}`);\n\n await this.shell.run(`git init ${tmpDir}`, { capture: true });\n await this.shell.run(`git -C ${tmpDir} remote add origin ${remote}`, {\n capture: true,\n });\n await this.shell.run(`git -C ${tmpDir} fetch --depth 1 origin ${commit}`, {\n capture: true,\n });\n await this.shell.run(`git -C ${tmpDir} checkout FETCH_HEAD`, {\n capture: true,\n });\n\n return tmpDir;\n }\n\n /**\n * Get the HEAD commit hash from a cloned repository.\n */\n protected async getCommitHash(repoDir: string): Promise<string> {\n const hash = await this.shell.run(`git -C ${repoDir} rev-parse HEAD`, {\n capture: true,\n });\n return hash.trim();\n }\n\n /**\n * Read the vendor lock file at `<root>/<dir>/vendor.json`.\n */\n protected async readLock(\n root: string,\n dir: string,\n ): Promise<VendorLock | undefined> {\n const lockPath = this.fs.join(root, dir, \"vendor.json\");\n const exists = await this.fs.exists(lockPath);\n if (!exists) {\n return undefined;\n }\n const content = await this.fs.readFile(lockPath);\n return JSON.parse(content.toString());\n }\n\n /**\n * Write the vendor lock file to `<root>/<dir>/vendor.json`.\n */\n protected async writeLock(\n root: string,\n dir: string,\n lock: VendorLock,\n ): Promise<void> {\n const vendorDir = this.fs.join(root, dir);\n await this.fs.mkdir(vendorDir, { recursive: true });\n await this.fs.writeFile(\n this.fs.join(vendorDir, \"vendor.json\"),\n JSON.stringify(lock, null, 2),\n );\n }\n\n /**\n * Directories to ignore during diff comparisons.\n */\n protected readonly ignoredPaths = [\n \"__tests__\",\n \"assets/swagger-ui\",\n \"node_modules\",\n \"dist\",\n ];\n\n /**\n * Check if a file path should be ignored during diff.\n */\n protected isIgnored(filePath: string): boolean {\n if (\n filePath.endsWith(\".spec.ts\") ||\n filePath.endsWith(\".spec.tsx\") ||\n filePath === \"LICENSE\" ||\n filePath === \"tsdown.config.ts\"\n ) {\n return true;\n }\n return this.ignoredPaths.some(\n (p) =>\n filePath === p ||\n filePath.startsWith(`${p}/`) ||\n filePath.includes(`/${p}/`) ||\n filePath.endsWith(`/${p}`),\n );\n }\n\n /**\n * Recursively compare two directories and return the differences.\n */\n protected async diffDirectories(\n localDir: string,\n remoteDir: string,\n ): Promise<{\n added: string[];\n modified: VendorFileDiff[];\n removed: string[];\n }> {\n const added: string[] = [];\n const modified: VendorFileDiff[] = [];\n const removed: string[] = [];\n\n const [localFiles, remoteFiles] = await Promise.all([\n this.fs.ls(localDir, { recursive: true }),\n this.fs.ls(remoteDir, { recursive: true }),\n ]);\n\n const filteredLocal = localFiles.filter((f) => !this.isIgnored(f));\n const filteredRemote = remoteFiles.filter((f) => !this.isIgnored(f));\n\n const localSet = new Set(filteredLocal);\n const remoteSet = new Set(filteredRemote);\n\n // Files in baseline but not local = user deleted them\n for (const file of filteredRemote) {\n if (!localSet.has(file)) {\n removed.push(file);\n continue;\n }\n\n try {\n const [localContent, remoteContent] = await Promise.all([\n this.fs.readFile(this.fs.join(localDir, file)),\n this.fs.readFile(this.fs.join(remoteDir, file)),\n ]);\n\n if (!localContent.equals(remoteContent)) {\n const changes = this.computeLineDiff(\n remoteContent.toString(),\n localContent.toString(),\n );\n modified.push({ file, changes });\n }\n } catch {\n // Skip directories and unreadable entries\n }\n }\n\n // Files in local but not baseline = user added them\n for (const file of filteredLocal) {\n if (!remoteSet.has(file)) {\n added.push(file);\n }\n }\n\n return { added, modified, removed };\n }\n\n /**\n * Compute line-level differences between two file contents.\n *\n * Uses a longest-common-subsequence algorithm to produce minimal\n * added/removed line changes with accurate line numbers.\n */\n protected computeLineDiff(baseline: string, local: string): VendorLineDiff[] {\n const baseLines = baseline.split(\"\\n\");\n const localLines = local.split(\"\\n\");\n const lcs = this.longestCommonSubsequence(baseLines, localLines);\n const changes: VendorLineDiff[] = [];\n\n let bi = 0;\n let li = 0;\n let ci = 0;\n\n while (bi < baseLines.length || li < localLines.length) {\n if (ci < lcs.length && bi < baseLines.length && li < localLines.length) {\n if (baseLines[bi] === lcs[ci] && localLines[li] === lcs[ci]) {\n // Line is unchanged\n bi++;\n li++;\n ci++;\n } else if (baseLines[bi] !== lcs[ci]) {\n changes.push({ line: bi + 1, type: \"removed\", text: baseLines[bi] });\n bi++;\n } else {\n changes.push({ line: li + 1, type: \"added\", text: localLines[li] });\n li++;\n }\n } else if (bi < baseLines.length) {\n changes.push({ line: bi + 1, type: \"removed\", text: baseLines[bi] });\n bi++;\n } else {\n changes.push({ line: li + 1, type: \"added\", text: localLines[li] });\n li++;\n }\n }\n\n return changes;\n }\n\n /**\n * Compute the longest common subsequence of two string arrays.\n */\n protected longestCommonSubsequence(a: string[], b: string[]): string[] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n Array(n + 1).fill(0),\n );\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n dp[i][j] =\n a[i - 1] === b[j - 1]\n ? dp[i - 1][j - 1] + 1\n : Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n\n const result: string[] = [];\n let i = m;\n let j = n;\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n result.unshift(a[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] > dp[i][j - 1]) {\n i--;\n } else {\n j--;\n }\n }\n\n return result;\n }\n}\n","import { $inject, $state, AlephaError, t } from \"alepha\";\nimport { PackageManagerUtils } from \"alepha/cli\";\nimport { $command } from \"alepha/command\";\nimport { $logger, ConsoleColorProvider } from \"alepha/logger\";\nimport { vendorOptions } from \"../atoms/vendorOptions.ts\";\nimport type {\n VendorDiffResult,\n VendorPackageDiff,\n VendorSyncResult,\n} from \"../services/VendorService.ts\";\nimport { VendorService } from \"../services/VendorService.ts\";\n\n/**\n * Default remote when none is configured. The HTTPS URL is used so anyone\n * (CI runners, AI agents, contributors without SSH keys) can clone without\n * extra setup.\n */\nconst DEFAULT_REMOTE = \"https://github.com/feunard/alepha\";\n\nexport class VendorCommand {\n protected readonly log = $logger();\n protected readonly options = $state(vendorOptions);\n protected readonly vendorService = $inject(VendorService);\n protected readonly color = $inject(ConsoleColorProvider);\n protected readonly pm = $inject(PackageManagerUtils);\n\n /**\n * Ensure vendor config is present and return resolved options.\n */\n protected resolveOptions() {\n if (!this.options) {\n throw new AlephaError(\n 'Missing vendor configuration. Add a \"vendor\" section to alepha.config.ts.',\n );\n }\n return {\n remote: this.options.remote ?? DEFAULT_REMOTE,\n branch: this.options.branch ?? \"main\",\n dir: this.options.dir ?? \".vendor\",\n packages: this.options.packages,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // alepha vendor sync\n // ─────────────────────────────────────────────────────────────────────────\n\n protected readonly syncFlags = t.object({\n force: t.optional(\n t.boolean({\n aliases: [\"f\"],\n description: \"Skip local modification check\",\n }),\n ),\n remote: t.optional(\n t.text({\n description:\n \"Override the configured remote for this invocation. Accepts any git-clone URL, including local paths (`file:///abs/path/to/alepha`). Useful for CI canaries that need to sync against a local checkout instead of the published repo.\",\n }),\n ),\n });\n\n protected readonly sync = $command({\n name: \"sync\",\n description: \"Replace local packages with remote source\",\n flags: this.syncFlags,\n handler: async ({ flags, root, run }) => {\n const opts = this.resolveOptions();\n const remote = flags.remote ?? opts.remote;\n const c = this.color;\n\n let result: VendorSyncResult = { synced: [], errors: [] };\n\n await run({\n name: `Syncing from ${opts.branch}`,\n handler: async () => {\n result = await this.vendorService.sync({\n root,\n remote,\n branch: opts.branch,\n dir: opts.dir,\n packages: opts.packages,\n force: flags.force,\n });\n },\n });\n\n if (result.aborted) {\n run.end();\n\n process.stdout.write(\n `\\nLocal modifications detected. Use ${c.set(\"CYAN\", \"--force\")} to overwrite.\\n`,\n );\n\n for (const pkg of result.aborted.packages) {\n this.printPackageDiff(pkg);\n }\n\n process.stdout.write(\"\\n\");\n return;\n }\n\n if (result.synced.length > 0) {\n const pmName = await this.pm.getPackageManager(root);\n await run(`${pmName} install`, { root });\n }\n\n run.end();\n\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n process.stdout.write(`${c.set(\"RED\", \" error\")} ${error}\\n`);\n }\n }\n\n if (result.synced.length > 0) {\n process.stdout.write(\n `\\nSynced ${c.set(\"CYAN\", String(result.synced.length))} ${result.synced.length === 1 ? \"package\" : \"packages\"} from ${c.set(\"CYAN\", opts.branch)}\\n`,\n );\n for (const pkg of result.synced) {\n process.stdout.write(` ${c.set(\"GREEN\", \"\\u2713\")} ${pkg}\\n`);\n }\n }\n\n process.stdout.write(\"\\n\");\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────\n // alepha vendor diff\n // ─────────────────────────────────────────────────────────────────────────\n\n protected readonly diff = $command({\n name: \"diff\",\n description: \"Compare local packages against remote\",\n handler: async ({ root, run }) => {\n const opts = this.resolveOptions();\n\n let result: VendorDiffResult = { packages: [], totalChanges: 0 };\n\n await run({\n name: `Cloning ${opts.remote} at ${opts.branch}`,\n handler: async () => {\n result = await this.vendorService.diff({\n root,\n remote: opts.remote,\n branch: opts.branch,\n dir: opts.dir,\n packages: opts.packages,\n });\n },\n });\n\n run.end();\n\n if (result.totalChanges === 0) {\n process.stdout.write(\"\\nNo changes\\n\\n\");\n return;\n }\n\n for (const pkg of result.packages) {\n this.printPackageDiff(pkg);\n }\n\n process.stdout.write(\"\\n\");\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────\n // Helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n protected printPackageDiff(pkg: VendorPackageDiff) {\n const c = this.color;\n const count = pkg.added.length + pkg.modified.length + pkg.removed.length;\n\n if (count === 0) {\n process.stdout.write(`\\n${c.set(\"CYAN\", pkg.name)}: no changes\\n`);\n return;\n }\n\n process.stdout.write(\n `\\n${c.set(\"CYAN\", pkg.name)}: ${count} ${count === 1 ? \"file differs\" : \"files differ\"}\\n`,\n );\n\n for (const file of pkg.added) {\n process.stdout.write(` ${c.set(\"GREEN\", \"A\")} ${file}\\n`);\n }\n\n for (const fileDiff of pkg.modified) {\n process.stdout.write(` ${c.set(\"ORANGE\", \"M\")} ${fileDiff.file}\\n`);\n for (const change of fileDiff.changes) {\n const prefix = change.type === \"removed\" ? \"-\" : \"+\";\n const color = change.type === \"removed\" ? \"RED\" : \"GREEN\";\n const lineNum = `L${change.line}`;\n process.stdout.write(\n ` ${c.set(\"DIM\", lineNum.padEnd(5))} ${c.set(color, `${prefix} ${change.text}`)}\\n`,\n );\n }\n }\n\n for (const file of pkg.removed) {\n process.stdout.write(` ${c.set(\"RED\", \"D\")} ${file}\\n`);\n }\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Parent command\n // ─────────────────────────────────────────────────────────────────────────\n\n public readonly vendor = $command({\n name: \"vendor\",\n description: \"Vendor Alepha packages into the project\",\n children: [this.sync, this.diff],\n handler: async ({ help }) => {\n help();\n },\n });\n}\n","import { $context, $module } from \"alepha\";\nimport { type VendorOptions, vendorOptions } from \"./atoms/vendorOptions.ts\";\nimport { VendorCommand } from \"./commands/VendorCommand.ts\";\nimport { VendorService } from \"./services/VendorService.ts\";\n\n// ---------------------------------------------------------------------------\n\n/**\n * CLI plugin for vendoring Alepha packages into external projects.\n *\n * Copies package source code from a git remote into the current project's\n * `packages/` directory. Useful for corporate projects that need a local\n * copy of Alepha for AI tooling, audits, documentation, or quick fixes.\n *\n * Commands:\n * - `alepha vendor sync` — replace local packages with remote source\n * - `alepha vendor diff` — compare local packages against remote HEAD\n *\n * Configuration in `alepha.config.ts`:\n *\n * ```typescript\n * import { vendor } from \"alepha/cli/vendor\";\n *\n * export default defineConfig({\n * plugins: [\n * vendor({\n * branch: \"main\",\n * packages: [\"alepha\", \"@alepha/payments-stripe\"],\n * }),\n * ],\n * });\n * ```\n */\nexport const AlephaCliVendorPlugin = $module({\n name: \"alepha.cli.plugins.vendor\",\n atoms: [vendorOptions],\n services: [VendorCommand, VendorService],\n});\n\nexport const vendor = (options: VendorOptions) => {\n return () => {\n const { alepha } = $context();\n alepha.with(AlephaCliVendorPlugin).set(vendorOptions, options);\n };\n};\n\n// ---------------------------------------------------------------------------\n\nexport * from \"./atoms/vendorOptions.ts\";\nexport * from \"./commands/VendorCommand.ts\";\nexport * from \"./services/VendorService.ts\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/cli/vendor/atoms/vendorOptions.ts","../../../src/cli/vendor/services/VendorService.ts","../../../src/cli/vendor/commands/VendorCommand.ts","../../../src/cli/vendor/index.ts"],"sourcesContent":["import { $atom, type Static, t } from \"alepha\";\n\n/**\n * Vendor configuration atom.\n *\n * Filled from the `vendor` section of `alepha.config.ts`.\n * Read by `VendorCommand` to resolve remote, branch, and packages.\n */\nexport const vendorOptions = $atom({\n name: \"alepha.cli.vendor.options\",\n description: \"Vendor synchronization configuration\",\n schema: t.optional(\n t.object({\n /**\n * Git remote URL.\n *\n * @default \"git@github.com:feunard/alepha.git\"\n */\n remote: t.optional(t.text()),\n\n /**\n * Branch to sync from.\n *\n * @default \"main\"\n */\n branch: t.optional(t.text()),\n\n /**\n * Parent directory holding the vendored packages in the local project.\n * Relative to the project root. Also where the `vendor.json` lock file\n * is written. The remote is always expected to lay its packages out\n * under `packages/`.\n *\n * @default \".vendor\"\n */\n dir: t.optional(t.text()),\n\n /**\n * Package directory names under `dir` to sync.\n *\n * @example [\"alepha\", \"@alepha/payments-stripe\"]\n */\n packages: t.array(t.text()),\n }),\n ),\n});\n\n/**\n * Type for vendor options.\n */\nexport type VendorOptions = Static<typeof vendorOptions.schema>;\n","import { $inject } from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { FileSystemProvider, ShellProvider } from \"alepha/system\";\n\n/**\n * Parent directory of vendored packages on the remote. Hardcoded because the\n * Alepha monorepo lays its packages out under `packages/` and the vendor\n * tool only targets that layout.\n */\nconst REMOTE_DIR = \"packages\";\n\n/**\n * Options for syncing vendored packages from a remote repository.\n */\nexport interface VendorSyncOptions {\n root: string;\n remote: string;\n branch: string;\n dir: string;\n packages: string[];\n force?: boolean;\n}\n\n/**\n * Result of a vendor sync operation.\n */\nexport interface VendorSyncResult {\n synced: string[];\n errors: string[];\n aborted?: VendorDiffResult;\n}\n\n/**\n * Options for diffing vendored packages against a remote repository.\n */\nexport interface VendorDiffOptions {\n root: string;\n remote: string;\n branch: string;\n dir: string;\n packages: string[];\n}\n\n/**\n * A single line change within a modified file.\n */\nexport interface VendorLineDiff {\n line: number;\n type: \"added\" | \"removed\";\n text: string;\n}\n\n/**\n * A modified file with its line-level changes.\n */\nexport interface VendorFileDiff {\n file: string;\n changes: VendorLineDiff[];\n}\n\n/**\n * Diff result for a single vendored package.\n */\nexport interface VendorPackageDiff {\n name: string;\n added: string[];\n modified: VendorFileDiff[];\n removed: string[];\n}\n\n/**\n * Result of a vendor diff operation.\n */\nexport interface VendorDiffResult {\n packages: VendorPackageDiff[];\n totalChanges: number;\n}\n\n/**\n * Shape of the `<dir>/vendor.json` lock file (where `<dir>` is the\n * configured vendor directory, defaulting to `.vendor`).\n */\nexport interface VendorLock {\n /**\n * Git remote URL the vendored sources were synced from. Recorded so any\n * downstream tool (AI agent, CI script) can re-fetch without needing the\n * project's `alepha.config.ts`.\n */\n remote: string;\n /**\n * Commit hash of the synced sources.\n */\n commit: string;\n}\n\n/**\n * Handles syncing and diffing vendored packages from a remote git repository.\n */\nexport class VendorService {\n protected readonly log = $logger();\n protected readonly shell = $inject(ShellProvider);\n protected readonly fs = $inject(FileSystemProvider);\n\n /**\n * Sync vendored packages from a remote repository.\n *\n * Without `force`: checks for local modifications by comparing the local\n * copy against the last-synced commit (stored in `<dir>/vendor.json`).\n * If modifications are found, aborts without touching local files.\n *\n * With `force` (or first sync): replaces local copies unconditionally.\n */\n async sync(options: VendorSyncOptions): Promise<VendorSyncResult> {\n const synced: string[] = [];\n const errors: string[] = [];\n\n if (!options.force) {\n const lock = await this.readLock(options.root, options.dir);\n\n if (lock) {\n let baselineDir: string | undefined;\n try {\n baselineDir = await this.cloneAtCommit(options.remote, lock.commit);\n const diffResult = await this.diffFromClone(\n options.root,\n baselineDir,\n options.dir,\n options.packages,\n );\n\n if (diffResult.totalChanges > 0) {\n return { synced: [], errors: [], aborted: diffResult };\n }\n } finally {\n if (baselineDir) {\n await this.fs.rm(baselineDir, { recursive: true, force: true });\n }\n }\n }\n }\n\n let tmpDir: string | undefined;\n\n try {\n tmpDir = await this.cloneRemote(options.remote, options.branch);\n\n for (const pkg of options.packages) {\n const remotePkgDir = this.fs.join(tmpDir, REMOTE_DIR, pkg);\n const localPkgDir = this.fs.join(options.root, options.dir, pkg);\n\n const remoteExists = await this.fs.exists(remotePkgDir);\n if (!remoteExists) {\n errors.push(`Package \"${pkg}\" not found in remote`);\n continue;\n }\n\n this.log.debug(`Syncing package: ${pkg}`);\n\n await this.fs.rm(localPkgDir, { recursive: true, force: true });\n await this.fs.cp(remotePkgDir, localPkgDir, { recursive: true });\n await this.removeIgnoredFiles(localPkgDir);\n\n synced.push(pkg);\n }\n\n const commit = await this.getCommitHash(tmpDir);\n await this.writeLock(options.root, options.dir, {\n remote: options.remote,\n commit,\n });\n } finally {\n if (tmpDir) {\n await this.fs.rm(tmpDir, { recursive: true, force: true });\n }\n }\n\n return { synced, errors };\n }\n\n /**\n * Diff vendored packages against the last-synced commit.\n *\n * Reads the commit hash from `<dir>/vendor.json`, clones at that commit,\n * and compares local files to detect modifications since last sync.\n */\n async diff(options: VendorDiffOptions): Promise<VendorDiffResult> {\n const lock = await this.readLock(options.root, options.dir);\n if (!lock) {\n return { packages: [], totalChanges: 0 };\n }\n\n let tmpDir: string | undefined;\n\n try {\n tmpDir = await this.cloneAtCommit(options.remote, lock.commit);\n return await this.diffFromClone(\n options.root,\n tmpDir,\n options.dir,\n options.packages,\n );\n } finally {\n if (tmpDir) {\n await this.fs.rm(tmpDir, { recursive: true, force: true });\n }\n }\n }\n\n /**\n * Diff local packages against an already-cloned remote.\n */\n protected async diffFromClone(\n root: string,\n tmpDir: string,\n dir: string,\n packages: string[],\n ): Promise<VendorDiffResult> {\n const results: VendorPackageDiff[] = [];\n let totalChanges = 0;\n\n for (const pkg of packages) {\n const remotePkgDir = this.fs.join(tmpDir, REMOTE_DIR, pkg);\n const localPkgDir = this.fs.join(root, dir, pkg);\n\n const remoteExists = await this.fs.exists(remotePkgDir);\n const localExists = await this.fs.exists(localPkgDir);\n\n if (!remoteExists && !localExists) {\n results.push({ name: pkg, added: [], modified: [], removed: [] });\n continue;\n }\n\n if (!remoteExists) {\n // No baseline = everything local was added by user\n const localFiles = await this.fs.ls(localPkgDir, { recursive: true });\n results.push({\n name: pkg,\n added: localFiles,\n modified: [],\n removed: [],\n });\n totalChanges += localFiles.length;\n continue;\n }\n\n if (!localExists) {\n // Baseline exists but local doesn't = user deleted everything\n const remoteFiles = await this.fs.ls(remotePkgDir, { recursive: true });\n results.push({\n name: pkg,\n added: [],\n modified: [],\n removed: remoteFiles,\n });\n totalChanges += remoteFiles.length;\n continue;\n }\n\n const result = await this.diffDirectories(localPkgDir, remotePkgDir);\n const pkgChanges =\n result.added.length + result.modified.length + result.removed.length;\n totalChanges += pkgChanges;\n\n results.push({\n name: pkg,\n added: result.added,\n modified: result.modified,\n removed: result.removed,\n });\n }\n\n return { packages: results, totalChanges };\n }\n\n /**\n * Remove test files and ignored directories from a synced package.\n */\n protected async removeIgnoredFiles(pkgDir: string): Promise<void> {\n const allFiles = await this.fs.ls(pkgDir, { recursive: true });\n\n // Remove ignored files\n for (const file of allFiles) {\n if (\n file.endsWith(\".spec.ts\") ||\n file.endsWith(\".spec.tsx\") ||\n file === \"LICENSE\" ||\n file === \"tsdown.config.ts\"\n ) {\n await this.fs.rm(this.fs.join(pkgDir, file), { force: true });\n }\n }\n\n // Remove ignored directories (find all occurrences at any depth)\n for (const file of allFiles) {\n for (const ignored of this.ignoredPaths) {\n if (\n file === ignored ||\n file.startsWith(`${ignored}/`) ||\n file.includes(`/${ignored}/`) ||\n file.endsWith(`/${ignored}`)\n ) {\n // Extract the path to the ignored directory itself\n const idx = file.indexOf(ignored);\n const dirPath = this.fs.join(\n pkgDir,\n file.substring(0, idx + ignored.length),\n );\n await this.fs.rm(dirPath, { recursive: true, force: true });\n }\n }\n }\n }\n\n /**\n * Clone a remote repository into a temporary directory.\n */\n protected async cloneRemote(remote: string, branch: string): Promise<string> {\n const tmpDir = this.fs.join(\n process.env.TMPDIR || \"/tmp\",\n `.alepha-vendor-${Date.now()}`,\n );\n\n this.log.debug(`Cloning ${remote}#${branch} into ${tmpDir}`);\n\n const output = await this.shell.run(\n `git clone --depth 1 --branch ${branch} --filter=blob:none ${remote} ${tmpDir}`,\n { capture: true },\n );\n\n if (output) {\n this.log.debug(output);\n }\n\n return tmpDir;\n }\n\n /**\n * Clone a remote repository at a specific commit hash.\n */\n protected async cloneAtCommit(\n remote: string,\n commit: string,\n ): Promise<string> {\n const tmpDir = this.fs.join(\n process.env.TMPDIR || \"/tmp\",\n `.alepha-vendor-${Date.now()}`,\n );\n\n this.log.debug(`Cloning ${remote}@${commit} into ${tmpDir}`);\n\n await this.shell.run(`git init ${tmpDir}`, { capture: true });\n await this.shell.run(`git -C ${tmpDir} remote add origin ${remote}`, {\n capture: true,\n });\n await this.shell.run(`git -C ${tmpDir} fetch --depth 1 origin ${commit}`, {\n capture: true,\n });\n await this.shell.run(`git -C ${tmpDir} checkout FETCH_HEAD`, {\n capture: true,\n });\n\n return tmpDir;\n }\n\n /**\n * Get the HEAD commit hash from a cloned repository.\n */\n protected async getCommitHash(repoDir: string): Promise<string> {\n const hash = await this.shell.run(`git -C ${repoDir} rev-parse HEAD`, {\n capture: true,\n });\n return hash.trim();\n }\n\n /**\n * Read the vendor lock file at `<root>/<dir>/vendor.json`.\n */\n protected async readLock(\n root: string,\n dir: string,\n ): Promise<VendorLock | undefined> {\n const lockPath = this.fs.join(root, dir, \"vendor.json\");\n const exists = await this.fs.exists(lockPath);\n if (!exists) {\n return undefined;\n }\n const content = await this.fs.readFile(lockPath);\n return JSON.parse(content.toString());\n }\n\n /**\n * Write the vendor lock file to `<root>/<dir>/vendor.json`.\n */\n protected async writeLock(\n root: string,\n dir: string,\n lock: VendorLock,\n ): Promise<void> {\n const vendorDir = this.fs.join(root, dir);\n await this.fs.mkdir(vendorDir, { recursive: true });\n await this.fs.writeFile(\n this.fs.join(vendorDir, \"vendor.json\"),\n JSON.stringify(lock, null, 2),\n );\n }\n\n /**\n * Directories to ignore during diff comparisons.\n */\n protected readonly ignoredPaths = [\n \"__tests__\",\n \"assets/swagger-ui\",\n \"node_modules\",\n \"dist\",\n ];\n\n /**\n * Check if a file path should be ignored during diff.\n */\n protected isIgnored(filePath: string): boolean {\n if (\n filePath.endsWith(\".spec.ts\") ||\n filePath.endsWith(\".spec.tsx\") ||\n filePath === \"LICENSE\" ||\n filePath === \"tsdown.config.ts\"\n ) {\n return true;\n }\n return this.ignoredPaths.some(\n (p) =>\n filePath === p ||\n filePath.startsWith(`${p}/`) ||\n filePath.includes(`/${p}/`) ||\n filePath.endsWith(`/${p}`),\n );\n }\n\n /**\n * Recursively compare two directories and return the differences.\n */\n protected async diffDirectories(\n localDir: string,\n remoteDir: string,\n ): Promise<{\n added: string[];\n modified: VendorFileDiff[];\n removed: string[];\n }> {\n const added: string[] = [];\n const modified: VendorFileDiff[] = [];\n const removed: string[] = [];\n\n const [localFiles, remoteFiles] = await Promise.all([\n this.fs.ls(localDir, { recursive: true }),\n this.fs.ls(remoteDir, { recursive: true }),\n ]);\n\n const filteredLocal = localFiles.filter((f) => !this.isIgnored(f));\n const filteredRemote = remoteFiles.filter((f) => !this.isIgnored(f));\n\n const localSet = new Set(filteredLocal);\n const remoteSet = new Set(filteredRemote);\n\n // Files in baseline but not local = user deleted them\n for (const file of filteredRemote) {\n if (!localSet.has(file)) {\n removed.push(file);\n continue;\n }\n\n try {\n const [localContent, remoteContent] = await Promise.all([\n this.fs.readFile(this.fs.join(localDir, file)),\n this.fs.readFile(this.fs.join(remoteDir, file)),\n ]);\n\n if (!localContent.equals(remoteContent)) {\n const changes = this.computeLineDiff(\n remoteContent.toString(),\n localContent.toString(),\n );\n modified.push({ file, changes });\n }\n } catch {\n // Skip directories and unreadable entries\n }\n }\n\n // Files in local but not baseline = user added them\n for (const file of filteredLocal) {\n if (!remoteSet.has(file)) {\n added.push(file);\n }\n }\n\n return { added, modified, removed };\n }\n\n /**\n * Compute line-level differences between two file contents.\n *\n * Uses a longest-common-subsequence algorithm to produce minimal\n * added/removed line changes with accurate line numbers.\n */\n protected computeLineDiff(baseline: string, local: string): VendorLineDiff[] {\n const baseLines = baseline.split(\"\\n\");\n const localLines = local.split(\"\\n\");\n const lcs = this.longestCommonSubsequence(baseLines, localLines);\n const changes: VendorLineDiff[] = [];\n\n let bi = 0;\n let li = 0;\n let ci = 0;\n\n while (bi < baseLines.length || li < localLines.length) {\n if (ci < lcs.length && bi < baseLines.length && li < localLines.length) {\n if (baseLines[bi] === lcs[ci] && localLines[li] === lcs[ci]) {\n // Line is unchanged\n bi++;\n li++;\n ci++;\n } else if (baseLines[bi] !== lcs[ci]) {\n changes.push({ line: bi + 1, type: \"removed\", text: baseLines[bi] });\n bi++;\n } else {\n changes.push({ line: li + 1, type: \"added\", text: localLines[li] });\n li++;\n }\n } else if (bi < baseLines.length) {\n changes.push({ line: bi + 1, type: \"removed\", text: baseLines[bi] });\n bi++;\n } else {\n changes.push({ line: li + 1, type: \"added\", text: localLines[li] });\n li++;\n }\n }\n\n return changes;\n }\n\n /**\n * Compute the longest common subsequence of two string arrays.\n */\n protected longestCommonSubsequence(a: string[], b: string[]): string[] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n Array(n + 1).fill(0),\n );\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n dp[i][j] =\n a[i - 1] === b[j - 1]\n ? dp[i - 1][j - 1] + 1\n : Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n\n const result: string[] = [];\n let i = m;\n let j = n;\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n result.unshift(a[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] > dp[i][j - 1]) {\n i--;\n } else {\n j--;\n }\n }\n\n return result;\n }\n}\n","import { $inject, $state, AlephaError, t } from \"alepha\";\nimport { PackageManagerUtils } from \"alepha/cli\";\nimport { $command } from \"alepha/command\";\nimport { $logger, ConsoleColorProvider } from \"alepha/logger\";\nimport { vendorOptions } from \"../atoms/vendorOptions.ts\";\nimport type {\n VendorDiffResult,\n VendorPackageDiff,\n VendorSyncResult,\n} from \"../services/VendorService.ts\";\nimport { VendorService } from \"../services/VendorService.ts\";\n\n/**\n * Default remote when none is configured. The HTTPS URL is used so anyone\n * (CI runners, AI agents, contributors without SSH keys) can clone without\n * extra setup.\n */\nconst DEFAULT_REMOTE = \"https://github.com/feunard/alepha\";\n\nexport class VendorCommand {\n protected readonly log = $logger();\n protected readonly options = $state(vendorOptions);\n protected readonly vendorService = $inject(VendorService);\n protected readonly color = $inject(ConsoleColorProvider);\n protected readonly pm = $inject(PackageManagerUtils);\n\n /**\n * Ensure vendor config is present and return resolved options.\n */\n protected resolveOptions() {\n if (!this.options) {\n throw new AlephaError(\n 'Missing vendor configuration. Add a \"vendor\" section to alepha.config.ts.',\n );\n }\n return {\n remote: this.options.remote ?? DEFAULT_REMOTE,\n branch: this.options.branch ?? \"main\",\n dir: this.options.dir ?? \".vendor\",\n packages: this.options.packages,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // alepha vendor sync\n // ─────────────────────────────────────────────────────────────────────────\n\n protected readonly syncFlags = t.object({\n force: t.optional(\n t.boolean({\n aliases: [\"f\"],\n description: \"Skip local modification check\",\n }),\n ),\n remote: t.optional(\n t.text({\n description:\n \"Override the configured remote for this invocation. Accepts any git-clone URL, including local paths (`file:///abs/path/to/alepha`). Useful for CI canaries that need to sync against a local checkout instead of the published repo.\",\n }),\n ),\n });\n\n protected readonly sync = $command({\n name: \"sync\",\n description: \"Replace local packages with remote source\",\n flags: this.syncFlags,\n handler: async ({ flags, root, run }) => {\n const opts = this.resolveOptions();\n const remote = flags.remote ?? opts.remote;\n const c = this.color;\n\n let result: VendorSyncResult = { synced: [], errors: [] };\n\n await run({\n name: `Syncing from ${opts.branch}`,\n handler: async () => {\n result = await this.vendorService.sync({\n root,\n remote,\n branch: opts.branch,\n dir: opts.dir,\n packages: opts.packages,\n force: flags.force,\n });\n },\n });\n\n if (result.aborted) {\n run.end();\n\n process.stdout.write(\n `\\nLocal modifications detected. Use ${c.set(\"CYAN\", \"--force\")} to overwrite.\\n`,\n );\n\n for (const pkg of result.aborted.packages) {\n this.printPackageDiff(pkg);\n }\n\n process.stdout.write(\"\\n\");\n return;\n }\n\n if (result.synced.length > 0) {\n const pmName = await this.pm.getPackageManager(root);\n await run(`${pmName} install`, { root });\n }\n\n run.end();\n\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n process.stdout.write(`${c.set(\"RED\", \" error\")} ${error}\\n`);\n }\n }\n\n if (result.synced.length > 0) {\n process.stdout.write(\n `\\nSynced ${c.set(\"CYAN\", String(result.synced.length))} ${result.synced.length === 1 ? \"package\" : \"packages\"} from ${c.set(\"CYAN\", opts.branch)}\\n`,\n );\n for (const pkg of result.synced) {\n process.stdout.write(` ${c.set(\"GREEN\", \"\\u2713\")} ${pkg}\\n`);\n }\n }\n\n process.stdout.write(\"\\n\");\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────\n // alepha vendor diff\n // ─────────────────────────────────────────────────────────────────────────\n\n protected readonly diff = $command({\n name: \"diff\",\n description: \"Compare local packages against remote\",\n handler: async ({ root, run }) => {\n const opts = this.resolveOptions();\n\n let result: VendorDiffResult = { packages: [], totalChanges: 0 };\n\n await run({\n name: `Cloning ${opts.remote} at ${opts.branch}`,\n handler: async () => {\n result = await this.vendorService.diff({\n root,\n remote: opts.remote,\n branch: opts.branch,\n dir: opts.dir,\n packages: opts.packages,\n });\n },\n });\n\n run.end();\n\n if (result.totalChanges === 0) {\n process.stdout.write(\"\\nNo changes\\n\\n\");\n return;\n }\n\n for (const pkg of result.packages) {\n this.printPackageDiff(pkg);\n }\n\n process.stdout.write(\"\\n\");\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────\n // Helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n protected printPackageDiff(pkg: VendorPackageDiff) {\n const c = this.color;\n const count = pkg.added.length + pkg.modified.length + pkg.removed.length;\n\n if (count === 0) {\n process.stdout.write(`\\n${c.set(\"CYAN\", pkg.name)}: no changes\\n`);\n return;\n }\n\n process.stdout.write(\n `\\n${c.set(\"CYAN\", pkg.name)}: ${count} ${count === 1 ? \"file differs\" : \"files differ\"}\\n`,\n );\n\n for (const file of pkg.added) {\n process.stdout.write(` ${c.set(\"GREEN\", \"A\")} ${file}\\n`);\n }\n\n for (const fileDiff of pkg.modified) {\n process.stdout.write(` ${c.set(\"ORANGE\", \"M\")} ${fileDiff.file}\\n`);\n for (const change of fileDiff.changes) {\n const prefix = change.type === \"removed\" ? \"-\" : \"+\";\n const color = change.type === \"removed\" ? \"RED\" : \"GREEN\";\n const lineNum = `L${change.line}`;\n process.stdout.write(\n ` ${c.set(\"DIM\", lineNum.padEnd(5))} ${c.set(color, `${prefix} ${change.text}`)}\\n`,\n );\n }\n }\n\n for (const file of pkg.removed) {\n process.stdout.write(` ${c.set(\"RED\", \"D\")} ${file}\\n`);\n }\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Parent command\n // ─────────────────────────────────────────────────────────────────────────\n\n public readonly vendor = $command({\n name: \"vendor\",\n description: \"Vendor Alepha packages into the project\",\n children: [this.sync, this.diff],\n handler: async ({ help }) => {\n help();\n },\n });\n}\n","import { $context, $module } from \"alepha\";\nimport { type VendorOptions, vendorOptions } from \"./atoms/vendorOptions.ts\";\nimport { VendorCommand } from \"./commands/VendorCommand.ts\";\nimport { VendorService } from \"./services/VendorService.ts\";\n\n// ---------------------------------------------------------------------------\n\n/**\n * CLI plugin for vendoring Alepha packages into external projects.\n *\n * Copies package source code from a git remote into the current project's\n * `packages/` directory. Useful for corporate projects that need a local\n * copy of Alepha for AI tooling, audits, documentation, or quick fixes.\n *\n * Commands:\n * - `alepha vendor sync` — replace local packages with remote source\n * - `alepha vendor diff` — compare local packages against remote HEAD\n *\n * Configuration in `alepha.config.ts`:\n *\n * ```typescript\n * import { vendor } from \"alepha/cli/vendor\";\n *\n * export default defineConfig({\n * plugins: [\n * vendor({\n * branch: \"main\",\n * packages: [\"alepha\", \"@alepha/payments-stripe\"],\n * }),\n * ],\n * });\n * ```\n */\nexport const AlephaCliVendorPlugin = $module({\n name: \"alepha.cli.plugins.vendor\",\n atoms: [vendorOptions],\n services: [VendorCommand, VendorService],\n});\n\nexport const vendor = (options: VendorOptions) => {\n return () => {\n const { alepha } = $context();\n alepha.with(AlephaCliVendorPlugin).set(vendorOptions, options);\n };\n};\n\n// ---------------------------------------------------------------------------\n\nexport * from \"./atoms/vendorOptions.ts\";\nexport * from \"./commands/VendorCommand.ts\";\nexport * from \"./services/VendorService.ts\";\n"],"mappings":"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"}
@@ -1,13 +1,9 @@
1
- import * as _$alepha from "alepha";
2
1
  import { Alepha, AlephaError, Async, KIND, Primitive, Static, TObject, TSchema, TString } from "alepha";
3
- import * as _$node_readline_promises0 from "node:readline/promises";
4
- import * as _$alepha_logger0 from "alepha/logger";
5
2
  import { ConsoleColorProvider } from "alepha/logger";
6
3
  import { FileSystemProvider, ShellProvider } from "alepha/system";
7
4
  import { DateTimeProvider, Interval } from "alepha/datetime";
8
5
  import * as fs from "node:fs/promises";
9
6
  import { glob } from "node:fs/promises";
10
- import * as _$typebox from "typebox";
11
7
 
12
8
  //#region ../../src/command/errors/CommandError.d.ts
13
9
  declare class CommandError extends AlephaError {
@@ -57,7 +53,7 @@ declare class PrettyAsker {
57
53
  protected writeCompletedMarker(question: string): void;
58
54
  protected writeAnswer(value: string): void;
59
55
  protected write(str: string): void;
60
- protected createPromptInterface(): _$node_readline_promises0.Interface;
56
+ protected createPromptInterface(): import("node:readline/promises").Interface;
61
57
  }
62
58
  //#endregion
63
59
  //#region ../../src/command/helpers/Asker.d.ts
@@ -94,7 +90,7 @@ interface AskMethod {
94
90
  outro: (message: string) => void;
95
91
  }
96
92
  declare class Asker {
97
- protected readonly log: _$alepha_logger0.Logger;
93
+ protected readonly log: import("alepha/logger").Logger;
98
94
  readonly ask: AskMethod;
99
95
  protected readonly alepha: Alepha;
100
96
  protected readonly pretty: PrettyAsker;
@@ -109,12 +105,12 @@ declare class Asker {
109
105
  * Plain mode: readline-based prompts (CI, Claude Code, debug).
110
106
  */
111
107
  protected plainPrompt<T extends TSchema = TString>(question: string, options: AskOptions<T>): Promise<Static<T>>;
112
- protected createPromptInterface(): _$node_readline_promises0.Interface;
108
+ protected createPromptInterface(): import("node:readline/promises").Interface;
113
109
  }
114
110
  //#endregion
115
111
  //#region ../../src/command/helpers/EnvUtils.d.ts
116
112
  declare class EnvUtils {
117
- protected readonly log: _$alepha_logger0.Logger;
113
+ protected readonly log: import("alepha/logger").Logger;
118
114
  protected readonly fs: FileSystemProvider;
119
115
  /**
120
116
  * Load environment variables from .env files into process.env.
@@ -264,7 +260,7 @@ interface RunnerMethod {
264
260
  resume: () => void;
265
261
  }
266
262
  declare class Runner {
267
- protected readonly log: _$alepha_logger0.Logger;
263
+ protected readonly log: import("alepha/logger").Logger;
268
264
  protected readonly dateTime: DateTimeProvider;
269
265
  protected timers: Timer[];
270
266
  protected readonly startTime: number;
@@ -570,8 +566,8 @@ interface CommandHandlerArgs<T extends TObject, A extends TSchema = TSchema, E e
570
566
  //#endregion
571
567
  //#region ../../src/command/providers/CliProvider.d.ts
572
568
  declare const envSchema: TObject<{
573
- CLI_NAME: _$alepha.TString;
574
- CLI_DESCRIPTION: _$alepha.TString;
569
+ CLI_NAME: import("alepha").TString;
570
+ CLI_DESCRIPTION: import("alepha").TString;
575
571
  }>;
576
572
  declare module "alepha" {
577
573
  interface Env extends Partial<Static<typeof envSchema>> {}
@@ -579,10 +575,10 @@ declare module "alepha" {
579
575
  /**
580
576
  * CLI provider configuration atom
581
577
  */
582
- declare const cliOptions: _$alepha.Atom<TObject<{
583
- name: _$typebox.TOptional<_$alepha.TString>;
584
- description: _$typebox.TOptional<_$alepha.TString>;
585
- argv: _$typebox.TOptional<_$typebox.TArray<_$alepha.TString>>;
578
+ declare const cliOptions: import("alepha").Atom<TObject<{
579
+ name: import("typebox").TOptional<import("alepha").TString>;
580
+ description: import("typebox").TOptional<import("alepha").TString>;
581
+ argv: import("typebox").TOptional<import("typebox").TArray<import("alepha").TString>>;
586
582
  }>, "alepha.command.cli.options">;
587
583
  type CliProviderOptions = Static<typeof cliOptions.schema>;
588
584
  declare module "alepha" {
@@ -622,14 +618,14 @@ declare class CliProvider {
622
618
  CLI_DESCRIPTION: string;
623
619
  };
624
620
  protected readonly alepha: Alepha;
625
- protected readonly log: _$alepha_logger0.Logger;
621
+ protected readonly log: import("alepha/logger").Logger;
626
622
  protected readonly color: ConsoleColorProvider;
627
623
  protected readonly runner: Runner;
628
624
  protected readonly asker: Asker;
629
625
  protected readonly envUtils: EnvUtils;
630
626
  protected readonly options: Readonly<{
631
- description?: string | undefined;
632
627
  name?: string | undefined;
628
+ description?: string | undefined;
633
629
  argv?: string[] | undefined;
634
630
  }>;
635
631
  protected get name(): string;
@@ -642,14 +638,19 @@ declare class CliProvider {
642
638
  help: {
643
639
  aliases: string[];
644
640
  description: string;
645
- schema: _$typebox.TBoolean;
641
+ schema: import("typebox").TBoolean;
642
+ };
643
+ verbose: {
644
+ aliases: string[];
645
+ description: string;
646
+ schema: import("typebox").TBoolean;
646
647
  };
647
648
  };
648
649
  /**
649
650
  * Main entry point - resolves and executes the command from process.argv.
650
651
  * This is the production execution path with full lifecycle support.
651
652
  */
652
- protected readonly onReady: _$alepha.HookPrimitive<"ready">;
653
+ protected readonly onReady: import("alepha").HookPrimitive<"ready">;
653
654
  /**
654
655
  * Execute a command with full lifecycle support.
655
656
  *
@@ -845,7 +846,7 @@ declare class CliProvider {
845
846
  *
846
847
  * @module alepha.command
847
848
  */
848
- declare const AlephaCommand: _$alepha.Service<_$alepha.Module>;
849
+ declare const AlephaCommand: import("alepha").Service<import("alepha").Module>;
849
850
  declare module "typebox" {
850
851
  interface StringOptions {
851
852
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/command/errors/CommandError.ts","../../src/command/helpers/PrettyAsker.ts","../../src/command/helpers/Asker.ts","../../src/command/helpers/EnvUtils.ts","../../src/command/helpers/PrettyPrint.ts","../../src/command/helpers/Runner.ts","../../src/command/primitives/$command.ts","../../src/command/providers/CliProvider.ts","../../src/command/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/command/errors/CommandError.ts","../../src/command/helpers/PrettyAsker.ts","../../src/command/helpers/Asker.ts","../../src/command/helpers/EnvUtils.ts","../../src/command/helpers/PrettyPrint.ts","../../src/command/helpers/Runner.ts","../../src/command/primitives/$command.ts","../../src/command/providers/CliProvider.ts","../../src/command/index.ts"],"mappings":"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"}
@@ -295,7 +295,13 @@ var EnvUtils = class {
295
295
  const trimmedKey = key.trim();
296
296
  if (trimmedKey && !trimmedKey.startsWith("#")) {
297
297
  let value = rest.join("=").trim();
298
- if (value.length >= 2 && (value[0] === "\"" && value[value.length - 1] === "\"" || value[0] === "'" && value[value.length - 1] === "'")) value = value.slice(1, -1);
298
+ const last = value.length - 1;
299
+ if (value.length >= 2 && value[0] === "\"" && value[last] === "\"") try {
300
+ value = JSON.parse(value);
301
+ } catch {
302
+ value = value.slice(1, -1);
303
+ }
304
+ else if (value.length >= 2 && value[0] === "'" && value[last] === "'") value = value.slice(1, -1);
299
305
  result[trimmedKey] = value;
300
306
  }
301
307
  }
@@ -545,9 +551,9 @@ var Runner = class {
545
551
  }
546
552
  get useDynamicLogger() {
547
553
  if (this.alepha.isCI() || this.alepha.env.CLAUDECODE) return false;
548
- const logLevel = String(this.alepha.env.LOG_LEVEL || "").toLowerCase();
554
+ const logLevel = String(this.alepha.store.get("alepha.logger.level") ?? this.alepha.env.LOG_LEVEL ?? "").toLowerCase();
549
555
  if (logLevel === "debug" || logLevel === "trace") return false;
550
- return this.alepha.env.LOG_FORMAT === "raw";
556
+ return (this.alepha.store.get("alepha.logger.format") ?? this.alepha.env.LOG_FORMAT) === "raw";
551
557
  }
552
558
  /**
553
559
  * Start a new command session with header (for pretty print mode)
@@ -796,11 +802,18 @@ var CliProvider = class {
796
802
  /**
797
803
  * Global flags available to all commands.
798
804
  */
799
- globalFlags = { help: {
800
- aliases: ["h", "help"],
801
- description: "Show this help message",
802
- schema: t.boolean()
803
- } };
805
+ globalFlags = {
806
+ help: {
807
+ aliases: ["h", "help"],
808
+ description: "Show this help message",
809
+ schema: t.boolean()
810
+ },
811
+ verbose: {
812
+ aliases: ["verbose"],
813
+ description: "Verbose output: debug logs in plain pretty format (turns off the dynamic CLI UI).",
814
+ schema: t.boolean()
815
+ }
816
+ };
804
817
  /**
805
818
  * Main entry point - resolves and executes the command from process.argv.
806
819
  * This is the production execution path with full lifecycle support.
@@ -811,10 +824,15 @@ var CliProvider = class {
811
824
  const argv = [...this.argv];
812
825
  const positionalArgs = argv.filter((arg) => !arg.startsWith("-"));
813
826
  const { command, consumedArgs } = this.resolveCommand(positionalArgs);
814
- if (this.parseFlags(argv, Object.entries(this.getAllGlobalFlags()).map(([key, value]) => ({
827
+ const globalFlags = this.parseFlags(argv, Object.entries(this.getAllGlobalFlags()).map(([key, value]) => ({
815
828
  key,
816
829
  ...value
817
- })), { strict: false }).help) {
830
+ })), { strict: false });
831
+ if (globalFlags.verbose) {
832
+ this.alepha.store.set("alepha.logger.level", "debug");
833
+ this.alepha.store.set("alepha.logger.format", "pretty");
834
+ }
835
+ if (globalFlags.help) {
818
836
  this.printHelp(command);
819
837
  return;
820
838
  }
@@ -1048,8 +1066,19 @@ var CliProvider = class {
1048
1066
  description: void 0,
1049
1067
  schema: t.string()
1050
1068
  });
1069
+ const claimed = new Set(flagDefs.flatMap((d) => d.aliases));
1070
+ for (const [key, value] of Object.entries(this.getAllGlobalFlags())) {
1071
+ if (value.aliases.some((a) => claimed.has(a))) continue;
1072
+ flagDefs.push({
1073
+ key: `__global_${key}__`,
1074
+ aliases: value.aliases,
1075
+ description: void 0,
1076
+ schema: value.schema
1077
+ });
1078
+ }
1051
1079
  const parsed = this.parseFlags(argv, flagDefs);
1052
1080
  parsed.__mode__ = void 0;
1081
+ for (const key of Object.keys(parsed)) if (key.startsWith("__global_")) delete parsed[key];
1053
1082
  for (const [key, value] of Object.entries(schema.properties)) if (!(key in parsed) && t.schema.isOptional(value)) {
1054
1083
  const innerSchema = value;
1055
1084
  if (innerSchema && "default" in innerSchema) parsed[key] = innerSchema.default;