@edge-base/server 0.1.1

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 (309) hide show
  1. package/admin-build/.gitkeep +0 -0
  2. package/admin-build/_app/env.js +1 -0
  3. package/admin-build/_app/immutable/assets/0.Bm6cF078.css +1 -0
  4. package/admin-build/_app/immutable/assets/1.BfW3pUNa.css +1 -0
  5. package/admin-build/_app/immutable/assets/11.CVmQOewb.css +1 -0
  6. package/admin-build/_app/immutable/assets/12.B1EhbRZT.css +1 -0
  7. package/admin-build/_app/immutable/assets/13.BvwYeuwE.css +1 -0
  8. package/admin-build/_app/immutable/assets/14.CdVfcO0R.css +1 -0
  9. package/admin-build/_app/immutable/assets/15.2yeZ66b-.css +1 -0
  10. package/admin-build/_app/immutable/assets/17.BVg0JEVu.css +1 -0
  11. package/admin-build/_app/immutable/assets/18.Rwnl3x_i.css +1 -0
  12. package/admin-build/_app/immutable/assets/20.DsPWA9AV.css +1 -0
  13. package/admin-build/_app/immutable/assets/21.Dz2RJ56c.css +1 -0
  14. package/admin-build/_app/immutable/assets/22.DwNLk5Ai.css +1 -0
  15. package/admin-build/_app/immutable/assets/23.CFpu0gOO.css +1 -0
  16. package/admin-build/_app/immutable/assets/24.Cy5LBeoJ.css +1 -0
  17. package/admin-build/_app/immutable/assets/25.pUyLVf-h.css +1 -0
  18. package/admin-build/_app/immutable/assets/26.DBcGrlXa.css +1 -0
  19. package/admin-build/_app/immutable/assets/27.BswYyAJD.css +1 -0
  20. package/admin-build/_app/immutable/assets/28.B4ueB1Kf.css +1 -0
  21. package/admin-build/_app/immutable/assets/29.B-qU6PdF.css +1 -0
  22. package/admin-build/_app/immutable/assets/3.Dg81Pgmd.css +1 -0
  23. package/admin-build/_app/immutable/assets/30.CsdWum94.css +1 -0
  24. package/admin-build/_app/immutable/assets/31.U6OwIp50.css +1 -0
  25. package/admin-build/_app/immutable/assets/4.CyawCCux.css +1 -0
  26. package/admin-build/_app/immutable/assets/5.C0YO2HTk.css +1 -0
  27. package/admin-build/_app/immutable/assets/8.Br5jd6kD.css +1 -0
  28. package/admin-build/_app/immutable/assets/Badge.EMYLHBxE.css +1 -0
  29. package/admin-build/_app/immutable/assets/Button.DpzMRTjK.css +1 -0
  30. package/admin-build/_app/immutable/assets/ConfirmDialog.DAnaWRRk.css +1 -0
  31. package/admin-build/_app/immutable/assets/EmptyState.CwKsu57Y.css +1 -0
  32. package/admin-build/_app/immutable/assets/Input.BDUSenmU.css +1 -0
  33. package/admin-build/_app/immutable/assets/Modal.Dm5B0Xie.css +1 -0
  34. package/admin-build/_app/immutable/assets/PageShell.CmU-Xh-b.css +1 -0
  35. package/admin-build/_app/immutable/assets/SchemaFieldEditor.g4NsCdno.css +1 -0
  36. package/admin-build/_app/immutable/assets/Select.BW4Keufm.css +1 -0
  37. package/admin-build/_app/immutable/assets/Skeleton.KWUulTKJ.css +1 -0
  38. package/admin-build/_app/immutable/assets/Tabs.CniGYb67.css +1 -0
  39. package/admin-build/_app/immutable/assets/TimeChart.BTCDAvmT.css +1 -0
  40. package/admin-build/_app/immutable/assets/Toggle.Cy_K12OM.css +1 -0
  41. package/admin-build/_app/immutable/assets/TopList.ClFzmPlA.css +1 -0
  42. package/admin-build/_app/immutable/chunks/7B47DvSx.js +1 -0
  43. package/admin-build/_app/immutable/chunks/7f08Id8e.js +1 -0
  44. package/admin-build/_app/immutable/chunks/8wJeQ7LN.js +1 -0
  45. package/admin-build/_app/immutable/chunks/B-h2afW5.js +1 -0
  46. package/admin-build/_app/immutable/chunks/B8vJP3wz.js +1 -0
  47. package/admin-build/_app/immutable/chunks/BR_fL5Yv.js +1 -0
  48. package/admin-build/_app/immutable/chunks/BY92tFS2.js +1 -0
  49. package/admin-build/_app/immutable/chunks/BcR-Rdj9.js +1 -0
  50. package/admin-build/_app/immutable/chunks/BdrwyZv8.js +1 -0
  51. package/admin-build/_app/immutable/chunks/Bh56EfQ_.js +1 -0
  52. package/admin-build/_app/immutable/chunks/BkrCkgYp.js +1 -0
  53. package/admin-build/_app/immutable/chunks/BmRjiP5k.js +1 -0
  54. package/admin-build/_app/immutable/chunks/BsokvhWC.js +1 -0
  55. package/admin-build/_app/immutable/chunks/C4D51vTW.js +1 -0
  56. package/admin-build/_app/immutable/chunks/C6puvcoR.js +2 -0
  57. package/admin-build/_app/immutable/chunks/CCKNu7m7.js +1 -0
  58. package/admin-build/_app/immutable/chunks/CWj6FrbW.js +1 -0
  59. package/admin-build/_app/immutable/chunks/Ce-ngf4p.js +5 -0
  60. package/admin-build/_app/immutable/chunks/Cs0GwzJA.js +1 -0
  61. package/admin-build/_app/immutable/chunks/CwROoZK0.js +1 -0
  62. package/admin-build/_app/immutable/chunks/CxCPv_Ut.js +1 -0
  63. package/admin-build/_app/immutable/chunks/CxbRue-5.js +1 -0
  64. package/admin-build/_app/immutable/chunks/CyqB6g-D.js +1 -0
  65. package/admin-build/_app/immutable/chunks/D5h5A1cc.js +2 -0
  66. package/admin-build/_app/immutable/chunks/DnyL7Zq-.js +1 -0
  67. package/admin-build/_app/immutable/chunks/DoPXzH7F.js +1 -0
  68. package/admin-build/_app/immutable/chunks/DrQSgw-f.js +1 -0
  69. package/admin-build/_app/immutable/chunks/DttM2zNO.js +1 -0
  70. package/admin-build/_app/immutable/chunks/DuXuUBWN.js +1 -0
  71. package/admin-build/_app/immutable/chunks/MdeqaOQx.js +10 -0
  72. package/admin-build/_app/immutable/chunks/NuUjtcO2.js +1 -0
  73. package/admin-build/_app/immutable/chunks/Q2nPFxS6.js +1 -0
  74. package/admin-build/_app/immutable/chunks/R6arueIl.js +1 -0
  75. package/admin-build/_app/immutable/chunks/UUazaC_N.js +1 -0
  76. package/admin-build/_app/immutable/chunks/cOYbrQxx.js +1 -0
  77. package/admin-build/_app/immutable/chunks/eFQHTGwA.js +1 -0
  78. package/admin-build/_app/immutable/chunks/ehbppgYb.js +1 -0
  79. package/admin-build/_app/immutable/chunks/glwixJlP.js +1 -0
  80. package/admin-build/_app/immutable/chunks/vApWTCBs.js +1 -0
  81. package/admin-build/_app/immutable/chunks/w89G9Xpi.js +1 -0
  82. package/admin-build/_app/immutable/chunks/wJsUhbfZ.js +1 -0
  83. package/admin-build/_app/immutable/chunks/zfauFM8P.js +1 -0
  84. package/admin-build/_app/immutable/entry/app.CcO-Uos3.js +2 -0
  85. package/admin-build/_app/immutable/entry/start.COebYq3I.js +1 -0
  86. package/admin-build/_app/immutable/nodes/0.CjtHKU-6.js +1 -0
  87. package/admin-build/_app/immutable/nodes/1.DEisjlM0.js +1 -0
  88. package/admin-build/_app/immutable/nodes/10.CvhdyWVB.js +1 -0
  89. package/admin-build/_app/immutable/nodes/11.DjHqcOvy.js +1 -0
  90. package/admin-build/_app/immutable/nodes/12.mQLz4Mj_.js +1 -0
  91. package/admin-build/_app/immutable/nodes/13.CBonZZyP.js +110 -0
  92. package/admin-build/_app/immutable/nodes/14.d-oiZL0j.js +3 -0
  93. package/admin-build/_app/immutable/nodes/15.CKPQsUYF.js +1 -0
  94. package/admin-build/_app/immutable/nodes/16.wPzAPQGx.js +1 -0
  95. package/admin-build/_app/immutable/nodes/17.DayhKyEZ.js +1 -0
  96. package/admin-build/_app/immutable/nodes/18.DKwS0Ir0.js +1 -0
  97. package/admin-build/_app/immutable/nodes/19.wPzAPQGx.js +1 -0
  98. package/admin-build/_app/immutable/nodes/2.BKoKrw1i.js +1 -0
  99. package/admin-build/_app/immutable/nodes/20.BvIkkkrW.js +1 -0
  100. package/admin-build/_app/immutable/nodes/21.DMaFhdHk.js +128 -0
  101. package/admin-build/_app/immutable/nodes/22.3xdgwuK1.js +1 -0
  102. package/admin-build/_app/immutable/nodes/23.8Bvgjbsl.js +112 -0
  103. package/admin-build/_app/immutable/nodes/24.DzSSzRhG.js +2 -0
  104. package/admin-build/_app/immutable/nodes/25.9KKYBnAE.js +2 -0
  105. package/admin-build/_app/immutable/nodes/26.Bhn9dfhY.js +1 -0
  106. package/admin-build/_app/immutable/nodes/27.kRLiC24G.js +1 -0
  107. package/admin-build/_app/immutable/nodes/28.BVIN1-7N.js +1 -0
  108. package/admin-build/_app/immutable/nodes/29.3yabZWj4.js +1 -0
  109. package/admin-build/_app/immutable/nodes/3.BFtSOkX7.js +2 -0
  110. package/admin-build/_app/immutable/nodes/30.CyCQlwaP.js +1 -0
  111. package/admin-build/_app/immutable/nodes/31.C4LDXjES.js +1 -0
  112. package/admin-build/_app/immutable/nodes/4.CvbiMlCa.js +1 -0
  113. package/admin-build/_app/immutable/nodes/5.C6BLv2eM.js +1 -0
  114. package/admin-build/_app/immutable/nodes/6.BcXvfl2P.js +1 -0
  115. package/admin-build/_app/immutable/nodes/7.CIuqhPiK.js +1 -0
  116. package/admin-build/_app/immutable/nodes/8.BQOR_JfO.js +1 -0
  117. package/admin-build/_app/immutable/nodes/9.NZqXQxPy.js +1 -0
  118. package/admin-build/_app/version.json +1 -0
  119. package/admin-build/favicon.svg +26 -0
  120. package/admin-build/index.html +45 -0
  121. package/openapi.json +19543 -0
  122. package/package.json +66 -0
  123. package/src/__tests__/admin-assets.test.ts +55 -0
  124. package/src/__tests__/admin-data-routes.test.ts +488 -0
  125. package/src/__tests__/admin-db-target.test.ts +103 -0
  126. package/src/__tests__/admin-routing.test.ts +31 -0
  127. package/src/__tests__/admin-user-management.test.ts +311 -0
  128. package/src/__tests__/analytics-query.test.ts +75 -0
  129. package/src/__tests__/auth-d1.test.ts +749 -0
  130. package/src/__tests__/auth-db-adapter.test.ts +73 -0
  131. package/src/__tests__/auth-jwt.test.ts +440 -0
  132. package/src/__tests__/auth-oauth.test.ts +389 -0
  133. package/src/__tests__/auth-password.test.ts +367 -0
  134. package/src/__tests__/auth-redirect.test.ts +87 -0
  135. package/src/__tests__/backup-restore.test.ts +711 -0
  136. package/src/__tests__/broadcast.test.ts +128 -0
  137. package/src/__tests__/cli.test.ts +178 -0
  138. package/src/__tests__/cloudflare-realtime.test.ts +113 -0
  139. package/src/__tests__/config.test.ts +469 -0
  140. package/src/__tests__/cors.test.ts +154 -0
  141. package/src/__tests__/cron.test.ts +302 -0
  142. package/src/__tests__/d1-handler.test.ts +402 -0
  143. package/src/__tests__/d1-sql.test.ts +120 -0
  144. package/src/__tests__/database-live-config.test.ts +42 -0
  145. package/src/__tests__/database-live-emitter.test.ts +56 -0
  146. package/src/__tests__/database-live-filters.test.ts +63 -0
  147. package/src/__tests__/database-live-route.test.ts +113 -0
  148. package/src/__tests__/db-sql.test.ts +163 -0
  149. package/src/__tests__/do-lifecycle.test.ts +263 -0
  150. package/src/__tests__/do-router.test.ts +729 -0
  151. package/src/__tests__/email-provider.test.ts +128 -0
  152. package/src/__tests__/email-templates.test.ts +528 -0
  153. package/src/__tests__/error-format.test.ts +250 -0
  154. package/src/__tests__/field-ops.test.ts +242 -0
  155. package/src/__tests__/functions-context.test.ts +334 -0
  156. package/src/__tests__/functions-d1-proxy.test.ts +229 -0
  157. package/src/__tests__/functions-registry-runtime-config.test.ts +17 -0
  158. package/src/__tests__/functions-route.test.ts +139 -0
  159. package/src/__tests__/internal-request.test.ts +77 -0
  160. package/src/__tests__/log-writer.test.ts +44 -0
  161. package/src/__tests__/logger.test.ts +58 -0
  162. package/src/__tests__/meta-admin-proxy.test.ts +48 -0
  163. package/src/__tests__/meta-export-coverage.test.ts +191 -0
  164. package/src/__tests__/meta-route-registration.test.ts +47 -0
  165. package/src/__tests__/namespace-dump.test.ts +28 -0
  166. package/src/__tests__/oauth-providers.test.ts +337 -0
  167. package/src/__tests__/openapi-coverage.test.ts +144 -0
  168. package/src/__tests__/pagination.test.ts +59 -0
  169. package/src/__tests__/password-policy.test.ts +191 -0
  170. package/src/__tests__/plugin-migrations.test.ts +379 -0
  171. package/src/__tests__/postgres-batch-compat.test.ts +133 -0
  172. package/src/__tests__/postgres-dialect.test.ts +328 -0
  173. package/src/__tests__/postgres-executor.test.ts +79 -0
  174. package/src/__tests__/postgres-field-ops-compat.test.ts +222 -0
  175. package/src/__tests__/postgres-schema-init.test.ts +105 -0
  176. package/src/__tests__/postgres-table-utils.test.ts +107 -0
  177. package/src/__tests__/presence.test.ts +199 -0
  178. package/src/__tests__/provider.test.ts +550 -0
  179. package/src/__tests__/public-user-profile.test.ts +339 -0
  180. package/src/__tests__/push-handlers.test.ts +179 -0
  181. package/src/__tests__/push-provider.test.ts +80 -0
  182. package/src/__tests__/push-token.test.ts +418 -0
  183. package/src/__tests__/query.test.ts +771 -0
  184. package/src/__tests__/rate-limit.test.ts +260 -0
  185. package/src/__tests__/room-access-policy.test.ts +101 -0
  186. package/src/__tests__/room-handler-context.test.ts +130 -0
  187. package/src/__tests__/room-monitoring.test.ts +138 -0
  188. package/src/__tests__/room-runtime-routing.test.ts +222 -0
  189. package/src/__tests__/room.test.ts +254 -0
  190. package/src/__tests__/route-parser.test.ts +490 -0
  191. package/src/__tests__/rules.test.ts +234 -0
  192. package/src/__tests__/runtime-surface-accounting.test.ts +120 -0
  193. package/src/__tests__/scheduled.test.ts +80 -0
  194. package/src/__tests__/schema.test.ts +1273 -0
  195. package/src/__tests__/security-hardening.test.ts +312 -0
  196. package/src/__tests__/server.unit.test.ts +333 -0
  197. package/src/__tests__/service-key-db-proxy.test.ts +650 -0
  198. package/src/__tests__/service-key-provider-bypass.test.ts +138 -0
  199. package/src/__tests__/service-key.test.ts +757 -0
  200. package/src/__tests__/smoke-skip-report.test.ts +72 -0
  201. package/src/__tests__/sms-provider.test.ts +39 -0
  202. package/src/__tests__/sql-route.test.ts +218 -0
  203. package/src/__tests__/storage-hook-context.test.ts +115 -0
  204. package/src/__tests__/totp.test.ts +200 -0
  205. package/src/__tests__/uuid.test.ts +144 -0
  206. package/src/__tests__/validation.test.ts +773 -0
  207. package/src/__tests__/websocket-pending.test.ts +163 -0
  208. package/src/_functions-registry.ts +51 -0
  209. package/src/bench-entry.ts +9 -0
  210. package/src/cloudflare-test.d.ts +1 -0
  211. package/src/durable-objects/auth-do.ts +49 -0
  212. package/src/durable-objects/database-do.ts +2240 -0
  213. package/src/durable-objects/database-live-do.ts +949 -0
  214. package/src/durable-objects/logs-do.ts +1200 -0
  215. package/src/durable-objects/room-runtime-base.ts +1604 -0
  216. package/src/durable-objects/rooms-do.ts +2191 -0
  217. package/src/generated-config.ts +6 -0
  218. package/src/index.ts +382 -0
  219. package/src/lib/admin-assets.ts +54 -0
  220. package/src/lib/admin-db-target.ts +301 -0
  221. package/src/lib/admin-routing.ts +35 -0
  222. package/src/lib/admin-user-management.ts +464 -0
  223. package/src/lib/analytics-adapter.ts +103 -0
  224. package/src/lib/analytics-query.ts +579 -0
  225. package/src/lib/auth-d1-service.ts +1193 -0
  226. package/src/lib/auth-d1.ts +1056 -0
  227. package/src/lib/auth-db-adapter.ts +289 -0
  228. package/src/lib/auth-redirect.ts +116 -0
  229. package/src/lib/cidr.ts +115 -0
  230. package/src/lib/client-ip.ts +51 -0
  231. package/src/lib/cloudflare-realtime.ts +251 -0
  232. package/src/lib/control-db.ts +36 -0
  233. package/src/lib/cron.ts +163 -0
  234. package/src/lib/d1-handler.ts +1425 -0
  235. package/src/lib/d1-schema-init.ts +255 -0
  236. package/src/lib/d1-sql.ts +33 -0
  237. package/src/lib/database-live-config.ts +24 -0
  238. package/src/lib/database-live-emitter.ts +111 -0
  239. package/src/lib/db-sql.ts +66 -0
  240. package/src/lib/do-retry.ts +36 -0
  241. package/src/lib/do-router.ts +270 -0
  242. package/src/lib/do-sql.ts +73 -0
  243. package/src/lib/email-provider.ts +379 -0
  244. package/src/lib/email-templates.ts +285 -0
  245. package/src/lib/email-translations.ts +422 -0
  246. package/src/lib/errors.ts +151 -0
  247. package/src/lib/functions.ts +2091 -0
  248. package/src/lib/hono.ts +56 -0
  249. package/src/lib/internal-request.ts +56 -0
  250. package/src/lib/jwt.ts +354 -0
  251. package/src/lib/log-writer.ts +272 -0
  252. package/src/lib/namespace-dump.ts +125 -0
  253. package/src/lib/oauth-providers.ts +1225 -0
  254. package/src/lib/op-parser.ts +99 -0
  255. package/src/lib/openapi.ts +146 -0
  256. package/src/lib/pagination.ts +19 -0
  257. package/src/lib/password-policy.ts +102 -0
  258. package/src/lib/password.ts +145 -0
  259. package/src/lib/plugin-migrations.ts +612 -0
  260. package/src/lib/postgres-executor.ts +203 -0
  261. package/src/lib/postgres-handler.ts +1102 -0
  262. package/src/lib/postgres-schema-init.ts +341 -0
  263. package/src/lib/postgres-table-utils.ts +87 -0
  264. package/src/lib/public-user-profile.ts +187 -0
  265. package/src/lib/push-provider.ts +409 -0
  266. package/src/lib/push-token.ts +294 -0
  267. package/src/lib/query-engine.ts +768 -0
  268. package/src/lib/room-monitoring.ts +97 -0
  269. package/src/lib/room-runtime.ts +14 -0
  270. package/src/lib/route-parser.ts +434 -0
  271. package/src/lib/schema.ts +538 -0
  272. package/src/lib/schemas.ts +152 -0
  273. package/src/lib/service-key.ts +419 -0
  274. package/src/lib/sms-provider.ts +230 -0
  275. package/src/lib/startup-config.ts +99 -0
  276. package/src/lib/totp.ts +242 -0
  277. package/src/lib/uuid.ts +87 -0
  278. package/src/lib/validation.ts +205 -0
  279. package/src/lib/version.ts +2 -0
  280. package/src/lib/websocket-pending.ts +40 -0
  281. package/src/middleware/auth.ts +169 -0
  282. package/src/middleware/captcha-verify.ts +217 -0
  283. package/src/middleware/cors.ts +159 -0
  284. package/src/middleware/error-handler.ts +54 -0
  285. package/src/middleware/internal-guard.ts +26 -0
  286. package/src/middleware/logger.ts +126 -0
  287. package/src/middleware/rate-limit.ts +283 -0
  288. package/src/middleware/rules.ts +475 -0
  289. package/src/routes/admin-auth.ts +447 -0
  290. package/src/routes/admin.ts +3501 -0
  291. package/src/routes/analytics-api.ts +290 -0
  292. package/src/routes/auth.ts +4222 -0
  293. package/src/routes/backup.ts +1466 -0
  294. package/src/routes/config.ts +53 -0
  295. package/src/routes/d1.ts +109 -0
  296. package/src/routes/database-live.ts +281 -0
  297. package/src/routes/functions.ts +155 -0
  298. package/src/routes/health.ts +32 -0
  299. package/src/routes/kv.ts +167 -0
  300. package/src/routes/oauth.ts +1055 -0
  301. package/src/routes/push.ts +1465 -0
  302. package/src/routes/room.ts +639 -0
  303. package/src/routes/schema-endpoint.ts +76 -0
  304. package/src/routes/sql.ts +176 -0
  305. package/src/routes/storage.ts +1674 -0
  306. package/src/routes/tables.ts +699 -0
  307. package/src/routes/users.ts +21 -0
  308. package/src/routes/vectorize.ts +372 -0
  309. package/src/types.ts +99 -0
@@ -0,0 +1,3 @@
1
+ import"../chunks/CWj6FrbW.js";import{o as xt,g as $t}from"../chunks/DoPXzH7F.js";import{p as Lt,a as Rt,b,g as e,f as X,c as o,s as r,r as n,ag as Qe,t as F,d as x,ae as q,u as d}from"../chunks/glwixJlP.js";import{d as Ot,s as We,a as Et}from"../chunks/D5h5A1cc.js";import{i as Q}from"../chunks/UUazaC_N.js";import{a as J,A as St,c as Ye,t as be,e as Ze}from"../chunks/CCKNu7m7.js";import{c as Dt,a as h,t as W,f as A}from"../chunks/BR_fL5Yv.js";import{a as et,s as It}from"../chunks/C6puvcoR.js";import{b as tt}from"../chunks/NuUjtcO2.js";import{b as Pt}from"../chunks/CxCPv_Ut.js";import{l as Ct,d as Mt}from"../chunks/DuXuUBWN.js";import{P as Nt}from"../chunks/CwROoZK0.js";import{c as Ut}from"../chunks/Q2nPFxS6.js";import{B as he}from"../chunks/Cs0GwzJA.js";import{B as N}from"../chunks/eFQHTGwA.js";import{I as O}from"../chunks/DrQSgw-f.js";import{T as E}from"../chunks/vApWTCBs.js";var Bt=A("<!> <!>",1),zt=A("<a><!></a> <!>",1),Ht=A('<div class="loading-state svelte-wg73a1"><span class="spinner svelte-wg73a1"></span> Loading settings...</div>'),qt=A('<div class="error-state svelte-wg73a1">Failed to load authentication settings.</div>'),Gt=A('<button type="button" role="tab"> </button>'),jt=A('<div class="target-switch svelte-wg73a1" role="tablist" aria-label="OAuth environment target"></div>'),Jt=A('<div class="provider-card svelte-wg73a1"><div class="provider-card__header svelte-wg73a1"><div><h4 class="provider-card__title svelte-wg73a1"> </h4> <p class="provider-card__hint svelte-wg73a1">Toggle the provider and set its OAuth credentials.</p></div> <div class="provider-card__status svelte-wg73a1"><!> <!></div></div> <div class="provider-card__fields svelte-wg73a1"><!> <!></div></div>'),Vt=A("Core auth behavior is written to <code>edgebase.config.ts</code> and shared across environments. OAuth provider enablement and secrets follow the selected target: <code>Development</code> writes to <code>.env.development</code> and syncs <code>.dev.vars</code>, while <code>Release</code> writes to <code>.env.release</code>, which the deploy pipeline syncs to Cloudflare secrets.",1),Kt=A("The dashboard detected an older dev sidecar that does not support auth editing yet. Restart <code>pnpm dev</code> to enable edits.",1),Xt=A('<div class="settings-grid svelte-wg73a1"><div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Core Methods</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body card__body--stack svelte-wg73a1"><div class="toggle-row svelte-wg73a1"><!> <!></div> <div class="toggle-row svelte-wg73a1"><!> <!></div> <div class="subsection svelte-wg73a1"><div class="subsection__row svelte-wg73a1"><!> <!></div> <!></div> <div class="subsection svelte-wg73a1"><div class="subsection__row svelte-wg73a1"><!> <!></div></div></div></div> <div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><h3 class="card__title svelte-wg73a1">Session</h3></div> <div class="card__body card__body--stack svelte-wg73a1"><!> <!> <!></div></div> <div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Passkeys</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body card__body--stack svelte-wg73a1"><!> <!> <!> <label class="textarea-field svelte-wg73a1"><span class="textarea-field__label svelte-wg73a1">Allowed Origins</span> <textarea class="textarea-field__input svelte-wg73a1" rows="4" placeholder="https://example.com"></textarea></label></div></div> <div class="card card--wide svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Allowed Redirect URLs</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body svelte-wg73a1"><label class="textarea-field svelte-wg73a1"><span class="textarea-field__label svelte-wg73a1">One URL or wildcard per line</span> <textarea class="textarea-field__input svelte-wg73a1" rows="5" placeholder="https://app.example.com/auth/*"></textarea></label></div></div> <div class="card card--wide svelte-wg73a1"><div class="card__header card__header--wrap svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">OAuth Providers</h3> <p class="card__subtitle svelte-wg73a1">Provider allowlists and credentials are stored per target environment.</p></div> <div class="oauth-header-controls svelte-wg73a1"><!> <!></div></div> <div class="card__body provider-grid svelte-wg73a1"></div></div></div> <div class="notice svelte-wg73a1"><!></div>',1);function ua(at,st){Lt(st,!0);const S=[{id:"google",label:"Google"},{id:"github",label:"GitHub"},{id:"apple",label:"Apple"},{id:"discord",label:"Discord"},{id:"microsoft",label:"Microsoft"},{id:"facebook",label:"Facebook"},{id:"kakao",label:"Kakao"},{id:"naver",label:"Naver"},{id:"x",label:"X"},{id:"reddit",label:"Reddit"},{id:"line",label:"Line"},{id:"slack",label:"Slack"},{id:"spotify",label:"Spotify"},{id:"twitch",label:"Twitch"}],lt=[{id:"development",label:"Development"},{id:"release",label:"Release"}];let fe=x(!0),V=x(!1),u=x(!1),ke=x(!1),p=x("development"),l=x(null),U=x(null),m=x(null),$=x(null);function Y(t){return t.split(/\r?\n/).map(i=>i.trim()).filter(Boolean)}function D(t){const i=t.trim();return i||null}function we(t){const i=t.trim();if(!i)return null;const c=Number(i);return Number.isFinite(c)?c:null}function K(t){return{...t}}function it(t){var i,c,v,g,B,z,k,_,f,L,w,T;return{emailAuth:t.emailAuth!==!1,anonymousAuth:!!t.anonymousAuth,allowedRedirectUrlsText:(t.allowedRedirectUrls??[]).join(`
2
+ `),sessionAccessTokenTTL:((i=t.session)==null?void 0:i.accessTokenTTL)??"",sessionRefreshTokenTTL:((c=t.session)==null?void 0:c.refreshTokenTTL)??"",sessionMaxActiveSessions:typeof((v=t.session)==null?void 0:v.maxActiveSessions)=="number"?String(t.session.maxActiveSessions):"",magicLinkEnabled:!!((g=t.magicLink)!=null&&g.enabled),magicLinkAutoCreate:((B=t.magicLink)==null?void 0:B.autoCreate)!==!1,magicLinkTokenTTL:((z=t.magicLink)==null?void 0:z.tokenTTL)??"",emailOtpEnabled:!!((k=t.emailOtp)!=null&&k.enabled),emailOtpAutoCreate:((_=t.emailOtp)==null?void 0:_.autoCreate)!==!1,passkeysEnabled:!!((f=t.passkeys)!=null&&f.enabled),passkeysRpName:((L=t.passkeys)==null?void 0:L.rpName)??"",passkeysRpID:((w=t.passkeys)==null?void 0:w.rpID)??"",passkeysOriginText:(((T=t.passkeys)==null?void 0:T.origin)??[]).join(`
3
+ `)}}function Te(t){var c;const i={};for(const v of S){const g=(c=t.oauth)==null?void 0:c[v.id];i[v.id]={enabled:t.providers.includes(v.id),clientId:(g==null?void 0:g.clientId)??"",clientSecret:(g==null?void 0:g.clientSecret)??""}}return i}function I(t){const i={};for(const c of S)i[c.id]={...t[c.id]};return i}function Z(t){return`auth/settings?target=${t}`}function ee(t,i){const c=S.filter(g=>i[g.id].enabled).map(g=>g.id),v={};for(const g of S)v[g.id]={clientId:D(i[g.id].clientId),clientSecret:D(i[g.id].clientSecret)};return{emailAuth:t.emailAuth,anonymousAuth:t.anonymousAuth,allowedOAuthProviders:c,allowedRedirectUrls:Y(t.allowedRedirectUrlsText),session:{accessTokenTTL:D(t.sessionAccessTokenTTL),refreshTokenTTL:D(t.sessionRefreshTokenTTL),maxActiveSessions:we(t.sessionMaxActiveSessions)},magicLink:{enabled:t.magicLinkEnabled,autoCreate:t.magicLinkAutoCreate,tokenTTL:D(t.magicLinkTokenTTL)},emailOtp:{enabled:t.emailOtpEnabled,autoCreate:t.emailOtpAutoCreate},passkeys:{enabled:t.passkeysEnabled,rpName:D(t.passkeysRpName),rpID:D(t.passkeysRpID),origin:Y(t.passkeysOriginText)},oauth:v}}function te(){return e(m)?e(m)[e(p)]:null}function rt(t,i){for(const c of S){const v=i[c.id];if(v.enabled&&(!v.clientId.trim()||!v.clientSecret.trim()))return`${c.label} requires both a client ID and client secret.`}if(t.passkeysEnabled){if(!t.passkeysRpName.trim()||!t.passkeysRpID.trim())return"Passkeys require both RP Name and RP ID.";if(Y(t.passkeysOriginText).length===0)return"Passkeys require at least one allowed origin."}return t.sessionMaxActiveSessions.trim()&&we(t.sessionMaxActiveSessions)===null?"Max active sessions must be a valid number.":null}function ae(t,i){const c=it(t),v={development:Te(t),release:Te(i??t)};b(U,K(c),!0),b(l,K(c),!0),b($,{development:I(v.development),release:I(v.release)},!0),b(m,{development:I(v.development),release:I(v.release)},!0)}function nt(){!e(U)||!e($)||!e(m)||(b(l,K(e(U)),!0),b(m,{...e(m),[e(p)]:I(e($)[e(p)])},!0))}const ye=d(()=>(()=>{const t=te();return!e(l)||!e(U)||!t||!e($)?!1:JSON.stringify(ee(e(l),t))!==JSON.stringify(ee(e(U),e($)[e(p)]))})()),Ae=d(()=>(()=>{const t=te();return t?S.filter(i=>{var c;return(c=t[i.id])==null?void 0:c.enabled}).length:0})());async function dt(){const t=te();if(!e(u)||!e(l)||!t||!e($))return;const i=rt(e(l),t);if(i){be(i);return}b(V,!0);try{const c=ee(e(l),t);await J.schemaMutation(Z(e(p)),{method:"PUT",body:c}),b(U,K(e(l)),!0),b($,{...e($),[e(p)]:I(t)},!0),b(m,{...e(m),[e(p)]:I(t)},!0),Ye({type:"success",message:e(p)==="release"?"Release auth settings saved to edgebase.config.ts and .env.release.":"Development auth settings saved to edgebase.config.ts and local env files."})}catch(c){be(c instanceof Error?c.message:"Failed to save auth settings")}finally{b(V,!1)}}xt(async()=>{try{if(await Ct(),b(u,$t(Mt).devMode,!0),e(u))try{const t=await J.schemaMutation(Z("development")),i=await J.schemaMutation(Z("release"));ae(t,i)}catch(t){if(t instanceof St&&t.status===404){b(ke,!0),b(u,!1),Ye({type:"warning",message:"Dev sidecar is outdated. Showing read-only auth settings until you restart `pnpm dev`."});const i=await J.fetch("data/auth/settings");ae(i)}else throw t}else{const t=await J.fetch("data/auth/settings");ae(t)}}catch(t){be(t instanceof Error?t.message:"Failed to load auth settings")}finally{b(fe,!1)}}),Nt(at,{title:"Auth Settings",description:"Manage authentication methods and OAuth providers",get docsHref(){return Ut},actions:i=>{var c=zt(),v=X(c),g=o(v);he(g,{variant:"ghost",size:"sm",children:(k,_)=>{q();var f=W("Back to Users");h(k,f)},$$slots:{default:!0}}),n(v);var B=r(v,2);{var z=k=>{var _=Bt(),f=X(_);{let w=d(()=>!e(ye)||e(V));he(f,{variant:"secondary",size:"sm",onclick:nt,get disabled(){return e(w)},children:(T,se)=>{q();var H=W("Reset");h(T,H)},$$slots:{default:!0}})}var L=r(f,2);{let w=d(()=>!e(ye));he(L,{size:"sm",onclick:dt,get disabled(){return e(w)},get loading(){return e(V)},children:(T,se)=>{q();var H=W("Save Changes");h(T,H)},$$slots:{default:!0}})}h(k,_)};Q(B,k=>{e(u)&&e(l)&&k(z)})}F(()=>et(v,"href",`${Pt??""}/auth`)),h(i,c)},children:(i,c)=>{var v=Dt(),g=X(v);{var B=_=>{var f=Ht();h(_,f)},z=_=>{var f=qt();h(_,f)},k=_=>{var f=Xt(),L=X(f),w=o(L),T=o(w),se=r(o(T),2);N(se,{variant:"default",text:"Shared Config"}),n(T);var H=r(T,2),le=o(H),xe=o(le);{let s=d(()=>!e(u));E(xe,{label:"Email / Password",get disabled(){return e(s)},get checked(){return e(l).emailAuth},set checked(a){e(l).emailAuth=a}})}var ot=r(xe,2);{let s=d(()=>e(l).emailAuth?"success":"default"),a=d(()=>e(l).emailAuth?"Enabled":"Disabled");N(ot,{get variant(){return e(s)},get text(){return e(a)}})}n(le);var ie=r(le,2),$e=o(ie);{let s=d(()=>!e(u));E($e,{label:"Anonymous Sign-In",get disabled(){return e(s)},get checked(){return e(l).anonymousAuth},set checked(a){e(l).anonymousAuth=a}})}var ct=r($e,2);{let s=d(()=>e(l).anonymousAuth?"success":"default"),a=d(()=>e(l).anonymousAuth?"Enabled":"Disabled");N(ct,{get variant(){return e(s)},get text(){return e(a)}})}n(ie);var re=r(ie,2),ne=o(re),Le=o(ne);{let s=d(()=>!e(u));E(Le,{label:"Magic Link",get disabled(){return e(s)},get checked(){return e(l).magicLinkEnabled},set checked(a){e(l).magicLinkEnabled=a}})}var vt=r(Le,2);{let s=d(()=>!e(u));E(vt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).magicLinkAutoCreate},set checked(a){e(l).magicLinkAutoCreate=a}})}n(ne);var ut=r(ne,2);{let s=d(()=>!e(u));O(ut,{label:"Magic Link Token TTL",placeholder:"15m",get disabled(){return e(s)},get value(){return e(l).magicLinkTokenTTL},set value(a){e(l).magicLinkTokenTTL=a}})}n(re);var Re=r(re,2),Oe=o(Re),Ee=o(Oe);{let s=d(()=>!e(u));E(Ee,{label:"Email OTP",get disabled(){return e(s)},get checked(){return e(l).emailOtpEnabled},set checked(a){e(l).emailOtpEnabled=a}})}var gt=r(Ee,2);{let s=d(()=>!e(u));E(gt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).emailOtpAutoCreate},set checked(a){e(l).emailOtpAutoCreate=a}})}n(Oe),n(Re),n(H),n(w);var de=r(w,2),Se=r(o(de),2),De=o(Se);{let s=d(()=>!e(u));O(De,{label:"Access Token TTL",placeholder:"15m",get disabled(){return e(s)},get value(){return e(l).sessionAccessTokenTTL},set value(a){e(l).sessionAccessTokenTTL=a}})}var Ie=r(De,2);{let s=d(()=>!e(u));O(Ie,{label:"Refresh Token TTL",placeholder:"7d",get disabled(){return e(s)},get value(){return e(l).sessionRefreshTokenTTL},set value(a){e(l).sessionRefreshTokenTTL=a}})}var pt=r(Ie,2);{let s=d(()=>!e(u));O(pt,{label:"Max Active Sessions",type:"number",placeholder:"Blank = unlimited",get disabled(){return e(s)},get value(){return e(l).sessionMaxActiveSessions},set value(a){e(l).sessionMaxActiveSessions=a}})}n(Se),n(de);var oe=r(de,2),ce=o(oe),mt=r(o(ce),2);{let s=d(()=>e(l).passkeysEnabled?"success":"default"),a=d(()=>e(l).passkeysEnabled?"Enabled":"Disabled");N(mt,{get variant(){return e(s)},get text(){return e(a)}})}n(ce);var Pe=r(ce,2),Ce=o(Pe);{let s=d(()=>!e(u));E(Ce,{label:"Enable Passkeys",get disabled(){return e(s)},get checked(){return e(l).passkeysEnabled},set checked(a){e(l).passkeysEnabled=a}})}var Me=r(Ce,2);{let s=d(()=>!e(u));O(Me,{label:"RP Name",placeholder:"My App",get disabled(){return e(s)},get value(){return e(l).passkeysRpName},set value(a){e(l).passkeysRpName=a}})}var Ne=r(Me,2);{let s=d(()=>!e(u));O(Ne,{label:"RP ID",placeholder:"example.com",get disabled(){return e(s)},get value(){return e(l).passkeysRpID},set value(a){e(l).passkeysRpID=a}})}var Ue=r(Ne,2),ve=r(o(Ue),2);Qe(ve),n(Ue),n(Pe),n(oe);var ue=r(oe,2),ge=o(ue),_t=r(o(ge),2);N(_t,{variant:"default",text:"Shared Config"}),n(ge);var Be=r(ge,2),ze=o(Be),pe=r(o(ze),2);Qe(pe),n(ze),n(Be),n(ue);var He=r(ue,2),me=o(He),qe=r(o(me),2),Ge=o(qe);{let s=d(()=>e(Ae)>0?"primary":"default"),a=d(()=>`${e(Ae)} enabled`);N(Ge,{get variant(){return e(s)},get text(){return e(a)}})}var bt=r(Ge,2);{var ht=s=>{var a=jt();Ze(a,21,()=>lt,P=>P.id,(P,R)=>{var y=Gt();let G;var _e=o(y,!0);n(y),F(()=>{G=It(y,1,"target-switch__button svelte-wg73a1",null,G,{"target-switch__button--active":e(p)===e(R).id}),et(y,"aria-selected",e(p)===e(R).id),We(_e,e(R).label)}),Et("click",y,()=>{b(p,e(R).id,!0)}),h(P,y)}),n(a),h(s,a)};Q(bt,s=>{e(u)&&s(ht)})}n(qe),n(me);var je=r(me,2);Ze(je,21,()=>S,s=>s.id,(s,a)=>{var P=Jt(),R=o(P),y=o(R),G=o(y),_e=o(G,!0);n(G),q(2),n(y);var Ve=r(y,2),Ke=o(Ve);{let C=d(()=>e(m)[e(p)][e(a).id].enabled?"success":"default"),M=d(()=>e(m)[e(p)][e(a).id].enabled?"Enabled":"Disabled");N(Ke,{get variant(){return e(C)},get text(){return e(M)}})}var yt=r(Ke,2);{let C=d(()=>`Enable ${e(a).label}`),M=d(()=>!e(u));E(yt,{get label(){return e(C)},get disabled(){return e(M)},get checked(){return e(m)[e(p)][e(a).id].enabled},set checked(j){e(m)[e(p)][e(a).id].enabled=j}})}n(Ve),n(R);var Xe=r(R,2),Fe=o(Xe);{let C=d(()=>`${e(a).label} client ID`),M=d(()=>!e(u));O(Fe,{label:"Client ID",get placeholder(){return e(C)},get disabled(){return e(M)},get value(){return e(m)[e(p)][e(a).id].clientId},set value(j){e(m)[e(p)][e(a).id].clientId=j}})}var At=r(Fe,2);{let C=d(()=>`${e(a).label} client secret`),M=d(()=>!e(u));O(At,{label:"Client Secret",type:"password",get placeholder(){return e(C)},get disabled(){return e(M)},get value(){return e(m)[e(p)][e(a).id].clientSecret},set value(j){e(m)[e(p)][e(a).id].clientSecret=j}})}n(Xe),n(P),F(()=>We(_e,e(a).label)),h(s,P)}),n(je),n(He),n(L);var Je=r(L,2),ft=o(Je);{var kt=s=>{var a=Vt();q(12),h(s,a)},wt=s=>{var a=Kt();q(2),h(s,a)},Tt=s=>{var a=W("This dashboard is showing runtime auth configuration only. Editing remains disabled outside local dev mode.");h(s,a)};Q(ft,s=>{e(u)?s(kt):e(ke)?s(wt,1):s(Tt,!1)})}n(Je),F(()=>{ve.disabled=!e(u),pe.disabled=!e(u)}),tt(ve,()=>e(l).passkeysOriginText,s=>e(l).passkeysOriginText=s),tt(pe,()=>e(l).allowedRedirectUrlsText,s=>e(l).allowedRedirectUrlsText=s),h(_,f)};Q(g,_=>{e(fe)?_(B):!e(l)||!e(m)?_(z,1):_(k,!1)})}h(i,v)}}),Rt()}Ot(["click"]);export{ua as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{o as ce}from"../chunks/DoPXzH7F.js";import{p as pe,d as m,M as ve,f as I,a as ue,b as t,g as a,s as l,c as o,r,ae as J,t as A,u as fe}from"../chunks/glwixJlP.js";import{d as me,a as be,s as $}from"../chunks/D5h5A1cc.js";import{i as Q}from"../chunks/UUazaC_N.js";import{a as y,b as L,t as S,e as _e,d as ge}from"../chunks/CCKNu7m7.js";import{a as f,f as k,t as M}from"../chunks/BR_fL5Yv.js";import{d as W}from"../chunks/wJsUhbfZ.js";import{P as he}from"../chunks/CwROoZK0.js";import{b as ye}from"../chunks/Q2nPFxS6.js";import{B as U}from"../chunks/Cs0GwzJA.js";import{B as ke}from"../chunks/eFQHTGwA.js";import{C as we}from"../chunks/Bh56EfQ_.js";var De=k('<p class="card__loading svelte-lb9q8r">Loading DO list...</p>'),qe=k('<div class="do-item svelte-lb9q8r"><!> <span class="do-item__name svelte-lb9q8r"> </span></div>'),Oe=k('<div class="do-list svelte-lb9q8r"></div> <div class="card__actions svelte-lb9q8r"><!> <!></div>',1),$e=k('<div class="restore-preview svelte-lb9q8r"><p class="restore-preview__label svelte-lb9q8r">Backup Contents:</p> <ul class="restore-preview__list svelte-lb9q8r"><li> </li> <li> </li> <li> </li></ul></div> <div class="card__actions svelte-lb9q8r"><!></div>',1),Se=k('<div class="backup-layout svelte-lb9q8r"><div class="card svelte-lb9q8r"><div class="card__header svelte-lb9q8r"><h3 class="card__title svelte-lb9q8r">Create Backup</h3></div> <div class="card__body svelte-lb9q8r"><p class="card__desc svelte-lb9q8r">Download a full backup of all Durable Objects and Auth data.</p> <!></div></div> <div class="card svelte-lb9q8r"><div class="card__header svelte-lb9q8r"><h3 class="card__title svelte-lb9q8r">Restore from Backup</h3></div> <div class="card__body svelte-lb9q8r"><p class="card__desc svelte-lb9q8r">Upload a backup JSON file to restore. This will <strong>overwrite existing data</strong>.</p> <div class="restore-upload svelte-lb9q8r"><input type="file" accept=".json" class="restore-input svelte-lb9q8r"/></div> <!></div></div></div>'),Be=k("<!> <!>",1);function Ue(X,Y){pe(Y,!0);let H=m(!0),B=m(ve([])),P=m(!1),T=m(!1),w=m(null),u=m(null),R=m(!1),x=m(!1);ce(async()=>{try{const e=await y.fetch("data/backup/list-dos",{method:"POST"});t(B,e.dos,!0)}catch(e){S(e instanceof Error?e.message:"Failed to load DO list")}finally{t(H,!1)}});async function Z(){t(P,!0);try{const e={version:1,timestamp:new Date().toISOString(),dos:[]},i=[];for(const s of a(B))try{const C=await y.fetch("data/backup/dump-do",{method:"POST",body:{doName:s.doName,type:s.type}});i.push(C)}catch{i.push({doName:s.doName,type:s.type,error:"Failed to dump"})}let n={};try{n=await y.fetch("data/backup/dump-d1",{method:"POST"})}catch(s){console.warn("[EdgeBase] D1 dump failed:",s)}e.dos=i,e.d1=n;const d=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});W(d,`edgebase-backup-${new Date().toISOString().slice(0,10)}.json`),L("Backup downloaded")}catch(e){S(e instanceof Error?e.message:"Backup failed")}finally{t(P,!1)}}async function ee(){t(T,!0);try{const e=await y.fetch("data/backup/dump-d1",{method:"POST"}),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});W(i,`edgebase-d1-backup-${new Date().toISOString().slice(0,10)}.json`),L("D1 backup downloaded")}catch(e){S(e instanceof Error?e.message:"D1 backup failed")}finally{t(T,!1)}}async function ae(e){var n;const i=e.target;if((n=i.files)!=null&&n[0]){t(w,i.files[0],!0);try{const d=await a(w).text();t(u,JSON.parse(d),!0),ge(`Backup loaded: ${a(w).name}`)}catch{S("Invalid backup file. Please select a valid EdgeBase JSON backup file."),t(w,null),t(u,null)}}}async function te(){if(t(x,!1),!!a(u)){t(R,!0);try{const e=a(u);let i=0;const n=e.dos??[];for(const s of n)if(!(s.error||!s.tables))try{await y.fetch("data/backup/restore-do",{method:"POST",body:{doName:s.doName,type:s.type,tables:s.tables}}),i++}catch{}const d=e.d1;if(d!=null&&d.tables)try{await y.fetch("data/backup/restore-d1",{method:"POST",body:{tables:d.tables}}),i++}catch{}L(`Restored ${i} components`),t(w,null),t(u,null)}catch(e){S(e instanceof Error?e.message:"Restore failed")}finally{t(R,!1)}}}var V=Be(),z=I(V);he(z,{title:"Backup & Restore",description:"Create backups and restore data",get docsHref(){return ye},children:(e,i)=>{var n=Se(),d=o(n),s=l(o(d),2),C=l(o(s),2);{var se=v=>{var b=De();f(v,b)},oe=v=>{var b=Oe(),_=I(b);_e(_,21,()=>a(B),c=>c.doName,(c,g)=>{var p=qe(),N=o(p);{let O=fe(()=>a(g).type==="auth"?"warning":"primary");ke(N,{get variant(){return a(O)},get text(){return a(g).type}})}var q=l(N,2),F=o(q,!0);r(q),r(p),A(()=>$(F,a(g).doName)),f(c,p)}),r(_);var D=l(_,2),h=o(D);U(h,{variant:"primary",onclick:Z,get loading(){return a(P)},children:(c,g)=>{J();var p=M();A(()=>$(p,`Download Full Backup (${a(B).length??""} DOs + D1)`)),f(c,p)},$$slots:{default:!0}});var j=l(h,2);U(j,{variant:"secondary",onclick:ee,get loading(){return a(T)},children:(c,g)=>{J();var p=M("D1 Only");f(c,p)},$$slots:{default:!0}}),r(D),f(v,b)};Q(C,v=>{a(H)?v(se):v(oe,!1)})}r(s),r(d);var G=l(d,2),K=l(o(G),2),E=l(o(K),2),le=o(E);r(E);var ie=l(E,2);{var de=v=>{var b=$e(),_=I(b),D=l(o(_),2),h=o(D),j=o(h);r(h);var c=l(h,2),g=o(c);r(c);var p=l(c,2),N=o(p);r(p),r(D),r(_);var q=l(_,2),F=o(q);U(F,{variant:"danger",onclick:()=>t(x,!0),get loading(){return a(R)},children:(O,xe)=>{J();var ne=M("Restore Backup");f(O,ne)},$$slots:{default:!0}}),r(q),A(O=>{$(j,`DOs: ${(a(u).dos??[]).length??""} components`),$(g,`D1: ${a(u).d1?"Included":"Not included"}`),$(N,`Timestamp: ${O??""}`)},[()=>String(a(u).timestamp??"Unknown")]),f(v,b)};Q(ie,v=>{a(u)&&v(de)})}r(K),r(G),r(n),be("change",le,ae),f(e,n)}});var re=l(z,2);we(re,{title:"Confirm Restore",message:"This will overwrite existing data with the backup contents. This action cannot be undone. Are you sure?",confirmLabel:"Restore",confirmVariant:"danger",onconfirm:te,get open(){return a(x)},set open(e){t(x,e,!0)}}),f(X,V),ue()}me(["change"]);export{Ue as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/glwixJlP.js";import{g as r}from"../chunks/BY92tFS2.js";import{b as p}from"../chunks/CxCPv_Ut.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{o as Je}from"../chunks/DoPXzH7F.js";import{p as Qe,d as U,M as lt,w as tn,g as t,a as en,b as z,ab as nn,f as st,c as M,r as L,s as f,ae as ue,t as H,u as F}from"../chunks/glwixJlP.js";import{d as sn,s as N,a as Kt}from"../chunks/D5h5A1cc.js";import{i as mt}from"../chunks/UUazaC_N.js";import{e as xt,i as an}from"../chunks/CCKNu7m7.js";import{c as ve,a as R,f as xe,d as Z}from"../chunks/BR_fL5Yv.js";import{a as s,c as rn,s as on}from"../chunks/C6puvcoR.js";import{b as cn}from"../chunks/CyqB6g-D.js";import{b as ln}from"../chunks/CxCPv_Ut.js";import{s as me}from"../chunks/B-h2afW5.js";import{P as dn}from"../chunks/CwROoZK0.js";import{d as fn}from"../chunks/Q2nPFxS6.js";import{E as hn}from"../chunks/DnyL7Zq-.js";var un=xe('<button type="button" class="erd-jump svelte-1n6qz2s"><span class="erd-jump__dot svelte-1n6qz2s"></span> </button>'),vn=Z('<rect height="24" rx="12" stroke-width="1"></rect><text class="erd-svg__badge svelte-1n6qz2s" text-anchor="middle"> </text>',1),mn=Z('<rect rx="4" fill="#ffffff" stroke="#d4d4d8" stroke-dasharray="5,4"></rect><text class="erd-svg__empty-title svelte-1n6qz2s">No tables yet</text><text class="erd-svg__empty-copy svelte-1n6qz2s">This database block exists in config, but there are no tables to draw.</text>',1),xn=Z('<g><rect rx="6" fill="#fbfbfa" stroke="#cfcfc9" stroke-width="1.4"></rect><line stroke="#d8d8d4" stroke-width="1"></line><text class="erd-svg__block-title svelte-1n6qz2s"> </text><text class="erd-svg__block-copy svelte-1n6qz2s"> </text><!><!></g>'),_n=Z('<rect height="18" rx="3" fill="#ffffff" stroke="#d4d4d8" stroke-width="1"></rect><text class="erd-svg__relation-label svelte-1n6qz2s" text-anchor="middle"> </text>',1),pn=Z('<path fill="none" stroke="#f8fafc" stroke-linecap="square" stroke-linejoin="miter"></path><path fill="none" stroke-linecap="square" stroke-linejoin="miter"></path><circle r="2.6" fill="#44403c"></circle><circle r="2.6" fill="#44403c"></circle><!>',1),yn=Z('<line stroke="#d6d6d6" stroke-width="1"></line>'),gn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s" fill="#111827">PK</text>'),bn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s">FK</text>'),wn=Z('<!><!><text> </text><text class="erd-svg__field-type svelte-1n6qz2s" text-anchor="end"> </text>',1),Mn=Z('<g><rect fill="#ffffff" stroke="#585858" stroke-width="1.3"></rect><rect fill="#dddddd"></rect><line stroke="#585858" stroke-width="1.1"></line><text class="erd-svg__table-title svelte-1n6qz2s"> </text><text class="erd-svg__table-meta svelte-1n6qz2s"> </text><a><rect rx="3" fill="#ffffff" stroke-width="1"></rect><text class="erd-svg__open svelte-1n6qz2s" text-anchor="middle">Open</text></a><!></g>'),Ln=xe('<div class="erd-toolbar svelte-1n6qz2s"><div class="erd-counts svelte-1n6qz2s"><span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span></div> <div class="erd-legend svelte-1n6qz2s"><span class="erd-legend__title svelte-1n6qz2s">Providers</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#2563eb"></span>D1</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#0f766e"></span>DO</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c2410c"></span>Postgres</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c026d3"></span>Neon</span></div></div> <div class="erd-jumpbar svelte-1n6qz2s"><span class="erd-jumpbar__title svelte-1n6qz2s">Jump to DB</span> <!></div> <div class="erd-container svelte-1n6qz2s" role="region" aria-label="Entity relationship diagram. Use the mouse wheel to scroll, drag to pan, and use the controls to zoom or reset the view."><svg class="erd-svg svelte-1n6qz2s" preserveAspectRatio="xMinYMin meet"><rect x="0" y="0" fill="#f5f5f4"></rect><!><!><!></svg> <div class="erd-controls svelte-1n6qz2s"><button type="button" class="erd-control erd-control--wide svelte-1n6qz2s">Reset</button> <button type="button" class="erd-control svelte-1n6qz2s">+</button> <span class="erd-controls__zoom svelte-1n6qz2s"> </span> <button type="button" class="erd-control svelte-1n6qz2s">-</button></div> <div class="erd-hint svelte-1n6qz2s"><span>Readable first</span> <span>Wheel to scroll</span> <span>Drag to pan</span> <span>Use the buttons to zoom</span></div></div>',1);function Yn(_e,pe){Qe(pe,!0);const O=300,it=42,Lt=26,Pt=3,Wt=54,ye=22,at=56,tt=18,Ht=72,It=24,St=28,ge=40,be=20,Ft=24,jt=88,we=900,Me=20,Le=520,_t=1220,pt=760,ke=980,De=680,Ee=.6,$e=2.25,kt=1.1,ze={do:"#0f766e",d1:"#2563eb",postgres:"#c2410c",neon:"#c026d3"};let Dt=U(lt([])),Xt=U(lt([])),rt=U(lt([])),J=U(lt({w:_t,h:pt})),yt=U(lt({x:0,y:0,w:_t,h:pt})),h=U(lt({x:0,y:0,w:_t,h:pt})),j=U(kt),Rt=U(!1),Et=U(lt({x:0,y:0})),D=U(null);function At(e,r){const n=e.replace("#","");if(n.length!==6)return`rgba(107, 114, 128, ${r})`;const a=Number.parseInt(n.slice(0,2),16),c=Number.parseInt(n.slice(2,4),16),l=Number.parseInt(n.slice(4,6),16);return`rgba(${a}, ${c}, ${l}, ${r})`}function Vt(e){const r=["#64748b","#2563eb","#0f766e","#c2410c","#c026d3","#7c3aed"];let n=0;for(const a of e)n=n*33+a.charCodeAt(0)>>>0;return r[n%r.length]??"#64748b"}function Oe(e,r){return e?ze[e]??Vt(r):Vt(r)}function qe(e){return e==="neon"?"NEON":e==="postgres"?"POSTGRES":e==="d1"?"D1":e==="do"?"DO":"UNKNOWN"}function Ce(e){return e?"Per-tenant DB":"Single DB"}function Gt(e){return Math.max(60,e.length*7+18)}function Ut(e){return e.reduce((r,n,a)=>r+Gt(n.label)+(a>0?8:0),0)}function Be(e,r,n){let a=r;return e.map(c=>{const l=Gt(c.label),d={...c,x:a,y:n,width:l};return a+=l+8,d})}function Ke(e){return Math.max(44,e.length*7+14)}function Zt(e,r,n=0){return Math.max(n,e.length*r+10)}function Yt(e){return e?typeof e=="string"?{table:e,column:"id"}:{table:e.table,column:e.column??"id"}:null}function We(e){const r=[{name:"id",type:"uuid",pk:!0}];for(const[n,a]of Object.entries(e||{})){const c=Yt(a.references);r.push({name:n,type:a.type??"text",fk:c==null?void 0:c.table})}return r}function Xe(e){return it+e.length*Lt+8}function dt(e){const r=Math.min(e.w,t(J).w),n=Math.min(e.h,t(J).h),a=Math.max(0,t(J).w-r),c=Math.max(0,t(J).h-n);return{x:Math.min(Math.max(e.x,0),a),y:Math.min(Math.max(e.y,0),c),w:r,h:n}}function Jt(e,r){const n=Math.max(Ee,Math.min($e,e)),a=t(yt).w/n,c=t(yt).h/n;{const l=t(h).x+t(h).w/2,d=t(h).y+t(h).h/2;z(h,dt({x:l-a/2,y:d-c/2,w:a,h:c}),!0)}z(j,n,!0)}function Re(){var n,a;const e=(n=t(D))!=null&&n.clientWidth?Math.max(ke,t(D).clientWidth):_t,r=(a=t(D))!=null&&a.clientHeight?Math.max(De,t(D).clientHeight):pt;return{w:Math.min(t(J).w,e),h:Math.min(t(J).h,r)}}function Tt(e=!1){const r=Re();if(z(yt,{x:0,y:0,w:r.w,h:r.h},!0),e){z(j,kt),z(h,dt({x:0,y:0,w:r.w/kt,h:r.h/kt}),!0);return}const n=r.w/t(j),a=r.h/t(j),c=t(h).x+t(h).w/2,l=t(h).y+t(h).h/2;z(h,dt({x:c-n/2,y:l-a/2,w:n,h:a}),!0)}function Ae(){Tt(!0)}function Ye(e){const r=t(rt).find(c=>c.key===e);if(!r)return;const n=t(yt).w/t(j),a=t(yt).h/t(j);z(h,dt({x:Math.max(0,r.x-24),y:Math.max(0,r.y-24),w:n,h:a}),!0)}function Qt(e){var u,q;e.preventDefault();const r=Math.max(((u=t(D))==null?void 0:u.clientWidth)??1,1),n=Math.max(((q=t(D))==null?void 0:q.clientHeight)??1,1),a=t(h).w/r,c=t(h).h/n;let l=t(h).x+e.deltaX*a,d=t(h).y+e.deltaY*c;e.shiftKey&&Math.abs(e.deltaX)<Math.abs(e.deltaY)&&(l=t(h).x+e.deltaY*a,d=t(h).y),z(h,dt({...t(h),x:l,y:d}),!0)}function te(e){if(e.button!==0)return;const r=e.target;r instanceof Element&&r.closest("a, button, input, textarea, select, [data-no-pan]")||(z(Rt,!0),z(Et,{x:e.clientX,y:e.clientY},!0))}function ee(e){var a,c;if(!t(Rt))return;const r=(e.clientX-t(Et).x)*(t(h).w/Math.max(((a=t(D))==null?void 0:a.clientWidth)??1,1)),n=(e.clientY-t(Et).y)*(t(h).h/Math.max(((c=t(D))==null?void 0:c.clientHeight)??1,1));z(h,dt({...t(h),x:t(h).x-r,y:t(h).y-n}),!0),z(Et,{x:e.clientX,y:e.clientY},!0)}function ne(){z(Rt,!1)}function Te(e,r,n){var a,c,l;return r[n]??{provider:(a=e[0])==null?void 0:a[1].provider,dynamic:(c=e[0])==null?void 0:c[1].dynamic,instanceDiscovery:(l=e[0])==null?void 0:l[1].instanceDiscovery}}function se(e){const r=new Set(e.map(([a])=>a)),n=new Map;for(const[a,c]of e){const l=[];for(const d of Object.values(c.fields||{})){const u=Yt(d.references);u&&r.has(u.table)&&l.push(u.table)}n.set(a,l)}return n}function Ne(e){const r=se(e),n=new Map,a=new Set;function c(l){if(n.has(l))return n.get(l);if(a.has(l))return 0;a.add(l);let d=0;for(const u of r.get(l)??[])d=Math.max(d,c(u)+1);return a.delete(l),n.set(l,d),d}for(const[l]of e)c(l);return n}function Pe(e){const r=se(e),n=new Map;for(const[a]of e)n.set(a,0);for(const[a,c]of r){n.set(a,(n.get(a)??0)+c.length);for(const l of c)n.set(l,(n.get(l)??0)+1)}return n}function He(e){var n;const r=[];for(const[a,c]of Object.entries(e))for(const[l,d]of Object.entries(c.fields||{})){const u=Yt(d.references);u&&r.push({id:`${a}.${l}->${u.table}.${u.column}`,from:a,fromField:l,to:u.table,toField:u.column,fromDatabaseKey:c.namespace||"default",toDatabaseKey:((n=e[u.table])==null?void 0:n.namespace)||"default"})}return r}function Ie(e,r){const n=[];let a=[],c=0;for(const l of e){const d=a.length===0?l.height:c+St+l.height;if(a.length>0&&d>we){n.push({level:r,tables:a,height:c}),a=[l],c=l.height;continue}a.push(l),c=d}return a.length>0&&n.push({level:r,tables:a,height:c}),n}function ae(e,r,n){var l;const a=((l=r.get(e))==null?void 0:l.length)??0;return[n.filter(d=>d.fromDatabaseKey===e||d.toDatabaseKey===e).length,a,e]}function re(e,r){return`${e} internal relation${e===1?"":"s"}`+(r>0?` · ${r} cross-db`:"")}function oe(e){return[{label:qe(e.provider),fill:At(e.color,.12),stroke:At(e.color,.28),color:e.color},{label:Ce(e.dynamic),fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.tableCount} table${e.tableCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.relationCount} relation${e.relationCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"}]}function Se(e,r,n){const a=Zt(e,10,110),c=Zt(n,7,210),l=Math.max(a,c),d=tt*2+l+Me+Ut(r);return Math.max(Le,d)}function ce(e){return t(Dt).find(r=>r.name===e)}function le(e,r){const n=e.fields.findIndex(a=>a.name===r);return e.y+it+(n>=0?n:0)*Lt+Lt/2}function Fe(e,r){const n=ce(e.from),a=ce(e.to);if(!n||!a)return null;const c=le(n,e.fromField),l=le(a,e.toField),d=28+r%5*10;if(a.x>=n.x+O){const m=n.x+O,y=a.x,C=m+(y-m)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}if(a.x+O<=n.x){const m=n.x,y=a.x+O,C=y+(m-y)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}const u=e.toDatabaseKey!==e.fromDatabaseKey||a.y>=n.y,q=u?n.x+O:n.x,p=u?a.x+O:a.x,v=u?Math.max(q,p)+d:Math.min(q,p)-d;return{d:`M ${q} ${c} L ${v} ${c} L ${v} ${l} L ${p} ${l}`,startX:q,startY:c,endX:p,endY:l,labelX:v,labelY:(c+l)/2}}Je(()=>(me.loadSchema(),me.subscribe(r=>{const n=new Map;for(const[p,v]of Object.entries(r.schema).sort(([m],[y])=>m.localeCompare(y))){const m=v.namespace||"default",y=n.get(m)??[];y.push([p,v]),n.set(m,y)}const a=He(r.schema),c=Array.from(new Set([...Object.keys(r.namespaces),...n.keys()])).sort((p,v)=>{const[m,y]=ae(p,n,a),[C,et]=ae(v,n,a);return C!==m?C-m:et!==y?et-y:p.localeCompare(v)}),l=[],d=[];let u=be,q=_t;for(const p of c){const v=n.get(p)??[],m=Te(v,r.namespaces,p),y=Oe(m.provider,p),C=Ne(v),et=Pe(v),Nt=new Map(v),gt=v.length===0?1:Math.max(...C.values(),0)+1,bt=Array.from({length:gt},()=>[]);for(const[i]of v){const x=C.get(i)??0,E=Nt.get(i);if(!E)continue;const b=We(E.fields);bt[x].push({name:i,fields:b,height:Xe(b)})}for(const i of bt)i.sort((x,E)=>{const b=(et.get(E.name)??0)-(et.get(x.name)??0);return b!==0?b:x.name.localeCompare(E.name)});const V=bt.flatMap((i,x)=>Ie(i,x)),ot=v.length===0?jt:Math.max(...V.map(i=>i.height),0),wt=V.reduce((i,x,E)=>{if(E===0)return i;const b=V[E-1];return i+((b==null?void 0:b.level)===x.level?It:Ht)},0),ft=a.filter(i=>i.fromDatabaseKey===p||i.toDatabaseKey===p).length,ht=a.filter(i=>i.fromDatabaseKey===p&&i.toDatabaseKey===p).length,$t=ft-ht,zt=oe({provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft}),Ot=re(ht,$t),Mt=v.length===0?O:V.length*O+wt,ct=Math.max(tt*2+Mt,Se(p,zt,Ot)),qt=at+tt*2+ot,Ct=Ft,g=u;let W=Ct+tt+Math.max(0,(ct-tt*2-Mt)/2);for(const[i,x]of V.entries()){let E=g+at+tt+(ot-x.height)/2;for(const k of x.tables)l.push({name:k.name,databaseKey:p,fields:k.fields,x:W,y:E,height:k.height}),E+=k.height+St;const b=V[i+1];b&&(W+=O+(x.level===b.level?It:Ht))}d.push({key:p,provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft,internalRelationCount:ht,crossRelationCount:$t,x:Ct,y:g,width:ct,height:qt,empty:v.length===0}),u+=qt+ge,q=Math.max(q,ct+Ft*2)}z(Dt,l,!0),z(Xt,a,!0),z(rt,d,!0),z(J,{w:q,h:Math.max(u,pt)},!0),nn().then(()=>{Tt(!0)})}))),tn(()=>{if(!t(D)||typeof window>"u")return;const e=typeof ResizeObserver<"u"?new ResizeObserver(()=>{Tt(!1)}):null,r=()=>ne(),n=()=>ne();return t(D).addEventListener("wheel",Qt,{passive:!1}),t(D).addEventListener("mousedown",te),t(D).addEventListener("mousemove",ee),t(D).addEventListener("mouseleave",n),window.addEventListener("mouseup",r),e==null||e.observe(t(D)),()=>{var a,c,l,d;(a=t(D))==null||a.removeEventListener("wheel",Qt),(c=t(D))==null||c.removeEventListener("mousedown",te),(l=t(D))==null||l.removeEventListener("mousemove",ee),(d=t(D))==null||d.removeEventListener("mouseleave",n),window.removeEventListener("mouseup",r),e==null||e.disconnect()}}),dn(_e,{title:"Schema ERD",description:"Database blocks come directly from edgebase.config.ts, including provider and single vs per-tenant topology.",get docsHref(){return fn},children:(e,r)=>{var n=ve(),a=st(n);{var c=d=>{hn(d,{title:"No databases",description:"Define database blocks in your config to see the ERD."})},l=d=>{var u=Ln(),q=st(u),p=M(q),v=M(p),m=M(v);L(v);var y=f(v,2),C=M(y);L(y);var et=f(y,2),Nt=M(et);L(et),L(p),ue(2),L(q);var gt=f(q,2),bt=f(M(gt),2);xt(bt,17,()=>t(rt),g=>g.key,(g,o)=>{var W=un(),i=M(W),x=f(i);L(W),H(()=>{rn(i,`background:${t(o).color}`),N(x,` ${t(o).key??""}`)}),Kt("click",W,()=>Ye(t(o).key)),R(g,W)}),L(gt);var V=f(gt,2),ot=M(V),wt=M(ot),ft=f(wt);xt(ft,17,()=>t(rt),g=>g.key,(g,o)=>{const W=F(()=>oe(t(o))),i=F(()=>re(t(o).internalRelationCount,t(o).crossRelationCount)),x=F(()=>t(o).x+(t(o).width-O)/2),E=F(()=>Be(t(W),t(o).x+t(o).width-tt-Ut(t(W)),t(o).y+15));var b=xn(),k=M(b),B=f(k),K=f(B),A=M(K,!0);L(K);var I=f(K),S=M(I,!0);L(I);var ut=f(I);xt(ut,17,()=>t(E),Y=>Y.label,(Y,$)=>{var w=vn(),_=st(w),T=f(_),nt=M(T,!0);L(T),H(()=>{s(_,"x",t($).x),s(_,"y",t($).y),s(_,"width",t($).width),s(_,"fill",t($).fill),s(_,"stroke",t($).stroke),s(T,"x",t($).x+t($).width/2),s(T,"y",t($).y+16),s(T,"fill",t($).color),N(nt,t($).label)}),R(Y,w)});var Q=f(ut);{var P=Y=>{var $=mn(),w=st($);s(w,"width",O),s(w,"height",jt);var _=f(w),T=f(_);H(()=>{s(w,"x",t(x)),s(w,"y",t(o).y+at+tt),s(_,"x",t(x)+16),s(_,"y",t(o).y+at+50),s(T,"x",t(x)+16),s(T,"y",t(o).y+at+72)}),R(Y,$)};mt(Q,Y=>{t(o).empty&&Y(P)})}L(b),H(()=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"width",t(o).width),s(k,"height",t(o).height),s(B,"x1",t(o).x),s(B,"y1",t(o).y+at),s(B,"x2",t(o).x+t(o).width),s(B,"y2",t(o).y+at),s(K,"x",t(o).x+18),s(K,"y",t(o).y+25),N(A,t(o).key),s(I,"x",t(o).x+18),s(I,"y",t(o).y+43),N(S,t(i))}),R(g,b)});var ht=f(ft);xt(ht,19,()=>t(Xt),g=>g.id,(g,o,W)=>{const i=F(()=>Fe(t(o),t(W)));var x=ve(),E=st(x);{var b=k=>{var B=pn(),K=st(B),A=f(K),I=f(A),S=f(I),ut=f(S);{var Q=P=>{const Y=F(()=>Ke(t(o).fromField));var $=_n(),w=st($),_=f(w),T=M(_,!0);L(_),H(()=>{s(w,"x",t(i).labelX-t(Y)/2),s(w,"y",t(i).labelY-10),s(w,"width",t(Y)),s(_,"x",t(i).labelX),s(_,"y",t(i).labelY+2),N(T,t(o).fromField)}),R(P,$)};mt(ut,P=>{t(j)>=.95&&P(Q)})}H(()=>{s(K,"d",t(i).d),s(K,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"5.6":"5"),s(A,"d",t(i).d),s(A,"stroke",t(o).fromDatabaseKey===t(o).toDatabaseKey?"#52525b":"#64748b"),s(A,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"2.2":"1.9"),s(A,"stroke-dasharray",t(o).fromDatabaseKey===t(o).toDatabaseKey?void 0:"7 5"),s(I,"cx",t(i).startX),s(I,"cy",t(i).startY),s(S,"cx",t(i).endX),s(S,"cy",t(i).endY)}),R(k,B)};mt(E,k=>{t(i)&&k(b)})}R(g,x)});var $t=f(ht);xt($t,17,()=>t(Dt),g=>g.name,(g,o)=>{const W=F(()=>t(rt).find(w=>w.key===t(o).databaseKey)),i=F(()=>{var w;return((w=t(W))==null?void 0:w.color)??"#64748b"}),x=F(()=>t(o).x+O-Wt-12),E=F(()=>t(o).y+10);var b=Mn(),k=M(b);s(k,"width",O),s(k,"rx",Pt);var B=f(k);s(B,"width",O),s(B,"height",it),s(B,"rx",Pt);var K=f(B),A=f(K),I=M(A,!0);L(A);var S=f(A),ut=M(S,!0);L(S);var Q=f(S),P=M(Q);s(P,"width",Wt),s(P,"height",ye);var Y=f(P);L(Q);var $=f(Q);xt($,17,()=>t(o).fields,an,(w,_,T)=>{const nt=F(()=>t(o).y+it+T*Lt);var ie=wn(),de=st(ie);{var je=G=>{var X=yn();H(()=>{s(X,"x1",t(o).x),s(X,"y1",t(nt)),s(X,"x2",t(o).x+O),s(X,"y2",t(nt))}),R(G,X)};mt(de,G=>{T>0&&G(je)})}var fe=f(de);{var Ve=G=>{var X=gn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17)}),R(G,X)},Ge=G=>{var X=bn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17),s(X,"fill",t(i))}),R(G,X)};mt(fe,G=>{t(_).pk?G(Ve):t(_).fk&&G(Ge,1)})}var vt=f(fe);let he;var Ue=M(vt,!0);L(vt);var Bt=f(vt),Ze=M(Bt,!0);L(Bt),H(()=>{s(vt,"x",t(o).x+(t(_).pk||t(_).fk?36:12)),s(vt,"y",t(nt)+17),he=on(vt,0,"erd-svg__field-name svelte-1n6qz2s",null,he,{"erd-svg__field-name--key":t(_).pk||t(_).fk}),N(Ue,t(_).name),s(Bt,"x",t(o).x+O-12),s(Bt,"y",t(nt)+17),N(Ze,t(_).type)}),R(w,ie)}),L(b),H(w=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"height",t(o).height),s(B,"x",t(o).x),s(B,"y",t(o).y),s(K,"x1",t(o).x),s(K,"y1",t(o).y+it),s(K,"x2",t(o).x+O),s(K,"y2",t(o).y+it),s(A,"x",t(o).x+14),s(A,"y",t(o).y+26),N(I,t(o).name),s(S,"x",t(o).x+14),s(S,"y",t(o).y+39),N(ut,t(o).databaseKey),s(Q,"href",`${ln}/database/tables/${t(o).name}`),s(Q,"aria-label",`Open table ${t(o).name}`),s(P,"x",t(x)),s(P,"y",t(E)),s(P,"stroke",w),s(Y,"x",t(x)+Wt/2),s(Y,"y",t(E)+15)},[()=>At(t(i),.45)]),R(g,b)}),L(ot);var zt=f(ot,2),Ot=M(zt),Mt=f(Ot,2),ct=f(Mt,2),qt=M(ct);L(ct);var Ct=f(ct,2);L(zt),ue(2),L(V),cn(V,g=>z(D,g),()=>t(D)),H(g=>{N(m,`${t(rt).length??""} DB`),N(C,`${t(Dt).length??""} Tables`),N(Nt,`${t(Xt).length??""} Relations`),s(ot,"viewBox",`${t(h).x} ${t(h).y} ${t(h).w} ${t(h).h}`),s(wt,"width",t(J).w),s(wt,"height",t(J).h),N(qt,`${g??""}%`)},[()=>Math.round(t(j)*100)]),Kt("click",Ot,Ae),Kt("click",Mt,()=>Jt(t(j)*1.12)),Kt("click",Ct,()=>Jt(t(j)/1.12)),R(d,u)};mt(a,d=>{t(rt).length===0?d(c):d(l,!1)})}R(e,n)}}),en()}sn(["click"]);export{Yn as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{p as bt,d as p,M as yt,w as pe,g as e,b as t,a as Nt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/glwixJlP.js";import{s as C}from"../chunks/D5h5A1cc.js";import{t as D,a as d,f,c as Pt}from"../chunks/BR_fL5Yv.js";import{i as E}from"../chunks/UUazaC_N.js";import{a as ge,t as V,b as ze,e as $t}from"../chunks/CCKNu7m7.js";import{a as wt,b as ue}from"../chunks/C6puvcoR.js";import{s as kt,a as xt}from"../chunks/B8vJP3wz.js";import{g as Le}from"../chunks/BY92tFS2.js";import{b as me}from"../chunks/CxCPv_Ut.js";import{P as Ct}from"../chunks/CwROoZK0.js";import{d as Dt}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/Cs0GwzJA.js";import{I as L}from"../chunks/DrQSgw-f.js";import{d as Et}from"../chunks/DuXuUBWN.js";import{s as Re}from"../chunks/B-h2afW5.js";var St=f('<div class="create-error svelte-gjmjph"> </div>'),It=f('<div class="readonly-banner svelte-gjmjph">Creating database blocks requires dev mode. Start <code class="svelte-gjmjph">pnpm dev</code> to enable schema edits and Neon helpers.</div>'),Bt=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Ot=f("<option> </option>"),Kt=f("<option> </option>"),Tt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),zt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Lt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),Rt=f('<div class="field-group field-group--helper svelte-gjmjph"><label class="field-label svelte-gjmjph" for="recommended-postgres-env-key">Automatic Postgres Env Key</label> <div id="recommended-postgres-env-key" class="field-static-display svelte-gjmjph"><code class="svelte-gjmjph"> </code></div> <p class="field-help svelte-gjmjph">EdgeBase will write this key into config automatically. Only override it if you already use a specific env key name.</p> <div class="helper-actions svelte-gjmjph"><!></div> <!></div> <div class="field-group field-group--helper neon-helper svelte-gjmjph"><div class="neon-helper__intro svelte-gjmjph"><div class="field-label svelte-gjmjph">Neon Setup (Optional)</div> <p class="field-help svelte-gjmjph">Need Neon right now? Pick one shortcut below. If you already have a connection string, skip this section and use <strong>Create Database</strong>.</p></div> <div class="neon-helper__grid svelte-gjmjph"><section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Existing project</div> <h3 class="neon-helper__option-title svelte-gjmjph">1. Connect an existing Neon project</h3> <p class="field-help svelte-gjmjph">Best when the Neon project already exists in your account.</p></div> <label class="field-label svelte-gjmjph" for="existing-neon-project">Existing Neon Project</label> <select id="existing-neon-project" class="field-select svelte-gjmjph"><!></select> <div class="helper-actions helper-actions--compact svelte-gjmjph"><!></div> <!> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section> <section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Provision new project</div> <h3 class="neon-helper__option-title svelte-gjmjph">2. Create a new Neon project</h3> <p class="field-help svelte-gjmjph">Best when you want EdgeBase to provision Neon for this block.</p></div> <!> <p class="field-help svelte-gjmjph">EdgeBase will try this name first, then append a suffix if Neon already has one.</p> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section></div></div>',1),Mt=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-provider">Provider</label> <select id="db-provider" class="field-select svelte-gjmjph"><option>D1 (default)</option><option>Durable Object</option><option>Postgres</option></select></div> <!>',1),At=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="dynamic-provider">Provider</label> <input id="dynamic-provider" class="field-static svelte-gjmjph" value="Durable Object" disabled=""/> <p class="field-help svelte-gjmjph">Per-tenant DB blocks always use Durable Objects for physical isolation.</p></div> <!> <!> <!>',1),qt=f('<div class="create-page svelte-gjmjph"><!> <!> <div class="create-card svelte-gjmjph"><!> <div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-topology">Type</label> <select id="db-topology" class="field-select svelte-gjmjph"><option>Single DB</option><option>Per-tenant DB</option></select> <p class="field-help svelte-gjmjph"><!></p></div> <!></div> <div class="create-actions svelte-gjmjph"><a><!></a> <!></div></div>');function sa(Me,Ae){bt(Ae,!0);const qe=()=>xt(Et,"$devInfoStore",Fe),[Fe,Ue]=kt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),S=p(null),g=p(""),$=p(!1),H=p(""),I=p(yt([])),b=p(!1),ae=p(!1),M=p(""),O=p(""),w=T(()=>qe().devMode);function Z(i){const y=i.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function he(i){return i.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"edgebase-db"}function W(){return e($)?e(R).trim()||Z(e(c)):Z(e(c))}function re(){return e(H).trim()||he(e(c))}function fe(){const i=e(c).trim();return i?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)?e(m)==="single"&&e(h)==="postgres"&&!W()?(t(g,"Connection string env key is required for postgres."),!1):(e(m)==="single"&&e(h)==="postgres"&&e(S)==="create"&&re(),t(g,""),!0):(t(g,"Database block name must start with a letter or underscore."),!1):(t(g,"Database block name is required."),!1)}async function _e(i=!1){var y;if(e(w)&&!(!i&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(M,"");try{const k=await ge.schemaMutation(i?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(I,k.items??[],!0),t(O,((y=e(I)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(k){t(M,k instanceof Error?k.message:"Failed to load Neon projects.",!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&_e()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function Ge(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function He(){if(!e(w)){t(g,"Creating database blocks requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(fe()){t(te,!0);try{await ge.schemaMutation("schema/databases",{method:"POST",body:{name:e(c).trim(),topology:e(m),provider:e(m)==="single"?e(h):"do",connectionString:e(m)==="single"&&e(h)==="postgres"?W():void 0,targetLabel:e(X).trim()||void 0,placeholder:e(Y).trim()||void 0,helperText:e(ee).trim()||void 0}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" created`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(i){t(g,i instanceof Error?i.message:"Failed to create database block.",!0),V(e(g))}finally{t(te,!1)}}}async function je(i){if(!e(w)){t(g,"Neon helpers require dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(e(m)!=="single"){t(g,"Neon helper only supports single database blocks.");return}if(e(h)!=="postgres"&&t(h,"postgres"),i==="create"&&re(),!!fe()){if(i==="reuse"&&!e(O)){t(g,e(M)||"Choose an existing Neon project first, or create a new one.",!0);return}t(S,i,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:i==="reuse"?e(O):void 0,projectName:i==="create"?re():void 0,mode:i,...e($)?{envKey:W()}:{}}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" connected to Neon`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,y instanceof Error?y.message:"Failed to connect with Neon.",!0),V(e(g))}finally{t(S,null)}}}function Ze(){return!e(b)&&e(I).length>0&&!!e(O)}Ct(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Dt},children:(i,y)=>{var k=qt(),be=l(k);{var We=r=>{var v=St(),_=l(v,!0);n(v),P(()=>C(_,e(g))),d(r,v)};E(be,r=>{e(g)&&r(We)})}var ye=o(be,2);{var Je=r=>{var v=It();d(r,v)};E(ye,r=>{e(w)||r(Je)})}var oe=o(ye,2),Ne=l(oe);L(Ne,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Ne,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var Pe=o(le);Pe.value=Pe.__value="dynamic",n(J);var $e=o(J,2),Qe=l($e);{var Ve=r=>{var v=D("One database shared by the whole app.");d(r,v)},Xe=r=>{var v=D("One isolated database per target ID.");d(r,v)};E(Qe,r=>{e(m)==="single"?r(Ve):r(Xe,!1)})}n($e),n(se);var Ye=o(se,2);{var et=r=>{var v=Mt(),_=G(v),x=o(l(_),2),A=l(x);A.value=A.__value="d1";var N=o(A);N.value=N.__value="do";var ke=o(N);ke.value=ke.__value="postgres",n(x),n(_);var ot=o(_,2);{var st=q=>{var xe=Rt(),ne=G(xe),ie=o(l(ne),2),Ce=l(ie),lt=l(Ce,!0);n(Ce),n(ie);var de=o(ie,4),nt=l(de);z(nt,{variant:"ghost",onclick:Ge,children:(a,s)=>{B();var u=D();P(()=>C(u,e($)?"Hide Env Key Override":"Customize Env Key")),d(a,u)},$$slots:{default:!0}}),n(de);var it=o(de,2);{var dt=a=>{var s=Bt(),u=G(s);{let j=T(()=>Z(e(c)));L(u,{label:"Custom Connection String Env Key",get placeholder(){return e(j)},get value(){return e(R)},set value(K){t(R,K,!0)}})}B(2),d(a,s)};E(it,a=>{e($)&&a(dt)})}n(ne);var De=o(ne,2),Ee=o(l(De),2),ce=l(Ee),F=o(l(ce),4),ct=l(F);{var vt=a=>{var s=Ot(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>C(u,e(b)?"Loading Neon projects...":"No Neon projects found")),d(a,s)},pt=a=>{var s=Pt(),u=G(s);$t(u,17,()=>e(I),j=>j.projectId,(j,K)=>{var U=Kt(),jt=l(U);n(U);var Te={};P(()=>{C(jt,`${e(K).projectName??""} (${e(K).orgName??""})`),Te!==(Te=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),d(j,U)}),d(a,s)};E(ct,a=>{e(I).length===0?a(vt):a(pt,!1)})}n(F);var ve=o(F,2),gt=l(ve);z(gt,{variant:"ghost",onclick:()=>_e(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=D("Refresh Projects");d(a,u)},$$slots:{default:!0}}),n(ve);var Se=o(ve,2);{var ut=a=>{var s=Tt(),u=l(s,!0);n(s),P(()=>C(u,e(M))),d(a,s)},mt=a=>{var s=zt();d(a,s)},ht=a=>{var s=Lt();d(a,s)};E(Se,a=>{e(M)?a(ut):!e(b)&&e(I).length===0?a(mt,1):e(b)||a(ht,2)})}var Ie=o(Se,2),ft=l(Ie);{let a=T(()=>!e(w)||!Ze()||e(S)!==null);z(ft,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("reuse"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),d(s,j)},$$slots:{default:!0}})}n(Ie),n(ce);var Be=o(ce,2),Oe=o(l(Be),2);{let a=T(()=>he(e(c)));L(Oe,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Ke=o(Oe,4),_t=l(Ke);{let a=T(()=>!e(w)||e(S)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("create"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="create"?"Creating Neon Project...":"Create New Neon Project")),d(s,j)},$$slots:{default:!0}})}n(Ke),n(Be),n(Ee),n(De),P(a=>{C(lt,a),F.disabled=e(b)||e(I).length===0},[W]),ue(F,()=>e(O),a=>t(O,a)),d(q,xe)};E(ot,q=>{e(h)==="postgres"&&q(st)})}ue(x,()=>e(h),q=>t(h,q)),d(r,v)},tt=r=>{var v=At(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var x=o(_,2);L(x,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var A=o(x,2);L(A,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),d(r,v)};E(Ye,r=>{e(m)==="single"?r(et):r(tt,!1)})}n(oe);var we=o(oe,2),Q=l(we),at=l(Q);z(at,{variant:"secondary",children:(r,v)=>{B();var _=D("Cancel");d(r,_)},$$slots:{default:!0}}),n(Q);var rt=o(Q,2);{let r=T(()=>!e(w));z(rt,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:He,children:(v,_)=>{B();var x=D("Create Database");d(v,x)},$$slots:{default:!0}})}n(we),n(k),P(()=>wt(Q,"href",`${me??""}/database/tables`)),ue(J,()=>e(m),r=>t(m,r)),d(i,k)}}),Nt(),Ue()}export{sa as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/glwixJlP.js";import{g as r}from"../chunks/BY92tFS2.js";import{b as p}from"../chunks/CxCPv_Ut.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{f as m}from"../chunks/glwixJlP.js";import{c as n,a as p}from"../chunks/BR_fL5Yv.js";import{s as i}from"../chunks/CxbRue-5.js";function d(r,t){var o=n(),a=m(o);i(a,()=>t.children),p(r,o)}export{d as component};
@@ -0,0 +1 @@
1
+ import"../chunks/CWj6FrbW.js";import{i as x}from"../chunks/BmRjiP5k.js";import{p as V,t as v,a as z,c as k,s as a,r as f,f as $}from"../chunks/glwixJlP.js";import{a as s,f as n}from"../chunks/BR_fL5Yv.js";import{i as D}from"../chunks/UUazaC_N.js";import{a as r}from"../chunks/C6puvcoR.js";import{s as S,a as B}from"../chunks/B8vJP3wz.js";import{b as i}from"../chunks/CxCPv_Ut.js";import{d as y}from"../chunks/DuXuUBWN.js";import{E as j}from"../chunks/DnyL7Zq-.js";import{e as E}from"../chunks/Q2nPFxS6.js";var I=n('<a class="hint-link svelte-zaw5ak"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 4.5C3 3.67157 3.67157 3 4.5 3H11.5C12.3284 3 13 3.67157 13 4.5V11.5C13 12.3284 12.3284 13 11.5 13H4.5C3.67157 13 3 12.3284 3 11.5V4.5Z" stroke="currentColor" stroke-width="1.5"></path><path d="M8 5.5V10.5M5.5 8H10.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg> Create Database</a> <a class="hint-link hint-link--primary svelte-zaw5ak"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 3V13M3 8H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg> Create Table</a>',1),q=n('<span class="hint-note svelte-zaw5ak">Create DB, create table, schema edits, and upgrades require dev mode. Start <code class="svelte-zaw5ak">pnpm dev</code>.</span>'),Z=n('<div class="tables-welcome svelte-zaw5ak"><!> <div class="tables-hint svelte-zaw5ak"><!> <a class="hint-link svelte-zaw5ak"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="2" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"></rect><rect x="10" y="10" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M6 4H8.5V12H10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg> View ERD Diagram</a> <a class="hint-link svelte-zaw5ak" target="_blank" rel="noreferrer"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 2H10L13 5V14H3V2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M10 2V5H13" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M6 8H10M6 10.5H9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg> Open Docs</a></div></div>');function Q(m,w){V(w,!1);const u=()=>B(y,"$devInfoStore",g),[g,b]=S();x();var o=Z(),l=k(o);j(l,{title:"Select a table",description:"Choose a table from the sidebar to inspect schema, browse records, or run queries against the current database target."});var d=a(l,2),h=k(d);{var C=e=>{var t=I(),c=$(t),M=a(c,2);v(()=>{r(c,"href",`${i??""}/database/new`),r(M,"href",`${i??""}/database/tables/new`)}),s(e,t)},_=e=>{var t=q();s(e,t)};D(h,e=>{u().devMode?e(C):e(_,!1)})}var p=a(h,2),H=a(p,2);f(d),f(o),v(()=>{r(p,"href",`${i??""}/database/erd`),r(H,"href",E)}),s(m,o),z(),b()}export{Q as component};