alepha 0.20.5 → 0.20.7

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 (367) hide show
  1. package/AGENTS.md +0 -1
  2. package/CLAUDE.md +0 -1
  3. package/assets/agents-template.md +0 -1
  4. package/dist/api/audits/index.browser.js +1 -0
  5. package/dist/api/audits/index.browser.js.map +1 -1
  6. package/dist/api/audits/index.d.ts +701 -654
  7. package/dist/api/audits/index.d.ts.map +1 -1
  8. package/dist/api/audits/index.js +24 -1
  9. package/dist/api/audits/index.js.map +1 -1
  10. package/dist/api/files/index.browser.js +1 -0
  11. package/dist/api/files/index.browser.js.map +1 -1
  12. package/dist/api/files/index.d.ts +193 -166
  13. package/dist/api/files/index.d.ts.map +1 -1
  14. package/dist/api/files/index.js +52 -0
  15. package/dist/api/files/index.js.map +1 -1
  16. package/dist/api/jobs/index.browser.js +40 -14
  17. package/dist/api/jobs/index.browser.js.map +1 -1
  18. package/dist/api/jobs/index.d.ts +639 -333
  19. package/dist/api/jobs/index.d.ts.map +1 -1
  20. package/dist/api/jobs/index.js +495 -162
  21. package/dist/api/jobs/index.js.map +1 -1
  22. package/dist/api/keys/index.d.ts +222 -188
  23. package/dist/api/keys/index.d.ts.map +1 -1
  24. package/dist/api/keys/index.js +54 -0
  25. package/dist/api/keys/index.js.map +1 -1
  26. package/dist/api/notifications/index.d.ts +265 -236
  27. package/dist/api/notifications/index.d.ts.map +1 -1
  28. package/dist/api/notifications/index.js +55 -13
  29. package/dist/api/notifications/index.js.map +1 -1
  30. package/dist/api/organizations/index.d.ts +100 -97
  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.d.ts +332 -314
  34. package/dist/api/parameters/index.d.ts.map +1 -1
  35. package/dist/api/parameters/index.js +37 -0
  36. package/dist/api/parameters/index.js.map +1 -1
  37. package/dist/api/payments/index.d.ts +431 -376
  38. package/dist/api/payments/index.d.ts.map +1 -1
  39. package/dist/api/payments/index.js +202 -87
  40. package/dist/api/payments/index.js.map +1 -1
  41. package/dist/api/subscriptions/index.d.ts +1695 -0
  42. package/dist/api/subscriptions/index.d.ts.map +1 -0
  43. package/dist/api/subscriptions/index.js +1919 -0
  44. package/dist/api/subscriptions/index.js.map +1 -0
  45. package/dist/api/users/index.d.ts +1001 -844
  46. package/dist/api/users/index.d.ts.map +1 -1
  47. package/dist/api/users/index.js +237 -28
  48. package/dist/api/users/index.js.map +1 -1
  49. package/dist/api/verifications/index.d.ts +123 -122
  50. package/dist/api/verifications/index.d.ts.map +1 -1
  51. package/dist/api/verifications/index.js.map +1 -1
  52. package/dist/batch/index.js.map +1 -1
  53. package/dist/bucket/index.d.ts +21 -2
  54. package/dist/bucket/index.d.ts.map +1 -1
  55. package/dist/bucket/index.js +47 -0
  56. package/dist/bucket/index.js.map +1 -1
  57. package/dist/bucket/index.workerd.js +24 -0
  58. package/dist/bucket/index.workerd.js.map +1 -1
  59. package/dist/cache/core/index.d.ts +134 -7
  60. package/dist/cache/core/index.d.ts.map +1 -1
  61. package/dist/cache/core/index.js +181 -15
  62. package/dist/cache/core/index.js.map +1 -1
  63. package/dist/cache/core/index.workerd.js +181 -15
  64. package/dist/cache/core/index.workerd.js.map +1 -1
  65. package/dist/cache/database/index.d.ts +156 -0
  66. package/dist/cache/database/index.d.ts.map +1 -0
  67. package/dist/cache/database/index.js +266 -0
  68. package/dist/cache/database/index.js.map +1 -0
  69. package/dist/cache/redis/index.d.ts +3 -2
  70. package/dist/cache/redis/index.d.ts.map +1 -1
  71. package/dist/cache/redis/index.js.map +1 -1
  72. package/dist/captcha/index.js.map +1 -1
  73. package/dist/cli/config/index.js.map +1 -1
  74. package/dist/cli/core/index.d.ts +142 -128
  75. package/dist/cli/core/index.d.ts.map +1 -1
  76. package/dist/cli/core/index.js +160 -13
  77. package/dist/cli/core/index.js.map +1 -1
  78. package/dist/cli/devtools/index.d.ts +3 -2
  79. package/dist/cli/devtools/index.d.ts.map +1 -1
  80. package/dist/cli/devtools/index.js.map +1 -1
  81. package/dist/cli/platform/index.d.ts +346 -290
  82. package/dist/cli/platform/index.d.ts.map +1 -1
  83. package/dist/cli/platform/index.js +106 -7
  84. package/dist/cli/platform/index.js.map +1 -1
  85. package/dist/cli/vendor/index.d.ts +12 -11
  86. package/dist/cli/vendor/index.d.ts.map +1 -1
  87. package/dist/cli/vendor/index.js.map +1 -1
  88. package/dist/command/index.d.ts +6 -5
  89. package/dist/command/index.d.ts.map +1 -1
  90. package/dist/command/index.js.map +1 -1
  91. package/dist/core/index.browser.js +1 -1
  92. package/dist/core/index.browser.js.map +1 -1
  93. package/dist/core/index.d.ts +119 -118
  94. package/dist/core/index.d.ts.map +1 -1
  95. package/dist/core/index.js +1 -1
  96. package/dist/core/index.js.map +1 -1
  97. package/dist/core/index.native.js +1 -1
  98. package/dist/core/index.native.js.map +1 -1
  99. package/dist/core/index.workerd.js +1 -1
  100. package/dist/core/index.workerd.js.map +1 -1
  101. package/dist/crypto/index.browser.js.map +1 -1
  102. package/dist/crypto/index.d.ts +3 -2
  103. package/dist/crypto/index.d.ts.map +1 -1
  104. package/dist/crypto/index.js.map +1 -1
  105. package/dist/datetime/index.js.map +1 -1
  106. package/dist/email/brevo/index.js.map +1 -1
  107. package/dist/email/core/index.d.ts +3 -2
  108. package/dist/email/core/index.d.ts.map +1 -1
  109. package/dist/email/core/index.js.map +1 -1
  110. package/dist/email/core/index.workerd.js.map +1 -1
  111. package/dist/email/smtp/index.d.ts +7 -6
  112. package/dist/email/smtp/index.d.ts.map +1 -1
  113. package/dist/email/smtp/index.js.map +1 -1
  114. package/dist/fake/index.js.map +1 -1
  115. package/dist/lock/core/index.d.ts +5 -4
  116. package/dist/lock/core/index.d.ts.map +1 -1
  117. package/dist/lock/core/index.js.map +1 -1
  118. package/dist/lock/redis/index.js.map +1 -1
  119. package/dist/logger/index.d.ts +10 -9
  120. package/dist/logger/index.d.ts.map +1 -1
  121. package/dist/logger/index.js.map +1 -1
  122. package/dist/mcp/index.d.ts +9 -8
  123. package/dist/mcp/index.d.ts.map +1 -1
  124. package/dist/mcp/index.js +1 -1
  125. package/dist/mcp/index.js.map +1 -1
  126. package/dist/orm/core/index.browser.js +9 -3
  127. package/dist/orm/core/index.browser.js.map +1 -1
  128. package/dist/orm/core/index.bun.js +31 -10
  129. package/dist/orm/core/index.bun.js.map +1 -1
  130. package/dist/orm/core/index.d.ts +33 -14
  131. package/dist/orm/core/index.d.ts.map +1 -1
  132. package/dist/orm/core/index.js +31 -10
  133. package/dist/orm/core/index.js.map +1 -1
  134. package/dist/orm/postgres/index.bun.js.map +1 -1
  135. package/dist/orm/postgres/index.d.ts +6 -5
  136. package/dist/orm/postgres/index.d.ts.map +1 -1
  137. package/dist/orm/postgres/index.js.map +1 -1
  138. package/dist/queue/core/index.d.ts +5 -4
  139. package/dist/queue/core/index.d.ts.map +1 -1
  140. package/dist/queue/core/index.js.map +1 -1
  141. package/dist/queue/core/index.workerd.js.map +1 -1
  142. package/dist/queue/redis/index.d.ts +3 -2
  143. package/dist/queue/redis/index.d.ts.map +1 -1
  144. package/dist/queue/redis/index.js.map +1 -1
  145. package/dist/react/auth/index.browser.js.map +1 -1
  146. package/dist/react/auth/index.js.map +1 -1
  147. package/dist/react/core/index.js.map +1 -1
  148. package/dist/react/form/index.d.ts +5 -0
  149. package/dist/react/form/index.d.ts.map +1 -1
  150. package/dist/react/form/index.js +8 -4
  151. package/dist/react/form/index.js.map +1 -1
  152. package/dist/react/head/index.browser.js.map +1 -1
  153. package/dist/react/head/index.js.map +1 -1
  154. package/dist/react/i18n/index.d.ts +2 -1
  155. package/dist/react/i18n/index.d.ts.map +1 -1
  156. package/dist/react/i18n/index.js.map +1 -1
  157. package/dist/react/intro/index.js.map +1 -1
  158. package/dist/react/router/index.browser.js.map +1 -1
  159. package/dist/react/router/index.d.ts +206 -205
  160. package/dist/react/router/index.d.ts.map +1 -1
  161. package/dist/react/router/index.js.map +1 -1
  162. package/dist/react/testing/index.js.map +1 -1
  163. package/dist/react/ui/index.d.ts +11 -11
  164. package/dist/react/ui/index.d.ts.map +1 -1
  165. package/dist/react/ui/index.js.map +1 -1
  166. package/dist/redis/index.bun.js.map +1 -1
  167. package/dist/redis/index.js.map +1 -1
  168. package/dist/retry/index.js.map +1 -1
  169. package/dist/router/index.js.map +1 -1
  170. package/dist/scheduler/index.d.ts +25 -2
  171. package/dist/scheduler/index.d.ts.map +1 -1
  172. package/dist/scheduler/index.js +12 -0
  173. package/dist/scheduler/index.js.map +1 -1
  174. package/dist/scheduler/index.workerd.js +12 -0
  175. package/dist/scheduler/index.workerd.js.map +1 -1
  176. package/dist/security/index.browser.js +29 -1
  177. package/dist/security/index.browser.js.map +1 -1
  178. package/dist/security/index.d.ts +82 -35
  179. package/dist/security/index.d.ts.map +1 -1
  180. package/dist/security/index.js +56 -3
  181. package/dist/security/index.js.map +1 -1
  182. package/dist/server/auth/index.d.ts +163 -158
  183. package/dist/server/auth/index.d.ts.map +1 -1
  184. package/dist/server/auth/index.js +16 -4
  185. package/dist/server/auth/index.js.map +1 -1
  186. package/dist/server/cookies/index.browser.js.map +1 -1
  187. package/dist/server/cookies/index.js.map +1 -1
  188. package/dist/server/core/index.browser.js.map +1 -1
  189. package/dist/server/core/index.d.ts +35 -34
  190. package/dist/server/core/index.d.ts.map +1 -1
  191. package/dist/server/core/index.js.map +1 -1
  192. package/dist/server/cors/index.d.ts +7 -6
  193. package/dist/server/cors/index.d.ts.map +1 -1
  194. package/dist/server/cors/index.js.map +1 -1
  195. package/dist/server/etag/index.js.map +1 -1
  196. package/dist/server/health/index.d.ts +16 -15
  197. package/dist/server/health/index.d.ts.map +1 -1
  198. package/dist/server/health/index.js.map +1 -1
  199. package/dist/server/links/index.browser.js.map +1 -1
  200. package/dist/server/links/index.d.ts +51 -50
  201. package/dist/server/links/index.d.ts.map +1 -1
  202. package/dist/server/links/index.js.map +1 -1
  203. package/dist/server/metrics/index.js.map +1 -1
  204. package/dist/server/proxy/index.js.map +1 -1
  205. package/dist/server/rate-limit/index.d.ts +6 -5
  206. package/dist/server/rate-limit/index.d.ts.map +1 -1
  207. package/dist/server/rate-limit/index.js.map +1 -1
  208. package/dist/server/static/index.js.map +1 -1
  209. package/dist/server/swagger/index.d.ts +2 -1
  210. package/dist/server/swagger/index.d.ts.map +1 -1
  211. package/dist/server/swagger/index.js.map +1 -1
  212. package/dist/sms/index.js.map +1 -1
  213. package/dist/system/index.browser.js.map +1 -1
  214. package/dist/system/index.js.map +1 -1
  215. package/dist/system/index.workerd.js.map +1 -1
  216. package/dist/topic/core/index.js.map +1 -1
  217. package/dist/topic/redis/index.d.ts +3 -2
  218. package/dist/topic/redis/index.d.ts.map +1 -1
  219. package/dist/topic/redis/index.js.map +1 -1
  220. package/package.json +33 -39
  221. package/src/api/audits/controllers/AdminAuditController.ts +29 -0
  222. package/src/api/audits/entities/audits.ts +1 -0
  223. package/src/api/files/controllers/FileController.ts +24 -0
  224. package/src/api/files/entities/files.ts +1 -0
  225. package/src/api/files/services/FileService.ts +41 -0
  226. package/src/api/jobs/__tests__/$job.spec.ts +501 -24
  227. package/src/api/jobs/entities/jobExecutionEntity.ts +4 -3
  228. package/src/api/jobs/index.ts +47 -10
  229. package/src/api/jobs/primitives/$job.ts +22 -9
  230. package/src/api/jobs/providers/DirectJobDispatcher.ts +71 -0
  231. package/src/api/jobs/providers/JobDispatcher.ts +49 -0
  232. package/src/api/jobs/providers/JobProvider.ts +385 -147
  233. package/src/api/jobs/providers/JobQueueProvider.ts +43 -18
  234. package/src/api/jobs/schemas/jobConfigAtom.ts +9 -3
  235. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -0
  236. package/src/api/jobs/schemas/jobRegistrationSchema.ts +4 -2
  237. package/src/api/jobs/services/JobService.ts +21 -11
  238. package/src/api/keys/controllers/AdminApiKeyController.ts +23 -0
  239. package/src/api/keys/entities/apiKeyEntity.ts +1 -0
  240. package/src/api/keys/services/ApiKeyService.ts +42 -0
  241. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +63 -0
  242. package/src/api/notifications/controllers/AdminNotificationController.ts +48 -1
  243. package/src/api/notifications/index.ts +13 -3
  244. package/src/api/notifications/jobs/NotificationJobs.ts +0 -6
  245. package/src/api/parameters/controllers/AdminParameterController.ts +26 -0
  246. package/src/api/parameters/services/ParameterProvider.ts +18 -0
  247. package/src/api/payments/controllers/MockCheckoutController.ts +146 -0
  248. package/src/api/payments/index.ts +3 -0
  249. package/src/api/payments/providers/MemoryPaymentProvider.ts +9 -4
  250. package/src/api/payments/providers/PaymentProvider.ts +25 -9
  251. package/src/api/payments/services/PaymentService.ts +3 -0
  252. package/src/api/subscriptions/__tests__/BillingService.spec.ts +218 -0
  253. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +278 -0
  254. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +212 -0
  255. package/src/api/subscriptions/controllers/SubscriptionController.ts +189 -0
  256. package/src/api/subscriptions/entities/subscriptionEvents.ts +54 -0
  257. package/src/api/subscriptions/entities/subscriptions.ts +68 -0
  258. package/src/api/subscriptions/index.ts +133 -0
  259. package/src/api/subscriptions/jobs/SubscriptionJobs.ts +382 -0
  260. package/src/api/subscriptions/middleware/$requireLimit.ts +50 -0
  261. package/src/api/subscriptions/middleware/$requirePlan.ts +49 -0
  262. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +110 -0
  263. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +8 -0
  264. package/src/api/subscriptions/schemas/changePlanSchema.ts +9 -0
  265. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +11 -0
  266. package/src/api/subscriptions/schemas/entitlementsSchema.ts +21 -0
  267. package/src/api/subscriptions/schemas/mrrSchema.ts +13 -0
  268. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +71 -0
  269. package/src/api/subscriptions/schemas/planResourceSchema.ts +25 -0
  270. package/src/api/subscriptions/schemas/subscriptionEventResourceSchema.ts +8 -0
  271. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +19 -0
  272. package/src/api/subscriptions/schemas/subscriptionResourceSchema.ts +6 -0
  273. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +32 -0
  274. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +23 -0
  275. package/src/api/subscriptions/services/BillingService.ts +437 -0
  276. package/src/api/subscriptions/services/SubscriptionConfig.ts +56 -0
  277. package/src/api/subscriptions/services/SubscriptionService.ts +867 -0
  278. package/src/api/subscriptions/services/UsageService.ts +118 -0
  279. package/src/api/users/__tests__/Registration-emailMode.spec.ts +203 -0
  280. package/src/api/users/__tests__/UsernameSlugger.spec.ts +138 -0
  281. package/src/api/users/atoms/realmAuthSettingsAtom.ts +41 -3
  282. package/src/api/users/controllers/AdminSessionController.ts +29 -0
  283. package/src/api/users/controllers/AdminUserController.ts +32 -0
  284. package/src/api/users/index.ts +3 -0
  285. package/src/api/users/services/CredentialService.ts +5 -0
  286. package/src/api/users/services/RegistrationService.ts +49 -1
  287. package/src/api/users/services/SessionCrudService.ts +16 -0
  288. package/src/api/users/services/SessionService.ts +17 -59
  289. package/src/api/users/services/UsernameSlugger.ts +195 -0
  290. package/src/bucket/primitives/$bucket.ts +21 -0
  291. package/src/bucket/providers/CloudflareR2Provider.ts +15 -0
  292. package/src/bucket/providers/FileStorageProvider.ts +9 -0
  293. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -0
  294. package/src/bucket/providers/MemoryFileStorageProvider.ts +9 -0
  295. package/src/bucket/providers/NodeS3BucketProvider.ts +35 -0
  296. package/src/cache/core/__tests__/$cache.memory.spec.ts +450 -0
  297. package/src/cache/core/__tests__/$cache.swr.spec.ts +394 -0
  298. package/src/cache/core/index.ts +16 -0
  299. package/src/cache/core/primitives/$cache.ts +367 -24
  300. package/src/cache/database/__tests__/DatabaseCacheProvider.behavior.spec.ts +203 -0
  301. package/src/cache/database/__tests__/DatabaseCacheProvider.spec.ts +110 -0
  302. package/src/cache/database/entities/cacheEntries.ts +55 -0
  303. package/src/cache/database/index.ts +36 -0
  304. package/src/cache/database/providers/DatabaseCacheProvider.ts +348 -0
  305. package/src/cli/core/services/ProjectScaffolder.ts +0 -2
  306. package/src/cli/core/tasks/BuildCloudflareTask.ts +33 -3
  307. package/src/cli/core/tasks/BuildSitemapTask.ts +7 -0
  308. package/src/cli/core/tasks/BuildVercelTask.ts +82 -3
  309. package/src/cli/core/templates/agentMd.ts +39 -4
  310. package/src/cli/core/templates/biomeJson.ts +25 -1
  311. package/src/cli/core/templates/saasAdminLayoutTsx.ts +2 -2
  312. package/src/cli/platform/__tests__/CloudflareAdapter.spec.ts +117 -0
  313. package/src/cli/platform/__tests__/detectResources.spec.ts +96 -0
  314. package/src/cli/platform/adapters/CloudflareAdapter.ts +104 -7
  315. package/src/cli/platform/atoms/platformOptions.ts +13 -0
  316. package/src/cli/platform/commands/platform.ts +7 -1
  317. package/src/cli/platform/schemas/platform.ts +1 -0
  318. package/src/cli/platform/services/CloudflareApi.ts +61 -0
  319. package/src/cli/platform/services/PlatformOrchestrator.ts +9 -4
  320. package/src/core/__tests__/$module.spec.ts +2 -2
  321. package/src/core/primitives/$module.ts +4 -4
  322. package/src/mcp/providers/McpServerProvider.ts +1 -1
  323. package/src/orm/core/providers/DatabaseTypeProvider.ts +9 -3
  324. package/src/orm/core/providers/drivers/DatabaseProvider.ts +1 -1
  325. package/src/orm/core/schemas/insertSchema.ts +10 -2
  326. package/src/orm/core/services/Repository.ts +27 -7
  327. package/src/react/form/hooks/useFormState.ts +8 -1
  328. package/src/react/form/index.ts +10 -1
  329. package/src/react/form/services/FormModel.ts +9 -3
  330. package/src/scheduler/index.ts +14 -0
  331. package/src/scheduler/providers/CronProvider.ts +13 -0
  332. package/src/security/atoms/currentTenantAtom.ts +34 -0
  333. package/src/security/index.browser.ts +1 -0
  334. package/src/security/index.ts +12 -1
  335. package/src/security/primitives/$issuer.ts +17 -1
  336. package/src/security/providers/SecurityProvider.ts +37 -0
  337. package/src/server/auth/__tests__/validateRedirectUri.spec.ts +78 -0
  338. package/src/server/auth/providers/ServerAuthProvider.ts +21 -5
  339. package/tsconfig.base.json +2 -1
  340. package/dist/react/websocket/index.d.ts +0 -117
  341. package/dist/react/websocket/index.d.ts.map +0 -1
  342. package/dist/react/websocket/index.js +0 -108
  343. package/dist/react/websocket/index.js.map +0 -1
  344. package/dist/websocket/index.browser.js +0 -844
  345. package/dist/websocket/index.browser.js.map +0 -1
  346. package/dist/websocket/index.d.ts +0 -876
  347. package/dist/websocket/index.d.ts.map +0 -1
  348. package/dist/websocket/index.js +0 -1175
  349. package/dist/websocket/index.js.map +0 -1
  350. package/src/react/websocket/hooks/useRoom.tsx +0 -251
  351. package/src/react/websocket/index.ts +0 -7
  352. package/src/websocket/__tests__/$channel.spec.ts +0 -30
  353. package/src/websocket/__tests__/$websocket-new.spec.ts +0 -195
  354. package/src/websocket/__tests__/RoomManager.spec.ts +0 -146
  355. package/src/websocket/__tests__/websocket-integration.spec.ts +0 -951
  356. package/src/websocket/errors/WebSocketError.ts +0 -34
  357. package/src/websocket/index.browser.ts +0 -25
  358. package/src/websocket/index.shared.ts +0 -8
  359. package/src/websocket/index.ts +0 -85
  360. package/src/websocket/interfaces/WebSocketInterfaces.ts +0 -252
  361. package/src/websocket/primitives/$channel.ts +0 -131
  362. package/src/websocket/primitives/$websocket.ts +0 -107
  363. package/src/websocket/providers/NodeWebSocketServerProvider.ts +0 -617
  364. package/src/websocket/providers/WebSocketServerProvider.ts +0 -56
  365. package/src/websocket/services/RoomManager.ts +0 -160
  366. package/src/websocket/services/WebSocketClient.ts +0 -642
  367. package/src/websocket/services/WebSocketTopicService.ts +0 -108
@@ -1,5 +1,6 @@
1
1
  import * as _$alepha from "alepha";
2
2
  import { Static } from "alepha";
3
+ import * as _$typebox from "typebox";
3
4
 
4
5
  //#region ../../src/cli/devtools/atoms/devtoolsOptions.d.ts
5
6
  /**
@@ -7,13 +8,13 @@ import { Static } from "alepha";
7
8
  *
8
9
  * Filled from the `devtools` section of `alepha.config.ts`.
9
10
  */
10
- declare const devtoolsOptions: _$alepha.Atom<_$alepha.TOptional<_$alepha.TObject<{
11
+ declare const devtoolsOptions: _$alepha.Atom<_$typebox.TOptional<_$typebox.TObject<{
11
12
  /**
12
13
  * Hide the floating devtools button in the browser.
13
14
  *
14
15
  * The devtools UI is still accessible at `/__devtools/`.
15
16
  */
16
- hideButton: _$alepha.TOptional<_$alepha.TBoolean>;
17
+ hideButton: _$typebox.TOptional<_$typebox.TBoolean>;
17
18
  }>>, "alepha.cli.devtools.options">;
18
19
  /**
19
20
  * Type for devtools options.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cli/devtools/atoms/devtoolsOptions.ts","../../../src/cli/devtools/index.ts"],"mappings":";;;;;;;AAOA;;cAAa,eAAA,EAAe,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,UAAA,OAAA;EAa1B;;;;;iCAAA,QAAA,CAAA,QAAA;AAAA;;;;KAKU,eAAA,GAAkB,MAAA,QAAc,eAAA,CAAgB,MAAA;;;;;;AAlB5D;;;;;;;;;;;;;;;cCqGa,uBAAA,EAAuB,QAAA,CAAA,OAAA,CAgFlC,QAAA,CAhFkC,MAAA;AAAA,cAkFvB,QAAA,GAAY,OAAA,GAAS,eAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cli/devtools/atoms/devtoolsOptions.ts","../../../src/cli/devtools/index.ts"],"mappings":";;;;;;;;;AAOA;cAAa,eAAA,EAAe,QAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,WAAA,OAAA;;;;;;kCAa1B,SAAA,CAAA,QAAA;AAAA;;;;KAKU,eAAA,GAAkB,MAAA,QAAc,eAAA,CAAgB,MAAA;;;;;;;AAlB5D;;;;;;;;;;;;;;cCqGa,uBAAA,EAAuB,QAAA,CAAA,OAAA,CAgFlC,QAAA,CAhFkC,MAAA;AAAA,cAkFvB,QAAA,GAAY,OAAA,GAAS,eAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/cli/devtools/atoms/devtoolsOptions.ts","../../../src/cli/devtools/index.ts"],"sourcesContent":["import { $atom, type Static, t } from \"alepha\";\n\n/**\n * Devtools configuration atom.\n *\n * Filled from the `devtools` section of `alepha.config.ts`.\n */\nexport const devtoolsOptions = $atom({\n name: \"alepha.cli.devtools.options\",\n description: \"Devtools plugin configuration\",\n schema: t.optional(\n t.object({\n /**\n * Hide the floating devtools button in the browser.\n *\n * The devtools UI is still accessible at `/__devtools/`.\n */\n hideButton: t.optional(t.boolean({ default: false })),\n }),\n ),\n});\n\n/**\n * Type for devtools options.\n */\nexport type DevtoolsOptions = Static<typeof devtoolsOptions.schema>;\n","import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { $context, $module, AlephaError } from \"alepha\";\nimport { ViteDevServerProvider } from \"alepha/cli\";\nimport {\n type DevtoolsOptions,\n devtoolsOptions,\n} from \"./atoms/devtoolsOptions.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst DEVTOOLS_OVERLAY_SCRIPT = `\n(function () {\n if (window.__alepha_devtools_injected) return;\n window.__alepha_devtools_injected = true;\n\n const STORAGE_KEY = \"alepha-devtools-open\";\n\n // Button\n const btn = document.createElement(\"button\");\n btn.id = \"alepha-devtools-btn\";\n btn.innerHTML = \\`<svg width=\"28\" height=\"28\" viewBox=\"0 0 300 300\" xmlns=\"http://www.w3.org/2000/svg\"><defs><linearGradient id=\"adb\" x1=\"142.3\" x2=\"159.6\" y1=\"123.3\" y2=\"176.7\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#33a72c\"/><stop offset=\"1\" stop-color=\"#2d8d40\"/></linearGradient><linearGradient id=\"adc\" x1=\"61.6\" x2=\"100.7\" y1=\"218.5\" y2=\"174\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#298e35\"/><stop offset=\"1\" stop-color=\"#327952\"/></linearGradient><linearGradient id=\"add\" x1=\"262.7\" x2=\"242.2\" y1=\"178.4\" y2=\"220.1\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#32a62d\"/><stop offset=\"1\" stop-color=\"#2d8d40\"/></linearGradient><linearGradient id=\"ade\" x1=\"81.2\" x2=\"69.1\" y1=\"126.7\" y2=\"92.3\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#299a2c\"/><stop offset=\"1\" stop-color=\"#51be40\"/></linearGradient><clipPath id=\"ada\"><path fill=\"none\" d=\"M0 0h300v241H0z\"/></clipPath></defs><g fill=\"none\" stroke-miterlimit=\"10\" clip-path=\"url(#ada)\"><path fill=\"url(#adb)\" d=\"M54 174a182 182 0 0 1 106-51c19-2 37-6 54-15l16-11 3-4 1 1 1 4 1 6v9c0 6-2 12-5 18l-1 4-7 8c-5 7-12 14-19 19l-4 2-11 7v1l-1-1-3 2a120 120 0 0 1-30 8l-8 1-20-1c-21-3-44-10-64 0-5 2-9 4-12 8l-9 9h1l14-9c7-4 15-6 23-7h7l25 3 3 1-2 5-3 5c-4 7-10 14-15 18l-4 3c-12 8-25 12-39 13h-5l-5 1h-8l-7-1H15c0-3 4-7 5-9l7-11 5-8c6-10 14-19 22-28z\"/><path fill=\"#1d524a\" d=\"M178 141c9-1 17-4 24-8l8-4-6 4c-9 7-20 11-32 13l-39 5h-5l-15 3 16 13 18 15-20-1c-21-3-44-10-64 0-5 2-9 4-12 8l-9 9h1l14-9c7-4 15-6 23-7h7l25 3 3 1-2 5-3 5c-4 7-10 14-15 18l-4 3c-12 8-25 12-39 13h-5l-5 1h-8l-7-1H15c0-3 4-7 5-9l7-11 5-8c6-10 14-19 22-28l4-2 23-14 11-5c21-7 43-9 65-9l21-3z\"/><path fill=\"url(#adc)\" d=\"M57 189c7-4 15-6 23-7h7l25 3 3 1-2 5-3 5c-4 7-10 14-15 18l-4 3c-12 8-25 12-39 13h-5l-4-9-2-5 5-2 9-4 10-5 10-4c5-2 10-3 14-6l3-1h-1a1136 1136 0 0 0-43 14c1-6 6-14 9-19 1 0 0 0 0 0z\"/><path fill=\"#2d6f4d\" d=\"m41 216 5-2 9-4 5 3c9 4 18 6 27 4h4c-12 8-25 12-39 13h-5l-4-9-2-5zm16-27s1 0 0 0c-3 5-8 13-9 19l-15 8c0-3 1-9 3-11l3-3 4-4 14-9z\"/><path fill=\"#49b63b\" d=\"M42 198h1l-4 4 3-4z\"/><path fill=\"#2d6f4d\" d=\"m113 154 15-3 11 2 18 8c11 6 23 8 35 5l8-2-11 7v1l-1-1-3 2a120 120 0 0 1-30 8l-8 1-18-15-16-13z\"/><path fill=\"#49b63b\" d=\"M81 158c2-4 11-7 15-8 18-6 36-7 55-8l12-1h15l-21 3c-22 0-44 2-65 9l-11 5z\"/><path fill=\"#2d913b\" d=\"m110 52 2-5 9-14c7-8 19-14 29-18l10-3 12-6 1-1 1 1 1 5v6l6 12 5 10 12 26 2 5 4 10 7 17 4 8c-9 5-20 9-30 12l-16 3-7-14-6-14-5-10-1-3-4 7-13 27-6 11-6 2-24 9 2-4c11-16 14-36 11-56l-3 1-9 5 1-3 9-21 2-5z\"/><path fill=\"#2d6f4d\" d=\"m175 17 6 12 5 10 12 26 2 5 4 10 7 17 4 8c-9 5-20 9-30 12l-16 3-7-14-6-14-5-10-1-3c0-2 5-8 6-10l1-2c9-13 17-28 18-45v-5z\"/><path fill=\"#1d524a\" d=\"m175 17 6 12 5 10 12 26 2 5-3-1-13-8-7 4 3 7-4 1-2-3-5-12-5 7a136 136 0 0 1-10 15l-3 2-1-3c0-2 5-8 6-10l1-2c9-13 17-28 18-45v-5z\"/><path fill=\"#2d6f4d\" d=\"m186 39 12 26 2 5-3-1-13-8-7 4-6-12 8-7 7-7z\"/><path fill=\"#2d913b\" d=\"m177 65 7-4 13 8 3 1 4 10-3 7-7 14-2 8-1-4-6-19a99 99 0 0 0-8-21zm-3 5 2 3 12 32h-1l-8 5c-4 1-9 0-13-2l-1-1c-1-8 2-15 4-22 1-5 2-10 5-15z\"/><path fill=\"#1d524a\" d=\"m110 52 2-5 9-14c7-8 19-14 29-18l10-3 12-6 1-1 1 1c-3 1-3 2-4 4l-11 14-5 5v1c-11 11-22 24-31 37l-5 6-6 11h1l6 12c3 7 8 13 14 17l-6 11-6 2-24 9 2-4c11-16 14-36 11-56l-3 1-9 5 1-3 9-21 2-5z\"/><path fill=\"#49b63b\" d=\"m110 52 2-5 9-14c7-8 19-14 29-18l10-3 12-6 1-1 1 1c-3 1-3 2-4 4l-11 14-5 5-8 7-13 11-5 6c-5-2-10-5-15-3l-3 2z\"/><path fill=\"#2d913b\" d=\"m110 52 3-2c5-2 10 1 15 3l-12 13-6 9-3 1-9 5 1-3 9-21 2-5z\"/><path fill=\"#2d6f4d\" d=\"M121 92c10-5 19-9 28-17l7-6c-1 2-6 8-6 10l-4 7-13 27c-6-4-11-10-14-17l-6-12 4-5 4 13z\"/><path fill=\"#49b63b\" d=\"m154 30-1 11c0 4-3 9-6 12-6 9-19 10-25 19-1 0-3 2-4 1l5-6c9-13 20-26 31-37z\"/><path fill=\"url(#add)\" d=\"m230 135 3 6 11 17 2 5 4 5 3 6 9 14 19 36 4 5c-2 2-19 2-22 2l-5-1h-2c-12 0-25-4-35-10l-4-3c-10-8-15-16-21-27l-7-18v-1l11-7 4-2c7-5 14-12 19-19l7-8z\"/><path fill=\"#1d524a\" d=\"m230 135 3 6 11 17 2 5 4 5 3 6h-1c-10-8-20-9-32-4l23 23 13 12 1 2-20-14-13-12-4-3-5-6c-2 0-2 3-2 5l-1 10c-1 8-2 11 1 19l2 6 2 5c-10-8-15-16-21-27l-7-18v-1l11-7 4-2c7-5 14-12 19-19l7-8z\"/><path fill=\"#2d6f4d\" d=\"m233 141 11 17 2 5 4 5 3 6h-1c-10-8-20-9-32-4l-7-9 15-15 5-5zm-16 76-2-5-2-6c-3-8-2-11-1-19l1-10c0-2 0-5 2-5l5 6 4 3h-1c0 4 8 22 11 26 6 10 15 18 25 22 2 0 3 0 4 2l-5-1h-2c-12 0-25-4-35-10l-4-3z\"/><path fill=\"#2d913b\" d=\"M110 75c3 20 0 40-11 56l-2 4a145 145 0 0 0-43 31l-5 4-11 15v-7l-1-10a143 143 0 0 1 5-29l9-20c13-18 32-29 52-37l4-3 3-4z\"/><path fill=\"url(#ade)\" d=\"m42 139 9-20c13-18 32-29 52-37l4-3-3 7c-4 5-8 11-13 15l-3 3c-6 6-13 12-18 19l-8 11-20 5z\"/><path fill=\"#1d524a\" d=\"M91 101c0 2-4 6-6 8-5 5-10 11-14 18l-9 13-4 9 5 1c4 0 16-9 19-7-10 7-20 14-28 23l-5 4-11 15v-7l-1-10a143 143 0 0 1 5-29l20-5 8-11c5-7 12-13 18-19l3-3z\"/><path fill=\"#2d6f4d\" d=\"m62 134-9 16-3 7-2 4c-3 3-8 5-10 8l-1-1a143 143 0 0 1 5-29l20-5zm0 6 11-5 7-4c5-1 14-2 19 0l-2 4-15 8c-3-2-15 7-19 7l-5-1 4-9z\"/></g></svg>\\`;\n Object.assign(btn.style, {\n position: \"fixed\", bottom: \"16px\", left: \"16px\", zIndex: \"99998\",\n width: \"40px\", height: \"40px\", borderRadius: \"50%\",\n background: \"#fff\", border: \"1px solid #2a2a4a\",\n cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.3)\", transition: \"all 0.2s\",\n padding: \"0\", fontSize: \"0\",\n });\n btn.addEventListener(\"mouseenter\", () => {\n btn.style.transform = \"scale(1.1)\";\n });\n btn.addEventListener(\"mouseleave\", () => {\n btn.style.transform = \"scale(1)\";\n });\n\n // Overlay\n const overlay = document.createElement(\"div\");\n overlay.id = \"alepha-devtools-overlay\";\n Object.assign(overlay.style, {\n position: \"fixed\", inset: \"0\", zIndex: \"99999\",\n background: \"rgba(0,0,0,0.6)\", backdropFilter: \"blur(2px)\",\n display: \"none\", alignItems: \"center\", justifyContent: \"center\",\n });\n\n // Panel\n const panel = document.createElement(\"div\");\n Object.assign(panel.style, {\n width: \"90vw\", height: \"85vh\", maxWidth: \"1400px\",\n borderRadius: \"12px\", overflow: \"hidden\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.5)\",\n border: \"1px solid #2a2a4a\",\n });\n\n const iframe = document.createElement(\"iframe\");\n iframe.style.cssText = \"width:100%;height:100%;border:none;\";\n\n panel.appendChild(iframe);\n overlay.appendChild(panel);\n document.body.appendChild(btn);\n document.body.appendChild(overlay);\n\n function open() {\n if (!iframe.src) iframe.src = \"/__devtools/\";\n overlay.style.display = \"flex\";\n btn.style.display = \"none\";\n sessionStorage.setItem(STORAGE_KEY, \"1\");\n }\n\n function close() {\n overlay.style.display = \"none\";\n btn.style.display = \"flex\";\n sessionStorage.removeItem(STORAGE_KEY);\n }\n\n btn.addEventListener(\"click\", open);\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) close();\n });\n document.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\" && overlay.style.display === \"flex\") close();\n });\n\n // Restore state after HMR\n if (sessionStorage.getItem(STORAGE_KEY)) open();\n})();\n`;\n\n/**\n * CLI plugin that integrates @alepha/devtools into the Vite dev server.\n *\n * This module is intentionally lightweight — it does NOT statically import\n * `@alepha/devtools` (which pulls in `alepha/react` and `.tsx` files).\n * Instead, it lazy-loads devtools via Vite's SSR module loader at runtime.\n *\n * Usage in `alepha.config.ts`:\n * ```ts\n * import { devtools } from \"alepha/cli/devtools\";\n *\n * export default defineConfig({\n * plugins: [devtools()],\n * });\n * ```\n *\n * @module alepha.devtools.plugin\n */\nexport const AlephaCliDevtoolsPlugin = $module({\n name: \"alepha.cli.plugins.devtools\",\n atoms: [devtoolsOptions],\n register: (alepha) => {\n const vite = alepha.inject(ViteDevServerProvider) as ViteDevServerProvider;\n\n const require = createRequire(import.meta.url);\n const pkgPath = require.resolve(\"@alepha/devtools/package.json\");\n const assetsPath = join(dirname(pkgPath), \"assets/ui\");\n\n process.env.VITE_ALEPHA_DEVTOOLS = \"true\";\n\n vite.addVitePlugin({\n name: \"alepha-devtools\",\n configureServer: (server) => {\n // Reload endpoint\n server.middlewares.use((req, res, next) => {\n if (req.url !== \"/__devtools/api/reload\" || req.method !== \"POST\") {\n return next();\n }\n\n vite.reload();\n res.writeHead(200, { \"content-type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n });\n\n // Serve devtools HTML\n server.middlewares.use(async (req, res, next) => {\n const url = req.url || \"/\";\n\n if (\n !url.startsWith(\"/__devtools\") ||\n !req.headers.accept?.includes(\"text/html\")\n ) {\n return next();\n }\n\n const indexPath = join(assetsPath, \"index.html\");\n\n try {\n let html = await readFile(indexPath, \"utf-8\");\n html = html.replace(\n \"<head>\",\n `<head><script type=\"module\" src=\"/@vite/client\"></script>`,\n );\n\n res.writeHead(200, { \"content-type\": \"text/html\" });\n res.end(html);\n } catch {\n next();\n }\n });\n },\n transformIndexHtml: () => {\n const options = alepha.store.get(devtoolsOptions);\n if (options?.hideButton) return [];\n\n return [\n {\n tag: \"script\",\n attrs: { type: \"module\" },\n children: DEVTOOLS_OVERLAY_SCRIPT,\n injectTo: \"head\",\n },\n ];\n },\n });\n\n vite.onAlephaLoaded(async (appAlepha, server) => {\n try {\n const mod = await server.ssrLoadModule(\"@alepha/devtools\");\n appAlepha.with(mod.AlephaDevtools);\n } catch (err) {\n throw new AlephaError(\n \"Failed to load @alepha/devtools. Make sure the package is installed\",\n { cause: err },\n );\n }\n });\n },\n});\n\nexport const devtools = (options: DevtoolsOptions = {}) => {\n return () => {\n const { alepha } = $context();\n alepha.with(AlephaCliDevtoolsPlugin).set(devtoolsOptions, options);\n };\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./atoms/devtoolsOptions.ts\";\n"],"mappings":";;;;;;;;;;;AAOA,MAAa,kBAAkB,MAAM;CACnC,MAAM;CACN,aAAa;CACb,QAAQ,EAAE,SACR,EAAE,OAAO;;;;;;AAMP,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,OAAO,CAAC,CAAC,EACtD,CAAC,CACH;CACF,CAAC;;;ACRF,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGhC,MAAa,0BAA0B,QAAQ;CAC7C,MAAM;CACN,OAAO,CAAC,gBAAgB;CACxB,WAAW,WAAW;EACpB,MAAM,OAAO,OAAO,OAAO,sBAAsB;EAIjD,MAAM,aAAa,KAAK,QAFR,cAAc,OAAO,KAAK,IACnB,CAAC,QAAQ,gCACO,CAAC,EAAE,YAAY;AAEtD,UAAQ,IAAI,uBAAuB;AAEnC,OAAK,cAAc;GACjB,MAAM;GACN,kBAAkB,WAAW;AAE3B,WAAO,YAAY,KAAK,KAAK,KAAK,SAAS;AACzC,SAAI,IAAI,QAAQ,4BAA4B,IAAI,WAAW,OACzD,QAAO,MAAM;AAGf,UAAK,QAAQ;AACb,SAAI,UAAU,KAAK,EAAE,gBAAgB,oBAAoB,CAAC;AAC1D,SAAI,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,CAAC,CAAC;MACrC;AAGF,WAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;AAG/C,SACE,EAHU,IAAI,OAAO,KAGhB,WAAW,cAAc,IAC9B,CAAC,IAAI,QAAQ,QAAQ,SAAS,YAAY,CAE1C,QAAO,MAAM;KAGf,MAAM,YAAY,KAAK,YAAY,aAAa;AAEhD,SAAI;MACF,IAAI,OAAO,MAAM,SAAS,WAAW,QAAQ;AAC7C,aAAO,KAAK,QACV,UACA,6DACD;AAED,UAAI,UAAU,KAAK,EAAE,gBAAgB,aAAa,CAAC;AACnD,UAAI,IAAI,KAAK;aACP;AACN,YAAM;;MAER;;GAEJ,0BAA0B;AAExB,QADgB,OAAO,MAAM,IAAI,gBACtB,EAAE,WAAY,QAAO,EAAE;AAElC,WAAO,CACL;KACE,KAAK;KACL,OAAO,EAAE,MAAM,UAAU;KACzB,UAAU;KACV,UAAU;KACX,CACF;;GAEJ,CAAC;AAEF,OAAK,eAAe,OAAO,WAAW,WAAW;AAC/C,OAAI;IACF,MAAM,MAAM,MAAM,OAAO,cAAc,mBAAmB;AAC1D,cAAU,KAAK,IAAI,eAAe;YAC3B,KAAK;AACZ,UAAM,IAAI,YACR,uEACA,EAAE,OAAO,KAAK,CACf;;IAEH;;CAEL,CAAC;AAEF,MAAa,YAAY,UAA2B,EAAE,KAAK;AACzD,cAAa;EACX,MAAM,EAAE,WAAW,UAAU;AAC7B,SAAO,KAAK,wBAAwB,CAAC,IAAI,iBAAiB,QAAQ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/cli/devtools/atoms/devtoolsOptions.ts","../../../src/cli/devtools/index.ts"],"sourcesContent":["import { $atom, type Static, t } from \"alepha\";\n\n/**\n * Devtools configuration atom.\n *\n * Filled from the `devtools` section of `alepha.config.ts`.\n */\nexport const devtoolsOptions = $atom({\n name: \"alepha.cli.devtools.options\",\n description: \"Devtools plugin configuration\",\n schema: t.optional(\n t.object({\n /**\n * Hide the floating devtools button in the browser.\n *\n * The devtools UI is still accessible at `/__devtools/`.\n */\n hideButton: t.optional(t.boolean({ default: false })),\n }),\n ),\n});\n\n/**\n * Type for devtools options.\n */\nexport type DevtoolsOptions = Static<typeof devtoolsOptions.schema>;\n","import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { $context, $module, AlephaError } from \"alepha\";\nimport { ViteDevServerProvider } from \"alepha/cli\";\nimport {\n type DevtoolsOptions,\n devtoolsOptions,\n} from \"./atoms/devtoolsOptions.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst DEVTOOLS_OVERLAY_SCRIPT = `\n(function () {\n if (window.__alepha_devtools_injected) return;\n window.__alepha_devtools_injected = true;\n\n const STORAGE_KEY = \"alepha-devtools-open\";\n\n // Button\n const btn = document.createElement(\"button\");\n btn.id = \"alepha-devtools-btn\";\n btn.innerHTML = \\`<svg width=\"28\" height=\"28\" viewBox=\"0 0 300 300\" xmlns=\"http://www.w3.org/2000/svg\"><defs><linearGradient id=\"adb\" x1=\"142.3\" x2=\"159.6\" y1=\"123.3\" y2=\"176.7\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#33a72c\"/><stop offset=\"1\" stop-color=\"#2d8d40\"/></linearGradient><linearGradient id=\"adc\" x1=\"61.6\" x2=\"100.7\" y1=\"218.5\" y2=\"174\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#298e35\"/><stop offset=\"1\" stop-color=\"#327952\"/></linearGradient><linearGradient id=\"add\" x1=\"262.7\" x2=\"242.2\" y1=\"178.4\" y2=\"220.1\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#32a62d\"/><stop offset=\"1\" stop-color=\"#2d8d40\"/></linearGradient><linearGradient id=\"ade\" x1=\"81.2\" x2=\"69.1\" y1=\"126.7\" y2=\"92.3\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0\" stop-color=\"#299a2c\"/><stop offset=\"1\" stop-color=\"#51be40\"/></linearGradient><clipPath id=\"ada\"><path fill=\"none\" d=\"M0 0h300v241H0z\"/></clipPath></defs><g fill=\"none\" stroke-miterlimit=\"10\" clip-path=\"url(#ada)\"><path fill=\"url(#adb)\" d=\"M54 174a182 182 0 0 1 106-51c19-2 37-6 54-15l16-11 3-4 1 1 1 4 1 6v9c0 6-2 12-5 18l-1 4-7 8c-5 7-12 14-19 19l-4 2-11 7v1l-1-1-3 2a120 120 0 0 1-30 8l-8 1-20-1c-21-3-44-10-64 0-5 2-9 4-12 8l-9 9h1l14-9c7-4 15-6 23-7h7l25 3 3 1-2 5-3 5c-4 7-10 14-15 18l-4 3c-12 8-25 12-39 13h-5l-5 1h-8l-7-1H15c0-3 4-7 5-9l7-11 5-8c6-10 14-19 22-28z\"/><path fill=\"#1d524a\" d=\"M178 141c9-1 17-4 24-8l8-4-6 4c-9 7-20 11-32 13l-39 5h-5l-15 3 16 13 18 15-20-1c-21-3-44-10-64 0-5 2-9 4-12 8l-9 9h1l14-9c7-4 15-6 23-7h7l25 3 3 1-2 5-3 5c-4 7-10 14-15 18l-4 3c-12 8-25 12-39 13h-5l-5 1h-8l-7-1H15c0-3 4-7 5-9l7-11 5-8c6-10 14-19 22-28l4-2 23-14 11-5c21-7 43-9 65-9l21-3z\"/><path fill=\"url(#adc)\" d=\"M57 189c7-4 15-6 23-7h7l25 3 3 1-2 5-3 5c-4 7-10 14-15 18l-4 3c-12 8-25 12-39 13h-5l-4-9-2-5 5-2 9-4 10-5 10-4c5-2 10-3 14-6l3-1h-1a1136 1136 0 0 0-43 14c1-6 6-14 9-19 1 0 0 0 0 0z\"/><path fill=\"#2d6f4d\" d=\"m41 216 5-2 9-4 5 3c9 4 18 6 27 4h4c-12 8-25 12-39 13h-5l-4-9-2-5zm16-27s1 0 0 0c-3 5-8 13-9 19l-15 8c0-3 1-9 3-11l3-3 4-4 14-9z\"/><path fill=\"#49b63b\" d=\"M42 198h1l-4 4 3-4z\"/><path fill=\"#2d6f4d\" d=\"m113 154 15-3 11 2 18 8c11 6 23 8 35 5l8-2-11 7v1l-1-1-3 2a120 120 0 0 1-30 8l-8 1-18-15-16-13z\"/><path fill=\"#49b63b\" d=\"M81 158c2-4 11-7 15-8 18-6 36-7 55-8l12-1h15l-21 3c-22 0-44 2-65 9l-11 5z\"/><path fill=\"#2d913b\" d=\"m110 52 2-5 9-14c7-8 19-14 29-18l10-3 12-6 1-1 1 1 1 5v6l6 12 5 10 12 26 2 5 4 10 7 17 4 8c-9 5-20 9-30 12l-16 3-7-14-6-14-5-10-1-3-4 7-13 27-6 11-6 2-24 9 2-4c11-16 14-36 11-56l-3 1-9 5 1-3 9-21 2-5z\"/><path fill=\"#2d6f4d\" d=\"m175 17 6 12 5 10 12 26 2 5 4 10 7 17 4 8c-9 5-20 9-30 12l-16 3-7-14-6-14-5-10-1-3c0-2 5-8 6-10l1-2c9-13 17-28 18-45v-5z\"/><path fill=\"#1d524a\" d=\"m175 17 6 12 5 10 12 26 2 5-3-1-13-8-7 4 3 7-4 1-2-3-5-12-5 7a136 136 0 0 1-10 15l-3 2-1-3c0-2 5-8 6-10l1-2c9-13 17-28 18-45v-5z\"/><path fill=\"#2d6f4d\" d=\"m186 39 12 26 2 5-3-1-13-8-7 4-6-12 8-7 7-7z\"/><path fill=\"#2d913b\" d=\"m177 65 7-4 13 8 3 1 4 10-3 7-7 14-2 8-1-4-6-19a99 99 0 0 0-8-21zm-3 5 2 3 12 32h-1l-8 5c-4 1-9 0-13-2l-1-1c-1-8 2-15 4-22 1-5 2-10 5-15z\"/><path fill=\"#1d524a\" d=\"m110 52 2-5 9-14c7-8 19-14 29-18l10-3 12-6 1-1 1 1c-3 1-3 2-4 4l-11 14-5 5v1c-11 11-22 24-31 37l-5 6-6 11h1l6 12c3 7 8 13 14 17l-6 11-6 2-24 9 2-4c11-16 14-36 11-56l-3 1-9 5 1-3 9-21 2-5z\"/><path fill=\"#49b63b\" d=\"m110 52 2-5 9-14c7-8 19-14 29-18l10-3 12-6 1-1 1 1c-3 1-3 2-4 4l-11 14-5 5-8 7-13 11-5 6c-5-2-10-5-15-3l-3 2z\"/><path fill=\"#2d913b\" d=\"m110 52 3-2c5-2 10 1 15 3l-12 13-6 9-3 1-9 5 1-3 9-21 2-5z\"/><path fill=\"#2d6f4d\" d=\"M121 92c10-5 19-9 28-17l7-6c-1 2-6 8-6 10l-4 7-13 27c-6-4-11-10-14-17l-6-12 4-5 4 13z\"/><path fill=\"#49b63b\" d=\"m154 30-1 11c0 4-3 9-6 12-6 9-19 10-25 19-1 0-3 2-4 1l5-6c9-13 20-26 31-37z\"/><path fill=\"url(#add)\" d=\"m230 135 3 6 11 17 2 5 4 5 3 6 9 14 19 36 4 5c-2 2-19 2-22 2l-5-1h-2c-12 0-25-4-35-10l-4-3c-10-8-15-16-21-27l-7-18v-1l11-7 4-2c7-5 14-12 19-19l7-8z\"/><path fill=\"#1d524a\" d=\"m230 135 3 6 11 17 2 5 4 5 3 6h-1c-10-8-20-9-32-4l23 23 13 12 1 2-20-14-13-12-4-3-5-6c-2 0-2 3-2 5l-1 10c-1 8-2 11 1 19l2 6 2 5c-10-8-15-16-21-27l-7-18v-1l11-7 4-2c7-5 14-12 19-19l7-8z\"/><path fill=\"#2d6f4d\" d=\"m233 141 11 17 2 5 4 5 3 6h-1c-10-8-20-9-32-4l-7-9 15-15 5-5zm-16 76-2-5-2-6c-3-8-2-11-1-19l1-10c0-2 0-5 2-5l5 6 4 3h-1c0 4 8 22 11 26 6 10 15 18 25 22 2 0 3 0 4 2l-5-1h-2c-12 0-25-4-35-10l-4-3z\"/><path fill=\"#2d913b\" d=\"M110 75c3 20 0 40-11 56l-2 4a145 145 0 0 0-43 31l-5 4-11 15v-7l-1-10a143 143 0 0 1 5-29l9-20c13-18 32-29 52-37l4-3 3-4z\"/><path fill=\"url(#ade)\" d=\"m42 139 9-20c13-18 32-29 52-37l4-3-3 7c-4 5-8 11-13 15l-3 3c-6 6-13 12-18 19l-8 11-20 5z\"/><path fill=\"#1d524a\" d=\"M91 101c0 2-4 6-6 8-5 5-10 11-14 18l-9 13-4 9 5 1c4 0 16-9 19-7-10 7-20 14-28 23l-5 4-11 15v-7l-1-10a143 143 0 0 1 5-29l20-5 8-11c5-7 12-13 18-19l3-3z\"/><path fill=\"#2d6f4d\" d=\"m62 134-9 16-3 7-2 4c-3 3-8 5-10 8l-1-1a143 143 0 0 1 5-29l20-5zm0 6 11-5 7-4c5-1 14-2 19 0l-2 4-15 8c-3-2-15 7-19 7l-5-1 4-9z\"/></g></svg>\\`;\n Object.assign(btn.style, {\n position: \"fixed\", bottom: \"16px\", left: \"16px\", zIndex: \"99998\",\n width: \"40px\", height: \"40px\", borderRadius: \"50%\",\n background: \"#fff\", border: \"1px solid #2a2a4a\",\n cursor: \"pointer\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n boxShadow: \"0 2px 8px rgba(0,0,0,0.3)\", transition: \"all 0.2s\",\n padding: \"0\", fontSize: \"0\",\n });\n btn.addEventListener(\"mouseenter\", () => {\n btn.style.transform = \"scale(1.1)\";\n });\n btn.addEventListener(\"mouseleave\", () => {\n btn.style.transform = \"scale(1)\";\n });\n\n // Overlay\n const overlay = document.createElement(\"div\");\n overlay.id = \"alepha-devtools-overlay\";\n Object.assign(overlay.style, {\n position: \"fixed\", inset: \"0\", zIndex: \"99999\",\n background: \"rgba(0,0,0,0.6)\", backdropFilter: \"blur(2px)\",\n display: \"none\", alignItems: \"center\", justifyContent: \"center\",\n });\n\n // Panel\n const panel = document.createElement(\"div\");\n Object.assign(panel.style, {\n width: \"90vw\", height: \"85vh\", maxWidth: \"1400px\",\n borderRadius: \"12px\", overflow: \"hidden\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.5)\",\n border: \"1px solid #2a2a4a\",\n });\n\n const iframe = document.createElement(\"iframe\");\n iframe.style.cssText = \"width:100%;height:100%;border:none;\";\n\n panel.appendChild(iframe);\n overlay.appendChild(panel);\n document.body.appendChild(btn);\n document.body.appendChild(overlay);\n\n function open() {\n if (!iframe.src) iframe.src = \"/__devtools/\";\n overlay.style.display = \"flex\";\n btn.style.display = \"none\";\n sessionStorage.setItem(STORAGE_KEY, \"1\");\n }\n\n function close() {\n overlay.style.display = \"none\";\n btn.style.display = \"flex\";\n sessionStorage.removeItem(STORAGE_KEY);\n }\n\n btn.addEventListener(\"click\", open);\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) close();\n });\n document.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Escape\" && overlay.style.display === \"flex\") close();\n });\n\n // Restore state after HMR\n if (sessionStorage.getItem(STORAGE_KEY)) open();\n})();\n`;\n\n/**\n * CLI plugin that integrates @alepha/devtools into the Vite dev server.\n *\n * This module is intentionally lightweight — it does NOT statically import\n * `@alepha/devtools` (which pulls in `alepha/react` and `.tsx` files).\n * Instead, it lazy-loads devtools via Vite's SSR module loader at runtime.\n *\n * Usage in `alepha.config.ts`:\n * ```ts\n * import { devtools } from \"alepha/cli/devtools\";\n *\n * export default defineConfig({\n * plugins: [devtools()],\n * });\n * ```\n *\n * @module alepha.devtools.plugin\n */\nexport const AlephaCliDevtoolsPlugin = $module({\n name: \"alepha.cli.plugins.devtools\",\n atoms: [devtoolsOptions],\n register: (alepha) => {\n const vite = alepha.inject(ViteDevServerProvider) as ViteDevServerProvider;\n\n const require = createRequire(import.meta.url);\n const pkgPath = require.resolve(\"@alepha/devtools/package.json\");\n const assetsPath = join(dirname(pkgPath), \"assets/ui\");\n\n process.env.VITE_ALEPHA_DEVTOOLS = \"true\";\n\n vite.addVitePlugin({\n name: \"alepha-devtools\",\n configureServer: (server) => {\n // Reload endpoint\n server.middlewares.use((req, res, next) => {\n if (req.url !== \"/__devtools/api/reload\" || req.method !== \"POST\") {\n return next();\n }\n\n vite.reload();\n res.writeHead(200, { \"content-type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n });\n\n // Serve devtools HTML\n server.middlewares.use(async (req, res, next) => {\n const url = req.url || \"/\";\n\n if (\n !url.startsWith(\"/__devtools\") ||\n !req.headers.accept?.includes(\"text/html\")\n ) {\n return next();\n }\n\n const indexPath = join(assetsPath, \"index.html\");\n\n try {\n let html = await readFile(indexPath, \"utf-8\");\n html = html.replace(\n \"<head>\",\n `<head><script type=\"module\" src=\"/@vite/client\"></script>`,\n );\n\n res.writeHead(200, { \"content-type\": \"text/html\" });\n res.end(html);\n } catch {\n next();\n }\n });\n },\n transformIndexHtml: () => {\n const options = alepha.store.get(devtoolsOptions);\n if (options?.hideButton) return [];\n\n return [\n {\n tag: \"script\",\n attrs: { type: \"module\" },\n children: DEVTOOLS_OVERLAY_SCRIPT,\n injectTo: \"head\",\n },\n ];\n },\n });\n\n vite.onAlephaLoaded(async (appAlepha, server) => {\n try {\n const mod = await server.ssrLoadModule(\"@alepha/devtools\");\n appAlepha.with(mod.AlephaDevtools);\n } catch (err) {\n throw new AlephaError(\n \"Failed to load @alepha/devtools. Make sure the package is installed\",\n { cause: err },\n );\n }\n });\n },\n});\n\nexport const devtools = (options: DevtoolsOptions = {}) => {\n return () => {\n const { alepha } = $context();\n alepha.with(AlephaCliDevtoolsPlugin).set(devtoolsOptions, options);\n };\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./atoms/devtoolsOptions.ts\";\n"],"mappings":";;;;;;;;;;;AAOA,MAAa,kBAAkB,MAAM;CACnC,MAAM;CACN,aAAa;CACb,QAAQ,EAAE,SACR,EAAE,OAAO;;;;;;AAMP,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,OAAO,CAAC,CAAC,EACtD,CAAC,CACH;CACF,CAAC;;;ACRF,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGhC,MAAa,0BAA0B,QAAQ;CAC7C,MAAM;CACN,OAAO,CAAC,gBAAgB;CACxB,WAAW,WAAW;EACpB,MAAM,OAAO,OAAO,OAAO,sBAAsB;EAIjD,MAAM,aAAa,KAAK,QAFR,cAAc,OAAO,KAAK,IACnB,CAAC,QAAQ,gCACO,CAAC,EAAE,YAAY;EAEtD,QAAQ,IAAI,uBAAuB;EAEnC,KAAK,cAAc;GACjB,MAAM;GACN,kBAAkB,WAAW;IAE3B,OAAO,YAAY,KAAK,KAAK,KAAK,SAAS;KACzC,IAAI,IAAI,QAAQ,4BAA4B,IAAI,WAAW,QACzD,OAAO,MAAM;KAGf,KAAK,QAAQ;KACb,IAAI,UAAU,KAAK,EAAE,gBAAgB,oBAAoB,CAAC;KAC1D,IAAI,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,CAAC,CAAC;MACrC;IAGF,OAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;KAG/C,IACE,EAHU,IAAI,OAAO,KAGhB,WAAW,cAAc,IAC9B,CAAC,IAAI,QAAQ,QAAQ,SAAS,YAAY,EAE1C,OAAO,MAAM;KAGf,MAAM,YAAY,KAAK,YAAY,aAAa;KAEhD,IAAI;MACF,IAAI,OAAO,MAAM,SAAS,WAAW,QAAQ;MAC7C,OAAO,KAAK,QACV,UACA,6DACD;MAED,IAAI,UAAU,KAAK,EAAE,gBAAgB,aAAa,CAAC;MACnD,IAAI,IAAI,KAAK;aACP;MACN,MAAM;;MAER;;GAEJ,0BAA0B;IAExB,IADgB,OAAO,MAAM,IAAI,gBACtB,EAAE,YAAY,OAAO,EAAE;IAElC,OAAO,CACL;KACE,KAAK;KACL,OAAO,EAAE,MAAM,UAAU;KACzB,UAAU;KACV,UAAU;KACX,CACF;;GAEJ,CAAC;EAEF,KAAK,eAAe,OAAO,WAAW,WAAW;GAC/C,IAAI;IACF,MAAM,MAAM,MAAM,OAAO,cAAc,mBAAmB;IAC1D,UAAU,KAAK,IAAI,eAAe;YAC3B,KAAK;IACZ,MAAM,IAAI,YACR,uEACA,EAAE,OAAO,KAAK,CACf;;IAEH;;CAEL,CAAC;AAEF,MAAa,YAAY,UAA2B,EAAE,KAAK;CACzD,aAAa;EACX,MAAM,EAAE,WAAW,UAAU;EAC7B,OAAO,KAAK,wBAAwB,CAAC,IAAI,iBAAiB,QAAQ"}