@edge-base/server 0.1.2 → 0.1.4
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/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/{Br0qug7_.js → 6a5nHrK1.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DYDZ2Kma.js → B-bKFoyc.js} +1 -1
- 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/{ehbppgYb.js → Bb0e0sAP.js} +1 -1
- package/admin-build/_app/immutable/chunks/{glwixJlP.js → BdTBlfLy.js} +1 -1
- package/admin-build/_app/immutable/chunks/{p-WBlAu3.js → BebaNaL1.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CLHXYVje.js → Bed8WcZp.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DoPXzH7F.js → Bn2NtlTj.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Ga6XaOJm.js → Bwq290TU.js} +1 -1
- 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/CGgVJi7f.js +1 -0
- package/admin-build/_app/immutable/chunks/{NuUjtcO2.js → CYatlt7w.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C0LrJucL.js → CfT4rpr6.js} +1 -1
- package/admin-build/_app/immutable/chunks/ChX-qyfY.js +2 -0
- 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/{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/{BhjcOf7X.js → DMIs26Al.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BOjkBtym.js → DSsNi9zA.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BMMOfNi6.js → DYRfe1lC.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/{BF8I5XXQ.js → DuldBlfT.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C4D51vTW.js → F9_4wRrd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CY1F93Wv.js → FA-xxanK.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DOxNYcs9.js → Fw9oK_yh.js} +1 -1
- 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/{CB8xN3_t.js → eLBKp9m8.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/mVKEd0n6.js +128 -0
- package/admin-build/_app/immutable/chunks/{BK8YUsyH.js → mmI0365x.js} +1 -1
- package/admin-build/_app/immutable/entry/app.B0Wfop7v.js +2 -0
- package/admin-build/_app/immutable/entry/start.C1a0bzUm.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.B13aXl3s.js → 0.DXd3Dmjw.js} +1 -1
- package/admin-build/_app/immutable/nodes/{1.we4dgVtx.js → 1.DYs0DOEf.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.hrAvOhgI.js → 10.C5zdvzz2.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.BZM_Cbjk.js → 11.CZn94rTD.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.pfrTdfHj.js → 12.zeHwsLsn.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.BvR9UoZX.js → 13.nkWGiViq.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.BCE_g1DT.js → 14.C0cOviHd.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.DZrUjo5V.js → 15.q5eTZ0ns.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.B_K_CGU4.js → 16.BrpfTEYF.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.D7RlNUbd.js → 17.3p6MQums.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.dw9OGxA1.js → 18.aj9cF39Y.js} +1 -1
- package/admin-build/_app/immutable/nodes/{19.B_K_CGU4.js → 19.BrpfTEYF.js} +1 -1
- package/admin-build/_app/immutable/nodes/2.Bn3R2oDm.js +1 -0
- package/admin-build/_app/immutable/nodes/{20.Bij6g6xR.js → 20.BUEsrK6V.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.Bch9bUk6.js +1 -0
- package/admin-build/_app/immutable/nodes/{22.wLPyRbDg.js → 22.V2clGNAS.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.DnjIdPPl.js → 23.3XSLKKOr.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.PhJEmwPf.js → 24.F-qrYmNi.js} +1 -1
- package/admin-build/_app/immutable/nodes/{25.HUYuEeiI.js → 25.BdrY4DyK.js} +1 -1
- package/admin-build/_app/immutable/nodes/{26.CtrQ3jI5.js → 26.D0WXHf08.js} +1 -1
- package/admin-build/_app/immutable/nodes/{27.CMM8T90I.js → 27.DvWhuH9-.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.CH6XAnHt.js → 28.5Oz_jlro.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.Bos0u5_B.js → 29.dDyAUaup.js} +1 -1
- package/admin-build/_app/immutable/nodes/{3.BPnU2jxx.js → 3.BcXkDIYV.js} +1 -1
- package/admin-build/_app/immutable/nodes/{30.ScIH1W0H.js → 30.2JCWdjTn.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.CXHVAiwb.js → 31.qG9kkJ9Q.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.BY6Ri1gh.js → 4.Cl5grO75.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.D0tPp_Kt.js → 5.Bel35v4W.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.BuWVNVH1.js → 6.CjpfkMIg.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.B26-qam0.js → 7.CA1OBWip.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.CdDKHsMK.js → 8.DS5xal_X.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.BSo7a28L.js → 9.OYw1MaR9.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 +3 -3
- package/src/__tests__/rate-limit.test.ts +4 -3
- package/src/__tests__/websocket-pending.test.ts +4 -4
- package/src/durable-objects/database-do.ts +8 -3
- package/src/lib/do-router.ts +8 -0
- package/src/lib/functions.ts +23 -1
- package/src/middleware/auth.ts +9 -0
- package/src/middleware/rate-limit.ts +25 -3
- package/src/routes/database-live.ts +1 -1
- package/src/routes/functions.ts +9 -1
- package/src/routes/vectorize.ts +4 -4
- package/admin-build/_app/immutable/assets/21.Dz2RJ56c.css +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.BcgNsUX3.js +0 -2
- package/admin-build/_app/immutable/entry/start.otAJzcqZ.js +0 -1
- package/admin-build/_app/immutable/nodes/2.BKoKrw1i.js +0 -1
- package/admin-build/_app/immutable/nodes/21.DyYxtUDl.js +0 -128
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as U}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as U}from"../chunks/Bn2NtlTj.js";import{p as j,a as z,f as G,c as b,g as t,s as m,r as g,u as n,b as y,d as D,t as J}from"../chunks/BdTBlfLy.js";import{d as K,s as N,a as O}from"../chunks/DtZk82gG.js";import{a as Q,t as V,e as W,i as X}from"../chunks/DYRfe1lC.js";import{a as F,f as I}from"../chunks/DEELgv7K.js";import{s as Y}from"../chunks/CoI6jjbg.js";import{P as Z}from"../chunks/B8s_s9QY.js";import{a as tt}from"../chunks/Q2nPFxS6.js";import{M as _,T as et}from"../chunks/Bed8WcZp.js";import{D as at,T as rt}from"../chunks/B-bKFoyc.js";var nt=I("<button> </button>"),st=I('<div class="range-selector"></div>'),ot=I('<div class="analytics-grid"><!> <!> <!> <!></div> <div class="analytics-chart"><!></div> <div class="analytics-bottom"><!> <!></div>',1);function bt(w,M){j(M,!0);let s=D(!0),o=D(null),p=D("24h");const T=[{value:"1h",label:"1H"},{value:"6h",label:"6H"},{value:"24h",label:"24H"},{value:"7d",label:"7D"},{value:"30d",label:"30D"}],k=n(()=>()=>{switch(t(p)){case"1h":return"minute";case"6h":case"24h":return"hour";default:return"day"}});async function $(){try{const e=await Q.fetch(`data/analytics?range=${t(p)}&category=function&metric=overview&groupBy=${t(k)()}`);y(o,e,!0)}catch(e){V(e instanceof Error?e.message:"Failed to load functions analytics")}finally{y(s,!1)}}function A(e){y(p,e,!0),y(s,!0),$()}U(()=>{$();const e=setInterval($,3e4);return()=>clearInterval(e)});const H=n(()=>()=>{var c;if(!((c=t(o))!=null&&c.summary))return 0;const{totalRequests:e,totalErrors:a}=t(o).summary;return e>0?a/e*100:0}),B=n(()=>()=>{var e;return(((e=t(o))==null?void 0:e.timeSeries)||[]).map(a=>({timestamp:a.timestamp,value:a.requests??a.value??0}))}),C=n(()=>()=>{var e;return(((e=t(o))==null?void 0:e.breakdown)||[]).map(a=>({label:a.label||"other",value:a.count}))}),E=n(()=>()=>{var e;return(((e=t(o))==null?void 0:e.topItems)||[]).map(a=>({label:a.label,count:a.count,secondary:`${Math.round(a.avgLatency)}ms · ${a.errorRate.toFixed(1)}% 5xx`}))});Z(w,{title:"Functions Analytics",description:"Serverless function execution and performance metrics",get docsHref(){return tt},actions:a=>{var c=st();W(c,21,()=>T,X,(f,d)=>{var l=nt();let v;var h=b(l,!0);g(l),J(()=>{v=Y(l,1,"range-btn",null,v,{"range-btn--active":t(p)===t(d).value}),N(h,t(d).label)}),O("click",l,()=>A(t(d).value)),F(f,l)}),g(c),F(a,c)},children:(a,c)=>{var f=ot(),d=G(f),l=b(d);{let r=n(()=>{var i,u;return((u=(i=t(o))==null?void 0:i.summary)==null?void 0:u.totalRequests)??0});_(l,{label:"Invocations",get value(){return t(r)},get loading(){return t(s)}})}var v=m(l,2);{let r=n(()=>{var i,u;return((u=(i=t(o))==null?void 0:i.summary)==null?void 0:u.uniqueUsers)??0});_(v,{label:"Unique Users",get value(){return t(r)},get loading(){return t(s)}})}var h=m(v,2);{let r=n(()=>t(H)().toFixed(1));_(h,{label:"5xx Rate",get value(){return t(r)},unit:"%",get loading(){return t(s)}})}var L=m(h,2);{let r=n(()=>{var i,u;return Math.round(((u=(i=t(o))==null?void 0:i.summary)==null?void 0:u.avgLatency)??0)});_(L,{label:"Avg Duration",get value(){return t(r)},unit:"ms",get loading(){return t(s)}})}g(d);var x=m(d,2),P=b(x);{let r=n(()=>t(B)());et(P,{get data(){return t(r)},type:"bar",height:240,label:"Function invocations over time",get loading(){return t(s)},color:"#dc2626"})}g(x);var R=m(x,2),q=b(R);{let r=n(()=>t(C)());at(q,{get items(){return t(r)},title:"Functions by invocation count",get loading(){return t(s)}})}var S=m(q,2);{let r=n(()=>t(E)());rt(S,{get items(){return t(r)},title:"Top Functions",get loading(){return t(s)}})}g(R),F(a,f)}}),z()}K(["click"]);export{bt as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"
|
|
1
|
+
{"version":"1773964688040"}
|
package/admin-build/favicon.svg
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="EdgeBase Icon">
|
|
2
2
|
<defs>
|
|
3
3
|
<linearGradient id="fTopL" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
4
|
<stop offset="0%" stop-color="#60a5fa" />
|
|
@@ -17,10 +17,11 @@
|
|
|
17
17
|
<stop offset="100%" stop-color="#db2777" />
|
|
18
18
|
</linearGradient>
|
|
19
19
|
</defs>
|
|
20
|
-
<rect x="4" y="4" width="120" height="120" rx="28" fill="#0f172a" />
|
|
21
20
|
<polygon points="64,24 104,44 64,64" fill="url(#fTopR)" />
|
|
22
21
|
<polygon points="64,24 24,44 64,64" fill="url(#fTopL)" />
|
|
23
22
|
<polygon points="24,44 64,64 64,104 24,84" fill="url(#fLeft)" />
|
|
24
23
|
<polygon points="104,44 64,64 64,104 104,84" fill="url(#fRight)" />
|
|
25
24
|
<polygon points="64,24 84,34 64,38" fill="white" opacity="0.2" />
|
|
25
|
+
<polyline points="24,44 64,24 104,44" fill="none" stroke="#93c5fd" stroke-width="0.8" opacity="0.3" />
|
|
26
|
+
<line x1="64" y1="24" x2="64" y2="64" stroke="white" stroke-width="0.6" opacity="0.15" />
|
|
26
27
|
</svg>
|
package/admin-build/index.html
CHANGED
|
@@ -5,27 +5,28 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>EdgeBase Admin</title>
|
|
7
7
|
<link rel="icon" href="/admin/favicon.svg" type="image/svg+xml" />
|
|
8
|
-
<link href="/admin/_app/immutable/entry/start.
|
|
9
|
-
<link href="/admin/_app/immutable/chunks/
|
|
10
|
-
<link href="/admin/_app/immutable/chunks/
|
|
11
|
-
<link href="/admin/_app/immutable/chunks/
|
|
12
|
-
<link href="/admin/_app/immutable/chunks/
|
|
13
|
-
<link href="/admin/_app/immutable/entry/app.
|
|
14
|
-
<link href="/admin/_app/immutable/chunks/
|
|
15
|
-
<link href="/admin/_app/immutable/chunks/
|
|
8
|
+
<link href="/admin/_app/immutable/entry/start.C1a0bzUm.js" rel="modulepreload">
|
|
9
|
+
<link href="/admin/_app/immutable/chunks/eLBKp9m8.js" rel="modulepreload">
|
|
10
|
+
<link href="/admin/_app/immutable/chunks/BdTBlfLy.js" rel="modulepreload">
|
|
11
|
+
<link href="/admin/_app/immutable/chunks/Bn2NtlTj.js" rel="modulepreload">
|
|
12
|
+
<link href="/admin/_app/immutable/chunks/DSsNi9zA.js" rel="modulepreload">
|
|
13
|
+
<link href="/admin/_app/immutable/entry/app.B0Wfop7v.js" rel="modulepreload">
|
|
14
|
+
<link href="/admin/_app/immutable/chunks/B2bEC_Hm.js" rel="modulepreload">
|
|
15
|
+
<link href="/admin/_app/immutable/chunks/Bb0e0sAP.js" rel="modulepreload">
|
|
16
|
+
<link href="/admin/_app/immutable/chunks/DtZk82gG.js" rel="modulepreload">
|
|
17
|
+
<link href="/admin/_app/immutable/chunks/DEELgv7K.js" rel="modulepreload">
|
|
16
18
|
<link href="/admin/_app/immutable/chunks/CWj6FrbW.js" rel="modulepreload">
|
|
17
|
-
<link href="/admin/_app/immutable/chunks/
|
|
18
|
-
<link href="/admin/_app/immutable/chunks/
|
|
19
|
-
<link href="/admin/_app/immutable/chunks/
|
|
20
|
-
<link href="/admin/_app/immutable/chunks/
|
|
21
|
-
<link href="/admin/_app/immutable/chunks/B8vJP3wz.js" rel="modulepreload">
|
|
19
|
+
<link href="/admin/_app/immutable/chunks/Y22E1hJM.js" rel="modulepreload">
|
|
20
|
+
<link href="/admin/_app/immutable/chunks/CGgVJi7f.js" rel="modulepreload">
|
|
21
|
+
<link href="/admin/_app/immutable/chunks/F9_4wRrd.js" rel="modulepreload">
|
|
22
|
+
<link href="/admin/_app/immutable/chunks/Cp8V0Xy2.js" rel="modulepreload">
|
|
22
23
|
|
|
23
24
|
</head>
|
|
24
25
|
<body data-sveltekit-preload-data="hover">
|
|
25
26
|
<div style="display: contents">
|
|
26
27
|
<script>
|
|
27
28
|
{
|
|
28
|
-
|
|
29
|
+
__sveltekit_v590bi = {
|
|
29
30
|
base: "/admin",
|
|
30
31
|
assets: "/admin"
|
|
31
32
|
};
|
|
@@ -33,8 +34,8 @@
|
|
|
33
34
|
const element = document.currentScript.parentElement;
|
|
34
35
|
|
|
35
36
|
Promise.all([
|
|
36
|
-
import("/admin/_app/immutable/entry/start.
|
|
37
|
-
import("/admin/_app/immutable/entry/app.
|
|
37
|
+
import("/admin/_app/immutable/entry/start.C1a0bzUm.js"),
|
|
38
|
+
import("/admin/_app/immutable/entry/app.B0Wfop7v.js")
|
|
38
39
|
]).then(([kit, app]) => {
|
|
39
40
|
kit.start(app, element);
|
|
40
41
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edge-base/server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "EdgeBase runtime assets consumed by the EdgeBase CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"url": "https://github.com/edge-base/edgebase.git",
|
|
9
9
|
"directory": "packages/server"
|
|
10
10
|
},
|
|
11
|
-
"homepage": "https://edgebase
|
|
11
|
+
"homepage": "https://github.com/edge-base/edgebase/tree/main/packages/server",
|
|
12
12
|
"bugs": "https://github.com/edge-base/edgebase/issues",
|
|
13
13
|
"keywords": [
|
|
14
14
|
"edgebase",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"jose": "^6.0.0",
|
|
35
35
|
"pg": "^8.16.3",
|
|
36
36
|
"zod": "^4.3.6",
|
|
37
|
-
"@edge-base/shared": "0.1.
|
|
37
|
+
"@edge-base/shared": "0.1.4"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@cloudflare/vitest-pool-workers": "^0.8.71",
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
parseWindow,
|
|
13
13
|
FixedWindowCounter,
|
|
14
14
|
RATE_LIMIT_DEFAULTS,
|
|
15
|
+
RATE_LIMIT_DEV_DEFAULTS,
|
|
15
16
|
rateLimitMiddleware,
|
|
16
17
|
} from '../middleware/rate-limit.js';
|
|
17
18
|
import type { EdgeBaseConfig } from '@edge-base/shared';
|
|
@@ -44,13 +45,13 @@ describe('parseWindow', () => {
|
|
|
44
45
|
describe('getLimit', () => {
|
|
45
46
|
it('returns defaults when config is undefined', () => {
|
|
46
47
|
const result = getLimit(undefined, 'db');
|
|
47
|
-
expect(result).toEqual(
|
|
48
|
+
expect(result).toEqual(RATE_LIMIT_DEV_DEFAULTS['db']);
|
|
48
49
|
});
|
|
49
50
|
|
|
50
51
|
it('returns defaults when rateLimiting is not set', () => {
|
|
51
52
|
const config = {} as EdgeBaseConfig;
|
|
52
53
|
const result = getLimit(config, 'db');
|
|
53
|
-
expect(result).toEqual(
|
|
54
|
+
expect(result).toEqual(RATE_LIMIT_DEV_DEFAULTS['db']);
|
|
54
55
|
});
|
|
55
56
|
|
|
56
57
|
it('returns defaults for unknown group', () => {
|
|
@@ -84,7 +85,7 @@ describe('getLimit', () => {
|
|
|
84
85
|
db: undefined,
|
|
85
86
|
},
|
|
86
87
|
} as EdgeBaseConfig;
|
|
87
|
-
expect(getLimit(config, 'db')).toEqual(
|
|
88
|
+
expect(getLimit(config, 'db')).toEqual(RATE_LIMIT_DEV_DEFAULTS['db']);
|
|
88
89
|
});
|
|
89
90
|
});
|
|
90
91
|
|
|
@@ -146,9 +146,9 @@ describe('websocket pending helper functions', () => {
|
|
|
146
146
|
it('acquires slots until the max pending threshold is reached', async () => {
|
|
147
147
|
const kv = createMockKV();
|
|
148
148
|
|
|
149
|
-
await expect(acquirePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 2,
|
|
150
|
-
await expect(acquirePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 2,
|
|
151
|
-
await expect(acquirePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 2,
|
|
149
|
+
await expect(acquirePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 2, 60)).resolves.toBe(true);
|
|
150
|
+
await expect(acquirePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 2, 60)).resolves.toBe(true);
|
|
151
|
+
await expect(acquirePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 2, 60)).resolves.toBe(false);
|
|
152
152
|
expect(kv._store.data['ws:pending:127.0.0.1']?.value).toBe('2');
|
|
153
153
|
});
|
|
154
154
|
|
|
@@ -156,7 +156,7 @@ describe('websocket pending helper functions', () => {
|
|
|
156
156
|
const kv = createMockKV();
|
|
157
157
|
kv._store.data['ws:pending:127.0.0.1'] = { value: '1' };
|
|
158
158
|
|
|
159
|
-
await releasePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1',
|
|
159
|
+
await releasePendingWebSocketSlot(kv, 'ws:pending:127.0.0.1', 60);
|
|
160
160
|
|
|
161
161
|
expect(kv._store.data['ws:pending:127.0.0.1']).toBeUndefined();
|
|
162
162
|
});
|
|
@@ -2136,14 +2136,19 @@ export class DatabaseDO extends DurableObject<DOEnv> {
|
|
|
2136
2136
|
return null;
|
|
2137
2137
|
}
|
|
2138
2138
|
|
|
2139
|
-
/** Ensure a table exists in this DO
|
|
2139
|
+
/** Ensure a table exists in this DO, lazily creating it from config if needed. */
|
|
2140
2140
|
private ensureTableExists(name: string): void {
|
|
2141
|
-
// We rely on the schema init having already created the table
|
|
2142
2141
|
const tables = [
|
|
2143
2142
|
...this.sql(`SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?`, name),
|
|
2144
2143
|
];
|
|
2145
2144
|
if (tables.length === 0) {
|
|
2146
|
-
|
|
2145
|
+
// Table doesn't exist yet — try to create it lazily from config
|
|
2146
|
+
const config = this.getTableConfig(name);
|
|
2147
|
+
if (config) {
|
|
2148
|
+
this.initTable(name, config);
|
|
2149
|
+
} else {
|
|
2150
|
+
throw notFoundError(`Table "${name}" not found in this DO.`);
|
|
2151
|
+
}
|
|
2147
2152
|
}
|
|
2148
2153
|
}
|
|
2149
2154
|
|
package/src/lib/do-router.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* Constraint: `id` must NOT contain `:` character.
|
|
10
10
|
*/
|
|
11
11
|
import { materializeConfig, type EdgeBaseConfig } from '@edge-base/shared';
|
|
12
|
+
import { counter } from '../middleware/rate-limit.js';
|
|
12
13
|
|
|
13
14
|
const RUNTIME_CONFIG_GLOBAL_KEY = '__EDGEBASE_RUNTIME_CONFIG__';
|
|
14
15
|
|
|
@@ -145,11 +146,18 @@ function readGlobalRuntimeConfig(): EdgeBaseConfig | null {
|
|
|
145
146
|
*/
|
|
146
147
|
export function setConfig(config: EdgeBaseConfig): void {
|
|
147
148
|
const normalized = materializeConfig(config);
|
|
149
|
+
const configChanged = _runtimeConfig !== null;
|
|
148
150
|
_runtimeConfig = normalized;
|
|
149
151
|
|
|
150
152
|
if (typeof globalThis === 'object' && globalThis !== null) {
|
|
151
153
|
(globalThis as Record<string, unknown>)[RUNTIME_CONFIG_GLOBAL_KEY] = normalized;
|
|
152
154
|
}
|
|
155
|
+
|
|
156
|
+
// Reset rate limit counters when config changes (e.g. hot-reload in dev)
|
|
157
|
+
// to avoid stale counters blocking requests under new limits.
|
|
158
|
+
if (configChanged) {
|
|
159
|
+
counter.reset();
|
|
160
|
+
}
|
|
153
161
|
}
|
|
154
162
|
|
|
155
163
|
/**
|
package/src/lib/functions.ts
CHANGED
|
@@ -285,6 +285,17 @@ export interface FunctionVectorizeProxy {
|
|
|
285
285
|
export interface FunctionContext {
|
|
286
286
|
request: Request;
|
|
287
287
|
auth: AuthContext | null;
|
|
288
|
+
/**
|
|
289
|
+
* Convenience shortcut to `admin.db()`.
|
|
290
|
+
* Access database tables directly without going through `admin`.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* // Static DB
|
|
294
|
+
* await context.db('shared').table('posts').list()
|
|
295
|
+
* // Dynamic DB
|
|
296
|
+
* await context.db('workspace', 'ws-456').table('documents').list()
|
|
297
|
+
*/
|
|
298
|
+
db: FunctionAdminContext['db'];
|
|
288
299
|
/**
|
|
289
300
|
* Server-side EdgeBase admin client (§5,).
|
|
290
301
|
* Use context.admin.db(namespace, id?).table(name) for all DB access.
|
|
@@ -353,6 +364,16 @@ function getRegistryName(key: string, def: FunctionDefinition): string {
|
|
|
353
364
|
}
|
|
354
365
|
|
|
355
366
|
export function registerFunction(name: string, def: FunctionDefinition): void {
|
|
367
|
+
if (!def || typeof def !== 'object' || !def.trigger) {
|
|
368
|
+
const received = typeof def === 'function'
|
|
369
|
+
? 'a plain function'
|
|
370
|
+
: `${typeof def} (${JSON.stringify(def)?.slice(0, 100)})`;
|
|
371
|
+
throw new Error(
|
|
372
|
+
`registerFunction('${name}'): expected a FunctionDefinition with a 'trigger' property, but received ${received}. ` +
|
|
373
|
+
`Functions must use defineFunction() from '@edge-base/shared' and be exported as named HTTP method exports ` +
|
|
374
|
+
`(e.g. export const GET = defineFunction(...)). See https://docs.edgebase.dev/functions for details.`,
|
|
375
|
+
);
|
|
376
|
+
}
|
|
356
377
|
functionRegistry.set(buildRegistryKey(name, def), def);
|
|
357
378
|
}
|
|
358
379
|
|
|
@@ -655,7 +676,7 @@ export function wrapMethodExport(
|
|
|
655
676
|
if (typeof handler === 'function') {
|
|
656
677
|
fn = handler;
|
|
657
678
|
} else if (handler && typeof handler === 'object') {
|
|
658
|
-
fn = handler.handler ??
|
|
679
|
+
fn = (handler.handler ?? handler) as unknown as (ctx: unknown) => Promise<unknown>;
|
|
659
680
|
captcha = handler.captcha;
|
|
660
681
|
if ('trigger' in handler && handler.trigger && typeof handler.trigger === 'object' && 'path' in handler.trigger) {
|
|
661
682
|
const triggerPath = handler.trigger.path;
|
|
@@ -1409,6 +1430,7 @@ export function buildFunctionContext(options: BuildFunctionContextOptions): Func
|
|
|
1409
1430
|
const ctx: FunctionContext = {
|
|
1410
1431
|
request: options.request,
|
|
1411
1432
|
auth: options.auth,
|
|
1433
|
+
db: admin.db,
|
|
1412
1434
|
admin,
|
|
1413
1435
|
params: options.params ?? {},
|
|
1414
1436
|
};
|
package/src/middleware/auth.ts
CHANGED
|
@@ -149,6 +149,15 @@ export async function authMiddleware(c: Context<{ Bindings: Env }>, next: Next):
|
|
|
149
149
|
c.set('auth', auth);
|
|
150
150
|
return next();
|
|
151
151
|
} catch (err) {
|
|
152
|
+
// In non-release (dev) mode, treat invalid/expired tokens as anonymous
|
|
153
|
+
// instead of hard-rejecting. This prevents stale tokens from blocking
|
|
154
|
+
// the demo/dev experience while still validating in production.
|
|
155
|
+
const config = parseConfig(c.env);
|
|
156
|
+
if (!config.release) {
|
|
157
|
+
c.set('auth', null);
|
|
158
|
+
return next();
|
|
159
|
+
}
|
|
160
|
+
|
|
152
161
|
if (err instanceof TokenExpiredError) {
|
|
153
162
|
return c.json(
|
|
154
163
|
{ code: 401, message: 'Token expired.', error: 'TOKEN_EXPIRED' },
|
|
@@ -41,7 +41,7 @@ type HonoEnv = { Bindings: Env };
|
|
|
41
41
|
|
|
42
42
|
export const RATE_LIMIT_DEFAULTS: Record<string, { requests: number; windowSec: number }> = {
|
|
43
43
|
global: { requests: 10_000_000, windowSec: 60 },
|
|
44
|
-
db:
|
|
44
|
+
db: { requests: 100, windowSec: 60 },
|
|
45
45
|
storage: { requests: 50, windowSec: 60 },
|
|
46
46
|
functions: { requests: 50, windowSec: 60 },
|
|
47
47
|
auth: { requests: 30, windowSec: 60 },
|
|
@@ -50,6 +50,19 @@ export const RATE_LIMIT_DEFAULTS: Record<string, { requests: number; windowSec:
|
|
|
50
50
|
events: { requests: 100, windowSec: 60 },
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
+
// Dev mode defaults: 10x higher to accommodate React strict mode double-rendering,
|
|
54
|
+
// hot-reload page refreshes, and onSnapshot polling during development.
|
|
55
|
+
export const RATE_LIMIT_DEV_DEFAULTS: Record<string, { requests: number; windowSec: number }> = {
|
|
56
|
+
global: { requests: 10_000_000, windowSec: 60 },
|
|
57
|
+
db: { requests: 1000, windowSec: 60 },
|
|
58
|
+
storage: { requests: 500, windowSec: 60 },
|
|
59
|
+
functions: { requests: 500, windowSec: 60 },
|
|
60
|
+
auth: { requests: 300, windowSec: 60 },
|
|
61
|
+
authSignin: { requests: 100, windowSec: 60 },
|
|
62
|
+
authSignup: { requests: 100, windowSec: 60 },
|
|
63
|
+
events: { requests: 1000, windowSec: 60 },
|
|
64
|
+
};
|
|
65
|
+
|
|
53
66
|
// ─── Window parser ───
|
|
54
67
|
|
|
55
68
|
/** Parse window string ('60s', '5m', '1h') or number (seconds) to seconds */
|
|
@@ -124,6 +137,11 @@ export class FixedWindowCounter {
|
|
|
124
137
|
return Math.max(1, Math.ceil((bucket.resetAt - Date.now()) / 1000));
|
|
125
138
|
}
|
|
126
139
|
|
|
140
|
+
/** Clear all buckets. Called when config changes to avoid stale limits blocking requests. */
|
|
141
|
+
reset(): void {
|
|
142
|
+
this.buckets.clear();
|
|
143
|
+
}
|
|
144
|
+
|
|
127
145
|
private maybeCleanup(now: number): void {
|
|
128
146
|
if (now - this.lastCleanup < FixedWindowCounter.CLEANUP_INTERVAL) return;
|
|
129
147
|
this.lastCleanup = now;
|
|
@@ -139,7 +157,9 @@ export const counter = new FixedWindowCounter();
|
|
|
139
157
|
|
|
140
158
|
// ─── Helpers ───
|
|
141
159
|
|
|
142
|
-
/** Get config-based limit for a group, with fallback to defaults
|
|
160
|
+
/** Get config-based limit for a group, with fallback to defaults.
|
|
161
|
+
* In dev mode (release !== true), uses relaxed defaults to avoid
|
|
162
|
+
* rate limiting during development with hot-reload and strict mode. */
|
|
143
163
|
export function getLimit(
|
|
144
164
|
config: EdgeBaseConfig | undefined,
|
|
145
165
|
group: string,
|
|
@@ -154,7 +174,9 @@ export function getLimit(
|
|
|
154
174
|
};
|
|
155
175
|
}
|
|
156
176
|
}
|
|
157
|
-
|
|
177
|
+
const isDevMode = config?.release !== true;
|
|
178
|
+
const defaults = isDevMode ? RATE_LIMIT_DEV_DEFAULTS : RATE_LIMIT_DEFAULTS;
|
|
179
|
+
return defaults[group] ?? { requests: 10_000_000, windowSec: 60 };
|
|
158
180
|
}
|
|
159
181
|
|
|
160
182
|
/** Map group name to the corresponding env binding */
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
export const databaseLiveRoute = new OpenAPIHono<HonoEnv>({ defaultHook: zodDefaultHook });
|
|
23
23
|
|
|
24
24
|
const MAX_PENDING_PER_IP = 5;
|
|
25
|
-
const PENDING_TTL_SECONDS =
|
|
25
|
+
const PENDING_TTL_SECONDS = 60;
|
|
26
26
|
const dbLiveQuerySchema = z.object({
|
|
27
27
|
channel: z.string().optional().openapi({ description: 'Legacy DB subscription channel name' }),
|
|
28
28
|
namespace: z.string().optional().openapi({ description: 'Database namespace', example: 'shared' }),
|
package/src/routes/functions.ts
CHANGED
|
@@ -150,6 +150,14 @@ functionsRoute.all('/:functionName{.+}', async (c) => {
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
console.error(`[EdgeBase] HTTP function '${matched.route.name}' error:`, err);
|
|
153
|
-
|
|
153
|
+
const release = parseConfig(c.env)?.release ?? false;
|
|
154
|
+
return c.json({
|
|
155
|
+
code: 500,
|
|
156
|
+
message: 'Function execution failed.',
|
|
157
|
+
...(!release && {
|
|
158
|
+
error: err instanceof Error ? err.message : String(err),
|
|
159
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
160
|
+
}),
|
|
161
|
+
}, 500);
|
|
154
162
|
}
|
|
155
163
|
});
|
package/src/routes/vectorize.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Supported actions:
|
|
8
8
|
* upsert — Insert or replace vectors (write)
|
|
9
|
-
* insert — Insert vectors
|
|
9
|
+
* insert — Insert new vectors without replacing existing IDs (write)
|
|
10
10
|
* search — Similarity search by vector values (query)
|
|
11
11
|
* queryById — Similarity search using an existing vector's ID (query, Vectorize v2 only)
|
|
12
12
|
* getByIds — Retrieve vectors by ID (query)
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* - Config Allowlist: index must be declared in config.vectorize
|
|
18
18
|
* - Service Key required with scoped validation
|
|
19
19
|
*
|
|
20
|
-
* Note:
|
|
21
|
-
*
|
|
20
|
+
* Note: Cloudflare does not provide a local Vectorize simulation. When the binding
|
|
21
|
+
* is unavailable in EdgeBase local or Docker environments, the route returns a stub response with a warning.
|
|
22
22
|
*
|
|
23
23
|
* Flow: Server SDK → POST /api/vectorize/:index → Worker → Vectorize binding → JSON
|
|
24
24
|
*/
|
|
@@ -161,7 +161,7 @@ vectorizeRoute.openapi(vectorizeOperation, async (c) => {
|
|
|
161
161
|
// ─── Binding access ───────────────────────────────────────────────────
|
|
162
162
|
|
|
163
163
|
// §1 Env type — dynamic binding access via type assertion
|
|
164
|
-
// §7: Vectorize
|
|
164
|
+
// §7: Vectorize has no local simulation in Cloudflare. EdgeBase falls back to stubs.
|
|
165
165
|
const bindingName = vectorConfig.binding ?? `VECTORIZE_${nameParam.toUpperCase()}`;
|
|
166
166
|
const binding = (c.env as unknown as Record<string, unknown>)[bindingName] as VectorizeIndex | undefined;
|
|
167
167
|
if (!binding) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.crp-overlay.svelte-sxc7i5{position:fixed;top:0;right:0;bottom:0;left:0;border:none;padding:0;background:#00000059;z-index:40;cursor:pointer}.crp.svelte-sxc7i5{position:fixed;top:0;right:0;bottom:0;width:420px;max-width:min(92vw,420px);display:flex;flex-direction:column;background:var(--color-bg);border-left:1px solid var(--color-border);box-shadow:-8px 0 24px #0000002e;z-index:41;animation:svelte-sxc7i5-crp-slide .2s ease-out}@keyframes svelte-sxc7i5-crp-slide{0%{transform:translate(100%)}to{transform:translate(0)}}.crp-header.svelte-sxc7i5{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);padding:var(--space-4);border-bottom:1px solid var(--color-border)}.crp-title.svelte-sxc7i5{margin:0;font-size:16px;font-weight:600}.crp-subtitle.svelte-sxc7i5{margin:6px 0 0;font-size:12px;color:var(--color-text-secondary)}.crp-close.svelte-sxc7i5{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);font-size:18px;cursor:pointer}.crp-close.svelte-sxc7i5:hover:not(:disabled){background:var(--color-bg-secondary);color:var(--color-text)}.crp-body.svelte-sxc7i5{flex:1;overflow-y:auto;padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4)}.crp-field.svelte-sxc7i5{display:flex;flex-direction:column;gap:var(--space-2)}.crp-note.svelte-sxc7i5{padding:12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-secondary);font-size:12px;color:var(--color-text-secondary);line-height:1.55}.crp-field__header.svelte-sxc7i5{display:flex;align-items:center;gap:var(--space-2)}.crp-field__name.svelte-sxc7i5{font-size:12px;font-weight:600;color:var(--color-text-secondary)}.crp-field__type.svelte-sxc7i5{font-size:10px;padding:1px 6px;border-radius:9999px;background:var(--color-bg-secondary);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.crp-input.svelte-sxc7i5{width:100%;padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-secondary);color:var(--color-text);font:inherit}.crp-input.svelte-sxc7i5:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-primary) 22%,transparent)}.crp-input--error.svelte-sxc7i5{border-color:var(--color-danger);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-danger) 18%,transparent)}.crp-input--textarea.svelte-sxc7i5{resize:vertical;min-height:120px;font-family:var(--font-mono)}.crp-helper.svelte-sxc7i5,.crp-error.svelte-sxc7i5{margin:0;font-size:12px;line-height:1.5}.crp-helper.svelte-sxc7i5{color:var(--color-text-secondary)}.crp-error.svelte-sxc7i5{color:var(--color-danger)}.crp-footer.svelte-sxc7i5{display:flex;justify-content:flex-end;gap:var(--space-2);margin-top:auto;padding-top:var(--space-2);border-top:1px solid var(--color-border)}.crp-btn.svelte-sxc7i5{display:inline-flex;align-items:center;justify-content:center;padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);font:inherit;cursor:pointer}.crp-btn.svelte-sxc7i5:disabled,.crp-close.svelte-sxc7i5:disabled{opacity:.6;cursor:not-allowed}.crp-btn--primary.svelte-sxc7i5{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.crp-spinner.svelte-sxc7i5{width:14px;height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:9999px;animation:svelte-sxc7i5-crp-spin .7s linear infinite}@keyframes svelte-sxc7i5-crp-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.dg.svelte-45rfpz{display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);outline:none;font-size:13px}.dg.svelte-45rfpz:focus-within{box-shadow:0 0 0 2px color-mix(in srgb,var(--color-primary) 20%,transparent)}.dg-toolbar.svelte-45rfpz{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary);gap:var(--space-2);min-height:36px;flex-wrap:wrap}.dg-toolbar__left.svelte-45rfpz,.dg-toolbar__right.svelte-45rfpz{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.dg-toolbar__left.svelte-45rfpz{flex:1 1 240px;min-width:0}.dg-toolbar__right.svelte-45rfpz{justify-content:flex-end;margin-left:auto}.dg-btn.svelte-45rfpz{display:inline-flex;align-items:center;padding:4px 10px;font-size:12px;font-family:inherit;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);cursor:pointer;white-space:nowrap}.dg-btn.svelte-45rfpz:hover{background:var(--color-bg-tertiary)}.dg-btn.svelte-45rfpz:disabled{opacity:.5;cursor:not-allowed}.dg-btn--sm.svelte-45rfpz{padding:2px 8px}.dg-btn--primary.svelte-45rfpz{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.dg-btn--primary.svelte-45rfpz:hover{filter:brightness(1.1)}.dg-btn--danger.svelte-45rfpz{background:var(--color-danger);color:#fff;border-color:var(--color-danger)}.dg-btn--danger.svelte-45rfpz:hover{filter:brightness(1.1)}.dg-table-wrap.svelte-45rfpz{position:relative;overflow-x:auto;overflow-y:auto;max-height:70vh}.dg-table.svelte-45rfpz{width:100%;border-collapse:collapse;table-layout:fixed}.dg-th.svelte-45rfpz{position:sticky;top:0;z-index:2;padding:0;text-align:left;font-weight:600;font-size:12px;color:var(--color-text-secondary);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);-webkit-user-select:none;user-select:none}.dg-th--checkbox.svelte-45rfpz{width:36px!important;min-width:36px!important;text-align:center;padding:var(--space-2)}.dg-th--actions.svelte-45rfpz{position:sticky;right:0;z-index:4;width:80px!important;min-width:80px!important;text-align:right;padding:var(--space-2) var(--space-3);background:var(--color-bg-secondary);box-shadow:-12px 0 16px -16px color-mix(in srgb,var(--color-text) 55%,transparent)}.dg-th__inner.svelte-45rfpz{display:flex;align-items:center;position:relative}.dg-sort-btn.svelte-45rfpz{flex:1;display:flex;align-items:center;gap:4px;padding:var(--space-2) var(--space-3);border:none;background:none;color:inherit;font:inherit;font-weight:600;font-size:12px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;letter-spacing:.03em}.dg-sort-btn.svelte-45rfpz:hover{color:var(--color-text)}.dg-sort-icon.svelte-45rfpz{font-size:9px;opacity:.6}.dg-resize-handle.svelte-45rfpz{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}.dg-resize-handle.svelte-45rfpz:hover,.dg-resize-handle.svelte-45rfpz:active{background:var(--color-primary);opacity:.5}.dg-td.svelte-45rfpz{padding:var(--space-1) var(--space-3);border-bottom:1px solid var(--color-border);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:default;height:32px;vertical-align:middle}.dg-td--checkbox.svelte-45rfpz{text-align:center;width:36px}.dg-td--actions.svelte-45rfpz{position:sticky;right:0;z-index:1;text-align:right;white-space:nowrap;background:var(--dg-row-bg, var(--color-bg));box-shadow:-12px 0 16px -16px color-mix(in srgb,var(--color-text) 55%,transparent)}.dg-td--empty.svelte-45rfpz{padding:var(--space-7);text-align:center;color:var(--color-text-secondary)}.dg-td--focused.svelte-45rfpz{outline:2px solid var(--color-primary);outline-offset:-2px}.dg-td--dirty.svelte-45rfpz{background:color-mix(in srgb,var(--color-warning) 10%,transparent)}.dg-td--editing.svelte-45rfpz{padding:0;overflow:visible}.dg-cell-value.svelte-45rfpz{font-family:var(--font-mono);font-size:12px}.dg-cell-trigger.svelte-45rfpz{display:flex;align-items:center;width:100%;height:100%;padding:0;border:none;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.dg-cell-trigger.svelte-45rfpz:focus{outline:none}.dg-cell-value--null.svelte-45rfpz{color:var(--color-text-tertiary);font-style:italic}.dg-cell-link.svelte-45rfpz{font-family:var(--font-mono);font-size:12px;color:var(--color-primary);text-decoration:none;cursor:pointer}.dg-cell-link.svelte-45rfpz:hover{text-decoration:underline}.dg-bool.svelte-45rfpz{font-size:14px}.dg-cell-editor.svelte-45rfpz{width:100%;height:100%;min-height:30px;padding:2px var(--space-2);border:2px solid var(--color-primary);border-radius:0;background:var(--color-bg);color:var(--color-text);font-family:var(--font-mono);font-size:12px;outline:none;box-sizing:border-box}.dg-cell-editor--json.svelte-45rfpz{min-height:80px;resize:vertical;position:absolute;z-index:10;width:300px;box-shadow:var(--shadow-md)}select.dg-cell-editor.svelte-45rfpz{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.dg-row.svelte-45rfpz{--dg-row-bg: var(--color-bg);transition:background .1s}.dg-row.svelte-45rfpz:hover{--dg-row-bg: var(--color-bg-secondary);background:var(--dg-row-bg)}.dg-row--selected.svelte-45rfpz{--dg-row-bg: color-mix(in srgb, var(--color-primary) 8%, var(--color-bg));background:var(--dg-row-bg)}.dg-row--dirty.svelte-45rfpz{--dg-row-bg: color-mix(in srgb, var(--color-warning) 6%, var(--color-bg));background:var(--dg-row-bg)}.dg-row.svelte-45rfpz:last-child .dg-td:where(.svelte-45rfpz){border-bottom:none}.dg-act-btn.svelte-45rfpz{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);cursor:pointer;font-size:14px}.dg-act-btn.svelte-45rfpz:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.dg-act-btn--save.svelte-45rfpz{color:var(--color-success)}.dg-act-btn--save.svelte-45rfpz:hover{background:color-mix(in srgb,var(--color-success) 15%,transparent)}.dg-act-btn.svelte-45rfpz:disabled{opacity:.5;cursor:not-allowed}.dg-footer.svelte-45rfpz{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);border-top:1px solid var(--color-border);background:var(--color-bg-secondary);font-size:12px}.dg-footer__left.svelte-45rfpz,.dg-footer__right.svelte-45rfpz{display:flex;align-items:center;gap:var(--space-2)}.dg-count.svelte-45rfpz{color:var(--color-text-tertiary)}.dg-page-size.svelte-45rfpz{padding:2px 6px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);font-size:11px;cursor:pointer}.dg-page-info.svelte-45rfpz{color:var(--color-text-secondary)}.dg-col-picker-wrap.svelte-45rfpz{position:relative}.dg-col-picker-backdrop.svelte-45rfpz{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9;border:none;background:transparent}.dg-col-picker.svelte-45rfpz{position:absolute;right:0;top:100%;margin-top:4px;z-index:10;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);padding:var(--space-2);min-width:180px;max-height:300px;overflow-y:auto}.dg-col-picker__item.svelte-45rfpz{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);font-size:12px;cursor:pointer;border-radius:var(--radius-sm);white-space:nowrap}.dg-col-picker__item.svelte-45rfpz:hover{background:var(--color-bg-secondary)}.dg-col-picker__item.svelte-45rfpz input[type=checkbox]:where(.svelte-45rfpz){margin:0}.dg-col-picker__item.svelte-45rfpz input:where(.svelte-45rfpz):disabled+span:where(.svelte-45rfpz){opacity:.5}.dg-loading.svelte-45rfpz{display:flex;align-items:center;justify-content:center;gap:var(--space-2);color:var(--color-text-secondary)}.dg-spinner.svelte-45rfpz{display:inline-block;width:14px;height:14px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:svelte-45rfpz-dg-spin .6s linear infinite}.dg-spinner-sm.svelte-45rfpz{display:inline-block;width:10px;height:10px;border:1.5px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:svelte-45rfpz-dg-spin .6s linear infinite}@keyframes svelte-45rfpz-dg-spin{to{transform:rotate(360deg)}}.rdp-overlay.svelte-yphh8m{position:fixed;top:0;right:0;bottom:0;left:0;border:none;padding:0;background:#0000004d;z-index:40;cursor:pointer}.rdp.svelte-yphh8m{position:fixed;top:0;right:0;bottom:0;width:420px;max-width:90vw;background:var(--color-bg);border-left:1px solid var(--color-border);box-shadow:-4px 0 20px #0000001a;z-index:41;display:flex;flex-direction:column;animation:svelte-yphh8m-rdp-slide .2s ease-out}@keyframes svelte-yphh8m-rdp-slide{0%{transform:translate(100%)}to{transform:translate(0)}}.rdp-header.svelte-yphh8m{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);padding:var(--space-4);border-bottom:1px solid var(--color-border)}.rdp-title.svelte-yphh8m{margin:0;font-size:15px;font-weight:600}.rdp-subtitle.svelte-yphh8m{margin:6px 0 0;font-size:12px;color:var(--color-text-secondary)}.rdp-close.svelte-yphh8m{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);font-size:18px;cursor:pointer}.rdp-close.svelte-yphh8m:hover:not(:disabled){background:var(--color-bg-secondary);color:var(--color-text)}.rdp-body.svelte-yphh8m{flex:1;overflow-y:auto;padding:var(--space-3)}.rdp-field.svelte-yphh8m{padding:var(--space-3);border-bottom:1px solid var(--color-border)}.rdp-field.svelte-yphh8m:last-child{border-bottom:none}.rdp-field__header.svelte-yphh8m{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.rdp-field__name.svelte-yphh8m{font-size:12px;font-weight:600;color:var(--color-text-secondary);font-family:var(--font-mono)}.rdp-field__type.svelte-yphh8m{font-size:10px;color:var(--color-text-tertiary);padding:1px 6px;background:var(--color-bg-secondary);border-radius:9999px;text-transform:uppercase;letter-spacing:.04em}.rdp-field__value.svelte-yphh8m{font-size:13px;font-family:var(--font-mono);color:var(--color-text);word-break:break-all}.rdp-field__value--null.svelte-yphh8m{color:var(--color-text-tertiary);font-style:italic}.rdp-input.svelte-yphh8m{width:100%;padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-secondary);color:var(--color-text);font:inherit}.rdp-input.svelte-yphh8m:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-primary) 22%,transparent)}.rdp-input--textarea.svelte-yphh8m{resize:vertical;min-height:120px;font-family:var(--font-mono)}.rdp-bool.svelte-yphh8m{font-size:13px}.rdp-json.svelte-yphh8m{margin:0;padding:var(--space-2);background:var(--color-bg-secondary);border-radius:var(--radius-sm);font-size:12px;overflow-x:auto;white-space:pre-wrap}.rdp-link.svelte-yphh8m{color:var(--color-primary);text-decoration:none}.rdp-link.svelte-yphh8m:hover{text-decoration:underline}.rdp-footer.svelte-yphh8m{display:flex;justify-content:flex-end;gap:var(--space-2);padding:var(--space-4);border-top:1px solid var(--color-border)}.rdp-btn.svelte-yphh8m{display:inline-flex;align-items:center;justify-content:center;min-width:96px;padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);font:inherit;cursor:pointer}.rdp-btn.svelte-yphh8m:disabled,.rdp-close.svelte-yphh8m:disabled{opacity:.55;cursor:not-allowed}.rdp-btn--primary.svelte-yphh8m{border-color:var(--color-primary);background:var(--color-primary);color:#fff}.rdp-spinner.svelte-yphh8m{width:14px;height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:#fffffff2;border-radius:9999px;animation:svelte-yphh8m-rdp-spin .8s linear infinite}@keyframes svelte-yphh8m-rdp-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.records-tab.svelte-198lwhz{display:flex;flex-direction:column;gap:var(--space-4)}.toolbar.svelte-198lwhz{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}.search-bar.svelte-198lwhz{display:flex;align-items:center;gap:var(--space-2)}.search-input.svelte-198lwhz{padding:var(--space-2) var(--space-3);font-size:13px;font-family:inherit;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);outline:none;min-width:200px}.search-input.svelte-198lwhz:focus{border-color:var(--color-primary)}.toolbar__right.svelte-198lwhz{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.toolbar__meta.svelte-198lwhz{font-size:12px;color:var(--color-text-tertiary)}.csv-import.svelte-198lwhz{display:flex;flex-direction:column;gap:var(--space-4)}.csv-error.svelte-198lwhz{padding:var(--space-3);background:#fee2e2;color:#991b1b;font-size:13px;border-radius:var(--radius-md)}.csv-upload.svelte-198lwhz{display:flex;align-items:center;gap:var(--space-3)}.csv-upload-label.svelte-198lwhz{display:inline-flex;align-items:center;padding:var(--space-2) var(--space-3);font-size:13px;border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;background:var(--color-bg-secondary);color:var(--color-text)}.csv-upload-label.svelte-198lwhz:hover{background:var(--color-bg-tertiary)}.csv-file-input.svelte-198lwhz{display:none}.csv-filename.svelte-198lwhz{font-size:12px;color:var(--color-text-secondary);font-family:var(--font-mono)}.csv-section.svelte-198lwhz{display:flex;flex-direction:column;gap:var(--space-2)}.csv-section-title.svelte-198lwhz{margin:0;font-size:13px;font-weight:600}.csv-mappings.svelte-198lwhz{display:flex;flex-direction:column;gap:var(--space-2)}.csv-map-row.svelte-198lwhz{display:flex;align-items:center;gap:var(--space-2)}.csv-map-from.svelte-198lwhz{min-width:120px;font-size:12px;font-family:var(--font-mono);color:var(--color-text-secondary)}.csv-map-arrow.svelte-198lwhz{font-size:12px;color:var(--color-text-tertiary)}.csv-map-select.svelte-198lwhz{padding:var(--space-1) var(--space-2);font-size:12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);min-width:140px}.csv-preview-wrap.svelte-198lwhz{overflow-x:auto;border:1px solid var(--color-border);border-radius:var(--radius-md)}.csv-preview-table.svelte-198lwhz{width:100%;border-collapse:collapse;font-size:12px}.csv-preview-th.svelte-198lwhz{padding:var(--space-1) var(--space-2);text-align:left;font-weight:600;font-family:var(--font-mono);font-size:11px;background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);white-space:nowrap}.csv-preview-td.svelte-198lwhz{padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--color-border);font-family:var(--font-mono);font-size:11px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sql-editor-wrap.svelte-392xt8{border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.sql-editor-wrap.svelte-392xt8 .cm-editor{min-height:120px}.sql-editor-wrap.svelte-392xt8 .cm-editor.cm-focused{border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-primary) 20%,transparent)}.table-sql.svelte-1syrthj{display:flex;flex-direction:column;gap:var(--space-4)}.table-sql__toolbar.svelte-1syrthj{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.table-sql__target.svelte-1syrthj{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-secondary);font-size:12px}.table-sql__target-label.svelte-1syrthj{color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.table-sql__target.svelte-1syrthj code:where(.svelte-1syrthj){font-family:var(--font-mono);color:var(--color-text)}.table-sql__shortcut.svelte-1syrthj{font-size:12px;color:var(--color-text-tertiary);margin-left:auto}.table-sql__result-tabs.svelte-1syrthj{display:flex;flex-wrap:wrap;gap:var(--space-2)}.table-sql__result-tab.svelte-1syrthj{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:pointer}.table-sql__result-tab--active.svelte-1syrthj{border-color:var(--color-primary);color:var(--color-primary)}.table-sql__result-open.svelte-1syrthj{border:none;background:transparent;color:inherit;cursor:pointer;padding:0;font:inherit}.table-sql__result-close.svelte-1syrthj{border:none;background:transparent;color:inherit;cursor:pointer;padding:0;line-height:1}.table-sql__result-panel.svelte-1syrthj{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);background:var(--color-bg)}.table-sql__result-meta.svelte-1syrthj{margin-bottom:var(--space-3);font-size:12px;color:var(--color-text-secondary)}.table-sql__result-error.svelte-1syrthj{color:var(--color-danger, #ef4444)}.table-sql__error-block.svelte-1syrthj,.table-sql__empty.svelte-1syrthj{margin:0;padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-bg-secondary);color:var(--color-text-secondary);font-size:13px}.index-editor.svelte-v6rf4z{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.index-editor__header.svelte-v6rf4z{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary)}.index-editor__title.svelte-v6rf4z{font-size:13px;font-weight:600;color:var(--color-text)}.index-form.svelte-v6rf4z{padding:var(--space-4);border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:var(--space-3)}.index-form__actions.svelte-v6rf4z{display:flex;justify-content:flex-end}.index-error.svelte-v6rf4z{padding:var(--space-2) var(--space-3);background:#fee2e2;color:#991b1b;font-size:12px;border-radius:var(--radius-sm)}.index-row.svelte-v6rf4z{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--color-border)}.index-row.svelte-v6rf4z:last-child{border-bottom:none}.index-fields.svelte-v6rf4z{font-family:var(--font-mono);font-size:13px;flex:1}.index-unique.svelte-v6rf4z{padding:1px 6px;background:#dbeafe;color:#1e40af;font-size:11px;font-weight:500;border-radius:var(--radius-sm)}.index-empty.svelte-v6rf4z{padding:var(--space-4);text-align:center;font-size:13px;color:var(--color-text-secondary)}.index-delete.svelte-v6rf4z{display:flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);cursor:pointer}.index-delete.svelte-v6rf4z:hover{background:#fee2e2;color:var(--color-danger)}.fts-editor.svelte-974m0i{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.fts-editor__header.svelte-974m0i{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary)}.fts-editor__title.svelte-974m0i{font-size:13px;font-weight:600;color:var(--color-text)}.fts-list.svelte-974m0i{display:flex;flex-direction:column}.fts-item.svelte-974m0i{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--color-border);font-size:13px;cursor:pointer}.fts-item.svelte-974m0i:last-child{border-bottom:none}.fts-item.svelte-974m0i:hover{background:var(--color-bg-secondary)}.fts-item.svelte-974m0i code:where(.svelte-974m0i){font-family:var(--font-mono);font-size:13px}.fts-active.svelte-974m0i{margin-left:auto;padding:1px 6px;background:#dcfce7;color:#166534;font-size:11px;font-weight:500;border-radius:var(--radius-sm)}.fts-empty.svelte-974m0i{padding:var(--space-4);text-align:center;font-size:13px;color:var(--color-text-secondary)}.schema-tab.svelte-aw0zhs{display:flex;flex-direction:column;gap:var(--space-4)}.schema-empty.svelte-aw0zhs{padding:var(--space-7);text-align:center;color:var(--color-danger)}.readonly-banner.svelte-aw0zhs{padding:var(--space-3) var(--space-4);background:#fef3c7;color:#92400e;font-size:13px;border-radius:var(--radius-md)}.schema-actions.svelte-aw0zhs{display:flex;align-items:center;gap:var(--space-2)}.schema-note.svelte-aw0zhs,.schema-namespace.svelte-aw0zhs{font-size:12px;color:var(--color-text-secondary)}.schema-namespace.svelte-aw0zhs code:where(.svelte-aw0zhs){font-family:var(--font-mono);padding:1px 6px;background:var(--color-bg-secondary);border-radius:var(--radius-sm)}.rename-inline.svelte-aw0zhs{display:flex;align-items:center;gap:var(--space-2)}.rename-input.svelte-aw0zhs{padding:var(--space-1) var(--space-3);font-size:13px;font-family:var(--font-mono);border:1px solid var(--color-border);border-radius:var(--radius-md);outline:none;width:180px}.rename-input.svelte-aw0zhs:focus{border-color:var(--color-primary)}.rt-layout.svelte-wqn9yg{display:flex;flex-direction:column;gap:var(--space-5)}.rt-form.svelte-wqn9yg{display:flex;flex-direction:column;gap:var(--space-4);max-width:600px}.rt-field.svelte-wqn9yg{display:flex;flex-direction:column;gap:var(--space-1);border:none;padding:0;margin:0;min-width:0}.rt-label.svelte-wqn9yg{font-size:12px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.03em}.rt-select.svelte-wqn9yg,.rt-textarea.svelte-wqn9yg{padding:var(--space-2) var(--space-3);font-size:13px;font-family:inherit;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);outline:none}.rt-select.svelte-wqn9yg:focus,.rt-textarea.svelte-wqn9yg:focus{border-color:var(--color-primary)}.rt-textarea.svelte-wqn9yg{font-family:var(--font-mono);resize:vertical}.rt-radio-group.svelte-wqn9yg{display:flex;gap:var(--space-4)}.rt-radio.svelte-wqn9yg{display:flex;align-items:center;gap:var(--space-1);font-size:13px;cursor:pointer}.rt-results-title.svelte-wqn9yg{font-size:14px;font-weight:600;margin:0 0 var(--space-3)}.rt-results-grid.svelte-wqn9yg{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-3)}.rt-result-card.svelte-wqn9yg{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);border-left:3px solid var(--color-border)}.rt-result-card--allowed.svelte-wqn9yg{border-left-color:var(--color-success)}.rt-result-card--denied.svelte-wqn9yg{border-left-color:var(--color-danger)}.rt-result-header.svelte-wqn9yg{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-2)}.rt-result-op.svelte-wqn9yg{font-weight:600;font-size:13px;text-transform:uppercase}.rt-result-badge.svelte-wqn9yg{font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.rt-badge--allowed.svelte-wqn9yg{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.rt-badge--denied.svelte-wqn9yg{background:color-mix(in srgb,var(--color-danger) 15%,transparent);color:var(--color-danger)}.rt-result-rule.svelte-wqn9yg{font-size:11px;color:var(--color-text-tertiary);display:block}.rt-result-error.svelte-wqn9yg{font-size:11px;color:var(--color-danger);margin-top:var(--space-1)}.sdk-snippets.svelte-hdcl64{display:flex;flex-direction:column;gap:var(--space-3)}.lang-tabs.svelte-hdcl64{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--color-border)}.lang-tab.svelte-hdcl64{padding:var(--space-2) var(--space-4);font-size:13px;font-weight:500;color:var(--color-text-secondary);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px}.lang-tab.svelte-hdcl64:hover{color:var(--color-text)}.lang-tab--active.svelte-hdcl64{color:var(--color-primary);border-bottom-color:var(--color-primary)}.op-tabs.svelte-hdcl64{display:flex;flex-wrap:wrap;gap:var(--space-2)}.op-tab.svelte-hdcl64{padding:var(--space-1) var(--space-3);font-size:12px;font-weight:500;color:var(--color-text-secondary);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:9999px;cursor:pointer}.op-tab.svelte-hdcl64:hover{background:var(--color-bg-tertiary)}.op-tab--active.svelte-hdcl64{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.code-block.svelte-hdcl64{position:relative;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-secondary);overflow:hidden}.copy-btn.svelte-hdcl64{position:absolute;top:var(--space-2);right:var(--space-2);display:inline-flex;align-items:center;gap:4px;padding:var(--space-1) var(--space-2);font-size:11px;color:var(--color-text-secondary);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;z-index:1}.copy-btn.svelte-hdcl64:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.code-pre.svelte-hdcl64{margin:0;padding:var(--space-4);padding-right:80px;font-family:var(--font-mono);font-size:13px;line-height:1.5;color:var(--color-text);overflow-x:auto;white-space:pre;-moz-tab-size:2;tab-size:2}.table-detail.svelte-11vdap9{display:flex;flex-direction:column;gap:0}.table-header.svelte-11vdap9{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-4)}.table-header__meta.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-2)}.table-header__actions.svelte-11vdap9{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end}.table-header__hint.svelte-11vdap9{width:100%;font-size:12px;line-height:1.5;color:var(--color-text-secondary);text-align:right}.table-header__hint.svelte-11vdap9 code:where(.svelte-11vdap9){font-family:var(--font-mono);padding:1px 6px;background:var(--color-bg-secondary);border-radius:var(--radius-sm)}.table-title.svelte-11vdap9{margin:0;font-size:20px;font-weight:600;font-family:var(--font-mono);color:var(--color-text)}.table-badges.svelte-11vdap9{display:flex;flex-wrap:wrap;gap:var(--space-2)}.table-badge.svelte-11vdap9{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;background:var(--color-bg-secondary);border:1px solid var(--color-border);font-size:11px;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.04em}.table-badge--dynamic.svelte-11vdap9{color:var(--color-primary);border-color:color-mix(in srgb,var(--color-primary) 35%,var(--color-border))}.erd-link.svelte-11vdap9{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-3);font-size:12px;color:var(--color-text-secondary);text-decoration:none;border:1px solid var(--color-border);border-radius:var(--radius-md);transition:background-color .1s,color .1s}.erd-link.svelte-11vdap9:hover{background:var(--color-bg-secondary);color:var(--color-text)}.upgrade-modal.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-4)}.upgrade-modal__text.svelte-11vdap9{margin:0;font-size:13px;line-height:1.6;color:var(--color-text-secondary)}.upgrade-modal__field.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-2)}.upgrade-modal__choices.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-3)}.upgrade-modal__choices-copy.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-1)}.upgrade-modal__choice-grid.svelte-11vdap9{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--space-3)}.upgrade-modal__choice-card.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-3);height:100%;padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg)}.upgrade-modal__choice-eyebrow.svelte-11vdap9{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--color-text-tertiary)}.upgrade-modal__choice-header.svelte-11vdap9{display:flex;flex-direction:column;gap:4px}.upgrade-modal__choice-title.svelte-11vdap9{margin:0;font-size:14px;font-weight:600;color:var(--color-text)}.upgrade-modal__notice.svelte-11vdap9,.upgrade-modal__status.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg-secondary)}.upgrade-modal__notice-title.svelte-11vdap9,.upgrade-modal__status-title.svelte-11vdap9{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--color-text)}.upgrade-modal__status.svelte-11vdap9{border-color:color-mix(in srgb,var(--color-primary) 35%,var(--color-border));background:color-mix(in srgb,var(--color-primary) 8%,var(--color-bg-secondary))}.upgrade-modal__status-copy.svelte-11vdap9{margin:0;font-size:12px;line-height:1.6;color:var(--color-text-secondary)}.upgrade-modal__status-current.svelte-11vdap9{font-size:12px;font-weight:600;color:var(--color-text)}.upgrade-modal__steps.svelte-11vdap9{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;font-size:12px;line-height:1.5;color:var(--color-text-secondary)}.upgrade-modal__step--active.svelte-11vdap9{color:var(--color-text);font-weight:600}.upgrade-modal__step--done.svelte-11vdap9{color:var(--color-success)}.upgrade-modal__label.svelte-11vdap9{font-size:12px;font-weight:600;color:var(--color-text)}.upgrade-modal__input.svelte-11vdap9{width:100%;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);font-family:var(--font-mono);box-sizing:border-box}.upgrade-modal__static.svelte-11vdap9{width:100%;padding:var(--space-2) var(--space-3);font-size:.875rem;line-height:1.25rem;color:var(--color-text);background-color:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);box-sizing:border-box}.upgrade-modal__static.svelte-11vdap9 code:where(.svelte-11vdap9){font-family:var(--font-mono, "SFMono-Regular", monospace);font-size:.8125rem}.upgrade-modal__select.svelte-11vdap9{width:100%;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);box-sizing:border-box}.upgrade-modal__actions-row.svelte-11vdap9{display:flex;justify-content:flex-start}.upgrade-modal__choice-actions.svelte-11vdap9{margin-top:auto}.upgrade-modal__hint.svelte-11vdap9{margin:0;font-size:12px;color:var(--color-text-tertiary)}.upgrade-modal__hint--error.svelte-11vdap9{color:var(--color-danger)}.target-bar.svelte-11vdap9{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--space-4);padding:var(--space-4);margin-bottom:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:linear-gradient(180deg,var(--color-bg-secondary),var(--color-bg))}.target-bar__copy.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-1)}.target-bar__title.svelte-11vdap9{font-size:13px;font-weight:600;color:var(--color-text)}.target-bar__description.svelte-11vdap9{font-size:12px;color:var(--color-text-secondary);max-width:520px}.target-bar__controls.svelte-11vdap9{display:flex;align-items:flex-end;gap:var(--space-2);flex-wrap:wrap}.target-bar__field.svelte-11vdap9{display:flex;flex-direction:column;gap:6px;min-width:min(280px,100%)}.target-bar__field-label.svelte-11vdap9{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-tertiary)}.target-bar__input.svelte-11vdap9{width:min(280px,100%);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);font-family:var(--font-mono)}.target-bar__button.svelte-11vdap9{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);cursor:pointer}.target-bar__button--primary.svelte-11vdap9{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.target-bar__suggestions.svelte-11vdap9{flex:1 0 100%;display:flex;flex-direction:column;gap:var(--space-3);padding-top:var(--space-2);border-top:1px solid color-mix(in srgb,var(--color-border) 75%,transparent)}.target-bar__section.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-2)}.target-bar__section-label.svelte-11vdap9{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--color-text-tertiary)}.target-bar__chip-row.svelte-11vdap9{display:flex;flex-wrap:wrap;gap:var(--space-2)}.target-chip.svelte-11vdap9{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg);color:var(--color-text);cursor:pointer;text-align:left}.target-chip.svelte-11vdap9:hover{border-color:color-mix(in srgb,var(--color-primary) 35%,var(--color-border));background:var(--color-bg-secondary)}.target-chip__label.svelte-11vdap9{font-size:13px;font-weight:600}.target-chip__meta.svelte-11vdap9{font-size:11px;color:var(--color-text-secondary)}.target-bar__status.svelte-11vdap9{font-size:12px;color:var(--color-text-secondary)}.target-bar__status--error.svelte-11vdap9{color:var(--color-danger)}.tab-bar.svelte-11vdap9{display:flex;gap:0;border-bottom:1px solid var(--color-border);margin-bottom:var(--space-4);overflow-x:auto;overflow-y:hidden}.tab-btn.svelte-11vdap9{padding:var(--space-2) var(--space-4);font-size:13px;font-weight:500;color:var(--color-text-secondary);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color .1s,border-color .1s;margin-bottom:-1px;white-space:nowrap}.tab-btn.svelte-11vdap9:hover{color:var(--color-text)}.tab-btn.tab-btn--active.svelte-11vdap9{color:var(--color-primary);border-bottom-color:var(--color-primary)}.tab-content.svelte-11vdap9{flex:1}.target-empty.svelte-11vdap9{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-5);border:1px dashed var(--color-border);border-radius:var(--radius-lg);background:var(--color-bg-secondary)}.target-empty.svelte-11vdap9 h3:where(.svelte-11vdap9){margin:0;font-size:16px;color:var(--color-text)}.target-empty.svelte-11vdap9 p:where(.svelte-11vdap9){margin:0;font-size:13px;color:var(--color-text-secondary)}@media (max-width: 900px){.table-header.svelte-11vdap9,.target-bar.svelte-11vdap9{flex-direction:column;align-items:stretch}.target-bar__controls.svelte-11vdap9{width:100%;align-items:stretch}.target-bar__field.svelte-11vdap9,.target-bar__input.svelte-11vdap9{flex:1;width:100%}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{x as p,E as t}from"./glwixJlP.js";import{B as c}from"./ehbppgYb.js";function E(r,s,...a){var e=new c(r);p(()=>{const n=s()??null;e.ensure(n,n&&(o=>n(o,...a)))},t)}export{E as s};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{F as S,G as h,I as k,J as T,S as c}from"./glwixJlP.js";function t(r,i){return r===i||(r==null?void 0:r[c])===i}function A(r={},i,a,q){return S(()=>{var f,s;return h(()=>{f=s,s=[],k(()=>{r!==a(...s)&&(i(r,...s),f&&t(a(...f),r)&&i(null,...f))})}),()=>{T(()=>{s&&t(a(...s),r)&&i(null,...s)})}}),r}export{A as b};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.B13aXl3s.js","../chunks/CWj6FrbW.js","../chunks/glwixJlP.js","../chunks/D5h5A1cc.js","../chunks/BR_fL5Yv.js","../chunks/CxbRue-5.js","../chunks/ehbppgYb.js","../chunks/UUazaC_N.js","../chunks/C6puvcoR.js","../chunks/B8vJP3wz.js","../chunks/DoPXzH7F.js","../chunks/p-WBlAu3.js","../chunks/CB8xN3_t.js","../chunks/BOjkBtym.js","../chunks/Br0qug7_.js","../chunks/DOxNYcs9.js","../chunks/Ga6XaOJm.js","../chunks/BMMOfNi6.js","../chunks/7f08Id8e.js","../chunks/C4D51vTW.js","../chunks/CyqB6g-D.js","../chunks/BmRjiP5k.js","../chunks/NuUjtcO2.js","../chunks/C0LrJucL.js","../assets/0.Bm6cF078.css","../nodes/1.we4dgVtx.js","../assets/1.BfW3pUNa.css","../nodes/2.BKoKrw1i.js","../nodes/3.BPnU2jxx.js","../chunks/Cs0GwzJA.js","../assets/Button.DpzMRTjK.css","../assets/3.Dg81Pgmd.css","../nodes/4.BY6Ri1gh.js","../chunks/R6arueIl.js","../chunks/CwROoZK0.js","../assets/PageShell.CmU-Xh-b.css","../chunks/CLHXYVje.js","../assets/TimeChart.BTCDAvmT.css","../chunks/Q2nPFxS6.js","../assets/4.CyawCCux.css","../nodes/5.D0tPp_Kt.js","../chunks/DYDZ2Kma.js","../assets/TopList.ClFzmPlA.css","../assets/5.C0YO2HTk.css","../nodes/6.BuWVNVH1.js","../nodes/7.B26-qam0.js","../nodes/8.CdDKHsMK.js","../chunks/BF8I5XXQ.js","../assets/Select.BW4Keufm.css","../chunks/DrQSgw-f.js","../assets/Input.BDUSenmU.css","../chunks/DnyL7Zq-.js","../assets/EmptyState.CwKsu57Y.css","../chunks/eFQHTGwA.js","../assets/Badge.EMYLHBxE.css","../assets/8.Br5jd6kD.css","../nodes/9.BSo7a28L.js","../nodes/10.hrAvOhgI.js","../nodes/11.BZM_Cbjk.js","../chunks/Bh56EfQ_.js","../assets/ConfirmDialog.DAnaWRRk.css","../chunks/7B47DvSx.js","../assets/Modal.Dm5B0Xie.css","../chunks/BK8YUsyH.js","../assets/Skeleton.KWUulTKJ.css","../assets/11.CVmQOewb.css","../nodes/12.pfrTdfHj.js","../assets/12.B1EhbRZT.css","../nodes/13.BvR9UoZX.js","../chunks/CY1F93Wv.js","../assets/Tabs.CniGYb67.css","../chunks/MdeqaOQx.js","../assets/13.BvwYeuwE.css","../nodes/14.BCE_g1DT.js","../chunks/vApWTCBs.js","../assets/Toggle.Cy_K12OM.css","../assets/14.CdVfcO0R.css","../nodes/15.DZrUjo5V.js","../chunks/wJsUhbfZ.js","../assets/15.2yeZ66b-.css","../nodes/16.B_K_CGU4.js","../nodes/17.D7RlNUbd.js","../assets/17.BVg0JEVu.css","../nodes/18.dw9OGxA1.js","../assets/18.Rwnl3x_i.css","../nodes/19.B_K_CGU4.js","../nodes/20.Bij6g6xR.js","../assets/20.DsPWA9AV.css","../nodes/21.DyYxtUDl.js","../chunks/BhjcOf7X.js","../assets/SchemaFieldEditor.g4NsCdno.css","../chunks/Ce-ngf4p.js","../assets/21.Dz2RJ56c.css","../nodes/22.wLPyRbDg.js","../assets/22.DwNLk5Ai.css","../nodes/23.DnjIdPPl.js","../assets/23.CFpu0gOO.css","../nodes/24.PhJEmwPf.js","../assets/24.Cy5LBeoJ.css","../nodes/25.HUYuEeiI.js","../assets/25.pUyLVf-h.css","../nodes/26.CtrQ3jI5.js","../assets/26.DBcGrlXa.css","../nodes/27.CMM8T90I.js","../assets/27.BswYyAJD.css","../nodes/28.CH6XAnHt.js","../assets/28.B4ueB1Kf.css","../nodes/29.Bos0u5_B.js","../assets/29.B-qU6PdF.css","../nodes/30.ScIH1W0H.js","../assets/30.CsdWum94.css","../nodes/31.CXHVAiwb.js","../assets/31.U6OwIp50.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
var st=r=>{throw TypeError(r)};var nt=(r,t,e)=>t.has(r)||st("Cannot "+e);var l=(r,t,e)=>(nt(r,t,"read from private field"),e?e.call(r):t.get(r)),X=(r,t,e)=>t.has(r)?st("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),$=(r,t,e,n)=>(nt(r,t,"write to private field"),n?n.call(r,e):t.set(r,e),e);import{h as it,e as Rt,x as yt,E as bt,y as Ot,B as At,n as Tt,D as _t,z as Lt,k as Dt,b as z,Z as It,g as c,b4 as Vt,a9 as wt,a7 as kt,p as xt,ai as St,w as jt,ab as Ct,f as R,s as Bt,a as qt,d as tt,c as Ft,r as Nt,u as V,t as Ut}from"../chunks/glwixJlP.js";import{h as Yt,m as zt,u as Gt,s as Ht}from"../chunks/D5h5A1cc.js";import"../chunks/CWj6FrbW.js";import{o as Wt}from"../chunks/DoPXzH7F.js";import{i as N}from"../chunks/UUazaC_N.js";import{a as f,c as y,f as ut,t as Zt}from"../chunks/BR_fL5Yv.js";import{B as Jt}from"../chunks/ehbppgYb.js";import{b as w}from"../chunks/CyqB6g-D.js";import{p as U}from"../chunks/C4D51vTW.js";function k(r,t,e){var n;it&&(n=Dt,Rt());var i=new Jt(r);yt(()=>{var m=t()??null;if(it){var s=Ot(n),a=s===Lt,_=m!==null;if(a!==_){var O=At();Tt(O),i.anchor=O,_t(!1),i.ensure(m,m&&(u=>e(u,m))),_t(!0);return}}i.ensure(m,m&&(u=>e(u,m)))},bt)}function Kt(r){return class extends Mt{constructor(t){super({component:r,...t})}}}var b,v;class Mt{constructor(t){X(this,b);X(this,v);var m;var e=new Map,n=(s,a)=>{var _=kt(a,!1,!1);return e.set(s,_),_};const i=new Proxy({...t.props||{},$$events:{}},{get(s,a){return c(e.get(a)??n(a,Reflect.get(s,a)))},has(s,a){return a===It?!0:(c(e.get(a)??n(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,_){return z(e.get(a)??n(a,_),_),Reflect.set(s,a,_)}});$(this,v,(t.hydrate?Yt:zt)(t.component,{target:t.target,anchor:t.anchor,props:i,context:t.context,intro:t.intro??!1,recover:t.recover})),(!((m=t==null?void 0:t.props)!=null&&m.$$host)||t.sync===!1)&&Vt(),$(this,b,i.$$events);for(const s of Object.keys(l(this,v)))s==="$set"||s==="$destroy"||s==="$on"||wt(this,s,{get(){return l(this,v)[s]},set(a){l(this,v)[s]=a},enumerable:!0});l(this,v).$set=s=>{Object.assign(i,s)},l(this,v).$destroy=()=>{Gt(l(this,v))}}$set(t){l(this,v).$set(t)}$on(t,e){l(this,b)[t]=l(this,b)[t]||[];const n=(...i)=>e.call(this,...i);return l(this,b)[t].push(n),()=>{l(this,b)[t]=l(this,b)[t].filter(i=>i!==n)}}$destroy(){l(this,v).$destroy()}}b=new WeakMap,v=new WeakMap;const Qt="modulepreload",Xt=function(r,t){return new URL(r,t).href},mt={},o=function(t,e,n){let i=Promise.resolve();if(e&&e.length>0){let s=function(u){return Promise.all(u.map(P=>Promise.resolve(P).then(A=>({status:"fulfilled",value:A}),A=>({status:"rejected",reason:A}))))};const a=document.getElementsByTagName("link"),_=document.querySelector("meta[property=csp-nonce]"),O=(_==null?void 0:_.nonce)||(_==null?void 0:_.getAttribute("nonce"));i=s(e.map(u=>{if(u=Xt(u,n),u in mt)return;mt[u]=!0;const P=u.endsWith(".css"),A=P?'[rel="stylesheet"]':"";if(!!n)for(let T=a.length-1;T>=0;T--){const x=a[T];if(x.href===u&&(!P||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${A}`))return;const p=document.createElement("link");if(p.rel=P?"stylesheet":Qt,P||(p.as="script"),p.crossOrigin="",p.href=u,O&&p.setAttribute("nonce",O),document.head.appendChild(p),P)return new Promise((T,x)=>{p.addEventListener("load",T),p.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${u}`)))})}))}function m(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return i.then(s=>{for(const a of s||[])a.status==="rejected"&&m(a.reason);return t().catch(m)})},he={};var $t=ut('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),te=ut("<!> <!>",1);function ee(r,t){xt(t,!0);let e=U(t,"components",23,()=>[]),n=U(t,"data_0",3,null),i=U(t,"data_1",3,null),m=U(t,"data_2",3,null),s=U(t,"data_3",3,null);St(()=>t.stores.page.set(t.page)),jt(()=>{t.stores,t.page,t.constructors,e(),t.form,n(),i(),m(),s(),t.stores.page.notify()});let a=tt(!1),_=tt(!1),O=tt(null);Wt(()=>{const d=t.stores.page.subscribe(()=>{c(a)&&(z(_,!0),Ct().then(()=>{z(O,document.title||"untitled page",!0)}))});return z(a,!0),d});const u=V(()=>t.constructors[3]);var P=te(),A=R(P);{var et=d=>{const L=V(()=>t.constructors[0]);var D=y(),B=R(D);k(B,()=>c(L),(I,S)=>{w(S(I,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(h,ae)=>{var rt=y(),ct=R(rt);{var dt=j=>{const G=V(()=>t.constructors[1]);var q=y(),H=R(q);k(H,()=>c(G),(W,Z)=>{w(Z(W,{get data(){return i()},get form(){return t.form},get params(){return t.page.params},children:(E,oe)=>{var at=y(),vt=R(at);{var ht=C=>{const J=V(()=>t.constructors[2]);var F=y(),K=R(F);k(K,()=>c(J),(M,Q)=>{w(Q(M,{get data(){return m()},get form(){return t.form},get params(){return t.page.params},children:(g,se)=>{var ot=y(),gt=R(ot);k(gt,()=>c(u),(Pt,pt)=>{w(pt(Pt,{get data(){return s()},get form(){return t.form},get params(){return t.page.params}}),Y=>e()[3]=Y,()=>{var Y;return(Y=e())==null?void 0:Y[3]})}),f(g,ot)},$$slots:{default:!0}}),g=>e()[2]=g,()=>{var g;return(g=e())==null?void 0:g[2]})}),f(C,F)},Et=C=>{const J=V(()=>t.constructors[2]);var F=y(),K=R(F);k(K,()=>c(J),(M,Q)=>{w(Q(M,{get data(){return m()},get form(){return t.form},get params(){return t.page.params}}),g=>e()[2]=g,()=>{var g;return(g=e())==null?void 0:g[2]})}),f(C,F)};N(vt,C=>{t.constructors[3]?C(ht):C(Et,!1)})}f(E,at)},$$slots:{default:!0}}),E=>e()[1]=E,()=>{var E;return(E=e())==null?void 0:E[1]})}),f(j,q)},ft=j=>{const G=V(()=>t.constructors[1]);var q=y(),H=R(q);k(H,()=>c(G),(W,Z)=>{w(Z(W,{get data(){return i()},get form(){return t.form},get params(){return t.page.params}}),E=>e()[1]=E,()=>{var E;return(E=e())==null?void 0:E[1]})}),f(j,q)};N(ct,j=>{t.constructors[2]?j(dt):j(ft,!1)})}f(h,rt)},$$slots:{default:!0}}),h=>e()[0]=h,()=>{var h;return(h=e())==null?void 0:h[0]})}),f(d,D)},p=d=>{const L=V(()=>t.constructors[0]);var D=y(),B=R(D);k(B,()=>c(L),(I,S)=>{w(S(I,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),h=>e()[0]=h,()=>{var h;return(h=e())==null?void 0:h[0]})}),f(d,D)};N(A,d=>{t.constructors[1]?d(et):d(p,!1)})}var T=Bt(A,2);{var x=d=>{var L=$t(),D=Ft(L);{var B=I=>{var S=Zt();Ut(()=>Ht(S,c(O))),f(I,S)};N(D,I=>{c(_)&&I(B)})}Nt(L),f(d,L)};N(T,d=>{c(a)&&d(x)})}f(r,P),qt()}const Ee=Kt(ee),ge=[()=>o(()=>import("../nodes/0.B13aXl3s.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),()=>o(()=>import("../nodes/1.we4dgVtx.js"),__vite__mapDeps([25,1,2,3,4,8,9,10,11,12,13,26]),import.meta.url),()=>o(()=>import("../nodes/2.BKoKrw1i.js"),__vite__mapDeps([27,1,2,4,5,6]),import.meta.url),()=>o(()=>import("../nodes/3.BPnU2jxx.js"),__vite__mapDeps([28,1,10,2,3,4,7,6,17,14,13,16,5,8,20,9,11,12,23,29,19,30,31]),import.meta.url),()=>o(()=>import("../nodes/4.BY6Ri1gh.js"),__vite__mapDeps([32,1,10,2,3,4,7,6,17,14,13,16,18,8,9,33,34,5,35,36,19,20,37,38,39]),import.meta.url),()=>o(()=>import("../nodes/5.D0tPp_Kt.js"),__vite__mapDeps([40,1,10,2,3,4,7,6,17,14,13,16,8,22,33,34,5,35,38,36,18,19,9,20,37,41,42,43]),import.meta.url),()=>o(()=>import("../nodes/6.BuWVNVH1.js"),__vite__mapDeps([44,1,10,2,3,4,17,14,13,16,8,33,34,5,6,7,35,38,36,18,19,9,20,37,41,42]),import.meta.url),()=>o(()=>import("../nodes/7.B26-qam0.js"),__vite__mapDeps([45,1,10,2,3,4,17,14,13,16,8,33,34,5,6,7,35,38,36,18,19,9,20,37,41,42]),import.meta.url),()=>o(()=>import("../nodes/8.CdDKHsMK.js"),__vite__mapDeps([46,1,10,2,3,4,7,6,17,14,13,16,8,34,5,35,38,29,19,9,30,47,48,49,22,50,51,52,53,54,55]),import.meta.url),()=>o(()=>import("../nodes/9.BSo7a28L.js"),__vite__mapDeps([56,1,10,2,3,4,17,14,13,16,8,34,5,6,7,35,38,36,18,19,9,20,37,41,42]),import.meta.url),()=>o(()=>import("../nodes/10.hrAvOhgI.js"),__vite__mapDeps([57,1,10,2,3,4,17,14,13,16,8,33,34,5,6,7,35,38,36,18,19,9,20,37,41,42]),import.meta.url),()=>o(()=>import("../nodes/11.BZM_Cbjk.js"),__vite__mapDeps([58,1,10,2,3,4,7,6,17,14,13,16,8,12,34,5,35,38,29,19,9,30,49,22,50,53,54,59,20,60,51,52,61,62,47,48,63,64,65]),import.meta.url),()=>o(()=>import("../nodes/12.pfrTdfHj.js"),__vite__mapDeps([66,1,10,2,3,4,7,6,17,14,13,16,8,9,11,12,34,5,35,38,29,19,30,53,54,47,48,59,20,60,67]),import.meta.url),()=>o(()=>import("../nodes/13.BvR9UoZX.js"),__vite__mapDeps([68,1,10,2,3,4,7,6,17,14,13,16,8,9,34,5,35,38,29,19,30,69,70,49,22,50,20,71,72]),import.meta.url),()=>o(()=>import("../nodes/14.BCE_g1DT.js"),__vite__mapDeps([73,1,10,2,3,4,7,6,17,14,13,16,8,22,34,5,35,38,29,19,9,30,53,54,49,50,74,75,76]),import.meta.url),()=>o(()=>import("../nodes/15.DZrUjo5V.js"),__vite__mapDeps([77,1,10,2,3,4,7,6,17,14,13,16,78,34,5,8,35,38,29,19,9,30,53,54,59,20,60,79]),import.meta.url),()=>o(()=>import("../nodes/16.B_K_CGU4.js"),__vite__mapDeps([80,1,2,12,10,13]),import.meta.url),()=>o(()=>import("../nodes/17.D7RlNUbd.js"),__vite__mapDeps([81,1,10,2,3,4,7,6,17,14,13,16,8,20,23,34,5,35,38,51,19,9,52,82]),import.meta.url),()=>o(()=>import("../nodes/18.dw9OGxA1.js"),__vite__mapDeps([83,1,2,3,4,7,6,17,10,14,13,16,8,9,12,34,5,35,38,29,19,30,49,22,50,23,84]),import.meta.url),()=>o(()=>import("../nodes/19.B_K_CGU4.js"),__vite__mapDeps([85,1,2,12,10,13]),import.meta.url),()=>o(()=>import("../nodes/20.Bij6g6xR.js"),__vite__mapDeps([86,1,21,2,4,7,6,8,3,9,10,13,16,14,51,5,19,52,38,87]),import.meta.url),()=>o(()=>import("../nodes/21.DyYxtUDl.js"),__vite__mapDeps([88,1,2,3,4,7,6,17,10,14,13,16,8,22,9,12,11,61,5,20,19,62,29,30,23,78,89,53,54,49,50,74,75,90,91,71,69,70,59,60,38,92]),import.meta.url),()=>o(()=>import("../nodes/22.wLPyRbDg.js"),__vite__mapDeps([93,1,10,2,3,4,7,6,17,14,13,16,8,9,12,11,23,89,19,29,5,30,53,54,61,20,62,49,22,50,74,75,90,94]),import.meta.url),()=>o(()=>import("../nodes/23.DnjIdPPl.js"),__vite__mapDeps([95,1,10,2,3,4,7,6,8,34,5,35,38,14,13,96]),import.meta.url),()=>o(()=>import("../nodes/24.PhJEmwPf.js"),__vite__mapDeps([97,1,10,2,3,4,7,6,17,14,13,16,8,22,34,5,35,38,29,19,9,30,51,52,98]),import.meta.url),()=>o(()=>import("../nodes/25.HUYuEeiI.js"),__vite__mapDeps([99,1,2,3,4,7,6,8,9,10,12,13,11,14,15,29,5,19,30,49,22,50,100]),import.meta.url),()=>o(()=>import("../nodes/26.CtrQ3jI5.js"),__vite__mapDeps([101,1,10,2,3,4,7,6,17,14,13,16,8,78,91,34,5,35,38,29,19,9,30,49,22,50,47,48,51,52,63,64,102]),import.meta.url),()=>o(()=>import("../nodes/27.CMM8T90I.js"),__vite__mapDeps([103,1,10,2,3,4,7,6,17,14,13,16,8,34,5,35,38,104,54]),import.meta.url),()=>o(()=>import("../nodes/28.CH6XAnHt.js"),__vite__mapDeps([105,1,10,2,3,4,7,6,17,14,13,16,8,22,34,5,35,38,69,19,9,70,49,50,29,30,53,54,51,52,106]),import.meta.url),()=>o(()=>import("../nodes/29.Bos0u5_B.js"),__vite__mapDeps([107,1,10,2,3,4,7,6,17,14,13,16,8,78,34,5,35,38,53,19,9,54,29,30,61,20,62,49,22,50,59,60,63,64,108]),import.meta.url),()=>o(()=>import("../nodes/30.ScIH1W0H.js"),__vite__mapDeps([109,1,10,2,3,4,7,6,17,14,13,16,8,9,34,5,35,38,51,19,52,29,30,49,22,50,61,20,62,110]),import.meta.url),()=>o(()=>import("../nodes/31.CXHVAiwb.js"),__vite__mapDeps([111,1,10,2,3,4,7,6,17,14,13,16,8,9,11,12,78,34,5,35,38,29,19,30,51,52,59,20,60,61,62,49,22,50,47,48,112]),import.meta.url)],Pe=[],pe={"/":[4],"/analytics":[5],"/analytics/auth":[6],"/analytics/database":[7],"/analytics/events":[8],"/analytics/functions":[9],"/analytics/storage":[10],"/auth":[11],"/auth/email-templates":[13],"/auth/settings":[14],"/auth/[userId]":[12],"/backup":[15],"/database":[16,[2]],"/database/erd":[17,[2]],"/database/new":[18,[2]],"/database/sql":[19,[2]],"/database/tables":[20,[2,3]],"/database/tables/new":[22,[2,3]],"/database/tables/[table]":[21,[2,3]],"/docs":[23],"/functions":[24],"/login":[25],"/logs":[26],"/monitoring":[27],"/push":[28],"/settings":[29],"/storage":[30],"/storage/[bucket]":[31]},lt={handleError:({error:r})=>{console.error(r)},reroute:()=>{},transport:{}},re=Object.fromEntries(Object.entries(lt.transport).map(([r,t])=>[r,t.decode])),Re=Object.fromEntries(Object.entries(lt.transport).map(([r,t])=>[r,t.encode])),ye=!1,be=(r,t)=>re[r](t);export{be as decode,re as decoders,pe as dictionary,Re as encoders,ye as hash,lt as hooks,he as matchers,ge as nodes,Ee as root,Pe as server_loads};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as r}from"../chunks/CB8xN3_t.js";import{w as t}from"../chunks/BOjkBtym.js";export{t as load_css,r as start};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{f as m}from"../chunks/glwixJlP.js";import{c as n,a as p}from"../chunks/BR_fL5Yv.js";import{s as i}from"../chunks/CxbRue-5.js";function d(r,t){var o=n(),a=m(o);i(a,()=>t.children),p(r,o)}export{d as component};
|