@edge-base/server 0.1.1 → 0.1.3
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.
- package/LICENSE +21 -0
- package/admin-build/_app/immutable/assets/21.x9OgMBdi.css +1 -0
- package/admin-build/_app/immutable/assets/TableSqlTab.BHquaMBM.css +1 -0
- package/admin-build/_app/immutable/chunks/{BkrCkgYp.js → 9Ch6RgcX.js} +1 -1
- package/admin-build/_app/immutable/chunks/B-pVQkKM.js +1 -0
- package/admin-build/_app/immutable/chunks/{eFQHTGwA.js → B0HRJ657.js} +1 -1
- package/admin-build/_app/immutable/chunks/B2bEC_Hm.js +1 -0
- package/admin-build/_app/immutable/chunks/{CwROoZK0.js → B8s_s9QY.js} +1 -1
- package/admin-build/_app/immutable/chunks/{8wJeQ7LN.js → BOSBsYO8.js} +1 -1
- package/admin-build/_app/immutable/chunks/{ehbppgYb.js → Bb0e0sAP.js} +1 -1
- package/admin-build/_app/immutable/chunks/{glwixJlP.js → BdTBlfLy.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DoPXzH7F.js → Bn2NtlTj.js} +1 -1
- package/admin-build/_app/immutable/chunks/BvukSxhJ.js +128 -0
- package/admin-build/_app/immutable/chunks/BwxFS5FL.js +2 -0
- package/admin-build/_app/immutable/chunks/{Cs0GwzJA.js → C72lTcG0.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BmRjiP5k.js → C8s55wKu.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BdrwyZv8.js → CBVE2cdU.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DuXuUBWN.js → CF95mcQY.js} +1 -1
- package/admin-build/_app/immutable/chunks/CGgVJi7f.js +1 -0
- package/admin-build/_app/immutable/chunks/{NuUjtcO2.js → CYatlt7w.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DttM2zNO.js → CnWwy2Sf.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C6puvcoR.js → CoI6jjbg.js} +2 -2
- package/admin-build/_app/immutable/chunks/{B8vJP3wz.js → Cp8V0Xy2.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BcR-Rdj9.js → D8o7yzcA.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BR_fL5Yv.js → DEELgv7K.js} +1 -1
- package/admin-build/_app/immutable/chunks/{7f08Id8e.js → DHWOQ9Ui.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Bh56EfQ_.js → DILS_-VJ.js} +1 -1
- package/admin-build/_app/immutable/chunks/{zfauFM8P.js → DTmaM1M6.js} +1 -1
- package/admin-build/_app/immutable/chunks/{w89G9Xpi.js → DroeC-Do.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BsokvhWC.js → DskOoVLT.js} +1 -1
- package/admin-build/_app/immutable/chunks/{7B47DvSx.js → Dt4vL4Df.js} +1 -1
- package/admin-build/_app/immutable/chunks/{D5h5A1cc.js → DtZk82gG.js} +2 -2
- package/admin-build/_app/immutable/chunks/{C4D51vTW.js → F9_4wRrd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{cOYbrQxx.js → I0AZRbV2.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CCKNu7m7.js → MKsm6wXE.js} +1 -1
- package/admin-build/_app/immutable/chunks/WtDa8jKW.js +1 -0
- package/admin-build/_app/immutable/chunks/XmteHKH_.js +1 -0
- package/admin-build/_app/immutable/chunks/{UUazaC_N.js → Y22E1hJM.js} +1 -1
- package/admin-build/_app/immutable/chunks/{vApWTCBs.js → Z41NK6i6.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DrQSgw-f.js → _teD5ji5.js} +1 -1
- package/admin-build/_app/immutable/chunks/{MdeqaOQx.js → gtu8uwJD.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DnyL7Zq-.js → m9eWh0Cd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B-h2afW5.js → v2HHbTgy.js} +1 -1
- package/admin-build/_app/immutable/entry/app.Dh4eYd90.js +2 -0
- package/admin-build/_app/immutable/entry/start.DjnjDre4.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.CjtHKU-6.js → 0._kCczuod.js} +1 -1
- package/admin-build/_app/immutable/nodes/{1.DEisjlM0.js → 1.C8vaAzdV.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.CvhdyWVB.js → 10.TsbpWcyB.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.DjHqcOvy.js → 11.DbwjQWdP.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.mQLz4Mj_.js → 12.BMCb3LcM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.CBonZZyP.js → 13.CTXx-p7a.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.d-oiZL0j.js → 14.BW1Sfg3E.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.CKPQsUYF.js → 15.DAKEfLVF.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.wPzAPQGx.js → 16.BZHOIVRq.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.DayhKyEZ.js → 17.DcntvsXi.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.DKwS0Ir0.js → 18.Badw-bZ2.js} +1 -1
- package/admin-build/_app/immutable/nodes/{19.wPzAPQGx.js → 19.BZHOIVRq.js} +1 -1
- package/admin-build/_app/immutable/nodes/2.Bn3R2oDm.js +1 -0
- package/admin-build/_app/immutable/nodes/{20.BvIkkkrW.js → 20.DDTfgFOS.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.BbdBT511.js +1 -0
- package/admin-build/_app/immutable/nodes/{22.3xdgwuK1.js → 22.DLaL76VE.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.8Bvgjbsl.js → 23.D1tjWuvB.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.DzSSzRhG.js → 24.8cwANb8Q.js} +1 -1
- package/admin-build/_app/immutable/nodes/{25.9KKYBnAE.js → 25.DCU-ztvR.js} +1 -1
- package/admin-build/_app/immutable/nodes/{26.Bhn9dfhY.js → 26.CuHUfaEI.js} +1 -1
- package/admin-build/_app/immutable/nodes/{27.kRLiC24G.js → 27.fOpy2ckO.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.BVIN1-7N.js → 28.DWB877rH.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.3yabZWj4.js → 29.D9hvrxFP.js} +1 -1
- package/admin-build/_app/immutable/nodes/{3.BFtSOkX7.js → 3.BJG5UaW0.js} +1 -1
- package/admin-build/_app/immutable/nodes/{30.CyCQlwaP.js → 30.52Okvb4S.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.C4LDXjES.js → 31.B2rKWEXY.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.CvbiMlCa.js → 4.BMrPKdZ6.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.C6BLv2eM.js → 5.BHBRNfgt.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.BcXvfl2P.js → 6.Uq3G0mmd.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.CIuqhPiK.js → 7.BS-ss8zw.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.BQOR_JfO.js → 8.5bzwkzMM.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.NZqXQxPy.js → 9.BA61CCFG.js} +1 -1
- package/admin-build/_app/version.json +1 -1
- package/admin-build/favicon.svg +3 -2
- package/admin-build/index.html +17 -16
- package/package.json +64 -65
- package/admin-build/_app/immutable/assets/21.Dz2RJ56c.css +0 -1
- package/admin-build/_app/immutable/chunks/BY92tFS2.js +0 -1
- package/admin-build/_app/immutable/chunks/CxCPv_Ut.js +0 -1
- package/admin-build/_app/immutable/chunks/CxbRue-5.js +0 -1
- package/admin-build/_app/immutable/chunks/CyqB6g-D.js +0 -1
- package/admin-build/_app/immutable/entry/app.CcO-Uos3.js +0 -2
- package/admin-build/_app/immutable/entry/start.COebYq3I.js +0 -1
- package/admin-build/_app/immutable/nodes/2.BKoKrw1i.js +0 -1
- package/admin-build/_app/immutable/nodes/21.DMaFhdHk.js +0 -128
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as xt,g as $t}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as xt,g as $t}from"../chunks/Bn2NtlTj.js";import{p as Lt,a as Rt,b,g as e,f as X,c as o,s as r,r as n,ag as Qe,t as F,d as x,ae as q,u as d}from"../chunks/BdTBlfLy.js";import{d as Ot,s as We,a as Et}from"../chunks/DtZk82gG.js";import{i as Q}from"../chunks/Y22E1hJM.js";import{a as J,A as St,c as Ye,t as be,e as Ze}from"../chunks/MKsm6wXE.js";import{c as Dt,a as h,t as W,f as A}from"../chunks/DEELgv7K.js";import{a as et,s as It}from"../chunks/CoI6jjbg.js";import{b as tt}from"../chunks/CYatlt7w.js";import{b as Pt}from"../chunks/B-pVQkKM.js";import{l as Ct,d as Mt}from"../chunks/CF95mcQY.js";import{P as Nt}from"../chunks/B8s_s9QY.js";import{c as Ut}from"../chunks/Q2nPFxS6.js";import{B as he}from"../chunks/C72lTcG0.js";import{B as N}from"../chunks/B0HRJ657.js";import{I as O}from"../chunks/_teD5ji5.js";import{T as E}from"../chunks/Z41NK6i6.js";var Bt=A("<!> <!>",1),zt=A("<a><!></a> <!>",1),Ht=A('<div class="loading-state svelte-wg73a1"><span class="spinner svelte-wg73a1"></span> Loading settings...</div>'),qt=A('<div class="error-state svelte-wg73a1">Failed to load authentication settings.</div>'),Gt=A('<button type="button" role="tab"> </button>'),jt=A('<div class="target-switch svelte-wg73a1" role="tablist" aria-label="OAuth environment target"></div>'),Jt=A('<div class="provider-card svelte-wg73a1"><div class="provider-card__header svelte-wg73a1"><div><h4 class="provider-card__title svelte-wg73a1"> </h4> <p class="provider-card__hint svelte-wg73a1">Toggle the provider and set its OAuth credentials.</p></div> <div class="provider-card__status svelte-wg73a1"><!> <!></div></div> <div class="provider-card__fields svelte-wg73a1"><!> <!></div></div>'),Vt=A("Core auth behavior is written to <code>edgebase.config.ts</code> and shared across environments. OAuth provider enablement and secrets follow the selected target: <code>Development</code> writes to <code>.env.development</code> and syncs <code>.dev.vars</code>, while <code>Release</code> writes to <code>.env.release</code>, which the deploy pipeline syncs to Cloudflare secrets.",1),Kt=A("The dashboard detected an older dev sidecar that does not support auth editing yet. Restart <code>pnpm dev</code> to enable edits.",1),Xt=A('<div class="settings-grid svelte-wg73a1"><div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Core Methods</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body card__body--stack svelte-wg73a1"><div class="toggle-row svelte-wg73a1"><!> <!></div> <div class="toggle-row svelte-wg73a1"><!> <!></div> <div class="subsection svelte-wg73a1"><div class="subsection__row svelte-wg73a1"><!> <!></div> <!></div> <div class="subsection svelte-wg73a1"><div class="subsection__row svelte-wg73a1"><!> <!></div></div></div></div> <div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><h3 class="card__title svelte-wg73a1">Session</h3></div> <div class="card__body card__body--stack svelte-wg73a1"><!> <!> <!></div></div> <div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Passkeys</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body card__body--stack svelte-wg73a1"><!> <!> <!> <label class="textarea-field svelte-wg73a1"><span class="textarea-field__label svelte-wg73a1">Allowed Origins</span> <textarea class="textarea-field__input svelte-wg73a1" rows="4" placeholder="https://example.com"></textarea></label></div></div> <div class="card card--wide svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Allowed Redirect URLs</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body svelte-wg73a1"><label class="textarea-field svelte-wg73a1"><span class="textarea-field__label svelte-wg73a1">One URL or wildcard per line</span> <textarea class="textarea-field__input svelte-wg73a1" rows="5" placeholder="https://app.example.com/auth/*"></textarea></label></div></div> <div class="card card--wide svelte-wg73a1"><div class="card__header card__header--wrap svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">OAuth Providers</h3> <p class="card__subtitle svelte-wg73a1">Provider allowlists and credentials are stored per target environment.</p></div> <div class="oauth-header-controls svelte-wg73a1"><!> <!></div></div> <div class="card__body provider-grid svelte-wg73a1"></div></div></div> <div class="notice svelte-wg73a1"><!></div>',1);function ua(at,st){Lt(st,!0);const S=[{id:"google",label:"Google"},{id:"github",label:"GitHub"},{id:"apple",label:"Apple"},{id:"discord",label:"Discord"},{id:"microsoft",label:"Microsoft"},{id:"facebook",label:"Facebook"},{id:"kakao",label:"Kakao"},{id:"naver",label:"Naver"},{id:"x",label:"X"},{id:"reddit",label:"Reddit"},{id:"line",label:"Line"},{id:"slack",label:"Slack"},{id:"spotify",label:"Spotify"},{id:"twitch",label:"Twitch"}],lt=[{id:"development",label:"Development"},{id:"release",label:"Release"}];let fe=x(!0),V=x(!1),u=x(!1),ke=x(!1),p=x("development"),l=x(null),U=x(null),m=x(null),$=x(null);function Y(t){return t.split(/\r?\n/).map(i=>i.trim()).filter(Boolean)}function D(t){const i=t.trim();return i||null}function we(t){const i=t.trim();if(!i)return null;const c=Number(i);return Number.isFinite(c)?c:null}function K(t){return{...t}}function it(t){var i,c,v,g,B,z,k,_,f,L,w,T;return{emailAuth:t.emailAuth!==!1,anonymousAuth:!!t.anonymousAuth,allowedRedirectUrlsText:(t.allowedRedirectUrls??[]).join(`
|
|
2
2
|
`),sessionAccessTokenTTL:((i=t.session)==null?void 0:i.accessTokenTTL)??"",sessionRefreshTokenTTL:((c=t.session)==null?void 0:c.refreshTokenTTL)??"",sessionMaxActiveSessions:typeof((v=t.session)==null?void 0:v.maxActiveSessions)=="number"?String(t.session.maxActiveSessions):"",magicLinkEnabled:!!((g=t.magicLink)!=null&&g.enabled),magicLinkAutoCreate:((B=t.magicLink)==null?void 0:B.autoCreate)!==!1,magicLinkTokenTTL:((z=t.magicLink)==null?void 0:z.tokenTTL)??"",emailOtpEnabled:!!((k=t.emailOtp)!=null&&k.enabled),emailOtpAutoCreate:((_=t.emailOtp)==null?void 0:_.autoCreate)!==!1,passkeysEnabled:!!((f=t.passkeys)!=null&&f.enabled),passkeysRpName:((L=t.passkeys)==null?void 0:L.rpName)??"",passkeysRpID:((w=t.passkeys)==null?void 0:w.rpID)??"",passkeysOriginText:(((T=t.passkeys)==null?void 0:T.origin)??[]).join(`
|
|
3
3
|
`)}}function Te(t){var c;const i={};for(const v of S){const g=(c=t.oauth)==null?void 0:c[v.id];i[v.id]={enabled:t.providers.includes(v.id),clientId:(g==null?void 0:g.clientId)??"",clientSecret:(g==null?void 0:g.clientSecret)??""}}return i}function I(t){const i={};for(const c of S)i[c.id]={...t[c.id]};return i}function Z(t){return`auth/settings?target=${t}`}function ee(t,i){const c=S.filter(g=>i[g.id].enabled).map(g=>g.id),v={};for(const g of S)v[g.id]={clientId:D(i[g.id].clientId),clientSecret:D(i[g.id].clientSecret)};return{emailAuth:t.emailAuth,anonymousAuth:t.anonymousAuth,allowedOAuthProviders:c,allowedRedirectUrls:Y(t.allowedRedirectUrlsText),session:{accessTokenTTL:D(t.sessionAccessTokenTTL),refreshTokenTTL:D(t.sessionRefreshTokenTTL),maxActiveSessions:we(t.sessionMaxActiveSessions)},magicLink:{enabled:t.magicLinkEnabled,autoCreate:t.magicLinkAutoCreate,tokenTTL:D(t.magicLinkTokenTTL)},emailOtp:{enabled:t.emailOtpEnabled,autoCreate:t.emailOtpAutoCreate},passkeys:{enabled:t.passkeysEnabled,rpName:D(t.passkeysRpName),rpID:D(t.passkeysRpID),origin:Y(t.passkeysOriginText)},oauth:v}}function te(){return e(m)?e(m)[e(p)]:null}function rt(t,i){for(const c of S){const v=i[c.id];if(v.enabled&&(!v.clientId.trim()||!v.clientSecret.trim()))return`${c.label} requires both a client ID and client secret.`}if(t.passkeysEnabled){if(!t.passkeysRpName.trim()||!t.passkeysRpID.trim())return"Passkeys require both RP Name and RP ID.";if(Y(t.passkeysOriginText).length===0)return"Passkeys require at least one allowed origin."}return t.sessionMaxActiveSessions.trim()&&we(t.sessionMaxActiveSessions)===null?"Max active sessions must be a valid number.":null}function ae(t,i){const c=it(t),v={development:Te(t),release:Te(i??t)};b(U,K(c),!0),b(l,K(c),!0),b($,{development:I(v.development),release:I(v.release)},!0),b(m,{development:I(v.development),release:I(v.release)},!0)}function nt(){!e(U)||!e($)||!e(m)||(b(l,K(e(U)),!0),b(m,{...e(m),[e(p)]:I(e($)[e(p)])},!0))}const ye=d(()=>(()=>{const t=te();return!e(l)||!e(U)||!t||!e($)?!1:JSON.stringify(ee(e(l),t))!==JSON.stringify(ee(e(U),e($)[e(p)]))})()),Ae=d(()=>(()=>{const t=te();return t?S.filter(i=>{var c;return(c=t[i.id])==null?void 0:c.enabled}).length:0})());async function dt(){const t=te();if(!e(u)||!e(l)||!t||!e($))return;const i=rt(e(l),t);if(i){be(i);return}b(V,!0);try{const c=ee(e(l),t);await J.schemaMutation(Z(e(p)),{method:"PUT",body:c}),b(U,K(e(l)),!0),b($,{...e($),[e(p)]:I(t)},!0),b(m,{...e(m),[e(p)]:I(t)},!0),Ye({type:"success",message:e(p)==="release"?"Release auth settings saved to edgebase.config.ts and .env.release.":"Development auth settings saved to edgebase.config.ts and local env files."})}catch(c){be(c instanceof Error?c.message:"Failed to save auth settings")}finally{b(V,!1)}}xt(async()=>{try{if(await Ct(),b(u,$t(Mt).devMode,!0),e(u))try{const t=await J.schemaMutation(Z("development")),i=await J.schemaMutation(Z("release"));ae(t,i)}catch(t){if(t instanceof St&&t.status===404){b(ke,!0),b(u,!1),Ye({type:"warning",message:"Dev sidecar is outdated. Showing read-only auth settings until you restart `pnpm dev`."});const i=await J.fetch("data/auth/settings");ae(i)}else throw t}else{const t=await J.fetch("data/auth/settings");ae(t)}}catch(t){be(t instanceof Error?t.message:"Failed to load auth settings")}finally{b(fe,!1)}}),Nt(at,{title:"Auth Settings",description:"Manage authentication methods and OAuth providers",get docsHref(){return Ut},actions:i=>{var c=zt(),v=X(c),g=o(v);he(g,{variant:"ghost",size:"sm",children:(k,_)=>{q();var f=W("Back to Users");h(k,f)},$$slots:{default:!0}}),n(v);var B=r(v,2);{var z=k=>{var _=Bt(),f=X(_);{let w=d(()=>!e(ye)||e(V));he(f,{variant:"secondary",size:"sm",onclick:nt,get disabled(){return e(w)},children:(T,se)=>{q();var H=W("Reset");h(T,H)},$$slots:{default:!0}})}var L=r(f,2);{let w=d(()=>!e(ye));he(L,{size:"sm",onclick:dt,get disabled(){return e(w)},get loading(){return e(V)},children:(T,se)=>{q();var H=W("Save Changes");h(T,H)},$$slots:{default:!0}})}h(k,_)};Q(B,k=>{e(u)&&e(l)&&k(z)})}F(()=>et(v,"href",`${Pt??""}/auth`)),h(i,c)},children:(i,c)=>{var v=Dt(),g=X(v);{var B=_=>{var f=Ht();h(_,f)},z=_=>{var f=qt();h(_,f)},k=_=>{var f=Xt(),L=X(f),w=o(L),T=o(w),se=r(o(T),2);N(se,{variant:"default",text:"Shared Config"}),n(T);var H=r(T,2),le=o(H),xe=o(le);{let s=d(()=>!e(u));E(xe,{label:"Email / Password",get disabled(){return e(s)},get checked(){return e(l).emailAuth},set checked(a){e(l).emailAuth=a}})}var ot=r(xe,2);{let s=d(()=>e(l).emailAuth?"success":"default"),a=d(()=>e(l).emailAuth?"Enabled":"Disabled");N(ot,{get variant(){return e(s)},get text(){return e(a)}})}n(le);var ie=r(le,2),$e=o(ie);{let s=d(()=>!e(u));E($e,{label:"Anonymous Sign-In",get disabled(){return e(s)},get checked(){return e(l).anonymousAuth},set checked(a){e(l).anonymousAuth=a}})}var ct=r($e,2);{let s=d(()=>e(l).anonymousAuth?"success":"default"),a=d(()=>e(l).anonymousAuth?"Enabled":"Disabled");N(ct,{get variant(){return e(s)},get text(){return e(a)}})}n(ie);var re=r(ie,2),ne=o(re),Le=o(ne);{let s=d(()=>!e(u));E(Le,{label:"Magic Link",get disabled(){return e(s)},get checked(){return e(l).magicLinkEnabled},set checked(a){e(l).magicLinkEnabled=a}})}var vt=r(Le,2);{let s=d(()=>!e(u));E(vt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).magicLinkAutoCreate},set checked(a){e(l).magicLinkAutoCreate=a}})}n(ne);var ut=r(ne,2);{let s=d(()=>!e(u));O(ut,{label:"Magic Link Token TTL",placeholder:"15m",get disabled(){return e(s)},get value(){return e(l).magicLinkTokenTTL},set value(a){e(l).magicLinkTokenTTL=a}})}n(re);var Re=r(re,2),Oe=o(Re),Ee=o(Oe);{let s=d(()=>!e(u));E(Ee,{label:"Email OTP",get disabled(){return e(s)},get checked(){return e(l).emailOtpEnabled},set checked(a){e(l).emailOtpEnabled=a}})}var gt=r(Ee,2);{let s=d(()=>!e(u));E(gt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).emailOtpAutoCreate},set checked(a){e(l).emailOtpAutoCreate=a}})}n(Oe),n(Re),n(H),n(w);var de=r(w,2),Se=r(o(de),2),De=o(Se);{let s=d(()=>!e(u));O(De,{label:"Access Token TTL",placeholder:"15m",get disabled(){return e(s)},get value(){return e(l).sessionAccessTokenTTL},set value(a){e(l).sessionAccessTokenTTL=a}})}var Ie=r(De,2);{let s=d(()=>!e(u));O(Ie,{label:"Refresh Token TTL",placeholder:"7d",get disabled(){return e(s)},get value(){return e(l).sessionRefreshTokenTTL},set value(a){e(l).sessionRefreshTokenTTL=a}})}var pt=r(Ie,2);{let s=d(()=>!e(u));O(pt,{label:"Max Active Sessions",type:"number",placeholder:"Blank = unlimited",get disabled(){return e(s)},get value(){return e(l).sessionMaxActiveSessions},set value(a){e(l).sessionMaxActiveSessions=a}})}n(Se),n(de);var oe=r(de,2),ce=o(oe),mt=r(o(ce),2);{let s=d(()=>e(l).passkeysEnabled?"success":"default"),a=d(()=>e(l).passkeysEnabled?"Enabled":"Disabled");N(mt,{get variant(){return e(s)},get text(){return e(a)}})}n(ce);var Pe=r(ce,2),Ce=o(Pe);{let s=d(()=>!e(u));E(Ce,{label:"Enable Passkeys",get disabled(){return e(s)},get checked(){return e(l).passkeysEnabled},set checked(a){e(l).passkeysEnabled=a}})}var Me=r(Ce,2);{let s=d(()=>!e(u));O(Me,{label:"RP Name",placeholder:"My App",get disabled(){return e(s)},get value(){return e(l).passkeysRpName},set value(a){e(l).passkeysRpName=a}})}var Ne=r(Me,2);{let s=d(()=>!e(u));O(Ne,{label:"RP ID",placeholder:"example.com",get disabled(){return e(s)},get value(){return e(l).passkeysRpID},set value(a){e(l).passkeysRpID=a}})}var Ue=r(Ne,2),ve=r(o(Ue),2);Qe(ve),n(Ue),n(Pe),n(oe);var ue=r(oe,2),ge=o(ue),_t=r(o(ge),2);N(_t,{variant:"default",text:"Shared Config"}),n(ge);var Be=r(ge,2),ze=o(Be),pe=r(o(ze),2);Qe(pe),n(ze),n(Be),n(ue);var He=r(ue,2),me=o(He),qe=r(o(me),2),Ge=o(qe);{let s=d(()=>e(Ae)>0?"primary":"default"),a=d(()=>`${e(Ae)} enabled`);N(Ge,{get variant(){return e(s)},get text(){return e(a)}})}var bt=r(Ge,2);{var ht=s=>{var a=jt();Ze(a,21,()=>lt,P=>P.id,(P,R)=>{var y=Gt();let G;var _e=o(y,!0);n(y),F(()=>{G=It(y,1,"target-switch__button svelte-wg73a1",null,G,{"target-switch__button--active":e(p)===e(R).id}),et(y,"aria-selected",e(p)===e(R).id),We(_e,e(R).label)}),Et("click",y,()=>{b(p,e(R).id,!0)}),h(P,y)}),n(a),h(s,a)};Q(bt,s=>{e(u)&&s(ht)})}n(qe),n(me);var je=r(me,2);Ze(je,21,()=>S,s=>s.id,(s,a)=>{var P=Jt(),R=o(P),y=o(R),G=o(y),_e=o(G,!0);n(G),q(2),n(y);var Ve=r(y,2),Ke=o(Ve);{let C=d(()=>e(m)[e(p)][e(a).id].enabled?"success":"default"),M=d(()=>e(m)[e(p)][e(a).id].enabled?"Enabled":"Disabled");N(Ke,{get variant(){return e(C)},get text(){return e(M)}})}var yt=r(Ke,2);{let C=d(()=>`Enable ${e(a).label}`),M=d(()=>!e(u));E(yt,{get label(){return e(C)},get disabled(){return e(M)},get checked(){return e(m)[e(p)][e(a).id].enabled},set checked(j){e(m)[e(p)][e(a).id].enabled=j}})}n(Ve),n(R);var Xe=r(R,2),Fe=o(Xe);{let C=d(()=>`${e(a).label} client ID`),M=d(()=>!e(u));O(Fe,{label:"Client ID",get placeholder(){return e(C)},get disabled(){return e(M)},get value(){return e(m)[e(p)][e(a).id].clientId},set value(j){e(m)[e(p)][e(a).id].clientId=j}})}var At=r(Fe,2);{let C=d(()=>`${e(a).label} client secret`),M=d(()=>!e(u));O(At,{label:"Client Secret",type:"password",get placeholder(){return e(C)},get disabled(){return e(M)},get value(){return e(m)[e(p)][e(a).id].clientSecret},set value(j){e(m)[e(p)][e(a).id].clientSecret=j}})}n(Xe),n(P),F(()=>We(_e,e(a).label)),h(s,P)}),n(je),n(He),n(L);var Je=r(L,2),ft=o(Je);{var kt=s=>{var a=Vt();q(12),h(s,a)},wt=s=>{var a=Kt();q(2),h(s,a)},Tt=s=>{var a=W("This dashboard is showing runtime auth configuration only. Editing remains disabled outside local dev mode.");h(s,a)};Q(ft,s=>{e(u)?s(kt):e(ke)?s(wt,1):s(Tt,!1)})}n(Je),F(()=>{ve.disabled=!e(u),pe.disabled=!e(u)}),tt(ve,()=>e(l).passkeysOriginText,s=>e(l).passkeysOriginText=s),tt(pe,()=>e(l).allowedRedirectUrlsText,s=>e(l).allowedRedirectUrlsText=s),h(_,f)};Q(g,_=>{e(fe)?_(B):!e(l)||!e(m)?_(z,1):_(k,!1)})}h(i,v)}}),Rt()}Ot(["click"]);export{ua as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as ce}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as ce}from"../chunks/Bn2NtlTj.js";import{p as pe,d as m,M as ve,f as I,a as ue,b as t,g as a,s as l,c as o,r,ae as J,t as A,u as fe}from"../chunks/BdTBlfLy.js";import{d as me,a as be,s as $}from"../chunks/DtZk82gG.js";import{i as Q}from"../chunks/Y22E1hJM.js";import{a as y,b as L,t as S,e as _e,d as ge}from"../chunks/MKsm6wXE.js";import{a as f,f as k,t as M}from"../chunks/DEELgv7K.js";import{d as W}from"../chunks/wJsUhbfZ.js";import{P as he}from"../chunks/B8s_s9QY.js";import{b as ye}from"../chunks/Q2nPFxS6.js";import{B as U}from"../chunks/C72lTcG0.js";import{B as ke}from"../chunks/B0HRJ657.js";import{C as we}from"../chunks/DILS_-VJ.js";var De=k('<p class="card__loading svelte-lb9q8r">Loading DO list...</p>'),qe=k('<div class="do-item svelte-lb9q8r"><!> <span class="do-item__name svelte-lb9q8r"> </span></div>'),Oe=k('<div class="do-list svelte-lb9q8r"></div> <div class="card__actions svelte-lb9q8r"><!> <!></div>',1),$e=k('<div class="restore-preview svelte-lb9q8r"><p class="restore-preview__label svelte-lb9q8r">Backup Contents:</p> <ul class="restore-preview__list svelte-lb9q8r"><li> </li> <li> </li> <li> </li></ul></div> <div class="card__actions svelte-lb9q8r"><!></div>',1),Se=k('<div class="backup-layout svelte-lb9q8r"><div class="card svelte-lb9q8r"><div class="card__header svelte-lb9q8r"><h3 class="card__title svelte-lb9q8r">Create Backup</h3></div> <div class="card__body svelte-lb9q8r"><p class="card__desc svelte-lb9q8r">Download a full backup of all Durable Objects and Auth data.</p> <!></div></div> <div class="card svelte-lb9q8r"><div class="card__header svelte-lb9q8r"><h3 class="card__title svelte-lb9q8r">Restore from Backup</h3></div> <div class="card__body svelte-lb9q8r"><p class="card__desc svelte-lb9q8r">Upload a backup JSON file to restore. This will <strong>overwrite existing data</strong>.</p> <div class="restore-upload svelte-lb9q8r"><input type="file" accept=".json" class="restore-input svelte-lb9q8r"/></div> <!></div></div></div>'),Be=k("<!> <!>",1);function Ue(X,Y){pe(Y,!0);let H=m(!0),B=m(ve([])),P=m(!1),T=m(!1),w=m(null),u=m(null),R=m(!1),x=m(!1);ce(async()=>{try{const e=await y.fetch("data/backup/list-dos",{method:"POST"});t(B,e.dos,!0)}catch(e){S(e instanceof Error?e.message:"Failed to load DO list")}finally{t(H,!1)}});async function Z(){t(P,!0);try{const e={version:1,timestamp:new Date().toISOString(),dos:[]},i=[];for(const s of a(B))try{const C=await y.fetch("data/backup/dump-do",{method:"POST",body:{doName:s.doName,type:s.type}});i.push(C)}catch{i.push({doName:s.doName,type:s.type,error:"Failed to dump"})}let n={};try{n=await y.fetch("data/backup/dump-d1",{method:"POST"})}catch(s){console.warn("[EdgeBase] D1 dump failed:",s)}e.dos=i,e.d1=n;const d=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});W(d,`edgebase-backup-${new Date().toISOString().slice(0,10)}.json`),L("Backup downloaded")}catch(e){S(e instanceof Error?e.message:"Backup failed")}finally{t(P,!1)}}async function ee(){t(T,!0);try{const e=await y.fetch("data/backup/dump-d1",{method:"POST"}),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});W(i,`edgebase-d1-backup-${new Date().toISOString().slice(0,10)}.json`),L("D1 backup downloaded")}catch(e){S(e instanceof Error?e.message:"D1 backup failed")}finally{t(T,!1)}}async function ae(e){var n;const i=e.target;if((n=i.files)!=null&&n[0]){t(w,i.files[0],!0);try{const d=await a(w).text();t(u,JSON.parse(d),!0),ge(`Backup loaded: ${a(w).name}`)}catch{S("Invalid backup file. Please select a valid EdgeBase JSON backup file."),t(w,null),t(u,null)}}}async function te(){if(t(x,!1),!!a(u)){t(R,!0);try{const e=a(u);let i=0;const n=e.dos??[];for(const s of n)if(!(s.error||!s.tables))try{await y.fetch("data/backup/restore-do",{method:"POST",body:{doName:s.doName,type:s.type,tables:s.tables}}),i++}catch{}const d=e.d1;if(d!=null&&d.tables)try{await y.fetch("data/backup/restore-d1",{method:"POST",body:{tables:d.tables}}),i++}catch{}L(`Restored ${i} components`),t(w,null),t(u,null)}catch(e){S(e instanceof Error?e.message:"Restore failed")}finally{t(R,!1)}}}var V=Be(),z=I(V);he(z,{title:"Backup & Restore",description:"Create backups and restore data",get docsHref(){return ye},children:(e,i)=>{var n=Se(),d=o(n),s=l(o(d),2),C=l(o(s),2);{var se=v=>{var b=De();f(v,b)},oe=v=>{var b=Oe(),_=I(b);_e(_,21,()=>a(B),c=>c.doName,(c,g)=>{var p=qe(),N=o(p);{let O=fe(()=>a(g).type==="auth"?"warning":"primary");ke(N,{get variant(){return a(O)},get text(){return a(g).type}})}var q=l(N,2),F=o(q,!0);r(q),r(p),A(()=>$(F,a(g).doName)),f(c,p)}),r(_);var D=l(_,2),h=o(D);U(h,{variant:"primary",onclick:Z,get loading(){return a(P)},children:(c,g)=>{J();var p=M();A(()=>$(p,`Download Full Backup (${a(B).length??""} DOs + D1)`)),f(c,p)},$$slots:{default:!0}});var j=l(h,2);U(j,{variant:"secondary",onclick:ee,get loading(){return a(T)},children:(c,g)=>{J();var p=M("D1 Only");f(c,p)},$$slots:{default:!0}}),r(D),f(v,b)};Q(C,v=>{a(H)?v(se):v(oe,!1)})}r(s),r(d);var G=l(d,2),K=l(o(G),2),E=l(o(K),2),le=o(E);r(E);var ie=l(E,2);{var de=v=>{var b=$e(),_=I(b),D=l(o(_),2),h=o(D),j=o(h);r(h);var c=l(h,2),g=o(c);r(c);var p=l(c,2),N=o(p);r(p),r(D),r(_);var q=l(_,2),F=o(q);U(F,{variant:"danger",onclick:()=>t(x,!0),get loading(){return a(R)},children:(O,xe)=>{J();var ne=M("Restore Backup");f(O,ne)},$$slots:{default:!0}}),r(q),A(O=>{$(j,`DOs: ${(a(u).dos??[]).length??""} components`),$(g,`D1: ${a(u).d1?"Included":"Not included"}`),$(N,`Timestamp: ${O??""}`)},[()=>String(a(u).timestamp??"Unknown")]),f(v,b)};Q(ie,v=>{a(u)&&v(de)})}r(K),r(G),r(n),be("change",le,ae),f(e,n)}});var re=l(z,2);we(re,{title:"Confirm Restore",message:"This will overwrite existing data with the backup contents. This action cannot be undone. Are you sure?",confirmLabel:"Restore",confirmVariant:"danger",onconfirm:te,get open(){return a(x)},set open(e){t(x,e,!0)}}),f(X,V),ue()}me(["change"]);export{Ue as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/
|
|
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/WtDa8jKW.js";import{b as p}from"../chunks/B-pVQkKM.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/DoPXzH7F.js";import{p as Qe,d as U,M as lt,w as tn,g as t,a as en,b as z,ab as nn,f as st,c as M,r as L,s as f,ae as ue,t as H,u as F}from"../chunks/glwixJlP.js";import{d as sn,s as N,a as Kt}from"../chunks/D5h5A1cc.js";import{i as mt}from"../chunks/UUazaC_N.js";import{e as xt,i as an}from"../chunks/CCKNu7m7.js";import{c as ve,a as R,f as xe,d as Z}from"../chunks/BR_fL5Yv.js";import{a as s,c as rn,s as on}from"../chunks/C6puvcoR.js";import{b as cn}from"../chunks/CyqB6g-D.js";import{b as ln}from"../chunks/CxCPv_Ut.js";import{s as me}from"../chunks/B-h2afW5.js";import{P as dn}from"../chunks/CwROoZK0.js";import{d as fn}from"../chunks/Q2nPFxS6.js";import{E as hn}from"../chunks/DnyL7Zq-.js";var un=xe('<button type="button" class="erd-jump svelte-1n6qz2s"><span class="erd-jump__dot svelte-1n6qz2s"></span> </button>'),vn=Z('<rect height="24" rx="12" stroke-width="1"></rect><text class="erd-svg__badge svelte-1n6qz2s" text-anchor="middle"> </text>',1),mn=Z('<rect rx="4" fill="#ffffff" stroke="#d4d4d8" stroke-dasharray="5,4"></rect><text class="erd-svg__empty-title svelte-1n6qz2s">No tables yet</text><text class="erd-svg__empty-copy svelte-1n6qz2s">This database block exists in config, but there are no tables to draw.</text>',1),xn=Z('<g><rect rx="6" fill="#fbfbfa" stroke="#cfcfc9" stroke-width="1.4"></rect><line stroke="#d8d8d4" stroke-width="1"></line><text class="erd-svg__block-title svelte-1n6qz2s"> </text><text class="erd-svg__block-copy svelte-1n6qz2s"> </text><!><!></g>'),_n=Z('<rect height="18" rx="3" fill="#ffffff" stroke="#d4d4d8" stroke-width="1"></rect><text class="erd-svg__relation-label svelte-1n6qz2s" text-anchor="middle"> </text>',1),pn=Z('<path fill="none" stroke="#f8fafc" stroke-linecap="square" stroke-linejoin="miter"></path><path fill="none" stroke-linecap="square" stroke-linejoin="miter"></path><circle r="2.6" fill="#44403c"></circle><circle r="2.6" fill="#44403c"></circle><!>',1),yn=Z('<line stroke="#d6d6d6" stroke-width="1"></line>'),gn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s" fill="#111827">PK</text>'),bn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s">FK</text>'),wn=Z('<!><!><text> </text><text class="erd-svg__field-type svelte-1n6qz2s" text-anchor="end"> </text>',1),Mn=Z('<g><rect fill="#ffffff" stroke="#585858" stroke-width="1.3"></rect><rect fill="#dddddd"></rect><line stroke="#585858" stroke-width="1.1"></line><text class="erd-svg__table-title svelte-1n6qz2s"> </text><text class="erd-svg__table-meta svelte-1n6qz2s"> </text><a><rect rx="3" fill="#ffffff" stroke-width="1"></rect><text class="erd-svg__open svelte-1n6qz2s" text-anchor="middle">Open</text></a><!></g>'),Ln=xe('<div class="erd-toolbar svelte-1n6qz2s"><div class="erd-counts svelte-1n6qz2s"><span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span></div> <div class="erd-legend svelte-1n6qz2s"><span class="erd-legend__title svelte-1n6qz2s">Providers</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#2563eb"></span>D1</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#0f766e"></span>DO</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c2410c"></span>Postgres</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c026d3"></span>Neon</span></div></div> <div class="erd-jumpbar svelte-1n6qz2s"><span class="erd-jumpbar__title svelte-1n6qz2s">Jump to DB</span> <!></div> <div class="erd-container svelte-1n6qz2s" role="region" aria-label="Entity relationship diagram. Use the mouse wheel to scroll, drag to pan, and use the controls to zoom or reset the view."><svg class="erd-svg svelte-1n6qz2s" preserveAspectRatio="xMinYMin meet"><rect x="0" y="0" fill="#f5f5f4"></rect><!><!><!></svg> <div class="erd-controls svelte-1n6qz2s"><button type="button" class="erd-control erd-control--wide svelte-1n6qz2s">Reset</button> <button type="button" class="erd-control svelte-1n6qz2s">+</button> <span class="erd-controls__zoom svelte-1n6qz2s"> </span> <button type="button" class="erd-control svelte-1n6qz2s">-</button></div> <div class="erd-hint svelte-1n6qz2s"><span>Readable first</span> <span>Wheel to scroll</span> <span>Drag to pan</span> <span>Use the buttons to zoom</span></div></div>',1);function Yn(_e,pe){Qe(pe,!0);const O=300,it=42,Lt=26,Pt=3,Wt=54,ye=22,at=56,tt=18,Ht=72,It=24,St=28,ge=40,be=20,Ft=24,jt=88,we=900,Me=20,Le=520,_t=1220,pt=760,ke=980,De=680,Ee=.6,$e=2.25,kt=1.1,ze={do:"#0f766e",d1:"#2563eb",postgres:"#c2410c",neon:"#c026d3"};let Dt=U(lt([])),Xt=U(lt([])),rt=U(lt([])),J=U(lt({w:_t,h:pt})),yt=U(lt({x:0,y:0,w:_t,h:pt})),h=U(lt({x:0,y:0,w:_t,h:pt})),j=U(kt),Rt=U(!1),Et=U(lt({x:0,y:0})),D=U(null);function At(e,r){const n=e.replace("#","");if(n.length!==6)return`rgba(107, 114, 128, ${r})`;const a=Number.parseInt(n.slice(0,2),16),c=Number.parseInt(n.slice(2,4),16),l=Number.parseInt(n.slice(4,6),16);return`rgba(${a}, ${c}, ${l}, ${r})`}function Vt(e){const r=["#64748b","#2563eb","#0f766e","#c2410c","#c026d3","#7c3aed"];let n=0;for(const a of e)n=n*33+a.charCodeAt(0)>>>0;return r[n%r.length]??"#64748b"}function Oe(e,r){return e?ze[e]??Vt(r):Vt(r)}function qe(e){return e==="neon"?"NEON":e==="postgres"?"POSTGRES":e==="d1"?"D1":e==="do"?"DO":"UNKNOWN"}function Ce(e){return e?"Per-tenant DB":"Single DB"}function Gt(e){return Math.max(60,e.length*7+18)}function Ut(e){return e.reduce((r,n,a)=>r+Gt(n.label)+(a>0?8:0),0)}function Be(e,r,n){let a=r;return e.map(c=>{const l=Gt(c.label),d={...c,x:a,y:n,width:l};return a+=l+8,d})}function Ke(e){return Math.max(44,e.length*7+14)}function Zt(e,r,n=0){return Math.max(n,e.length*r+10)}function Yt(e){return e?typeof e=="string"?{table:e,column:"id"}:{table:e.table,column:e.column??"id"}:null}function We(e){const r=[{name:"id",type:"uuid",pk:!0}];for(const[n,a]of Object.entries(e||{})){const c=Yt(a.references);r.push({name:n,type:a.type??"text",fk:c==null?void 0:c.table})}return r}function Xe(e){return it+e.length*Lt+8}function dt(e){const r=Math.min(e.w,t(J).w),n=Math.min(e.h,t(J).h),a=Math.max(0,t(J).w-r),c=Math.max(0,t(J).h-n);return{x:Math.min(Math.max(e.x,0),a),y:Math.min(Math.max(e.y,0),c),w:r,h:n}}function Jt(e,r){const n=Math.max(Ee,Math.min($e,e)),a=t(yt).w/n,c=t(yt).h/n;{const l=t(h).x+t(h).w/2,d=t(h).y+t(h).h/2;z(h,dt({x:l-a/2,y:d-c/2,w:a,h:c}),!0)}z(j,n,!0)}function Re(){var n,a;const e=(n=t(D))!=null&&n.clientWidth?Math.max(ke,t(D).clientWidth):_t,r=(a=t(D))!=null&&a.clientHeight?Math.max(De,t(D).clientHeight):pt;return{w:Math.min(t(J).w,e),h:Math.min(t(J).h,r)}}function Tt(e=!1){const r=Re();if(z(yt,{x:0,y:0,w:r.w,h:r.h},!0),e){z(j,kt),z(h,dt({x:0,y:0,w:r.w/kt,h:r.h/kt}),!0);return}const n=r.w/t(j),a=r.h/t(j),c=t(h).x+t(h).w/2,l=t(h).y+t(h).h/2;z(h,dt({x:c-n/2,y:l-a/2,w:n,h:a}),!0)}function Ae(){Tt(!0)}function Ye(e){const r=t(rt).find(c=>c.key===e);if(!r)return;const n=t(yt).w/t(j),a=t(yt).h/t(j);z(h,dt({x:Math.max(0,r.x-24),y:Math.max(0,r.y-24),w:n,h:a}),!0)}function Qt(e){var u,q;e.preventDefault();const r=Math.max(((u=t(D))==null?void 0:u.clientWidth)??1,1),n=Math.max(((q=t(D))==null?void 0:q.clientHeight)??1,1),a=t(h).w/r,c=t(h).h/n;let l=t(h).x+e.deltaX*a,d=t(h).y+e.deltaY*c;e.shiftKey&&Math.abs(e.deltaX)<Math.abs(e.deltaY)&&(l=t(h).x+e.deltaY*a,d=t(h).y),z(h,dt({...t(h),x:l,y:d}),!0)}function te(e){if(e.button!==0)return;const r=e.target;r instanceof Element&&r.closest("a, button, input, textarea, select, [data-no-pan]")||(z(Rt,!0),z(Et,{x:e.clientX,y:e.clientY},!0))}function ee(e){var a,c;if(!t(Rt))return;const r=(e.clientX-t(Et).x)*(t(h).w/Math.max(((a=t(D))==null?void 0:a.clientWidth)??1,1)),n=(e.clientY-t(Et).y)*(t(h).h/Math.max(((c=t(D))==null?void 0:c.clientHeight)??1,1));z(h,dt({...t(h),x:t(h).x-r,y:t(h).y-n}),!0),z(Et,{x:e.clientX,y:e.clientY},!0)}function ne(){z(Rt,!1)}function Te(e,r,n){var a,c,l;return r[n]??{provider:(a=e[0])==null?void 0:a[1].provider,dynamic:(c=e[0])==null?void 0:c[1].dynamic,instanceDiscovery:(l=e[0])==null?void 0:l[1].instanceDiscovery}}function se(e){const r=new Set(e.map(([a])=>a)),n=new Map;for(const[a,c]of e){const l=[];for(const d of Object.values(c.fields||{})){const u=Yt(d.references);u&&r.has(u.table)&&l.push(u.table)}n.set(a,l)}return n}function Ne(e){const r=se(e),n=new Map,a=new Set;function c(l){if(n.has(l))return n.get(l);if(a.has(l))return 0;a.add(l);let d=0;for(const u of r.get(l)??[])d=Math.max(d,c(u)+1);return a.delete(l),n.set(l,d),d}for(const[l]of e)c(l);return n}function Pe(e){const r=se(e),n=new Map;for(const[a]of e)n.set(a,0);for(const[a,c]of r){n.set(a,(n.get(a)??0)+c.length);for(const l of c)n.set(l,(n.get(l)??0)+1)}return n}function He(e){var n;const r=[];for(const[a,c]of Object.entries(e))for(const[l,d]of Object.entries(c.fields||{})){const u=Yt(d.references);u&&r.push({id:`${a}.${l}->${u.table}.${u.column}`,from:a,fromField:l,to:u.table,toField:u.column,fromDatabaseKey:c.namespace||"default",toDatabaseKey:((n=e[u.table])==null?void 0:n.namespace)||"default"})}return r}function Ie(e,r){const n=[];let a=[],c=0;for(const l of e){const d=a.length===0?l.height:c+St+l.height;if(a.length>0&&d>we){n.push({level:r,tables:a,height:c}),a=[l],c=l.height;continue}a.push(l),c=d}return a.length>0&&n.push({level:r,tables:a,height:c}),n}function ae(e,r,n){var l;const a=((l=r.get(e))==null?void 0:l.length)??0;return[n.filter(d=>d.fromDatabaseKey===e||d.toDatabaseKey===e).length,a,e]}function re(e,r){return`${e} internal relation${e===1?"":"s"}`+(r>0?` · ${r} cross-db`:"")}function oe(e){return[{label:qe(e.provider),fill:At(e.color,.12),stroke:At(e.color,.28),color:e.color},{label:Ce(e.dynamic),fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.tableCount} table${e.tableCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.relationCount} relation${e.relationCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"}]}function Se(e,r,n){const a=Zt(e,10,110),c=Zt(n,7,210),l=Math.max(a,c),d=tt*2+l+Me+Ut(r);return Math.max(Le,d)}function ce(e){return t(Dt).find(r=>r.name===e)}function le(e,r){const n=e.fields.findIndex(a=>a.name===r);return e.y+it+(n>=0?n:0)*Lt+Lt/2}function Fe(e,r){const n=ce(e.from),a=ce(e.to);if(!n||!a)return null;const c=le(n,e.fromField),l=le(a,e.toField),d=28+r%5*10;if(a.x>=n.x+O){const m=n.x+O,y=a.x,C=m+(y-m)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}if(a.x+O<=n.x){const m=n.x,y=a.x+O,C=y+(m-y)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}const u=e.toDatabaseKey!==e.fromDatabaseKey||a.y>=n.y,q=u?n.x+O:n.x,p=u?a.x+O:a.x,v=u?Math.max(q,p)+d:Math.min(q,p)-d;return{d:`M ${q} ${c} L ${v} ${c} L ${v} ${l} L ${p} ${l}`,startX:q,startY:c,endX:p,endY:l,labelX:v,labelY:(c+l)/2}}Je(()=>(me.loadSchema(),me.subscribe(r=>{const n=new Map;for(const[p,v]of Object.entries(r.schema).sort(([m],[y])=>m.localeCompare(y))){const m=v.namespace||"default",y=n.get(m)??[];y.push([p,v]),n.set(m,y)}const a=He(r.schema),c=Array.from(new Set([...Object.keys(r.namespaces),...n.keys()])).sort((p,v)=>{const[m,y]=ae(p,n,a),[C,et]=ae(v,n,a);return C!==m?C-m:et!==y?et-y:p.localeCompare(v)}),l=[],d=[];let u=be,q=_t;for(const p of c){const v=n.get(p)??[],m=Te(v,r.namespaces,p),y=Oe(m.provider,p),C=Ne(v),et=Pe(v),Nt=new Map(v),gt=v.length===0?1:Math.max(...C.values(),0)+1,bt=Array.from({length:gt},()=>[]);for(const[i]of v){const x=C.get(i)??0,E=Nt.get(i);if(!E)continue;const b=We(E.fields);bt[x].push({name:i,fields:b,height:Xe(b)})}for(const i of bt)i.sort((x,E)=>{const b=(et.get(E.name)??0)-(et.get(x.name)??0);return b!==0?b:x.name.localeCompare(E.name)});const V=bt.flatMap((i,x)=>Ie(i,x)),ot=v.length===0?jt:Math.max(...V.map(i=>i.height),0),wt=V.reduce((i,x,E)=>{if(E===0)return i;const b=V[E-1];return i+((b==null?void 0:b.level)===x.level?It:Ht)},0),ft=a.filter(i=>i.fromDatabaseKey===p||i.toDatabaseKey===p).length,ht=a.filter(i=>i.fromDatabaseKey===p&&i.toDatabaseKey===p).length,$t=ft-ht,zt=oe({provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft}),Ot=re(ht,$t),Mt=v.length===0?O:V.length*O+wt,ct=Math.max(tt*2+Mt,Se(p,zt,Ot)),qt=at+tt*2+ot,Ct=Ft,g=u;let W=Ct+tt+Math.max(0,(ct-tt*2-Mt)/2);for(const[i,x]of V.entries()){let E=g+at+tt+(ot-x.height)/2;for(const k of x.tables)l.push({name:k.name,databaseKey:p,fields:k.fields,x:W,y:E,height:k.height}),E+=k.height+St;const b=V[i+1];b&&(W+=O+(x.level===b.level?It:Ht))}d.push({key:p,provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft,internalRelationCount:ht,crossRelationCount:$t,x:Ct,y:g,width:ct,height:qt,empty:v.length===0}),u+=qt+ge,q=Math.max(q,ct+Ft*2)}z(Dt,l,!0),z(Xt,a,!0),z(rt,d,!0),z(J,{w:q,h:Math.max(u,pt)},!0),nn().then(()=>{Tt(!0)})}))),tn(()=>{if(!t(D)||typeof window>"u")return;const e=typeof ResizeObserver<"u"?new ResizeObserver(()=>{Tt(!1)}):null,r=()=>ne(),n=()=>ne();return t(D).addEventListener("wheel",Qt,{passive:!1}),t(D).addEventListener("mousedown",te),t(D).addEventListener("mousemove",ee),t(D).addEventListener("mouseleave",n),window.addEventListener("mouseup",r),e==null||e.observe(t(D)),()=>{var a,c,l,d;(a=t(D))==null||a.removeEventListener("wheel",Qt),(c=t(D))==null||c.removeEventListener("mousedown",te),(l=t(D))==null||l.removeEventListener("mousemove",ee),(d=t(D))==null||d.removeEventListener("mouseleave",n),window.removeEventListener("mouseup",r),e==null||e.disconnect()}}),dn(_e,{title:"Schema ERD",description:"Database blocks come directly from edgebase.config.ts, including provider and single vs per-tenant topology.",get docsHref(){return fn},children:(e,r)=>{var n=ve(),a=st(n);{var c=d=>{hn(d,{title:"No databases",description:"Define database blocks in your config to see the ERD."})},l=d=>{var u=Ln(),q=st(u),p=M(q),v=M(p),m=M(v);L(v);var y=f(v,2),C=M(y);L(y);var et=f(y,2),Nt=M(et);L(et),L(p),ue(2),L(q);var gt=f(q,2),bt=f(M(gt),2);xt(bt,17,()=>t(rt),g=>g.key,(g,o)=>{var W=un(),i=M(W),x=f(i);L(W),H(()=>{rn(i,`background:${t(o).color}`),N(x,` ${t(o).key??""}`)}),Kt("click",W,()=>Ye(t(o).key)),R(g,W)}),L(gt);var V=f(gt,2),ot=M(V),wt=M(ot),ft=f(wt);xt(ft,17,()=>t(rt),g=>g.key,(g,o)=>{const W=F(()=>oe(t(o))),i=F(()=>re(t(o).internalRelationCount,t(o).crossRelationCount)),x=F(()=>t(o).x+(t(o).width-O)/2),E=F(()=>Be(t(W),t(o).x+t(o).width-tt-Ut(t(W)),t(o).y+15));var b=xn(),k=M(b),B=f(k),K=f(B),A=M(K,!0);L(K);var I=f(K),S=M(I,!0);L(I);var ut=f(I);xt(ut,17,()=>t(E),Y=>Y.label,(Y,$)=>{var w=vn(),_=st(w),T=f(_),nt=M(T,!0);L(T),H(()=>{s(_,"x",t($).x),s(_,"y",t($).y),s(_,"width",t($).width),s(_,"fill",t($).fill),s(_,"stroke",t($).stroke),s(T,"x",t($).x+t($).width/2),s(T,"y",t($).y+16),s(T,"fill",t($).color),N(nt,t($).label)}),R(Y,w)});var Q=f(ut);{var P=Y=>{var $=mn(),w=st($);s(w,"width",O),s(w,"height",jt);var _=f(w),T=f(_);H(()=>{s(w,"x",t(x)),s(w,"y",t(o).y+at+tt),s(_,"x",t(x)+16),s(_,"y",t(o).y+at+50),s(T,"x",t(x)+16),s(T,"y",t(o).y+at+72)}),R(Y,$)};mt(Q,Y=>{t(o).empty&&Y(P)})}L(b),H(()=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"width",t(o).width),s(k,"height",t(o).height),s(B,"x1",t(o).x),s(B,"y1",t(o).y+at),s(B,"x2",t(o).x+t(o).width),s(B,"y2",t(o).y+at),s(K,"x",t(o).x+18),s(K,"y",t(o).y+25),N(A,t(o).key),s(I,"x",t(o).x+18),s(I,"y",t(o).y+43),N(S,t(i))}),R(g,b)});var ht=f(ft);xt(ht,19,()=>t(Xt),g=>g.id,(g,o,W)=>{const i=F(()=>Fe(t(o),t(W)));var x=ve(),E=st(x);{var b=k=>{var B=pn(),K=st(B),A=f(K),I=f(A),S=f(I),ut=f(S);{var Q=P=>{const Y=F(()=>Ke(t(o).fromField));var $=_n(),w=st($),_=f(w),T=M(_,!0);L(_),H(()=>{s(w,"x",t(i).labelX-t(Y)/2),s(w,"y",t(i).labelY-10),s(w,"width",t(Y)),s(_,"x",t(i).labelX),s(_,"y",t(i).labelY+2),N(T,t(o).fromField)}),R(P,$)};mt(ut,P=>{t(j)>=.95&&P(Q)})}H(()=>{s(K,"d",t(i).d),s(K,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"5.6":"5"),s(A,"d",t(i).d),s(A,"stroke",t(o).fromDatabaseKey===t(o).toDatabaseKey?"#52525b":"#64748b"),s(A,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"2.2":"1.9"),s(A,"stroke-dasharray",t(o).fromDatabaseKey===t(o).toDatabaseKey?void 0:"7 5"),s(I,"cx",t(i).startX),s(I,"cy",t(i).startY),s(S,"cx",t(i).endX),s(S,"cy",t(i).endY)}),R(k,B)};mt(E,k=>{t(i)&&k(b)})}R(g,x)});var $t=f(ht);xt($t,17,()=>t(Dt),g=>g.name,(g,o)=>{const W=F(()=>t(rt).find(w=>w.key===t(o).databaseKey)),i=F(()=>{var w;return((w=t(W))==null?void 0:w.color)??"#64748b"}),x=F(()=>t(o).x+O-Wt-12),E=F(()=>t(o).y+10);var b=Mn(),k=M(b);s(k,"width",O),s(k,"rx",Pt);var B=f(k);s(B,"width",O),s(B,"height",it),s(B,"rx",Pt);var K=f(B),A=f(K),I=M(A,!0);L(A);var S=f(A),ut=M(S,!0);L(S);var Q=f(S),P=M(Q);s(P,"width",Wt),s(P,"height",ye);var Y=f(P);L(Q);var $=f(Q);xt($,17,()=>t(o).fields,an,(w,_,T)=>{const nt=F(()=>t(o).y+it+T*Lt);var ie=wn(),de=st(ie);{var je=G=>{var X=yn();H(()=>{s(X,"x1",t(o).x),s(X,"y1",t(nt)),s(X,"x2",t(o).x+O),s(X,"y2",t(nt))}),R(G,X)};mt(de,G=>{T>0&&G(je)})}var fe=f(de);{var Ve=G=>{var X=gn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17)}),R(G,X)},Ge=G=>{var X=bn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17),s(X,"fill",t(i))}),R(G,X)};mt(fe,G=>{t(_).pk?G(Ve):t(_).fk&&G(Ge,1)})}var vt=f(fe);let he;var Ue=M(vt,!0);L(vt);var Bt=f(vt),Ze=M(Bt,!0);L(Bt),H(()=>{s(vt,"x",t(o).x+(t(_).pk||t(_).fk?36:12)),s(vt,"y",t(nt)+17),he=on(vt,0,"erd-svg__field-name svelte-1n6qz2s",null,he,{"erd-svg__field-name--key":t(_).pk||t(_).fk}),N(Ue,t(_).name),s(Bt,"x",t(o).x+O-12),s(Bt,"y",t(nt)+17),N(Ze,t(_).type)}),R(w,ie)}),L(b),H(w=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"height",t(o).height),s(B,"x",t(o).x),s(B,"y",t(o).y),s(K,"x1",t(o).x),s(K,"y1",t(o).y+it),s(K,"x2",t(o).x+O),s(K,"y2",t(o).y+it),s(A,"x",t(o).x+14),s(A,"y",t(o).y+26),N(I,t(o).name),s(S,"x",t(o).x+14),s(S,"y",t(o).y+39),N(ut,t(o).databaseKey),s(Q,"href",`${ln}/database/tables/${t(o).name}`),s(Q,"aria-label",`Open table ${t(o).name}`),s(P,"x",t(x)),s(P,"y",t(E)),s(P,"stroke",w),s(Y,"x",t(x)+Wt/2),s(Y,"y",t(E)+15)},[()=>At(t(i),.45)]),R(g,b)}),L(ot);var zt=f(ot,2),Ot=M(zt),Mt=f(Ot,2),ct=f(Mt,2),qt=M(ct);L(ct);var Ct=f(ct,2);L(zt),ue(2),L(V),cn(V,g=>z(D,g),()=>t(D)),H(g=>{N(m,`${t(rt).length??""} DB`),N(C,`${t(Dt).length??""} Tables`),N(Nt,`${t(Xt).length??""} Relations`),s(ot,"viewBox",`${t(h).x} ${t(h).y} ${t(h).w} ${t(h).h}`),s(wt,"width",t(J).w),s(wt,"height",t(J).h),N(qt,`${g??""}%`)},[()=>Math.round(t(j)*100)]),Kt("click",Ot,Ae),Kt("click",Mt,()=>Jt(t(j)*1.12)),Kt("click",Ct,()=>Jt(t(j)/1.12)),R(d,u)};mt(a,d=>{t(rt).length===0?d(c):d(l,!1)})}R(e,n)}}),en()}sn(["click"]);export{Yn as component};
|
|
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/MKsm6wXE.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/CoI6jjbg.js";import{b as cn}from"../chunks/CGgVJi7f.js";import{b as ln}from"../chunks/B-pVQkKM.js";import{s as me}from"../chunks/v2HHbTgy.js";import{P as dn}from"../chunks/B8s_s9QY.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 bt,d as p,M as yt,w as pe,g as e,b as t,a as Nt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/glwixJlP.js";import{s as C}from"../chunks/D5h5A1cc.js";import{t as D,a as d,f,c as Pt}from"../chunks/BR_fL5Yv.js";import{i as E}from"../chunks/UUazaC_N.js";import{a as ge,t as V,b as ze,e as $t}from"../chunks/CCKNu7m7.js";import{a as wt,b as ue}from"../chunks/C6puvcoR.js";import{s as kt,a as xt}from"../chunks/B8vJP3wz.js";import{g as Le}from"../chunks/BY92tFS2.js";import{b as me}from"../chunks/CxCPv_Ut.js";import{P as Ct}from"../chunks/CwROoZK0.js";import{d as Dt}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/Cs0GwzJA.js";import{I as L}from"../chunks/DrQSgw-f.js";import{d as Et}from"../chunks/DuXuUBWN.js";import{s as Re}from"../chunks/B-h2afW5.js";var St=f('<div class="create-error svelte-gjmjph"> </div>'),It=f('<div class="readonly-banner svelte-gjmjph">Creating database blocks requires dev mode. Start <code class="svelte-gjmjph">pnpm dev</code> to enable schema edits and Neon helpers.</div>'),Bt=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Ot=f("<option> </option>"),Kt=f("<option> </option>"),Tt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),zt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Lt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),Rt=f('<div class="field-group field-group--helper svelte-gjmjph"><label class="field-label svelte-gjmjph" for="recommended-postgres-env-key">Automatic Postgres Env Key</label> <div id="recommended-postgres-env-key" class="field-static-display svelte-gjmjph"><code class="svelte-gjmjph"> </code></div> <p class="field-help svelte-gjmjph">EdgeBase will write this key into config automatically. Only override it if you already use a specific env key name.</p> <div class="helper-actions svelte-gjmjph"><!></div> <!></div> <div class="field-group field-group--helper neon-helper svelte-gjmjph"><div class="neon-helper__intro svelte-gjmjph"><div class="field-label svelte-gjmjph">Neon Setup (Optional)</div> <p class="field-help svelte-gjmjph">Need Neon right now? Pick one shortcut below. If you already have a connection string, skip this section and use <strong>Create Database</strong>.</p></div> <div class="neon-helper__grid svelte-gjmjph"><section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Existing project</div> <h3 class="neon-helper__option-title svelte-gjmjph">1. Connect an existing Neon project</h3> <p class="field-help svelte-gjmjph">Best when the Neon project already exists in your account.</p></div> <label class="field-label svelte-gjmjph" for="existing-neon-project">Existing Neon Project</label> <select id="existing-neon-project" class="field-select svelte-gjmjph"><!></select> <div class="helper-actions helper-actions--compact svelte-gjmjph"><!></div> <!> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section> <section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Provision new project</div> <h3 class="neon-helper__option-title svelte-gjmjph">2. Create a new Neon project</h3> <p class="field-help svelte-gjmjph">Best when you want EdgeBase to provision Neon for this block.</p></div> <!> <p class="field-help svelte-gjmjph">EdgeBase will try this name first, then append a suffix if Neon already has one.</p> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section></div></div>',1),Mt=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-provider">Provider</label> <select id="db-provider" class="field-select svelte-gjmjph"><option>D1 (default)</option><option>Durable Object</option><option>Postgres</option></select></div> <!>',1),At=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="dynamic-provider">Provider</label> <input id="dynamic-provider" class="field-static svelte-gjmjph" value="Durable Object" disabled=""/> <p class="field-help svelte-gjmjph">Per-tenant DB blocks always use Durable Objects for physical isolation.</p></div> <!> <!> <!>',1),qt=f('<div class="create-page svelte-gjmjph"><!> <!> <div class="create-card svelte-gjmjph"><!> <div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-topology">Type</label> <select id="db-topology" class="field-select svelte-gjmjph"><option>Single DB</option><option>Per-tenant DB</option></select> <p class="field-help svelte-gjmjph"><!></p></div> <!></div> <div class="create-actions svelte-gjmjph"><a><!></a> <!></div></div>');function sa(Me,Ae){bt(Ae,!0);const qe=()=>xt(Et,"$devInfoStore",Fe),[Fe,Ue]=kt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),S=p(null),g=p(""),$=p(!1),H=p(""),I=p(yt([])),b=p(!1),ae=p(!1),M=p(""),O=p(""),w=T(()=>qe().devMode);function Z(i){const y=i.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function he(i){return i.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"edgebase-db"}function W(){return e($)?e(R).trim()||Z(e(c)):Z(e(c))}function re(){return e(H).trim()||he(e(c))}function fe(){const i=e(c).trim();return i?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)?e(m)==="single"&&e(h)==="postgres"&&!W()?(t(g,"Connection string env key is required for postgres."),!1):(e(m)==="single"&&e(h)==="postgres"&&e(S)==="create"&&re(),t(g,""),!0):(t(g,"Database block name must start with a letter or underscore."),!1):(t(g,"Database block name is required."),!1)}async function _e(i=!1){var y;if(e(w)&&!(!i&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(M,"");try{const k=await ge.schemaMutation(i?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(I,k.items??[],!0),t(O,((y=e(I)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(k){t(M,k instanceof Error?k.message:"Failed to load Neon projects.",!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&_e()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function Ge(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function He(){if(!e(w)){t(g,"Creating database blocks requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(fe()){t(te,!0);try{await ge.schemaMutation("schema/databases",{method:"POST",body:{name:e(c).trim(),topology:e(m),provider:e(m)==="single"?e(h):"do",connectionString:e(m)==="single"&&e(h)==="postgres"?W():void 0,targetLabel:e(X).trim()||void 0,placeholder:e(Y).trim()||void 0,helperText:e(ee).trim()||void 0}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" created`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(i){t(g,i instanceof Error?i.message:"Failed to create database block.",!0),V(e(g))}finally{t(te,!1)}}}async function je(i){if(!e(w)){t(g,"Neon helpers require dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(e(m)!=="single"){t(g,"Neon helper only supports single database blocks.");return}if(e(h)!=="postgres"&&t(h,"postgres"),i==="create"&&re(),!!fe()){if(i==="reuse"&&!e(O)){t(g,e(M)||"Choose an existing Neon project first, or create a new one.",!0);return}t(S,i,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:i==="reuse"?e(O):void 0,projectName:i==="create"?re():void 0,mode:i,...e($)?{envKey:W()}:{}}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" connected to Neon`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,y instanceof Error?y.message:"Failed to connect with Neon.",!0),V(e(g))}finally{t(S,null)}}}function Ze(){return!e(b)&&e(I).length>0&&!!e(O)}Ct(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Dt},children:(i,y)=>{var k=qt(),be=l(k);{var We=r=>{var v=St(),_=l(v,!0);n(v),P(()=>C(_,e(g))),d(r,v)};E(be,r=>{e(g)&&r(We)})}var ye=o(be,2);{var Je=r=>{var v=It();d(r,v)};E(ye,r=>{e(w)||r(Je)})}var oe=o(ye,2),Ne=l(oe);L(Ne,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Ne,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var Pe=o(le);Pe.value=Pe.__value="dynamic",n(J);var $e=o(J,2),Qe=l($e);{var Ve=r=>{var v=D("One database shared by the whole app.");d(r,v)},Xe=r=>{var v=D("One isolated database per target ID.");d(r,v)};E(Qe,r=>{e(m)==="single"?r(Ve):r(Xe,!1)})}n($e),n(se);var Ye=o(se,2);{var et=r=>{var v=Mt(),_=G(v),x=o(l(_),2),A=l(x);A.value=A.__value="d1";var N=o(A);N.value=N.__value="do";var ke=o(N);ke.value=ke.__value="postgres",n(x),n(_);var ot=o(_,2);{var st=q=>{var xe=Rt(),ne=G(xe),ie=o(l(ne),2),Ce=l(ie),lt=l(Ce,!0);n(Ce),n(ie);var de=o(ie,4),nt=l(de);z(nt,{variant:"ghost",onclick:Ge,children:(a,s)=>{B();var u=D();P(()=>C(u,e($)?"Hide Env Key Override":"Customize Env Key")),d(a,u)},$$slots:{default:!0}}),n(de);var it=o(de,2);{var dt=a=>{var s=Bt(),u=G(s);{let j=T(()=>Z(e(c)));L(u,{label:"Custom Connection String Env Key",get placeholder(){return e(j)},get value(){return e(R)},set value(K){t(R,K,!0)}})}B(2),d(a,s)};E(it,a=>{e($)&&a(dt)})}n(ne);var De=o(ne,2),Ee=o(l(De),2),ce=l(Ee),F=o(l(ce),4),ct=l(F);{var vt=a=>{var s=Ot(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>C(u,e(b)?"Loading Neon projects...":"No Neon projects found")),d(a,s)},pt=a=>{var s=Pt(),u=G(s);$t(u,17,()=>e(I),j=>j.projectId,(j,K)=>{var U=Kt(),jt=l(U);n(U);var Te={};P(()=>{C(jt,`${e(K).projectName??""} (${e(K).orgName??""})`),Te!==(Te=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),d(j,U)}),d(a,s)};E(ct,a=>{e(I).length===0?a(vt):a(pt,!1)})}n(F);var ve=o(F,2),gt=l(ve);z(gt,{variant:"ghost",onclick:()=>_e(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=D("Refresh Projects");d(a,u)},$$slots:{default:!0}}),n(ve);var Se=o(ve,2);{var ut=a=>{var s=Tt(),u=l(s,!0);n(s),P(()=>C(u,e(M))),d(a,s)},mt=a=>{var s=zt();d(a,s)},ht=a=>{var s=Lt();d(a,s)};E(Se,a=>{e(M)?a(ut):!e(b)&&e(I).length===0?a(mt,1):e(b)||a(ht,2)})}var Ie=o(Se,2),ft=l(Ie);{let a=T(()=>!e(w)||!Ze()||e(S)!==null);z(ft,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("reuse"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),d(s,j)},$$slots:{default:!0}})}n(Ie),n(ce);var Be=o(ce,2),Oe=o(l(Be),2);{let a=T(()=>he(e(c)));L(Oe,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Ke=o(Oe,4),_t=l(Ke);{let a=T(()=>!e(w)||e(S)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("create"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="create"?"Creating Neon Project...":"Create New Neon Project")),d(s,j)},$$slots:{default:!0}})}n(Ke),n(Be),n(Ee),n(De),P(a=>{C(lt,a),F.disabled=e(b)||e(I).length===0},[W]),ue(F,()=>e(O),a=>t(O,a)),d(q,xe)};E(ot,q=>{e(h)==="postgres"&&q(st)})}ue(x,()=>e(h),q=>t(h,q)),d(r,v)},tt=r=>{var v=At(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var x=o(_,2);L(x,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var A=o(x,2);L(A,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),d(r,v)};E(Ye,r=>{e(m)==="single"?r(et):r(tt,!1)})}n(oe);var we=o(oe,2),Q=l(we),at=l(Q);z(at,{variant:"secondary",children:(r,v)=>{B();var _=D("Cancel");d(r,_)},$$slots:{default:!0}}),n(Q);var rt=o(Q,2);{let r=T(()=>!e(w));z(rt,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:He,children:(v,_)=>{B();var x=D("Create Database");d(v,x)},$$slots:{default:!0}})}n(we),n(k),P(()=>wt(Q,"href",`${me??""}/database/tables`)),ue(J,()=>e(m),r=>t(m,r)),d(i,k)}}),Nt(),Ue()}export{sa as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{p as bt,d as p,M as yt,w as pe,g as e,b as t,a as Nt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/BdTBlfLy.js";import{s as C}from"../chunks/DtZk82gG.js";import{t as D,a as d,f,c as Pt}from"../chunks/DEELgv7K.js";import{i as E}from"../chunks/Y22E1hJM.js";import{a as ge,t as V,b as ze,e as $t}from"../chunks/MKsm6wXE.js";import{a as wt,b as ue}from"../chunks/CoI6jjbg.js";import{s as kt,a as xt}from"../chunks/Cp8V0Xy2.js";import{g as Le}from"../chunks/WtDa8jKW.js";import{b as me}from"../chunks/B-pVQkKM.js";import{P as Ct}from"../chunks/B8s_s9QY.js";import{d as Dt}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/C72lTcG0.js";import{I as L}from"../chunks/_teD5ji5.js";import{d as Et}from"../chunks/CF95mcQY.js";import{s as Re}from"../chunks/v2HHbTgy.js";var St=f('<div class="create-error svelte-gjmjph"> </div>'),It=f('<div class="readonly-banner svelte-gjmjph">Creating database blocks requires dev mode. Start <code class="svelte-gjmjph">pnpm dev</code> to enable schema edits and Neon helpers.</div>'),Bt=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Ot=f("<option> </option>"),Kt=f("<option> </option>"),Tt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),zt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Lt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),Rt=f('<div class="field-group field-group--helper svelte-gjmjph"><label class="field-label svelte-gjmjph" for="recommended-postgres-env-key">Automatic Postgres Env Key</label> <div id="recommended-postgres-env-key" class="field-static-display svelte-gjmjph"><code class="svelte-gjmjph"> </code></div> <p class="field-help svelte-gjmjph">EdgeBase will write this key into config automatically. Only override it if you already use a specific env key name.</p> <div class="helper-actions svelte-gjmjph"><!></div> <!></div> <div class="field-group field-group--helper neon-helper svelte-gjmjph"><div class="neon-helper__intro svelte-gjmjph"><div class="field-label svelte-gjmjph">Neon Setup (Optional)</div> <p class="field-help svelte-gjmjph">Need Neon right now? Pick one shortcut below. If you already have a connection string, skip this section and use <strong>Create Database</strong>.</p></div> <div class="neon-helper__grid svelte-gjmjph"><section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Existing project</div> <h3 class="neon-helper__option-title svelte-gjmjph">1. Connect an existing Neon project</h3> <p class="field-help svelte-gjmjph">Best when the Neon project already exists in your account.</p></div> <label class="field-label svelte-gjmjph" for="existing-neon-project">Existing Neon Project</label> <select id="existing-neon-project" class="field-select svelte-gjmjph"><!></select> <div class="helper-actions helper-actions--compact svelte-gjmjph"><!></div> <!> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section> <section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Provision new project</div> <h3 class="neon-helper__option-title svelte-gjmjph">2. Create a new Neon project</h3> <p class="field-help svelte-gjmjph">Best when you want EdgeBase to provision Neon for this block.</p></div> <!> <p class="field-help svelte-gjmjph">EdgeBase will try this name first, then append a suffix if Neon already has one.</p> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section></div></div>',1),Mt=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-provider">Provider</label> <select id="db-provider" class="field-select svelte-gjmjph"><option>D1 (default)</option><option>Durable Object</option><option>Postgres</option></select></div> <!>',1),At=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="dynamic-provider">Provider</label> <input id="dynamic-provider" class="field-static svelte-gjmjph" value="Durable Object" disabled=""/> <p class="field-help svelte-gjmjph">Per-tenant DB blocks always use Durable Objects for physical isolation.</p></div> <!> <!> <!>',1),qt=f('<div class="create-page svelte-gjmjph"><!> <!> <div class="create-card svelte-gjmjph"><!> <div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-topology">Type</label> <select id="db-topology" class="field-select svelte-gjmjph"><option>Single DB</option><option>Per-tenant DB</option></select> <p class="field-help svelte-gjmjph"><!></p></div> <!></div> <div class="create-actions svelte-gjmjph"><a><!></a> <!></div></div>');function sa(Me,Ae){bt(Ae,!0);const qe=()=>xt(Et,"$devInfoStore",Fe),[Fe,Ue]=kt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),S=p(null),g=p(""),$=p(!1),H=p(""),I=p(yt([])),b=p(!1),ae=p(!1),M=p(""),O=p(""),w=T(()=>qe().devMode);function Z(i){const y=i.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function he(i){return i.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"edgebase-db"}function W(){return e($)?e(R).trim()||Z(e(c)):Z(e(c))}function re(){return e(H).trim()||he(e(c))}function fe(){const i=e(c).trim();return i?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)?e(m)==="single"&&e(h)==="postgres"&&!W()?(t(g,"Connection string env key is required for postgres."),!1):(e(m)==="single"&&e(h)==="postgres"&&e(S)==="create"&&re(),t(g,""),!0):(t(g,"Database block name must start with a letter or underscore."),!1):(t(g,"Database block name is required."),!1)}async function _e(i=!1){var y;if(e(w)&&!(!i&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(M,"");try{const k=await ge.schemaMutation(i?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(I,k.items??[],!0),t(O,((y=e(I)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(k){t(M,k instanceof Error?k.message:"Failed to load Neon projects.",!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&_e()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function Ge(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function He(){if(!e(w)){t(g,"Creating database blocks requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(fe()){t(te,!0);try{await ge.schemaMutation("schema/databases",{method:"POST",body:{name:e(c).trim(),topology:e(m),provider:e(m)==="single"?e(h):"do",connectionString:e(m)==="single"&&e(h)==="postgres"?W():void 0,targetLabel:e(X).trim()||void 0,placeholder:e(Y).trim()||void 0,helperText:e(ee).trim()||void 0}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" created`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(i){t(g,i instanceof Error?i.message:"Failed to create database block.",!0),V(e(g))}finally{t(te,!1)}}}async function je(i){if(!e(w)){t(g,"Neon helpers require dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(e(m)!=="single"){t(g,"Neon helper only supports single database blocks.");return}if(e(h)!=="postgres"&&t(h,"postgres"),i==="create"&&re(),!!fe()){if(i==="reuse"&&!e(O)){t(g,e(M)||"Choose an existing Neon project first, or create a new one.",!0);return}t(S,i,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:i==="reuse"?e(O):void 0,projectName:i==="create"?re():void 0,mode:i,...e($)?{envKey:W()}:{}}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" connected to Neon`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,y instanceof Error?y.message:"Failed to connect with Neon.",!0),V(e(g))}finally{t(S,null)}}}function Ze(){return!e(b)&&e(I).length>0&&!!e(O)}Ct(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Dt},children:(i,y)=>{var k=qt(),be=l(k);{var We=r=>{var v=St(),_=l(v,!0);n(v),P(()=>C(_,e(g))),d(r,v)};E(be,r=>{e(g)&&r(We)})}var ye=o(be,2);{var Je=r=>{var v=It();d(r,v)};E(ye,r=>{e(w)||r(Je)})}var oe=o(ye,2),Ne=l(oe);L(Ne,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Ne,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var Pe=o(le);Pe.value=Pe.__value="dynamic",n(J);var $e=o(J,2),Qe=l($e);{var Ve=r=>{var v=D("One database shared by the whole app.");d(r,v)},Xe=r=>{var v=D("One isolated database per target ID.");d(r,v)};E(Qe,r=>{e(m)==="single"?r(Ve):r(Xe,!1)})}n($e),n(se);var Ye=o(se,2);{var et=r=>{var v=Mt(),_=G(v),x=o(l(_),2),A=l(x);A.value=A.__value="d1";var N=o(A);N.value=N.__value="do";var ke=o(N);ke.value=ke.__value="postgres",n(x),n(_);var ot=o(_,2);{var st=q=>{var xe=Rt(),ne=G(xe),ie=o(l(ne),2),Ce=l(ie),lt=l(Ce,!0);n(Ce),n(ie);var de=o(ie,4),nt=l(de);z(nt,{variant:"ghost",onclick:Ge,children:(a,s)=>{B();var u=D();P(()=>C(u,e($)?"Hide Env Key Override":"Customize Env Key")),d(a,u)},$$slots:{default:!0}}),n(de);var it=o(de,2);{var dt=a=>{var s=Bt(),u=G(s);{let j=T(()=>Z(e(c)));L(u,{label:"Custom Connection String Env Key",get placeholder(){return e(j)},get value(){return e(R)},set value(K){t(R,K,!0)}})}B(2),d(a,s)};E(it,a=>{e($)&&a(dt)})}n(ne);var De=o(ne,2),Ee=o(l(De),2),ce=l(Ee),F=o(l(ce),4),ct=l(F);{var vt=a=>{var s=Ot(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>C(u,e(b)?"Loading Neon projects...":"No Neon projects found")),d(a,s)},pt=a=>{var s=Pt(),u=G(s);$t(u,17,()=>e(I),j=>j.projectId,(j,K)=>{var U=Kt(),jt=l(U);n(U);var Te={};P(()=>{C(jt,`${e(K).projectName??""} (${e(K).orgName??""})`),Te!==(Te=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),d(j,U)}),d(a,s)};E(ct,a=>{e(I).length===0?a(vt):a(pt,!1)})}n(F);var ve=o(F,2),gt=l(ve);z(gt,{variant:"ghost",onclick:()=>_e(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=D("Refresh Projects");d(a,u)},$$slots:{default:!0}}),n(ve);var Se=o(ve,2);{var ut=a=>{var s=Tt(),u=l(s,!0);n(s),P(()=>C(u,e(M))),d(a,s)},mt=a=>{var s=zt();d(a,s)},ht=a=>{var s=Lt();d(a,s)};E(Se,a=>{e(M)?a(ut):!e(b)&&e(I).length===0?a(mt,1):e(b)||a(ht,2)})}var Ie=o(Se,2),ft=l(Ie);{let a=T(()=>!e(w)||!Ze()||e(S)!==null);z(ft,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("reuse"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),d(s,j)},$$slots:{default:!0}})}n(Ie),n(ce);var Be=o(ce,2),Oe=o(l(Be),2);{let a=T(()=>he(e(c)));L(Oe,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Ke=o(Oe,4),_t=l(Ke);{let a=T(()=>!e(w)||e(S)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("create"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="create"?"Creating Neon Project...":"Create New Neon Project")),d(s,j)},$$slots:{default:!0}})}n(Ke),n(Be),n(Ee),n(De),P(a=>{C(lt,a),F.disabled=e(b)||e(I).length===0},[W]),ue(F,()=>e(O),a=>t(O,a)),d(q,xe)};E(ot,q=>{e(h)==="postgres"&&q(st)})}ue(x,()=>e(h),q=>t(h,q)),d(r,v)},tt=r=>{var v=At(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var x=o(_,2);L(x,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var A=o(x,2);L(A,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),d(r,v)};E(Ye,r=>{e(m)==="single"?r(et):r(tt,!1)})}n(oe);var we=o(oe,2),Q=l(we),at=l(Q);z(at,{variant:"secondary",children:(r,v)=>{B();var _=D("Cancel");d(r,_)},$$slots:{default:!0}}),n(Q);var rt=o(Q,2);{let r=T(()=>!e(w));z(rt,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:He,children:(v,_)=>{B();var x=D("Create Database");d(v,x)},$$slots:{default:!0}})}n(we),n(k),P(()=>wt(Q,"href",`${me??""}/database/tables`)),ue(J,()=>e(m),r=>t(m,r)),d(i,k)}}),Nt(),Ue()}export{sa as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/
|
|
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/WtDa8jKW.js";import{b as p}from"../chunks/B-pVQkKM.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{f as m}from"../chunks/BdTBlfLy.js";import{c as n,a as p}from"../chunks/DEELgv7K.js";import{s as i}from"../chunks/XmteHKH_.js";function d(r,t){var o=n(),a=m(o);i(a,()=>t.children),p(r,o)}export{d as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{i as x}from"../chunks/
|
|
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/CoI6jjbg.js";import{s as S,a as B}from"../chunks/Cp8V0Xy2.js";import{b as i}from"../chunks/B-pVQkKM.js";import{d as y}from"../chunks/CF95mcQY.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/BvukSxhJ.js";export{m as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as Ae,g as U}from"../chunks/
|
|
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/MKsm6wXE.js";import{a as m,f,t as Q}from"../chunks/DEELgv7K.js";import{b as Fe,a as F}from"../chunks/CoI6jjbg.js";import{s as De,a as V}from"../chunks/Cp8V0Xy2.js";import{g as Le}from"../chunks/WtDa8jKW.js";import{b as W}from"../chunks/B-pVQkKM.js";import{p as qe}from"../chunks/D8o7yzcA.js";import{s as Y,n as ee}from"../chunks/v2HHbTgy.js";import{d as Be}from"../chunks/CF95mcQY.js";import{C as Ke,S as Pe,L as ae}from"../chunks/I0AZRbV2.js";import{B as te}from"../chunks/C72lTcG0.js";import{I as re}from"../chunks/_teD5ji5.js";var Oe=f('<div class="create-error svelte-10791bh"> </div>'),ze=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>'),Re=f("<option> </option>"),Xe=f("<option> </option>"),Ze=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 na(se,oe){Me(oe,!0);const le=()=>V(Be,"$devInfoStore",D),ie=()=>V(ee,"$namespaceNames",D),[D,ne]=De();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(qe).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}),Le(`${W}/database/tables/${encodeURIComponent(t)}`)}catch(s){r(d,s instanceof Error?s.message:"Failed to create table.",!0),J(a(d))}finally{r(x,!1)}}var A=Ze(),M=i(o(A),4),B=o(M);{var be=e=>{var t=Oe(),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=ze();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=Re(),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=Xe(),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(_));Ke(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)));Pe(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{na as component};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as y}from"../chunks/
|
|
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{a as q}from"../chunks/CoI6jjbg.js";import{P as x}from"../chunks/B8s_s9QY.js";import{g as N}from"../chunks/Q2nPFxS6.js";import{b as D,A as G}from"../chunks/DskOoVLT.js";function H(s){return s.replace(/<\/script/gi,"<\\/script")}function U(s,f,a){const n=H(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/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as He}from"../chunks/Bn2NtlTj.js";import{p as Oe,d as y,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 Fe,ag as xe}from"../chunks/BdTBlfLy.js";import{d as Ie,s as d,a as Ne}from"../chunks/DtZk82gG.js";import{i as z}from"../chunks/Y22E1hJM.js";import{a as Pe,t as ve,e as te,i as se}from"../chunks/MKsm6wXE.js";import{a as f,c as Be,t as je,f as _}from"../chunks/DEELgv7K.js";import{a as ae,b as Ce,s as ce}from"../chunks/CoI6jjbg.js";import{b as ye}from"../chunks/CYatlt7w.js";import{P as Je}from"../chunks/B8s_s9QY.js";import{f as Me}from"../chunks/Q2nPFxS6.js";import{B as Ae}from"../chunks/C72lTcG0.js";import{E as Ge}from"../chunks/m9eWh0Cd.js";var Re=_('<div class="fn-empty svelte-1gs6rhm">Loading...</div>'),Ke=_('<div class="fn-empty svelte-1gs6rhm">No functions registered</div>'),Ve=_('<span class="fn-method-badge svelte-1gs6rhm"> </span>'),ze=_('<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>'),Le=_("<option> </option>"),Ue=_('<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>'),Xe=_('<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>'),Qe=_('<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>'),We=_('<div class="fn-history svelte-1gs6rhm"><span class="fn-history__title svelte-1gs6rhm">Recent Executions</span> <!></div>'),Ye=_('<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),Ze=_('<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(be,Ee){Oe(Ee,!0);let P=y(he([])),de=y(!0),b=y(null),h=y("POST"),H=y("{}"),L=y(""),B=y(!1);const fe=`function-request-body-${Math.random().toString(36).slice(2,9)}`,me=`function-request-headers-${Math.random().toString(36).slice(2,9)}`;let c=y(null),U=y(he([]));He(async()=>{try{const m=await Pe.fetch("data/functions");n(P,m.functions??[],!0)}catch(m){ve(m instanceof Error?m.message:"Failed to load functions"),n(P,[],!0)}finally{n(de,!1)}});function Se(m){n(b,m,!0),n(h,m.methods[0]||"POST",!0),n(H,e(h)==="GET"?"":"{}",!0),n(c,null)}async function $e(){if(!e(b))return;n(B,!0),n(c,null);const m=Date.now();try{const j=`/api/functions/${e(b).path}`,E={"Content-Type":"application/json"};if(e(L).trim())for(const T of e(L).split(`
|
|
2
2
|
`)){const g=T.trim();if(!g)continue;const D=g.indexOf(":");if(D===-1){ve(`Invalid header format: "${g}". Use "Key: Value" format.`),n(B,!1);return}const Q=g.slice(0,D).trim(),re=g.slice(D+1).trim();Q&&(E[Q]=re)}const O={method:e(h),headers:E};if(e(h)!=="GET"&&e(h)!=="HEAD"&&e(H).trim()){try{JSON.parse(e(H))}catch{ve('Invalid JSON in request body. Example: {"key": "value"}'),n(B,!1);return}O.body=e(H)}const p=await fetch(j,O),C=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,g)=>{X[g]=T}),n(c,{status:p.status,statusText:p.statusText,body:J,time:C,headers:X},!0),n(U,[{fn:e(b).path,method:e(h),status:p.status,time:C,timestamp:new Date().toISOString()},...e(U).slice(0,19)],!0)}catch(j){const E=Date.now()-m;n(c,{status:0,statusText:"Network Error",body:j instanceof Error?j.message:"Request failed",time:E,headers:{}},!0)}finally{n(B,!1)}}Je(be,{title:"Functions",description:"Execute and test your App Functions",get docsHref(){return Me},children:(m,j)=>{var E=Ze(),O=s(E),p=s(O),C=r(s(p),2),J=s(C,!0);t(C),t(p);var ue=r(p,2);{var X=o=>{var x=Re();f(o,x)},T=o=>{var x=Ke();f(o,x)},g=o=>{var x=Be(),M=ge(x);te(M,17,()=>e(P),se,(A,S)=>{var q=ze();let F;var $=s(q),ne=s($);t($);var G=r($,2),W=s(G);te(W,17,()=>e(S).methods,se,(k,Z)=>{var K=Ve(),oe=s(K,!0);t(K),w(()=>d(oe,e(Z))),f(k,K)});var R=r(W,2),Y=s(R,!0);t(R),t(G),t(q),w(()=>{var k;F=ce(q,1,"fn-item svelte-1gs6rhm",null,F,{"fn-item--active":((k=e(b))==null?void 0:k.path)===e(S).path}),d(ne,`/${e(S).path??""}`),d(Y,e(S).type)}),Ne("click",q,()=>Se(e(S))),f(A,q)}),f(o,x)};z(ue,o=>{e(de)?o(X):e(P).length===0?o(T,1):o(g,!1)})}t(O);var D=r(O,2),Q=s(D);{var re=o=>{Ge(o,{title:"Select a function",description:"Choose a function from the list to execute it."})},ke=o=>{var x=Ye(),M=ge(x),A=s(M),S=s(A),q=s(S);t(S),t(A);var F=r(A,2),$=s(F);te($,21,()=>e(b).methods,se,(a,l)=>{var i=Le(),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);Ae(ne,{variant:"primary",size:"sm",onclick:$e,get loading(){return e(B)},children:(a,l)=>{Fe();var i=je("Execute");f(a,i)},$$slots:{default:!0}}),t(F);var G=r(F,2);{var W=a=>{var l=Ue(),i=s(l),u=r(i,2);xe(u),t(l),w(()=>{ae(i,"for",fe),ae(u,"id",fe)}),ye(u,()=>e(H),v=>n(H,v)),f(a,l)};z(G,a=>{e(h)!=="GET"&&e(h)!=="HEAD"&&a(W)})}var R=r(G,2),Y=s(R),k=r(Y,2);xe(k),t(R),t(M);var Z=r(M,2);{var K=a=>{var l=Xe(),i=s(l),u=s(i);let v;var V=s(u);t(u);var I=r(u,2),le=s(I);t(I),t(i);var N=r(i,2),ie=s(N,!0);t(N),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(V,`${e(c).status??""} ${e(c).statusText??""}`),d(le,`${e(c).time??""}ms`),d(ie,e(c).body)}),f(a,l)};z(Z,a=>{e(c)&&a(K)})}var oe=r(Z,2);{var we=a=>{var l=We(),i=r(s(l),2);te(i,17,()=>e(U),se,(u,v)=>{var V=Qe(),I=s(V),le=s(I,!0);t(I);var N=r(I,2),ie=s(N);t(N);var ee=r(N,2);let pe;var Te=s(ee,!0);t(ee);var _e=r(ee,2),qe=s(_e);t(_e),t(V),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(Te,e(v).status),d(qe,`${e(v).time??""}ms`)}),f(u,V)}),t(l),f(a,l)};z(oe,a=>{e(U).length>0&&a(we)})}w(()=>{d(q,`/api/functions/${e(b).path??""}`),ae(Y,"for",me),ae(k,"id",me)}),Ce($,()=>e(h),a=>n(h,a)),ye(k,()=>e(L),a=>n(L,a)),f(o,x)};z(Q,o=>{e(b)?o(ke,!1):o(re)})}t(D),t(E),w(()=>d(J,e(P).length)),f(m,E)}}),De()}Ie(["click"]);export{mt as component};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as Ee,w as Z,g as e,b as d,t as f,a as Le,d as b,u as z,c as s,s as v,r as o,f as ee,ae as H}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{p as Ee,w as Z,g as e,b as d,t as f,a as Le,d as b,u as z,c as s,s as v,r as o,f as ee,ae as H}from"../chunks/BdTBlfLy.js";import{s as g,e as Ie}from"../chunks/DtZk82gG.js";import{a as i,f as m,t as _}from"../chunks/DEELgv7K.js";import{i as p}from"../chunks/Y22E1hJM.js";import{a as Pe}from"../chunks/CoI6jjbg.js";import{a as te,s as Ae}from"../chunks/Cp8V0Xy2.js";import{g as ke}from"../chunks/WtDa8jKW.js";import{p as Be}from"../chunks/D8o7yzcA.js";import{b as De}from"../chunks/B-pVQkKM.js";import{a as K}from"../chunks/DskOoVLT.js";import{f as Re,g as Te}from"../chunks/9Ch6RgcX.js";import{B as ae}from"../chunks/C72lTcG0.js";import{I as re}from"../chunks/_teD5ji5.js";var je=m('<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),Me=m(`<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>`),Ue=m('<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>'),qe=m('<div class="login-error svelte-1x05zx6"><p class="login-error__msg svelte-1x05zx6"> </p> <!></div>'),Fe=m('<span class="login-hint svelte-1x05zx6">This will be your admin login password.</span>'),He=m('<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>'),Ke=m('<!> <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),Oe=m('<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 ot(se,oe){Ee(oe,!0);const O=()=>te(Be,"$page",W),le=()=>te(K,"$authStore",W),[W,ie]=Ae();let S=b(""),x=b(""),u=b(""),k=b(!1),r=b(null),h=b("");function ne(t){return t.hostname==="localhost"||t.hostname==="127.0.0.1"}const ve=z(()=>Te(O().url)),G=z(()=>ne(O().url)),de=z(()=>e(G)?"npx edgebase admin reset-password --local":"npx edgebase admin reset-password"),ce=z(()=>(e(u).toLowerCase().includes("invalid")||e(u).toLowerCase().includes("credentials"))&&e(r)===!1);Z(()=>{le().accessToken&&ke(e(ve),{replaceState:!0})}),Z(()=>{J()});async function J(){d(h,""),d(r,null);try{const t=await Re();d(r,t.needsSetup,!0)}catch{d(h,"Could not reach the admin server. Make sure the fresh dev server is still running, then retry.")}}async function ue(t){if(t.preventDefault(),e(r)===null){d(u,e(h)||"Setup status is still loading.",!0);return}if(!e(S)||!e(x)){d(u,"Email and password are required.");return}if(e(r)&&e(x).length<8){d(u,"Password must be at least 8 characters.");return}d(u,""),d(k,!0);try{e(r)?await K.setup(e(S),e(x)):await K.login(e(S),e(x))}catch(l){d(u,l instanceof Error?l.message:"Authentication failed.",!0)}finally{d(k,!1)}}var B=Oe(),N=s(B),D=s(N),Q=s(D),V=v(Q,4),pe=s(V);{var me=t=>{var l=_();f(()=>g(l,e(h)?"Admin server unavailable":"Loading...")),i(t,l)},fe=t=>{var l=_("Create your admin account");i(t,l)},ge=t=>{var l=_("Sign in to Admin Dashboard");i(t,l)};p(pe,t=>{e(r)===null?t(me):e(r)?t(fe,1):t(ge,!1)})}o(V),o(D);var _e=v(D,2);{var xe=t=>{var l=je(),w=ee(l),L=s(w),C=s(L,!0);o(L),H(2),o(w);var I=v(w,2);ae(I,{type:"button",variant:"secondary",onclick:()=>void J(),children:(R,P)=>{H();var $=_("Retry Connection");i(R,$)},$$slots:{default:!0}}),f(()=>g(C,e(h))),i(t,l)},he=t=>{var l=Ke(),w=ee(l);{var L=a=>{var n=Me();i(a,n)};p(w,a=>{e(r)&&a(L)})}var C=v(w,2),I=s(C);{var R=a=>{var n=qe(),c=s(n),M=s(c,!0);o(c);var A=v(c,2);{var U=E=>{var q=Ue();i(E,q)};p(A,E=>{e(ce)&&E(U)})}o(n),f(()=>g(M,e(u))),i(a,n)};p(I,a=>{e(u)&&a(R)})}var P=v(I,2),$=s(P),we=s($,!0);o($);var ye=v($,2);re(ye,{id:"email",type:"email",placeholder:"admin@example.com",autocomplete:"email",get value(){return e(S)},set value(a){d(S,a,!0)}}),o(P);var T=v(P,2),j=s(T),be=s(j,!0);o(j);var X=v(j,2);{let a=z(()=>e(r)?"Min 8 characters":"Enter your password"),n=z(()=>e(r)?"new-password":"current-password");re(X,{id:"password",type:"password",get placeholder(){return e(a)},get autocomplete(){return e(n)},get value(){return e(x)},set value(c){d(x,c,!0)}})}var ze=v(X,2);{var Se=a=>{var n=Fe();i(a,n)};p(ze,a=>{e(r)&&a(Se)})}o(T);var Y=v(T,2);ae(Y,{type:"submit",variant:"primary",get loading(){return e(k)},children:(a,n)=>{H();var c=_();f(()=>g(c,e(r)?"Create Admin Account":"Sign In")),i(a,c)},$$slots:{default:!0}});var Ce=v(Y,2);{var $e=a=>{var n=He(),c=v(s(n),2),M=s(c,!0);o(c);var A=v(c,2),U=s(A);{var E=y=>{var F=_("Run this in your project folder. `--local` updates the local D1 admin account used by the dev server.");i(y,F)},q=y=>{var F=_("Run this in your project folder. The CLI will use your configured Service Key or Cloudflare access for recovery.");i(y,F)};p(U,y=>{e(G)?y(E):y(q,!1)})}o(A),o(n),f(()=>g(M,e(de))),i(a,n)};p(Ce,a=>{e(r)||a($e)})}o(C),f(()=>{g(we,e(r)?"Admin Email":"Email"),g(be,e(r)?"Choose Password":"Password")}),Ie("submit",C,ue),i(t,l)};p(_e,t=>{e(h)?t(xe):e(r)!==null&&t(he,1)})}o(N),o(B),f(()=>Pe(Q,"src",`${De}/favicon.svg`)),i(se,B),Le(),ie()}export{ot as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as Ye}from"../chunks/
|
|
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/MKsm6wXE.js";import{t as Y,a as i,f as d}from"../chunks/DEELgv7K.js";import{s as Z}from"../chunks/CoI6jjbg.js";import{d as Ne}from"../chunks/wJsUhbfZ.js";import{g as st}from"../chunks/Ce-ngf4p.js";import{P as lt}from"../chunks/B8s_s9QY.js";import{a as ot}from"../chunks/Q2nPFxS6.js";import{B as ee}from"../chunks/C72lTcG0.js";import{I as Oe}from"../chunks/_teD5ji5.js";import{S as pe}from"../chunks/DTmaM1M6.js";import{E as nt}from"../chunks/m9eWh0Cd.js";import{S as fe}from"../chunks/CBVE2cdU.js";var it=d('<span class="log-counter log-counter--error svelte-1lsf4ps"> </span>'),vt=d("<!> <!>",1),ut=d('<span class="live-dot svelte-1lsf4ps"></span>'),ct=d('<div class="log-actions svelte-1lsf4ps"><div class="log-counters svelte-1lsf4ps"><span class="log-counter svelte-1lsf4ps"> </span> <!></div> <!> <button><!> </button></div>'),pt=d('<div class="log-skeleton__row svelte-1lsf4ps"><!> <!> <!></div>'),ft=d('<div class="log-skeleton svelte-1lsf4ps"></div>'),dt=d("<span> </span>"),gt=d('<span class="log-entry__service svelte-1lsf4ps"> </span>'),mt=d('<span class="log-entry__time svelte-1lsf4ps"> </span>'),_t=d('<pre class="log-entry__detail svelte-1lsf4ps"> </pre>'),ht=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>'),bt=d('<div class="pagination svelte-1lsf4ps"><!></div>'),St=d('<div class="log-list svelte-1lsf4ps"></div> <!>',1),xt=d('<div class="controls svelte-1lsf4ps"><div class="controls__fields svelte-1lsf4ps"><!> <!> <!> <!> <!></div> <div class="controls__actions svelte-1lsf4ps"><!></div></div> <!>',1);function jt(Pe,De){Ze(De,!0);let te=f(!0),g=f(ye([])),E=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"}],Ee=[{value:"all",label:"All Levels"},{value:"info",label:"Info"},{value:"warn",label:"Warning (3xx/4xx)"},{value:"error",label:"Error (5xx)"},{value:"debug",label:"Debug"}],Ve=[{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 V(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(E)&&(r+=`&cursor=${encodeURIComponent(e(E))}`);const s=await rt.fetch(r);t?l(g,[...e(g),...s.logs],!0):l(g,s.logs,!0),l(E,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(r instanceof Error?r.message:"Failed to load logs")}finally{l(te,!1),l(re,!1)}}function Ae(){l(E,null),V()}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)?(V(),l(P,setInterval(()=>{V()},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=me(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=me(t);return s>=500?"error":s>=400||s>=300?"warn":s>=200?"info":s>0?"debug":""}function me(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=st(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(()=>(V(),()=>{e(P)&&clearInterval(e(P))})),lt(Pe,{title:"Logs",description:"View request logs and analytics",get docsHref(){return ot},actions:r=>{var s=ct(),h=u(s),p=u(h),x=u(p);n(p);var L=o(p,2);{var H=m=>{var S=it(),a=u(S);n(S),O(()=>C(a,`${e(se)??""} server errors`)),i(m,S)};y(L,m=>{e(se)>0&&m(H)})}n(h);var A=o(h,2);{var T=m=>{var S=vt(),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(m,S)};y(A,m=>{e(g).length>0&&m(T)})}var D=o(A,2);let M;var K=u(D);{var le=m=>{var S=ut();i(m,S)};y(K,m=>{e(I)&&m(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=xt(),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 Ee},get value(){return e(F)},set value(a){l(F,a,!0)}});var A=o(H,2);pe(A,{label:"Service",get options(){return Ve},get value(){return e(J)},set value(a){l(J,a,!0)}});var T=o(A,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:Ae,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 $=ft();ke($,20,()=>Array(10),Ce,(b,Q)=>{var w=pt(),k=u(w);fe(k,{width:"60px",height:"20px"});var _=o(k,2);fe(_,{width:"120px",height:"14px"});var U=o(_,2);fe(U,{height:"14px"}),n(w),i(b,w)}),n($),i(a,$)},m=a=>{nt(a,{title:"No logs found",description:"No log entries match the current filter."})},S=a=>{var $=St(),b=ce($);ke(b,21,()=>e(g),Ce,(k,_,U)=>{const R=X(()=>ge(e(_))),ne=X(()=>Be(e(_))),W=X(()=>String(e(_).category??"")),ie=X(()=>e(q).has(U));var j=ht();let _e;var ve=u(j),he=u(ve);let be;var Se=o(he,2);{var He=v=>{var c=dt(),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=gt(),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=_t(),N=u(c,!0);n(c),O(ue=>C(N,ue),[()=>Fe(e(_))]),i(v,c)};y(We,v=>{e(ie)&&v(Ge)})}n(j),O(v=>{_e=Z(j,1,"log-entry svelte-1lsf4ps",null,_e,{"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(_))]),Le("click",j,()=>Me(U)),i(k,j)}),n(b);var Q=o(b,2);{var w=k=>{var _=bt(),U=u(_);ee(U,{variant:"secondary",get loading(){return e(re)},onclick:()=>V(!0),children:(R,ne)=>{G();var W=Y("Load More");i(R,W)},$$slots:{default:!0}}),n(_),i(k,_)};y(Q,k=>{e(E)&&!e(I)&&k(w)})}i(a,$)};y(le,a=>{e(te)?a(oe):e(g).length===0?a(m,1):a(S,!1)})}i(r,h)}}),et()}tt(["click"]);export{jt as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as Z}from"../chunks/
|
|
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/MKsm6wXE.js";import{c as oe,a as r,f as v,d as T}from"../chunks/DEELgv7K.js";import{s as ne,a as ie}from"../chunks/CoI6jjbg.js";import{P as ve}from"../chunks/B8s_s9QY.js";import{a as ce}from"../chunks/Q2nPFxS6.js";/* empty css */var pe=v('<span class="last-updated svelte-l9pwpf"> </span>'),de=v('<div class="refresh-controls svelte-l9pwpf"><!> <button type="button"><span class="auto-refresh-dot svelte-l9pwpf"></span> </button></div>'),he=v('<div class="loading-state svelte-l9pwpf">Loading monitoring data...</div>'),fe=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>'),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"><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>'),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"><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>'),_e=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>'),ge=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>'),me=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>'),be=v('<div class="channel-empty svelte-l9pwpf">No active channel subscriptions.</div>'),ke=v('<div class="stat-grid svelte-l9pwpf"></div> <!>',1),ye=v('<div class="loading-state svelte-l9pwpf">No monitoring data available.</div>');function Ee(J,K){$(K,!0);let V=B(!0),h=B(null),H=B(""),f=B(!0);async function q(){try{const p=await le.fetch("data/monitoring");j(h,p,!0),j(H,new Date().toLocaleTimeString(),!0)}catch(p){re(p instanceof Error?p.message:"Failed to load monitoring data")}finally{j(V,!1)}}function O(){j(f,!e(f))}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 p=setInterval(()=>{e(f)&&q()},5e3);return()=>{clearInterval(p)}}),ve(J,{title:"Live Monitoring",description:"Active connections and channels",get docsHref(){return ce},actions:I=>{var D=de(),m=a(D);{var N=s=>{var n=pe(),b=a(n);t(n),R(()=>g(b,`Updated ${e(H)??""}`)),r(s,n)};E(m,s=>{e(H)&&s(N)})}var d=c(m,2);let L;var U=c(a(d));t(d),t(D),R(()=>{L=ne(d,1,"auto-refresh-toggle svelte-l9pwpf",null,L,{"auto-refresh-toggle--active":e(f)}),ie(d,"title",e(f)?"Pause auto-refresh":"Resume auto-refresh"),g(U,` ${e(f)?"Live":"Paused"}`)}),se("click",d,O),r(I,D)},children:(I,D)=>{var m=oe(),N=z(m);{var d=s=>{var n=he();r(s,n)},L=s=>{var n=ke(),b=z(n);G(b,21,()=>Q,i=>i.key,(i,o)=>{const k=te(()=>e(h)[e(o).key]);var u=_e(),w=a(u),y=a(w);{var P=l=>{var A=fe();r(l,A)},x=l=>{var A=ue();r(l,A)},C=l=>{var A=we();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=me(),k=c(a(o),2),u=a(k),w=c(a(u));G(w,21,()=>e(h).channelDetails,y=>y.channel,(y,P)=>{var x=ge(),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=be();r(i,o)};E(W,i=>{e(h).channelDetails&&e(h).channelDetails.length>0?i(X):i(Y,!1)})}r(s,n)},U=s=>{var n=ye();r(s,n)};E(N,s=>{e(V)?s(d):e(h)?s(L,1):s(U,!1)})}r(I,m)}}),ee()}ae(["click"]);export{Ee as component};
|