@edge-base/server 0.2.7 → 0.2.8

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 (65) hide show
  1. package/admin-build/_app/immutable/chunks/{DnpbvAPi.js → B9efkx2V.js} +1 -1
  2. package/admin-build/_app/immutable/chunks/{BhCO1Fpt.js → BMXWUTG-.js} +1 -1
  3. package/admin-build/_app/immutable/chunks/{CIOC1v_q.js → Bt4AyT3o.js} +3 -3
  4. package/admin-build/_app/immutable/chunks/CKVjMXZi.js +1 -0
  5. package/admin-build/_app/immutable/chunks/{BfpUQYr3.js → CMYgGhZR.js} +1 -1
  6. package/admin-build/_app/immutable/chunks/{DaXO-sFP.js → CTRjWhGs.js} +1 -1
  7. package/admin-build/_app/immutable/chunks/{BDYewzou.js → CwyE59Yt.js} +1 -1
  8. package/admin-build/_app/immutable/chunks/{D1u3u7xu.js → D8aeTKry.js} +1 -1
  9. package/admin-build/_app/immutable/chunks/{BYyykAbh.js → DGAHkap7.js} +1 -1
  10. package/admin-build/_app/immutable/chunks/{ejoEf2I5.js → DPgR4-0v.js} +1 -1
  11. package/admin-build/_app/immutable/chunks/{Dz9cUCuv.js → DYtrHeVQ.js} +1 -1
  12. package/admin-build/_app/immutable/chunks/{CvczjTXx.js → DcVb45Ds.js} +1 -1
  13. package/admin-build/_app/immutable/chunks/Djnkhy-S.js +1 -0
  14. package/admin-build/_app/immutable/chunks/{Tea2dBJ8.js → fPy6xmgG.js} +1 -1
  15. package/admin-build/_app/immutable/chunks/{iEyeblJR.js → j4jxnAKj.js} +1 -1
  16. package/admin-build/_app/immutable/chunks/{BEM1BeVF.js → zl2AUKMP.js} +1 -1
  17. package/admin-build/_app/immutable/entry/{app.DoUaxnew.js → app.Cmz0WjMl.js} +2 -2
  18. package/admin-build/_app/immutable/entry/start.JE7dcbK1.js +1 -0
  19. package/admin-build/_app/immutable/nodes/{0.Dsxi8s7i.js → 0.y6D_QyUb.js} +1 -1
  20. package/admin-build/_app/immutable/nodes/{1.Cp2l-hol.js → 1.CndRxhbH.js} +1 -1
  21. package/admin-build/_app/immutable/nodes/{10.4oY6m8Nz.js → 10.CdA5FmXy.js} +1 -1
  22. package/admin-build/_app/immutable/nodes/{11.DfcozD4J.js → 11.DG8SzMp_.js} +1 -1
  23. package/admin-build/_app/immutable/nodes/{12.uJgZdCIA.js → 12.CvmQqpFa.js} +1 -1
  24. package/admin-build/_app/immutable/nodes/{13.CaN1kRev.js → 13.BbGNdswT.js} +1 -1
  25. package/admin-build/_app/immutable/nodes/{14.DQ5xIi3s.js → 14.CZKsN7-O.js} +1 -1
  26. package/admin-build/_app/immutable/nodes/{15.B_EkebTJ.js → 15.A7-CYgkG.js} +1 -1
  27. package/admin-build/_app/immutable/nodes/{16.Tko1ZX8-.js → 16.hgJT9H-x.js} +1 -1
  28. package/admin-build/_app/immutable/nodes/{17.BCmWMJX9.js → 17.DkWZbcN2.js} +1 -1
  29. package/admin-build/_app/immutable/nodes/{18.hmGhl1O2.js → 18.sX3Fb5gh.js} +1 -1
  30. package/admin-build/_app/immutable/nodes/{19.D-1infOo.js → 19.VAZUW-1K.js} +1 -1
  31. package/admin-build/_app/immutable/nodes/{20.CY4KKcBL.js → 20.DkIKxacG.js} +1 -1
  32. package/admin-build/_app/immutable/nodes/21.DOjJlQKc.js +1 -0
  33. package/admin-build/_app/immutable/nodes/{22.14Vd7bnt.js → 22.BDaHvtaw.js} +1 -1
  34. package/admin-build/_app/immutable/nodes/{23.Be6jK77o.js → 23.BVRzw_pD.js} +1 -1
  35. package/admin-build/_app/immutable/nodes/{24.CSTFkr6R.js → 24.CVhSJyG0.js} +1 -1
  36. package/admin-build/_app/immutable/nodes/{25.DRTg8fHc.js → 25.Bme-9bZn.js} +1 -1
  37. package/admin-build/_app/immutable/nodes/{26.DKt-9lwQ.js → 26.Dsx7RIIs.js} +1 -1
  38. package/admin-build/_app/immutable/nodes/{27.D5caPu0F.js → 27.DMGQnzFM.js} +1 -1
  39. package/admin-build/_app/immutable/nodes/{28.hJhlnlyY.js → 28.GGwFmEhZ.js} +1 -1
  40. package/admin-build/_app/immutable/nodes/{29.CDYBzFyT.js → 29.Dnghr0nk.js} +1 -1
  41. package/admin-build/_app/immutable/nodes/{3.DMyKwkGn.js → 3.Cg7zZJP1.js} +1 -1
  42. package/admin-build/_app/immutable/nodes/{30.BaHNeEmc.js → 30.C0J24z3I.js} +1 -1
  43. package/admin-build/_app/immutable/nodes/{31.C6PV5L-2.js → 31.MdxFI8v6.js} +1 -1
  44. package/admin-build/_app/immutable/nodes/{4.9E118Ftm.js → 4.DCAOVzGE.js} +1 -1
  45. package/admin-build/_app/immutable/nodes/{5.D8guAl3v.js → 5.DzUQ-cTc.js} +1 -1
  46. package/admin-build/_app/immutable/nodes/{6.D1u__DtT.js → 6.CptBYTVj.js} +1 -1
  47. package/admin-build/_app/immutable/nodes/{7.DWXHnRFf.js → 7.DfeeQ0Rg.js} +1 -1
  48. package/admin-build/_app/immutable/nodes/{8.Dojd8krc.js → 8.CIcvctW7.js} +1 -1
  49. package/admin-build/_app/immutable/nodes/{9.CLtrr0K_.js → 9.QKrvq4RA.js} +1 -1
  50. package/admin-build/_app/version.json +1 -1
  51. package/admin-build/index.html +7 -7
  52. package/package.json +3 -3
  53. package/src/__tests__/admin-assets.test.ts +7 -7
  54. package/src/__tests__/frontend-assets.test.ts +75 -0
  55. package/src/__tests__/frontend-config.test.ts +16 -0
  56. package/src/__tests__/frontend-routing.test.ts +200 -0
  57. package/src/durable-objects/room-runtime-base.ts +2 -0
  58. package/src/index.ts +97 -3
  59. package/src/lib/admin-assets.ts +5 -5
  60. package/src/lib/frontend-assets.ts +129 -0
  61. package/src/lib/frontend-config.ts +11 -0
  62. package/admin-build/_app/immutable/chunks/BaUG2TJ-.js +0 -1
  63. package/admin-build/_app/immutable/chunks/qKdzaeX3.js +0 -1
  64. package/admin-build/_app/immutable/entry/start.MmZh8oBH.js +0 -1
  65. package/admin-build/_app/immutable/nodes/21.B9lbNUQr.js +0 -1
@@ -1,3 +1,3 @@
1
- import"../chunks/CWj6FrbW.js";import{o as Lt,g as Rt}from"../chunks/Bn2NtlTj.js";import{p as Ot,a as Et,b as _,g as e,f as F,c as d,r as n,t as J,s as r,ag as Ye,d as x,ae as q,u as o}from"../chunks/BdTBlfLy.js";import{d as St,s as he,a as Dt}from"../chunks/DtZk82gG.js";import{i as Q}from"../chunks/Y22E1hJM.js";import{a as V,A as It,c as Ze,t as fe,e as et}from"../chunks/CvczjTXx.js";import{c as Pt,a as f,t as W,f as $}from"../chunks/DEELgv7K.js";import{d as tt,a as at,s as Ct}from"../chunks/CjcrXziO.js";import{b as st}from"../chunks/CYatlt7w.js";import{b as Mt}from"../chunks/qKdzaeX3.js";import{l as Nt,d as Ut}from"../chunks/Tea2dBJ8.js";import{P as Bt}from"../chunks/BkZCgsc3.js";import{c as zt}from"../chunks/Q2nPFxS6.js";import{B as ke}from"../chunks/Bcs4KYNp.js";import{B as N}from"../chunks/DOOPbWwG.js";import{I as O}from"../chunks/nlAMTi52.js";import{T as E}from"../chunks/bguI1TeA.js";var Ht=$("<!> <!>",1),qt=$("<a><!></a> <!>",1),Gt=$('<div class="loading-state svelte-wg73a1"><span class="spinner svelte-wg73a1"></span> Loading settings...</div>'),jt=$('<div class="error-state svelte-wg73a1"> </div>'),Jt=$('<button type="button" role="tab"> </button>'),Vt=$('<div class="target-switch svelte-wg73a1" role="tablist" aria-label="OAuth environment target"></div>'),Kt=$('<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>'),Xt=$("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),Ft=$("The dashboard detected an older dev sidecar that does not support auth editing yet. Restart <code>pnpm dev</code> to enable edits.",1),Qt=$('<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 pa(lt,it){Ot(it,!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"}],rt=[{id:"development",label:"Development"},{id:"release",label:"Release"}];let we=x(!0),K=x(!1),u=x(!1),Te=x(!1),Y=x(""),p=x("development"),l=x(null),U=x(null),m=x(null),L=x(null);function Z(t){return t.split(/\r?\n/).map(i=>i.trim()).filter(Boolean)}function D(t){const i=t.trim();return i||null}function ye(t){const i=t.trim();if(!i)return null;const c=Number(i);return Number.isFinite(c)?c:null}function X(t){return{...t}}function nt(t){var i,c,v,g,B,z,k,b,h,w,T,y;return{emailAuth:t.emailAuth!==!1,anonymousAuth:!!t.anonymousAuth,allowedRedirectUrlsText:(t.allowedRedirectUrls??[]).join(`
1
+ import"../chunks/CWj6FrbW.js";import{o as Lt,g as Rt}from"../chunks/Bn2NtlTj.js";import{p as Ot,a as Et,b as _,g as e,f as F,c as d,r as n,t as J,s as r,ag as Ye,d as x,ae as q,u as o}from"../chunks/BdTBlfLy.js";import{d as St,s as he,a as Dt}from"../chunks/DtZk82gG.js";import{i as Q}from"../chunks/Y22E1hJM.js";import{a as V,A as It,c as Ze,t as fe,e as et}from"../chunks/DcVb45Ds.js";import{c as Pt,a as f,t as W,f as $}from"../chunks/DEELgv7K.js";import{d as tt,a as at,s as Ct}from"../chunks/CjcrXziO.js";import{b as st}from"../chunks/CYatlt7w.js";import{b as Mt}from"../chunks/Djnkhy-S.js";import{l as Nt,d as Ut}from"../chunks/fPy6xmgG.js";import{P as Bt}from"../chunks/BkZCgsc3.js";import{c as zt}from"../chunks/Q2nPFxS6.js";import{B as ke}from"../chunks/Bcs4KYNp.js";import{B as N}from"../chunks/DOOPbWwG.js";import{I as O}from"../chunks/nlAMTi52.js";import{T as E}from"../chunks/bguI1TeA.js";var Ht=$("<!> <!>",1),qt=$("<a><!></a> <!>",1),Gt=$('<div class="loading-state svelte-wg73a1"><span class="spinner svelte-wg73a1"></span> Loading settings...</div>'),jt=$('<div class="error-state svelte-wg73a1"> </div>'),Jt=$('<button type="button" role="tab"> </button>'),Vt=$('<div class="target-switch svelte-wg73a1" role="tablist" aria-label="OAuth environment target"></div>'),Kt=$('<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>'),Xt=$("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),Ft=$("The dashboard detected an older dev sidecar that does not support auth editing yet. Restart <code>pnpm dev</code> to enable edits.",1),Qt=$('<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 pa(lt,it){Ot(it,!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"}],rt=[{id:"development",label:"Development"},{id:"release",label:"Release"}];let we=x(!0),K=x(!1),u=x(!1),Te=x(!1),Y=x(""),p=x("development"),l=x(null),U=x(null),m=x(null),L=x(null);function Z(t){return t.split(/\r?\n/).map(i=>i.trim()).filter(Boolean)}function D(t){const i=t.trim();return i||null}function ye(t){const i=t.trim();if(!i)return null;const c=Number(i);return Number.isFinite(c)?c:null}function X(t){return{...t}}function nt(t){var i,c,v,g,B,z,k,b,h,w,T,y;return{emailAuth:t.emailAuth!==!1,anonymousAuth:!!t.anonymousAuth,allowedRedirectUrlsText:(t.allowedRedirectUrls??[]).join(`
2
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:((b=t.emailOtp)==null?void 0:b.autoCreate)!==!1,passkeysEnabled:!!((h=t.passkeys)!=null&&h.enabled),passkeysRpName:((w=t.passkeys)==null?void 0:w.rpName)??"",passkeysRpID:((T=t.passkeys)==null?void 0:T.rpID)??"",passkeysOriginText:(((y=t.passkeys)==null?void 0:y.origin)??[]).join(`
3
3
  `)}}function Ae(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 ee(t){return`auth/settings?target=${t}`}function te(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:Z(t.allowedRedirectUrlsText),session:{accessTokenTTL:D(t.sessionAccessTokenTTL),refreshTokenTTL:D(t.sessionRefreshTokenTTL),maxActiveSessions:ye(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:Z(t.passkeysOriginText)},oauth:v}}function ae(){return e(m)?e(m)[e(p)]:null}function dt(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(Z(t.passkeysOriginText).length===0)return"Passkeys require at least one allowed origin."}return t.sessionMaxActiveSessions.trim()&&ye(t.sessionMaxActiveSessions)===null?"Max active sessions must be a valid number.":null}function se(t,i){const c=nt(t),v={development:Ae(t),release:Ae(i??t)};_(U,X(c),!0),_(l,X(c),!0),_(L,{development:I(v.development),release:I(v.release)},!0),_(m,{development:I(v.development),release:I(v.release)},!0)}function ot(){!e(U)||!e(L)||!e(m)||(_(l,X(e(U)),!0),_(m,{...e(m),[e(p)]:I(e(L)[e(p)])},!0))}const xe=o(()=>(()=>{const t=ae();return!e(l)||!e(U)||!t||!e(L)?!1:JSON.stringify(te(e(l),t))!==JSON.stringify(te(e(U),e(L)[e(p)]))})()),$e=o(()=>(()=>{const t=ae();return t?S.filter(i=>{var c;return(c=t[i.id])==null?void 0:c.enabled}).length:0})());async function ct(){const t=ae();if(!e(u)||!e(l)||!t||!e(L))return;const i=dt(e(l),t);if(i){fe(i);return}_(K,!0);try{const c=te(e(l),t);await V.schemaMutation(ee(e(p)),{method:"PUT",body:c}),_(U,X(e(l)),!0),_(L,{...e(L),[e(p)]:I(t)},!0),_(m,{...e(m),[e(p)]:I(t)},!0),Ze({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){fe(tt(c,"Failed to save auth settings."))}finally{_(K,!1)}}Lt(async()=>{try{if(await Nt(),_(u,Rt(Ut).devMode,!0),e(u))try{const t=await V.schemaMutation(ee("development")),i=await V.schemaMutation(ee("release"));se(t,i)}catch(t){if(t instanceof It&&t.status===404){_(Te,!0),_(u,!1),Ze({type:"warning",message:"Dev sidecar is outdated. Showing read-only auth settings until you restart `pnpm dev`."});const i=await V.fetch("data/auth/settings");se(i)}else throw t}else{const t=await V.fetch("data/auth/settings");se(t)}}catch(t){_(Y,tt(t,"Failed to load auth settings."),!0),fe(e(Y))}finally{_(we,!1)}}),Bt(lt,{title:"Auth Settings",description:"Manage authentication methods and OAuth providers",get docsHref(){return zt},actions:i=>{var c=qt(),v=F(c),g=d(v);ke(g,{variant:"ghost",size:"sm",children:(k,b)=>{q();var h=W("Back to Users");f(k,h)},$$slots:{default:!0}}),n(v);var B=r(v,2);{var z=k=>{var b=Ht(),h=F(b);{let T=o(()=>!e(xe)||e(K));ke(h,{variant:"secondary",size:"sm",onclick:ot,get disabled(){return e(T)},children:(y,le)=>{q();var H=W("Reset");f(y,H)},$$slots:{default:!0}})}var w=r(h,2);{let T=o(()=>!e(xe));ke(w,{size:"sm",onclick:ct,get disabled(){return e(T)},get loading(){return e(K)},children:(y,le)=>{q();var H=W("Save Changes");f(y,H)},$$slots:{default:!0}})}f(k,b)};Q(B,k=>{e(u)&&e(l)&&k(z)})}J(()=>at(v,"href",`${Mt??""}/auth`)),f(i,c)},children:(i,c)=>{var v=Pt(),g=F(v);{var B=b=>{var h=Gt();f(b,h)},z=b=>{var h=jt(),w=d(h,!0);n(h),J(()=>he(w,e(Y)||"Failed to load authentication settings. Check that the EdgeBase admin API is running and retry.")),f(b,h)},k=b=>{var h=Qt(),w=F(h),T=d(w),y=d(T),le=r(d(y),2);N(le,{variant:"default",text:"Shared Config"}),n(y);var H=r(y,2),ie=d(H),Le=d(ie);{let s=o(()=>!e(u));E(Le,{label:"Email / Password",get disabled(){return e(s)},get checked(){return e(l).emailAuth},set checked(a){e(l).emailAuth=a}})}var vt=r(Le,2);{let s=o(()=>e(l).emailAuth?"success":"default"),a=o(()=>e(l).emailAuth?"Enabled":"Disabled");N(vt,{get variant(){return e(s)},get text(){return e(a)}})}n(ie);var re=r(ie,2),Re=d(re);{let s=o(()=>!e(u));E(Re,{label:"Anonymous Sign-In",get disabled(){return e(s)},get checked(){return e(l).anonymousAuth},set checked(a){e(l).anonymousAuth=a}})}var ut=r(Re,2);{let s=o(()=>e(l).anonymousAuth?"success":"default"),a=o(()=>e(l).anonymousAuth?"Enabled":"Disabled");N(ut,{get variant(){return e(s)},get text(){return e(a)}})}n(re);var ne=r(re,2),de=d(ne),Oe=d(de);{let s=o(()=>!e(u));E(Oe,{label:"Magic Link",get disabled(){return e(s)},get checked(){return e(l).magicLinkEnabled},set checked(a){e(l).magicLinkEnabled=a}})}var gt=r(Oe,2);{let s=o(()=>!e(u));E(gt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).magicLinkAutoCreate},set checked(a){e(l).magicLinkAutoCreate=a}})}n(de);var pt=r(de,2);{let s=o(()=>!e(u));O(pt,{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(ne);var Ee=r(ne,2),Se=d(Ee),De=d(Se);{let s=o(()=>!e(u));E(De,{label:"Email OTP",get disabled(){return e(s)},get checked(){return e(l).emailOtpEnabled},set checked(a){e(l).emailOtpEnabled=a}})}var mt=r(De,2);{let s=o(()=>!e(u));E(mt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).emailOtpAutoCreate},set checked(a){e(l).emailOtpAutoCreate=a}})}n(Se),n(Ee),n(H),n(T);var oe=r(T,2),Ie=r(d(oe),2),Pe=d(Ie);{let s=o(()=>!e(u));O(Pe,{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 Ce=r(Pe,2);{let s=o(()=>!e(u));O(Ce,{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 _t=r(Ce,2);{let s=o(()=>!e(u));O(_t,{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(Ie),n(oe);var ce=r(oe,2),ve=d(ce),bt=r(d(ve),2);{let s=o(()=>e(l).passkeysEnabled?"success":"default"),a=o(()=>e(l).passkeysEnabled?"Enabled":"Disabled");N(bt,{get variant(){return e(s)},get text(){return e(a)}})}n(ve);var Me=r(ve,2),Ne=d(Me);{let s=o(()=>!e(u));E(Ne,{label:"Enable Passkeys",get disabled(){return e(s)},get checked(){return e(l).passkeysEnabled},set checked(a){e(l).passkeysEnabled=a}})}var Ue=r(Ne,2);{let s=o(()=>!e(u));O(Ue,{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 Be=r(Ue,2);{let s=o(()=>!e(u));O(Be,{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 ze=r(Be,2),ue=r(d(ze),2);Ye(ue),n(ze),n(Me),n(ce);var ge=r(ce,2),pe=d(ge),ht=r(d(pe),2);N(ht,{variant:"default",text:"Shared Config"}),n(pe);var He=r(pe,2),qe=d(He),me=r(d(qe),2);Ye(me),n(qe),n(He),n(ge);var Ge=r(ge,2),_e=d(Ge),je=r(d(_e),2),Je=d(je);{let s=o(()=>e($e)>0?"primary":"default"),a=o(()=>`${e($e)} enabled`);N(Je,{get variant(){return e(s)},get text(){return e(a)}})}var ft=r(Je,2);{var kt=s=>{var a=Vt();et(a,21,()=>rt,P=>P.id,(P,R)=>{var A=Jt();let G;var be=d(A,!0);n(A),J(()=>{G=Ct(A,1,"target-switch__button svelte-wg73a1",null,G,{"target-switch__button--active":e(p)===e(R).id}),at(A,"aria-selected",e(p)===e(R).id),he(be,e(R).label)}),Dt("click",A,()=>{_(p,e(R).id,!0)}),f(P,A)}),n(a),f(s,a)};Q(ft,s=>{e(u)&&s(kt)})}n(je),n(_e);var Ve=r(_e,2);et(Ve,21,()=>S,s=>s.id,(s,a)=>{var P=Kt(),R=d(P),A=d(R),G=d(A),be=d(G,!0);n(G),q(2),n(A);var Xe=r(A,2),Fe=d(Xe);{let C=o(()=>e(m)[e(p)][e(a).id].enabled?"success":"default"),M=o(()=>e(m)[e(p)][e(a).id].enabled?"Enabled":"Disabled");N(Fe,{get variant(){return e(C)},get text(){return e(M)}})}var xt=r(Fe,2);{let C=o(()=>`Enable ${e(a).label}`),M=o(()=>!e(u));E(xt,{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(Xe),n(R);var Qe=r(R,2),We=d(Qe);{let C=o(()=>`${e(a).label} client ID`),M=o(()=>!e(u));O(We,{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 $t=r(We,2);{let C=o(()=>`${e(a).label} client secret`),M=o(()=>!e(u));O($t,{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(Qe),n(P),J(()=>he(be,e(a).label)),f(s,P)}),n(Ve),n(Ge),n(w);var Ke=r(w,2),wt=d(Ke);{var Tt=s=>{var a=Xt();q(12),f(s,a)},yt=s=>{var a=Ft();q(2),f(s,a)},At=s=>{var a=W("This dashboard is showing runtime auth configuration only. Editing remains disabled outside local dev mode.");f(s,a)};Q(wt,s=>{e(u)?s(Tt):e(Te)?s(yt,1):s(At,!1)})}n(Ke),J(()=>{ue.disabled=!e(u),me.disabled=!e(u)}),st(ue,()=>e(l).passkeysOriginText,s=>e(l).passkeysOriginText=s),st(me,()=>e(l).allowedRedirectUrlsText,s=>e(l).allowedRedirectUrlsText=s),f(b,h)};Q(g,b=>{e(we)?b(B):!e(l)||!e(m)?b(z,1):b(k,!1)})}f(i,v)}}),Et()}St(["click"]);export{pa as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{o as pe}from"../chunks/Bn2NtlTj.js";import{p as ve,d as m,M as ue,f as J,a as fe,b as t,g as a,s as o,c as l,r,ae as E,t as L,u as me}from"../chunks/BdTBlfLy.js";import{d as be,a as _e,s as $}from"../chunks/DtZk82gG.js";import{i as W}from"../chunks/Y22E1hJM.js";import{a as y,b as M,t as S,e as he,d as ge}from"../chunks/CvczjTXx.js";import{a as f,f as k,t as U}from"../chunks/DEELgv7K.js";import{d as P}from"../chunks/CjcrXziO.js";import{d as X}from"../chunks/wJsUhbfZ.js";import{P as ye}from"../chunks/BkZCgsc3.js";import{b as ke}from"../chunks/Q2nPFxS6.js";import{B as H}from"../chunks/Bcs4KYNp.js";import{B as we}from"../chunks/DOOPbWwG.js";import{C as De}from"../chunks/B3CvhH3c.js";var qe=k('<p class="card__loading svelte-lb9q8r">Loading DO list...</p>'),Oe=k('<div class="do-item svelte-lb9q8r"><!> <span class="do-item__name svelte-lb9q8r"> </span></div>'),$e=k('<div class="do-list svelte-lb9q8r"></div> <div class="card__actions svelte-lb9q8r"><!> <!></div>',1),Se=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),Be=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>'),xe=k("<!> <!>",1);function Ve(Y,Z){ve(Z,!0);let V=m(!0),B=m(ue([])),T=m(!1),R=m(!1),w=m(null),u=m(null),C=m(!1),x=m(!1);pe(async()=>{try{const e=await y.fetch("data/backup/list-dos",{method:"POST"});t(B,e.dos,!0)}catch(e){S(P(e,"Failed to load the backup Durable Object list."))}finally{t(V,!1)}});async function ee(){t(T,!0);try{const e={version:1,timestamp:new Date().toISOString(),dos:[]},i=[];for(const s of a(B))try{const j=await y.fetch("data/backup/dump-do",{method:"POST",body:{doName:s.doName,type:s.type}});i.push(j)}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"});X(d,`edgebase-backup-${new Date().toISOString().slice(0,10)}.json`),M("Backup downloaded")}catch(e){S(P(e,"Backup failed."))}finally{t(T,!1)}}async function ae(){t(R,!0);try{const e=await y.fetch("data/backup/dump-d1",{method:"POST"}),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});X(i,`edgebase-d1-backup-${new Date().toISOString().slice(0,10)}.json`),M("D1 backup downloaded")}catch(e){S(P(e,"D1 backup failed."))}finally{t(R,!1)}}async function te(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 re(){if(t(x,!1),!!a(u)){t(C,!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{}M(`Restored ${i} components`),t(w,null),t(u,null)}catch(e){S(P(e,"Restore failed."))}finally{t(C,!1)}}}var z=xe(),G=J(z);ye(G,{title:"Backup & Restore",description:"Create backups and restore data",get docsHref(){return ke},children:(e,i)=>{var n=Be(),d=l(n),s=o(l(d),2),j=o(l(s),2);{var le=v=>{var b=qe();f(v,b)},oe=v=>{var b=$e(),_=J(b);he(_,21,()=>a(B),c=>c.doName,(c,h)=>{var p=Oe(),N=l(p);{let O=me(()=>a(h).type==="auth"?"warning":"primary");we(N,{get variant(){return a(O)},get text(){return a(h).type}})}var q=o(N,2),I=l(q,!0);r(q),r(p),L(()=>$(I,a(h).doName)),f(c,p)}),r(_);var D=o(_,2),g=l(D);H(g,{variant:"primary",onclick:ee,get loading(){return a(T)},children:(c,h)=>{E();var p=U();L(()=>$(p,`Download Full Backup (${a(B).length??""} DOs + D1)`)),f(c,p)},$$slots:{default:!0}});var F=o(g,2);H(F,{variant:"secondary",onclick:ae,get loading(){return a(R)},children:(c,h)=>{E();var p=U("D1 Only");f(c,p)},$$slots:{default:!0}}),r(D),f(v,b)};W(j,v=>{a(V)?v(le):v(oe,!1)})}r(s),r(d);var K=o(d,2),Q=o(l(K),2),A=o(l(Q),2),ie=l(A);r(A);var de=o(A,2);{var ne=v=>{var b=Se(),_=J(b),D=o(l(_),2),g=l(D),F=l(g);r(g);var c=o(g,2),h=l(c);r(c);var p=o(c,2),N=l(p);r(p),r(D),r(_);var q=o(_,2),I=l(q);H(I,{variant:"danger",onclick:()=>t(x,!0),get loading(){return a(C)},children:(O,Ne)=>{E();var ce=U("Restore Backup");f(O,ce)},$$slots:{default:!0}}),r(q),L(O=>{$(F,`DOs: ${(a(u).dos??[]).length??""} components`),$(h,`D1: ${a(u).d1?"Included":"Not included"}`),$(N,`Timestamp: ${O??""}`)},[()=>String(a(u).timestamp??"Unknown")]),f(v,b)};W(de,v=>{a(u)&&v(ne)})}r(Q),r(K),r(n),_e("change",ie,te),f(e,n)}});var se=o(G,2);De(se,{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:re,get open(){return a(x)},set open(e){t(x,e,!0)}}),f(Y,z),fe()}be(["change"]);export{Ve as component};
1
+ import"../chunks/CWj6FrbW.js";import{o as pe}from"../chunks/Bn2NtlTj.js";import{p as ve,d as m,M as ue,f as J,a as fe,b as t,g as a,s as o,c as l,r,ae as E,t as L,u as me}from"../chunks/BdTBlfLy.js";import{d as be,a as _e,s as $}from"../chunks/DtZk82gG.js";import{i as W}from"../chunks/Y22E1hJM.js";import{a as y,b as M,t as S,e as he,d as ge}from"../chunks/DcVb45Ds.js";import{a as f,f as k,t as U}from"../chunks/DEELgv7K.js";import{d as P}from"../chunks/CjcrXziO.js";import{d as X}from"../chunks/wJsUhbfZ.js";import{P as ye}from"../chunks/BkZCgsc3.js";import{b as ke}from"../chunks/Q2nPFxS6.js";import{B as H}from"../chunks/Bcs4KYNp.js";import{B as we}from"../chunks/DOOPbWwG.js";import{C as De}from"../chunks/B3CvhH3c.js";var qe=k('<p class="card__loading svelte-lb9q8r">Loading DO list...</p>'),Oe=k('<div class="do-item svelte-lb9q8r"><!> <span class="do-item__name svelte-lb9q8r"> </span></div>'),$e=k('<div class="do-list svelte-lb9q8r"></div> <div class="card__actions svelte-lb9q8r"><!> <!></div>',1),Se=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),Be=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>'),xe=k("<!> <!>",1);function Ve(Y,Z){ve(Z,!0);let V=m(!0),B=m(ue([])),T=m(!1),R=m(!1),w=m(null),u=m(null),C=m(!1),x=m(!1);pe(async()=>{try{const e=await y.fetch("data/backup/list-dos",{method:"POST"});t(B,e.dos,!0)}catch(e){S(P(e,"Failed to load the backup Durable Object list."))}finally{t(V,!1)}});async function ee(){t(T,!0);try{const e={version:1,timestamp:new Date().toISOString(),dos:[]},i=[];for(const s of a(B))try{const j=await y.fetch("data/backup/dump-do",{method:"POST",body:{doName:s.doName,type:s.type}});i.push(j)}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"});X(d,`edgebase-backup-${new Date().toISOString().slice(0,10)}.json`),M("Backup downloaded")}catch(e){S(P(e,"Backup failed."))}finally{t(T,!1)}}async function ae(){t(R,!0);try{const e=await y.fetch("data/backup/dump-d1",{method:"POST"}),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});X(i,`edgebase-d1-backup-${new Date().toISOString().slice(0,10)}.json`),M("D1 backup downloaded")}catch(e){S(P(e,"D1 backup failed."))}finally{t(R,!1)}}async function te(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 re(){if(t(x,!1),!!a(u)){t(C,!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{}M(`Restored ${i} components`),t(w,null),t(u,null)}catch(e){S(P(e,"Restore failed."))}finally{t(C,!1)}}}var z=xe(),G=J(z);ye(G,{title:"Backup & Restore",description:"Create backups and restore data",get docsHref(){return ke},children:(e,i)=>{var n=Be(),d=l(n),s=o(l(d),2),j=o(l(s),2);{var le=v=>{var b=qe();f(v,b)},oe=v=>{var b=$e(),_=J(b);he(_,21,()=>a(B),c=>c.doName,(c,h)=>{var p=Oe(),N=l(p);{let O=me(()=>a(h).type==="auth"?"warning":"primary");we(N,{get variant(){return a(O)},get text(){return a(h).type}})}var q=o(N,2),I=l(q,!0);r(q),r(p),L(()=>$(I,a(h).doName)),f(c,p)}),r(_);var D=o(_,2),g=l(D);H(g,{variant:"primary",onclick:ee,get loading(){return a(T)},children:(c,h)=>{E();var p=U();L(()=>$(p,`Download Full Backup (${a(B).length??""} DOs + D1)`)),f(c,p)},$$slots:{default:!0}});var F=o(g,2);H(F,{variant:"secondary",onclick:ae,get loading(){return a(R)},children:(c,h)=>{E();var p=U("D1 Only");f(c,p)},$$slots:{default:!0}}),r(D),f(v,b)};W(j,v=>{a(V)?v(le):v(oe,!1)})}r(s),r(d);var K=o(d,2),Q=o(l(K),2),A=o(l(Q),2),ie=l(A);r(A);var de=o(A,2);{var ne=v=>{var b=Se(),_=J(b),D=o(l(_),2),g=l(D),F=l(g);r(g);var c=o(g,2),h=l(c);r(c);var p=o(c,2),N=l(p);r(p),r(D),r(_);var q=o(_,2),I=l(q);H(I,{variant:"danger",onclick:()=>t(x,!0),get loading(){return a(C)},children:(O,Ne)=>{E();var ce=U("Restore Backup");f(O,ce)},$$slots:{default:!0}}),r(q),L(O=>{$(F,`DOs: ${(a(u).dos??[]).length??""} components`),$(h,`D1: ${a(u).d1?"Included":"Not included"}`),$(N,`Timestamp: ${O??""}`)},[()=>String(a(u).timestamp??"Unknown")]),f(v,b)};W(de,v=>{a(u)&&v(ne)})}r(Q),r(K),r(n),_e("change",ie,te),f(e,n)}});var se=o(G,2);De(se,{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:re,get open(){return a(x)},set open(e){t(x,e,!0)}}),f(Y,z),fe()}be(["change"]);export{Ve as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/BdTBlfLy.js";import{g as r}from"../chunks/BaUG2TJ-.js";import{b as p}from"../chunks/qKdzaeX3.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
1
+ import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/BdTBlfLy.js";import{g as r}from"../chunks/CKVjMXZi.js";import{b as p}from"../chunks/Djnkhy-S.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{o as Je}from"../chunks/Bn2NtlTj.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/BdTBlfLy.js";import{d as sn,s as N,a as Kt}from"../chunks/DtZk82gG.js";import{i as mt}from"../chunks/Y22E1hJM.js";import{e as xt,i as an}from"../chunks/CvczjTXx.js";import{c as ve,a as R,f as xe,d as Z}from"../chunks/DEELgv7K.js";import{a as s,c as rn,s as on}from"../chunks/CjcrXziO.js";import{b as cn}from"../chunks/CGgVJi7f.js";import{b as ln}from"../chunks/qKdzaeX3.js";import{s as me}from"../chunks/BhCO1Fpt.js";import{P as dn}from"../chunks/BkZCgsc3.js";import{d as fn}from"../chunks/Q2nPFxS6.js";import{E as hn}from"../chunks/m9eWh0Cd.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};
1
+ import"../chunks/CWj6FrbW.js";import{o as Je}from"../chunks/Bn2NtlTj.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/BdTBlfLy.js";import{d as sn,s as N,a as Kt}from"../chunks/DtZk82gG.js";import{i as mt}from"../chunks/Y22E1hJM.js";import{e as xt,i as an}from"../chunks/DcVb45Ds.js";import{c as ve,a as R,f as xe,d as Z}from"../chunks/DEELgv7K.js";import{a as s,c as rn,s as on}from"../chunks/CjcrXziO.js";import{b as cn}from"../chunks/CGgVJi7f.js";import{b as ln}from"../chunks/Djnkhy-S.js";import{s as me}from"../chunks/BMXWUTG-.js";import{P as dn}from"../chunks/BkZCgsc3.js";import{d as fn}from"../chunks/Q2nPFxS6.js";import{E as hn}from"../chunks/m9eWh0Cd.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};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{p as yt,d as p,M as Nt,w as pe,g as e,b as t,a as Pt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/BdTBlfLy.js";import{s as x}from"../chunks/DtZk82gG.js";import{t as C,a as i,f,c as $t}from"../chunks/DEELgv7K.js";import{i as D}from"../chunks/Y22E1hJM.js";import{a as ge,t as V,b as Le,e as wt}from"../chunks/CvczjTXx.js";import{d as ue,a as kt,b as me}from"../chunks/CjcrXziO.js";import{s as xt,a as Ct}from"../chunks/Cp8V0Xy2.js";import{g as Re}from"../chunks/BaUG2TJ-.js";import{b as he}from"../chunks/qKdzaeX3.js";import{P as Dt}from"../chunks/BkZCgsc3.js";import{d as Et}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/Bcs4KYNp.js";import{I as L}from"../chunks/nlAMTi52.js";import{d as St}from"../chunks/Tea2dBJ8.js";import{s as Ae}from"../chunks/BhCO1Fpt.js";var It=f('<div class="create-error svelte-gjmjph"> </div>'),Bt=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>'),Ot=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Kt=f("<option> </option>"),Tt=f("<option> </option>"),zt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),Lt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Rt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),At=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),qt=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),Ft=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 la(Me,qe){yt(qe,!0);const Fe=()=>Ct(St,"$devInfoStore",Ue),[Ue,Ge]=xt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),E=p(null),g=p(""),$=p(!1),H=p(""),S=p(Nt([])),b=p(!1),ae=p(!1),A=p(""),O=p(""),w=T(()=>Fe().devMode);function Z(d){const y=d.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function fe(d){return d.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()||fe(e(c))}function _e(){const d=e(c).trim();return d?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(d)?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(E)==="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 je(d=!1){var y;if(e(w)&&!(!d&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(A,"");try{const I=await ge.schemaMutation(d?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(S,I.items??[],!0),t(O,((y=e(S)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(I){t(A,ue(I,"Failed to load Neon projects."),!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&je()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function He(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function Ze(){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(_e()){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 Ae.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),Le(`Database block "${e(c).trim()}" created`),Re(`${he}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(d){t(g,ue(d,"Failed to create the database block."),!0),V(e(g))}finally{t(te,!1)}}}async function be(d){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"),d==="create"&&re(),!!_e()){if(d==="reuse"&&!e(O)){t(g,e(A)||"Choose an existing Neon project first, or create a new one.",!0);return}t(E,d,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:d==="reuse"?e(O):void 0,projectName:d==="create"?re():void 0,mode:d,...e($)?{envKey:W()}:{}}}),await Ae.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),Le(`Database block "${e(c).trim()}" connected to Neon`),Re(`${he}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,ue(y,"Failed to connect with Neon."),!0),V(e(g))}finally{t(E,null)}}}function We(){return!e(b)&&e(S).length>0&&!!e(O)}Dt(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Et},children:(d,y)=>{var I=Ft(),ye=l(I);{var Je=r=>{var v=It(),_=l(v,!0);n(v),P(()=>x(_,e(g))),i(r,v)};D(ye,r=>{e(g)&&r(Je)})}var Ne=o(ye,2);{var Qe=r=>{var v=Bt();i(r,v)};D(Ne,r=>{e(w)||r(Qe)})}var oe=o(Ne,2),Pe=l(oe);L(Pe,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Pe,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var $e=o(le);$e.value=$e.__value="dynamic",n(J);var we=o(J,2),Ve=l(we);{var Xe=r=>{var v=C("One database shared by the whole app.");i(r,v)},Ye=r=>{var v=C("One isolated database per target ID.");i(r,v)};D(Ve,r=>{e(m)==="single"?r(Xe):r(Ye,!1)})}n(we),n(se);var et=o(se,2);{var tt=r=>{var v=Mt(),_=G(v),k=o(l(_),2),M=l(k);M.value=M.__value="d1";var N=o(M);N.value=N.__value="do";var xe=o(N);xe.value=xe.__value="postgres",n(k),n(_);var st=o(_,2);{var lt=q=>{var Ce=At(),ne=G(Ce),ie=o(l(ne),2),De=l(ie),nt=l(De,!0);n(De),n(ie);var de=o(ie,4),it=l(de);z(it,{variant:"ghost",onclick:He,children:(a,s)=>{B();var u=C();P(()=>x(u,e($)?"Hide Env Key Override":"Customize Env Key")),i(a,u)},$$slots:{default:!0}}),n(de);var dt=o(de,2);{var ct=a=>{var s=Ot(),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),i(a,s)};D(dt,a=>{e($)&&a(ct)})}n(ne);var Ee=o(ne,2),Se=o(l(Ee),2),ce=l(Se),F=o(l(ce),4),vt=l(F);{var pt=a=>{var s=Kt(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>x(u,e(b)?"Loading Neon projects...":"No Neon projects found")),i(a,s)},gt=a=>{var s=$t(),u=G(s);wt(u,17,()=>e(S),j=>j.projectId,(j,K)=>{var U=Tt(),bt=l(U);n(U);var ze={};P(()=>{x(bt,`${e(K).projectName??""} (${e(K).orgName??""})`),ze!==(ze=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),i(j,U)}),i(a,s)};D(vt,a=>{e(S).length===0?a(pt):a(gt,!1)})}n(F);var ve=o(F,2),ut=l(ve);z(ut,{variant:"ghost",onclick:()=>je(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=C("Refresh Projects");i(a,u)},$$slots:{default:!0}}),n(ve);var Ie=o(ve,2);{var mt=a=>{var s=zt(),u=l(s,!0);n(s),P(()=>x(u,e(A))),i(a,s)},ht=a=>{var s=Lt();i(a,s)},ft=a=>{var s=Rt();i(a,s)};D(Ie,a=>{e(A)?a(mt):!e(b)&&e(S).length===0?a(ht,1):e(b)||a(ft,2)})}var Be=o(Ie,2),_t=l(Be);{let a=T(()=>!e(w)||!We()||e(E)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>be("reuse"),children:(s,u)=>{B();var j=C();P(()=>x(j,e(E)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),i(s,j)},$$slots:{default:!0}})}n(Be),n(ce);var Oe=o(ce,2),Ke=o(l(Oe),2);{let a=T(()=>fe(e(c)));L(Ke,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Te=o(Ke,4),jt=l(Te);{let a=T(()=>!e(w)||e(E)!==null);z(jt,{variant:"secondary",get disabled(){return e(a)},onclick:()=>be("create"),children:(s,u)=>{B();var j=C();P(()=>x(j,e(E)==="create"?"Creating Neon Project...":"Create New Neon Project")),i(s,j)},$$slots:{default:!0}})}n(Te),n(Oe),n(Se),n(Ee),P(a=>{x(nt,a),F.disabled=e(b)||e(S).length===0},[W]),me(F,()=>e(O),a=>t(O,a)),i(q,Ce)};D(st,q=>{e(h)==="postgres"&&q(lt)})}me(k,()=>e(h),q=>t(h,q)),i(r,v)},at=r=>{var v=qt(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var k=o(_,2);L(k,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var M=o(k,2);L(M,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),i(r,v)};D(et,r=>{e(m)==="single"?r(tt):r(at,!1)})}n(oe);var ke=o(oe,2),Q=l(ke),rt=l(Q);z(rt,{variant:"secondary",children:(r,v)=>{B();var _=C("Cancel");i(r,_)},$$slots:{default:!0}}),n(Q);var ot=o(Q,2);{let r=T(()=>!e(w));z(ot,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:Ze,children:(v,_)=>{B();var k=C("Create Database");i(v,k)},$$slots:{default:!0}})}n(ke),n(I),P(()=>kt(Q,"href",`${he??""}/database/tables`)),me(J,()=>e(m),r=>t(m,r)),i(d,I)}}),Pt(),Ge()}export{la as component};
1
+ import"../chunks/CWj6FrbW.js";import{p as yt,d as p,M as Nt,w as pe,g as e,b as t,a as Pt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/BdTBlfLy.js";import{s as x}from"../chunks/DtZk82gG.js";import{t as C,a as i,f,c as $t}from"../chunks/DEELgv7K.js";import{i as D}from"../chunks/Y22E1hJM.js";import{a as ge,t as V,b as Le,e as wt}from"../chunks/DcVb45Ds.js";import{d as ue,a as kt,b as me}from"../chunks/CjcrXziO.js";import{s as xt,a as Ct}from"../chunks/Cp8V0Xy2.js";import{g as Re}from"../chunks/CKVjMXZi.js";import{b as he}from"../chunks/Djnkhy-S.js";import{P as Dt}from"../chunks/BkZCgsc3.js";import{d as Et}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/Bcs4KYNp.js";import{I as L}from"../chunks/nlAMTi52.js";import{d as St}from"../chunks/fPy6xmgG.js";import{s as Ae}from"../chunks/BMXWUTG-.js";var It=f('<div class="create-error svelte-gjmjph"> </div>'),Bt=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>'),Ot=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Kt=f("<option> </option>"),Tt=f("<option> </option>"),zt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),Lt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Rt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),At=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),qt=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),Ft=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 la(Me,qe){yt(qe,!0);const Fe=()=>Ct(St,"$devInfoStore",Ue),[Ue,Ge]=xt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),E=p(null),g=p(""),$=p(!1),H=p(""),S=p(Nt([])),b=p(!1),ae=p(!1),A=p(""),O=p(""),w=T(()=>Fe().devMode);function Z(d){const y=d.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function fe(d){return d.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()||fe(e(c))}function _e(){const d=e(c).trim();return d?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(d)?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(E)==="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 je(d=!1){var y;if(e(w)&&!(!d&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(A,"");try{const I=await ge.schemaMutation(d?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(S,I.items??[],!0),t(O,((y=e(S)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(I){t(A,ue(I,"Failed to load Neon projects."),!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&je()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function He(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function Ze(){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(_e()){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 Ae.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),Le(`Database block "${e(c).trim()}" created`),Re(`${he}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(d){t(g,ue(d,"Failed to create the database block."),!0),V(e(g))}finally{t(te,!1)}}}async function be(d){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"),d==="create"&&re(),!!_e()){if(d==="reuse"&&!e(O)){t(g,e(A)||"Choose an existing Neon project first, or create a new one.",!0);return}t(E,d,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:d==="reuse"?e(O):void 0,projectName:d==="create"?re():void 0,mode:d,...e($)?{envKey:W()}:{}}}),await Ae.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),Le(`Database block "${e(c).trim()}" connected to Neon`),Re(`${he}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,ue(y,"Failed to connect with Neon."),!0),V(e(g))}finally{t(E,null)}}}function We(){return!e(b)&&e(S).length>0&&!!e(O)}Dt(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Et},children:(d,y)=>{var I=Ft(),ye=l(I);{var Je=r=>{var v=It(),_=l(v,!0);n(v),P(()=>x(_,e(g))),i(r,v)};D(ye,r=>{e(g)&&r(Je)})}var Ne=o(ye,2);{var Qe=r=>{var v=Bt();i(r,v)};D(Ne,r=>{e(w)||r(Qe)})}var oe=o(Ne,2),Pe=l(oe);L(Pe,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Pe,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var $e=o(le);$e.value=$e.__value="dynamic",n(J);var we=o(J,2),Ve=l(we);{var Xe=r=>{var v=C("One database shared by the whole app.");i(r,v)},Ye=r=>{var v=C("One isolated database per target ID.");i(r,v)};D(Ve,r=>{e(m)==="single"?r(Xe):r(Ye,!1)})}n(we),n(se);var et=o(se,2);{var tt=r=>{var v=Mt(),_=G(v),k=o(l(_),2),M=l(k);M.value=M.__value="d1";var N=o(M);N.value=N.__value="do";var xe=o(N);xe.value=xe.__value="postgres",n(k),n(_);var st=o(_,2);{var lt=q=>{var Ce=At(),ne=G(Ce),ie=o(l(ne),2),De=l(ie),nt=l(De,!0);n(De),n(ie);var de=o(ie,4),it=l(de);z(it,{variant:"ghost",onclick:He,children:(a,s)=>{B();var u=C();P(()=>x(u,e($)?"Hide Env Key Override":"Customize Env Key")),i(a,u)},$$slots:{default:!0}}),n(de);var dt=o(de,2);{var ct=a=>{var s=Ot(),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),i(a,s)};D(dt,a=>{e($)&&a(ct)})}n(ne);var Ee=o(ne,2),Se=o(l(Ee),2),ce=l(Se),F=o(l(ce),4),vt=l(F);{var pt=a=>{var s=Kt(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>x(u,e(b)?"Loading Neon projects...":"No Neon projects found")),i(a,s)},gt=a=>{var s=$t(),u=G(s);wt(u,17,()=>e(S),j=>j.projectId,(j,K)=>{var U=Tt(),bt=l(U);n(U);var ze={};P(()=>{x(bt,`${e(K).projectName??""} (${e(K).orgName??""})`),ze!==(ze=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),i(j,U)}),i(a,s)};D(vt,a=>{e(S).length===0?a(pt):a(gt,!1)})}n(F);var ve=o(F,2),ut=l(ve);z(ut,{variant:"ghost",onclick:()=>je(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=C("Refresh Projects");i(a,u)},$$slots:{default:!0}}),n(ve);var Ie=o(ve,2);{var mt=a=>{var s=zt(),u=l(s,!0);n(s),P(()=>x(u,e(A))),i(a,s)},ht=a=>{var s=Lt();i(a,s)},ft=a=>{var s=Rt();i(a,s)};D(Ie,a=>{e(A)?a(mt):!e(b)&&e(S).length===0?a(ht,1):e(b)||a(ft,2)})}var Be=o(Ie,2),_t=l(Be);{let a=T(()=>!e(w)||!We()||e(E)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>be("reuse"),children:(s,u)=>{B();var j=C();P(()=>x(j,e(E)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),i(s,j)},$$slots:{default:!0}})}n(Be),n(ce);var Oe=o(ce,2),Ke=o(l(Oe),2);{let a=T(()=>fe(e(c)));L(Ke,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Te=o(Ke,4),jt=l(Te);{let a=T(()=>!e(w)||e(E)!==null);z(jt,{variant:"secondary",get disabled(){return e(a)},onclick:()=>be("create"),children:(s,u)=>{B();var j=C();P(()=>x(j,e(E)==="create"?"Creating Neon Project...":"Create New Neon Project")),i(s,j)},$$slots:{default:!0}})}n(Te),n(Oe),n(Se),n(Ee),P(a=>{x(nt,a),F.disabled=e(b)||e(S).length===0},[W]),me(F,()=>e(O),a=>t(O,a)),i(q,Ce)};D(st,q=>{e(h)==="postgres"&&q(lt)})}me(k,()=>e(h),q=>t(h,q)),i(r,v)},at=r=>{var v=qt(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var k=o(_,2);L(k,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var M=o(k,2);L(M,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),i(r,v)};D(et,r=>{e(m)==="single"?r(tt):r(at,!1)})}n(oe);var ke=o(oe,2),Q=l(ke),rt=l(Q);z(rt,{variant:"secondary",children:(r,v)=>{B();var _=C("Cancel");i(r,_)},$$slots:{default:!0}}),n(Q);var ot=o(Q,2);{let r=T(()=>!e(w));z(ot,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:Ze,children:(v,_)=>{B();var k=C("Create Database");i(v,k)},$$slots:{default:!0}})}n(ke),n(I),P(()=>kt(Q,"href",`${he??""}/database/tables`)),me(J,()=>e(m),r=>t(m,r)),i(d,I)}}),Pt(),Ge()}export{la as component};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/lSpxLU5p.js","../chunks/CWj6FrbW.js","../chunks/Bn2NtlTj.js","../chunks/BdTBlfLy.js","../chunks/DEELgv7K.js","../chunks/CGgVJi7f.js","../chunks/F9_4wRrd.js","../chunks/Cp8V0Xy2.js","../chunks/gtu8uwJD.js","../assets/SqlEditor.Bbp1RIk0.css"])))=>i.map(i=>d[i]);
2
- import{_ as $e,c as Se}from"../chunks/B2bEC_Hm.js";import"../chunks/CWj6FrbW.js";import{o as Ce}from"../chunks/Bn2NtlTj.js";import{p as De,d as E,M as Le,w as Me,g as e,b as v,a as Oe,u as P,c as n,s as u,r,ae as Pe,t as h,f as Y,ag as Te}from"../chunks/BdTBlfLy.js";import{d as ke,s as w,a as Ie}from"../chunks/DtZk82gG.js";import{i as M}from"../chunks/Y22E1hJM.js";import{e as O,i as T,t as Z,a as Ne}from"../chunks/CvczjTXx.js";import{t as Qe,a as i,c as ee,f as c}from"../chunks/DEELgv7K.js";import{b as Re,d as Be}from"../chunks/CjcrXziO.js";import{b as Fe}from"../chunks/CYatlt7w.js";import{s as Ke,a as W}from"../chunks/Cp8V0Xy2.js";import{s as ae,n as je,a as Ae}from"../chunks/BhCO1Fpt.js";import{P as He}from"../chunks/BkZCgsc3.js";import{B as Ue}from"../chunks/Bcs4KYNp.js";import{e as Ve}from"../chunks/Q2nPFxS6.js";var We=c("<option> </option>"),Ge=c('<span class="sql-page__dynamic-warn svelte-1wdt0zf">Dynamic namespace — use table Query tab</span>'),Je=c('<span class="sql-page__shortcut svelte-1wdt0zf"></span>'),Xe=c('<textarea class="sql-page__textarea svelte-1wdt0zf" placeholder="SELECT * FROM table_name LIMIT 100;" rows="6"></textarea>'),Ye=c('<span class="sql-page__result-error svelte-1wdt0zf"> </span>'),Ze=c('<span class="sql-page__result-meta svelte-1wdt0zf"> </span>'),ea=c('<th class="svelte-1wdt0zf"> </th>'),aa=c('<td class="svelte-1wdt0zf"> </td>'),ta=c('<tr class="svelte-1wdt0zf"></tr>'),sa=c('<div class="sql-page__table-wrap svelte-1wdt0zf"><table class="sql-page__table svelte-1wdt0zf"><thead><tr></tr></thead><tbody></tbody></table></div>'),ra=c('<div class="sql-page__result svelte-1wdt0zf"><div class="sql-page__result-header svelte-1wdt0zf"><code class="sql-page__result-sql svelte-1wdt0zf"> </code> <!></div> <!></div>'),oa=c('<div class="sql-page svelte-1wdt0zf"><div class="sql-page__toolbar svelte-1wdt0zf"><div class="sql-page__ns svelte-1wdt0zf"><label for="ns-select" class="svelte-1wdt0zf">Database</label> <select id="ns-select" class="svelte-1wdt0zf"></select></div> <!> <!></div> <div class="sql-page__editor svelte-1wdt0zf"><!></div> <!></div>');function ya(te,se){De(se,!0);const re=()=>W(je,"$namespaceNames",k),oe=()=>W(Ae,"$namespaceDefs",k),le=()=>W(ae,"$schemaStore",k),[k,ne]=Ke();let p=E("SELECT name FROM sqlite_master WHERE type='table';"),$=E(!1),b=E(Le([])),y=E(0),S=P(re),q=E("shared");Me(()=>{e(S).length>0&&!e(S).includes(e(q))&&v(q,e(S).includes("shared")?"shared":e(S)[0],!0)});let I=P(()=>{var f;return!!((f=oe()[e(q)])!=null&&f.dynamic)}),N=E(null),ie=P(()=>(()=>{const s={},f=le().schema;for(const[C,D]of Object.entries(f)){const x=D.fields;s[C]=x?Object.keys(x):[]}return s})());Ce(async()=>{ae.loadSchema({silent:!0});try{const s=await $e(()=>import("../chunks/lSpxLU5p.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url);v(N,s.default,!0)}catch{}});async function Q(){if(e(p).trim()){if(e(I)){Z("Dynamic namespaces require a target instance. Use the Query tab on a specific table instead.");return}v($,!0);try{const s=await Ne.fetch("data/sql",{method:"POST",body:{namespace:e(q),sql:e(p).trim()}});v(y,e(y)+1),v(b,[{id:e(y),sql:e(p).trim(),columns:s.columns??[],rows:s.rows??[],rowCount:s.rowCount??0,time:s.time??0},...e(b)],!0)}catch(s){const f=Be(s,"Query failed.");Z(f),v(y,e(y)+1),v(b,[{id:e(y),sql:e(p).trim(),columns:[],rows:[],rowCount:0,time:0,error:f},...e(b)],!0)}finally{v($,!1)}}}function ce(s){(s.metaKey||s.ctrlKey)&&s.key==="Enter"&&(s.preventDefault(),Q())}He(te,{title:"SQL Console",description:"Execute SQL queries against your databases",get docsHref(){return Ve},children:(s,f)=>{var C=oa(),D=n(C),x=n(D),R=u(n(x),2);O(R,21,()=>e(S),T,(a,t)=>{var o=We(),m=n(o,!0);r(o);var l={};h(()=>{w(m,e(t)),l!==(l=e(t))&&(o.value=(o.__value=e(t))??"")}),i(a,o)}),r(R),r(x);var G=u(x,2);{let a=P(()=>e($)||!e(p).trim()||e(I));Ue(G,{variant:"primary",size:"sm",onclick:Q,get loading(){return e($)},get disabled(){return e(a)},children:(t,o)=>{Pe();var m=Qe();h(()=>w(m,e($)?"Executing...":"Execute")),i(t,m)},$$slots:{default:!0}})}var de=u(G,2);{var ve=a=>{var t=Ge();i(a,t)},me=a=>{var o;var t=Je();t.textContent=`${typeof navigator<"u"&&((o=navigator.platform)!=null&&o.includes("Mac"))?"⌘":"Ctrl"}+Enter`,i(a,t)};M(de,a=>{e(I)?a(ve):a(me,!1)})}r(D);var B=u(D,2),_e=n(B);{var pe=a=>{var t=ee(),o=Y(t);Se(o,()=>e(N),(m,l)=>{l(m,{get value(){return e(p)},onchange:L=>v(p,L,!0),onExecute:Q,placeholder:"SELECT * FROM table_name LIMIT 100;",get schema(){return e(ie)}})}),i(a,t)},fe=a=>{var t=Xe();Te(t),Ie("keydown",t,ce),Fe(t,()=>e(p),o=>v(p,o)),i(a,t)};M(_e,a=>{e(N)?a(pe):a(fe,!1)})}r(B);var ue=u(B,2);{var ge=a=>{var t=ee(),o=Y(t);O(o,17,()=>e(b),m=>m.id,(m,l)=>{var L=ra(),F=n(L),K=n(F),he=n(K,!0);r(K);var we=u(K,2);{var be=_=>{var d=Ye(),z=n(d,!0);r(d),h(()=>w(z,e(l).error)),i(_,d)},ye=_=>{var d=Ze(),z=n(d);r(d),h(()=>w(z,`${e(l).rowCount??""} rows · ${e(l).time??""}ms`)),i(_,d)};M(we,_=>{e(l).error?_(be):_(ye,!1)})}r(F);var qe=u(F,2);{var xe=_=>{var d=sa(),z=n(d),j=n(z),J=n(j);O(J,21,()=>e(l).columns,T,(A,H)=>{var g=ea(),U=n(g,!0);r(g),h(()=>w(U,e(H))),i(A,g)}),r(J),r(j);var X=u(j);O(X,21,()=>e(l).rows,T,(A,H)=>{var g=ta();O(g,21,()=>e(l).columns,T,(U,ze)=>{var V=aa(),Ee=n(V,!0);r(V),h(()=>w(Ee,e(H)[e(ze)]??"null")),i(U,V)}),r(g),i(A,g)}),r(X),r(z),r(d),i(_,d)};M(qe,_=>{!e(l).error&&e(l).columns.length>0&&_(xe)})}r(L),h(()=>w(he,e(l).sql)),i(m,L)}),i(a,t)};M(ue,a=>{e(b).length>0&&a(ge)})}r(C),Re(R,()=>e(q),a=>v(q,a)),i(s,C)}}),Oe(),ne()}ke(["keydown"]);export{ya as component};
2
+ import{_ as $e,c as Se}from"../chunks/B2bEC_Hm.js";import"../chunks/CWj6FrbW.js";import{o as Ce}from"../chunks/Bn2NtlTj.js";import{p as De,d as E,M as Le,w as Me,g as e,b as v,a as Oe,u as P,c as n,s as u,r,ae as Pe,t as h,f as Y,ag as Te}from"../chunks/BdTBlfLy.js";import{d as ke,s as w,a as Ie}from"../chunks/DtZk82gG.js";import{i as M}from"../chunks/Y22E1hJM.js";import{e as O,i as T,t as Z,a as Ne}from"../chunks/DcVb45Ds.js";import{t as Qe,a as i,c as ee,f as c}from"../chunks/DEELgv7K.js";import{b as Re,d as Be}from"../chunks/CjcrXziO.js";import{b as Fe}from"../chunks/CYatlt7w.js";import{s as Ke,a as W}from"../chunks/Cp8V0Xy2.js";import{s as ae,n as je,a as Ae}from"../chunks/BMXWUTG-.js";import{P as He}from"../chunks/BkZCgsc3.js";import{B as Ue}from"../chunks/Bcs4KYNp.js";import{e as Ve}from"../chunks/Q2nPFxS6.js";var We=c("<option> </option>"),Ge=c('<span class="sql-page__dynamic-warn svelte-1wdt0zf">Dynamic namespace — use table Query tab</span>'),Je=c('<span class="sql-page__shortcut svelte-1wdt0zf"></span>'),Xe=c('<textarea class="sql-page__textarea svelte-1wdt0zf" placeholder="SELECT * FROM table_name LIMIT 100;" rows="6"></textarea>'),Ye=c('<span class="sql-page__result-error svelte-1wdt0zf"> </span>'),Ze=c('<span class="sql-page__result-meta svelte-1wdt0zf"> </span>'),ea=c('<th class="svelte-1wdt0zf"> </th>'),aa=c('<td class="svelte-1wdt0zf"> </td>'),ta=c('<tr class="svelte-1wdt0zf"></tr>'),sa=c('<div class="sql-page__table-wrap svelte-1wdt0zf"><table class="sql-page__table svelte-1wdt0zf"><thead><tr></tr></thead><tbody></tbody></table></div>'),ra=c('<div class="sql-page__result svelte-1wdt0zf"><div class="sql-page__result-header svelte-1wdt0zf"><code class="sql-page__result-sql svelte-1wdt0zf"> </code> <!></div> <!></div>'),oa=c('<div class="sql-page svelte-1wdt0zf"><div class="sql-page__toolbar svelte-1wdt0zf"><div class="sql-page__ns svelte-1wdt0zf"><label for="ns-select" class="svelte-1wdt0zf">Database</label> <select id="ns-select" class="svelte-1wdt0zf"></select></div> <!> <!></div> <div class="sql-page__editor svelte-1wdt0zf"><!></div> <!></div>');function ya(te,se){De(se,!0);const re=()=>W(je,"$namespaceNames",k),oe=()=>W(Ae,"$namespaceDefs",k),le=()=>W(ae,"$schemaStore",k),[k,ne]=Ke();let p=E("SELECT name FROM sqlite_master WHERE type='table';"),$=E(!1),b=E(Le([])),y=E(0),S=P(re),q=E("shared");Me(()=>{e(S).length>0&&!e(S).includes(e(q))&&v(q,e(S).includes("shared")?"shared":e(S)[0],!0)});let I=P(()=>{var f;return!!((f=oe()[e(q)])!=null&&f.dynamic)}),N=E(null),ie=P(()=>(()=>{const s={},f=le().schema;for(const[C,D]of Object.entries(f)){const x=D.fields;s[C]=x?Object.keys(x):[]}return s})());Ce(async()=>{ae.loadSchema({silent:!0});try{const s=await $e(()=>import("../chunks/lSpxLU5p.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]),import.meta.url);v(N,s.default,!0)}catch{}});async function Q(){if(e(p).trim()){if(e(I)){Z("Dynamic namespaces require a target instance. Use the Query tab on a specific table instead.");return}v($,!0);try{const s=await Ne.fetch("data/sql",{method:"POST",body:{namespace:e(q),sql:e(p).trim()}});v(y,e(y)+1),v(b,[{id:e(y),sql:e(p).trim(),columns:s.columns??[],rows:s.rows??[],rowCount:s.rowCount??0,time:s.time??0},...e(b)],!0)}catch(s){const f=Be(s,"Query failed.");Z(f),v(y,e(y)+1),v(b,[{id:e(y),sql:e(p).trim(),columns:[],rows:[],rowCount:0,time:0,error:f},...e(b)],!0)}finally{v($,!1)}}}function ce(s){(s.metaKey||s.ctrlKey)&&s.key==="Enter"&&(s.preventDefault(),Q())}He(te,{title:"SQL Console",description:"Execute SQL queries against your databases",get docsHref(){return Ve},children:(s,f)=>{var C=oa(),D=n(C),x=n(D),R=u(n(x),2);O(R,21,()=>e(S),T,(a,t)=>{var o=We(),m=n(o,!0);r(o);var l={};h(()=>{w(m,e(t)),l!==(l=e(t))&&(o.value=(o.__value=e(t))??"")}),i(a,o)}),r(R),r(x);var G=u(x,2);{let a=P(()=>e($)||!e(p).trim()||e(I));Ue(G,{variant:"primary",size:"sm",onclick:Q,get loading(){return e($)},get disabled(){return e(a)},children:(t,o)=>{Pe();var m=Qe();h(()=>w(m,e($)?"Executing...":"Execute")),i(t,m)},$$slots:{default:!0}})}var de=u(G,2);{var ve=a=>{var t=Ge();i(a,t)},me=a=>{var o;var t=Je();t.textContent=`${typeof navigator<"u"&&((o=navigator.platform)!=null&&o.includes("Mac"))?"⌘":"Ctrl"}+Enter`,i(a,t)};M(de,a=>{e(I)?a(ve):a(me,!1)})}r(D);var B=u(D,2),_e=n(B);{var pe=a=>{var t=ee(),o=Y(t);Se(o,()=>e(N),(m,l)=>{l(m,{get value(){return e(p)},onchange:L=>v(p,L,!0),onExecute:Q,placeholder:"SELECT * FROM table_name LIMIT 100;",get schema(){return e(ie)}})}),i(a,t)},fe=a=>{var t=Xe();Te(t),Ie("keydown",t,ce),Fe(t,()=>e(p),o=>v(p,o)),i(a,t)};M(_e,a=>{e(N)?a(pe):a(fe,!1)})}r(B);var ue=u(B,2);{var ge=a=>{var t=ee(),o=Y(t);O(o,17,()=>e(b),m=>m.id,(m,l)=>{var L=ra(),F=n(L),K=n(F),he=n(K,!0);r(K);var we=u(K,2);{var be=_=>{var d=Ye(),z=n(d,!0);r(d),h(()=>w(z,e(l).error)),i(_,d)},ye=_=>{var d=Ze(),z=n(d);r(d),h(()=>w(z,`${e(l).rowCount??""} rows · ${e(l).time??""}ms`)),i(_,d)};M(we,_=>{e(l).error?_(be):_(ye,!1)})}r(F);var qe=u(F,2);{var xe=_=>{var d=sa(),z=n(d),j=n(z),J=n(j);O(J,21,()=>e(l).columns,T,(A,H)=>{var g=ea(),U=n(g,!0);r(g),h(()=>w(U,e(H))),i(A,g)}),r(J),r(j);var X=u(j);O(X,21,()=>e(l).rows,T,(A,H)=>{var g=ta();O(g,21,()=>e(l).columns,T,(U,ze)=>{var V=aa(),Ee=n(V,!0);r(V),h(()=>w(Ee,e(H)[e(ze)]??"null")),i(U,V)}),r(g),i(A,g)}),r(X),r(z),r(d),i(_,d)};M(qe,_=>{!e(l).error&&e(l).columns.length>0&&_(xe)})}r(L),h(()=>w(he,e(l).sql)),i(m,L)}),i(a,t)};M(ue,a=>{e(b).length>0&&a(ge)})}r(C),Re(R,()=>e(q),a=>v(q,a)),i(s,C)}}),Oe(),ne()}ke(["keydown"]);export{ya as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{i as x}from"../chunks/C8s55wKu.js";import{p as V,t as v,a as z,c as k,s as a,r as f,f as $}from"../chunks/BdTBlfLy.js";import{a as s,f as n}from"../chunks/DEELgv7K.js";import{i as D}from"../chunks/Y22E1hJM.js";import{a as r}from"../chunks/CjcrXziO.js";import{s as S,a as B}from"../chunks/Cp8V0Xy2.js";import{b as i}from"../chunks/qKdzaeX3.js";import{d as y}from"../chunks/Tea2dBJ8.js";import{E as j}from"../chunks/m9eWh0Cd.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};
1
+ import"../chunks/CWj6FrbW.js";import{i as x}from"../chunks/C8s55wKu.js";import{p as V,t as v,a as z,c as k,s as a,r as f,f as $}from"../chunks/BdTBlfLy.js";import{a as s,f as n}from"../chunks/DEELgv7K.js";import{i as D}from"../chunks/Y22E1hJM.js";import{a as r}from"../chunks/CjcrXziO.js";import{s as S,a as B}from"../chunks/Cp8V0Xy2.js";import{b as i}from"../chunks/Djnkhy-S.js";import{d as y}from"../chunks/fPy6xmgG.js";import{E as j}from"../chunks/m9eWh0Cd.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};
@@ -0,0 +1 @@
1
+ import{_ as m}from"../chunks/Bt4AyT3o.js";export{m as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{o as Ae,g as U}from"../chunks/Bn2NtlTj.js";import{p as Me,d as c,M as G,t as y,g as a,a as Ne,c as o,b as r,s as i,r as l,ae as H,u as p}from"../chunks/BdTBlfLy.js";import{s as E}from"../chunks/DtZk82gG.js";import{i as k}from"../chunks/Y22E1hJM.js";import{e as we,i as Ie,t as J,a as Ee,b as ke}from"../chunks/CvczjTXx.js";import{a as m,f,t as Q}from"../chunks/DEELgv7K.js";import{b as Fe,a as F,d as De}from"../chunks/CjcrXziO.js";import{s as Le,a as V}from"../chunks/Cp8V0Xy2.js";import{g as qe}from"../chunks/BaUG2TJ-.js";import{b as W}from"../chunks/qKdzaeX3.js";import{p as Be}from"../chunks/Dz9cUCuv.js";import{s as Y,n as ee}from"../chunks/BhCO1Fpt.js";import{d as Ke}from"../chunks/Tea2dBJ8.js";import{C as Pe,S as Oe,L as ae}from"../chunks/BEM1BeVF.js";import{B as te}from"../chunks/Bcs4KYNp.js";import{I as re}from"../chunks/nlAMTi52.js";var ze=f('<div class="create-error svelte-10791bh"> </div>'),Re=f('<div class="readonly-banner svelte-10791bh">Creating tables requires dev mode. Start <code class="svelte-10791bh">pnpm dev</code> to enable schema edits.</div>'),Xe=f("<option> </option>"),Ze=f("<option> </option>"),je=f('<div class="create-page svelte-10791bh"><h2 class="create-title svelte-10791bh">Create Table</h2> <p class="create-desc svelte-10791bh">Define a new database table</p> <div class="create-form svelte-10791bh"><!> <!> <div class="create-section svelte-10791bh"><div class="create-row svelte-10791bh"><div class="create-field svelte-10791bh"><label class="create-label svelte-10791bh">Database</label> <div class="ns-select svelte-10791bh"><select class="ns-dropdown svelte-10791bh"><!><!></select> <!></div></div> <div class="create-field svelte-10791bh"><!></div></div></div> <div class="create-section svelte-10791bh"><div class="auto-fields-info svelte-10791bh">Auto-managed fields (id, createdAt, updatedAt) are automatically included.</div> <!></div> <div class="create-actions svelte-10791bh"><a><!></a> <!></div></div> <!></div>');function da(se,oe){Me(oe,!0);const le=()=>V(Ke,"$devInfoStore",D),ie=()=>V(ee,"$namespaceNames",D),[D,ne]=Le();let n=c(""),h=c(""),v=c(G({})),x=c(!1),d=c(""),_=p(()=>le().devMode),g=c(!1),S=c("create"),T=c(""),C=c(G({type:"string"}));const L=`create-table-namespace-${Math.random().toString(36).slice(2,9)}`;let q=p(ie);Ae(async()=>{var s;await Y.loadSchema();const e=(s=U(Be).url.searchParams.get("dbKey"))==null?void 0:s.trim(),t=U(ee);r(n,e||(t.includes("shared")?"shared":t[0]??"shared"),!0)});function de(){r(S,"create"),r(T,""),r(C,{type:"string"},!0),r(g,!0)}function ce(e,t){r(S,"edit"),r(T,e,!0),r(C,{...t},!0),r(g,!0)}function ve(e,t){r(v,{...a(v),[e]:t},!0)}function me(e){const{[e]:t,...s}=a(v);r(v,s,!0)}function ue(){const e=a(h).trim();return e?e.length>ae.TABLE_NAME_MAX?(r(d,`Table name must be ${ae.TABLE_NAME_MAX} chars or less.`),!1):/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?!0:(r(d,"Table name must start with a letter or underscore."),!1):(r(d,"Table name is required."),!1)}async function pe(){if(!a(_)){r(d,"Creating tables requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),J(a(d));return}if(!ue())return;r(x,!0),r(d,"");const e=a(n).trim()||"shared",t=a(h).trim();try{await Ee.schemaMutation("schema/tables",{method:"POST",body:{dbKey:e,name:t,schema:a(v)}}),ke(`Table "${t}" created`),await Y.waitForTableReady(t,{namespace:e}),qe(`${W}/database/tables/${encodeURIComponent(t)}`)}catch(s){r(d,De(s,"Failed to create the table."),!0),J(a(d))}finally{r(x,!1)}}var A=je(),M=i(o(A),4),B=o(M);{var be=e=>{var t=ze(),s=o(t,!0);l(t),y(()=>E(s,a(d))),m(e,t)};k(B,e=>{a(d)&&e(be)})}var K=i(B,2);{var fe=e=>{var t=Re();m(e,t)};k(K,e=>{a(_)||e(fe)})}var N=i(K,2),P=o(N),w=o(P),O=o(w),z=i(O,2),b=o(z),R=o(b);we(R,17,()=>a(q),Ie,(e,t)=>{var s=Xe(),u=o(s,!0);l(s);var j={};y(()=>{E(u,a(t)),j!==(j=a(t))&&(s.value=(s.__value=a(t))??"")}),m(e,s)});var he=i(R);{var _e=e=>{var t=Ze(),s=o(t);l(t);var u={};y(()=>{E(s,`${a(n)??""} (new)`),u!==(u=a(n))&&(t.value=(t.__value=a(n))??"")}),m(e,t)},ge=p(()=>!a(q).includes(a(n))&&a(n)!=="default");k(he,e=>{a(ge)&&e(_e)})}l(b);var $e=i(b,2);re($e,{label:"Choose or create a database",placeholder:"Type a new database name...",get value(){return a(n)},set value(e){r(n,e,!0)}}),l(z),l(w);var X=i(w,2),ye=o(X);re(ye,{label:"Table Name",placeholder:"my_table",get value(){return a(h)},set value(e){r(h,e,!0)}}),l(X),l(P),l(N);var I=i(N,2),xe=i(o(I),2);{let e=p(()=>!a(_));Pe(xe,{get fields(){return a(v)},get readonly(){return a(e)},onaddclick:de,oneditclick:ce,ondeleteclick:me})}l(I);var Z=i(I,2),$=o(Z),Se=o($);te(Se,{variant:"secondary",children:(e,t)=>{H();var s=Q("Cancel");m(e,s)},$$slots:{default:!0}}),l($);var Te=i($,2);{let e=p(()=>!a(_));te(Te,{variant:"primary",get loading(){return a(x)},get disabled(){return a(e)},onclick:pe,children:(t,s)=>{H();var u=Q("Create Table");m(t,u)},$$slots:{default:!0}})}l(Z),l(M);var Ce=i(M,2);{let e=p(()=>Object.keys(a(v)));Oe(Ce,{get mode(){return a(S)},get columnName(){return a(T)},get field(){return a(C)},get existingColumns(){return a(e)},onsave:ve,get open(){return a(g)},set open(t){r(g,t,!0)}})}l(A),y(()=>{F(O,"for",L),F(b,"id",L),F($,"href",`${W??""}/database/tables`)}),Fe(b,()=>a(n),e=>r(n,e)),m(se,A),Ne(),ne()}export{da as component};
1
+ import"../chunks/CWj6FrbW.js";import{o as Ae,g as U}from"../chunks/Bn2NtlTj.js";import{p as Me,d as c,M as G,t as y,g as a,a as Ne,c as o,b as r,s as i,r as l,ae as H,u as p}from"../chunks/BdTBlfLy.js";import{s as E}from"../chunks/DtZk82gG.js";import{i as k}from"../chunks/Y22E1hJM.js";import{e as we,i as Ie,t as J,a as Ee,b as ke}from"../chunks/DcVb45Ds.js";import{a as m,f,t as Q}from"../chunks/DEELgv7K.js";import{b as Fe,a as F,d as De}from"../chunks/CjcrXziO.js";import{s as Le,a as V}from"../chunks/Cp8V0Xy2.js";import{g as qe}from"../chunks/CKVjMXZi.js";import{b as W}from"../chunks/Djnkhy-S.js";import{p as Be}from"../chunks/DYtrHeVQ.js";import{s as Y,n as ee}from"../chunks/BMXWUTG-.js";import{d as Ke}from"../chunks/fPy6xmgG.js";import{C as Pe,S as Oe,L as ae}from"../chunks/zl2AUKMP.js";import{B as te}from"../chunks/Bcs4KYNp.js";import{I as re}from"../chunks/nlAMTi52.js";var ze=f('<div class="create-error svelte-10791bh"> </div>'),Re=f('<div class="readonly-banner svelte-10791bh">Creating tables requires dev mode. Start <code class="svelte-10791bh">pnpm dev</code> to enable schema edits.</div>'),Xe=f("<option> </option>"),Ze=f("<option> </option>"),je=f('<div class="create-page svelte-10791bh"><h2 class="create-title svelte-10791bh">Create Table</h2> <p class="create-desc svelte-10791bh">Define a new database table</p> <div class="create-form svelte-10791bh"><!> <!> <div class="create-section svelte-10791bh"><div class="create-row svelte-10791bh"><div class="create-field svelte-10791bh"><label class="create-label svelte-10791bh">Database</label> <div class="ns-select svelte-10791bh"><select class="ns-dropdown svelte-10791bh"><!><!></select> <!></div></div> <div class="create-field svelte-10791bh"><!></div></div></div> <div class="create-section svelte-10791bh"><div class="auto-fields-info svelte-10791bh">Auto-managed fields (id, createdAt, updatedAt) are automatically included.</div> <!></div> <div class="create-actions svelte-10791bh"><a><!></a> <!></div></div> <!></div>');function da(se,oe){Me(oe,!0);const le=()=>V(Ke,"$devInfoStore",D),ie=()=>V(ee,"$namespaceNames",D),[D,ne]=Le();let n=c(""),h=c(""),v=c(G({})),x=c(!1),d=c(""),_=p(()=>le().devMode),g=c(!1),S=c("create"),T=c(""),C=c(G({type:"string"}));const L=`create-table-namespace-${Math.random().toString(36).slice(2,9)}`;let q=p(ie);Ae(async()=>{var s;await Y.loadSchema();const e=(s=U(Be).url.searchParams.get("dbKey"))==null?void 0:s.trim(),t=U(ee);r(n,e||(t.includes("shared")?"shared":t[0]??"shared"),!0)});function de(){r(S,"create"),r(T,""),r(C,{type:"string"},!0),r(g,!0)}function ce(e,t){r(S,"edit"),r(T,e,!0),r(C,{...t},!0),r(g,!0)}function ve(e,t){r(v,{...a(v),[e]:t},!0)}function me(e){const{[e]:t,...s}=a(v);r(v,s,!0)}function ue(){const e=a(h).trim();return e?e.length>ae.TABLE_NAME_MAX?(r(d,`Table name must be ${ae.TABLE_NAME_MAX} chars or less.`),!1):/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?!0:(r(d,"Table name must start with a letter or underscore."),!1):(r(d,"Table name is required."),!1)}async function pe(){if(!a(_)){r(d,"Creating tables requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),J(a(d));return}if(!ue())return;r(x,!0),r(d,"");const e=a(n).trim()||"shared",t=a(h).trim();try{await Ee.schemaMutation("schema/tables",{method:"POST",body:{dbKey:e,name:t,schema:a(v)}}),ke(`Table "${t}" created`),await Y.waitForTableReady(t,{namespace:e}),qe(`${W}/database/tables/${encodeURIComponent(t)}`)}catch(s){r(d,De(s,"Failed to create the table."),!0),J(a(d))}finally{r(x,!1)}}var A=je(),M=i(o(A),4),B=o(M);{var be=e=>{var t=ze(),s=o(t,!0);l(t),y(()=>E(s,a(d))),m(e,t)};k(B,e=>{a(d)&&e(be)})}var K=i(B,2);{var fe=e=>{var t=Re();m(e,t)};k(K,e=>{a(_)||e(fe)})}var N=i(K,2),P=o(N),w=o(P),O=o(w),z=i(O,2),b=o(z),R=o(b);we(R,17,()=>a(q),Ie,(e,t)=>{var s=Xe(),u=o(s,!0);l(s);var j={};y(()=>{E(u,a(t)),j!==(j=a(t))&&(s.value=(s.__value=a(t))??"")}),m(e,s)});var he=i(R);{var _e=e=>{var t=Ze(),s=o(t);l(t);var u={};y(()=>{E(s,`${a(n)??""} (new)`),u!==(u=a(n))&&(t.value=(t.__value=a(n))??"")}),m(e,t)},ge=p(()=>!a(q).includes(a(n))&&a(n)!=="default");k(he,e=>{a(ge)&&e(_e)})}l(b);var $e=i(b,2);re($e,{label:"Choose or create a database",placeholder:"Type a new database name...",get value(){return a(n)},set value(e){r(n,e,!0)}}),l(z),l(w);var X=i(w,2),ye=o(X);re(ye,{label:"Table Name",placeholder:"my_table",get value(){return a(h)},set value(e){r(h,e,!0)}}),l(X),l(P),l(N);var I=i(N,2),xe=i(o(I),2);{let e=p(()=>!a(_));Pe(xe,{get fields(){return a(v)},get readonly(){return a(e)},onaddclick:de,oneditclick:ce,ondeleteclick:me})}l(I);var Z=i(I,2),$=o(Z),Se=o($);te(Se,{variant:"secondary",children:(e,t)=>{H();var s=Q("Cancel");m(e,s)},$$slots:{default:!0}}),l($);var Te=i($,2);{let e=p(()=>!a(_));te(Te,{variant:"primary",get loading(){return a(x)},get disabled(){return a(e)},onclick:pe,children:(t,s)=>{H();var u=Q("Create Table");m(t,u)},$$slots:{default:!0}})}l(Z),l(M);var Ce=i(M,2);{let e=p(()=>Object.keys(a(v)));Oe(Ce,{get mode(){return a(S)},get columnName(){return a(T)},get field(){return a(C)},get existingColumns(){return a(e)},onsave:ve,get open(){return a(g)},set open(t){r(g,t,!0)}})}l(A),y(()=>{F(O,"for",L),F(b,"id",L),F($,"href",`${W??""}/database/tables`)}),Fe(b,()=>a(n),e=>r(n,e)),m(se,A),Ne(),ne()}export{da as component};
@@ -1,4 +1,4 @@
1
- import"../chunks/CWj6FrbW.js";import{o as y}from"../chunks/Bn2NtlTj.js";import{p as b,a as O,b as d,c as g,g as o,s as T,r as v,t as I,d as A}from"../chunks/BdTBlfLy.js";import{s as P}from"../chunks/DtZk82gG.js";import{i as _}from"../chunks/Y22E1hJM.js";import{a as l,f as h}from"../chunks/DEELgv7K.js";import{d as q,a as x}from"../chunks/CjcrXziO.js";import{P as N}from"../chunks/BkZCgsc3.js";import{g as D}from"../chunks/Q2nPFxS6.js";import{b as G,A as H}from"../chunks/DnpbvAPi.js";function U(s){return s.replace(/<\/script/gi,"<\\/script")}function j(s,f,a){const n=U(s);return`<!DOCTYPE html>
1
+ import"../chunks/CWj6FrbW.js";import{o as y}from"../chunks/Bn2NtlTj.js";import{p as b,a as O,b as d,c as g,g as o,s as T,r as v,t as I,d as A}from"../chunks/BdTBlfLy.js";import{s as P}from"../chunks/DtZk82gG.js";import{i as _}from"../chunks/Y22E1hJM.js";import{a as l,f as h}from"../chunks/DEELgv7K.js";import{d as q,a as x}from"../chunks/CjcrXziO.js";import{P as N}from"../chunks/BkZCgsc3.js";import{g as D}from"../chunks/Q2nPFxS6.js";import{b as G,A as H}from"../chunks/B9efkx2V.js";function U(s){return s.replace(/<\/script/gi,"<\\/script")}function j(s,f,a){const n=U(s);return`<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8" />
@@ -1,2 +1,2 @@
1
- import"../chunks/CWj6FrbW.js";import{o as He}from"../chunks/Bn2NtlTj.js";import{p as Oe,d as b,M as he,a as De,b as n,c as s,s as r,r as t,g as e,t as w,f as ge,ae as Be,ag as xe}from"../chunks/BdTBlfLy.js";import{d as Ie,s as d,a as Ne}from"../chunks/DtZk82gG.js";import{i as V}from"../chunks/Y22E1hJM.js";import{a as Pe,t as ve,e as te,i as se}from"../chunks/CvczjTXx.js";import{a as f,c as Me,t as je,f as _}from"../chunks/DEELgv7K.js";import{d as ye,a as ae,b as Ae,s as ce}from"../chunks/CjcrXziO.js";import{b as be}from"../chunks/CYatlt7w.js";import{P as Ce}from"../chunks/BkZCgsc3.js";import{f as Je}from"../chunks/Q2nPFxS6.js";import{B as Ge}from"../chunks/Bcs4KYNp.js";import{E as Ke}from"../chunks/m9eWh0Cd.js";var Re=_('<div class="fn-empty svelte-1gs6rhm">Loading...</div>'),Ve=_('<div class="fn-empty svelte-1gs6rhm">No functions registered</div>'),ze=_('<span class="fn-method-badge svelte-1gs6rhm"> </span>'),Le=_('<button><span class="fn-item__path svelte-1gs6rhm"> </span> <div class="fn-item__meta svelte-1gs6rhm"><!> <span class="fn-type-badge svelte-1gs6rhm"> </span></div></button>'),Ue=_("<option> </option>"),Xe=_('<div class="fn-field svelte-1gs6rhm"><label class="fn-label svelte-1gs6rhm">Request Body (JSON)</label> <textarea class="fn-textarea svelte-1gs6rhm" rows="6" spellcheck="false"></textarea></div>'),Qe=_('<div class="fn-response svelte-1gs6rhm"><div class="fn-response__header svelte-1gs6rhm"><span> </span> <span class="fn-time svelte-1gs6rhm"> </span></div> <pre class="fn-response__body svelte-1gs6rhm"> </pre></div>'),We=_('<div class="fn-history__item svelte-1gs6rhm"><span class="fn-history__method svelte-1gs6rhm"> </span> <span class="fn-history__path svelte-1gs6rhm"> </span> <span> </span> <span class="fn-history__time svelte-1gs6rhm"> </span></div>'),Ye=_('<div class="fn-history svelte-1gs6rhm"><span class="fn-history__title svelte-1gs6rhm">Recent Executions</span> <!></div>'),Ze=_('<div class="fn-exec svelte-1gs6rhm"><div class="fn-exec__header svelte-1gs6rhm"><code class="fn-path svelte-1gs6rhm"> </code></div> <div class="fn-exec__controls svelte-1gs6rhm"><select class="fn-select svelte-1gs6rhm"></select> <!></div> <!> <div class="fn-field svelte-1gs6rhm"><label class="fn-label svelte-1gs6rhm">Custom Headers (one per line: Key: Value)</label> <textarea class="fn-textarea fn-textarea--sm svelte-1gs6rhm" rows="3" spellcheck="false" placeholder="X-Custom: value"></textarea></div></div> <!> <!>',1),et=_('<div class="fn-layout svelte-1gs6rhm"><div class="fn-sidebar svelte-1gs6rhm"><div class="fn-sidebar__header svelte-1gs6rhm"><span class="fn-sidebar__title svelte-1gs6rhm">Functions</span> <span class="fn-sidebar__count svelte-1gs6rhm"> </span></div> <!></div> <div class="fn-main svelte-1gs6rhm"><!></div></div>');function mt(Ee,Se){Oe(Se,!0);let N=b(he([])),de=b(!0),g=b(null),h=b("POST"),F=b("{}"),z=b(""),P=b(!1);const fe=`function-request-body-${Math.random().toString(36).slice(2,9)}`,ue=`function-request-headers-${Math.random().toString(36).slice(2,9)}`;let c=b(null),L=b(he([]));He(async()=>{try{const m=await Pe.fetch("data/functions");n(N,m.functions??[],!0)}catch(m){ve(ye(m,"Failed to load functions.")),n(N,[],!0)}finally{n(de,!1)}});function $e(m){n(g,m,!0),n(h,m.methods[0]||"POST",!0),n(F,e(h)==="GET"?"":"{}",!0),n(c,null)}async function ke(){if(!e(g))return;n(P,!0),n(c,null);const m=Date.now();try{const U=`/api/functions/${e(g).path}`,E={"Content-Type":"application/json"};if(e(z).trim())for(const T of e(z).split(`
1
+ import"../chunks/CWj6FrbW.js";import{o as He}from"../chunks/Bn2NtlTj.js";import{p as Oe,d as b,M as he,a as De,b as n,c as s,s as r,r as t,g as e,t as w,f as ge,ae as Be,ag as xe}from"../chunks/BdTBlfLy.js";import{d as Ie,s as d,a as Ne}from"../chunks/DtZk82gG.js";import{i as V}from"../chunks/Y22E1hJM.js";import{a as Pe,t as ve,e as te,i as se}from"../chunks/DcVb45Ds.js";import{a as f,c as Me,t as je,f as _}from"../chunks/DEELgv7K.js";import{d as ye,a as ae,b as Ae,s as ce}from"../chunks/CjcrXziO.js";import{b as be}from"../chunks/CYatlt7w.js";import{P as Ce}from"../chunks/BkZCgsc3.js";import{f as Je}from"../chunks/Q2nPFxS6.js";import{B as Ge}from"../chunks/Bcs4KYNp.js";import{E as Ke}from"../chunks/m9eWh0Cd.js";var Re=_('<div class="fn-empty svelte-1gs6rhm">Loading...</div>'),Ve=_('<div class="fn-empty svelte-1gs6rhm">No functions registered</div>'),ze=_('<span class="fn-method-badge svelte-1gs6rhm"> </span>'),Le=_('<button><span class="fn-item__path svelte-1gs6rhm"> </span> <div class="fn-item__meta svelte-1gs6rhm"><!> <span class="fn-type-badge svelte-1gs6rhm"> </span></div></button>'),Ue=_("<option> </option>"),Xe=_('<div class="fn-field svelte-1gs6rhm"><label class="fn-label svelte-1gs6rhm">Request Body (JSON)</label> <textarea class="fn-textarea svelte-1gs6rhm" rows="6" spellcheck="false"></textarea></div>'),Qe=_('<div class="fn-response svelte-1gs6rhm"><div class="fn-response__header svelte-1gs6rhm"><span> </span> <span class="fn-time svelte-1gs6rhm"> </span></div> <pre class="fn-response__body svelte-1gs6rhm"> </pre></div>'),We=_('<div class="fn-history__item svelte-1gs6rhm"><span class="fn-history__method svelte-1gs6rhm"> </span> <span class="fn-history__path svelte-1gs6rhm"> </span> <span> </span> <span class="fn-history__time svelte-1gs6rhm"> </span></div>'),Ye=_('<div class="fn-history svelte-1gs6rhm"><span class="fn-history__title svelte-1gs6rhm">Recent Executions</span> <!></div>'),Ze=_('<div class="fn-exec svelte-1gs6rhm"><div class="fn-exec__header svelte-1gs6rhm"><code class="fn-path svelte-1gs6rhm"> </code></div> <div class="fn-exec__controls svelte-1gs6rhm"><select class="fn-select svelte-1gs6rhm"></select> <!></div> <!> <div class="fn-field svelte-1gs6rhm"><label class="fn-label svelte-1gs6rhm">Custom Headers (one per line: Key: Value)</label> <textarea class="fn-textarea fn-textarea--sm svelte-1gs6rhm" rows="3" spellcheck="false" placeholder="X-Custom: value"></textarea></div></div> <!> <!>',1),et=_('<div class="fn-layout svelte-1gs6rhm"><div class="fn-sidebar svelte-1gs6rhm"><div class="fn-sidebar__header svelte-1gs6rhm"><span class="fn-sidebar__title svelte-1gs6rhm">Functions</span> <span class="fn-sidebar__count svelte-1gs6rhm"> </span></div> <!></div> <div class="fn-main svelte-1gs6rhm"><!></div></div>');function mt(Ee,Se){Oe(Se,!0);let N=b(he([])),de=b(!0),g=b(null),h=b("POST"),F=b("{}"),z=b(""),P=b(!1);const fe=`function-request-body-${Math.random().toString(36).slice(2,9)}`,ue=`function-request-headers-${Math.random().toString(36).slice(2,9)}`;let c=b(null),L=b(he([]));He(async()=>{try{const m=await Pe.fetch("data/functions");n(N,m.functions??[],!0)}catch(m){ve(ye(m,"Failed to load functions.")),n(N,[],!0)}finally{n(de,!1)}});function $e(m){n(g,m,!0),n(h,m.methods[0]||"POST",!0),n(F,e(h)==="GET"?"":"{}",!0),n(c,null)}async function ke(){if(!e(g))return;n(P,!0),n(c,null);const m=Date.now();try{const U=`/api/functions/${e(g).path}`,E={"Content-Type":"application/json"};if(e(z).trim())for(const T of e(z).split(`
2
2
  `)){const x=T.trim();if(!x)continue;const O=x.indexOf(":");if(O===-1){ve(`Invalid header format: "${x}". Use "Key: Value" format.`),n(P,!1);return}const Q=x.slice(0,O).trim(),re=x.slice(O+1).trim();Q&&(E[Q]=re)}const H={method:e(h),headers:E};if(e(h)!=="GET"&&e(h)!=="HEAD"&&e(F).trim()){try{JSON.parse(e(F))}catch{ve('Invalid JSON in request body. Example: {"key": "value"}'),n(P,!1);return}H.body=e(F)}const p=await fetch(U,H),M=Date.now()-m;let j;if((p.headers.get("content-type")||"").includes("json")){const T=await p.json();j=JSON.stringify(T,null,2)}else j=await p.text();const X={};p.headers.forEach((T,x)=>{X[x]=T}),n(c,{status:p.status,statusText:p.statusText,body:j,time:M,headers:X},!0),n(L,[{fn:e(g).path,method:e(h),status:p.status,time:M,timestamp:new Date().toISOString()},...e(L).slice(0,19)],!0)}catch(U){const E=Date.now()-m;n(c,{status:0,statusText:"Network Error",body:ye(U,`Failed to execute /${e(g).path}.`,{hint:"Make sure the EdgeBase server is running and the function route exists."}),time:E,headers:{}},!0)}finally{n(P,!1)}}Ce(Ee,{title:"Functions",description:"Execute and test your App Functions",get docsHref(){return Je},children:(m,U)=>{var E=et(),H=s(E),p=s(H),M=r(s(p),2),j=s(M,!0);t(M),t(p);var me=r(p,2);{var X=o=>{var y=Re();f(o,y)},T=o=>{var y=Ve();f(o,y)},x=o=>{var y=Me(),A=ge(y);te(A,17,()=>e(N),se,(C,S)=>{var q=Le();let D;var $=s(q),ne=s($);t($);var J=r($,2),W=s(J);te(W,17,()=>e(S).methods,se,(k,Z)=>{var K=ze(),oe=s(K,!0);t(K),w(()=>d(oe,e(Z))),f(k,K)});var G=r(W,2),Y=s(G,!0);t(G),t(J),t(q),w(()=>{var k;D=ce(q,1,"fn-item svelte-1gs6rhm",null,D,{"fn-item--active":((k=e(g))==null?void 0:k.path)===e(S).path}),d(ne,`/${e(S).path??""}`),d(Y,e(S).type)}),Ne("click",q,()=>$e(e(S))),f(C,q)}),f(o,y)};V(me,o=>{e(de)?o(X):e(N).length===0?o(T,1):o(x,!1)})}t(H);var O=r(H,2),Q=s(O);{var re=o=>{Ke(o,{title:"Select a function",description:"Choose a function from the list to execute it."})},we=o=>{var y=Ze(),A=ge(y),C=s(A),S=s(C),q=s(S);t(S),t(C);var D=r(C,2),$=s(D);te($,21,()=>e(g).methods,se,(a,l)=>{var i=Ue(),u=s(i,!0);t(i);var v={};w(()=>{d(u,e(l)),v!==(v=e(l))&&(i.value=(i.__value=e(l))??"")}),f(a,i)}),t($);var ne=r($,2);Ge(ne,{variant:"primary",size:"sm",onclick:ke,get loading(){return e(P)},children:(a,l)=>{Be();var i=je("Execute");f(a,i)},$$slots:{default:!0}}),t(D);var J=r(D,2);{var W=a=>{var l=Xe(),i=s(l),u=r(i,2);xe(u),t(l),w(()=>{ae(i,"for",fe),ae(u,"id",fe)}),be(u,()=>e(F),v=>n(F,v)),f(a,l)};V(J,a=>{e(h)!=="GET"&&e(h)!=="HEAD"&&a(W)})}var G=r(J,2),Y=s(G),k=r(Y,2);xe(k),t(G),t(A);var Z=r(A,2);{var K=a=>{var l=Qe(),i=s(l),u=s(i);let v;var R=s(u);t(u);var B=r(u,2),le=s(B);t(B),t(i);var I=r(i,2),ie=s(I,!0);t(I),t(l),w(()=>{v=ce(u,1,"fn-status svelte-1gs6rhm",null,v,{"fn-status--ok":e(c).status>=200&&e(c).status<300,"fn-status--err":e(c).status>=400||e(c).status===0}),d(R,`${e(c).status??""} ${e(c).statusText??""}`),d(le,`${e(c).time??""}ms`),d(ie,e(c).body)}),f(a,l)};V(Z,a=>{e(c)&&a(K)})}var oe=r(Z,2);{var Te=a=>{var l=Ye(),i=r(s(l),2);te(i,17,()=>e(L),se,(u,v)=>{var R=We(),B=s(R),le=s(B,!0);t(B);var I=r(B,2),ie=s(I);t(I);var ee=r(I,2);let pe;var qe=s(ee,!0);t(ee);var _e=r(ee,2),Fe=s(_e);t(_e),t(R),w(()=>{d(le,e(v).method),d(ie,`/${e(v).fn??""}`),pe=ce(ee,1,"fn-history__status svelte-1gs6rhm",null,pe,{"fn-status--ok":e(v).status>=200&&e(v).status<300,"fn-status--err":e(v).status>=400}),d(qe,e(v).status),d(Fe,`${e(v).time??""}ms`)}),f(u,R)}),t(l),f(a,l)};V(oe,a=>{e(L).length>0&&a(Te)})}w(()=>{d(q,`/api/functions/${e(g).path??""}`),ae(Y,"for",ue),ae(k,"id",ue)}),Ae($,()=>e(h),a=>n(h,a)),be(k,()=>e(z),a=>n(z,a)),f(o,y)};V(Q,o=>{e(g)?o(we,!1):o(re)})}t(O),t(E),w(()=>d(j,e(N).length)),f(m,E)}}),De()}Ie(["click"]);export{mt as component};
@@ -1,2 +1,2 @@
1
- import"../chunks/CWj6FrbW.js";import{p as De,w as le,g as e,b as n,t as m,a as Fe,d as g,u as h,c as s,s as i,r as o,f as D,ae as F}from"../chunks/BdTBlfLy.js";import{s as p,e as Me}from"../chunks/DtZk82gG.js";import{a as l,f as _,t as w,c as Ue}from"../chunks/DEELgv7K.js";import{i as x}from"../chunks/Y22E1hJM.js";import{d as ne,a as qe}from"../chunks/CjcrXziO.js";import{a as ve,s as He}from"../chunks/Cp8V0Xy2.js";import{g as Ke}from"../chunks/BaUG2TJ-.js";import{p as Ne}from"../chunks/Dz9cUCuv.js";import{b as Oe}from"../chunks/qKdzaeX3.js";import{a as X}from"../chunks/DnpbvAPi.js";import{f as We,g as Ge}from"../chunks/D1u3u7xu.js";import{B as de}from"../chunks/Bcs4KYNp.js";import{I as ce}from"../chunks/nlAMTi52.js";var Je=_('<div class="login-error svelte-1x05zx6"><p class="login-error__msg svelte-1x05zx6"> </p> <p class="login-error__hint svelte-1x05zx6">If this should be a fresh setup, the UI is not currently connected to the new server instance.</p></div> <!>',1),Qe=_('<div class="setup-notice svelte-1x05zx6"><div class="setup-notice__icon svelte-1x05zx6">🛡️</div> <div class="setup-notice__text svelte-1x05zx6"><strong class="svelte-1x05zx6">Admin setup moved to the CLI.</strong> </div></div> <div class="login-recovery svelte-1x05zx6"><p class="login-recovery__title svelte-1x05zx6">Run this once from your project folder</p> <code class="login-recovery__code svelte-1x05zx6"> </code> <p class="login-recovery__hint svelte-1x05zx6">Use the same bootstrap admin email you deployed with. The command only creates the first admin when none exist.</p></div>',1),Ve=_(`<div class="setup-notice svelte-1x05zx6"><div class="setup-notice__icon svelte-1x05zx6">🚀</div> <div class="setup-notice__text svelte-1x05zx6"><strong class="svelte-1x05zx6">Welcome!</strong> This is your first time setting up EdgeBase.
1
+ import"../chunks/CWj6FrbW.js";import{p as De,w as le,g as e,b as n,t as m,a as Fe,d as g,u as h,c as s,s as i,r as o,f as D,ae as F}from"../chunks/BdTBlfLy.js";import{s as p,e as Me}from"../chunks/DtZk82gG.js";import{a as l,f as _,t as w,c as Ue}from"../chunks/DEELgv7K.js";import{i as x}from"../chunks/Y22E1hJM.js";import{d as ne,a as qe}from"../chunks/CjcrXziO.js";import{a as ve,s as He}from"../chunks/Cp8V0Xy2.js";import{g as Ke}from"../chunks/CKVjMXZi.js";import{p as Ne}from"../chunks/DYtrHeVQ.js";import{b as Oe}from"../chunks/Djnkhy-S.js";import{a as X}from"../chunks/B9efkx2V.js";import{f as We,g as Ge}from"../chunks/D8aeTKry.js";import{B as de}from"../chunks/Bcs4KYNp.js";import{I as ce}from"../chunks/nlAMTi52.js";var Je=_('<div class="login-error svelte-1x05zx6"><p class="login-error__msg svelte-1x05zx6"> </p> <p class="login-error__hint svelte-1x05zx6">If this should be a fresh setup, the UI is not currently connected to the new server instance.</p></div> <!>',1),Qe=_('<div class="setup-notice svelte-1x05zx6"><div class="setup-notice__icon svelte-1x05zx6">🛡️</div> <div class="setup-notice__text svelte-1x05zx6"><strong class="svelte-1x05zx6">Admin setup moved to the CLI.</strong> </div></div> <div class="login-recovery svelte-1x05zx6"><p class="login-recovery__title svelte-1x05zx6">Run this once from your project folder</p> <code class="login-recovery__code svelte-1x05zx6"> </code> <p class="login-recovery__hint svelte-1x05zx6">Use the same bootstrap admin email you deployed with. The command only creates the first admin when none exist.</p></div>',1),Ve=_(`<div class="setup-notice svelte-1x05zx6"><div class="setup-notice__icon svelte-1x05zx6">🚀</div> <div class="setup-notice__text svelte-1x05zx6"><strong class="svelte-1x05zx6">Welcome!</strong> This is your first time setting up EdgeBase.
2
2
  Enter your email and a password below to create the admin account.</div></div>`),Xe=_('<p class="login-error__hint svelte-1x05zx6">Admin password recovery is handled through the CLI. Use the recovery command shown below instead of email reset.</p>'),Ye=_('<div class="login-error svelte-1x05zx6"><p class="login-error__msg svelte-1x05zx6"> </p> <!></div>'),Ze=_('<span class="login-hint svelte-1x05zx6">This will be your admin login password.</span>'),et=_('<div class="login-recovery svelte-1x05zx6"><p class="login-recovery__title svelte-1x05zx6">Forgot password?</p> <code class="login-recovery__code svelte-1x05zx6"> </code> <p class="login-recovery__hint svelte-1x05zx6"><!></p></div>'),tt=_('<!> <form class="login-form svelte-1x05zx6"><!> <div class="login-field svelte-1x05zx6"><label class="login-label svelte-1x05zx6" for="email"> </label> <!></div> <div class="login-field svelte-1x05zx6"><label class="login-label svelte-1x05zx6" for="password"> </label> <!> <!></div> <!> <!></form>',1),rt=_('<div class="login-page svelte-1x05zx6"><div class="login-card svelte-1x05zx6"><div class="login-header svelte-1x05zx6"><img class="login-logo svelte-1x05zx6" alt="EdgeBase logo"/> <h1 class="login-title svelte-1x05zx6">EdgeBase</h1> <p class="login-subtitle svelte-1x05zx6"><!></p></div> <!></div></div>');function ft(ue,pe){De(pe,!0);const M=()=>ve(Ne,"$page",Y),me=()=>ve(X,"$authStore",Y),[Y,xe]=He();let $=g(""),z=g(""),u=g(""),U=g(!1),a=g(null),B=g(!1),C=g(""),Z=g("");function _e(t){return t.hostname==="localhost"||t.hostname==="127.0.0.1"}const fe=h(()=>Ge(M().url)),ee=h(()=>_e(M().url)),ge=h(()=>e(ee)?"npx edgebase admin reset-password --local":"npx edgebase admin reset-password"),he=h(()=>`npx edgebase admin bootstrap --url ${M().url.origin} --service-key <service-key>`),ye=h(()=>(e(u).toLowerCase().includes("invalid")||e(u).toLowerCase().includes("credentials"))&&e(a)===!1),be=h(()=>e(a)===!0&&!e(B));le(()=>{me().accessToken&&Ke(e(fe),{replaceState:!0})}),le(()=>{te()});async function te(){n(C,""),n(a,null);try{const t=await We();n(a,t.needsSetup,!0),n(B,t.publicSetupAllowed??!1,!0),n(Z,t.message??"",!0)}catch(t){n(C,ne(t,"Could not reach the admin server.",{hint:"Make sure the fresh dev server is still running, then retry."}),!0)}}async function we(t){if(t.preventDefault(),e(a)===null){n(u,e(C)||"Setup status is still loading.",!0);return}if(!e($)||!e(z)){n(u,"Email and password are required.");return}if(e(a)&&!e(B)){n(u,"This deployment requires CLI bootstrap before the admin dashboard can be used.");return}if(e(a)&&e(z).length<8){n(u,"Password must be at least 8 characters.");return}n(u,""),n(U,!0);try{e(a)?await X.setup(e($),e(z)):await X.login(e($),e(z))}catch(v){n(u,ne(v,e(a)?"Failed to create the admin account.":"Authentication failed."),!0)}finally{n(U,!1)}}var q=rt(),re=s(q),H=s(re),ae=s(H),se=i(ae,4),ze=s(se);{var Ce=t=>{var v=w();m(()=>p(v,e(C)?"Admin server unavailable":"Loading...")),l(t,v)},Se=t=>{var v=w();m(()=>p(v,e(B)?"Create your admin account":"Finish admin bootstrap from the CLI")),l(t,v)},Le=t=>{var v=w("Sign in to Admin Dashboard");l(t,v)};x(ze,t=>{e(a)===null?t(Ce):e(a)?t(Se,1):t(Le,!1)})}o(se),o(H);var $e=i(H,2);{var Ae=t=>{var v=Je(),A=D(v),T=s(A),K=s(T,!0);o(T),F(2),o(A);var f=i(A,2);de(f,{type:"button",variant:"secondary",onclick:()=>void te(),children:(y,b)=>{F();var S=w("Retry Connection");l(y,S)},$$slots:{default:!0}}),m(()=>p(K,e(C))),l(t,v)},Ie=t=>{var v=Ue(),A=D(v);{var T=f=>{var y=Qe(),b=D(y),S=i(s(b),2),I=i(s(S));o(S),o(b);var E=i(b,2),R=i(s(E),2),P=s(R,!0);o(R),F(2),o(E),m(()=>{p(I,` ${(e(Z)||"Create the first admin from your project directory so production deployments never expose a public setup form.")??""}`),p(P,e(he))}),l(f,y)},K=f=>{var y=tt(),b=D(y);{var S=r=>{var d=Ve();l(r,d)};x(b,r=>{e(a)&&r(S)})}var I=i(b,2),E=s(I);{var R=r=>{var d=Ye(),c=s(d),G=s(c,!0);o(c);var j=i(c,2);{var J=k=>{var Q=Xe();l(k,Q)};x(j,k=>{e(ye)&&k(J)})}o(d),m(()=>p(G,e(u))),l(r,d)};x(E,r=>{e(u)&&r(R)})}var P=i(E,2),N=s(P),Ee=s(N,!0);o(N);var Pe=i(N,2);ce(Pe,{id:"email",type:"email",placeholder:"admin@example.com",autocomplete:"email",get value(){return e($)},set value(r){n($,r,!0)}}),o(P);var O=i(P,2),W=s(O),ke=s(W,!0);o(W);var oe=i(W,2);{let r=h(()=>e(a)?"Min 8 characters":"Enter your password"),d=h(()=>e(a)?"new-password":"current-password");ce(oe,{id:"password",type:"password",get placeholder(){return e(r)},get autocomplete(){return e(d)},get value(){return e(z)},set value(c){n(z,c,!0)}})}var Be=i(oe,2);{var Te=r=>{var d=Ze();l(r,d)};x(Be,r=>{e(a)&&r(Te)})}o(O);var ie=i(O,2);de(ie,{type:"submit",variant:"primary",get loading(){return e(U)},children:(r,d)=>{F();var c=w();m(()=>p(c,e(a)?"Create Admin Account":"Sign In")),l(r,c)},$$slots:{default:!0}});var Re=i(ie,2);{var je=r=>{var d=et(),c=i(s(d),2),G=s(c,!0);o(c);var j=i(c,2),J=s(j);{var k=L=>{var V=w("Run this in your project folder. `--local` updates the local D1 admin account used by the dev server.");l(L,V)},Q=L=>{var V=w("Run this in your project folder. The CLI will use your configured Service Key or Cloudflare access for recovery.");l(L,V)};x(J,L=>{e(ee)?L(k):L(Q,!1)})}o(j),o(d),m(()=>p(G,e(ge))),l(r,d)};x(Re,r=>{e(a)||r(je)})}o(I),m(()=>{p(Ee,e(a)?"Admin Email":"Email"),p(ke,e(a)?"Choose Password":"Password")}),Me("submit",I,we),l(f,y)};x(A,f=>{e(be)?f(T):f(K,!1)})}l(t,v)};x($e,t=>{e(C)?t(Ae):e(a)!==null&&t(Ie,1)})}o(re),o(q),m(()=>qe(ae,"src",`${Oe}/favicon.svg`)),l(ue,q),Fe(),xe()}export{ft as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{o as Ye}from"../chunks/Bn2NtlTj.js";import{p as Ze,d as f,M as ye,a as et,g as e,f as ce,c as u,b as l,s as o,r as n,ae as G,t as O,u as X}from"../chunks/BdTBlfLy.js";import{d as tt,s as C,a as Le}from"../chunks/DtZk82gG.js";import{i as y}from"../chunks/Y22E1hJM.js";import{e as ke,i as Ce,a as rt,t as at,b as Ie}from"../chunks/CvczjTXx.js";import{t as Y,a as i,f as d}from"../chunks/DEELgv7K.js";import{d as st,s as Z}from"../chunks/CjcrXziO.js";import{d as Ne}from"../chunks/wJsUhbfZ.js";import{g as lt}from"../chunks/Ce-ngf4p.js";import{P as ot}from"../chunks/BkZCgsc3.js";import{a as nt}from"../chunks/Q2nPFxS6.js";import{B as ee}from"../chunks/Bcs4KYNp.js";import{I as Oe}from"../chunks/nlAMTi52.js";import{S as pe}from"../chunks/BYyykAbh.js";import{E as it}from"../chunks/m9eWh0Cd.js";import{S as fe}from"../chunks/ejoEf2I5.js";var vt=d('<span class="log-counter log-counter--error svelte-1lsf4ps"> </span>'),ut=d("<!> <!>",1),ct=d('<span class="live-dot svelte-1lsf4ps"></span>'),pt=d('<div class="log-actions svelte-1lsf4ps"><div class="log-counters svelte-1lsf4ps"><span class="log-counter svelte-1lsf4ps"> </span> <!></div> <!> <button><!> </button></div>'),ft=d('<div class="log-skeleton__row svelte-1lsf4ps"><!> <!> <!></div>'),dt=d('<div class="log-skeleton svelte-1lsf4ps"></div>'),gt=d("<span> </span>"),_t=d('<span class="log-entry__service svelte-1lsf4ps"> </span>'),mt=d('<span class="log-entry__time svelte-1lsf4ps"> </span>'),ht=d('<pre class="log-entry__detail svelte-1lsf4ps"> </pre>'),bt=d('<button type="button"><div class="log-entry__header svelte-1lsf4ps"><span><svg width="12" height="12" viewBox="0 0 12 12" fill="none" class="svelte-1lsf4ps"><path d="M4.5 3L7.5 6L4.5 9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-1lsf4ps"></path></svg></span> <!> <!> <!> <span class="log-entry__summary svelte-1lsf4ps"> </span></div> <!></button>'),St=d('<div class="pagination svelte-1lsf4ps"><!></div>'),xt=d('<div class="log-list svelte-1lsf4ps"></div> <!>',1),$t=d('<div class="controls svelte-1lsf4ps"><div class="controls__fields svelte-1lsf4ps"><!> <!> <!> <!> <!></div> <div class="controls__actions svelte-1lsf4ps"><!></div></div> <!>',1);function Bt(Pe,De){Ze(De,!0);let te=f(!0),g=f(ye([])),A=f(null),re=f(!1),B=f("log:"),ae=f("50"),F=f("all"),J=f("all"),z=f(""),q=f(ye(new Set)),I=f(!1),P=f(null),de=f(0),se=f(0);const Ue=[{value:"20",label:"20"},{value:"50",label:"50"},{value:"100",label:"100"}],Ae=[{value:"all",label:"All Levels"},{value:"info",label:"Info"},{value:"warn",label:"Warning (3xx/4xx)"},{value:"error",label:"Error (5xx)"},{value:"debug",label:"Debug"}],Ee=[{value:"all",label:"All Services"},{value:"auth",label:"Auth"},{value:"db",label:"Database"},{value:"storage",label:"Storage"},{value:"databaseLive",label:"Live"},{value:"push",label:"Push"},{value:"room",label:"Rooms"},{value:"function",label:"Functions"},{value:"kv",label:"KV"},{value:"sql",label:"SQL"},{value:"d1",label:"D1"},{value:"vectorize",label:"Vectorize"},{value:"users",label:"Users API"},{value:"admin",label:"Admin"},{value:"health",label:"Health"}];async function E(t=!1){t?l(re,!0):(l(te,!0),l(q,new Set,!0));try{let r=`data/logs?limit=${encodeURIComponent(e(ae))}`;e(B).trim()&&(r+=`&prefix=${encodeURIComponent(e(B).trim())}`),e(F)!=="all"&&(r+=`&level=${encodeURIComponent(e(F))}`),e(J)!=="all"&&(r+=`&category=${encodeURIComponent(e(J))}`),e(z).trim()&&(r+=`&path=${encodeURIComponent(e(z).trim())}`),t&&e(A)&&(r+=`&cursor=${encodeURIComponent(e(A))}`);const s=await rt.fetch(r);t?l(g,[...e(g),...s.logs],!0):l(g,s.logs,!0),l(A,s.cursor,!0),l(de,e(g).length,!0),l(se,e(g).filter(h=>{const p=ge(h);return p==="error"||p==="fatal"||p==="critical"}).length,!0)}catch(r){at(st(r,"Failed to load logs."))}finally{l(te,!1),l(re,!1)}}function Ve(){l(A,null),E()}function Me(t){const r=new Set(e(q));r.has(t)?r.delete(t):r.add(t),l(q,r,!0)}function Re(){l(I,!e(I)),e(I)?(E(),l(P,setInterval(()=>{E()},2e3),!0)):e(P)&&(clearInterval(e(P)),l(P,null))}function je(t){const r=String(t.method??""),s=String(t.path??t.url??""),h=_e(t),p=typeof t.duration=="number"?t.duration:Number(t.duration??0);if(r&&s){const L=[`${r.toUpperCase()} ${s}`];return h>0&&L.push(String(h)),p>0&&L.push(`${Math.round(p)}ms`),L.join(" · ")}if(typeof t.message=="string")return t.message;if(typeof t.msg=="string")return t.msg;if(typeof t.level=="string"&&typeof t.timestamp=="string")return`[${t.level}] ${t.timestamp}`;const x=Object.keys(t);return x.length===0?"(empty)":x.slice(0,3).join(", ")+(x.length>3?"...":"")}function ge(t){const r=t.level??t.severity??"";if(r)return String(r).toLowerCase();const s=_e(t);return s>=500?"error":s>=400?"warn":s===304?"info":s>=300?"warn":s>=200?"info":s>0?"debug":""}function _e(t){if(typeof t.status=="number")return t.status;if(typeof t.status=="string"){const r=Number.parseInt(t.status,10);return Number.isFinite(r)?r:0}return 0}function Be(t){const r=t.timestamp??t.time??t.ts??t.date??"";if(!r)return"";try{const s=typeof r=="number"?new Date(r):/^\d+$/.test(String(r))?new Date(Number(r)):new Date(String(r));return Number.isNaN(s.getTime())?"":s.toLocaleString()}catch{return String(r)}}function Fe(t){try{return JSON.stringify(t,null,2)}catch{return String(t)}}function Je(t){switch(t){case"error":case"fatal":case"critical":return"level--error";case"warn":case"warning":return"level--warn";case"info":return"level--info";case"debug":case"trace":return"level--debug";default:return""}}function ze(){if(e(g).length===0)return;const t=Object.keys(e(g)[0]),r=lt(t,e(g)),s=new Blob([r],{type:"text/csv"});Ne(s,`logs-${new Date().toISOString().slice(0,10)}.csv`),Ie("Logs exported as CSV")}function qe(){if(e(g).length===0)return;const t=new Blob([JSON.stringify(e(g),null,2)],{type:"application/json"});Ne(t,`logs-${new Date().toISOString().slice(0,10)}.json`),Ie("Logs exported as JSON")}Ye(()=>(E(),()=>{e(P)&&clearInterval(e(P))})),ot(Pe,{title:"Logs",description:"View request logs and analytics",get docsHref(){return nt},actions:r=>{var s=pt(),h=u(s),p=u(h),x=u(p);n(p);var L=o(p,2);{var H=_=>{var S=vt(),a=u(S);n(S),O(()=>C(a,`${e(se)??""} server errors`)),i(_,S)};y(L,_=>{e(se)>0&&_(H)})}n(h);var V=o(h,2);{var T=_=>{var S=ut(),a=ce(S);ee(a,{variant:"secondary",size:"sm",onclick:ze,children:(b,Q)=>{G();var w=Y("Export CSV");i(b,w)},$$slots:{default:!0}});var $=o(a,2);ee($,{variant:"secondary",size:"sm",onclick:qe,children:(b,Q)=>{G();var w=Y("Export JSON");i(b,w)},$$slots:{default:!0}}),i(_,S)};y(V,_=>{e(g).length>0&&_(T)})}var D=o(V,2);let M;var K=u(D);{var le=_=>{var S=ct();i(_,S)};y(K,_=>{e(I)&&_(le)})}var oe=o(K);n(D),n(s),O(()=>{C(x,`${e(de)??""} total`),M=Z(D,1,"live-btn svelte-1lsf4ps",null,M,{"live-btn--active":e(I)}),C(oe,` ${e(I)?"Live":"Paused"}`)}),Le("click",D,Re),i(r,s)},children:(r,s)=>{var h=$t(),p=ce(h),x=u(p),L=u(x);Oe(L,{label:"Prefix filter",placeholder:"log:",get value(){return e(B)},set value(a){l(B,a,!0)}});var H=o(L,2);pe(H,{label:"Level",get options(){return Ae},get value(){return e(F)},set value(a){l(F,a,!0)}});var V=o(H,2);pe(V,{label:"Service",get options(){return Ee},get value(){return e(J)},set value(a){l(J,a,!0)}});var T=o(V,2);Oe(T,{label:"Search logs",placeholder:"/api/...",get value(){return e(z)},set value(a){l(z,a,!0)}});var D=o(T,2);pe(D,{label:"Limit",get options(){return Ue},get value(){return e(ae)},set value(a){l(ae,a,!0)}}),n(x);var M=o(x,2),K=u(M);ee(K,{variant:"primary",onclick:Ve,children:(a,$)=>{G();var b=Y("Search");i(a,b)},$$slots:{default:!0}}),n(M),n(p);var le=o(p,2);{var oe=a=>{var $=dt();ke($,20,()=>Array(10),Ce,(b,Q)=>{var w=ft(),k=u(w);fe(k,{width:"60px",height:"20px"});var m=o(k,2);fe(m,{width:"120px",height:"14px"});var U=o(m,2);fe(U,{height:"14px"}),n(w),i(b,w)}),n($),i(a,$)},_=a=>{it(a,{title:"No logs found",description:"No log entries match the current filter."})},S=a=>{var $=xt(),b=ce($);ke(b,21,()=>e(g),Ce,(k,m,U)=>{const R=X(()=>ge(e(m))),ne=X(()=>Be(e(m))),W=X(()=>String(e(m).category??"")),ie=X(()=>e(q).has(U));var j=bt();let me;var ve=u(j),he=u(ve);let be;var Se=o(he,2);{var He=v=>{var c=gt(),N=u(c,!0);n(c),O((ue,Xe)=>{Z(c,1,`log-entry__level ${ue??""}`,"svelte-1lsf4ps"),C(N,Xe)},[()=>Je(e(R)),()=>e(R).toUpperCase()]),i(v,c)};y(Se,v=>{e(R)&&v(He)})}var xe=o(Se,2);{var Te=v=>{var c=_t(),N=u(c,!0);n(c),O(()=>C(N,e(W))),i(v,c)};y(xe,v=>{e(W)&&v(Te)})}var $e=o(xe,2);{var Ke=v=>{var c=mt(),N=u(c,!0);n(c),O(()=>C(N,e(ne))),i(v,c)};y($e,v=>{e(ne)&&v(Ke)})}var we=o($e,2),Qe=u(we,!0);n(we),n(ve);var We=o(ve,2);{var Ge=v=>{var c=ht(),N=u(c,!0);n(c),O(ue=>C(N,ue),[()=>Fe(e(m))]),i(v,c)};y(We,v=>{e(ie)&&v(Ge)})}n(j),O(v=>{me=Z(j,1,"log-entry svelte-1lsf4ps",null,me,{"log-entry--expanded":e(ie)}),be=Z(he,1,"log-entry__chevron svelte-1lsf4ps",null,be,{"log-entry__chevron--open":e(ie)}),C(Qe,v)},[()=>je(e(m))]),Le("click",j,()=>Me(U)),i(k,j)}),n(b);var Q=o(b,2);{var w=k=>{var m=St(),U=u(m);ee(U,{variant:"secondary",get loading(){return e(re)},onclick:()=>E(!0),children:(R,ne)=>{G();var W=Y("Load More");i(R,W)},$$slots:{default:!0}}),n(m),i(k,m)};y(Q,k=>{e(A)&&!e(I)&&k(w)})}i(a,$)};y(le,a=>{e(te)?a(oe):e(g).length===0?a(_,1):a(S,!1)})}i(r,h)}}),et()}tt(["click"]);export{Bt as component};
1
+ import"../chunks/CWj6FrbW.js";import{o as Ye}from"../chunks/Bn2NtlTj.js";import{p as Ze,d as f,M as ye,a as et,g as e,f as ce,c as u,b as l,s as o,r as n,ae as G,t as O,u as X}from"../chunks/BdTBlfLy.js";import{d as tt,s as C,a as Le}from"../chunks/DtZk82gG.js";import{i as y}from"../chunks/Y22E1hJM.js";import{e as ke,i as Ce,a as rt,t as at,b as Ie}from"../chunks/DcVb45Ds.js";import{t as Y,a as i,f as d}from"../chunks/DEELgv7K.js";import{d as st,s as Z}from"../chunks/CjcrXziO.js";import{d as Ne}from"../chunks/wJsUhbfZ.js";import{g as lt}from"../chunks/Ce-ngf4p.js";import{P as ot}from"../chunks/BkZCgsc3.js";import{a as nt}from"../chunks/Q2nPFxS6.js";import{B as ee}from"../chunks/Bcs4KYNp.js";import{I as Oe}from"../chunks/nlAMTi52.js";import{S as pe}from"../chunks/DGAHkap7.js";import{E as it}from"../chunks/m9eWh0Cd.js";import{S as fe}from"../chunks/DPgR4-0v.js";var vt=d('<span class="log-counter log-counter--error svelte-1lsf4ps"> </span>'),ut=d("<!> <!>",1),ct=d('<span class="live-dot svelte-1lsf4ps"></span>'),pt=d('<div class="log-actions svelte-1lsf4ps"><div class="log-counters svelte-1lsf4ps"><span class="log-counter svelte-1lsf4ps"> </span> <!></div> <!> <button><!> </button></div>'),ft=d('<div class="log-skeleton__row svelte-1lsf4ps"><!> <!> <!></div>'),dt=d('<div class="log-skeleton svelte-1lsf4ps"></div>'),gt=d("<span> </span>"),_t=d('<span class="log-entry__service svelte-1lsf4ps"> </span>'),mt=d('<span class="log-entry__time svelte-1lsf4ps"> </span>'),ht=d('<pre class="log-entry__detail svelte-1lsf4ps"> </pre>'),bt=d('<button type="button"><div class="log-entry__header svelte-1lsf4ps"><span><svg width="12" height="12" viewBox="0 0 12 12" fill="none" class="svelte-1lsf4ps"><path d="M4.5 3L7.5 6L4.5 9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-1lsf4ps"></path></svg></span> <!> <!> <!> <span class="log-entry__summary svelte-1lsf4ps"> </span></div> <!></button>'),St=d('<div class="pagination svelte-1lsf4ps"><!></div>'),xt=d('<div class="log-list svelte-1lsf4ps"></div> <!>',1),$t=d('<div class="controls svelte-1lsf4ps"><div class="controls__fields svelte-1lsf4ps"><!> <!> <!> <!> <!></div> <div class="controls__actions svelte-1lsf4ps"><!></div></div> <!>',1);function Bt(Pe,De){Ze(De,!0);let te=f(!0),g=f(ye([])),A=f(null),re=f(!1),B=f("log:"),ae=f("50"),F=f("all"),J=f("all"),z=f(""),q=f(ye(new Set)),I=f(!1),P=f(null),de=f(0),se=f(0);const Ue=[{value:"20",label:"20"},{value:"50",label:"50"},{value:"100",label:"100"}],Ae=[{value:"all",label:"All Levels"},{value:"info",label:"Info"},{value:"warn",label:"Warning (3xx/4xx)"},{value:"error",label:"Error (5xx)"},{value:"debug",label:"Debug"}],Ee=[{value:"all",label:"All Services"},{value:"auth",label:"Auth"},{value:"db",label:"Database"},{value:"storage",label:"Storage"},{value:"databaseLive",label:"Live"},{value:"push",label:"Push"},{value:"room",label:"Rooms"},{value:"function",label:"Functions"},{value:"kv",label:"KV"},{value:"sql",label:"SQL"},{value:"d1",label:"D1"},{value:"vectorize",label:"Vectorize"},{value:"users",label:"Users API"},{value:"admin",label:"Admin"},{value:"health",label:"Health"}];async function E(t=!1){t?l(re,!0):(l(te,!0),l(q,new Set,!0));try{let r=`data/logs?limit=${encodeURIComponent(e(ae))}`;e(B).trim()&&(r+=`&prefix=${encodeURIComponent(e(B).trim())}`),e(F)!=="all"&&(r+=`&level=${encodeURIComponent(e(F))}`),e(J)!=="all"&&(r+=`&category=${encodeURIComponent(e(J))}`),e(z).trim()&&(r+=`&path=${encodeURIComponent(e(z).trim())}`),t&&e(A)&&(r+=`&cursor=${encodeURIComponent(e(A))}`);const s=await rt.fetch(r);t?l(g,[...e(g),...s.logs],!0):l(g,s.logs,!0),l(A,s.cursor,!0),l(de,e(g).length,!0),l(se,e(g).filter(h=>{const p=ge(h);return p==="error"||p==="fatal"||p==="critical"}).length,!0)}catch(r){at(st(r,"Failed to load logs."))}finally{l(te,!1),l(re,!1)}}function Ve(){l(A,null),E()}function Me(t){const r=new Set(e(q));r.has(t)?r.delete(t):r.add(t),l(q,r,!0)}function Re(){l(I,!e(I)),e(I)?(E(),l(P,setInterval(()=>{E()},2e3),!0)):e(P)&&(clearInterval(e(P)),l(P,null))}function je(t){const r=String(t.method??""),s=String(t.path??t.url??""),h=_e(t),p=typeof t.duration=="number"?t.duration:Number(t.duration??0);if(r&&s){const L=[`${r.toUpperCase()} ${s}`];return h>0&&L.push(String(h)),p>0&&L.push(`${Math.round(p)}ms`),L.join(" · ")}if(typeof t.message=="string")return t.message;if(typeof t.msg=="string")return t.msg;if(typeof t.level=="string"&&typeof t.timestamp=="string")return`[${t.level}] ${t.timestamp}`;const x=Object.keys(t);return x.length===0?"(empty)":x.slice(0,3).join(", ")+(x.length>3?"...":"")}function ge(t){const r=t.level??t.severity??"";if(r)return String(r).toLowerCase();const s=_e(t);return s>=500?"error":s>=400?"warn":s===304?"info":s>=300?"warn":s>=200?"info":s>0?"debug":""}function _e(t){if(typeof t.status=="number")return t.status;if(typeof t.status=="string"){const r=Number.parseInt(t.status,10);return Number.isFinite(r)?r:0}return 0}function Be(t){const r=t.timestamp??t.time??t.ts??t.date??"";if(!r)return"";try{const s=typeof r=="number"?new Date(r):/^\d+$/.test(String(r))?new Date(Number(r)):new Date(String(r));return Number.isNaN(s.getTime())?"":s.toLocaleString()}catch{return String(r)}}function Fe(t){try{return JSON.stringify(t,null,2)}catch{return String(t)}}function Je(t){switch(t){case"error":case"fatal":case"critical":return"level--error";case"warn":case"warning":return"level--warn";case"info":return"level--info";case"debug":case"trace":return"level--debug";default:return""}}function ze(){if(e(g).length===0)return;const t=Object.keys(e(g)[0]),r=lt(t,e(g)),s=new Blob([r],{type:"text/csv"});Ne(s,`logs-${new Date().toISOString().slice(0,10)}.csv`),Ie("Logs exported as CSV")}function qe(){if(e(g).length===0)return;const t=new Blob([JSON.stringify(e(g),null,2)],{type:"application/json"});Ne(t,`logs-${new Date().toISOString().slice(0,10)}.json`),Ie("Logs exported as JSON")}Ye(()=>(E(),()=>{e(P)&&clearInterval(e(P))})),ot(Pe,{title:"Logs",description:"View request logs and analytics",get docsHref(){return nt},actions:r=>{var s=pt(),h=u(s),p=u(h),x=u(p);n(p);var L=o(p,2);{var H=_=>{var S=vt(),a=u(S);n(S),O(()=>C(a,`${e(se)??""} server errors`)),i(_,S)};y(L,_=>{e(se)>0&&_(H)})}n(h);var V=o(h,2);{var T=_=>{var S=ut(),a=ce(S);ee(a,{variant:"secondary",size:"sm",onclick:ze,children:(b,Q)=>{G();var w=Y("Export CSV");i(b,w)},$$slots:{default:!0}});var $=o(a,2);ee($,{variant:"secondary",size:"sm",onclick:qe,children:(b,Q)=>{G();var w=Y("Export JSON");i(b,w)},$$slots:{default:!0}}),i(_,S)};y(V,_=>{e(g).length>0&&_(T)})}var D=o(V,2);let M;var K=u(D);{var le=_=>{var S=ct();i(_,S)};y(K,_=>{e(I)&&_(le)})}var oe=o(K);n(D),n(s),O(()=>{C(x,`${e(de)??""} total`),M=Z(D,1,"live-btn svelte-1lsf4ps",null,M,{"live-btn--active":e(I)}),C(oe,` ${e(I)?"Live":"Paused"}`)}),Le("click",D,Re),i(r,s)},children:(r,s)=>{var h=$t(),p=ce(h),x=u(p),L=u(x);Oe(L,{label:"Prefix filter",placeholder:"log:",get value(){return e(B)},set value(a){l(B,a,!0)}});var H=o(L,2);pe(H,{label:"Level",get options(){return Ae},get value(){return e(F)},set value(a){l(F,a,!0)}});var V=o(H,2);pe(V,{label:"Service",get options(){return Ee},get value(){return e(J)},set value(a){l(J,a,!0)}});var T=o(V,2);Oe(T,{label:"Search logs",placeholder:"/api/...",get value(){return e(z)},set value(a){l(z,a,!0)}});var D=o(T,2);pe(D,{label:"Limit",get options(){return Ue},get value(){return e(ae)},set value(a){l(ae,a,!0)}}),n(x);var M=o(x,2),K=u(M);ee(K,{variant:"primary",onclick:Ve,children:(a,$)=>{G();var b=Y("Search");i(a,b)},$$slots:{default:!0}}),n(M),n(p);var le=o(p,2);{var oe=a=>{var $=dt();ke($,20,()=>Array(10),Ce,(b,Q)=>{var w=ft(),k=u(w);fe(k,{width:"60px",height:"20px"});var m=o(k,2);fe(m,{width:"120px",height:"14px"});var U=o(m,2);fe(U,{height:"14px"}),n(w),i(b,w)}),n($),i(a,$)},_=a=>{it(a,{title:"No logs found",description:"No log entries match the current filter."})},S=a=>{var $=xt(),b=ce($);ke(b,21,()=>e(g),Ce,(k,m,U)=>{const R=X(()=>ge(e(m))),ne=X(()=>Be(e(m))),W=X(()=>String(e(m).category??"")),ie=X(()=>e(q).has(U));var j=bt();let me;var ve=u(j),he=u(ve);let be;var Se=o(he,2);{var He=v=>{var c=gt(),N=u(c,!0);n(c),O((ue,Xe)=>{Z(c,1,`log-entry__level ${ue??""}`,"svelte-1lsf4ps"),C(N,Xe)},[()=>Je(e(R)),()=>e(R).toUpperCase()]),i(v,c)};y(Se,v=>{e(R)&&v(He)})}var xe=o(Se,2);{var Te=v=>{var c=_t(),N=u(c,!0);n(c),O(()=>C(N,e(W))),i(v,c)};y(xe,v=>{e(W)&&v(Te)})}var $e=o(xe,2);{var Ke=v=>{var c=mt(),N=u(c,!0);n(c),O(()=>C(N,e(ne))),i(v,c)};y($e,v=>{e(ne)&&v(Ke)})}var we=o($e,2),Qe=u(we,!0);n(we),n(ve);var We=o(ve,2);{var Ge=v=>{var c=ht(),N=u(c,!0);n(c),O(ue=>C(N,ue),[()=>Fe(e(m))]),i(v,c)};y(We,v=>{e(ie)&&v(Ge)})}n(j),O(v=>{me=Z(j,1,"log-entry svelte-1lsf4ps",null,me,{"log-entry--expanded":e(ie)}),be=Z(he,1,"log-entry__chevron svelte-1lsf4ps",null,be,{"log-entry__chevron--open":e(ie)}),C(Qe,v)},[()=>je(e(m))]),Le("click",j,()=>Me(U)),i(k,j)}),n(b);var Q=o(b,2);{var w=k=>{var m=St(),U=u(m);ee(U,{variant:"secondary",get loading(){return e(re)},onclick:()=>E(!0),children:(R,ne)=>{G();var W=Y("Load More");i(R,W)},$$slots:{default:!0}}),n(m),i(k,m)};y(Q,k=>{e(A)&&!e(I)&&k(w)})}i(a,$)};y(le,a=>{e(te)?a(oe):e(g).length===0?a(_,1):a(S,!1)})}i(r,h)}}),et()}tt(["click"]);export{Bt as component};
@@ -1 +1 @@
1
- import"../chunks/CWj6FrbW.js";import{o as Z}from"../chunks/Bn2NtlTj.js";import{p as $,a as ee,g as e,f as z,r as t,s as c,b as j,d as B,c as a,t as R,u as te}from"../chunks/BdTBlfLy.js";import{d as ae,s as g,a as se}from"../chunks/DtZk82gG.js";import{i as E}from"../chunks/Y22E1hJM.js";import{e as G,a as le,t as re}from"../chunks/CvczjTXx.js";import{c as oe,a as r,f as v,d as T}from"../chunks/DEELgv7K.js";import{d as ne,s as ie,a as ve}from"../chunks/CjcrXziO.js";import{P as ce}from"../chunks/BkZCgsc3.js";import{a as pe}from"../chunks/Q2nPFxS6.js";/* empty css */var de=v('<span class="last-updated svelte-l9pwpf"> </span>'),he=v('<div class="refresh-controls svelte-l9pwpf"><!> <button type="button"><span class="auto-refresh-dot svelte-l9pwpf"></span> </button></div>'),fe=v('<div class="loading-state svelte-l9pwpf">Loading monitoring data...</div>'),ue=T('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-l9pwpf"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" class="svelte-l9pwpf"></path><circle cx="9" cy="7" r="4" class="svelte-l9pwpf"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87" class="svelte-l9pwpf"></path><path d="M16 3.13a4 4 0 0 1 0 7.75" class="svelte-l9pwpf"></path></svg>'),we=T('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-l9pwpf"><rect x="3" y="11" width="18" height="11" rx="2" ry="2" class="svelte-l9pwpf"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4" class="svelte-l9pwpf"></path></svg>'),_e=T('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-l9pwpf"><path d="M4 11a9 9 0 0 1 9 9" class="svelte-l9pwpf"></path><path d="M4 4a16 16 0 0 1 16 16" class="svelte-l9pwpf"></path><circle cx="5" cy="19" r="1" class="svelte-l9pwpf"></circle></svg>'),ge=v('<div class="stat-card svelte-l9pwpf"><div class="stat-card__icon svelte-l9pwpf" aria-hidden="true"><!></div> <div class="stat-card__value svelte-l9pwpf"> </div> <div class="stat-card__label svelte-l9pwpf"> </div></div>'),me=v('<tr class="channel-row svelte-l9pwpf"><td class="channel-td svelte-l9pwpf"><code class="channel-name svelte-l9pwpf"> </code></td><td class="channel-td channel-td--right svelte-l9pwpf"><span class="subscriber-count svelte-l9pwpf"> </span></td></tr>'),be=v('<div class="channel-section svelte-l9pwpf"><h3 class="section-title svelte-l9pwpf">Active Channels</h3> <div class="channel-table-wrap svelte-l9pwpf"><table class="channel-table svelte-l9pwpf"><thead class="svelte-l9pwpf"><tr class="svelte-l9pwpf"><th class="channel-th svelte-l9pwpf">Channel</th><th class="channel-th channel-th--right svelte-l9pwpf">Subscribers</th></tr></thead><tbody class="svelte-l9pwpf"></tbody></table></div></div>'),ke=v('<div class="channel-empty svelte-l9pwpf">No active channel subscriptions.</div>'),ye=v('<div class="stat-grid svelte-l9pwpf"></div> <!>',1),xe=v('<div class="loading-state svelte-l9pwpf">No monitoring data available.</div>');function He(J,K){$(K,!0);let V=B(!0),d=B(null),H=B(""),h=B(!0);async function q(){try{const f=await le.fetch("data/monitoring");j(d,f,!0),j(H,new Date().toLocaleTimeString(),!0)}catch(f){re(ne(f,"Failed to load monitoring data."))}finally{j(V,!1)}}function O(){j(h,!e(h))}const Q=[{key:"activeConnections",label:"Active Connections",icon:"connections"},{key:"authenticatedConnections",label:"Authenticated",icon:"auth"},{key:"channels",label:"Active Channels",icon:"channels"}];Z(()=>{q();const f=setInterval(()=>{e(h)&&q()},5e3);return()=>{clearInterval(f)}}),ce(J,{title:"Live Monitoring",description:"Active connections and channels",get docsHref(){return pe},actions:I=>{var D=he(),m=a(D);{var N=s=>{var n=de(),b=a(n);t(n),R(()=>g(b,`Updated ${e(H)??""}`)),r(s,n)};E(m,s=>{e(H)&&s(N)})}var p=c(m,2);let L;var U=c(a(p));t(p),t(D),R(()=>{L=ie(p,1,"auto-refresh-toggle svelte-l9pwpf",null,L,{"auto-refresh-toggle--active":e(h)}),ve(p,"title",e(h)?"Pause auto-refresh":"Resume auto-refresh"),g(U,` ${e(h)?"Live":"Paused"}`)}),se("click",p,O),r(I,D)},children:(I,D)=>{var m=oe(),N=z(m);{var p=s=>{var n=fe();r(s,n)},L=s=>{var n=ye(),b=z(n);G(b,21,()=>Q,i=>i.key,(i,o)=>{const k=te(()=>e(d)[e(o).key]);var u=ge(),w=a(u),y=a(w);{var P=l=>{var A=ue();r(l,A)},x=l=>{var A=we();r(l,A)},C=l=>{var A=_e();r(l,A)};E(y,l=>{e(o).icon==="connections"?l(P):e(o).icon==="auth"?l(x,1):e(o).icon==="channels"&&l(C,2)})}t(w);var _=c(w,2),F=a(_,!0);t(_);var M=c(_,2),S=a(M,!0);t(M),t(u),R(l=>{g(F,l),g(S,e(o).label)},[()=>typeof e(k)=="number"?e(k).toLocaleString():"--"]),r(i,u)}),t(b);var W=c(b,2);{var X=i=>{var o=be(),k=c(a(o),2),u=a(k),w=c(a(u));G(w,21,()=>e(d).channelDetails,y=>y.channel,(y,P)=>{var x=me(),C=a(x),_=a(C),F=a(_,!0);t(_),t(C);var M=c(C),S=a(M),l=a(S,!0);t(S),t(M),t(x),R(()=>{g(F,e(P).channel),g(l,e(P).subscribers)}),r(y,x)}),t(w),t(u),t(k),t(o),r(i,o)},Y=i=>{var o=ke();r(i,o)};E(W,i=>{e(d).channelDetails&&e(d).channelDetails.length>0?i(X):i(Y,!1)})}r(s,n)},U=s=>{var n=xe();r(s,n)};E(N,s=>{e(V)?s(p):e(d)?s(L,1):s(U,!1)})}r(I,m)}}),ee()}ae(["click"]);export{He as component};
1
+ import"../chunks/CWj6FrbW.js";import{o as Z}from"../chunks/Bn2NtlTj.js";import{p as $,a as ee,g as e,f as z,r as t,s as c,b as j,d as B,c as a,t as R,u as te}from"../chunks/BdTBlfLy.js";import{d as ae,s as g,a as se}from"../chunks/DtZk82gG.js";import{i as E}from"../chunks/Y22E1hJM.js";import{e as G,a as le,t as re}from"../chunks/DcVb45Ds.js";import{c as oe,a as r,f as v,d as T}from"../chunks/DEELgv7K.js";import{d as ne,s as ie,a as ve}from"../chunks/CjcrXziO.js";import{P as ce}from"../chunks/BkZCgsc3.js";import{a as pe}from"../chunks/Q2nPFxS6.js";/* empty css */var de=v('<span class="last-updated svelte-l9pwpf"> </span>'),he=v('<div class="refresh-controls svelte-l9pwpf"><!> <button type="button"><span class="auto-refresh-dot svelte-l9pwpf"></span> </button></div>'),fe=v('<div class="loading-state svelte-l9pwpf">Loading monitoring data...</div>'),ue=T('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-l9pwpf"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" class="svelte-l9pwpf"></path><circle cx="9" cy="7" r="4" class="svelte-l9pwpf"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87" class="svelte-l9pwpf"></path><path d="M16 3.13a4 4 0 0 1 0 7.75" class="svelte-l9pwpf"></path></svg>'),we=T('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-l9pwpf"><rect x="3" y="11" width="18" height="11" rx="2" ry="2" class="svelte-l9pwpf"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4" class="svelte-l9pwpf"></path></svg>'),_e=T('<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-l9pwpf"><path d="M4 11a9 9 0 0 1 9 9" class="svelte-l9pwpf"></path><path d="M4 4a16 16 0 0 1 16 16" class="svelte-l9pwpf"></path><circle cx="5" cy="19" r="1" class="svelte-l9pwpf"></circle></svg>'),ge=v('<div class="stat-card svelte-l9pwpf"><div class="stat-card__icon svelte-l9pwpf" aria-hidden="true"><!></div> <div class="stat-card__value svelte-l9pwpf"> </div> <div class="stat-card__label svelte-l9pwpf"> </div></div>'),me=v('<tr class="channel-row svelte-l9pwpf"><td class="channel-td svelte-l9pwpf"><code class="channel-name svelte-l9pwpf"> </code></td><td class="channel-td channel-td--right svelte-l9pwpf"><span class="subscriber-count svelte-l9pwpf"> </span></td></tr>'),be=v('<div class="channel-section svelte-l9pwpf"><h3 class="section-title svelte-l9pwpf">Active Channels</h3> <div class="channel-table-wrap svelte-l9pwpf"><table class="channel-table svelte-l9pwpf"><thead class="svelte-l9pwpf"><tr class="svelte-l9pwpf"><th class="channel-th svelte-l9pwpf">Channel</th><th class="channel-th channel-th--right svelte-l9pwpf">Subscribers</th></tr></thead><tbody class="svelte-l9pwpf"></tbody></table></div></div>'),ke=v('<div class="channel-empty svelte-l9pwpf">No active channel subscriptions.</div>'),ye=v('<div class="stat-grid svelte-l9pwpf"></div> <!>',1),xe=v('<div class="loading-state svelte-l9pwpf">No monitoring data available.</div>');function He(J,K){$(K,!0);let V=B(!0),d=B(null),H=B(""),h=B(!0);async function q(){try{const f=await le.fetch("data/monitoring");j(d,f,!0),j(H,new Date().toLocaleTimeString(),!0)}catch(f){re(ne(f,"Failed to load monitoring data."))}finally{j(V,!1)}}function O(){j(h,!e(h))}const Q=[{key:"activeConnections",label:"Active Connections",icon:"connections"},{key:"authenticatedConnections",label:"Authenticated",icon:"auth"},{key:"channels",label:"Active Channels",icon:"channels"}];Z(()=>{q();const f=setInterval(()=>{e(h)&&q()},5e3);return()=>{clearInterval(f)}}),ce(J,{title:"Live Monitoring",description:"Active connections and channels",get docsHref(){return pe},actions:I=>{var D=he(),m=a(D);{var N=s=>{var n=de(),b=a(n);t(n),R(()=>g(b,`Updated ${e(H)??""}`)),r(s,n)};E(m,s=>{e(H)&&s(N)})}var p=c(m,2);let L;var U=c(a(p));t(p),t(D),R(()=>{L=ie(p,1,"auto-refresh-toggle svelte-l9pwpf",null,L,{"auto-refresh-toggle--active":e(h)}),ve(p,"title",e(h)?"Pause auto-refresh":"Resume auto-refresh"),g(U,` ${e(h)?"Live":"Paused"}`)}),se("click",p,O),r(I,D)},children:(I,D)=>{var m=oe(),N=z(m);{var p=s=>{var n=fe();r(s,n)},L=s=>{var n=ye(),b=z(n);G(b,21,()=>Q,i=>i.key,(i,o)=>{const k=te(()=>e(d)[e(o).key]);var u=ge(),w=a(u),y=a(w);{var P=l=>{var A=ue();r(l,A)},x=l=>{var A=we();r(l,A)},C=l=>{var A=_e();r(l,A)};E(y,l=>{e(o).icon==="connections"?l(P):e(o).icon==="auth"?l(x,1):e(o).icon==="channels"&&l(C,2)})}t(w);var _=c(w,2),F=a(_,!0);t(_);var M=c(_,2),S=a(M,!0);t(M),t(u),R(l=>{g(F,l),g(S,e(o).label)},[()=>typeof e(k)=="number"?e(k).toLocaleString():"--"]),r(i,u)}),t(b);var W=c(b,2);{var X=i=>{var o=be(),k=c(a(o),2),u=a(k),w=c(a(u));G(w,21,()=>e(d).channelDetails,y=>y.channel,(y,P)=>{var x=me(),C=a(x),_=a(C),F=a(_,!0);t(_),t(C);var M=c(C),S=a(M),l=a(S,!0);t(S),t(M),t(x),R(()=>{g(F,e(P).channel),g(l,e(P).subscribers)}),r(y,x)}),t(w),t(u),t(k),t(o),r(i,o)},Y=i=>{var o=ke();r(i,o)};E(W,i=>{e(d).channelDetails&&e(d).channelDetails.length>0?i(X):i(Y,!1)})}r(s,n)},U=s=>{var n=xe();r(s,n)};E(N,s=>{e(V)?s(p):e(d)?s(L,1):s(U,!1)})}r(I,m)}}),ee()}ae(["click"]);export{He as component};