weifuwu 0.95.0 → 0.95.2

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.
@@ -1,4 +1,4 @@
1
- var Ko=Object.defineProperty;var Wr=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(r){throw t=[r],r}};var zo=(n,e)=>{for(var t in e)Ko(n,t,{get:e[t],enumerable:!0})};function xt(n,e){return!n.startsWith("aria-")||typeof e!="boolean"?null:e?"true":"false"}function nr(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}let r=xt(e,t);if(r!==null){n.setAttribute(e,r);return}if(ua.has(e)){n.setAttribute(e,t?"true":"false");return}if(t===!1){n.removeAttribute(e);return}if(e==="class"||e==="className"){n.setAttribute("class",String(t));return}if(typeof t=="boolean"){n.setAttribute(e,"");return}n.setAttribute(e,String(t))}var ua,Yt=Wr(()=>{"use strict";ua=new Set(["draggable","contenteditable","spellcheck"])});var ho={};zo(ho,{VOID_ELEMENTS:()=>fo,attrsToHtml:()=>go,commandToHtml:()=>Ya,escapeHtml:()=>it,htmlDocument:()=>el,kebab:()=>mo});function it(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function mo(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function go(n){let e=[];for(let[t,r]of Object.entries(n)){let s=xt(t,r);if(s!==null){e.push(`${t}="${s}"`);continue}if(!(r==null||r===!1))if(t==="style"&&r&&typeof r=="object"){let o=Object.entries(r).filter(([,i])=>i!=null&&i!==!1).map(([i,a])=>`${mo(i)}: ${a}`).join("; ");o&&e.push(`style="${it(o)}"`)}else typeof r=="boolean"?e.push(`${t}=""`):e.push(`${t}="${it(String(r))}"`)}return e.length?" "+e.join(" "):""}function Ya(){let n=[];return new TransformStream({transform(e,t){switch(e.op){case"create":n.push(e.tag),t.enqueue(`<${e.tag}${go(e.attrs)}>`);break;case"createText":t.enqueue(it(e.value));break;case"createAnchor":t.enqueue("<!--wf-hole-->");break;case"close":{let r=n.pop();r&&!fo.has(r)&&t.enqueue(`</${r}>`);break}case"setText":t.enqueue(it(e.value));break;case"insert":case"remove":case"setProp":case"ref":case"unref":case"mount":case"unmount":case"move":case"done":break}}})}function el(n,e={}){let t=e.rootId??"root",r=e.data?`<script>window.__DATA__=${JSON.stringify(e.data).replace(/</g,"\\u003c")}</script>`:"";return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${it(e.title??"")}</title></head><body><div id="${t}">${n}</div>${r}</body></html>`}var fo,wo=Wr(()=>{"use strict";Yt();fo=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"])});import Zo from"node:http";import Jo from"node:crypto";function Ur(n){let e;try{e=new URL(n.url)}catch{return{ok:!1,reason:"invalid-url"}}let t=hn(e);try{decodeURI(e.pathname)}catch{return{ok:!1,reason:"malformed-encoding"}}for(let r of Lr(e.pathname))try{decodeURIComponent(r)}catch{return{ok:!1,reason:"malformed-encoding"}}return{ok:!0,segments:Lr(e.pathname),pathname:e.pathname,query:t}}function Lr(n){return n.split("/").filter(Boolean)}function Vr(n){return n?{...n.params}:{}}function hn(n){return Object.fromEntries(n.searchParams)}var D=class extends Error{status;constructor(e,t){super(e),this.name="HttpError",this.status=t}};var Hr=10*1024*1024,Xo=Buffer.alloc(0);async function Yo(n,e){let t=e??Hr;if(t>0&&parseInt(n.headers["content-length"]??"0",10)>t)throw new D("Request body too large",413);let r=[],s=0;for await(let o of n){if(s+=o.byteLength,t>0&&s>t)throw new D("Request body too large",413);r.push(o)}return Buffer.concat(r)}function ei(n,e){let t=new URL(n.url??"/","http://localhost"),r=hn(t),s={};for(let[i,a]of Object.entries(n.headers))a!==void 0&&(s[i]=Array.isArray(a)?a.join(", "):a);return[new Request(t.href,{method:n.method?.toUpperCase()??"GET",headers:s,body:n.method!=="GET"&&n.method!=="HEAD"&&e.length>0?e:null}),r]}async function ti(n,e,t){let r={};if(e.headers.forEach((s,o)=>{if(o.toLowerCase()==="set-cookie"){let i=r[o];r[o]=i?Array.isArray(i)?[...i,s]:[i,s]:s}else r[o]=s}),t?.traceId&&!r["x-trace-id"]&&(r["x-trace-id"]=t.traceId),n.writeHead(e.status,e.statusText,r),e.body){let s=e.body.getReader(),o=new Promise(a=>{n.once("close",()=>a("closed"))});n.on("error",()=>{});let i=()=>s.cancel(new Error("client disconnected")).catch(()=>{});try{for(;;){let a=await Promise.race([s.read().then(u=>({kind:"chunk",r:u})),o]);if(a==="closed"||n.destroyed){await i();return}let{done:l,value:c}=a.r;if(l)break;if(!n.write(c)){let u=new Promise(d=>n.once("drain",()=>d("drain")));if(await Promise.race([u,o])==="closed"){await i();return}}}n.end()}catch(a){n.destroyed||n.destroy(a instanceof Error?a:void 0)}finally{s.releaseLock()}return}n.end()}function Br(n,e){let t=n.handler(),r=e?.port??0,s=e?.hostname??"0.0.0.0",o=new Set;async function i(f,g){let y=f.headers["x-trace-id"]||f.headers.traceparent?.split("-")[1]||Jo.randomUUID();try{let k=Number(f.headers["content-length"]??"0")>0||f.headers["transfer-encoding"]!==void 0?await Yo(f,e?.maxBodySize):Xo,[w,b]=ei(f,k),x=await t(w,{params:{},query:b});await ti(g,x,{traceId:y})}catch(v){let k=v instanceof Error?v:new Error(String(v));if(k instanceof D){g.writeHead(k.status,{"Content-Type":"application/json"}),g.end(JSON.stringify({error:k.message}));return}let w=f.url??"/",b=f.method??"GET";console.error(`[serve] ${b} ${w}:`,k.stack||k.message),g.writeHead(500,{"Content-Type":"application/json"}),g.end(JSON.stringify({error:"Internal Server Error"}))}}let a=Zo.createServer((f,g)=>{let v=i(f,g).then(()=>{},()=>{});o.add(v),v.then(()=>{o.delete(v)})});a.timeout=e?.timeout??12e4,a.keepAliveTimeout=e?.keepAliveTimeout??5e3,a.headersTimeout=e?.headersTimeout??6e3;let l=null;if(n.hasWsRoutes()){if(!e?.wsAdapter)throw new Error("serve(): \u8DEF\u7531\u6CE8\u518C\u4E86 WS \u7AEF\u70B9\u4F46\u672A\u63D0\u4F9B wsAdapter\u2014\u2014core \u4E0D\u542B ws \u5B9E\u73B0\uFF1B\u4ECE weifuwu \u5BFC\u5165 serve\uFF08\u81EA\u52A8\u6CE8\u5165\uFF09\uFF0C\u6216\u4F20 options.wsAdapter");l=e.wsAdapter(),a.on("upgrade",n.websocketHandler(l))}let c,u=new Promise(f=>{c=f}),d=null;if(e?.shutdown!==!1){let f=!1,g=async()=>{f||(f=!0,console.log("weifuwu shutting down..."),await m().catch(()=>{}),process.exit(0))};d=g,process.on("SIGTERM",g),process.on("SIGINT",g)}let p=0,h="";if(e?.signal){if(e.signal.aborted)return p=0,h="",a.close(),c(),{stop:()=>Promise.resolve(),close:()=>Promise.resolve(),ready:u,get port(){return 0},get hostname(){return s}};e.signal.addEventListener("abort",()=>{a.close()},{once:!0})}a.on("error",f=>{console.error("weifuwu server error:",f.message||f),a.close(),p=0,c()}),a.listen(r,s,()=>{let f=a.address();f&&typeof f!="string"&&(p=f.port,h=f.address),c(),console.log(`weifuwu listening on http://${h==="0.0.0.0"?"localhost":h||"localhost"}:${p}`)});async function m(f=2e3){if(d&&(process.off("SIGTERM",d),process.off("SIGINT",d),d=null),a.close(),a.closeIdleConnections(),o.size>0&&f>0&&await Promise.race([Promise.allSettled([...o]).then(()=>{}),new Promise(g=>setTimeout(g,f))]),l?.shutdown)try{await l.shutdown()}catch{}await n.close().catch(()=>{}),a.closeAllConnections()}return{close:m,stop:m,ready:u,get port(){return a.listening?p:0},get hostname(){return a.listening&&h||s}}}import{createHash as si}from"node:crypto";var V={CONT:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},ni=Buffer.alloc(0);function Ce(n,e=ni,t={}){let r=Buffer.isBuffer(e)?e:Buffer.from(e,"utf8"),s=t.fin!==!1,o=t.mask===!0,i=r.length,a;if(i<126?(a=Buffer.allocUnsafe(2),a[1]=i):i<65536?(a=Buffer.allocUnsafe(4),a[1]=126,a.writeUInt16BE(i,2)):(a=Buffer.allocUnsafe(10),a[1]=127,a.writeUInt32BE(Math.floor(i/2**32),2),a.writeUInt32BE(i>>>0,6)),a[0]=(s?128:0)|n&15,!o)return Buffer.concat([a,r]);a[1]|=128;let l=Buffer.allocUnsafe(4);for(let u=0;u<4;u++)l[u]=Math.random()*256|0;let c=Buffer.allocUnsafe(i);for(let u=0;u<i;u++)c[u]=r[u]^l[u&3];return Buffer.concat([a,l,c])}function wn(n,e=100*1024*1024,t=!0){let r=[],s=0,o=(i,a)=>({frames:r,rest:n.slice(s),error:{code:i,reason:a}});for(;!(n.length-s<2);){let i=n[s],a=n[s+1],l=(i&128)!==0,c=i&112,u=i&15,d=(a&128)!==0,p=a&127;if(c!==0)return o(1002,"RSV must be 0");if(u>10||u>2&&u<8)return o(1002,`invalid opcode ${u}`);if(t&&!d)return o(1002,"client frame must be masked");if(u>=8){if(!l)return o(1002,"control frame must not be fragmented");if(p>125)return o(1002,"control frame payload > 125")}let h=2;if(p===126){if(n.length-s<4)break;if(p=n.readUInt16BE(s+2),p<126)return o(1002,"non-minimal length encoding");h=4}else if(p===127){if(n.length-s<10)break;let f=n.readUInt32BE(s+2),g=n.readUInt32BE(s+6);if(f&2147483648)return o(1002,"length high bit must be 0");let y=f*2**32+g;if(y<=65535)return o(1002,"non-minimal length encoding");p=y,h=10}if(p>e)return o(1009,`frame payload ${p} exceeds maxPayload ${e}`);let m=h+(d?4:0)+p;if(n.length-s<m)break;if(d){let f=n.slice(s+h,s+h+4),g=Buffer.allocUnsafe(p);for(let y=0;y<p;y++)g[y]=n[s+h+4+y]^f[y&3];r.push({fin:l,opcode:u,payload:g})}else r.push({fin:l,opcode:u,payload:Buffer.from(n.subarray(s+h,s+h+p))});s+=m}return{frames:r,rest:n.slice(s)}}var Dt=Buffer.alloc(0);function ri(n){return n>=1e3&&n<=1003||n>=1007&&n<=1011||n>=3e3&&n<=4999}function yn(n,e=""){if(n===void 0)return Dt;let t=Buffer.from(e,"utf8").subarray(0,123),r=Buffer.allocUnsafe(2+t.length);return r.writeUInt16BE(n,0),t.copy(r,2),r}var dt=class{CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;readyState=1;socket;opts;listeners=new Map;buf=Dt;fragmentOpcode=null;fragments=[];fragmentBytes=0;textParts=[];textDecoder=null;closeSent=!1;closed=!1;closeTimer=null;closedEvent=!1;constructor(e,t={}){this.socket=e,this.opts={maxPayload:t.maxPayload??100*1024*1024,closeTimeoutMs:t.closeTimeoutMs??5e3},e.on("data",r=>this.feed(r)),e.on("end",()=>this.destroy()),e.on("close",()=>this.destroy()),e.on("error",r=>{this.emit("error",r),this.destroy()})}on(e,t){let r=this.listeners.get(e);return r||this.listeners.set(e,r=new Set),r.add(t),this}once(e,t){let r=(...s)=>{this.off(e,r),t(...s)};return this.on(e,r)}off(e,t){return this.listeners.get(e)?.delete(t),this}addEventListener(e,t){this.on(e,t)}removeEventListener(e,t){this.off(e,t)}emit(e,...t){let r=this.listeners.get(e);if(r)for(let s of[...r])try{s(...t)}catch(o){e!=="error"&&this.emit("error",o instanceof Error?o:new Error(String(o)))}}send(e){if(this.readyState!==this.OPEN)return;let t=typeof e=="string";this.write(Ce(t?V.TEXT:V.BINARY,e))}ping(e=Dt){if(this.readyState!==this.OPEN)return;let t=Buffer.isBuffer(e)?e:typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(String(e),"utf8");this.write(Ce(V.PING,t))}close(e=1e3,t=""){this.closeSent||this.closed||(this.closeSent=!0,this.readyState=this.CLOSING,this.write(Ce(V.CLOSE,yn(e,t))),this.closeTimer=setTimeout(()=>this.destroy(),this.opts.closeTimeoutMs))}write(e){this.socket.destroyed||this.socket.write(e)}destroy(){this.closed||(this.closed=!0,this.readyState=this.CLOSED,this.closeTimer&&clearTimeout(this.closeTimer),this.socket.destroy(),this.emitClose(1006,""))}emitClose(e,t){this.closedEvent||(this.closedEvent=!0,this.emit("close",e,t))}feed(e){if(this.closed||this.readyState===this.CLOSED)return;this.buf=this.buf.length?Buffer.concat([this.buf,e]):e;let{frames:t,rest:r,error:s}=wn(this.buf,this.opts.maxPayload);if(this.buf=r,s){this.fail(s.code,s.reason);return}for(let o of t){if(this.closed||this.readyState===this.CLOSED)return;this.handleFrame(o)}}handleFrame(e){switch(e.opcode){case V.TEXT:case V.BINARY:return this.fragmentOpcode!==null?this.fail(1002,"expected continuation frame"):e.fin?this.deliver(e.opcode,[e.payload]):(this.fragmentOpcode=e.opcode,this.fragments=[e.payload],this.fragmentBytes=e.payload.length,this.textParts=[],this.textDecoder=e.opcode===V.TEXT?new TextDecoder("utf-8",{fatal:!0}):null,e.opcode===V.TEXT&&!this.feedText(e.payload,!1),void 0);case V.CONT:{if(this.fragmentOpcode===null)return this.fail(1002,"unexpected continuation frame");if(this.fragmentBytes+=e.payload.length,this.fragmentBytes>this.opts.maxPayload)return this.fail(1009,"message exceeds maxPayload");if(this.fragmentOpcode===V.TEXT&&!this.feedText(e.payload,e.fin))return;if(this.fragments.push(e.payload),e.fin){let t=this.fragmentOpcode;this.fragmentOpcode=null,this.deliver(t,this.fragments)}return}case V.PING:this.write(Ce(V.PONG,e.payload)),this.emit("ping",e.payload);return;case V.PONG:this.emit("pong",e.payload);return;case V.CLOSE:this.handleClose(e.payload);return}}feedText(e,t){let r=this.textDecoder;if(!r)return!0;try{return this.textParts.push(r.decode(e,{stream:!t})),!0}catch{return this.fail(1007,"invalid utf-8 in text message"),!1}}deliver(e,t){if(!this.closed)if(e===V.TEXT){let r;if(this.textParts.length||this.textDecoder){try{r=this.textParts.join("")+(this.textDecoder?.decode()??"")}catch{return this.fail(1007,"invalid utf-8 in text message")}this.textParts=[],this.textDecoder=null}else try{r=new TextDecoder("utf-8",{fatal:!0}).decode(t[0]??Dt)}catch{return this.fail(1007,"invalid utf-8 in text message")}this.emit("message",r,!1)}else this.emit("message",t.length===1?t[0]:Buffer.concat(t),!0)}handleClose(e){let t=1005,r="";if(e.length===1)return this.fail(1002,"close payload length 1");if(e.length>=2){if(t=e.readUInt16BE(0),!ri(t))return this.fail(1002,`invalid close code ${t}`);try{r=new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(2))}catch{return this.fail(1007,"invalid utf-8 in close reason")}}this.closeSent||(this.closeSent=!0,this.readyState=this.CLOSING,this.write(Ce(V.CLOSE,yn(t===1005?void 0:t,r)))),this.closed=!0,this.readyState=this.CLOSED,this.closeTimer&&clearTimeout(this.closeTimer),this.socket.writable&&this.socket.end(),this.emitClose(t,r)}fail(e,t){if(this.closed)return;this.closed=!0,this.readyState=this.CLOSED,this.closeTimer&&clearTimeout(this.closeTimer);let r=Ce(V.CLOSE,yn(e,t));this.socket.destroyed||this.socket.end(r),this.emitClose(e,t)}};var oi="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",ii=/^[+/0-9A-Za-z]{22}==$/;function bn(n={}){let e=new Set;return{handleUpgrade(t,r,s,o){let i=String(t.headers["sec-websocket-key"]??""),a=String(t.headers.upgrade??"").toLowerCase(),l=String(t.headers.connection??"").toLowerCase();if(String(t.headers["sec-websocket-version"]??"")!=="13"&&i){r.end(`HTTP/1.1 426 Upgrade Required\r
1
+ var Ko=Object.defineProperty;var Lr=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(r){throw t=[r],r}};var zo=(n,e)=>{for(var t in e)Ko(n,t,{get:e[t],enumerable:!0})};function xt(n,e){return!n.startsWith("aria-")||typeof e!="boolean"?null:e?"true":"false"}function nr(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}let r=xt(e,t);if(r!==null){n.setAttribute(e,r);return}if(ua.has(e)){n.setAttribute(e,t?"true":"false");return}if(t===!1){n.removeAttribute(e);return}if(e==="class"||e==="className"){n.setAttribute("class",String(t));return}if(typeof t=="boolean"){n.setAttribute(e,"");return}n.setAttribute(e,String(t))}var ua,Yt=Lr(()=>{"use strict";ua=new Set(["draggable","contenteditable","spellcheck"])});var wo={};zo(wo,{VOID_ELEMENTS:()=>mo,attrsToHtml:()=>ho,commandToHtml:()=>Ya,escapeHtml:()=>at,htmlDocument:()=>el,kebab:()=>go});function at(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function go(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function ho(n){let e=[];for(let[t,r]of Object.entries(n)){let s=xt(t,r);if(s!==null){e.push(`${t}="${s}"`);continue}if(!(r==null||r===!1))if(t==="style"&&r&&typeof r=="object"){let o=Object.entries(r).filter(([,i])=>i!=null&&i!==!1).map(([i,a])=>`${go(i)}: ${a}`).join("; ");o&&e.push(`style="${at(o)}"`)}else typeof r=="boolean"?e.push(`${t}=""`):e.push(`${t}="${at(String(r))}"`)}return e.length?" "+e.join(" "):""}function Ya(){let n=[];return new TransformStream({transform(e,t){switch(e.op){case"create":n.push(e.tag),t.enqueue(`<${e.tag}${ho(e.attrs)}>`);break;case"createText":t.enqueue(at(e.value));break;case"createAnchor":t.enqueue("<!--wf-hole-->");break;case"close":{let r=n.pop();r&&!mo.has(r)&&t.enqueue(`</${r}>`);break}case"setText":t.enqueue(at(e.value));break;case"insert":case"remove":case"setProp":case"ref":case"unref":case"mount":case"unmount":case"move":case"done":break}}})}function el(n,e={}){let t=e.rootId??"root",r=e.data?`<script>window.__DATA__=${JSON.stringify(e.data).replace(/</g,"\\u003c")}</script>`:"";return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${at(e.title??"")}</title></head><body><div id="${t}">${n}</div>${r}</body></html>`}var mo,yo=Lr(()=>{"use strict";Yt();mo=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"])});import Zo from"node:http";import Jo from"node:crypto";function Vr(n){let e;try{e=new URL(n.url)}catch{return{ok:!1,reason:"invalid-url"}}let t=hn(e);try{decodeURI(e.pathname)}catch{return{ok:!1,reason:"malformed-encoding"}}for(let r of Ur(e.pathname))try{decodeURIComponent(r)}catch{return{ok:!1,reason:"malformed-encoding"}}return{ok:!0,segments:Ur(e.pathname),pathname:e.pathname,query:t}}function Ur(n){return n.split("/").filter(Boolean)}function Hr(n){return n?{...n.params}:{}}function hn(n){return Object.fromEntries(n.searchParams)}var D=class extends Error{status;constructor(e,t){super(e),this.name="HttpError",this.status=t}};var Br=10*1024*1024,Xo=Buffer.alloc(0);async function Yo(n,e){let t=e??Br;if(t>0&&parseInt(n.headers["content-length"]??"0",10)>t)throw new D("Request body too large",413);let r=[],s=0;for await(let o of n){if(s+=o.byteLength,t>0&&s>t)throw new D("Request body too large",413);r.push(o)}return Buffer.concat(r)}function ei(n,e){let t=new URL(n.url??"/","http://localhost"),r=hn(t),s={};for(let[i,a]of Object.entries(n.headers))a!==void 0&&(s[i]=Array.isArray(a)?a.join(", "):a);return[new Request(t.href,{method:n.method?.toUpperCase()??"GET",headers:s,body:n.method!=="GET"&&n.method!=="HEAD"&&e.length>0?e:null}),r]}async function ti(n,e,t){let r={};if(e.headers.forEach((s,o)=>{if(o.toLowerCase()==="set-cookie"){let i=r[o];r[o]=i?Array.isArray(i)?[...i,s]:[i,s]:s}else r[o]=s}),t?.traceId&&!r["x-trace-id"]&&(r["x-trace-id"]=t.traceId),n.writeHead(e.status,e.statusText,r),e.body){let s=e.body.getReader(),o=new Promise(a=>{n.once("close",()=>a("closed"))});n.on("error",()=>{});let i=()=>s.cancel(new Error("client disconnected")).catch(()=>{});try{for(;;){let a=await Promise.race([s.read().then(u=>({kind:"chunk",r:u})),o]);if(a==="closed"||n.destroyed){await i();return}let{done:l,value:c}=a.r;if(l)break;if(!n.write(c)){let u=new Promise(d=>n.once("drain",()=>d("drain")));if(await Promise.race([u,o])==="closed"){await i();return}}}n.end()}catch(a){n.destroyed||n.destroy(a instanceof Error?a:void 0)}finally{s.releaseLock()}return}n.end()}function qr(n,e){let t=n.handler(),r=e?.port??0,s=e?.hostname??"0.0.0.0",o=new Set;async function i(f,g){let y=f.headers["x-trace-id"]||f.headers.traceparent?.split("-")[1]||Jo.randomUUID();try{let k=Number(f.headers["content-length"]??"0")>0||f.headers["transfer-encoding"]!==void 0?await Yo(f,e?.maxBodySize):Xo,[w,b]=ei(f,k),x=await t(w,{params:{},query:b});await ti(g,x,{traceId:y})}catch(v){let k=v instanceof Error?v:new Error(String(v));if(k instanceof D){g.writeHead(k.status,{"Content-Type":"application/json"}),g.end(JSON.stringify({error:k.message}));return}let w=f.url??"/",b=f.method??"GET";console.error(`[serve] ${b} ${w}:`,k.stack||k.message),g.writeHead(500,{"Content-Type":"application/json"}),g.end(JSON.stringify({error:"Internal Server Error"}))}}let a=Zo.createServer((f,g)=>{let v=i(f,g).then(()=>{},()=>{});o.add(v),v.then(()=>{o.delete(v)})});a.timeout=e?.timeout??12e4,a.keepAliveTimeout=e?.keepAliveTimeout??5e3,a.headersTimeout=e?.headersTimeout??6e3;let l=null;if(n.hasWsRoutes()){if(!e?.wsAdapter)throw new Error("serve(): \u8DEF\u7531\u6CE8\u518C\u4E86 WS \u7AEF\u70B9\u4F46\u672A\u63D0\u4F9B wsAdapter\u2014\u2014core \u4E0D\u542B ws \u5B9E\u73B0\uFF1B\u4ECE weifuwu \u5BFC\u5165 serve\uFF08\u81EA\u52A8\u6CE8\u5165\uFF09\uFF0C\u6216\u4F20 options.wsAdapter");l=e.wsAdapter(),a.on("upgrade",n.websocketHandler(l))}let c,u=new Promise(f=>{c=f}),d=null;if(e?.shutdown!==!1){let f=!1,g=async()=>{f||(f=!0,console.log("weifuwu shutting down..."),await m().catch(()=>{}),process.exit(0))};d=g,process.on("SIGTERM",g),process.on("SIGINT",g)}let p=0,h="";if(e?.signal){if(e.signal.aborted)return p=0,h="",a.close(),c(),{stop:()=>Promise.resolve(),close:()=>Promise.resolve(),ready:u,get port(){return 0},get hostname(){return s}};e.signal.addEventListener("abort",()=>{a.close()},{once:!0})}a.on("error",f=>{console.error("weifuwu server error:",f.message||f),a.close(),p=0,c()}),a.listen(r,s,()=>{let f=a.address();f&&typeof f!="string"&&(p=f.port,h=f.address),c(),console.log(`weifuwu listening on http://${h==="0.0.0.0"?"localhost":h||"localhost"}:${p}`)});async function m(f=2e3){if(d&&(process.off("SIGTERM",d),process.off("SIGINT",d),d=null),a.close(),a.closeIdleConnections(),o.size>0&&f>0&&await Promise.race([Promise.allSettled([...o]).then(()=>{}),new Promise(g=>setTimeout(g,f))]),l?.shutdown)try{await l.shutdown()}catch{}await n.close().catch(()=>{}),a.closeAllConnections()}return{close:m,stop:m,ready:u,get port(){return a.listening?p:0},get hostname(){return a.listening&&h||s}}}import{createHash as si}from"node:crypto";var V={CONT:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},ni=Buffer.alloc(0);function Ce(n,e=ni,t={}){let r=Buffer.isBuffer(e)?e:Buffer.from(e,"utf8"),s=t.fin!==!1,o=t.mask===!0,i=r.length,a;if(i<126?(a=Buffer.allocUnsafe(2),a[1]=i):i<65536?(a=Buffer.allocUnsafe(4),a[1]=126,a.writeUInt16BE(i,2)):(a=Buffer.allocUnsafe(10),a[1]=127,a.writeUInt32BE(Math.floor(i/2**32),2),a.writeUInt32BE(i>>>0,6)),a[0]=(s?128:0)|n&15,!o)return Buffer.concat([a,r]);a[1]|=128;let l=Buffer.allocUnsafe(4);for(let u=0;u<4;u++)l[u]=Math.random()*256|0;let c=Buffer.allocUnsafe(i);for(let u=0;u<i;u++)c[u]=r[u]^l[u&3];return Buffer.concat([a,l,c])}function wn(n,e=100*1024*1024,t=!0){let r=[],s=0,o=(i,a)=>({frames:r,rest:n.slice(s),error:{code:i,reason:a}});for(;!(n.length-s<2);){let i=n[s],a=n[s+1],l=(i&128)!==0,c=i&112,u=i&15,d=(a&128)!==0,p=a&127;if(c!==0)return o(1002,"RSV must be 0");if(u>10||u>2&&u<8)return o(1002,`invalid opcode ${u}`);if(t&&!d)return o(1002,"client frame must be masked");if(u>=8){if(!l)return o(1002,"control frame must not be fragmented");if(p>125)return o(1002,"control frame payload > 125")}let h=2;if(p===126){if(n.length-s<4)break;if(p=n.readUInt16BE(s+2),p<126)return o(1002,"non-minimal length encoding");h=4}else if(p===127){if(n.length-s<10)break;let f=n.readUInt32BE(s+2),g=n.readUInt32BE(s+6);if(f&2147483648)return o(1002,"length high bit must be 0");let y=f*2**32+g;if(y<=65535)return o(1002,"non-minimal length encoding");p=y,h=10}if(p>e)return o(1009,`frame payload ${p} exceeds maxPayload ${e}`);let m=h+(d?4:0)+p;if(n.length-s<m)break;if(d){let f=n.slice(s+h,s+h+4),g=Buffer.allocUnsafe(p);for(let y=0;y<p;y++)g[y]=n[s+h+4+y]^f[y&3];r.push({fin:l,opcode:u,payload:g})}else r.push({fin:l,opcode:u,payload:Buffer.from(n.subarray(s+h,s+h+p))});s+=m}return{frames:r,rest:n.slice(s)}}var Dt=Buffer.alloc(0);function ri(n){return n>=1e3&&n<=1003||n>=1007&&n<=1011||n>=3e3&&n<=4999}function yn(n,e=""){if(n===void 0)return Dt;let t=Buffer.from(e,"utf8").subarray(0,123),r=Buffer.allocUnsafe(2+t.length);return r.writeUInt16BE(n,0),t.copy(r,2),r}var dt=class{CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;readyState=1;socket;opts;listeners=new Map;buf=Dt;fragmentOpcode=null;fragments=[];fragmentBytes=0;textParts=[];textDecoder=null;closeSent=!1;closed=!1;closeTimer=null;closedEvent=!1;constructor(e,t={}){this.socket=e,this.opts={maxPayload:t.maxPayload??100*1024*1024,closeTimeoutMs:t.closeTimeoutMs??5e3},e.on("data",r=>this.feed(r)),e.on("end",()=>this.destroy()),e.on("close",()=>this.destroy()),e.on("error",r=>{this.emit("error",r),this.destroy()})}on(e,t){let r=this.listeners.get(e);return r||this.listeners.set(e,r=new Set),r.add(t),this}once(e,t){let r=(...s)=>{this.off(e,r),t(...s)};return this.on(e,r)}off(e,t){return this.listeners.get(e)?.delete(t),this}addEventListener(e,t){this.on(e,t)}removeEventListener(e,t){this.off(e,t)}emit(e,...t){let r=this.listeners.get(e);if(r)for(let s of[...r])try{s(...t)}catch(o){e!=="error"&&this.emit("error",o instanceof Error?o:new Error(String(o)))}}send(e){if(this.readyState!==this.OPEN)return;let t=typeof e=="string";this.write(Ce(t?V.TEXT:V.BINARY,e))}ping(e=Dt){if(this.readyState!==this.OPEN)return;let t=Buffer.isBuffer(e)?e:typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(String(e),"utf8");this.write(Ce(V.PING,t))}close(e=1e3,t=""){this.closeSent||this.closed||(this.closeSent=!0,this.readyState=this.CLOSING,this.write(Ce(V.CLOSE,yn(e,t))),this.closeTimer=setTimeout(()=>this.destroy(),this.opts.closeTimeoutMs))}write(e){this.socket.destroyed||this.socket.write(e)}destroy(){this.closed||(this.closed=!0,this.readyState=this.CLOSED,this.closeTimer&&clearTimeout(this.closeTimer),this.socket.destroy(),this.emitClose(1006,""))}emitClose(e,t){this.closedEvent||(this.closedEvent=!0,this.emit("close",e,t))}feed(e){if(this.closed||this.readyState===this.CLOSED)return;this.buf=this.buf.length?Buffer.concat([this.buf,e]):e;let{frames:t,rest:r,error:s}=wn(this.buf,this.opts.maxPayload);if(this.buf=r,s){this.fail(s.code,s.reason);return}for(let o of t){if(this.closed||this.readyState===this.CLOSED)return;this.handleFrame(o)}}handleFrame(e){switch(e.opcode){case V.TEXT:case V.BINARY:return this.fragmentOpcode!==null?this.fail(1002,"expected continuation frame"):e.fin?this.deliver(e.opcode,[e.payload]):(this.fragmentOpcode=e.opcode,this.fragments=[e.payload],this.fragmentBytes=e.payload.length,this.textParts=[],this.textDecoder=e.opcode===V.TEXT?new TextDecoder("utf-8",{fatal:!0}):null,e.opcode===V.TEXT&&!this.feedText(e.payload,!1),void 0);case V.CONT:{if(this.fragmentOpcode===null)return this.fail(1002,"unexpected continuation frame");if(this.fragmentBytes+=e.payload.length,this.fragmentBytes>this.opts.maxPayload)return this.fail(1009,"message exceeds maxPayload");if(this.fragmentOpcode===V.TEXT&&!this.feedText(e.payload,e.fin))return;if(this.fragments.push(e.payload),e.fin){let t=this.fragmentOpcode;this.fragmentOpcode=null,this.deliver(t,this.fragments)}return}case V.PING:this.write(Ce(V.PONG,e.payload)),this.emit("ping",e.payload);return;case V.PONG:this.emit("pong",e.payload);return;case V.CLOSE:this.handleClose(e.payload);return}}feedText(e,t){let r=this.textDecoder;if(!r)return!0;try{return this.textParts.push(r.decode(e,{stream:!t})),!0}catch{return this.fail(1007,"invalid utf-8 in text message"),!1}}deliver(e,t){if(!this.closed)if(e===V.TEXT){let r;if(this.textParts.length||this.textDecoder){try{r=this.textParts.join("")+(this.textDecoder?.decode()??"")}catch{return this.fail(1007,"invalid utf-8 in text message")}this.textParts=[],this.textDecoder=null}else try{r=new TextDecoder("utf-8",{fatal:!0}).decode(t[0]??Dt)}catch{return this.fail(1007,"invalid utf-8 in text message")}this.emit("message",r,!1)}else this.emit("message",t.length===1?t[0]:Buffer.concat(t),!0)}handleClose(e){let t=1005,r="";if(e.length===1)return this.fail(1002,"close payload length 1");if(e.length>=2){if(t=e.readUInt16BE(0),!ri(t))return this.fail(1002,`invalid close code ${t}`);try{r=new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(2))}catch{return this.fail(1007,"invalid utf-8 in close reason")}}this.closeSent||(this.closeSent=!0,this.readyState=this.CLOSING,this.write(Ce(V.CLOSE,yn(t===1005?void 0:t,r)))),this.closed=!0,this.readyState=this.CLOSED,this.closeTimer&&clearTimeout(this.closeTimer),this.socket.writable&&this.socket.end(),this.emitClose(t,r)}fail(e,t){if(this.closed)return;this.closed=!0,this.readyState=this.CLOSED,this.closeTimer&&clearTimeout(this.closeTimer);let r=Ce(V.CLOSE,yn(e,t));this.socket.destroyed||this.socket.end(r),this.emitClose(e,t)}};var oi="258EAFA5-E914-47DA-95CA-C5AB0DC85B11",ii=/^[+/0-9A-Za-z]{22}==$/;function bn(n={}){let e=new Set;return{handleUpgrade(t,r,s,o){let i=String(t.headers["sec-websocket-key"]??""),a=String(t.headers.upgrade??"").toLowerCase(),l=String(t.headers.connection??"").toLowerCase();if(String(t.headers["sec-websocket-version"]??"")!=="13"&&i){r.end(`HTTP/1.1 426 Upgrade Required\r
2
2
  Sec-WebSocket-Version: 13\r
3
3
  Connection: close\r
4
4
  Content-Length: 0\r
@@ -12,8 +12,8 @@ Upgrade: websocket\r
12
12
  Connection: Upgrade\r
13
13
  Sec-WebSocket-Accept: ${u}\r
14
14
  \r
15
- `);let d=new dt(r,n);e.add(d),d.on("close",()=>e.delete(d)),o(d),s?.length&&d.feed(s)},async shutdown(){if(e.size===0)return;let t=[...e],r=new Promise(s=>{let o=t.length,i=setTimeout(s,500);for(let a of t)a.once("close",()=>{--o===0&&(clearTimeout(i),s())})});for(let s of t)try{s.close(1001,"server shutting down")}catch{}await r}}}var he=class extends Error{kind;code;cause;constructor(e,t,r){super(t),this.name="DbError",this.kind=e,this.code=r?.code,this.cause=r?.cause}},$=class extends he{constructor(e,t){super("protocol",t??`${e} is not supported by weifuwu/db`,{code:"UNSUPPORTED"}),this.name="ProtocolError"}};var q=class extends he{constructor(e){super("validation",e),this.name="ValidationError"}};function we(n,e){let t=n instanceof Error?n.message:String(n),r;if(n instanceof D)return Response.json({error:t},{status:e??n.status});if(n instanceof he){let s=e??(n.code==="23505"?409:400);return r=n.code==="23505"?"conflict":n.kind,Response.json({error:t,code:r},{status:s})}return Response.json({error:t},{status:e??400})}function vn(n,e,t){if(!e)return()=>{};let r=s=>{let o=s instanceof Error?s:new Error(String(s));t?t(o):console.error(`[ws] ${n} handler error:`,o.stack||o.message)};return(...s)=>{try{let o=e(...s);o&&typeof o.catch=="function"&&o.catch(r)}catch(o){r(o)}}}function qr(n,e,t){return(r,s,o)=>{let i=r.url?.split("/").filter(Boolean)??[],a=e(i);if(!a){s.destroy();return}n.handleUpgrade(r,s,o,l=>{let c=new URL(r.url??"/","http://localhost"),u={params:a.params,query:Object.fromEntries(c.searchParams),hub:t},d=a.handler,p=d.error?g=>{try{let y=d.error(l,u,g);y&&typeof y.catch=="function"&&y.catch(v=>console.error("[ws] error handler failed:",v))}catch(y){console.error("[ws] error handler failed:",y)}}:null,h=vn("open",d.open,p),m=vn("message",d.message,p),f=vn("close",d.close,p);h(l,u),l.on("message",(g,y)=>{let v=y===!1&&typeof g!="string"?String(g):g;m(l,u,v)}),l.on("close",()=>f(l,u)),l.on("error",g=>{let y=g;p?p(y):console.error("[ws] connection error:",y.message)})})}}function pt(){return{children:new Map}}function Sn(n){return n.split("/").filter(Boolean)}function ai(n,e,t){let r=e.slice(1);if(!n.children.has(":")){let o=t();o.param=r,n.children.set(":",o)}let s=n.children.get(":");if(s.param!==r)throw new Error(`[router] param conflict: ":${s.param}" already registered, cannot register ":${r}"`);return s}function li(n,e,t){return e==="*"?(n.wildcard=!0,n):e.startsWith(":")?ai(n,e,t):(n.children.has(e)||n.children.set(e,t()),n.children.get(e))}function Gr(n,e){let t=Sn(e),r=n;for(let s of t){if(!r)return null;if(s==="*")return r;r=s.startsWith(":")?r.children.get(":")??null:r.children.get(s)??null}return r}function Wt(n,e,t){let r=Sn(e),s=n;for(let o of r){if(o==="*")return s.wildcard=!0,s.wildcardValue=t,s;s=li(s,o,()=>pt())}return s.value=t,s}function jt(n,e,t,r,s="value"){if(t===e.length){let l=s==="value"?n.value:n.wildcardValue;return l!==void 0?{value:l,params:{...r},node:n}:null}let o=e[t],i=n.children.get(o);if(i){let l=jt(i,e,t+1,r,s);if(l)return l}let a=n.children.get(":");if(a?.param){let l={...r,[a.param]:decodeURIComponent(o)},c=jt(a,e,t+1,l,s);if(c)return c}return null}function ft(n,e){let t=jt(n,e,0,{});if(t){let r=t.node.wildcardValue!==void 0;return{value:t.value,params:r?{...t.params,"*":""}:t.params,wildcard:!1}}return ci(n,e,e.length)}function ci(n,e,t){for(let r=0;r<=t;r++){let s=jt(n,e.slice(0,r),0,{},"wildcard");if(s)return{value:s.value,params:{...s.params,"*":e.slice(r).join("/")},wildcard:!0}}return null}function xn(n,e=""){let t=[];for(let[s,o]of n.value?.handlers??[]){let i=n.value?.middlewares.get(s)||[];t.push({method:s,path:e||"/",handler:o,middlewares:[...i]})}let r=n.wildcardValue;if(r)for(let[s,o]of r.handlers){let i=r.middlewares.get(s)||[];t.push({method:s,path:(e||"/")+"/*",handler:o,middlewares:[...i]})}for(let[s,o]of n.children)t.push(...xn(o,e+"/"+(s===":"?`:${o.param}`:s)));return t}function kn(n,e=""){let t=[];n.value?.handler&&t.push({path:e||"/",handler:n.value.handler,middlewares:[...n.value.middlewares]}),n.wildcardValue?.handler&&t.push({path:(e||"/")+"/*",handler:n.wildcardValue.handler,middlewares:[...n.wildcardValue.middlewares]});for(let[r,s]of n.children)t.push(...kn(s,e+"/"+(r===":"?`:${s.param}`:r)));return t}function Rn(n,e,t){for(let[r]of n.value?.handlers??[]){let s=r==="*"?"ANY":r,o=(e||"/")+(n.wildcard?"/*":""),i=n.value?.middlewares.get(r),a=i?` (+${i.length} mw)`:"";t.push(`${s.padEnd(7)} ${o}${a}`)}for(let[r,s]of n.children){let o=r===":"?`:${s.param}`:r;Rn(s,e+"/"+o,t)}}function Tn(n,e,t){if(n.value?.handler){let r=e||"/",s=n.value.middlewares.length?` (+${n.value.middlewares.length} mw)`:"";t.push(`WS ${r}${s}`)}for(let[r,s]of n.children){let o=r===":"?`:${s.param}`:r;Tn(s,e+"/"+o,t)}}async function Lt(n,e,t,r){if(n.length===0)return e(t,r);let s=0,o=(i,a)=>{if(s>=n.length)return Promise.resolve(e(i,a));let l=n[s++],c=!1,u=(d,p)=>{if(c)throw new Error("[router] next() called more than once in middleware");return c=!0,o(d,p)};return Promise.resolve(l(i,a,u))};return o(t,r)}function ui(n){return Response.json({error:"Bad Request",reason:n},{status:400})}async function Cn(n,e,t,r){let s=Ur(t);if(!s.ok)return ui(s.reason);let o=ft(n,s.segments),i=o?{value:o.value,params:Vr(o),wildcard:o.wildcard}:null;e.enrichCtx?.(r,i,s.pathname,s.query);try{if(!i)return await e.onNotFound(t,r,s.pathname);let a=e.resolveHandler(i,t,r);if(a.kind==="not-found")return await e.onNotFound(t,r,s.pathname);if(a.kind==="not-allowed")return e.onMethodNotAllowed?await e.onMethodNotAllowed(a.methods,t,r,s.pathname):new Response("Method Not Allowed",{status:405,headers:{Allow:a.methods.join(", ")}});let l=await a.run();return e.onRouteSuccess?.(t,r,s.pathname),l}catch(a){if(e.onError)return e.onError(a,t,r,s.pathname);throw a}}function Qr(){let n=new Set;return{register(e){for(let t of e)n.add(t)},check(e,t){for(let r of e)if(!n.has(r))throw new Error(`[weifuwu] Middleware at "${t}" depends on ctx.${r} but it hasn't been registered.
16
- Register the provider before this middleware: app.use(${r}())`)},has(e){return n.has(e)}}}function Kr(){let n=new Map,e=new Map;return{join(t,r){let s=n.get(t);s||(s=new Set,n.set(t,s)),s.add(r);let o=e.get(r);o||(o=new Set,e.set(r,o)),o.add(t)},leave(t){let r=e.get(t);if(r){for(let s of r){let o=n.get(s);o&&(o.delete(t),o.size===0&&n.delete(s))}e.delete(t)}},send(t,r){let s=n.get(t);if(s)for(let o of s)try{o.send(r)}catch{}},async close(){n.clear(),e.clear()}}}var En=globalThis;En.__wfRouterErrState||(En.__wfRouterErrState={errState:new Map,totalErrors:0});var mt=En.__wfRouterErrState;function zr(n,e){mt.totalErrors++;let t=mt.errState.get(n);if(t){t.count++;return}mt.errState.set(n,{shown:!0,count:1}),console.error(`[router] ${n}\uFF08\u91CD\u590D\u9519\u8BEF\u5DF2\u53BB\u91CD\u2014\u2014\u7D2F\u8BA1 ${mt.totalErrors}\uFF09:`,e instanceof Error?e.stack||e.message:e)}function Zr(n){mt.errState.delete(n)}var di=()=>({handlers:new Map,middlewares:new Map}),Ee=class n{root=pt();wsRoot=pt();globalMws=[];errorHandler;_hasWildcard=!1;_hub;_wsCount=0;_ctxRegistry=Qr();_closeables=[];_pipeline;get pipeline(){return this._pipeline??=this.buildPipeline()}buildPipeline(){return{resolveHandler:(e,t,r)=>{let s=e.value,o=t.method;if(e.wildcard){let a=s.handlers.get(o)||s.handlers.get("*");if(!a)return{kind:"not-found"};let l=s.middlewares.get(o)||s.middlewares.get("*")||[];return{kind:"route",run:()=>this.runWithChain(l,a,t,r)}}let i=s.handlers.get(o)||s.handlers.get("*");if(!i&&o==="HEAD"&&(i=s.handlers.get("GET")),i){let a=s.middlewares.get(o)||s.middlewares.get("*")||(o==="HEAD"?s.middlewares.get("GET"):void 0)||[];return{kind:"route",run:()=>this.runWithChain(a,i,t,r)}}return s.handlers.size>0?{kind:"not-allowed",methods:[...s.handlers.keys()].filter(a=>a!=="*")}:{kind:"not-found"}},onNotFound:(e,t,r)=>{let s=()=>Response.json({error:"Not Found",path:r,method:e.method},{status:404});return this.globalMws.length>0?Lt(this.globalMws,s,e,t):s()},onMethodNotAllowed:(e,t,r)=>{let s=()=>new Response("Method Not Allowed",{status:405,headers:{Allow:e.join(", ")}});return this.globalMws.length>0?Lt(this.globalMws,s,t,r):s()},onError:(e,t,r,s)=>this.handleError(e,t,r,s),onRouteSuccess:(e,t,r)=>Zr(`${e.method} ${r}`),enrichCtx:(e,t)=>{t&&Object.assign(e.params,t.params)}}}runWithChain(e,t,r,s){let o=e.length===0?this.globalMws:[...this.globalMws,...e];return Lt(o,t,r,s)}get hub(){return this._hub||(this._hub=Kr()),this._hub}wsHub(e){return this._hub=e,this}use(e){return this.globalMws.push(e),this._checkMiddlewareMeta(e,"global"),typeof e.close=="function"&&this._closeables.push(e),this}plugin(e){return e(this),this}mount(e,t){return this._mountRouter(e,t),this}onError(e){return this.errorHandler=e,this}get(e,...t){return this._route("GET",e,...t)}post(e,...t){return this._route("POST",e,...t)}put(e,...t){return this._route("PUT",e,...t)}delete(e,...t){return this._route("DELETE",e,...t)}patch(e,...t){return this._route("PATCH",e,...t)}head(e,...t){return this._route("HEAD",e,...t)}options(e,...t){return this._route("OPTIONS",e,...t)}all(e,...t){return this._route("*",e,...t)}ws(e,...t){let r=t.pop(),s=t;return Wt(this.wsRoot,e,{handler:r,middlewares:s}),this._wsCount++,this}hasWsRoutes(){return this._wsCount>0}handler(){return(e,t)=>Cn(this.root,this.pipeline,e,t)}websocketHandler(e){return qr(e,t=>this.matchWsTrie(this.wsRoot,t),this.hub)}routes(){let e=[];return this.globalMws.length>0&&e.push(`MIDDLEWARE [${this.globalMws.length} global]`),Rn(this.root,"",e),Tn(this.wsRoot,"",e),e}_route(e,t,...r){return this._routeImpl(e,t,r)}_routeImpl(e,t,r){let s=r[r.length-1];if(s instanceof n)return this._mountRouter(t,s,r.slice(0,-1)),this;let o=r.pop(),i=r;for(let p of i)this._checkMiddlewareMeta(p,`${e} ${t}`);let a=Gr(this.root,t),l=t.includes("*"),c=l?a?.wildcardValue:a?.value;if(!l&&c?.handlers.has(e))throw new Error(`[router] route conflict: ${e} ${t} already registered`);let u=c??di();u.handlers.set(e,o),i.length>0&&u.middlewares.set(e,i);let d=Wt(this.root,t,u);return l&&(this._hasWildcard=!0),this}_mountRouter(e,t,r=[]){let s=e==="/"?"":e.replace(/\/$/,""),o=(c,u,d)=>(u.mountPath=(u.mountPath||"")+s,d(c,u)),i=r.length===0&&t.globalMws.length===0?[o]:[o,...r,...t.globalMws];for(let c of i)this._checkMiddlewareMeta(c,`mount:${e}`);let a=xn(t.root);for(let{method:c,path:u,handler:d,middlewares:p}of a)this._routeImpl(c,s+u,[...i,...p,d]);let l=kn(t.wsRoot);for(let{path:c,handler:u,middlewares:d}of l)this.ws(s+c,...i,...d,u)}matchWsTrie(e,t){let r=ft(e,t);return r?{handler:r.value.handler,middlewares:r.value.middlewares,params:r.params}:null}async handleError(e,t,r,s){let o=e instanceof Error?e:new Error(String(e));return this.errorHandler?this.errorHandler(o,t,r):o instanceof D||o instanceof he||o instanceof q?we(o):(zr(`${t.method} ${s??new URL(t.url).pathname}`,e),Response.json({error:"Internal Server Error"},{status:500}))}onClose(e){return this._closeables.push(e),this}_closed=!1;async close(){if(!this._closed){this._closed=!0;for(let e of this._closeables)try{await e.close()}catch{}}}_checkMiddlewareMeta(e,t){let r=e.__meta??(typeof e=="object"&&e&&"middleware"in e?e.middleware().__meta:void 0);r&&(this._ctxRegistry.check(r.depends,t),this._ctxRegistry.register(r.injects))}};var Be="rl:";function pi(n){return n.headers.get("x-forwarded-for")?.split(",")[0]?.trim()??n.headers.get("x-real-ip")??"unknown"}function An(n){if(!n.redis)throw new Error("rateLimit: options.redis is required \u2014 \u4F20 redis() \u7684 .redis\uFF08\u5148 app.use(redis())\uFF09\u6216 new RedisPool()");let e={redis:n.redis,windowMs:n?.windowMs??6e4,max:n?.max??100,key:n?.key??(i=>i.headers.get("x-forwarded-for")?.split(",")[0]?.trim()??"unknown"),algorithm:n?.algorithm??"fixed",statusCode:n?.statusCode??429,message:n?.message??"Too Many Requests",headers:n?.headers??!0},t=e.redis;async function r(i,a,l){let c=(y,v)=>{throw y instanceof Error?y:new Error(`rateLimit: pipeline[${v}] failed`)};if(e.algorithm==="fixed"){let y=await t.pipeline();y.raw("INCR",Be+i).raw("TTL",Be+i);let v=await y.exec();if(v[0]instanceof Error)return c(v[0],0);if(v[1]instanceof Error)return c(v[1],1);let k=Number(v[0]),w=Number(v[1]);w<0&&await t.command("PEXPIRE",Be+i,l);let b=w>0?w:Math.ceil(l/1e3);return{allowed:k<=a,remaining:Math.max(0,a-k),resetSeconds:Math.max(1,b)}}let u=Be+i,d=Date.now(),p=d-l,h=await t.pipeline();h.raw("ZREMRANGEBYSCORE",u,0,p).raw("ZCARD",u);let m=await h.exec();if(m[0]instanceof Error)return c(m[0],0);if(m[1]instanceof Error)return c(m[1],1);let f=Number(m[1]);if(f>=a){let y=Number(await t.command("TTL",u));return{allowed:!1,remaining:0,resetSeconds:Math.max(1,y)}}return Number(await t.command("ZADD",u,d,`${d}-${Math.random().toString(36).slice(2)}`))===1&&await t.command("EXPIRE",u,Math.ceil(l/1e3)*2),{allowed:!0,remaining:Math.max(0,a-f-1),resetSeconds:Math.ceil(l/1e3)}}function s(i){let a={"Content-Type":"application/json"};return e.headers&&(a["Retry-After"]=String(i),a["RateLimit-Limit"]=String(e.max),a["RateLimit-Remaining"]="0",a["RateLimit-Reset"]=String(i)),new Response(JSON.stringify({error:e.message,retryAfter:i}),{status:e.statusCode,headers:a})}let o=(async(i,a,l)=>{a.limit=async(d,p)=>{let h=(p?.scope??"ip")==="global"?"":`:${pi(i)}`,m=`${Be}${d}${h}`,f=p?.max??e.max,g=p?.windowMs??e.windowMs,y=await r(m,f,g);if(!y.allowed){let v=new D(e.message,e.statusCode);throw v.retryAfter=y.resetSeconds,v}};let c=await r(Be+"global:"+e.key(i),e.max,e.windowMs);if(!c.allowed)return s(c.resetSeconds);let u=await l(i,a);return e.headers&&(u.headers.set("RateLimit-Limit",String(e.max)),u.headers.set("RateLimit-Remaining",String(c.remaining)),u.headers.set("RateLimit-Reset",String(c.resetSeconds))),u});return o.__meta={injects:["limit"],depends:[]},o}var Ut=class extends Error{issues;constructor(e){super(e.map(t=>`${t.path}: ${t.message}`).join("; ")),this.name="ZodError",this.issues=e}},H=class{_meta={};get metaInfo(){return this._meta}meta(e){return this._meta={...this._meta,...e},this}parse(e){let t=this._parse(e);if(!t.ok)throw new Ut([{path:t.path??"",message:t.message??"invalid"}]);return t.value}safeParse(e){let t=this._parse(e);return t.ok?{success:!0,data:t.value}:{success:!1,error:new Ut([{path:t.path??"",message:t.message??"invalid"}])}}optional(){return new qe(this)}nullable(){return new Ge(this)}default(e){return new Qe(this,e)}refine(e,t){return new wt(this,e,t)}transform(e){return new yt(this,e)}},Ae=class extends H{_typeName(){return"string"}_parse(e){if(typeof e!="string")return{ok:!1,path:"",message:"expected string"};let t=e;return this._min!==void 0&&t.length<this._min?{ok:!1,path:"",message:`too small (min ${this._min})`}:this._max!==void 0&&t.length>this._max?{ok:!1,path:"",message:`too big (max ${this._max})`}:this._pattern&&!this._pattern.test(t)?{ok:!1,path:"",message:"invalid pattern"}:this._email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?{ok:!1,path:"",message:"invalid email"}:this._uuid&&!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t)?{ok:!1,path:"",message:"invalid uuid"}:{ok:!0,value:t}}_min;_max;_pattern;_email=!1;_uuid=!1;min(e){return this._min=e,this}max(e){return this._max=e,this}regex(e,t){return this._pattern=e,this}email(){return this._email=!0,this}uuid(){return this._uuid=!0,this}},Ne=class extends H{_typeName(){return"number"}_parse(e){if(typeof e!="number"||Number.isNaN(e))return{ok:!1,path:"",message:"expected number"};let t=e;return this._int&&!Number.isInteger(t)?{ok:!1,path:"",message:"expected integer"}:this._min!==void 0&&t<this._min?{ok:!1,path:"",message:`too small (min ${this._min})`}:this._max!==void 0&&t>this._max?{ok:!1,path:"",message:`too big (max ${this._max})`}:{ok:!0,value:t}}_int=!1;_min;_max;int(){return this._int=!0,this}min(e){return this._min=e,this}max(e){return this._max=e,this}positive(){return this._min=0,this}},Fe=class extends H{_typeName(){return"boolean"}_parse(e){return typeof e!="boolean"?{ok:!1,path:"",message:"expected boolean"}:{ok:!0,value:e}}},Oe=class extends H{lit;constructor(e){super(),this.lit=e}get value(){return this.lit}_typeName(){return"literal"}_parse(e){return e!==this.lit?{ok:!1,path:"",message:`expected literal ${JSON.stringify(this.lit)}`}:{ok:!0,value:e}}},Pe=class extends H{raw;constructor(e){super(),this.raw=e}get values(){return this.raw}_typeName(){return"enum"}_parse(e){return typeof e!="string"||!this.raw.includes(e)?{ok:!1,path:"",message:`expected one of ${this.raw.join(" | ")}`}:{ok:!0,value:e}}},De=class extends H{_typeName(){return"datetime"}_parse(e){return typeof e!="string"||Number.isNaN(Date.parse(e))?{ok:!1,path:"",message:"expected datetime string (ISO)"}:{ok:!0,value:e}}},gt=class extends H{dims;constructor(e){super(),this.dims=e}_typeName(){return"vector"}_parse(e){return typeof e!="object"||e===null||!Array.isArray(e)||!e.every(t=>typeof t=="number")?{ok:!1,path:"",message:"expected number[] vector"}:this.dims>0&&e.length!==this.dims?{ok:!1,path:"",message:`expected vector(${this.dims})\u2014\u2014got ${e.length} dims`}:{ok:!0,value:e}}},On=class extends H{_typeName(){return"json"}_parse(e){return{ok:!0,value:e}}},Pn=class n extends H{shape;constructor(e){super(),this.shape=e}_typeName(){return"object"}_parse(e){if(typeof e!="object"||e===null||Array.isArray(e))return{ok:!1,path:"",message:"expected object"};let t={},r=[];for(let[s,o]of Object.entries(this.shape)){let i=o._parse(e[s]);if(!i.ok){r.push({path:s,message:i.message??""});continue}t[s]=i.value}return r.length?{ok:!1,path:r[0].path,message:r[0].message}:{ok:!0,value:t}}pick(e){let t={};for(let r of e)t[r]=this.shape[r];return new n(t)}omit(e){let t={};for(let[r,s]of Object.entries(this.shape))e.includes(r)||(t[r]=s);return new n(t)}extend(e){return new n({...this.shape,...e})}},ht=class extends H{inner;constructor(e){super(),this.inner=e}get itemSchema(){return this.inner}_typeName(){return"array"}_parse(e){if(!Array.isArray(e))return{ok:!1,path:"",message:"expected array"};if(this._min!==void 0&&e.length<this._min)return{ok:!1,path:"",message:`too small (min ${this._min})`};if(this._max!==void 0&&e.length>this._max)return{ok:!1,path:"",message:`too big (max ${this._max})`};let t=[];for(let r=0;r<e.length;r++){let s=this.inner._parse(e[r]);if(!s.ok)return{ok:!1,path:`${r}`,message:s.message};t.push(s.value)}return{ok:!0,value:t}}_min;_max;min(e){return this._min=e,this}max(e){return this._max=e,this}},_n=class extends H{options;constructor(e){super(),this.options=e}_typeName(){return"union"}_parse(e){let t=null;for(let r of this.options){let s=r._parse(e);if(s.ok)return{ok:!0,value:s.value};t||(t={path:s.path??"",message:s.message??""})}return{ok:!1,path:"",message:`expected union (${t?.message})`}}},Mn=class extends H{disc;options;discValueOf;constructor(e,t,r){super(),this.disc=e,this.options=t,this.discValueOf=r}_typeName(){return"disUnion"}_parse(e){if(typeof e!="object"||e===null)return{ok:!1,path:"",message:"expected object"};let t=e[this.disc];for(let r of this.options)if(this.discValueOf(r.shape)===t){let s=r._parse(e);return s.ok?{ok:!0,value:s.value}:{ok:!1,path:`(${String(t)})`,message:s.message??""}}return{ok:!1,path:this.disc,message:`invalid discriminator value ${JSON.stringify(t)}`}}};function wi(n,e){let t=n[e];if(t instanceof Oe)return t.lit;if(t instanceof Pe)return t.values;throw new Error(`z.discriminatedUnion: \u5224\u522B\u5B57\u6BB5\u9700\u4E3A literal/enum\u2014\u2014\u5F97\u5230 ${t?._typeName?.()}`)}var qe=class extends H{inner;constructor(e){super(),this.inner=e}_typeName(){return"optional"}_parse(e){return e===void 0?{ok:!0,value:void 0}:this.inner._parse(e)}},Ge=class extends H{inner;constructor(e){super(),this.inner=e}_typeName(){return"nullable"}_parse(e){return e===null?{ok:!0,value:null}:this.inner._parse(e)}},Qe=class extends H{inner;d;constructor(e,t){super(),this.inner=e,this.d=t}_typeName(){return"default"}_parse(e){if(e===void 0){let t=typeof this.d=="function"?this.d():this.d;return this.inner._parse(t)}return this.inner._parse(e)}},wt=class extends H{inner;fn;msg;constructor(e,t,r){super(),this.inner=e,this.fn=t,this.msg=r}_typeName(){return"effects"}_parse(e){let t=this.inner._parse(e);return t.ok?this.fn(t.value)?{ok:!0,value:t.value}:{ok:!1,path:"",message:this.msg??"refine failed"}:{ok:!1,path:t.path??"",message:t.message??""}}},yt=class extends H{inner;fn;constructor(e,t){super(),this.inner=e,this.fn=t}_typeName(){return"transform"}_parse(e){let t=this.inner._parse(e);return t.ok?{ok:!0,value:this.fn(t.value)}:{ok:!1,path:t.path??"",message:t.message??""}}},S={string:()=>new Ae,number:()=>new Ne,boolean:()=>new Fe,literal:n=>new Oe(n),enum:n=>new Pe(n),date:()=>new De,uuid:()=>new Ae().uuid(),json:()=>new On,vector:n=>new gt(n),object:n=>new Pn(n),array:n=>new ht(n),union:n=>new _n(n),discriminatedUnion:(n,e)=>new Mn(n,e,t=>wi(t,n))};function Ke(n,e){return n.meta(e)}function In(n){let e={},t;for(let[o,i]of Object.entries(n.fields)){let a=i.metaInfo??{};e[o]={column:a.column??o,...a.pk?{pk:!0}:{},...a.unique?{unique:!0}:{},...a.notNull?{notNull:!0}:{},...a.default!==void 0?{default:a.default}:{},...a.references?{references:a.references}:{},...a.onDelete?{onDelete:a.onDelete}:{}},a.pk&&(t=o)}let r={table:n.table,fields:n.fields,dbFields:e,pkField:t},s=o=>{let i=e[o];return i?.default==="random"||i?.default==="now"};return r.insertSchema=(o={})=>{let i={};for(let[a,l]of Object.entries(n.fields)){if(s(a)||o.omit?.includes(a))continue;let c=l,u=c._typeName?.()==="nullable";i[a]=e[a]?.default!==void 0||u?c.optional():c}return Yr(S.object(i))},r.toDb=o=>{let i={},a=o;for(let[l,c]of Object.entries(a)){let u=e[l];i[u?.column??l]=c}return i},r.fromDb=o=>{let i={},a=o;for(let[l,c]of Object.entries(e))a[c.column??l]!==void 0&&(i[l]=a[c.column??l]);for(let l of Object.keys(a))!Object.values(e).some(u=>u.column===l)&&!(l in i)&&(i[l]=a[l]);return i},r.updateSchema=(o={})=>{let i={};for(let[a,l]of Object.entries(n.fields))s(a)||o.omit?.includes(a)||(i[a]=l.optional());return Yr(S.object(i))},r}function Yr(n){return n.transform(e=>typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0)))}var E={pk:n=>Ke(n,{pk:!0,default:"random"}),req:n=>Ke(n,{notNull:!0}),col:(n,e)=>Ke(n,{column:e}),now:n=>Ke(n,{default:"now"}),unique:n=>Ke(n,{unique:!0}),dflt:(n,e)=>Ke(n,{default:e})};import{randomBytes as Ru,scrypt as yi,timingSafeEqual as Tu}from"node:crypto";import{promisify as bi}from"node:util";var Eu=bi(yi);var Du={users:{id:E.pk(S.uuid()),email:E.req(S.string()).meta({unique:!0}),password_hash:S.string().nullable(),name:S.string().nullable(),role:S.string().nullable(),tenant:S.string().nullable(),email_verified:S.boolean().meta({notNull:!0,default:!1}),created_at:E.now(S.date())},sessions:{token_hash:E.req(S.string()),user_id:E.req(S.uuid()),app_id:S.string().nullable(),expires_at:E.req(S.date()),revoked_at:S.date().nullable(),created_at:E.now(S.date())},apps:{id:E.pk(S.uuid()),slug:E.req(S.string()).meta({unique:!0}),name:E.req(S.string()),owner_user_id:S.uuid().nullable(),open_registration:S.boolean().meta({notNull:!0,default:!1}),app_key:S.string().nullable(),created_at:E.now(S.date())},members:{app_id:E.req(S.uuid()),user_id:E.req(S.uuid()),role:S.string().meta({notNull:!0,default:"member"}),invited_by:S.uuid().nullable(),joined_at:E.now(S.date()),source:S.string().nullable(),last_login_at:S.date().nullable()}};var Ri={tables:[{name:"_weifuwu_users",columns:{id:E.pk(S.uuid()),email:E.req(S.string()).meta({unique:!0}),password_hash:S.string(),name:S.string(),role:S.string(),tenant:S.string(),email_verified:S.boolean().meta({default:!1}),created_at:S.date().meta({default:"now"})},dropNotNull:["password_hash"]},{name:"_weifuwu_sessions",columns:{token_hash:S.string().meta({pk:!0}),user_id:E.req(S.uuid()).meta({references:"_weifuwu_users",onDelete:"cascade"}),app_id:S.string(),expires_at:S.date().meta({notNull:!0}),revoked_at:S.date(),created_at:S.date().meta({default:"now"})}},{name:"_weifuwu_apps",columns:{id:E.pk(S.uuid()),slug:E.req(S.string()).meta({unique:!0}),name:E.req(S.string()),owner_user_id:S.uuid().meta({references:"_weifuwu_users",onDelete:"cascade"}),open_registration:S.boolean().meta({default:!1}),created_at:S.date().meta({default:"now"}),app_key:S.string()}},{name:"_weifuwu_app_members",columns:{app_id:E.req(S.uuid()).meta({references:"_weifuwu_apps",onDelete:"cascade"}),user_id:E.req(S.uuid()).meta({references:"_weifuwu_users",onDelete:"cascade"}),role:S.string().meta({default:"member"}),invited_by:S.uuid(),joined_at:S.date().meta({default:"now"}),source:S.string(),last_login_at:S.date()},uniques:[["app_id","user_id"]]}]};function Ti(n){let e=n;for(;;){let t=e.inner;if(t&&typeof e._typeName=="string"&&["optional","nullable","default","effects","transform"].includes(e._typeName))e=t;else break}return e}function Ci(n,e){let r=Ti(n.fields[e]).values;return Array.isArray(r)?r.map(String):void 0}function $n(n,e,t={}){let r=t.maxLimit??100,s=t.defaultLimit??20,i=e.__shape??e,a=n.searchParams,l=Object.keys(i.fields),c=new Set(l),u={};for(let[f,g]of a.entries()){if(f==="sort"||f==="limit"||f==="offset")continue;let y=Ci(i,f);if(y&&!y.includes(g))throw new Error(`invalid enum value for ${f}: ${g}\uFF08\u5141\u8BB8\uFF1A${y.join(" | ")}\uFF09`);u[f]={eq:g}}let d=[],p=a.get("sort");if(p)for(let f of p.split(",")){let g=f.startsWith("-")?"desc":"asc",y=g==="desc"?f.slice(1):f;if(!c.has(y))throw new Error(`invalid sort field: ${y}`);d.push({field:y,dir:g})}let h=Math.min(r,Math.max(1,parseInt(a.get("limit")??String(s),10)||s)),m=Math.max(0,parseInt(a.get("offset")??"0",10)||0);return{filter:u,sort:d,limit:h,offset:m}}function Ei(n){return n.inner}function Vt(n){let e=n._typeName();switch(e){case"string":return n._uuid?"UUID":"TEXT";case"number":return n._int?"INT":"DOUBLE PRECISION";case"boolean":return"BOOLEAN";case"datetime":return"TIMESTAMPTZ";case"json":case"object":case"array":return"JSONB";case"vector":return"JSONB";case"enum":return"TEXT";case"optional":case"nullable":case"default":case"effects":case"transform":return Vt(Ei(n)??n);default:throw new Error(`schema: \u65E0\u6CD5\u6620\u5C04 zod \u7C7B\u578B ${e}\uFF08\u5217\u578B\u6CE8\u89E3 columnTypes \u53EF\u8986\u76D6\uFF09`)}}var os=["col","eq","gt","gte","lt","lte","ne","in","notIn","like","ilike","isNull","between"];function Ai(n,e){if(typeof n!="object"||n===null||typeof e!="object"||e===null)return null;let t=n,r=e,s=os.some(i=>Object.hasOwn(t,i)),o=os.some(i=>Object.hasOwn(r,i));if(!s||!o)return null;for(let i of Object.keys(r))if(Object.hasOwn(t,i))return null;return{...t,...r}}function Oi(n,e,t){if(e==="and"&&Array.isArray(t)){n.and=[...n.and??[],...t];return}if(!(e in n)){n[e]=t;return}let r=Ai(n[e],t);if(r!==null){n[e]=r;return}n.and=[...n.and??[],{[e]:t}]}function Ht(n,e){let t={...n};for(let[r,s]of Object.entries(e)){if(r==="or"&&t.or!==void 0&&Array.isArray(s)){t.and=[...t.and??[],{or:s}];continue}Oi(t,r,s)}return t}function bt(n,e="where"){if(n!=null){if(Array.isArray(n)){for(let t of n)bt(t,e);return}if(typeof n=="object")for(let[t,r]of Object.entries(n)){if(r===void 0)throw new q(`weifuwu/db: ${e}.${t} \u4E0D\u80FD\u4E3A undefined\u2014\u2014\u7701\u7565\u8BE5\u952E\uFF08\u65E0\u8BE5\u6761\u4EF6\uFF09\u6216\u663E\u5F0F isNull`);typeof r=="object"&&r!==null&&bt(r,`${e}.${t}`)}}}function Nn(n){let e=(o,i)=>{let a={kind:"select",table:o,alias:i},l={distinct(){return a.distinct=!0,l},select(...c){return a.cols=c.length===1&&c[0]==="*"?void 0:c,l},join(c,u,d){a.joins??=[];let p=c,h=d?.alias;return!h&&/\s/.test(c)&&([p,h]=c.split(/\s+/)),a.joins.push({table:p,alias:h,type:d?.type??"inner",on:u}),l},where(c){return bt(c),a.where=a.where?Ht(a.where,c):c,l},in(c,u,d=!1){return a.sub??=[],a.sub.push({type:"in",col:c,query:u,not:d}),l},exists(c,u=!1){return a.sub??=[],a.sub.push({type:"exists",query:c,not:u}),l},groupBy(...c){return a.groupBy=c,l},having(c){return a.having=c,l},count(c="*",u="count",d){return a.aggregate??=[],a.aggregate.push({fn:"count",col:c,as:u,filter:d}),l},sum(c,u="sum",d){return a.aggregate??=[],a.aggregate.push({fn:"sum",col:c,as:u,filter:d}),l},avg(c,u="avg",d){return a.aggregate??=[],a.aggregate.push({fn:"avg",col:c,as:u,filter:d}),l},min(c,u="min",d){return a.aggregate??=[],a.aggregate.push({fn:"min",col:c,as:u,filter:d}),l},max(c,u="max",d){return a.aggregate??=[],a.aggregate.push({fn:"max",col:c,as:u,filter:d}),l},orderBy(c,u="asc"){return a.orderBy??=[],a.orderBy.push({col:c,dir:u}),l},vectorScore(c,u,d){return a.vector={col:c,vec:u,as:d},l},limit(c){return a.limit=c,l},offset(c){return a.offset=c,l},async run(){return n(a)},async one(){return(await n(a))[0]},toQuery(){return structuredClone(a)}};return l},t=o=>{let i={kind:"insert",table:o,rows:[]},a={values(l){return i.rows.push(l),a},rows(l){return i.rows.push(...l),a},returning(...l){return i.returning=l.length===1&&l[0]==="*"?"*":l,a},onConflict(l,c=!1,u){return i.onConflict={col:l,update:c,merge:u},a},async run(){return n(i)},toQuery(){return structuredClone(i)}};return a},r=o=>{let i={kind:"update",table:o,sets:{}},a={set(l){return i.sets=l,a},where(l){return bt(l),i.where=i.where?Ht(i.where,l):l,a},returning(...l){return i.returning=l.length===1&&l[0]==="*"?"*":l,a},async run(){if(!i.where)throw new q("weifuwu/db: UPDATE \u5FC5\u987B\u5E26 WHERE\uFF08\u5168\u8868\u66F4\u65B0\u662F\u5371\u9669\u64CD\u4F5C\u2014\u2014\u9010\u6279 where \u6216\u8FC1\u79FB\u9762\u663E\u5F0F\u6267\u884C\uFF09");return n(i)},toQuery(){return structuredClone(i)}};return a},s=o=>{let i={kind:"delete",table:o},a={where(l){return bt(l),i.where=i.where?Ht(i.where,l):l,a},returning(...l){return i.returning=l.length===1&&l[0]==="*"?"*":l,a},async run(){if(!i.where)throw new q("weifuwu/db: DELETE \u5FC5\u987B\u5E26 WHERE\uFF08\u5168\u8868\u6E05\u7A7A\u662F\u5371\u9669\u64CD\u4F5C\u2014\u2014\u8FC1\u79FB\u9762 runMigration \u663E\u5F0F\u6267\u884C\uFF09");return n(i)},toQuery(){return structuredClone(i)}};return a};return{from:(o,i)=>{if(!i&&/\s/.test(o)){let[a,l]=o.split(/\s+/);return e(a,l)}return e(o,i)},insert:o=>t(o),update:o=>r(o),delete:o=>s(o)}}var Fn=null,Dn=null;function Bt(n){n.gql&&(Fn=n.gql),n.rest&&(Dn=n.rest)}function qt(n,e){return is(n,e,new Map)}function is(n,e,t){let r=Nn(async l=>await n.executeQuery(l));function s(l,c){let u=t.get(l);if(u)return u.t;if(c===void 0)throw new q(`weifuwu/db: \u8868 ${l} \u672A\u6CE8\u518C\uFF08tx/ctx \u6D3E\u751F\u7528 orm.table(name, shapeDef) \u5148\u884C\u6CE8\u518C\uFF09`);let d=Object.keys(c),p=In({table:l,fields:c}),h=d.map(w=>p.dbFields[w]?.column??w),m=w=>p.fromDb(w),f=new Set(["distinct","select","join","where","in","exists","groupBy","having","count","sum","avg","min","max","orderBy","limit","offset","values","rows","returning","onConflict","set"]),g=w=>w==="*"?"*":typeof w=="string"?p.dbFields[w]?.column??w:w,y=w=>{let b={run:()=>w.run().then(x=>x.map(R=>m(R))),one:async()=>(await b.run())[0]};for(let x of f){if(x==="returning")continue;let R=w[x];typeof R=="function"&&(b[x]=(...A)=>(R.apply(w,A),b))}return b.returning=(...x)=>(w.returning(...x.map(R=>g(R))),b),b},v={};for(let w of d)v[w]={ref:p.dbFields[w]?.column??w,__out:void 0};let k={c:v,select:(...w)=>y(r.from(l).select(...w.length?w.map(b=>g(b)):["*"])),insert:w=>{let b=p.insertSchema(),x=Array.isArray(w)?w:[w],R=r.insert(l);for(let A of x)R=R.values(p.toDb(b.parse(A)));return y(R.returning(...h))},update:w=>{let b=Object.entries(w).filter(([,A])=>typeof A=="object"&&A!==null&&["__jsonbAppend","__inc","__now","__interval","__colRef","__monthStart"].some(F=>F in A)).map(([A])=>A),x=Object.fromEntries(Object.entries(w).filter(([A])=>!b.includes(A))),R={...p.updateSchema().parse(x),...Object.fromEntries(b.map(A=>[A,w[A]]))};return y(r.update(l).set(p.toDb(R)).returning(...h))},delete:()=>y(r.delete(l).returning(...h)),exists:async w=>(await r.from(l).select("1").where(w).limit(1).run()).length>0,paginate:async w=>{let b=Math.max(1,Math.min(w.limit??50,100)),x=Math.max(0,w.offset??0),R=r.from(l);w.filter&&R.where(w.filter);let[A]=await R.count("*","total").run(),F=Number(A.total??0),ce=r.from(l);w.filter&&ce.where(w.filter);for(let re of w.sort??[])ce.orderBy(re.field,re.dir==="desc"?"desc":"asc");return ce.limit(b).offset(x),{rows:await y(ce).run(),total:F}},shapeDef:c,__shape:p,__shapeDbFields:p.dbFields};return t.set(l,{t:k}),k}let o=l=>{let c=()=>e?.value(l),u=(d,p)=>{let h=s(d,p),m=h.__shape,f=e&&m.dbFields[e.field]?m.dbFields[e.field].column??e.field:null,g=()=>{let y=c();return y!==void 0&&f?{[f]:{eq:y}}:null};return{...h,select:(...y)=>{let v=h.select(...y),k=g();return k&&v.where(k),v},insert:y=>{let v=Array.isArray(y)?y:[y],k=c(),w=v.map(b=>g()&&b[e.field]===void 0?{...b,[e.field]:k}:b);return h.insert(Array.isArray(y)?w:w[0])},update:y=>{let v=h.update(y),k=g();return k&&v.where(k),v},delete:()=>{let y=h.delete(),v=g();return v&&y.where(v),y},paginate:async y=>{let v=g();return h.paginate({...y,filter:v?{and:[y.filter??{},v]}:y.filter})}}};return{...i(),ctxTable:u}},i=()=>a,a={table:s,query:r,gql:(l,c)=>{if(!l.__shape)throw new Error("orm.gql: \u8868\u672A\u6CE8\u518C\uFF08orm.table \u5148\u884C\uFF09");if(!Fn)throw new Error("orm.gql: \u751F\u6210\u5668\u672A\u6CE8\u518C\uFF08\u4ECE weifuwu \u5BFC\u5165\u81EA\u5E26 gql \u9762\uFF0C\u6216\u5148\u52A0\u8F7D db/gql-from-shape.ts\uFF09");let u=c,d={...u,...u?.tenant===void 0&&e?{tenant:{field:e.field,value:e.value}}:{},sql:()=>a};return Fn(l.__shape,d)},rest:(l,c)=>{if(!l.__shape)throw new Error("orm.rest: \u8868\u672A\u6CE8\u518C\uFF08orm.table \u5148\u884C\uFF09");if(!Dn)throw new Error("orm.rest: \u751F\u6210\u5668\u672A\u6CE8\u518C\uFF08\u4ECE weifuwu \u5BFC\u5165\u81EA\u5E26 rest \u9762\uFF0C\u6216\u5148\u52A0\u8F7D db/rest-from-shape.ts\uFF09");return Dn(l.__shape,c)},withCtx:o,execute:l=>n.executeQuery(l),tables:()=>{let l=[];for(let[c,u]of t)l.push({name:c,fields:u.t.shapeDef,dbFields:u.t.__shapeDbFields});return l},transaction:l=>n.transaction?n.transaction(async c=>l(is({executeQuery:d=>c(d)},e,t))):l(a)};return a}function Gt(n){let e=new Map;return{executeQuery:t=>Promise.resolve(n.executeQuery(t)),transaction:t=>{if(!n.snapshot||!n.restore)return t(s=>Promise.resolve(n.executeQuery(s)));let r=n.snapshot();return t(s=>Promise.resolve(n.executeQuery(s))).catch(s=>{throw n.restore(r),s})}}}function jn(n,e){let t={};if(!n)return t;for(let[r,s]of Object.entries(n)){if(r==="and"||r==="or"){let l=(Array.isArray(s)?s:[s]).map(c=>jn(c,e));t[r]=l;continue}if(s===null||typeof s!="object")continue;let o=e.dbFields[r]?.column??r,i=s;if(i.eq===null&&Object.keys(i).length===1){t[o]={isNull:!0};continue}if(Object.keys(i).some(l=>l==="eq")&&Object.keys(i).length===1&&typeof i.eq!="object"){t[o]={eq:i.eq};continue}let a={};for(let[l,c]of Object.entries(i)){if(c===void 0)throw new q(`filter \u503C\u4E0D\u80FD\u4E3A undefined\uFF08\u5217 ${o} \u7B97\u5B50 ${l}\uFF09\u2014\u2014\u7701\u7565\u8BE5\u952E\u6216\u663E\u5F0F isNull`);if(c===null){if(l==="eq"){a.isNull=!0;continue}continue}if(!(l==="eq"&&c===null)){if(l==="contains"){a.ilike=`%${String(c).replace(/([%_])/g,"\\$1")}%`;continue}if(l==="startsWith"){a.ilike=`${String(c).replace(/([%_])/g,"\\$1")}%`;continue}if(l==="endsWith"){a.ilike=`%${String(c).replace(/([%_])/g,"\\$1")}`;continue}a[l]=c}}Object.keys(a).length&&(t[o]=a)}return t}function Wn(n){let e=n;for(;;)if(e instanceof qe||e instanceof Ge||e instanceof Qe||e instanceof wt)e=e.inner;else if(e instanceof yt)e=e.inner;else break;return e}function as(n){return n instanceof qe||n instanceof Qe||n instanceof Ge}function je(n){return n.replace(/[-_](.)/g,(e,t)=>t.toUpperCase()).replace(/^(.)/,e=>e.toUpperCase())}function Qt(n,e,t,r){let s=Wn(n);if(s instanceof Ae||s instanceof De)return"String";if(s instanceof Ne)return"Float";if(s instanceof Fe)return"Boolean";if(s instanceof Oe)return t.has(e)||(t.add(e),r.push(`enum ${e} { ${JSON.stringify(s.value)} }`)),e;if(s instanceof Pe)return t.has(e)||(t.add(e),r.push(`enum ${e} { ${s.values.join(" ")} }`)),e;if(s instanceof ht){let o=Qt(s.itemSchema,`${e}Item`,t,r);return o?`[${o}!]`:null}return s instanceof gt?"[Float!]":null}function ls(n,e={}){let t=e.name??je(n.table),r=new Set,s=[],o=[],i=[],a=[],l=[],c=[],u=new Set(e.hidden??[]),d=m=>u.has(m);for(let[m,f]of Object.entries(n.fields)){if(d(m))continue;let g=as(f)?"":"!",y=Qt(f,`${t}${je(m)}Enum`,r,s);y&&o.push(` ${m}: ${y}${g}`);let v=Wn(f),k=v instanceof Ae||v instanceof De?"str":v instanceof Ne?"num":v instanceof Fe?"bool":null;if(!k){if(v instanceof Pe||v instanceof Oe){let R=Qt(f,`${t}${je(m)}Enum`,r,s);R&&i.push(`input ${t}${je(m)}Filter {
15
+ `);let d=new dt(r,n);e.add(d),d.on("close",()=>e.delete(d)),o(d),s?.length&&d.feed(s)},async shutdown(){if(e.size===0)return;let t=[...e],r=new Promise(s=>{let o=t.length,i=setTimeout(s,500);for(let a of t)a.once("close",()=>{--o===0&&(clearTimeout(i),s())})});for(let s of t)try{s.close(1001,"server shutting down")}catch{}await r}}}var he=class extends Error{kind;code;cause;constructor(e,t,r){super(t),this.name="DbError",this.kind=e,this.code=r?.code,this.cause=r?.cause}},$=class extends he{constructor(e,t){super("protocol",t??`${e} is not supported by weifuwu/db`,{code:"UNSUPPORTED"}),this.name="ProtocolError"}};var q=class extends he{constructor(e){super("validation",e),this.name="ValidationError"}};function we(n,e){let t=n instanceof Error?n.message:String(n),r;if(n instanceof D)return Response.json({error:t},{status:e??n.status});if(n instanceof he){let s=e??(n.code==="23505"?409:400);return r=n.code==="23505"?"conflict":n.kind,Response.json({error:t,code:r},{status:s})}return Response.json({error:t},{status:e??400})}function vn(n,e,t){if(!e)return()=>{};let r=s=>{let o=s instanceof Error?s:new Error(String(s));t?t(o):console.error(`[ws] ${n} handler error:`,o.stack||o.message)};return(...s)=>{try{let o=e(...s);o&&typeof o.catch=="function"&&o.catch(r)}catch(o){r(o)}}}function Gr(n,e,t){return(r,s,o)=>{let i=r.url?.split("/").filter(Boolean)??[],a=e(i);if(!a){s.destroy();return}n.handleUpgrade(r,s,o,l=>{let c=new URL(r.url??"/","http://localhost"),u={params:a.params,query:Object.fromEntries(c.searchParams),hub:t},d=a.handler,p=d.error?g=>{try{let y=d.error(l,u,g);y&&typeof y.catch=="function"&&y.catch(v=>console.error("[ws] error handler failed:",v))}catch(y){console.error("[ws] error handler failed:",y)}}:null,h=vn("open",d.open,p),m=vn("message",d.message,p),f=vn("close",d.close,p);h(l,u),l.on("message",(g,y)=>{let v=y===!1&&typeof g!="string"?String(g):g;m(l,u,v)}),l.on("close",()=>f(l,u)),l.on("error",g=>{let y=g;p?p(y):console.error("[ws] connection error:",y.message)})})}}function pt(){return{children:new Map}}function Sn(n){return n.split("/").filter(Boolean)}function ai(n,e,t){let r=e.slice(1);if(!n.children.has(":")){let o=t();o.param=r,n.children.set(":",o)}let s=n.children.get(":");if(s.param!==r)throw new Error(`[router] param conflict: ":${s.param}" already registered, cannot register ":${r}"`);return s}function li(n,e,t){return e==="*"?(n.wildcard=!0,n):e.startsWith(":")?ai(n,e,t):(n.children.has(e)||n.children.set(e,t()),n.children.get(e))}function Qr(n,e){let t=Sn(e),r=n;for(let s of t){if(!r)return null;if(s==="*")return r;r=s.startsWith(":")?r.children.get(":")??null:r.children.get(s)??null}return r}function Wt(n,e,t){let r=Sn(e),s=n;for(let o of r){if(o==="*")return s.wildcard=!0,s.wildcardValue=t,s;s=li(s,o,()=>pt())}return s.value=t,s}function jt(n,e,t,r,s="value"){if(t===e.length){let l=s==="value"?n.value:n.wildcardValue;return l!==void 0?{value:l,params:{...r},node:n}:null}let o=e[t],i=n.children.get(o);if(i){let l=jt(i,e,t+1,r,s);if(l)return l}let a=n.children.get(":");if(a?.param){let l={...r,[a.param]:decodeURIComponent(o)},c=jt(a,e,t+1,l,s);if(c)return c}return null}function ft(n,e){let t=jt(n,e,0,{});if(t){let r=t.node.wildcardValue!==void 0;return{value:t.value,params:r?{...t.params,"*":""}:t.params,wildcard:!1}}return ci(n,e,e.length)}function ci(n,e,t){for(let r=0;r<=t;r++){let s=jt(n,e.slice(0,r),0,{},"wildcard");if(s)return{value:s.value,params:{...s.params,"*":e.slice(r).join("/")},wildcard:!0}}return null}function xn(n,e=""){let t=[];for(let[s,o]of n.value?.handlers??[]){let i=n.value?.middlewares.get(s)||[];t.push({method:s,path:e||"/",handler:o,middlewares:[...i]})}let r=n.wildcardValue;if(r)for(let[s,o]of r.handlers){let i=r.middlewares.get(s)||[];t.push({method:s,path:(e||"/")+"/*",handler:o,middlewares:[...i]})}for(let[s,o]of n.children)t.push(...xn(o,e+"/"+(s===":"?`:${o.param}`:s)));return t}function kn(n,e=""){let t=[];n.value?.handler&&t.push({path:e||"/",handler:n.value.handler,middlewares:[...n.value.middlewares]}),n.wildcardValue?.handler&&t.push({path:(e||"/")+"/*",handler:n.wildcardValue.handler,middlewares:[...n.wildcardValue.middlewares]});for(let[r,s]of n.children)t.push(...kn(s,e+"/"+(r===":"?`:${s.param}`:r)));return t}function Rn(n,e,t){for(let[r]of n.value?.handlers??[]){let s=r==="*"?"ANY":r,o=(e||"/")+(n.wildcard?"/*":""),i=n.value?.middlewares.get(r),a=i?` (+${i.length} mw)`:"";t.push(`${s.padEnd(7)} ${o}${a}`)}for(let[r,s]of n.children){let o=r===":"?`:${s.param}`:r;Rn(s,e+"/"+o,t)}}function Tn(n,e,t){if(n.value?.handler){let r=e||"/",s=n.value.middlewares.length?` (+${n.value.middlewares.length} mw)`:"";t.push(`WS ${r}${s}`)}for(let[r,s]of n.children){let o=r===":"?`:${s.param}`:r;Tn(s,e+"/"+o,t)}}async function Lt(n,e,t,r){if(n.length===0)return e(t,r);let s=0,o=(i,a)=>{if(s>=n.length)return Promise.resolve(e(i,a));let l=n[s++],c=!1,u=(d,p)=>{if(c)throw new Error("[router] next() called more than once in middleware");return c=!0,o(d,p)};return Promise.resolve(l(i,a,u))};return o(t,r)}function ui(n){return Response.json({error:"Bad Request",reason:n},{status:400})}async function Cn(n,e,t,r){let s=Vr(t);if(!s.ok)return ui(s.reason);let o=ft(n,s.segments),i=o?{value:o.value,params:Hr(o),wildcard:o.wildcard}:null;e.enrichCtx?.(r,i,s.pathname,s.query);try{if(!i)return await e.onNotFound(t,r,s.pathname);let a=e.resolveHandler(i,t,r);if(a.kind==="not-found")return await e.onNotFound(t,r,s.pathname);if(a.kind==="not-allowed")return e.onMethodNotAllowed?await e.onMethodNotAllowed(a.methods,t,r,s.pathname):new Response("Method Not Allowed",{status:405,headers:{Allow:a.methods.join(", ")}});let l=await a.run();return e.onRouteSuccess?.(t,r,s.pathname),l}catch(a){if(e.onError)return e.onError(a,t,r,s.pathname);throw a}}function Kr(){let n=new Set;return{register(e){for(let t of e)n.add(t)},check(e,t){for(let r of e)if(!n.has(r))throw new Error(`[weifuwu] Middleware at "${t}" depends on ctx.${r} but it hasn't been registered.
16
+ Register the provider before this middleware: app.use(${r}())`)},has(e){return n.has(e)}}}function zr(){let n=new Map,e=new Map;return{join(t,r){let s=n.get(t);s||(s=new Set,n.set(t,s)),s.add(r);let o=e.get(r);o||(o=new Set,e.set(r,o)),o.add(t)},leave(t){let r=e.get(t);if(r){for(let s of r){let o=n.get(s);o&&(o.delete(t),o.size===0&&n.delete(s))}e.delete(t)}},send(t,r){let s=n.get(t);if(s)for(let o of s)try{o.send(r)}catch{}},async close(){n.clear(),e.clear()}}}var En=globalThis;En.__wfRouterErrState||(En.__wfRouterErrState={errState:new Map,totalErrors:0});var mt=En.__wfRouterErrState;function Zr(n,e){mt.totalErrors++;let t=mt.errState.get(n);if(t){t.count++;return}mt.errState.set(n,{shown:!0,count:1}),console.error(`[router] ${n}\uFF08\u91CD\u590D\u9519\u8BEF\u5DF2\u53BB\u91CD\u2014\u2014\u7D2F\u8BA1 ${mt.totalErrors}\uFF09:`,e instanceof Error?e.stack||e.message:e)}function Jr(n){mt.errState.delete(n)}var di=()=>({handlers:new Map,middlewares:new Map}),Ee=class n{root=pt();wsRoot=pt();globalMws=[];errorHandler;_hasWildcard=!1;_hub;_wsCount=0;_ctxRegistry=Kr();_closeables=[];_pipeline;get pipeline(){return this._pipeline??=this.buildPipeline()}buildPipeline(){return{resolveHandler:(e,t,r)=>{let s=e.value,o=t.method;if(e.wildcard){let a=s.handlers.get(o)||s.handlers.get("*");if(!a)return{kind:"not-found"};let l=s.middlewares.get(o)||s.middlewares.get("*")||[];return{kind:"route",run:()=>this.runWithChain(l,a,t,r)}}let i=s.handlers.get(o)||s.handlers.get("*");if(!i&&o==="HEAD"&&(i=s.handlers.get("GET")),i){let a=s.middlewares.get(o)||s.middlewares.get("*")||(o==="HEAD"?s.middlewares.get("GET"):void 0)||[];return{kind:"route",run:()=>this.runWithChain(a,i,t,r)}}return s.handlers.size>0?{kind:"not-allowed",methods:[...s.handlers.keys()].filter(a=>a!=="*")}:{kind:"not-found"}},onNotFound:(e,t,r)=>{let s=()=>Response.json({error:"Not Found",path:r,method:e.method},{status:404});return this.globalMws.length>0?Lt(this.globalMws,s,e,t):s()},onMethodNotAllowed:(e,t,r)=>{let s=()=>new Response("Method Not Allowed",{status:405,headers:{Allow:e.join(", ")}});return this.globalMws.length>0?Lt(this.globalMws,s,t,r):s()},onError:(e,t,r,s)=>this.handleError(e,t,r,s),onRouteSuccess:(e,t,r)=>Jr(`${e.method} ${r}`),enrichCtx:(e,t)=>{t&&Object.assign(e.params,t.params)}}}runWithChain(e,t,r,s){let o=e.length===0?this.globalMws:[...this.globalMws,...e];return Lt(o,t,r,s)}get hub(){return this._hub||(this._hub=zr()),this._hub}wsHub(e){return this._hub=e,this}use(e){return this.globalMws.push(e),this._checkMiddlewareMeta(e,"global"),typeof e.close=="function"&&this._closeables.push(e),this}plugin(e){return e(this),this}mount(e,t){return this._mountRouter(e,t),this}onError(e){return this.errorHandler=e,this}get(e,...t){return this._route("GET",e,...t)}post(e,...t){return this._route("POST",e,...t)}put(e,...t){return this._route("PUT",e,...t)}delete(e,...t){return this._route("DELETE",e,...t)}patch(e,...t){return this._route("PATCH",e,...t)}head(e,...t){return this._route("HEAD",e,...t)}options(e,...t){return this._route("OPTIONS",e,...t)}all(e,...t){return this._route("*",e,...t)}ws(e,...t){let r=t.pop(),s=t;return Wt(this.wsRoot,e,{handler:r,middlewares:s}),this._wsCount++,this}hasWsRoutes(){return this._wsCount>0}handler(){return(e,t)=>Cn(this.root,this.pipeline,e,t)}websocketHandler(e){return Gr(e,t=>this.matchWsTrie(this.wsRoot,t),this.hub)}routes(){let e=[];return this.globalMws.length>0&&e.push(`MIDDLEWARE [${this.globalMws.length} global]`),Rn(this.root,"",e),Tn(this.wsRoot,"",e),e}_route(e,t,...r){return this._routeImpl(e,t,r)}_routeImpl(e,t,r){let s=r[r.length-1];if(s instanceof n)return this._mountRouter(t,s,r.slice(0,-1)),this;let o=r.pop(),i=r;for(let p of i)this._checkMiddlewareMeta(p,`${e} ${t}`);let a=Qr(this.root,t),l=t.includes("*"),c=l?a?.wildcardValue:a?.value;if(!l&&c?.handlers.has(e))throw new Error(`[router] route conflict: ${e} ${t} already registered`);let u=c??di();u.handlers.set(e,o),i.length>0&&u.middlewares.set(e,i);let d=Wt(this.root,t,u);return l&&(this._hasWildcard=!0),this}_mountRouter(e,t,r=[]){let s=e==="/"?"":e.replace(/\/$/,""),o=(c,u,d)=>(u.mountPath=(u.mountPath||"")+s,d(c,u)),i=r.length===0&&t.globalMws.length===0?[o]:[o,...r,...t.globalMws];for(let c of i)this._checkMiddlewareMeta(c,`mount:${e}`);let a=xn(t.root);for(let{method:c,path:u,handler:d,middlewares:p}of a)this._routeImpl(c,s+u,[...i,...p,d]);let l=kn(t.wsRoot);for(let{path:c,handler:u,middlewares:d}of l)this.ws(s+c,...i,...d,u)}matchWsTrie(e,t){let r=ft(e,t);return r?{handler:r.value.handler,middlewares:r.value.middlewares,params:r.params}:null}async handleError(e,t,r,s){let o=e instanceof Error?e:new Error(String(e));return this.errorHandler?this.errorHandler(o,t,r):o instanceof D||o instanceof he||o instanceof q?we(o):(Zr(`${t.method} ${s??new URL(t.url).pathname}`,e),Response.json({error:"Internal Server Error"},{status:500}))}onClose(e){return this._closeables.push(e),this}_closed=!1;async close(){if(!this._closed){this._closed=!0;for(let e of this._closeables)try{await e.close()}catch{}}}_checkMiddlewareMeta(e,t){let r=e.__meta??(typeof e=="object"&&e&&"middleware"in e?e.middleware().__meta:void 0);r&&(this._ctxRegistry.check(r.depends,t),this._ctxRegistry.register(r.injects))}};var qe="rl:";function pi(n){return n.headers.get("x-forwarded-for")?.split(",")[0]?.trim()??n.headers.get("x-real-ip")??"unknown"}function An(n){if(!n.redis)throw new Error("rateLimit: options.redis is required \u2014 \u4F20 redis() \u7684 .redis\uFF08\u5148 app.use(redis())\uFF09\u6216 new RedisPool()");let e={redis:n.redis,windowMs:n?.windowMs??6e4,max:n?.max??100,key:n?.key??(i=>i.headers.get("x-forwarded-for")?.split(",")[0]?.trim()??"unknown"),algorithm:n?.algorithm??"fixed",statusCode:n?.statusCode??429,message:n?.message??"Too Many Requests",headers:n?.headers??!0},t=e.redis;async function r(i,a,l){let c=(y,v)=>{throw y instanceof Error?y:new Error(`rateLimit: pipeline[${v}] failed`)};if(e.algorithm==="fixed"){let y=await t.pipeline();y.raw("INCR",qe+i).raw("TTL",qe+i);let v=await y.exec();if(v[0]instanceof Error)return c(v[0],0);if(v[1]instanceof Error)return c(v[1],1);let k=Number(v[0]),w=Number(v[1]);w<0&&await t.command("PEXPIRE",qe+i,l);let b=w>0?w:Math.ceil(l/1e3);return{allowed:k<=a,remaining:Math.max(0,a-k),resetSeconds:Math.max(1,b)}}let u=qe+i,d=Date.now(),p=d-l,h=await t.pipeline();h.raw("ZREMRANGEBYSCORE",u,0,p).raw("ZCARD",u);let m=await h.exec();if(m[0]instanceof Error)return c(m[0],0);if(m[1]instanceof Error)return c(m[1],1);let f=Number(m[1]);if(f>=a){let y=Number(await t.command("TTL",u));return{allowed:!1,remaining:0,resetSeconds:Math.max(1,y)}}return Number(await t.command("ZADD",u,d,`${d}-${Math.random().toString(36).slice(2)}`))===1&&await t.command("EXPIRE",u,Math.ceil(l/1e3)*2),{allowed:!0,remaining:Math.max(0,a-f-1),resetSeconds:Math.ceil(l/1e3)}}function s(i){let a={"Content-Type":"application/json"};return e.headers&&(a["Retry-After"]=String(i),a["RateLimit-Limit"]=String(e.max),a["RateLimit-Remaining"]="0",a["RateLimit-Reset"]=String(i)),new Response(JSON.stringify({error:e.message,retryAfter:i}),{status:e.statusCode,headers:a})}let o=(async(i,a,l)=>{a.limit=async(d,p)=>{let h=(p?.scope??"ip")==="global"?"":`:${pi(i)}`,m=`${qe}${d}${h}`,f=p?.max??e.max,g=p?.windowMs??e.windowMs,y=await r(m,f,g);if(!y.allowed){let v=new D(e.message,e.statusCode);throw v.retryAfter=y.resetSeconds,v}};let c=await r(qe+"global:"+e.key(i),e.max,e.windowMs);if(!c.allowed)return s(c.resetSeconds);let u=await l(i,a);return e.headers&&(u.headers.set("RateLimit-Limit",String(e.max)),u.headers.set("RateLimit-Remaining",String(c.remaining)),u.headers.set("RateLimit-Reset",String(c.resetSeconds))),u});return o.__meta={injects:["limit"],depends:[]},o}var Ut=class extends Error{issues;constructor(e){super(e.map(t=>`${t.path}: ${t.message}`).join("; ")),this.name="ZodError",this.issues=e}},H=class{_meta={};get metaInfo(){return this._meta}meta(e){return this._meta={...this._meta,...e},this}parse(e){let t=this._parse(e);if(!t.ok)throw new Ut([{path:t.path??"",message:t.message??"invalid"}]);return t.value}safeParse(e){let t=this._parse(e);return t.ok?{success:!0,data:t.value}:{success:!1,error:new Ut([{path:t.path??"",message:t.message??"invalid"}])}}optional(){return new Ge(this)}nullable(){return new Qe(this)}default(e){return new Ke(this,e)}refine(e,t){return new wt(this,e,t)}transform(e){return new yt(this,e)}},Ae=class extends H{_typeName(){return"string"}_parse(e){if(typeof e!="string")return{ok:!1,path:"",message:"expected string"};let t=e;return this._min!==void 0&&t.length<this._min?{ok:!1,path:"",message:`too small (min ${this._min})`}:this._max!==void 0&&t.length>this._max?{ok:!1,path:"",message:`too big (max ${this._max})`}:this._pattern&&!this._pattern.test(t)?{ok:!1,path:"",message:"invalid pattern"}:this._email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?{ok:!1,path:"",message:"invalid email"}:this._uuid&&!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t)?{ok:!1,path:"",message:"invalid uuid"}:{ok:!0,value:t}}_min;_max;_pattern;_email=!1;_uuid=!1;min(e){return this._min=e,this}max(e){return this._max=e,this}regex(e,t){return this._pattern=e,this}email(){return this._email=!0,this}uuid(){return this._uuid=!0,this}},Ne=class extends H{_typeName(){return"number"}_parse(e){if(typeof e!="number"||Number.isNaN(e))return{ok:!1,path:"",message:"expected number"};let t=e;return this._int&&!Number.isInteger(t)?{ok:!1,path:"",message:"expected integer"}:this._min!==void 0&&t<this._min?{ok:!1,path:"",message:`too small (min ${this._min})`}:this._max!==void 0&&t>this._max?{ok:!1,path:"",message:`too big (max ${this._max})`}:{ok:!0,value:t}}_int=!1;_min;_max;int(){return this._int=!0,this}min(e){return this._min=e,this}max(e){return this._max=e,this}positive(){return this._min=0,this}},Fe=class extends H{_typeName(){return"boolean"}_parse(e){return typeof e!="boolean"?{ok:!1,path:"",message:"expected boolean"}:{ok:!0,value:e}}},Oe=class extends H{lit;constructor(e){super(),this.lit=e}get value(){return this.lit}_typeName(){return"literal"}_parse(e){return e!==this.lit?{ok:!1,path:"",message:`expected literal ${JSON.stringify(this.lit)}`}:{ok:!0,value:e}}},Pe=class extends H{raw;constructor(e){super(),this.raw=e}get values(){return this.raw}_typeName(){return"enum"}_parse(e){return typeof e!="string"||!this.raw.includes(e)?{ok:!1,path:"",message:`expected one of ${this.raw.join(" | ")}`}:{ok:!0,value:e}}},De=class extends H{_typeName(){return"datetime"}_parse(e){return typeof e!="string"||Number.isNaN(Date.parse(e))?{ok:!1,path:"",message:"expected datetime string (ISO)"}:{ok:!0,value:e}}},gt=class extends H{dims;constructor(e){super(),this.dims=e}_typeName(){return"vector"}_parse(e){return typeof e!="object"||e===null||!Array.isArray(e)||!e.every(t=>typeof t=="number")?{ok:!1,path:"",message:"expected number[] vector"}:this.dims>0&&e.length!==this.dims?{ok:!1,path:"",message:`expected vector(${this.dims})\u2014\u2014got ${e.length} dims`}:{ok:!0,value:e}}},On=class extends H{_typeName(){return"json"}_parse(e){return{ok:!0,value:e}}},Pn=class n extends H{shape;constructor(e){super(),this.shape=e}_typeName(){return"object"}_parse(e){if(typeof e!="object"||e===null||Array.isArray(e))return{ok:!1,path:"",message:"expected object"};let t={},r=[];for(let[s,o]of Object.entries(this.shape)){let i=o._parse(e[s]);if(!i.ok){r.push({path:s,message:i.message??""});continue}t[s]=i.value}return r.length?{ok:!1,path:r[0].path,message:r[0].message}:{ok:!0,value:t}}pick(e){let t={};for(let r of e)t[r]=this.shape[r];return new n(t)}omit(e){let t={};for(let[r,s]of Object.entries(this.shape))e.includes(r)||(t[r]=s);return new n(t)}extend(e){return new n({...this.shape,...e})}},ht=class extends H{inner;constructor(e){super(),this.inner=e}get itemSchema(){return this.inner}_typeName(){return"array"}_parse(e){if(!Array.isArray(e))return{ok:!1,path:"",message:"expected array"};if(this._min!==void 0&&e.length<this._min)return{ok:!1,path:"",message:`too small (min ${this._min})`};if(this._max!==void 0&&e.length>this._max)return{ok:!1,path:"",message:`too big (max ${this._max})`};let t=[];for(let r=0;r<e.length;r++){let s=this.inner._parse(e[r]);if(!s.ok)return{ok:!1,path:`${r}`,message:s.message};t.push(s.value)}return{ok:!0,value:t}}_min;_max;min(e){return this._min=e,this}max(e){return this._max=e,this}},_n=class extends H{options;constructor(e){super(),this.options=e}_typeName(){return"union"}_parse(e){let t=null;for(let r of this.options){let s=r._parse(e);if(s.ok)return{ok:!0,value:s.value};t||(t={path:s.path??"",message:s.message??""})}return{ok:!1,path:"",message:`expected union (${t?.message})`}}},Mn=class extends H{disc;options;discValueOf;constructor(e,t,r){super(),this.disc=e,this.options=t,this.discValueOf=r}_typeName(){return"disUnion"}_parse(e){if(typeof e!="object"||e===null)return{ok:!1,path:"",message:"expected object"};let t=e[this.disc];for(let r of this.options)if(this.discValueOf(r.shape)===t){let s=r._parse(e);return s.ok?{ok:!0,value:s.value}:{ok:!1,path:`(${String(t)})`,message:s.message??""}}return{ok:!1,path:this.disc,message:`invalid discriminator value ${JSON.stringify(t)}`}}};function wi(n,e){let t=n[e];if(t instanceof Oe)return t.lit;if(t instanceof Pe)return t.values;throw new Error(`z.discriminatedUnion: \u5224\u522B\u5B57\u6BB5\u9700\u4E3A literal/enum\u2014\u2014\u5F97\u5230 ${t?._typeName?.()}`)}var Ge=class extends H{inner;constructor(e){super(),this.inner=e}_typeName(){return"optional"}_parse(e){return e===void 0?{ok:!0,value:void 0}:this.inner._parse(e)}},Qe=class extends H{inner;constructor(e){super(),this.inner=e}_typeName(){return"nullable"}_parse(e){return e===null?{ok:!0,value:null}:this.inner._parse(e)}},Ke=class extends H{inner;d;constructor(e,t){super(),this.inner=e,this.d=t}_typeName(){return"default"}_parse(e){if(e===void 0){let t=typeof this.d=="function"?this.d():this.d;return this.inner._parse(t)}return this.inner._parse(e)}},wt=class extends H{inner;fn;msg;constructor(e,t,r){super(),this.inner=e,this.fn=t,this.msg=r}_typeName(){return"effects"}_parse(e){let t=this.inner._parse(e);return t.ok?this.fn(t.value)?{ok:!0,value:t.value}:{ok:!1,path:"",message:this.msg??"refine failed"}:{ok:!1,path:t.path??"",message:t.message??""}}},yt=class extends H{inner;fn;constructor(e,t){super(),this.inner=e,this.fn=t}_typeName(){return"transform"}_parse(e){let t=this.inner._parse(e);return t.ok?{ok:!0,value:this.fn(t.value)}:{ok:!1,path:t.path??"",message:t.message??""}}},S={string:()=>new Ae,number:()=>new Ne,boolean:()=>new Fe,literal:n=>new Oe(n),enum:n=>new Pe(n),date:()=>new De,uuid:()=>new Ae().uuid(),json:()=>new On,vector:n=>new gt(n),object:n=>new Pn(n),array:n=>new ht(n),union:n=>new _n(n),discriminatedUnion:(n,e)=>new Mn(n,e,t=>wi(t,n))};function ze(n,e){return n.meta(e)}function In(n){let e={},t;for(let[o,i]of Object.entries(n.fields)){let a=i.metaInfo??{};e[o]={column:a.column??o,...a.pk?{pk:!0}:{},...a.unique?{unique:!0}:{},...a.notNull?{notNull:!0}:{},...a.default!==void 0?{default:a.default}:{},...a.references?{references:a.references}:{},...a.onDelete?{onDelete:a.onDelete}:{}},a.pk&&(t=o)}let r={table:n.table,fields:n.fields,dbFields:e,pkField:t},s=o=>{let i=e[o];return i?.default==="random"||i?.default==="now"};return r.insertSchema=(o={})=>{let i={};for(let[a,l]of Object.entries(n.fields)){if(s(a)||o.omit?.includes(a))continue;let c=l,u=c._typeName?.()==="nullable";i[a]=e[a]?.default!==void 0||u?c.optional():c}return es(S.object(i))},r.toDb=o=>{let i={},a=o;for(let[l,c]of Object.entries(a)){let u=e[l];i[u?.column??l]=c}return i},r.fromDb=o=>{let i={},a=o;for(let[l,c]of Object.entries(e))a[c.column??l]!==void 0&&(i[l]=a[c.column??l]);for(let l of Object.keys(a))!Object.values(e).some(u=>u.column===l)&&!(l in i)&&(i[l]=a[l]);return i},r.updateSchema=(o={})=>{let i={};for(let[a,l]of Object.entries(n.fields))s(a)||o.omit?.includes(a)||(i[a]=l.optional());return es(S.object(i))},r}function es(n){return n.transform(e=>typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0)))}var E={pk:n=>ze(n,{pk:!0,default:"random"}),req:n=>ze(n,{notNull:!0}),col:(n,e)=>ze(n,{column:e}),now:n=>ze(n,{default:"now"}),unique:n=>ze(n,{unique:!0}),dflt:(n,e)=>ze(n,{default:e})};import{randomBytes as Ru,scrypt as yi,timingSafeEqual as Tu}from"node:crypto";import{promisify as bi}from"node:util";var Eu=bi(yi);var Du={users:{id:E.pk(S.uuid()),email:E.req(S.string()).meta({unique:!0}),password_hash:S.string().nullable(),name:S.string().nullable(),role:S.string().nullable(),tenant:S.string().nullable(),email_verified:S.boolean().meta({notNull:!0,default:!1}),created_at:E.now(S.date())},sessions:{token_hash:E.req(S.string()),user_id:E.req(S.uuid()),app_id:S.string().nullable(),expires_at:E.req(S.date()),revoked_at:S.date().nullable(),created_at:E.now(S.date())},apps:{id:E.pk(S.uuid()),slug:E.req(S.string()).meta({unique:!0}),name:E.req(S.string()),owner_user_id:S.uuid().nullable(),open_registration:S.boolean().meta({notNull:!0,default:!1}),app_key:S.string().nullable(),created_at:E.now(S.date())},members:{app_id:E.req(S.uuid()),user_id:E.req(S.uuid()),role:S.string().meta({notNull:!0,default:"member"}),invited_by:S.uuid().nullable(),joined_at:E.now(S.date()),source:S.string().nullable(),last_login_at:S.date().nullable()}};var Ri={tables:[{name:"_weifuwu_users",columns:{id:E.pk(S.uuid()),email:E.req(S.string()).meta({unique:!0}),password_hash:S.string(),name:S.string(),role:S.string(),tenant:S.string(),email_verified:S.boolean().meta({default:!1}),created_at:S.date().meta({default:"now"})},dropNotNull:["password_hash"]},{name:"_weifuwu_sessions",columns:{token_hash:S.string().meta({pk:!0}),user_id:E.req(S.uuid()).meta({references:"_weifuwu_users",onDelete:"cascade"}),app_id:S.string(),expires_at:S.date().meta({notNull:!0}),revoked_at:S.date(),created_at:S.date().meta({default:"now"})}},{name:"_weifuwu_apps",columns:{id:E.pk(S.uuid()),slug:E.req(S.string()).meta({unique:!0}),name:E.req(S.string()),owner_user_id:S.uuid().meta({references:"_weifuwu_users",onDelete:"cascade"}),open_registration:S.boolean().meta({default:!1}),created_at:S.date().meta({default:"now"}),app_key:S.string()}},{name:"_weifuwu_app_members",columns:{app_id:E.req(S.uuid()).meta({references:"_weifuwu_apps",onDelete:"cascade"}),user_id:E.req(S.uuid()).meta({references:"_weifuwu_users",onDelete:"cascade"}),role:S.string().meta({default:"member"}),invited_by:S.uuid(),joined_at:S.date().meta({default:"now"}),source:S.string(),last_login_at:S.date()},uniques:[["app_id","user_id"]]}]};function Ti(n){let e=n;for(;;){let t=e.inner;if(t&&typeof e._typeName=="string"&&["optional","nullable","default","effects","transform"].includes(e._typeName))e=t;else break}return e}function Ci(n,e){let r=Ti(n.fields[e]).values;return Array.isArray(r)?r.map(String):void 0}function $n(n,e,t={}){let r=t.maxLimit??100,s=t.defaultLimit??20,i=e.__shape??e,a=n.searchParams,l=Object.keys(i.fields),c=new Set(l),u={};for(let[f,g]of a.entries()){if(f==="sort"||f==="limit"||f==="offset")continue;let y=Ci(i,f);if(y&&!y.includes(g))throw new Error(`invalid enum value for ${f}: ${g}\uFF08\u5141\u8BB8\uFF1A${y.join(" | ")}\uFF09`);u[f]={eq:g}}let d=[],p=a.get("sort");if(p)for(let f of p.split(",")){let g=f.startsWith("-")?"desc":"asc",y=g==="desc"?f.slice(1):f;if(!c.has(y))throw new Error(`invalid sort field: ${y}`);d.push({field:y,dir:g})}let h=Math.min(r,Math.max(1,parseInt(a.get("limit")??String(s),10)||s)),m=Math.max(0,parseInt(a.get("offset")??"0",10)||0);return{filter:u,sort:d,limit:h,offset:m}}function Ei(n){return n.inner}function Vt(n){let e=n._typeName();switch(e){case"string":return n._uuid?"UUID":"TEXT";case"number":return n._int?"INT":"DOUBLE PRECISION";case"boolean":return"BOOLEAN";case"datetime":return"TIMESTAMPTZ";case"json":case"object":case"array":return"JSONB";case"vector":return"JSONB";case"enum":return"TEXT";case"optional":case"nullable":case"default":case"effects":case"transform":return Vt(Ei(n)??n);default:throw new Error(`schema: \u65E0\u6CD5\u6620\u5C04 zod \u7C7B\u578B ${e}\uFF08\u5217\u578B\u6CE8\u89E3 columnTypes \u53EF\u8986\u76D6\uFF09`)}}var is=["col","eq","gt","gte","lt","lte","ne","in","notIn","like","ilike","isNull","between"];function Ai(n,e){if(typeof n!="object"||n===null||typeof e!="object"||e===null)return null;let t=n,r=e,s=is.some(i=>Object.hasOwn(t,i)),o=is.some(i=>Object.hasOwn(r,i));if(!s||!o)return null;for(let i of Object.keys(r))if(Object.hasOwn(t,i))return null;return{...t,...r}}function Oi(n,e,t){if(e==="and"&&Array.isArray(t)){n.and=[...n.and??[],...t];return}if(!(e in n)){n[e]=t;return}let r=Ai(n[e],t);if(r!==null){n[e]=r;return}n.and=[...n.and??[],{[e]:t}]}function Ht(n,e){let t={...n};for(let[r,s]of Object.entries(e)){if(r==="or"&&t.or!==void 0&&Array.isArray(s)){t.and=[...t.and??[],{or:s}];continue}Oi(t,r,s)}return t}function bt(n,e="where"){if(n!=null){if(Array.isArray(n)){for(let t of n)bt(t,e);return}if(typeof n=="object")for(let[t,r]of Object.entries(n)){if(r===void 0)throw new q(`weifuwu/db: ${e}.${t} \u4E0D\u80FD\u4E3A undefined\u2014\u2014\u7701\u7565\u8BE5\u952E\uFF08\u65E0\u8BE5\u6761\u4EF6\uFF09\u6216\u663E\u5F0F isNull`);typeof r=="object"&&r!==null&&bt(r,`${e}.${t}`)}}}function Nn(n){let e=(o,i)=>{let a={kind:"select",table:o,alias:i},l={distinct(){return a.distinct=!0,l},select(...c){return a.cols=c.length===1&&c[0]==="*"?void 0:c,l},join(c,u,d){a.joins??=[];let p=c,h=d?.alias;return!h&&/\s/.test(c)&&([p,h]=c.split(/\s+/)),a.joins.push({table:p,alias:h,type:d?.type??"inner",on:u}),l},where(c){return bt(c),a.where=a.where?Ht(a.where,c):c,l},in(c,u,d=!1){return a.sub??=[],a.sub.push({type:"in",col:c,query:u,not:d}),l},exists(c,u=!1){return a.sub??=[],a.sub.push({type:"exists",query:c,not:u}),l},groupBy(...c){return a.groupBy=c,l},having(c){return a.having=c,l},count(c="*",u="count",d){return a.aggregate??=[],a.aggregate.push({fn:"count",col:c,as:u,filter:d}),l},sum(c,u="sum",d){return a.aggregate??=[],a.aggregate.push({fn:"sum",col:c,as:u,filter:d}),l},avg(c,u="avg",d){return a.aggregate??=[],a.aggregate.push({fn:"avg",col:c,as:u,filter:d}),l},min(c,u="min",d){return a.aggregate??=[],a.aggregate.push({fn:"min",col:c,as:u,filter:d}),l},max(c,u="max",d){return a.aggregate??=[],a.aggregate.push({fn:"max",col:c,as:u,filter:d}),l},orderBy(c,u="asc"){return a.orderBy??=[],a.orderBy.push({col:c,dir:u}),l},vectorScore(c,u,d){return a.vector={col:c,vec:u,as:d},l},limit(c){return a.limit=c,l},offset(c){return a.offset=c,l},async run(){return n(a)},async one(){return(await n(a))[0]},toQuery(){return structuredClone(a)}};return l},t=o=>{let i={kind:"insert",table:o,rows:[]},a={values(l){return i.rows.push(l),a},rows(l){return i.rows.push(...l),a},returning(...l){return i.returning=l.length===1&&l[0]==="*"?"*":l,a},onConflict(l,c=!1,u){return i.onConflict={col:l,update:c,merge:u},a},async run(){return n(i)},toQuery(){return structuredClone(i)}};return a},r=o=>{let i={kind:"update",table:o,sets:{}},a={set(l){return i.sets=l,a},where(l){return bt(l),i.where=i.where?Ht(i.where,l):l,a},returning(...l){return i.returning=l.length===1&&l[0]==="*"?"*":l,a},async run(){if(!i.where)throw new q("weifuwu/db: UPDATE \u5FC5\u987B\u5E26 WHERE\uFF08\u5168\u8868\u66F4\u65B0\u662F\u5371\u9669\u64CD\u4F5C\u2014\u2014\u9010\u6279 where \u6216\u8FC1\u79FB\u9762\u663E\u5F0F\u6267\u884C\uFF09");return n(i)},toQuery(){return structuredClone(i)}};return a},s=o=>{let i={kind:"delete",table:o},a={where(l){return bt(l),i.where=i.where?Ht(i.where,l):l,a},returning(...l){return i.returning=l.length===1&&l[0]==="*"?"*":l,a},async run(){if(!i.where)throw new q("weifuwu/db: DELETE \u5FC5\u987B\u5E26 WHERE\uFF08\u5168\u8868\u6E05\u7A7A\u662F\u5371\u9669\u64CD\u4F5C\u2014\u2014\u8FC1\u79FB\u9762 runMigration \u663E\u5F0F\u6267\u884C\uFF09");return n(i)},toQuery(){return structuredClone(i)}};return a};return{from:(o,i)=>{if(!i&&/\s/.test(o)){let[a,l]=o.split(/\s+/);return e(a,l)}return e(o,i)},insert:o=>t(o),update:o=>r(o),delete:o=>s(o)}}var Fn=null,Dn=null;function Bt(n){n.gql&&(Fn=n.gql),n.rest&&(Dn=n.rest)}function qt(n,e){return as(n,e,new Map)}function as(n,e,t){let r=Nn(async l=>await n.executeQuery(l));function s(l,c){let u=t.get(l);if(u)return u.t;if(c===void 0)throw new q(`weifuwu/db: \u8868 ${l} \u672A\u6CE8\u518C\uFF08tx/ctx \u6D3E\u751F\u7528 orm.table(name, shapeDef) \u5148\u884C\u6CE8\u518C\uFF09`);let d=Object.keys(c),p=In({table:l,fields:c}),h=d.map(w=>p.dbFields[w]?.column??w),m=w=>p.fromDb(w),f=new Set(["distinct","select","join","where","in","exists","groupBy","having","count","sum","avg","min","max","orderBy","limit","offset","values","rows","returning","onConflict","set"]),g=w=>w==="*"?"*":typeof w=="string"?p.dbFields[w]?.column??w:w,y=w=>{let b={run:()=>w.run().then(x=>x.map(R=>m(R))),one:async()=>(await b.run())[0]};for(let x of f){if(x==="returning")continue;let R=w[x];typeof R=="function"&&(b[x]=(...A)=>(R.apply(w,A),b))}return b.returning=(...x)=>(w.returning(...x.map(R=>g(R))),b),b},v={};for(let w of d)v[w]={ref:p.dbFields[w]?.column??w,__out:void 0};let k={c:v,select:(...w)=>y(r.from(l).select(...w.length?w.map(b=>g(b)):["*"])),insert:w=>{let b=p.insertSchema(),x=Array.isArray(w)?w:[w],R=r.insert(l);for(let A of x)R=R.values(p.toDb(b.parse(A)));return y(R.returning(...h))},update:w=>{let b=Object.entries(w).filter(([,A])=>typeof A=="object"&&A!==null&&["__jsonbAppend","__inc","__now","__interval","__colRef","__monthStart"].some(F=>F in A)).map(([A])=>A),x=Object.fromEntries(Object.entries(w).filter(([A])=>!b.includes(A))),R={...p.updateSchema().parse(x),...Object.fromEntries(b.map(A=>[A,w[A]]))};return y(r.update(l).set(p.toDb(R)).returning(...h))},delete:()=>y(r.delete(l).returning(...h)),exists:async w=>(await r.from(l).select("1").where(w).limit(1).run()).length>0,paginate:async w=>{let b=Math.max(1,Math.min(w.limit??50,100)),x=Math.max(0,w.offset??0),R=r.from(l);w.filter&&R.where(w.filter);let[A]=await R.count("*","total").run(),F=Number(A.total??0),ce=r.from(l);w.filter&&ce.where(w.filter);for(let re of w.sort??[])ce.orderBy(re.field,re.dir==="desc"?"desc":"asc");return ce.limit(b).offset(x),{rows:await y(ce).run(),total:F}},shapeDef:c,__shape:p,__shapeDbFields:p.dbFields};return t.set(l,{t:k}),k}let o=l=>{let c=()=>e?.value(l),u=(d,p)=>{let h=s(d,p),m=h.__shape,f=e&&m.dbFields[e.field]?m.dbFields[e.field].column??e.field:null,g=()=>{let y=c();return y!==void 0&&f?{[f]:{eq:y}}:null};return{...h,select:(...y)=>{let v=h.select(...y),k=g();return k&&v.where(k),v},insert:y=>{let v=Array.isArray(y)?y:[y],k=c(),w=v.map(b=>g()&&b[e.field]===void 0?{...b,[e.field]:k}:b);return h.insert(Array.isArray(y)?w:w[0])},update:y=>{let v=h.update(y),k=g();return k&&v.where(k),v},delete:()=>{let y=h.delete(),v=g();return v&&y.where(v),y},paginate:async y=>{let v=g();return h.paginate({...y,filter:v?{and:[y.filter??{},v]}:y.filter})}}};return{...i(),ctxTable:u}},i=()=>a,a={table:s,query:r,gql:(l,c)=>{if(!l.__shape)throw new Error("orm.gql: \u8868\u672A\u6CE8\u518C\uFF08orm.table \u5148\u884C\uFF09");if(!Fn)throw new Error("orm.gql: \u751F\u6210\u5668\u672A\u6CE8\u518C\uFF08\u4ECE weifuwu \u5BFC\u5165\u81EA\u5E26 gql \u9762\uFF0C\u6216\u5148\u52A0\u8F7D db/gql-from-shape.ts\uFF09");let u=c,d={...u,...u?.tenant===void 0&&e?{tenant:{field:e.field,value:e.value}}:{},sql:()=>a};return Fn(l.__shape,d)},rest:(l,c)=>{if(!l.__shape)throw new Error("orm.rest: \u8868\u672A\u6CE8\u518C\uFF08orm.table \u5148\u884C\uFF09");if(!Dn)throw new Error("orm.rest: \u751F\u6210\u5668\u672A\u6CE8\u518C\uFF08\u4ECE weifuwu \u5BFC\u5165\u81EA\u5E26 rest \u9762\uFF0C\u6216\u5148\u52A0\u8F7D db/rest-from-shape.ts\uFF09");return Dn(l.__shape,c)},withCtx:o,execute:l=>n.executeQuery(l),tables:()=>{let l=[];for(let[c,u]of t)l.push({name:c,fields:u.t.shapeDef,dbFields:u.t.__shapeDbFields});return l},transaction:l=>n.transaction?n.transaction(async c=>l(as({executeQuery:d=>c(d)},e,t))):l(a)};return a}function Gt(n){let e=new Map;return{executeQuery:t=>Promise.resolve(n.executeQuery(t)),transaction:t=>{if(!n.snapshot||!n.restore)return t(s=>Promise.resolve(n.executeQuery(s)));let r=n.snapshot();return t(s=>Promise.resolve(n.executeQuery(s))).catch(s=>{throw n.restore(r),s})}}}function jn(n,e){let t={};if(!n)return t;for(let[r,s]of Object.entries(n)){if(r==="and"||r==="or"){let l=(Array.isArray(s)?s:[s]).map(c=>jn(c,e));t[r]=l;continue}if(s===null||typeof s!="object")continue;let o=e.dbFields[r]?.column??r,i=s;if(i.eq===null&&Object.keys(i).length===1){t[o]={isNull:!0};continue}if(Object.keys(i).some(l=>l==="eq")&&Object.keys(i).length===1&&typeof i.eq!="object"){t[o]={eq:i.eq};continue}let a={};for(let[l,c]of Object.entries(i)){if(c===void 0)throw new q(`filter \u503C\u4E0D\u80FD\u4E3A undefined\uFF08\u5217 ${o} \u7B97\u5B50 ${l}\uFF09\u2014\u2014\u7701\u7565\u8BE5\u952E\u6216\u663E\u5F0F isNull`);if(c===null){if(l==="eq"){a.isNull=!0;continue}continue}if(!(l==="eq"&&c===null)){if(l==="contains"){a.ilike=`%${String(c).replace(/([%_])/g,"\\$1")}%`;continue}if(l==="startsWith"){a.ilike=`${String(c).replace(/([%_])/g,"\\$1")}%`;continue}if(l==="endsWith"){a.ilike=`%${String(c).replace(/([%_])/g,"\\$1")}`;continue}a[l]=c}}Object.keys(a).length&&(t[o]=a)}return t}function Wn(n){let e=n;for(;;)if(e instanceof Ge||e instanceof Qe||e instanceof Ke||e instanceof wt)e=e.inner;else if(e instanceof yt)e=e.inner;else break;return e}function ls(n){return n instanceof Ge||n instanceof Ke||n instanceof Qe}function je(n){return n.replace(/[-_](.)/g,(e,t)=>t.toUpperCase()).replace(/^(.)/,e=>e.toUpperCase())}function Qt(n,e,t,r){let s=Wn(n);if(s instanceof Ae||s instanceof De)return"String";if(s instanceof Ne)return"Float";if(s instanceof Fe)return"Boolean";if(s instanceof Oe)return t.has(e)||(t.add(e),r.push(`enum ${e} { ${JSON.stringify(s.value)} }`)),e;if(s instanceof Pe)return t.has(e)||(t.add(e),r.push(`enum ${e} { ${s.values.join(" ")} }`)),e;if(s instanceof ht){let o=Qt(s.itemSchema,`${e}Item`,t,r);return o?`[${o}!]`:null}return s instanceof gt?"[Float!]":null}function cs(n,e={}){let t=e.name??je(n.table),r=new Set,s=[],o=[],i=[],a=[],l=[],c=[],u=new Set(e.hidden??[]),d=m=>u.has(m);for(let[m,f]of Object.entries(n.fields)){if(d(m))continue;let g=ls(f)?"":"!",y=Qt(f,`${t}${je(m)}Enum`,r,s);y&&o.push(` ${m}: ${y}${g}`);let v=Wn(f),k=v instanceof Ae||v instanceof De?"str":v instanceof Ne?"num":v instanceof Fe?"bool":null;if(!k){if(v instanceof Pe||v instanceof Oe){let R=Qt(f,`${t}${je(m)}Enum`,r,s);R&&i.push(`input ${t}${je(m)}Filter {
17
17
  eq: ${R}
18
18
  ne: ${R}
19
19
  in: [${R}!]
@@ -22,7 +22,7 @@ Sec-WebSocket-Accept: ${u}\r
22
22
  }`)}continue}let w=["eq","ne","in","notIn","isNull"];k==="str"&&w.push("contains","ilike","startsWith","endsWith"),k==="num"&&w.push("gt","gte","lt","lte");let b=k==="num"?"Float":k==="bool"?"Boolean":"String",x=w.map(R=>` ${R}: ${R==="in"||R==="notIn"?`[${b}!]`:R==="isNull"?"Boolean":b}`).join(`
23
23
  `);i.push(`input ${t}${je(m)}Filter {
24
24
  ${x}
25
- }`),a.push(` ${m}`)}for(let[m,f]of Object.entries(n.fields)){if(Pi(n,m)||d(m))continue;let g=Qt(f,`${t}${je(m)}Enum`,r,s);if(!g)continue;let y=m===e.tenant?.field||as(f)||n.dbFields[m]?.default!==void 0;l.push(` ${m}: ${g}${y?"":"!"}`),c.push(` ${m}: ${g}`)}let p=Object.keys(n.fields).filter(m=>{if(d(m))return!1;let f=Wn(n.fields[m]);return f instanceof Ae||f instanceof De||f instanceof Ne||f instanceof Fe||f instanceof Pe||f instanceof Oe});return{typeDefs:[`type ${t} {
25
+ }`),a.push(` ${m}`)}for(let[m,f]of Object.entries(n.fields)){if(Pi(n,m)||d(m))continue;let g=Qt(f,`${t}${je(m)}Enum`,r,s);if(!g)continue;let y=m===e.tenant?.field||ls(f)||n.dbFields[m]?.default!==void 0;l.push(` ${m}: ${g}${y?"":"!"}`),c.push(` ${m}: ${g}`)}let p=Object.keys(n.fields).filter(m=>{if(d(m))return!1;let f=Wn(n.fields[m]);return f instanceof Ae||f instanceof De||f instanceof Ne||f instanceof Fe||f instanceof Pe||f instanceof Oe});return{typeDefs:[`type ${t} {
26
26
  ${o.join(`
27
27
  `)}
28
28
  }`,...s,...i,`input ${t}Filter {
@@ -52,11 +52,11 @@ ${c.join(`
52
52
  ${oe(t)}Delete(id: ID!): ${t}
53
53
  }`].join(`
54
54
 
55
- `),resolvers:_i(n,t,e)}}function Pi(n,e){let t=n.dbFields[e];return t?.default==="random"||t?.default==="now"}function oe(n){return n.replace(/^(.)/,e=>e.toLowerCase())}function _i(n,e,t){let r=n.table,s=n.pkField??"id",o=new Set(t.hidden??[]),a=Object.keys(n.fields).filter(m=>!o.has(m)).map(m=>n.dbFields[m]?.column??m),l=m=>{let f=n.fromDb(m);for(let g of o)delete f[g];return f},c=t.sql??(m=>m.orm),u=t.tenant?n.dbFields[t.tenant.field]?.column??t.tenant.field:void 0;function d(m){return c(m).query}function p(m,f){let g=jn(m,n);if(u&&f){let y=t.tenant.value(f);y!==void 0&&g[u]===void 0&&(g[u]={eq:y})}return g}async function h(m,f){let g=d(f).from(r).select(...a),y=p(m.filter,f);Object.keys(y).length&&g.where(y);let v=m.sort;if(v?.length)for(let w of v)g.orderBy(n.dbFields[w.field]?.column??w.field,w.dir==="desc"?"desc":"asc");return m.limit!==void 0&&m.limit!==null&&g.limit(Math.min(Number(m.limit),t.maxLimit??100)),m.offset!==void 0&&m.offset!==null&&g.offset(Number(m.offset)),(await g.run()).map(w=>l(w))}return{Query:{[`${oe(e)}List`]:async(m,f,g)=>await h(f,g),[`${oe(e)}ListPage`]:async(m,f,g)=>{let y=await h(f,g),v=p(f.filter,g),k=await d(g).from(r).count("*","__total").where(v).run(),w=Number(k[0]?.__total??y.length);return{rows:y,total:Number.isFinite(w)?w:y.length}},[`${oe(e)}One`]:async(m,f,g)=>{let y=await d(g).from(r).select(...a).where(p(f.filter,g)).limit(1).run();return y[0]?l(y[0]):null}},Mutation:{[`${oe(e)}Insert`]:async(m,f,g)=>{let y={...f.data};if(t.tenant){let b=t.tenant.value(g);b!==void 0&&y[t.tenant.field]===void 0&&(y[t.tenant.field]=b)}let v=n.insertSchema().parse(y),k=n.toDb(v),w=await d(g).insert(r).values(k).returning(...a).run();return w[0]?l(w[0]):null},[`${oe(e)}Update`]:async(m,f,g)=>{let y=n.updateSchema().parse(f.patch),v=n.toDb(y),k=p({[s]:{eq:f.id}},g),w=await d(g).update(r).set(v).where(k).returning(...a).run();return w[0]?l(w[0]):null},[`${oe(e)}Delete`]:async(m,f,g)=>{let y=p({[s]:{eq:f.id}},g),v=await d(g).from(r).select(...a).where(y).run();return v.length?(await d(g).delete(r).where(y).run(),l(v[0])):null}}}}Bt({gql:ls});function cs(n,e={}){let t=e.name??n.table,r=new Set(e.hidden??[]),s=e.maxLimit??100,o=Object.keys(n.fields).filter(p=>!r.has(p)),i=o.map(p=>n.dbFields[p]?.column??p),a=new Set(o),l=n.pkField??"id",c=p=>{let h=n.fromDb(p);for(let m of r)delete h[m];return h},u=p=>{let h=p.orm;return typeof h.ctxTable=="function"?h.ctxTable(t):h.table(t)},d=async p=>{let h=await p.json().catch(()=>null);if(!h||typeof h!="object")throw new Error("invalid JSON body");return h};return{mount:(p,h)=>{p.get(h,async(m,f)=>{try{let g=e.hooks;await g?.beforeList?.(m,f);let y=new URL(m.url),v=u(f),{filter:k,sort:w,limit:b,offset:x}=$n(y,n,{maxLimit:s,defaultLimit:20}),A=await v.paginate({filter:k,sort:w,limit:b,offset:x}),F=A.rows.map(c);return g?.afterList&&(F=await g.afterList(F,m,f)),Response.json({[t]:F,total:A.total})}catch(g){return we(g)}}),p.get(`${h}/:id`,async(m,f)=>{try{let g=f.params.id,v=await u(f).select(...i).where({[l]:{eq:g}}).limit(1).run();return v.length?Response.json(c(v[0])):Response.json({error:"not found"},{status:404})}catch(g){return we(g)}}),p.post(h,async(m,f)=>{try{await e.hooks?.beforeInsert?.(await d(m).catch(()=>({})),m,f);let g=await d(m),v=await u(f).insert(g).returning(...i).run();return Response.json(c(v[0]??{}),{status:201})}catch(g){return we(g)}}),p.patch(`${h}/:id`,async(m,f)=>{try{let g=f.params.id;await e.hooks?.beforeUpdate?.(g,await d(m).catch(()=>({})),m,f);let y=await d(m),k=await u(f).update(y).where({[l]:{eq:g}}).returning(...i).run();return k.length?Response.json(c(k[0])):Response.json({error:"not found"},{status:404})}catch(g){return we(g)}}),p.delete(`${h}/:id`,async(m,f)=>{try{let g=f.params.id;await e.hooks?.beforeDelete?.(g,m,f);let y=u(f);return(await y.select(...i).where({[l]:{eq:g}}).limit(1).run()).length?(await y.delete().where({[l]:{eq:g}}).run(),new Response(null,{status:204})):Response.json({error:"not found"},{status:404})}catch(g){return we(g)}})}}}Bt({rest:cs});var vd={conversations:{id:E.pk(S.uuid()),type:S.string().meta({notNull:!0,default:"direct"}),created_by:S.uuid().nullable(),direct_key:S.string().nullable(),created_at:E.now(S.date())},members:{conversation_id:E.req(S.uuid()),user_id:E.req(S.uuid()),last_read_at:S.date().nullable(),joined_at:E.now(S.date())},messages:{id:E.pk(S.uuid()),conversation_id:E.req(S.uuid()),sender_type:S.string().meta({notNull:!0,default:"user"}),sender_id:S.uuid().nullable(),content:E.req(S.string()),msg_type:S.string().meta({notNull:!0,default:"text"}),created_at:E.now(S.date()),edited_at:S.date().nullable(),deleted_at:S.date().nullable()}};var Ii={tables:[{name:"_weifuwu_conversations",columns:{id:E.pk(S.uuid()),type:S.string().meta({default:"direct"}),created_by:S.uuid(),direct_key:S.string().nullable().meta({unique:!0}),created_at:S.date().meta({default:"now"})}},{name:"_weifuwu_conversation_members",columns:{conversation_id:E.req(S.uuid()).meta({references:"_weifuwu_conversations",onDelete:"cascade"}),user_id:E.req(S.uuid()),last_read_at:S.date(),joined_at:S.date().meta({default:"now"})},uniques:[["conversation_id","user_id"]]},{name:"_weifuwu_messages",columns:{id:E.pk(S.uuid()),conversation_id:E.req(S.uuid()).meta({references:"_weifuwu_conversations",onDelete:"cascade"}),sender_type:S.string().meta({default:"user"}),sender_id:S.uuid(),content:S.string().meta({notNull:!0}),msg_type:S.string().meta({default:"text"}),created_at:S.date().meta({default:"now"}),edited_at:S.date(),deleted_at:S.date()},indexes:[{cols:["conversation_id",{col:"created_at",desc:!0},{col:"id",desc:!0}],name:"idx_messages_conv"}]}]};function ve(n,e,t){if(e.length!==t)throw new Error(`std.${n}: \u671F\u671B ${t} \u4E2A\u53C2\u6570\uFF0C\u6536\u5230 ${e.length}`)}function ze(n,e,t){let r=Number(e);if(!Number.isFinite(r))throw new Error(`std.${n}: \u53C2\u6570 ${t+1} \u4E0D\u662F\u6709\u9650\u6570\u5B57\uFF08${String(e)}\uFF09`);return r}var $i={sum:n=>{ve("sum",n,1);let e=n[0];if(!Array.isArray(e))throw new Error("std.sum: \u671F\u671B\u6570\u7EC4");return e.reduce((t,r)=>t+ze("sum",r,0),0)},avg:n=>{ve("avg",n,1);let e=n[0];if(!Array.isArray(e))throw new Error("std.avg: \u671F\u671B\u6570\u7EC4");if(e.length===0)throw new Error("std.avg: \u7A7A\u6570\u7EC4");return e.reduce((t,r)=>t+ze("avg",r,0),0)/e.length},clamp:n=>{ve("clamp",n,3);let e=ze("clamp",n[0],0),t=ze("clamp",n[1],1),r=ze("clamp",n[2],2);if(t>r)throw new Error("std.clamp: lo > hi");return Math.min(r,Math.max(t,e))}},Ni={upper:n=>{if(ve("upper",n,1),typeof n[0]!="string")throw new Error(`std.upper: \u671F\u671B\u5B57\u7B26\u4E32\uFF08${String(n[0])}\uFF09`);return n[0].toUpperCase()},lower:n=>{if(ve("lower",n,1),typeof n[0]!="string")throw new Error(`std.lower: \u671F\u671B\u5B57\u7B26\u4E32\uFF08${String(n[0])}\uFF09`);return n[0].toLowerCase()},join:n=>{if(ve("join",n,2),!Array.isArray(n[0])||typeof n[1]!="string")throw new Error("std.join: \u671F\u671B(\u6570\u7EC4, \u5206\u9694\u7B26)");return n[0].map(e=>String(e)).join(n[1])},split:n=>{if(ve("split",n,2),typeof n[0]!="string"||typeof n[1]!="string")throw new Error("std.split: \u671F\u671B(\u5B57\u7B26\u4E32, \u5206\u9694\u7B26)");return n[0].split(n[1])}},Fi={count:n=>{if(ve("count",n,1),Array.isArray(n[0])||typeof n[0]=="string")return n[0].length;throw new Error(`std.count: \u671F\u671B\u6570\u7EC4\u6216\u5B57\u7B26\u4E32\uFF08${String(n[0])}\uFF09`)},pick:n=>{if(ve("pick",n,2),!Array.isArray(n[0]))throw new Error("std.pick: \u671F\u671B\u6570\u7EC4");let e=ze("pick",n[1],1);if(!Number.isInteger(e)||e<0||e>=n[0].length)throw new Error(`std.pick: \u7D22\u5F15 ${e} \u8D8A\u754C\uFF08\u957F\u5EA6 ${n[0].length}\uFF09`);return n[0][e]}};var us={...$i,...Ni,...Fi},Di=Object.keys(us);var qi={tables:[{name:"_weifuwu_workflows",columns:{id:E.pk(S.uuid()),app_id:E.req(S.uuid()),name:E.req(S.string()),description:S.string(),def_json:S.json().meta({notNull:!0}),src_wfjs:S.string(),status:S.string().meta({default:"active"}),cron:S.string(),created_at:S.date().meta({default:"now"}),updated_at:S.date().meta({default:"now"})},indexes:[{cols:["app_id",{col:"updated_at",desc:!0}],name:"idx_wf_workflows_app"}]},{name:"_weifuwu_workflow_runs",columns:{id:E.pk(S.uuid()),app_id:E.req(S.uuid()),workflow_id:E.req(S.uuid()).meta({references:"_weifuwu_workflows",onDelete:"cascade"}),trigger:S.string().meta({default:"manual"}),status:S.string().meta({default:"queued"}),args_json:S.json(),result_json:S.json(),error:S.string(),started_at:S.date(),finished_at:S.date(),created_at:S.date().meta({default:"now"})},indexes:[{cols:["app_id",{col:"created_at",desc:!0}],name:"idx_wf_runs_app"},{cols:["workflow_id",{col:"created_at",desc:!0}],name:"idx_wf_runs_wf"}]},{name:"_weifuwu_workflow_versions",columns:{id:E.pk(S.uuid()),app_id:E.req(S.uuid()),workflow_id:E.req(S.uuid()).meta({references:"_weifuwu_workflows",onDelete:"cascade"}),def_json:S.json().meta({notNull:!0}),note:S.string(),created_at:S.date().meta({default:"now"})},indexes:[{cols:["workflow_id",{col:"created_at",desc:!0}],name:"idx_wf_versions_wf"}]}]};import{randomUUID as Gi}from"node:crypto";import{hostname as Qi}from"node:os";var We="workers";function Vn(n){let e=n.redis,t=n.prefix??"q:",r=l=>`${t}${l}`,s=l=>`${t}${l}:dead`;async function o(l,c){let u=await e.command("XADD",r(l),"*","payload",JSON.stringify(c));return String(u)}let i={async add(l,c,u){return{id:await o(l,{id:Gi(),name:l,data:c,attempts:0,maxAttempts:u?.attempts??3,addedAt:Date.now()})}},length:async l=>Number(await e.command("XLEN",r(l))),worker(l,c,u){let d=u?.consumer??`${Qi()}-${process.pid}-${Math.random().toString(36).slice(2,6)}`,p=u?.concurrency??1,h=u?.visibilityTimeout??3e4,m=u?.blockMs??1e3,f=r(l),g=s(l),y=`${t}${l}:delayed`,v=!1,k=0,w=0,b=null,x=-1,R=500,A=new Map,F=new Set;function ce(){let C=b;b=null,x=-1,C?.close().catch(()=>{})}async function ne(C){let _=C instanceof Error?C.message:String(C);return/pool is closed/.test(_)?!1:(ce(),await new Promise(O=>setTimeout(O,R)),R=Math.min(R*2,5e3),!0)}function re(){R=500}async function ut(C){if(b&&x===C)return b;if(b){let O=b;b=null,x=-1,await O.close().catch(()=>{})}let _=await e.createConnection();return b=_,x=C,_}async function Nt(){let C;for(let _=0;_<3;_++)try{await b.command("XGROUP","CREATE",f,We,"0","MKSTREAM");return}catch(O){if(String(O.message).includes("BUSYGROUP"))return;C=O,_<2&&await new Promise(te=>setTimeout(te,50))}throw C}async function Ft(C,_){let O;try{O=JSON.parse(_.payload??"{}")}catch{await b.command("XADD",g,"*","payload",JSON.stringify({originalId:C,name:l,error:"unparseable payload",attempts:-1})),await b.command("XACK",f,We,C);return}let te=Number(O.attempts??0),j=Number(O.maxAttempts??3);try{await c({id:C,name:l,data:O.data,attempts:te}),await b.command("XACK",f,We,C)}catch(se){let ge=te+1;ge>=j?(await b.command("XADD",g,"*","payload",JSON.stringify({originalId:C,name:l,data:O.data,error:se instanceof Error?se.message:String(se),attempts:ge})),await b.command("XACK",f,We,C),console.error(`[queue] ${l} job failed permanently (attempt ${ge}/${j}):`,se)):(await b.command("ZADD",y,String(Date.now()+h),JSON.stringify({...O,attempts:ge})),await b.command("XACK",f,We,C),console.error(`[queue] ${l} job failed (attempt ${ge}/${j}), retry in ${h}ms:`,se))}}async function T(){let C=Date.now(),_;try{_=await b.command("ZRANGEBYSCORE",y,0,C)}catch(O){if(Un(O)){if(await ne(O))return;v=!1;return}v&&U()&&console.error("[queue] ZRANGEBYSCORE:",O instanceof Error?O.message:O);return}for(let O of _)await b.command("ZREM",y,O)&&await b.command("XADD",f,"*","payload",O)}async function P(){try{let _=(await b.command("XAUTOCLAIM",f,We,d,h,"0","COUNT",String(p)))[1];for(let[O,te]of _)await Ft(O,fs(te))}catch(C){if(Un(C)){if(await ne(C))return;v=!1;return}if(await M(C))return;v&&U()&&console.error("[queue] XAUTOCLAIM:",C instanceof Error?C.message:C)}}async function M(C){let _=C instanceof Error?C.message:String(C);if(!/NOGROUP/.test(_))return!1;try{return await Nt(),!0}catch{return!1}}function U(){let C=Date.now();return C-k>5e3?(k=C,!0):!1}async function Q(C){for(;v&&C===w;){if(!b||x!==C){try{await ut(C)}catch(j){v&&U()&&console.error("[queue] reconnect:",j instanceof Error?j.message:j),await new Promise(se=>setTimeout(se,R)),R=Math.min(R*2,5e3);continue}re()}if(await P(),await T(),F.size>=p){await Promise.race([...F].map(j=>j.catch(()=>{})));continue}let _;try{_=await b.command("XREADGROUP","GROUP",We,d,"COUNT",String(p-F.size),"BLOCK",String(m),"STREAMS",f,">"),re()}catch(j){if(Un(j)){if(await ne(j))continue;v=!1;return}if(await M(j))continue;v&&U()&&console.error("[queue] XREADGROUP:",j instanceof Error?j.message:j);continue}if(!_)continue;let te=_[0][1];for(let[j,se]of te){let ge=Ft(j,fs(se));F.add(ge),ge.finally(()=>F.delete(ge)).catch(()=>{})}}}return{start:async()=>{if(v)return;v=!0;let C=w;try{await ut(C),await Nt()}catch(O){if(v=!1,b){let te=b;b=null,x=-1,await te.close().catch(()=>{})}throw O}let _=Q(C);A.set(C,_),_.finally(()=>A.delete(C)).catch(O=>console.error("[queue] worker loop crashed:",O))},stop:async()=>{if(!v){await Promise.allSettled([...A.values()]);return}w++,v=!1;let C=b;b=null,x=-1;let _=[...A.entries()].filter(([O])=>O<w).map(([,O])=>O);await Promise.allSettled([...F]),await Promise.allSettled(_),await C?.close().catch(()=>{})}}}},a=(async(l,c,u)=>(c.queue=i,u(l,c)));return a.__meta={injects:["queue"],depends:[]},a.queue=i,a.close=async()=>{},a}function fs(n){let e={};for(let t=0;t+1<n.length;t+=2)e[String(n[t])]=String(n[t+1]);return e}function Un(n){let e=n instanceof Error?n.message:String(n);return/pool is closed|connection closed/.test(e)}var Fp=5*6e4;import{build as sl}from"esbuild";import{readFile as xo,stat as vr}from"node:fs/promises";import{createHash as ol}from"node:crypto";import{resolve as dn,dirname as Mt,basename as il,join as Z,sep as al}from"node:path";import{existsSync as Sr}from"node:fs";import{fileURLToPath as ko}from"node:url";import{readFile as Hn,readdir as bs}from"node:fs/promises";var Kt=(n,e)=>e&&Object.keys(e).length?`${n} { ${Object.entries(e).map(([t,r])=>`${t}: ${r};`).join(" ")} }`:"";function hs(n){let e=[];for(let t of n){let r=`.${t.class}`,s=Kt(r,t.base??{});s&&e.push(s);let o=Kt(`:where(${r})`,t.defaults??{});o&&e.push(o);for(let[i,a]of Object.entries(t.variants??{})){let l=`.${i}`,c=Kt(l,{...t.base??{},...a.cover??{}});c&&e.push(c);let u=Kt(`:where(${l})`,{...t.defaults??{},...a.defaults??{}});u&&e.push(u)}}return e.join(`
56
- `)}var ws=[{class:"wf-stack",base:{display:"flex","flex-direction":"column"},defaults:{gap:"var(--wf-gap, var(--wf-gap-md))","align-items":"var(--wf-align, stretch)"}},{class:"wf-row",base:{display:"flex","flex-wrap":"wrap"},defaults:{gap:"var(--wf-gap, var(--wf-gap-md))","align-items":"var(--wf-align, center)"},variants:{"wf-row-reverse":{cover:{"flex-direction":"row-reverse"}}}},{class:"wf-items-start",base:{"--wf-align":"flex-start"}},{class:"wf-items-center",base:{"--wf-align":"center"}},{class:"wf-items-end",base:{"--wf-align":"flex-end"}},{class:"wf-items-stretch",base:{"--wf-align":"stretch"}},{class:"wf-grid",base:{display:"grid","grid-template-columns":"var(--wf-cols, repeat(auto-fill, minmax(280px, 1fr)))"},defaults:{gap:"var(--wf-gap, var(--wf-gap-lg))"}},{class:"wf-center",base:{display:"flex","flex-direction":"column","align-items":"center","justify-content":"center"}},{class:"wf-justify-between",base:{display:"flex","justify-content":"space-between"},defaults:{"align-items":"var(--wf-align, center)",gap:"var(--wf-gap, var(--wf-gap-md))"}},{class:"wf-justify-end",base:{display:"flex","justify-content":"flex-end"},defaults:{"align-items":"var(--wf-align, center)",gap:"var(--wf-gap, var(--wf-gap-md))"}},{class:"wf-justify-center",base:{display:"flex","justify-content":"center"},defaults:{"align-items":"var(--wf-align, center)",gap:"var(--wf-gap, var(--wf-gap-md))"}},{class:"wf-fill",base:{flex:"1","min-width":"0","min-height":"0"}},{class:"wf-fill-hover",base:{"border-radius":"var(--wf-radius-sm)",padding:"2px 4px",margin:"-2px -4px",transition:"background 0.15s ease"}},{class:"wf-cover",base:{position:"fixed",inset:"0",display:"flex","align-items":"center","justify-content":"center","z-index":"var(--wf-z, var(--wf-cover-z))"}}];import{join as Ze,resolve as vs}from"node:path";var Ji=["tokens","base","layout","components","utilities"],ys={_tokens:"tokens",_dark:"tokens",_presets:"tokens",_props:"tokens",_base:"base",_stack:"layout",_row:"layout",_split:"layout",_center:"layout",_justify:"layout",_fill:"layout",_grid:"layout",_cluster:"layout",_cover:"layout",_position:"layout",_sticky:"layout",_overflow:"layout","_safe-area":"layout",_layer:"layout","_align-self":"layout",_nowrap:"layout",_shrink:"layout",_container:"layout","_app-shell":"layout",_surface:"utilities",_spacing:"utilities",_border:"utilities",_text:"utilities",_hidden:"utilities",_block:"utilities",_flex:"utilities",_popup:"layout"},Xi="tokens",Yi=n=>n.replace(/@import\s+['"][^'"]+['"]\s*;?\s*\n?/g,"");async function ea(n){let e=await Hn(Ze(n,"weifuwu-layout.css"),"utf-8"),t=[];for(let r of e.split(`
57
- `)){let s=r.match(/@import\s+['"]([^'"]+)['"]/);s&&t.push(s[1].replace(/^\.\//,""))}if(!t.length)throw new Error(`layout \u5165\u53E3\u65E0 @import\uFF08${n}/weifuwu-layout.css\uFF09\u2014\u2014\u88C5\u914D\u5355\u6E90\u5931\u6548`);return t}async function Ss(n){try{let e=await bs(n);return e.includes("weifuwu-layout.css")&&e.some(t=>/^_[a-z-]+\.css$/.test(t))}catch{return!1}}async function Bn(n){let e=vs(n),t=await ea(e),r=[Ze(e,"weifuwu-layout.css")],s=[];for(let i of t){if(i==="_stack.css"){r.push(Ze(e,"decl.ts"),Ze(e,"define.ts")),s.push(`@layer ${ys._stack} {
58
- ${hs(ws)}
59
- }`);continue}if(i==="_row.css")continue;let a=Ze(e,i);r.push(a);let l=Yi(await Hn(a,"utf-8")).trim(),c=i.replace(/\.css$/,""),u=ys[c];if(!u)throw new Error(`layout \u6587\u4EF6\u672A\u767B\u8BB0 @layer \u6620\u5C04: ${i}\uFF08\u5728 src/level5/client/layout/bundle.ts LAYER_OF \u4E2D\u767B\u8BB0\uFF09`);s.push(u===Xi?l:`@layer ${u} {
55
+ `),resolvers:_i(n,t,e)}}function Pi(n,e){let t=n.dbFields[e];return t?.default==="random"||t?.default==="now"}function oe(n){return n.replace(/^(.)/,e=>e.toLowerCase())}function _i(n,e,t){let r=n.table,s=n.pkField??"id",o=new Set(t.hidden??[]),a=Object.keys(n.fields).filter(m=>!o.has(m)).map(m=>n.dbFields[m]?.column??m),l=m=>{let f=n.fromDb(m);for(let g of o)delete f[g];return f},c=t.sql??(m=>m.orm),u=t.tenant?n.dbFields[t.tenant.field]?.column??t.tenant.field:void 0;function d(m){return c(m).query}function p(m,f){let g=jn(m,n);if(u&&f){let y=t.tenant.value(f);y!==void 0&&g[u]===void 0&&(g[u]={eq:y})}return g}async function h(m,f){let g=d(f).from(r).select(...a),y=p(m.filter,f);Object.keys(y).length&&g.where(y);let v=m.sort;if(v?.length)for(let w of v)g.orderBy(n.dbFields[w.field]?.column??w.field,w.dir==="desc"?"desc":"asc");return m.limit!==void 0&&m.limit!==null&&g.limit(Math.min(Number(m.limit),t.maxLimit??100)),m.offset!==void 0&&m.offset!==null&&g.offset(Number(m.offset)),(await g.run()).map(w=>l(w))}return{Query:{[`${oe(e)}List`]:async(m,f,g)=>await h(f,g),[`${oe(e)}ListPage`]:async(m,f,g)=>{let y=await h(f,g),v=p(f.filter,g),k=await d(g).from(r).count("*","__total").where(v).run(),w=Number(k[0]?.__total??y.length);return{rows:y,total:Number.isFinite(w)?w:y.length}},[`${oe(e)}One`]:async(m,f,g)=>{let y=await d(g).from(r).select(...a).where(p(f.filter,g)).limit(1).run();return y[0]?l(y[0]):null}},Mutation:{[`${oe(e)}Insert`]:async(m,f,g)=>{let y={...f.data};if(t.tenant){let b=t.tenant.value(g);b!==void 0&&y[t.tenant.field]===void 0&&(y[t.tenant.field]=b)}let v=n.insertSchema().parse(y),k=n.toDb(v),w=await d(g).insert(r).values(k).returning(...a).run();return w[0]?l(w[0]):null},[`${oe(e)}Update`]:async(m,f,g)=>{let y=n.updateSchema().parse(f.patch),v=n.toDb(y),k=p({[s]:{eq:f.id}},g),w=await d(g).update(r).set(v).where(k).returning(...a).run();return w[0]?l(w[0]):null},[`${oe(e)}Delete`]:async(m,f,g)=>{let y=p({[s]:{eq:f.id}},g),v=await d(g).from(r).select(...a).where(y).run();return v.length?(await d(g).delete(r).where(y).run(),l(v[0])):null}}}}Bt({gql:cs});function us(n,e={}){let t=e.name??n.table,r=new Set(e.hidden??[]),s=e.maxLimit??100,o=Object.keys(n.fields).filter(p=>!r.has(p)),i=o.map(p=>n.dbFields[p]?.column??p),a=new Set(o),l=n.pkField??"id",c=p=>{let h=n.fromDb(p);for(let m of r)delete h[m];return h},u=p=>{let h=p.orm;return typeof h.ctxTable=="function"?h.ctxTable(t):h.table(t)},d=async p=>{let h=await p.json().catch(()=>null);if(!h||typeof h!="object")throw new Error("invalid JSON body");return h};return{mount:(p,h)=>{p.get(h,async(m,f)=>{try{let g=e.hooks;await g?.beforeList?.(m,f);let y=new URL(m.url),v=u(f),{filter:k,sort:w,limit:b,offset:x}=$n(y,n,{maxLimit:s,defaultLimit:20}),A=await v.paginate({filter:k,sort:w,limit:b,offset:x}),F=A.rows.map(c);return g?.afterList&&(F=await g.afterList(F,m,f)),Response.json({[t]:F,total:A.total})}catch(g){return we(g)}}),p.get(`${h}/:id`,async(m,f)=>{try{let g=f.params.id,v=await u(f).select(...i).where({[l]:{eq:g}}).limit(1).run();return v.length?Response.json(c(v[0])):Response.json({error:"not found"},{status:404})}catch(g){return we(g)}}),p.post(h,async(m,f)=>{try{await e.hooks?.beforeInsert?.(await d(m).catch(()=>({})),m,f);let g=await d(m),v=await u(f).insert(g).returning(...i).run();return Response.json(c(v[0]??{}),{status:201})}catch(g){return we(g)}}),p.patch(`${h}/:id`,async(m,f)=>{try{let g=f.params.id;await e.hooks?.beforeUpdate?.(g,await d(m).catch(()=>({})),m,f);let y=await d(m),k=await u(f).update(y).where({[l]:{eq:g}}).returning(...i).run();return k.length?Response.json(c(k[0])):Response.json({error:"not found"},{status:404})}catch(g){return we(g)}}),p.delete(`${h}/:id`,async(m,f)=>{try{let g=f.params.id;await e.hooks?.beforeDelete?.(g,m,f);let y=u(f);return(await y.select(...i).where({[l]:{eq:g}}).limit(1).run()).length?(await y.delete().where({[l]:{eq:g}}).run(),new Response(null,{status:204})):Response.json({error:"not found"},{status:404})}catch(g){return we(g)}})}}}Bt({rest:us});var vd={conversations:{id:E.pk(S.uuid()),type:S.string().meta({notNull:!0,default:"direct"}),created_by:S.uuid().nullable(),direct_key:S.string().nullable(),created_at:E.now(S.date())},members:{conversation_id:E.req(S.uuid()),user_id:E.req(S.uuid()),last_read_at:S.date().nullable(),joined_at:E.now(S.date())},messages:{id:E.pk(S.uuid()),conversation_id:E.req(S.uuid()),sender_type:S.string().meta({notNull:!0,default:"user"}),sender_id:S.uuid().nullable(),content:E.req(S.string()),msg_type:S.string().meta({notNull:!0,default:"text"}),created_at:E.now(S.date()),edited_at:S.date().nullable(),deleted_at:S.date().nullable()}};var Ii={tables:[{name:"_weifuwu_conversations",columns:{id:E.pk(S.uuid()),type:S.string().meta({default:"direct"}),created_by:S.uuid(),direct_key:S.string().nullable().meta({unique:!0}),created_at:S.date().meta({default:"now"})}},{name:"_weifuwu_conversation_members",columns:{conversation_id:E.req(S.uuid()).meta({references:"_weifuwu_conversations",onDelete:"cascade"}),user_id:E.req(S.uuid()),last_read_at:S.date(),joined_at:S.date().meta({default:"now"})},uniques:[["conversation_id","user_id"]]},{name:"_weifuwu_messages",columns:{id:E.pk(S.uuid()),conversation_id:E.req(S.uuid()).meta({references:"_weifuwu_conversations",onDelete:"cascade"}),sender_type:S.string().meta({default:"user"}),sender_id:S.uuid(),content:S.string().meta({notNull:!0}),msg_type:S.string().meta({default:"text"}),created_at:S.date().meta({default:"now"}),edited_at:S.date(),deleted_at:S.date()},indexes:[{cols:["conversation_id",{col:"created_at",desc:!0},{col:"id",desc:!0}],name:"idx_messages_conv"}]}]};function ve(n,e,t){if(e.length!==t)throw new Error(`std.${n}: \u671F\u671B ${t} \u4E2A\u53C2\u6570\uFF0C\u6536\u5230 ${e.length}`)}function Ze(n,e,t){let r=Number(e);if(!Number.isFinite(r))throw new Error(`std.${n}: \u53C2\u6570 ${t+1} \u4E0D\u662F\u6709\u9650\u6570\u5B57\uFF08${String(e)}\uFF09`);return r}var $i={sum:n=>{ve("sum",n,1);let e=n[0];if(!Array.isArray(e))throw new Error("std.sum: \u671F\u671B\u6570\u7EC4");return e.reduce((t,r)=>t+Ze("sum",r,0),0)},avg:n=>{ve("avg",n,1);let e=n[0];if(!Array.isArray(e))throw new Error("std.avg: \u671F\u671B\u6570\u7EC4");if(e.length===0)throw new Error("std.avg: \u7A7A\u6570\u7EC4");return e.reduce((t,r)=>t+Ze("avg",r,0),0)/e.length},clamp:n=>{ve("clamp",n,3);let e=Ze("clamp",n[0],0),t=Ze("clamp",n[1],1),r=Ze("clamp",n[2],2);if(t>r)throw new Error("std.clamp: lo > hi");return Math.min(r,Math.max(t,e))}},Ni={upper:n=>{if(ve("upper",n,1),typeof n[0]!="string")throw new Error(`std.upper: \u671F\u671B\u5B57\u7B26\u4E32\uFF08${String(n[0])}\uFF09`);return n[0].toUpperCase()},lower:n=>{if(ve("lower",n,1),typeof n[0]!="string")throw new Error(`std.lower: \u671F\u671B\u5B57\u7B26\u4E32\uFF08${String(n[0])}\uFF09`);return n[0].toLowerCase()},join:n=>{if(ve("join",n,2),!Array.isArray(n[0])||typeof n[1]!="string")throw new Error("std.join: \u671F\u671B(\u6570\u7EC4, \u5206\u9694\u7B26)");return n[0].map(e=>String(e)).join(n[1])},split:n=>{if(ve("split",n,2),typeof n[0]!="string"||typeof n[1]!="string")throw new Error("std.split: \u671F\u671B(\u5B57\u7B26\u4E32, \u5206\u9694\u7B26)");return n[0].split(n[1])}},Fi={count:n=>{if(ve("count",n,1),Array.isArray(n[0])||typeof n[0]=="string")return n[0].length;throw new Error(`std.count: \u671F\u671B\u6570\u7EC4\u6216\u5B57\u7B26\u4E32\uFF08${String(n[0])}\uFF09`)},pick:n=>{if(ve("pick",n,2),!Array.isArray(n[0]))throw new Error("std.pick: \u671F\u671B\u6570\u7EC4");let e=Ze("pick",n[1],1);if(!Number.isInteger(e)||e<0||e>=n[0].length)throw new Error(`std.pick: \u7D22\u5F15 ${e} \u8D8A\u754C\uFF08\u957F\u5EA6 ${n[0].length}\uFF09`);return n[0][e]}};var ds={...$i,...Ni,...Fi},Di=Object.keys(ds);var qi={tables:[{name:"_weifuwu_workflows",columns:{id:E.pk(S.uuid()),app_id:E.req(S.uuid()),name:E.req(S.string()),description:S.string(),def_json:S.json().meta({notNull:!0}),src_wfjs:S.string(),status:S.string().meta({default:"active"}),cron:S.string(),created_at:S.date().meta({default:"now"}),updated_at:S.date().meta({default:"now"})},indexes:[{cols:["app_id",{col:"updated_at",desc:!0}],name:"idx_wf_workflows_app"}]},{name:"_weifuwu_workflow_runs",columns:{id:E.pk(S.uuid()),app_id:E.req(S.uuid()),workflow_id:E.req(S.uuid()).meta({references:"_weifuwu_workflows",onDelete:"cascade"}),trigger:S.string().meta({default:"manual"}),status:S.string().meta({default:"queued"}),args_json:S.json(),result_json:S.json(),error:S.string(),started_at:S.date(),finished_at:S.date(),created_at:S.date().meta({default:"now"})},indexes:[{cols:["app_id",{col:"created_at",desc:!0}],name:"idx_wf_runs_app"},{cols:["workflow_id",{col:"created_at",desc:!0}],name:"idx_wf_runs_wf"}]},{name:"_weifuwu_workflow_versions",columns:{id:E.pk(S.uuid()),app_id:E.req(S.uuid()),workflow_id:E.req(S.uuid()).meta({references:"_weifuwu_workflows",onDelete:"cascade"}),def_json:S.json().meta({notNull:!0}),note:S.string(),created_at:S.date().meta({default:"now"})},indexes:[{cols:["workflow_id",{col:"created_at",desc:!0}],name:"idx_wf_versions_wf"}]}]};import{randomUUID as Gi}from"node:crypto";import{hostname as Qi}from"node:os";var We="workers";function Vn(n){let e=n.redis,t=n.prefix??"q:",r=l=>`${t}${l}`,s=l=>`${t}${l}:dead`;async function o(l,c){let u=await e.command("XADD",r(l),"*","payload",JSON.stringify(c));return String(u)}let i={async add(l,c,u){return{id:await o(l,{id:Gi(),name:l,data:c,attempts:0,maxAttempts:u?.attempts??3,addedAt:Date.now()})}},length:async l=>Number(await e.command("XLEN",r(l))),worker(l,c,u){let d=u?.consumer??`${Qi()}-${process.pid}-${Math.random().toString(36).slice(2,6)}`,p=u?.concurrency??1,h=u?.visibilityTimeout??3e4,m=u?.blockMs??1e3,f=r(l),g=s(l),y=`${t}${l}:delayed`,v=!1,k=0,w=0,b=null,x=-1,R=500,A=new Map,F=new Set;function ce(){let C=b;b=null,x=-1,C?.close().catch(()=>{})}async function ne(C){let _=C instanceof Error?C.message:String(C);return/pool is closed/.test(_)?!1:(ce(),await new Promise(O=>setTimeout(O,R)),R=Math.min(R*2,5e3),!0)}function re(){R=500}async function ut(C){if(b&&x===C)return b;if(b){let O=b;b=null,x=-1,await O.close().catch(()=>{})}let _=await e.createConnection();return b=_,x=C,_}async function Nt(){let C;for(let _=0;_<3;_++)try{await b.command("XGROUP","CREATE",f,We,"0","MKSTREAM");return}catch(O){if(String(O.message).includes("BUSYGROUP"))return;C=O,_<2&&await new Promise(te=>setTimeout(te,50))}throw C}async function Ft(C,_){let O;try{O=JSON.parse(_.payload??"{}")}catch{await b.command("XADD",g,"*","payload",JSON.stringify({originalId:C,name:l,error:"unparseable payload",attempts:-1})),await b.command("XACK",f,We,C);return}let te=Number(O.attempts??0),j=Number(O.maxAttempts??3);try{await c({id:C,name:l,data:O.data,attempts:te}),await b.command("XACK",f,We,C)}catch(se){let ge=te+1;ge>=j?(await b.command("XADD",g,"*","payload",JSON.stringify({originalId:C,name:l,data:O.data,error:se instanceof Error?se.message:String(se),attempts:ge})),await b.command("XACK",f,We,C),console.error(`[queue] ${l} job failed permanently (attempt ${ge}/${j}):`,se)):(await b.command("ZADD",y,String(Date.now()+h),JSON.stringify({...O,attempts:ge})),await b.command("XACK",f,We,C),console.error(`[queue] ${l} job failed (attempt ${ge}/${j}), retry in ${h}ms:`,se))}}async function T(){let C=Date.now(),_;try{_=await b.command("ZRANGEBYSCORE",y,0,C)}catch(O){if(Un(O)){if(await ne(O))return;v=!1;return}v&&U()&&console.error("[queue] ZRANGEBYSCORE:",O instanceof Error?O.message:O);return}for(let O of _)await b.command("ZREM",y,O)&&await b.command("XADD",f,"*","payload",O)}async function P(){try{let _=(await b.command("XAUTOCLAIM",f,We,d,h,"0","COUNT",String(p)))[1];for(let[O,te]of _)await Ft(O,ms(te))}catch(C){if(Un(C)){if(await ne(C))return;v=!1;return}if(await M(C))return;v&&U()&&console.error("[queue] XAUTOCLAIM:",C instanceof Error?C.message:C)}}async function M(C){let _=C instanceof Error?C.message:String(C);if(!/NOGROUP/.test(_))return!1;try{return await Nt(),!0}catch{return!1}}function U(){let C=Date.now();return C-k>5e3?(k=C,!0):!1}async function Q(C){for(;v&&C===w;){if(!b||x!==C){try{await ut(C)}catch(j){v&&U()&&console.error("[queue] reconnect:",j instanceof Error?j.message:j),await new Promise(se=>setTimeout(se,R)),R=Math.min(R*2,5e3);continue}re()}if(await P(),await T(),F.size>=p){await Promise.race([...F].map(j=>j.catch(()=>{})));continue}let _;try{_=await b.command("XREADGROUP","GROUP",We,d,"COUNT",String(p-F.size),"BLOCK",String(m),"STREAMS",f,">"),re()}catch(j){if(Un(j)){if(await ne(j))continue;v=!1;return}if(await M(j))continue;v&&U()&&console.error("[queue] XREADGROUP:",j instanceof Error?j.message:j);continue}if(!_)continue;let te=_[0][1];for(let[j,se]of te){let ge=Ft(j,ms(se));F.add(ge),ge.finally(()=>F.delete(ge)).catch(()=>{})}}}return{start:async()=>{if(v)return;v=!0;let C=w;try{await ut(C),await Nt()}catch(O){if(v=!1,b){let te=b;b=null,x=-1,await te.close().catch(()=>{})}throw O}let _=Q(C);A.set(C,_),_.finally(()=>A.delete(C)).catch(O=>console.error("[queue] worker loop crashed:",O))},stop:async()=>{if(!v){await Promise.allSettled([...A.values()]);return}w++,v=!1;let C=b;b=null,x=-1;let _=[...A.entries()].filter(([O])=>O<w).map(([,O])=>O);await Promise.allSettled([...F]),await Promise.allSettled(_),await C?.close().catch(()=>{})}}}},a=(async(l,c,u)=>(c.queue=i,u(l,c)));return a.__meta={injects:["queue"],depends:[]},a.queue=i,a.close=async()=>{},a}function ms(n){let e={};for(let t=0;t+1<n.length;t+=2)e[String(n[t])]=String(n[t+1]);return e}function Un(n){let e=n instanceof Error?n.message:String(n);return/pool is closed|connection closed/.test(e)}var Fp=5*6e4;import{build as sl}from"esbuild";import{readFile as ko,stat as vr}from"node:fs/promises";import{createHash as ol}from"node:crypto";import{resolve as dn,dirname as Mt,basename as il,join as Z,sep as al}from"node:path";import{existsSync as Sr}from"node:fs";import{fileURLToPath as Ro}from"node:url";import{readFile as Hn,readdir as vs}from"node:fs/promises";var Kt=(n,e)=>e&&Object.keys(e).length?`${n} { ${Object.entries(e).map(([t,r])=>`${t}: ${r};`).join(" ")} }`:"";function ws(n){let e=[];for(let t of n){let r=`.${t.class}`,s=Kt(r,t.base??{});s&&e.push(s);let o=Kt(`:where(${r})`,t.defaults??{});o&&e.push(o);for(let[i,a]of Object.entries(t.variants??{})){let l=`.${i}`,c=Kt(l,{...t.base??{},...a.cover??{}});c&&e.push(c);let u=Kt(`:where(${l})`,{...t.defaults??{},...a.defaults??{}});u&&e.push(u)}}return e.join(`
56
+ `)}var ys=[{class:"wf-stack",base:{display:"flex","flex-direction":"column"},defaults:{gap:"var(--wf-gap, var(--wf-gap-md))","align-items":"var(--wf-align, stretch)"}},{class:"wf-row",base:{display:"flex","flex-wrap":"wrap"},defaults:{gap:"var(--wf-gap, var(--wf-gap-md))","align-items":"var(--wf-align, center)"},variants:{"wf-row-reverse":{cover:{"flex-direction":"row-reverse"}}}},{class:"wf-items-start",base:{"--wf-align":"flex-start"}},{class:"wf-items-center",base:{"--wf-align":"center"}},{class:"wf-items-end",base:{"--wf-align":"flex-end"}},{class:"wf-items-stretch",base:{"--wf-align":"stretch"}},{class:"wf-grid",base:{display:"grid","grid-template-columns":"var(--wf-cols, repeat(auto-fill, minmax(280px, 1fr)))"},defaults:{gap:"var(--wf-gap, var(--wf-gap-lg))"}},{class:"wf-center",base:{display:"flex","flex-direction":"column","align-items":"center","justify-content":"center"}},{class:"wf-justify-between",base:{display:"flex","justify-content":"space-between"},defaults:{"align-items":"var(--wf-align, center)",gap:"var(--wf-gap, var(--wf-gap-md))"}},{class:"wf-justify-end",base:{display:"flex","justify-content":"flex-end"},defaults:{"align-items":"var(--wf-align, center)",gap:"var(--wf-gap, var(--wf-gap-md))"}},{class:"wf-justify-center",base:{display:"flex","justify-content":"center"},defaults:{"align-items":"var(--wf-align, center)",gap:"var(--wf-gap, var(--wf-gap-md))"}},{class:"wf-fill",base:{flex:"1","min-width":"0","min-height":"0"}},{class:"wf-fill-hover",base:{"border-radius":"var(--wf-radius-sm)",padding:"2px 4px",margin:"-2px -4px",transition:"background 0.15s ease"}},{class:"wf-cover",base:{position:"fixed",inset:"0",display:"flex","align-items":"center","justify-content":"center","z-index":"var(--wf-z, var(--wf-cover-z))"}}];import{join as Je,resolve as Ss}from"node:path";var Ji=["tokens","base","layout","components","utilities"],bs={_tokens:"tokens",_dark:"tokens",_presets:"tokens",_props:"tokens",_base:"base",_stack:"layout",_row:"layout",_split:"layout",_center:"layout",_justify:"layout",_fill:"layout",_grid:"layout",_cluster:"layout",_cover:"layout",_position:"layout",_sticky:"layout",_overflow:"layout","_safe-area":"layout",_layer:"layout","_align-self":"layout",_nowrap:"layout",_shrink:"layout",_container:"layout","_app-shell":"layout",_surface:"utilities",_spacing:"utilities",_border:"utilities",_text:"utilities",_hidden:"utilities",_block:"utilities",_flex:"utilities",_popup:"layout"},Xi="tokens",Yi=n=>n.replace(/@import\s+['"][^'"]+['"]\s*;?\s*\n?/g,"");async function ea(n){let e=await Hn(Je(n,"weifuwu-layout.css"),"utf-8"),t=[];for(let r of e.split(`
57
+ `)){let s=r.match(/@import\s+['"]([^'"]+)['"]/);s&&t.push(s[1].replace(/^\.\//,""))}if(!t.length)throw new Error(`layout \u5165\u53E3\u65E0 @import\uFF08${n}/weifuwu-layout.css\uFF09\u2014\u2014\u88C5\u914D\u5355\u6E90\u5931\u6548`);return t}async function xs(n){try{let e=await vs(n);return e.includes("weifuwu-layout.css")&&e.some(t=>/^_[a-z-]+\.css$/.test(t))}catch{return!1}}async function Bn(n){let e=Ss(n),t=await ea(e),r=[Je(e,"weifuwu-layout.css")],s=[];for(let i of t){if(i==="_stack.css"){r.push(Je(e,"decl.ts"),Je(e,"define.ts")),s.push(`@layer ${bs._stack} {
58
+ ${ws(ys)}
59
+ }`);continue}if(i==="_row.css")continue;let a=Je(e,i);r.push(a);let l=Yi(await Hn(a,"utf-8")).trim(),c=i.replace(/\.css$/,""),u=bs[c];if(!u)throw new Error(`layout \u6587\u4EF6\u672A\u767B\u8BB0 @layer \u6620\u5C04: ${i}\uFF08\u5728 src/level5/client/layout/bundle.ts LAYER_OF \u4E2D\u767B\u8BB0\uFF09`);s.push(u===Xi?l:`@layer ${u} {
60
60
  ${l}
61
61
  }`)}return{css:`/* weifuwu/client/layout \u2014 CSS \u5E03\u5C40\u539F\u8BED + \u8BBE\u8BA1 Token\uFF08\u88C5\u914D\u5355\u6E90\uFF1Asrc/level5/client/layout/bundle.ts\uFF09 */
62
62
 
@@ -65,11 +65,11 @@ ${l}
65
65
  ${s.join(`
66
66
 
67
67
  `)}
68
- `,inputs:r}}async function xs(n,e){let{css:t,inputs:r}=await Bn(n),s=vs(e),o=(await bs(s,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name),i=`${t}@layer components {
69
- `;for(let a of o){let l=Ze(s,a,`${a}.css`);try{i+=`${await Hn(l,"utf-8")}
68
+ `,inputs:r}}async function ks(n,e){let{css:t,inputs:r}=await Bn(n),s=Ss(e),o=(await vs(s,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(a=>a.name),i=`${t}@layer components {
69
+ `;for(let a of o){let l=Je(s,a,`${a}.css`);try{i+=`${await Hn(l,"utf-8")}
70
70
  `,r.push(l)}catch{}}return i+=`}
71
- `,{css:i,inputs:r}}var _e=class{value;constructor(e){this.value=e}toString(){return this.value}};var zt=globalThis;zt.__wfErrState||(zt.__wfErrState={errState:new Map,totalErrors:0});var{errState:Gn,totalErrorsRef:qn}={errState:zt.__wfErrState.errState,totalErrorsRef:zt.__wfErrState},ta={get:()=>qn.totalErrors,inc:()=>{qn.totalErrors++},reset:()=>{qn.totalErrors=0}};function vt(n,e){ta.inc();let t=Gn.get(n);if(t){t.count++;return}Gn.set(n,{shown:!0,count:1}),console.error(`[vdom] renderFn \u9519\u8BEF\uFF08${n}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,e)}function Qn(n){Gn.delete(n)}var Zt=()=>{},ye=class{_subscribe;constructor(e){this._subscribe=e}subscribe(e){let t=na(e),r=!1,s=null,o={next:l=>{r||t.next(l)},error:l=>{r||(r=!0,t.error(l),s?.())},complete:()=>{r||(r=!0,t.complete(),s?.())}},i=this._subscribe(o);s=typeof i=="function"?i:i?()=>i.unsubscribe():Zt,r&&s();let a=!1;return{unsubscribe(){a||(a=!0,r||(r=!0,s?.()))}}}pipe(...e){return e.reduce((t,r)=>r(t),this)}};function na(n){return{next:n?.next??Zt,error:n?.error??Zt,complete:n?.complete??Zt}}function L(n){return new ye(n)}var Kn=()=>{},N=class{subs=new Set;closed=!1;asObservable(){return L(e=>this.closed?(e.complete(),Kn):(this.subs.add(e),()=>{this.subs.delete(e)}))}subscribe(e){return this.asObservable().subscribe(e)}next(e){if(!this.closed)for(let t of this.subs)t.next(e)}error(e){if(!this.closed){this.closed=!0;for(let t of this.subs)t.error(e);this.subs.clear()}}complete(){if(!this.closed){this.closed=!0;for(let e of this.subs)e.complete();this.subs.clear()}}},Me=class extends N{value;constructor(e){super(),this.value=e}get(){return this.value}next(e){this.value=e,super.next(e)}asObservable(){return L(e=>this.closed?(e.complete(),Kn):(e.next(this.value),this.subs.add(e),()=>{this.subs.delete(e)}))}};function Je(n,e){return L(t=>{let r=!0,s=()=>{r&&(r=!1,t.complete())},o=e?.signal;if(o){if(o.aborted)return s(),Kn;o.addEventListener("abort",s,{once:!0})}return n.then(i=>{r&&(r=!1,t.next(i),t.complete())},i=>{r&&(r=!1,t.error(i))}),()=>{r=!1,o&&o.removeEventListener("abort",s)}})}function zn(n,e){return L(t=>{let r=n(s=>t.next(s));return e&&t.next(e()),()=>{typeof r=="function"&&r()}})}function Zn(n){return e=>new ye(t=>e.subscribe({next:r=>t.next(n(r)),error:r=>t.error(r),complete:()=>t.complete()}))}function Jn(n){return e=>new ye(t=>e.subscribe({next:r=>{n(r)&&t.next(r)},error:r=>t.error(r),complete:()=>t.complete()}))}function Xe(n,e){let t=e;return r=>new ye(s=>r.subscribe({next:o=>{t=n(t,o),s.next(t)},error:o=>s.error(o),complete:()=>s.complete()}))}function Jt(n){return e=>new ye(t=>{let r=null,s=!1,o=e.subscribe({next:i=>{r?.unsubscribe();let a=!1,l=n(i).subscribe({next:c=>t.next(c),error:c=>t.error(c),complete:()=>{a=!0,r=null}});r=a?null:l},error:i=>t.error(i),complete:()=>{s=!0,r||t.complete()}});return()=>{o.unsubscribe(),r?.unsubscribe()}})}function Xn(n,e){let t=e?.trailing??!1;return r=>new ye(s=>{let o=null,i=!1,a,l=!1,c=!1,u=h=>{c||s.next(h)},d=()=>{o=null,t&&l&&(l=!1,u(a)),i=!1},p=r.subscribe({next:h=>{i?t&&(a=h,l=!0):(i=!0,u(h),o=setTimeout(d,n))},error:h=>{c=!0,o&&clearTimeout(o),s.error(h)},complete:()=>{c=!0,o&&clearTimeout(o),s.complete()}});return()=>{c=!0,o&&clearTimeout(o),p.unsubscribe()}})}function Rs(n){let e=new Set,t=new N,r=n,s=()=>{for(let o of[...e])o();t.next(typeof r=="object"&&r!==null?{...r}:r)};return{get state(){return r},subscribe(o){return e.add(o),()=>{e.delete(o)}},set(o){typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof o=="object"&&o!==null?r={...r,...o}:r=o,s()},update(o){let i=o(r);i!==void 0&&(typeof r!="object"||r===null||i!==r)&&(r=i),s()},notify:s,changes$:t.asObservable()}}function Yn(n){let e=Rs(n),t=(()=>e.state);return t.set=r=>e.set(r),t.update=r=>e.update(r),t.subscribe=r=>e.subscribe(r),t.notify=()=>e.notify(),t.store=e,t}function ue(n,e){let t=globalThis.__wfSpy;t&&t.length<1e3&&t.push({at:Date.now()%1e5,kind:n,data:e===void 0?void 0:String(e).slice(0,80)})}function de(n,e,t,r){let s=n.getInstanceData(),o=s.get(e);if(!o){let i=t,a=!0,l=new N,c=e.subscribe({next:p=>{let h=p!==i;i=p,h&&!a&&l.next()},error:p=>{console.error("[vdom] useObservable:",p)}});a=!1;let d=(r?.throttleMs&&r.throttleMs>0?l.asObservable().pipe(Xn(r.throttleMs,{trailing:!0})):l.asObservable()).subscribe({next:()=>{ue("obs:next",String(i)+" \u2192 req:render"),n.requestRender()}});n.onUnmount(()=>{c.unsubscribe(),d.unsubscribe()}),o={get:()=>i},s.set(e,o)}return()=>o.get()}function Ts(n,e,t){if(typeof e=="function"){let s=e;return i=>{i?s(i):t?.()}}return{current:e}}function Cs(n,e,t){let r=typeof e=="object"?e:void 0,s=typeof e=="boolean"?e:!1,o=r??t,i=n.nextHookIndex(),a=n.getHookState(i)??{open:s};n.setHookState(i,a);let l=o?.open!==void 0;return{get open(){return o?.open??a.open},setOpen(c){l?(o?.onOpenChange||console.warn(`[vdom] useOpen${r?.name?`(${r.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),o?.onOpenChange?.(c)):(a.open=c,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function Xt(n,e,t){let r=t?e:(()=>!0),s=t??e,o=n.getBrowser()?.window;if(!o)return()=>{};let i=l=>{if(typeof r=="string"){if(l.key!==r)return}else if(!r(l))return;s(l)};o.addEventListener("keydown",i);let a=()=>o.removeEventListener("keydown",i);return n.onUnmount(a),a}function Es(n,e,t,r,s,o,i,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let c=e.innerWidth,u=e.innerHeight,d,p;switch(s){case"bottom":d=l.bottom+o,p=a?l.left+l.width/2-t/2:l.left;break;case"top":d=l.top-r-o,p=a?l.left+l.width/2-t/2:l.left;break;case"left":d=a?l.top+l.height/2-r/2:l.top,p=l.left-t-o;break;case"right":d=a?l.top+l.height/2-r/2:l.top,p=l.right+o;break}return p+t>c-i&&(p=c-t-i),p<i&&(p=i),d+r>u-i&&(d=u-r-i),d<i&&(d=i),{top:d,left:p}}function As(n,e){let t=e.getComputedStyle(n).animationName;if(t&&t!=="none")return!0;for(let r of n.children){let s=e.getComputedStyle(r).animationName;if(s&&s!=="none")return!0}return!1}function Os(n,e){let t=new N,r=de(n,aa(n,e,t),{top:0,left:0});return{get top(){return r().top},get left(){return r().left},refresh:()=>{t.next()}}}function aa(n,e,t){let r=n.getBrowser()?.window;return L(s=>{if(!r)return s.next({top:0,left:0}),s.complete(),()=>{};let o,i=()=>{let c=e.el();if(!c)return;let u=c.getBoundingClientRect();u.width===0&&u.height===0||(e.isOpen?.()??!0)&&s.next(e.compute(u))},a=()=>{o===void 0&&(o=r.requestAnimationFrame(()=>{o=void 0,i()}))};r.addEventListener("scroll",a,!0),r.addEventListener("resize",a),i();let l=t?.subscribe({next:()=>i()});return()=>{l?.unsubscribe(),o!==void 0&&r.cancelAnimationFrame(o),r.removeEventListener("scroll",a,!0),r.removeEventListener("resize",a)}})}function Ps(n){return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function _s(n){return Ps(n?.key)}function Ms(n){let e={...n??{}};return delete e.key,e}function er(n){if(!(n==null||n===!1)){if(typeof n=="string")return n.trim()||void 0;if(typeof n=="number")return String(n);if(Array.isArray(n)){let e=n.map(er).filter(t=>!!t);return e.length?e.join(" "):void 0}if(typeof n=="object"){let e=Object.entries(n).filter(([,t])=>!!t).map(([t])=>t);return e.length?e.join(" "):void 0}}}function la(n){for(let e of["class","className"]){let t=n[e];t!=null&&typeof t!="string"&&(n[e]=er(t))}return n}function J(n,e,...t){let r=Ms(la(e??{}));return t.length===1?r.children=t[0]:t.length>1&&(r.children=t),{type:n,props:r,key:_s(e)}}var Is=Symbol("vdom-fragment");function Se(n){return n.type===Is}function K(n){let e=n.children??(n.props.children===void 0?[]:n.props.children),t=r=>Array.isArray(r)?r.flatMap(t):[r];return Array.isArray(e)?e.flatMap(t):[e]}function G(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&Se(n)?K(n).reduce((e,t)=>e+G(t),0):1}var $s="pos:";function ie(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function B(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function ca(n){return B(n)!==null}function tr(n){return`${$s}${n}`}function Ns(n){return n.startsWith($s)}function St(n,e){let t=new Set;for(let r of n){let s=B(r);if(s!==null){if(t.has(s)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${s}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}t.add(s)}}}function Fs(n,e){if(n.length<2)return;let t=n.some(s=>typeof s?.type=="function"),r=n.some(s=>!ca(s)&&typeof s?.type=="function");if(t&&r){let s=n.map(o=>{let i=o;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${n.length}\uFF09\u2014\u2014\u9879: [${s.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}Yt();function I(n,e){return`${n}.${e}`}function kt(n){let e={};for(let[t,r]of Object.entries(n)){if(t==="children"||t==="key"||t==="ref"||typeof r=="function"||r===void 0)continue;let s=xt(t,r);e[t]=s!==null?s:r}return e}function Ds(n){return n==null||typeof n=="boolean"}function js(n){return!(n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)||typeof n=="object"&&typeof n.type=="string"||typeof n.type=="function"||typeof n.type=="symbol")}function rr(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function da(n,e,t,r){return[{op:"createAnchor",id:n,...r!==void 0?{detail:r}:{}},{op:"insert",id:n,parent:e,ref:t}]}function sr(n,e,t,r,s){for(let o of da(e,t,r,s))n(o)}function pe(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":Ds(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":Se(n)?"fragment":typeof n.type=="function"?"component":(js(n),"invalid")}function en(n){return typeof n=="string"||typeof n=="number"?String(n):null}function X(n){return pe(n)==="hole"}function Ie(n){return pe(n)==="text"}function xe(n){if(n==null)return"hole";let e=pe(n);return e==="invalid"?"hole":e}function Ws(n,e,t,r,s){let o=kt(n.props),i=kt(e.props);for(let[a,l]of Object.entries(i))a==="value"&&s?.formControl?r({op:"setProp",id:t,key:a,value:l}):o[a]!==l&&r({op:"setProp",id:t,key:a,value:l});for(let a of Object.keys(o))a in i||r({op:"setProp",id:t,key:a,value:void 0});for(let[a,l]of Object.entries(e.props))a==="children"||a==="key"||typeof l=="function"&&n.props[a]!==l&&r({op:"setProp",id:t,key:a,value:l,prev:n.props[a]});for(let a of Object.keys(n.props))a==="children"||a==="key"||typeof n.props[a]=="function"&&e.props[a]===void 0&&r({op:"setProp",id:t,key:a,value:void 0,prev:n.props[a]})}function Ye(n,e,t){return typeof n?.type=="function"?I(e,0):Array.isArray(n)?e:X(n)?I(e,0):t}function Rt(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function Y(n,e,t,r,s){if(X(n)){r({op:"remove",id:e});return}if(Ie(n)){r({op:"remove",id:e});return}if(Array.isArray(n)){let l=0;for(let c of n)Y(c,I(e,l),e,r,s),l+=G(c);return}let o=n;if(Se(o)){let l=Number(e.slice(t.length+1)),c=K(o),u=l;for(let d of c)Y(d,I(t,u),t,r,s),u+=G(d);return}if(typeof o.type=="function"){let l=o.key!==null?ie(t,o.key):e;r({op:"unmount",compId:l});let c=s?.get(l)?.lastOutput;if(c!==void 0){let u=$e(c),d=Ye(u,l,e),h=u!==null&&typeof u=="object"&&!Array.isArray(u)&&Se(u)?e.slice(0,e.lastIndexOf(".")):Rt(u,l,l);Y(u,d,h,r,s)}}let i=K(o),a=0;i.forEach(l=>{let c=I(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?Y(l,c,e,r,s):r({op:"remove",id:c}),a+=G(l)}),r({op:"remove",id:e})}var et=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var tt=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var nt=(n,e,t)=>{Y(n,t.oldId,t.parent,t.emit,t.registry),t.emitNode(e,t.parent,t.index,t.ref)};var rt=(n,e,t)=>{t.oldCompId&&t.emit({op:"unmount",compId:t.oldCompId});let r=t.registry?.get(t.oldCompId??"")?.lastOutput;if(r!==void 0){let s=$e(r);Y(s,Ye(s,t.oldCompId??"",I(t.parent,t.index)),Rt(s,t.oldCompId??"",t.parent),t.emit,t.registry)}else t.emit({op:"remove",id:t.oldId});t.emitNode(e,t.parent,t.index,t.ref)};var fe=(n,e,t)=>{let r=Array.isArray(n)?n:K(n),s=t.index;for(let o of r)Y(o,I(t.parent,s),t.parent,t.emit,t.registry),s+=G(o);t.emitNode(e,t.parent,t.index,t.ref)};var pa={text:{text:null,hole:et,element:et,component:et,fragment:et,array:et},hole:{text:tt,hole:null,element:tt,component:tt,fragment:tt,array:tt},element:{text:nt,hole:nt,element:null,component:nt,fragment:nt,array:nt},component:{text:rt,hole:rt,element:rt,component:null,fragment:rt,array:rt},fragment:{text:fe,hole:fe,element:fe,component:fe,fragment:null,array:fe},array:{text:fe,hole:fe,element:fe,component:fe,fragment:fe,array:null}};function or(n,e){return pa[n]?.[e]??null}var fa=0;function ar(n,e,t,r,s){let o=[],i=new Map,a={n:0},l=new Map,c=new N;c.subscribe({next:()=>{for(let m of[...o].reverse())try{m()}catch(f){console.error("[vdom] v2 onUnmount:",f)}}});let u=Object.create(t);u.onUnmount=m=>{o.push(m)},u.ui=cr({requestRender:()=>{ue("req:render",r.slice(-18)),s?.()},onUnmount:m=>{o.push(m)},getBrowser:()=>t.browser??null,nextHookIndex:()=>a.n++,getHookState:m=>l.get(m),setHookState:(m,f)=>{l.set(m,f)},getInstanceData:()=>i,scheduleAfterRender:m=>{let f=t.afterRender;f?f(m):setTimeout(m,0)},getSharedContext:()=>t??null});let d=n(e,u),p;typeof d=="function"?p=d:p=(m=>{let f=n(m,u);return typeof f=="function"?null:f});let h=a.n;return{factory:n,renderFn:p,lastOutput:void 0,hookSeq:a,renderBase:h,instData:i,destroy$:c,disposed:!1,epoch:fa}}function lr(n,e){let t=n.renderFn.shouldRender;return t&&n.lastProps!==void 0&&n.lastOutput!==void 0&&!t(n.lastProps,e)?$e(n.lastOutput):(n.lastProps=e,n.hookSeq.n=n.renderBase,n.renderFn(e))}function ae(n,e){let t=e.get(n);if(!(!t||t.disposed)){t.disposed=!0;try{t.destroy$.next()}catch(r){console.error("[vdom] v2 destroy$:",r)}t.instData.clear(),e.delete(n)}}function ma(n,e,t,r){let s=e.get(n),o=[];if(s){let a=s.lastOutput!==void 0?$e(s.lastOutput):void 0;if(a!==void 0){let l={get:c=>{let u=e.get(c);return u?{lastOutput:u.lastOutput}:void 0}};Y(a,Ye(a,n,t),Rt(a,n,r),c=>{o.push(c)},l)}}let i=[];for(let a of o)a.op==="unmount"&&e.has(a.compId)&&i.push(a.compId);ae(n,e);for(let a of i)e.has(a)&&ae(a,e);return o.unshift({op:"unmount",compId:n}),o}function Hs(n,e,t,r){let s=n?.lastOutput;if(s===void 0)return[e+".0"];if(typeof s=="object"&&s!==null&&"kind"in s){let o=s;if(o.kind==="hole")return[e+".0"];if(o.kind==="array")return(o.items??[]).map((a,l)=>`${e}.${l}`);let i=o.v;return i?typeof i.type=="function"?[e+".0"]:[I(t,r)]:[e+".0"]}return[e+".0"]}function ga(n,e,t,r){if(X(n))return I(e,t);if(Ie(n))return I(e,t);let s=n;if(typeof s.type!="function")return I(e,t);let o=B(s);if(o===null)return I(e,t);let i=ie(e,o);return Hs(r?.get(i),i,e,t)[0]}function Ls(n,e,t,r,s,o,i,a){let l=[],c=[],u=0,d=null;for(let p=0;p<e.length;p++){let h=G(e[p]);l.push(n[p]===void 0?z(e[p],t,u,d,r,o,s,i):Ue(n[p],e[p],t,u,d,r,s,o,i)),d=I(t,u+h-1),u+=h}for(let p=n.length-1;p>=e.length;p--)c.push(W(Le(n[p],t,ha(n,p),s)));return a?ee([...c.reverse(),...l]):(c.reverse(),ee([...l,...c]))}function Ue(n,e,t,r,s,o,i,a,l){let c=I(t,r),u=pe(n),d=pe(e);if(u==="text"&&d==="text")return String(n)===String(e)?W([]):W([{op:"setText",id:c,value:en(e)}]);if(u==="hole"&&d==="hole")return W([]);if(u==="hole")return ee([W([{op:"remove",id:c}]),z(e,t,r,s,o,a,i,l)]);if(d==="hole")return ir(n,e,t,r,s,o,a,u==="component"?Ct(n,t,r):void 0,i,l);if((u==="fragment"||u==="array")&&(d==="fragment"||d==="array")){let f=Tt(Array.isArray(n)?n:K(n)),g=Tt(Array.isArray(e)?e:K(e));return tn(g)||tn(f)?Vs(f,g,t,o,i,a,l):Ls(f,g,t,o,i,a,l,!0)}if(u===d&&typeof n!="string"&&typeof n!="number"){let f=n,g=e;if(typeof f.type=="function"&&typeof g.type=="function"){if(f.type===g.type)return ya(f,g,t,r,s,o,i,a,l);let y=Ct(f,t,r),v=ma(y,i,I(t,r),t);return ee([W(v),z(g,t,r,s,o,a,i,l)])}if(typeof f.type=="string"&&typeof g.type=="string"){if(f.type===g.type){let y=[];Ws(f,g,c,b=>y.push(b),{formControl:f.type==="input"||f.type==="textarea"});let v=Tt(K(f)),k=Tt(K(g));if(va(v,k,c),tn(k)||tn(v))return ee([W(y),Vs(v,k,c,o,i,a,l)]);let w=Ls(v,k,c,o,i,a,l,!1);return ee([W(y),w])}return ee([W(Le(f,t,r,i)),z(g,t,r,s,o,a,i,l)])}}let p=xe(n),h=xe(e),m=pe(n)==="component"?Ct(n,t,r):void 0;return ir(n,e,t,r,s,o,a,m,i,l)}function ha(n,e){let t=0;for(let r=0;r<e;r++)t+=G(n[r]);return t}function wa(n,e){let t=0;for(let r=0;r<e;r++)t+=G(n[r]);return t}function ya(n,e,t,r,s,o,i,a,l){let c=Ct(e,t,r),u=i.get(c);if(!u||u.factory!==e.type)return u&&ae(c,i),z(e,t,r,s,o,a,i,l);let d;try{d=lr(u,e.props)}catch(m){return vt(c,m),W([])}let p=u.lastOutput!==void 0?$e(u.lastOutput):void 0;u.lastOutput=nn(d);let h=ur(d,c,t,r);return p===void 0?z(d,h.parent,h.index,s,o,a,i,l):ba(p,d,h.parent,h.index,s,o,i,a,l)}function ba(n,e,t,r,s,o,i,a,l){if(n===e)return W([]);let c=Array.isArray(n),u=Array.isArray(e);if(c||u){let d=c?n:[n],p=u?e:[e],h=0,m=null,f=[];for(let g=0;g<p.length;g++){let y=G(p[g]);f.push(d[g]===void 0?z(p[g],t,h,m,o,a,i,l):Ue(d[g],p[g],t,h,m,o,i,a,l)),m=I(t,h+y-1),h+=y}for(let g=p.length;g<d.length;g++)f.push(W(Le(d[g],t,wa(d,g),i)));return ee(f)}return Ue(n,e,t,r,s,o,i,a,l)}function Tt(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&Se(t)?e.push(...Tt(K(t))):e.push(t);return e}function va(n,e,t){if(globalThis.__WF_NO_A_CHECK__)return;let r=d=>!X(d)&&!Ie(d)&&!Array.isArray(d),s=n.filter(r),o=e.filter(r),i=d=>typeof d?.type=="function"&&B(d)===null,a=(d,p)=>p>=d.length||X(d[p]),l=d=>a(n,d)||i(n[d]),c=d=>a(e,d)||i(e[d]);(e.some((d,p)=>i(d)&&!l(p))||n.some((d,p)=>i(d)&&!c(p)))&&Fs(o,`children\uFF08${t}\u2014\u2014\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${s.length}\u2192${o.length}\uFF09`)}function Ct(n,e,t){return n.key!==null?ie(e,n.key):I(e,t)}function Et(n,e,t,r,s,o){let i=xe(n),a=xe(e);return or(i,a)?ir(n,e,"root",0,null,t,s,i==="component"?Ct(n,"root",0):void 0,r,o).pipe(Us):Ue(n,e,"root",0,null,t,r,s,o).pipe(Us)}var Us=n=>ee([n,W([{op:"done"}])]);function Sa(n,e,t,r,s,o,i,a,l){return n===void 0?z(e,t,r,s,o,a,i,l):Ue(n,e,t,r,s,o,i,a,l)}function Vs(n,e,t,r,s,o,i){let a=[],l=(w,b)=>B(w)??tr(b),c=new Map;n.forEach((w,b)=>{let x=l(w,b);c.has(x)||c.set(x,b)});let u=new Set(e.map((w,b)=>l(w,b))),d=new Map;for(let w=0;w<n.length;w++){let b=n[w];if(X(b)){a.push({op:"remove",id:I(t,w)});continue}if(Ie(b)){a.push({op:"remove",id:I(t,w)});continue}if(Array.isArray(b))continue;let x=B(b);if(x!==null){let R=(d.get(x)??0)+1;if(d.set(x,R),R===1)continue;a.push(...Le(b,t,w,s));continue}}for(let[w,b]of c)if(!u.has(w)&&(a.push(...Le(n[b],t,b,s)),!Ns(w))){let x=ie(t,w);s.has(x)&&ae(x,s)}let p=n.map(w=>B(w)).filter(w=>w!==null&&u.has(w)),h=e.map(w=>B(w)).filter(w=>w!==null&&c.has(w)),f=!e.some((w,b)=>{let x=B(w);if(x===null||typeof w.type!="function")return!1;let R=c.get(x);return R===void 0||R===b?!1:s?.get(ie(t,x))===void 0});{let w=0;for(let b of h){let x=p.indexOf(b,w);if(x===-1){f=!1;break}w=x+1}}if(!f){n.forEach((x,R)=>{if(!(X(x)||Ie(x))&&!Array.isArray(x)){if(B(x)!==null&&typeof x.type=="function"){a.push(...Le(x,t,R,s,{keepSegments:!0}));return}if(B(x)!==null){a.push({op:"remove",id:I(t,R)});return}a.push(...Le(x,t,R,s))}});let w=[],b=null;for(let x=0;x<e.length;x++){let R=e[x],A=B(R),F=A!==null?ie(t,A):I(t,x);A!==null&&typeof R.type=="function"?w.push(z(R,t,x,b,r,o,s,i)):w.push(z(R,t,x,b,r,o,s,i)),b=I(t,x)}return ee([W(a),...w])}let g=[];e.forEach((w,b)=>{let x=B(w);if(x===null)return;let R=c.get(x);R!==void 0&&R!==b&&g.push({oldIdx:R,newIdx:b})});let y=g.every(w=>w.newIdx<w.oldIdx);g.sort((w,b)=>y?w.newIdx-b.newIdx:b.newIdx-w.newIdx);for(let w of g){let b=e[w.newIdx],x=B(b);if(x!==null&&typeof b.type=="function"){let R=ie(t,x),A=Hs(s?.get(R),R,t,w.oldIdx);if(A.length===1&&!A[0].startsWith(R+"."))a.push({op:"move",id:A[0],parent:t,ref:null,newId:I(t,w.newIdx),noMove:!0});else{let ce=w.newIdx>0?e[w.newIdx-1]:null,ne=ce===null?null:ga(ce,t,w.newIdx-1,s);for(let re of A)a.push({op:"move",id:re,parent:t,ref:ne,newId:re,noMove:!1}),ne=re}}else a.push({op:"move",id:I(t,w.oldIdx),parent:t,ref:null,newId:I(t,w.newIdx),noMove:!0})}let v=[],k=null;for(let w=0;w<e.length;w++){let b=e[w],x=B(b),R=I(t,w);if(x!==null){let A=c.get(x);A===void 0?v.push(z(b,t,w,k,r,o,s,i)):typeof b.type=="function"?v.push(Sa(n[A],b,t,w,k,r,s,o,i)):v.push(Ue(n[A],b,t,w,k,r,s,o,i))}else{let A=c.get(tr(w)),F=A===void 0?void 0:n[A];F!==void 0&&!X(F)&&!Ie(F)&&!Array.isArray(F)?v.push(Ue(F,b,t,w,k,r,s,o,i)):v.push(z(b,t,w,k,r,o,s,i))}k=R}return ee([W(a),...v])}function Le(n,e,t,r,s){let o=[],i=I(e,t),a=r&&r.size>0?{get:c=>{let u=r.get(c);return u?{lastOutput:u.lastOutput}:void 0}}:void 0;if(Y(n,i,e,c=>o.push(c),a),r&&!s?.keepSegments)for(let c of o)c.op==="unmount"&&r.has(c.compId)&&ae(c.compId,r);else if(r&&s?.keepSegments){for(let c of o)if(c.op==="unmount"){let u=r.get(c.compId);u&&(u.lastOutput=void 0)}}return s?.keepSegments?o.filter(c=>c.op!=="unmount"):o}function tn(n){return n.some(e=>B(e)!==null)}function ir(n,e,t,r,s,o,i,a,l,c){let u=or(xe(n),xe(e));if(!u)throw new Error(`[vdom] v2 \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${xe(n)} \u2192 ${xe(e)}`);let d=[],p=null,h=[],m=l&&l.size>0?{get:y=>{let v=l.get(y);return v?{lastOutput:v.lastOutput}:void 0}}:i,f={emit:y=>{let v=y;v.op==="unmount"&&l?.has(v.compId)&&h.push(v.compId),d.push(v)},emitNode:(y,v,k,w)=>{p={v:y,p:v,i:k,r:w}},oldId:I(t,r),newId:I(t,r),parent:t,index:r,ref:s,oldCompId:a,registry:m};u(n,e,f);let g=p?L(y=>{let v=p;return z(v.v,v.p,v.i,v.r,o,i,l,c).subscribe({next:w=>y.next(w),error:w=>y.error(w),complete:()=>y.complete()})}):W([]);return ee([L(y=>{for(let v of h)l?.has(v)&&ae(v,l);return y.complete(),()=>{}}),W(d),g])}var rn=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,t){this.doc=e,this.container=t,this.dispatchBound=this.dispatch.bind(this)}set(e,t,r){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${t}) \u88AB\u5FFD\u7565`);return}if(typeof r!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${t} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof r}`);return}let s=this.table.get(e);s||(s=new Map,this.table.set(e,s)),s.set(t,r),this.ensureRoot(t)}get(e,t){return this.table.get(e)?.get(t)}removeEvent(e,t){let r=this.table.get(e);r&&(r.delete(t),r.size===0&&this.table.delete(e))}remove(e){for(let t of[...this.table.keys()])(t===e||t.startsWith(e+"."))&&this.table.delete(t)}removeOne(e){this.table.delete(e)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let r=e.target;if(r&&!this.container.contains(r))return}if(e.type==="contextmenu"&&window.__dbgEvt){let r=e.target,s=[...this.table.entries()].map(([o,i])=>o+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",r?.getAttribute("data-wf-id"),"ALL:",s.slice(0,400))}let t=e.target;for(t&&t.nodeType===3&&(t=t.parentElement);t;){if(!t.hasAttribute?.("data-wf-id")){let s=t.closest?.("[data-wf-id]");if(s&&s!==t){t=s;continue}}let r=t.getAttribute?.("data-wf-id");if(r){let s=this.table.get(r)?.get(e.type);if(s){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{s(e)}catch(o){console.error("[vdom] \u4E8B\u4EF6 handler:",o)}if(e.cancelBubble)return}}t=t.parentElement}}clear(){this.table.clear()}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},st=/^on[A-Z]/;function At(n){return st.test(n)?n.slice(2).toLowerCase():null}var sn=class{refs=new Map;phase="active";set(e,t,r){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(r&&r!==t&&typeof r=="function")try{r(null)}catch(s){console.error("[vdom] ref prev:",s)}this.refs.set(e,t)}mount(e,t){let r=this.refs.get(e);if(typeof r=="function")try{r(t)}catch(s){console.error("[vdom] ref mount:",s)}}unmount(e){for(let[t,r]of[...this.refs])if(t===e||t.startsWith(e+".")){if(typeof r=="function")try{r(null)}catch(s){console.error("[vdom] ref unmount:",s)}this.refs.delete(t)}}unmountOne(e){let t=this.refs.get(e);if(typeof t=="function")try{t(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(e)}remap(e,t){for(let[r,s]of[...this.refs])(r===e||r.startsWith(e+"."))&&(this.refs.delete(r),this.refs.set(t+r.slice(e.length),s))}clear(){this.refs.clear()}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};function xa(n,e){switch(e.kind){case"begin":return"consuming";case"next":return e.matched?"consuming":"failed";case"end":return n==="consuming"?e.remaining>0?"failed":"inactive":n;case"reset":return"inactive"}}var on=class{queue=null;phase="inactive";events$;failed$;events=new N;constructor(){this.events$=this.events.asObservable(),this.events.asObservable().pipe(Xe(xa,"inactive")).subscribe({next:e=>{this.phase=e}}),this.failed$=this.events.asObservable().pipe(Jn(e=>e.kind==="next"&&!e.matched||e.kind==="end"&&e.remaining>0),Zn(()=>{}))}begin(e){let t=[],r=s=>{t.push(s);for(let o of s.childNodes)r(o)};for(let s of e.childNodes)r(s);this.queue=t,this.events.next({kind:"begin"})}end(){if(this.phase!=="consuming")return;let e=this.queue?.length??0;this.queue=null,this.events.next({kind:"end",remaining:e})}reset(){this.queue=null,this.events.next({kind:"reset"})}next(e,t,r){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let s=this.queue;if(!s)return null;for(;s.length>0;){let o=s.shift();if(e==="element"?o.nodeType===1&&o.tagName.toLowerCase()===t:e==="text"?o.nodeType===3:o.nodeType===8){if(e==="text"&&r!==void 0){let a=o,l=a.textContent??"";if(l!==r&&l.startsWith(r)){let c=a.splitText(r.length);s.unshift(c)}}return this.events.next({kind:"next",matched:!0}),o}}return this.events.next({kind:"next",matched:!1}),null}};Yt();var ka=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Ra(n,e,t){if(t==null||t===!1){e.startsWith("--")&&n.style.removeProperty(e),n.style[e]="";return}if(e.startsWith("--")){n.style.setProperty(e,String(t));return}typeof t=="number"&&!ka.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function dr(n,e){if(e==null||e===!1){n.style.cssText="";return}if(typeof e=="string"){n.setAttribute("style",e);return}if(e&&typeof e=="object"){n.style.cssText="";for(let[t,r]of Object.entries(e))Ra(n,t,r)}}var an=null,Bs=new WeakSet;function Ta(n){if(an||(an=new WeakSet),!Bs.has(n)){Bs.add(n);let e=an;n.addEventListener("compositionstart",t=>{let r=t.target;r instanceof HTMLElement&&e.add(r)},!0),n.addEventListener("compositionend",t=>{let r=t.target;r instanceof HTMLElement&&e.delete(r)},!0)}return an}function qs(n,e){return Ta(n).has(e)}var Ca=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function Gs(n){return Ca.has(n)}function Qs(n,e,t){if(t===void 0){if(Ea.has(e)){n[e]=!1;return}return}if(e==="value"&&n.nodeType===1){let r=n;if(n.ownerDocument&&qs(n.ownerDocument,r))return;let s=r.value;if(s===t||String(s)===String(t))return}n[e]=t}var Ea=new Set(["disabled","checked","selected","multiple","readOnly","required","indeterminate","muted","paused","open","autofocus","draggable","hidden"]);function Ot(n,e){for(let[t,r]of Object.entries(e))t==="style"?dr(n,r):nr(n,t,r)}function Ks(n,e,t,r,s,o){if(r!=="ref")if(typeof s=="function"||s===void 0&&typeof o=="function"){if(st.test(r)){let i=At(r);i&&n.set(e,i,s)}return}else if(st.test(r)){let i=At(r);i&&n.set(e,i,s)}else r==="style"?dr(t,s):Gs(r)?Qs(t,r,s):nr(t,r,s)}var Aa="http://www.w3.org/2000/svg",Oa=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function zs(n,e){return Oa.has(e)?n.createElementNS(Aa,e):n.createElement(e)}function Pa(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)Ot(t,e.attrs);else if(n.absorb.queue&&!t){let s=n.absorb.next("element",e.tag);if(s)Ot(s,e.attrs),n.nodes.set(e.id,s);else{let o=zs(n.doc,e.tag);Ot(o,e.attrs),n.nodes.set(e.id,o)}}else{let s=zs(n.doc,e.tag);Ot(s,e.attrs),t&&(n.refRegistry.unmountOne(e.id),n.eventRegistry.removeOne(e.id),t.replaceWith(s)),n.nodes.set(e.id,s)}let r=n.nodes.get(e.id);r&&r.nodeType===1&&r.setAttribute("data-wf-id",e.id)}function _a(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===3)t.textContent!==e.value&&(t.textContent=e.value);else if(n.absorb.queue&&!t){let r=n.absorb.next("text",void 0,e.value);if(r)r.textContent!==e.value&&(r.textContent=e.value),n.nodes.set(e.id,r);else{let s=n.doc.createTextNode(e.value);n.nodes.set(e.id,s)}}else{let r=n.doc.createTextNode(e.value);t&&t.replaceWith(r),n.nodes.set(e.id,r)}}function Ma(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===8){let r=e.detail?`wf-hole: ${e.detail}`:"wf-hole";t.textContent!==r&&(t.textContent=r)}else if(n.absorb.queue&&!t){let r=n.absorb.next("comment");if(r)n.nodes.set(e.id,r);else{let s=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n.nodes.set(e.id,s)}}else{let r=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t&&t.replaceWith(r),n.nodes.set(e.id,r)}}function Ia(n,e){let t=n.nodes.get(e.id);if(!t||t.isConnected)return;let r=n.parentOf(e);if(r){if(r.nodeType===3){let s=r.parentElement;if(!s)return;let o=r.nextSibling&&r.nextSibling.parentNode===s?r.nextSibling:null;s.insertBefore(t,o),t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id);return}if(r.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u951A\u540E`);let s=r.parentElement;s&&s.insertBefore(t,r.nextSibling),t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id);return}if(e.ref){let s=n.nodes.get(e.ref)??null;if(!s){let o=n.childIds.size>0&&n.childIds.has(e.ref)?n.collectDesc(e.ref):null;if(o){let i="",a=-1;for(let l of o){let c=n.seq.get(l)??0;c>a&&(a=c,i=l)}i&&(s=n.nodes.get(i)??null)}else{let i=e.ref+".";for(let[a,l]of n.nodes)a.startsWith(i)&&(s=l)}}s&&s.parentNode===r?r.insertBefore(t,s.nextSibling):s?r.appendChild(t):r.insertBefore(t,r.firstChild)}else r.insertBefore(t,r.firstChild);t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id)}}function $a(n,e){let t=n.nodes.get(e.id);if(t){if(!e.noMove){let r=n.parentOf(e);if(!r)return;let s=e.ref?n.nodes.get(e.ref)??null:null;s?r.insertBefore(t,s.nextSibling):e.first?r.insertBefore(t,r.firstChild):r.appendChild(t)}n.remapSubtree(e.id,e.newId)}}function Na(n,e){n.refRegistry.unmountOne(e.id),n.eventRegistry.removeOne(e.id),n.nodes.get(e.id)?.remove();let t=n.childIds.size>0?n.collectDesc(e.id):null,r=t??[];if(!t){let s=e.id+".";for(let o of[...n.nodes.keys()])o.startsWith(s)&&r.push(o)}for(let s of r)n.refRegistry.unmountOne(s),n.eventRegistry.removeOne(s),n.nodes.delete(s),n.unregisterChild(s);n.nodes.delete(e.id),n.unregisterChild(e.id)}function Fa(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function Da(n,e){let t=n.nodes.get(e.id);if(!t||t.nodeType!==1)return;let r=t;if(e.key==="ref"){let s=n.refRegistry.refs.get(e.id);if(e.value===void 0){n.refRegistry.set(e.id,void 0,s),n.refRegistry.refs.delete(e.id);return}n.refRegistry.set(e.id,e.value,s),r.isConnected&&n.refRegistry.mount(e.id,r);return}if(st.test(e.key)){let s=At(e.key);s&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,s):n.eventRegistry.set(e.id,s,e.value));return}Ks(n.eventRegistry,e.id,r,e.key,e.value,e.prev)}function ja(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===1&&typeof e.fn=="function"&&(n.refRegistry.set(e.id,e.fn),n.refRegistry.mount(e.id,t))}function Wa(n,e){n.clearNodeRefs(e.id)}function La(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function Ua(n,e){n.registry&&pr(e.compId,n.registry)}function Va(n,e){if(e.full&&n.absorb.end(),e.full&&n.touched.size>0)for(let[t,r]of[...n.nodes])n.touched.has(t)||(n.refRegistry.unmountOne(t),n.eventRegistry.removeOne(t),r.remove(),n.nodes.delete(t),n.unregisterChild(t));n.touched.clear()}function Zs(n,e){switch(e.op){case"create":Pa(n,e);break;case"createText":_a(n,e);break;case"createAnchor":Ma(n,e);break;case"insert":Ia(n,e);break;case"move":$a(n,e);break;case"remove":Na(n,e);break;case"setText":Fa(n,e);break;case"setProp":Da(n,e);break;case"ref":ja(n,e);break;case"unref":Wa(n,e);break;case"mount":La(n,e);break;case"unmount":Ua(n,e);break;case"done":Va(n,e);break;case"close":break}}var Ve=class{nodes=new Map;touched=new Set;childIds=new Map;byChild=new Map;seq=new Map;seqCounter=0;registerChild(e,t){this.byChild.set(t,e),this.seq.set(t,++this.seqCounter);let r=this.childIds.get(e);r||(r=new Set,this.childIds.set(e,r)),r.add(t)}unregisterChild(e){let t=this.byChild.get(e);if(t===void 0)return;this.byChild.delete(e),this.seq.delete(e);let r=this.childIds.get(t);r&&(r.delete(e),r.size===0&&this.childIds.delete(t))}collectDesc(e){let t=[],r=[e];for(;r.length>0;){let s=r.pop();t.push(s);let o=this.childIds.get(s);if(o)for(let i of o)r.push(i)}return t}reset(){this.nodes.clear(),this.touched.clear(),this.childIds.clear(),this.byChild.clear(),this.seq.clear(),this.seqCounter=0,this.eventRegistry.clear(),this.refRegistry.clear()}eventRegistry;refRegistry=new sn;absorb=new on;container;doc;registry;devVerify=null;constructor(e,t,r){this.container=e,this.doc=t,this.registry=r??null,this.eventRegistry=new rn(t,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let t=this.registry.get(e);if(t){for(let r of[...t.onUnmounts].reverse())try{r()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,t){let r=(o,i)=>{let a=o.get(i);a!==void 0&&(o.delete(i),o.set(t+i.slice(e.length),a))};for(let o of[...this.nodes.keys()])if(o===e||o.startsWith(e+".")){r(this.nodes,o);let i=this.nodes.get(t+o.slice(e.length));i&&i.nodeType===1&&i.setAttribute("data-wf-id",t+o.slice(e.length))}for(let[o,i]of[...this.byChild]){let a=o===e||o.startsWith(e+"."),l=i===e||i.startsWith(e+".");if(!a&&!l)continue;let c=a?t+o.slice(e.length):o,u=l?t+i.slice(e.length):i;this.byChild.delete(o),this.byChild.set(c,u);let d=this.childIds.get(i);d&&(d.delete(o),d.size===0&&this.childIds.delete(i));let p=this.childIds.get(u);p||(p=new Set,this.childIds.set(u,p)),p.add(c)}let s=this.byChild.get(e);s!==void 0&&!this.byChild.has(t)&&(this.unregisterChild(e),this.registerChild(s,t)),this.refRegistry.remap(e,t);for(let o of[...this.eventRegistry.table.keys()])if(o===e||o.startsWith(e+".")){let i=this.eventRegistry.table.get(o);this.eventRegistry.table.delete(o),this.eventRegistry.table.set(t+o.slice(e.length),i)}if(this.registry){for(let o of[...this.registry.keys()])if(o===e||o.startsWith(e+".")){let i=this.registry.get(o);this.registry.delete(o),this.registry.set(t+o.slice(e.length),i)}}}parentOf(e){if(e.parent==="root")return this.container;let t=this.nodes.get(e.parent);if(t&&t.isConnected)return t;let r=e.parent.split(".");for(let s=r.length-1;s>0;s--){let o=r.slice(0,s).join(".");if(o==="root")return this.container;let i=this.nodes.get(o);if(i&&i.isConnected)return i}return null}apply(e){Zs(this,e),this.devVerify&&this.devVerify(e,this)}};var ln="__wf_portal";function fr(n){return`${ln}-${n}`}function Ha(n,e){switch(e.kind){case"open":return"open";case"exit":return n==="open"?"exit":n;case"closed":return"closed";case"disposed":return"closed"}}function Ba(n){return typeof n=="function"?n():n}function Js(n){return n?typeof n=="function"?n():n:null}function cn(n,e){let t={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0},segments:new Map},r=new N,s=r.asObservable();r.asObservable().pipe(Xe(Ha,"closed")).subscribe({next:T=>{t.phase=T}});let o=T=>{r.next(T)},i=n.getBrowser()?.window,a=n.getBrowser()?.document,l=()=>{if(!a)return null;if(t.container)return t.container;let T=a.getElementById(ln);T||(T=a.createElement("div"),T.id=ln,a.body.appendChild(T));let P=e.key??"popup",M=a.getElementById(fr(P));return M?t.container=M:(t.container=a.createElement("div"),t.container.id=fr(P),T.appendChild(t.container)),t.container},c=0,u=!1,d=()=>{if(t.disposed||!t.open)return;if(e.position&&t.panel){let _=e.position();if(_&&typeof _.x=="number"&&typeof _.y=="number"){t.pos={top:_.y,left:_.x,width:_.width},u=!0,f();return}}let T=Js(e.anchor);if(!T||!t.panel){c++<10&&queueMicrotask(d);return}if(!i)return;let P=t.panel,M=P.offsetWidth||P.getBoundingClientRect().width,U=P.offsetHeight||P.getBoundingClientRect().height;if((M===0||U===0)&&c++<10){typeof i.requestAnimationFrame=="function"?i.requestAnimationFrame(d):queueMicrotask(d);return}let Q=typeof e.placement=="function"?e.placement():e.placement??"bottom",C=Es(T,i,M,U,Q,e.gap??8,e.margin??8,e.center??!0);if(!C){c++<10&&queueMicrotask(d);return}if(c=0,t.pos=C,t.applier){let _=g(t.tree);_&&y(_)}},p=T=>{if(t.panel=T,T&&t.open&&!u&&e.positioning!=="none"&&(i&&typeof i.requestAnimationFrame=="function"?i.requestAnimationFrame(d):queueMicrotask(d)),T&&e.presence){let P=M=>{t.phase==="exit"&&k()};T.addEventListener("animationend",P),n.onUnmount(()=>T.removeEventListener("animationend",P))}},h=null,m=T=>{h=T,T&&u&&f()},f=()=>{let T=e.mask?h:t.panel;T&&(T.style.top=`${t.pos.top}px`,T.style.left=`${t.pos.left}px`,t.pos.width!==void 0&&(T.style.width=`${t.pos.width}px`))},g=T=>{if(!T)return null;let P=T;e.mask&&(P=J("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:O=>{e.maskClosable!==!1&&O.target===O.currentTarget&&w()}},e.maskCentered?{...P,props:{...P.props??{}}}:J("div",{class:"wf-popup-mask-inner",ref:m,style:e.position?{position:"fixed",top:`${t.pos.top}px`,left:`${t.pos.left}px`,...t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}}:void 0},P)));let M=P.props??{},U=e.positioning==="none"||String(M.class??"").includes("mask")?M.class??"":["wf-popup",M.class].filter(Boolean).join(" "),Q=!(e.mask&&e.position),C=e.positioning==="none"?{...M.style??{},position:"fixed"}:{...M.style??{},position:"fixed",...Q?{top:`${t.pos.top}px`,left:`${t.pos.left}px`}:{},...Q&&t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...P,props:{...M,class:U,style:C,ref:p}}},y=T=>{let P=++t.version,M=t.tree;t.tree=T,t.chain=t.chain.then(async()=>{if(t.disposed||P!==t.version)return;let U=t.applier;if(!U)return;let Q=U.registry;if(!Q)return;let C=n.getSharedContext()??{},_=await new Promise((O,te)=>{let j=[],se=()=>n.requestRender?.();(M?Et(M,T,C,t.segments,Q,se):ot(T,C,Q,t.segments,se)).subscribe({next:Qo=>j.push(Qo),error:te,complete:()=>O(j)})});for(let O of _){if(t.disposed||P!==t.version)return;U.apply(O)}for(let O of _)O.op==="unmount"&&ae(O.compId,t.segments)}).catch(U=>{console.error("[popup] render error:",U)})},v=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},k=()=>{t.disposed||(t.open=!1,o({kind:"closed"}),A(),v(),o({kind:"disposed"}),e.onClose?.())},w=()=>{!t.open||t.disposed||(e.presence?(o({kind:"exit"}),t.panel&&i&&!As(t.panel,i)&&k(),t.panel||k()):k())},b={value:""},x={value:null},R={value:!1},A=()=>{R.value&&(a?.body&&(a.body.style.overflow=b.value),b.value="",x.value&&(x.value.focus?.(),x.value=null),R.value=!1)},F=()=>{n.scheduleAfterRender(()=>{let T=P=>{let M=t.panel;M?(M.querySelector?.("input, button, [tabindex], select, textarea")??M).focus?.():P<10&&t.open&&queueMicrotask(()=>T(P+1))};T(0)})},ce=()=>{R.value=!0,e.lockScroll&&a?.body&&(b.value=a.body.style.overflow,a.body.style.overflow="hidden"),e.trapFocus&&i&&(x.value=i.document.activeElement,F())},ne=null;e.trapFocus&&i&&(ne=T=>{if(T.key!=="Tab"||!t.open||!t.panel)return;let P=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(C=>!C.disabled&&C.offsetParent!==null);if(P.length===0)return;let M=P[0],U=P[P.length-1],Q=i?.document.activeElement;T.shiftKey&&(Q===M||Q===t.panel||!t.panel.contains(Q))?(T.preventDefault(),U.focus()):!T.shiftKey&&(Q===U||!t.panel.contains(Q))&&(T.preventDefault(),M.focus())},i.addEventListener("keydown",ne));let re=T=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let P=T.target,M=Js(e.anchor);P&&M?.contains(P)||P&&t.panel?.contains(P)||w()},ut=T=>{t.open&&(e.closeOnEscape??!0)&&T.key==="Escape"&&w()};i&&(i.addEventListener("mousedown",re),i.addEventListener("keydown",ut)),n.onUnmount(()=>{i&&(i.removeEventListener("mousedown",re),i.removeEventListener("keydown",ut),ne&&i.removeEventListener("keydown",ne)),k()});let Nt=()=>{if(t.open||t.disposed)return;t.open=!0,o({kind:"open"});let T=l();if(!T)return;e.trapFocus||e.lockScroll?ce():e.autoFocus&&F();let P=ke();t.applier=new Ve(T,a,P),t.segments=new Map;let M=Ba(e.content);M!=null?y(g(M)):k()},Ft={close:w,update(T){if(t.disposed||!t.open)return;if(T==null){w();return}let P=!1;if(e.position){let M=e.position();M&&typeof M.x=="number"&&typeof M.y=="number"&&(t.pos={top:M.y,left:M.x,width:M.width},P=!0)}y(g(T)),P&&f()},refresh(){if(!(t.disposed||!t.open||!t.tree)&&e.position){let T=e.position();T&&typeof T.x=="number"&&typeof T.y=="number"&&(t.pos={top:T.y,left:T.x,width:T.width},f())}},get open(){return t.open},events$:s};return Nt(),Ft}function Xs(n,e,t){let r=n.nextHookIndex(),s=n.getHookState(r)??{value:t};n.setHookState(r,s);let o=e.value!==void 0;return{get value(){return e.value??s.value},controlled:e,setValue(i){o?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(s.value=i,n.requestRender())}}}function Ys(n,e){let t=new N,r=de(n,qa(n,e,t),{y:0,x:0});return{get y(){return r().y},get x(){return r().x},refresh:()=>{t.next()}}}function qa(n,e,t){let r=n.getBrowser()?.window,s=n.getBrowser()?.document??null;return L(o=>{if(!r)return o.next({y:0,x:0}),o.complete(),()=>{};let i,a=null,l=null,c=0,u=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let f=e;return typeof f.getScroller=="function"?f.getScroller()??null:f.root?typeof f.root=="string"?s?s.querySelector(f.root)??r:r:f.root:r}return r},d=f=>f?f===r?{y:r.scrollY||0,x:r.scrollX||0}:{y:f.scrollTop,x:f.scrollLeft}:{y:0,x:0},p=()=>{o.next(d(l))},h=()=>{if(a)return;if(l=u(),!l){c++<10&&n.scheduleAfterRender(h);return}let f=()=>{i===void 0&&(i=r.requestAnimationFrame(()=>{i=void 0,p()}))};l.addEventListener("scroll",f,{passive:!0}),a=f,p()};h();let m=t?.subscribe({next:()=>{h(),p()}});return()=>{m?.unsubscribe(),i!==void 0&&r.cancelAnimationFrame(i),a&&l&&l.removeEventListener("scroll",a),a=null}})}function eo(n,e){let t=n.nextHookIndex(),r=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,r);let o=n.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,c=typeof i?.threshold=="function"?i.threshold():i?.threshold,u=typeof i?.root=="function"?i.root():i?.root??null,d=p=>{if(!o||!p||r.io)return;let h=new o(m=>{let f=m[0];f&&f.isIntersecting!==r.isIn&&(r.isIn=f.isIntersecting,i?.onChange?.(f,f.isIntersecting),n.requestRender())},{root:u??void 0,rootMargin:l,threshold:c});h.observe(p),r.io=h,r.ready=!0,n.onUnmount(()=>r.io?.disconnect())};if(o&&!r.io){let p=typeof a=="function"?a():a??null;p?d(p):a!==void 0&&r.retries++<10&&n.scheduleAfterRender(()=>d(typeof a=="function"?a():a??null))}return{get isIn(){return r.isIn},get ready(){return r.ready},ref:p=>{p?d(p):r.io?.disconnect()},observe:p=>d(p),disconnect:()=>{r.io?.disconnect(),r.io=null}}}function to(n,e,t){let r=n.nextHookIndex(),s=n.getHookState(r)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(r,s);let o=e.value!==void 0;return{controlled:e,get value(){return e.value??s.keyword},setValue(i){o?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(s.keyword=i,n.requestRender())},get keyword(){return s.keyword},setKeyword(i){s.keyword=i,s.composing||this.setValue(i)},get selectedLabel(){return s.selectedLabel},setSelectedLabel(i){s.selectedLabel=i},get isComposing(){return s.composing},onCompositionStart(){s.composing=!0},onCompositionEnd(){s.composing=!1}}}function ro(n,e){let t={draggable:!0,onDragStart:r=>{e.data!==void 0&&r.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(r,e.data)},onDragEnd:r=>e.onDragEnd?.(r)};return{draggableProps:t,dragProps:t,dropProps:{onDragEnter:r=>e.onDragEnter?.(r),onDragOver:r=>{r.preventDefault(),e.onDragOver?.(r)},onDragLeave:r=>e.onDragLeave?.(r),onDrop:r=>{r.preventDefault();let s;try{s=r.dataTransfer?.getData("text/plain")?JSON.parse(r.dataTransfer.getData("text/plain")):void 0}catch{s=void 0}e.onDrop?.(r,s)}}}}var no=new WeakMap,Ga=new Map;function Qa(n,e){let t=n.getBrowser()?.window,r=t?no.get(t)??no.set(t,new Map).get(t):Ga,s=r.get(e);return s||(s=zn(o=>{let i=n.getBrowser()?.window,l=(i?.matchMedia?.bind(i)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0))?.(e);if(!l)return;let c=()=>o(l.matches);return l.addEventListener("change",c),()=>l.removeEventListener("change",c)},()=>{let o=n.getBrowser()?.window,i=o?.matchMedia?.bind(o)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0);return i?i(e).matches:!1}),r.set(e,s)),s}function Pt(n,e){return de(n,Qa(n,e),!1)}function so(n,e){let t=Object.entries(e).sort((r,s)=>r[1]-s[1]);return()=>{let r=t[0]?.[0]??"default";for(let[s,o]of t)Pt(n,`(min-width: ${o}px)`)()&&(r=s);return r}}var Ka=0,mr=()=>`m${Date.now().toString(36)}${(Ka++).toString(36)}`;function za(){let n="";return(e,t)=>{let r=e.trim();if(!r)return null;if(r.startsWith("event:"))return n=r.slice(6).trim(),null;let s=t??n,o=r.startsWith("data:")?r.slice(5).trim():r;if(!o)return null;let i;try{i=JSON.parse(o)}catch{return null}if(!s)return i.toolCalls?{toolCalls:i.toolCalls}:i.text!==void 0?{content:String(i.text)}:i.content!==void 0?{content:i.content}:null;switch(s){case"wf:message_start":return null;case"wf:token":return{content:i.text!==void 0?String(i.text):i.content};case"wf:step":return{step:i};case"wf:usage":return{usage:i};case"wf:tool_call":return{toolCalls:[{id:i.id,name:i.name,args:i.args,status:"running",call:i}]};case"wf:tool_progress":return{toolProgress:i};case"wf:tool_result":return{toolResult:i};case"wf:approval_request":return{approval:i};case"wf:error":return{error:i};case"wf:done":{let a=i.usage?{usage:i.usage}:{};return{done:!0,...i.content?{content:i.content,doneContent:!0}:{},...a}}default:return null}}}function oo(n,e){let t=n.nextHookIndex(),r=n.getHookState(t)??{messages:[],status:"idle",subs:new Set,changes:new N,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(n.setHookState(t,r),r.messages.length===0){let a=[];e.system&&a.push({id:mr(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),r.messages=a}let s=()=>{for(let a of[...r.subs])a();r.changes.next([...r.messages])},o=e.parseChunk??za(),i={get state(){return r.messages},get messages(){return r.messages},changes$:r.changes.asObservable(),get status(){return r.status},get input(){return r.input??""},setInput(a){r.input=a},get streaming(){return r.status==="streaming"},get error(){return r.error??null},get usage(){return r.usage??null},get step(){return r.step??null},subscribe(a){return r.subs.add(a),()=>{r.subs.delete(a)}},set(){},update(){},notify:s,async send(a=r.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",c={id:mr(),role:"user",content:a};r.messages=[...r.messages,c];let u={id:mr(),role:"assistant",content:"",status:"streaming"};r.messages=[...r.messages,u],r.status="streaming",s();let d=new AbortController;r.controller=d;try{let p=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:r.messages.map(g=>({role:g.role,content:g.content}))}),signal:d.signal});if(!p.ok||!p.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${p.status}`);let h=p.body.getReader(),m=new TextDecoder,f="";for(;;){let{value:g,done:y}=await h.read();if(y)break;f+=m.decode(g,{stream:!0});let v=f.split(`
72
- `);f=v.pop()??"";let k;for(let w of v){if(!w.trim())continue;if(w.trim().startsWith("event:")){k=w.trim().slice(6).trim();continue}let b=o(w,k);if(w.trim().startsWith("data:")&&(k=void 0),!!b){if(b.content&&(u.content=b.doneContent?u.content||b.content:u.content+b.content,s()),b.toolCalls?.length&&(u.toolCalls=[...u.toolCalls??[],...b.toolCalls],s()),b.toolProgress){let x=u.toolCalls?.find(R=>R.id===b.toolProgress.toolCallId);x&&(x.progress=b.toolProgress,s())}if(b.toolResult){let x=u.toolCalls?.find(R=>R.id===b.toolResult.id);x&&(x.result=b.toolResult.output,x.status=b.toolResult.ok===!1?"error":"ok",s())}if(b.approval){u.approval=b.approval;let x=u.toolCalls?.find(R=>R.id===b.approval.toolCallId);x&&(x.approval=b.approval),s()}b.usage&&(r.usage=b.usage,s()),b.step!==void 0&&(r.step=b.step,s()),b.error&&(r.error=b.error,u.status="error",s()),b.done&&(r.step=null,s())}}}u.status=void 0,r.status="idle"}catch(p){p.name!=="AbortError"?(u.status="error",r.status="error"):(u.status=void 0,r.status="idle")}finally{r.controller=null,s()}},stop(){r.controller?.abort()},retry(){let a=[...r.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){r.messages=[],r.status="idle",s()},async approve(a,l,c){let u=!1;for(let d of r.messages){for(let p of d.toolCalls??[])if(!p.approved){p.approved=a!=="rejected",l&&(p.feedback=l),a==="modified"&&c&&(p.args=c),u=!0;break}if(u)break}s()}};return i}function gr(n){return Pt(n,"(prefers-reduced-motion: reduce)")()}function io(n,e,t){let r=n.getBrowser()?.window,s=gr(n),o=t?.duration??400;if(o<=0)return{value:e,reset:()=>{}};let i=t?.ease==="linear"?k=>k:k=>1-Math.pow(1-k,3),a=n.nextHookIndex(),l=n.getHookState(a);if(l)return l.reset(e),l;let c=s?e:0,u,d=e,p=0,h=o+200,m,f={get value(){return u!==void 0&&r&&r.performance.now()-p>h?d:c},set value(k){c=k},reset:()=>{}},g=()=>{n.requestRender()},y=k=>{if(d=k,s){f.value=k,g();return}if(k===f.value)return;if(!r){f.value=k;return}u!==void 0&&r.cancelAnimationFrame(u);let w=f.value,b=r.performance.now();p=b,v();let x=R=>{let A=Math.min(1,(R-b)/o);f.value=Math.round(w+(k-w)*i(A)),A<1?u=r.requestAnimationFrame(x):u=void 0,g()};u=r.requestAnimationFrame(x)},v=()=>{r&&(m!==void 0&&clearTimeout(m),m=setTimeout(()=>{m=void 0,u!==void 0&&(r&&r.cancelAnimationFrame(u),u=void 0,f.value=d,g())},h))};return f.reset=k=>{k===d&&u!==void 0||y(k)},n.onUnmount(()=>{u!==void 0&&r&&(r.cancelAnimationFrame(u),u=void 0)}),n.setHookState(a,f),l=f,l.reset(e),l}function ao(n,e){let t=n.getBrowser()?.window,r=0,s=0,o=!1,i=0,a=d=>{o&&e.onMove(d,{x:d.clientX-r,y:d.clientY-s})},l=d=>{o&&d.pointerId===i&&(o=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",c)),e.onEnd?.(d))},c=d=>{!o||d.pointerId!==i||(o=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",c)),e.onEnd?.(d))},u=d=>{o||(d.preventDefault(),o=!0,i=d.pointerId,r=d.clientX,s=d.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",c)),e.onStart?.(d))};return n.onUnmount(()=>{o&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",c),o=!1)}),{onPointerDown:u}}function lo(n){let e=de(n,Za(n),{height:0,offsetTop:0,keyboardOpen:!1});return{get height(){return e().height},get offsetTop(){return e().offsetTop},get keyboardOpen(){return e().keyboardOpen}}}function Za(n){let e=n.getBrowser()?.window;return L(t=>{let r=()=>{let i=e?.visualViewport,a=i?.height??e?.innerHeight??0;return{height:a,offsetTop:i?.offsetTop??0,keyboardOpen:a<(e?.innerHeight??0)*.9}};if(!e)return t.next({height:0,offsetTop:0,keyboardOpen:!1}),t.complete(),()=>{};let s=()=>t.next(r()),o=e.visualViewport;return o?.addEventListener?(o.addEventListener("resize",s),o.addEventListener("scroll",s),s(),()=>{o.removeEventListener("resize",s),o.removeEventListener("scroll",s)}):(e.addEventListener("resize",s),s(),()=>e.removeEventListener("resize",s))})}function hr(n,e){let t=n.nextHookIndex(),r=n.getHookState(t);return r===void 0&&(r={v:e},n.setHookState(t,r)),{get:()=>r.v,set:s=>{r.v=typeof s=="function"?s(r.v):s,n.requestRender()}}}function wr(n,e){let t=null,r=e,s={onClick:l=>{r.maskClosable!==!1&&l.target===l.currentTarget&&i()}},o={role:e.role??"dialog","aria-modal":!0},i=()=>r.onOpenChange?.(!1),a=(l,c)=>{c&&(r=c);let u=!!r.open;u&&!t?t=cn(n,{key:"overlay",presence:!!r.presence,trapFocus:r.trapFocus!==!1,lockScroll:r.lockScroll!==!1,positioning:"none",closeOnOutside:!1,closeOnEscape:!1,content:l,onClose:()=>{t=null}}):!u&&t?(t.update(l()),t.close(),t=null):t&&t.update(l())};return Xt(n,l=>{l.key==="Escape"&&t?.open&&r.closeOnEscape!==!1&&i()}),n.onUnmount?.(()=>{t&&t.close()}),{maskProps:s,panelProps:o,close:i,sync:a}}function yr(n,e){let t=e,r=()=>t.id??(t.name?`wf-${t.name}`:void 0),s=()=>r()??"wf-field";return{get hasWrap(){return!!(t.label||t.error||t.hint)},get stateClass(){return t.error?` ${t.wrapErrClass??"wf-field--err"}`:""},get inputId(){return r()},inputProps(){let o={},i=r();i&&(o.id=i),t.error&&(o["aria-invalid"]=!0);let a=[];return t.error&&a.push(`${s()}-err`),t.hint&&!t.error&&a.push(`${s()}-hint`),a.length&&(o["aria-describedby"]=a.join(" ")),t.required&&(o["aria-required"]=!0),o},renderLabel(){if(t.label==null&&!t.required)return null;let o=[];return t.label!=null&&o.push(t.label),t.required&&o.push(J("span",{class:t.reqClass??"wf-field-req"},t.reqChar??"*")),J("label",{class:t.labelClass,...r()?{for:r()}:{}},o)},renderError(){return t.error?J("div",{class:t.errClass,id:`${s()}-err`},t.error):null},renderHint(){return t.hint&&!t.error?J("div",{class:t.hintClass,id:`${s()}-hint`},t.hint):null}}}var co=new Map,uo=new Set,Ja=new N;var un=new Map;function cr(n){return{useObservable(e,t,r){return de(n,e,t,r)},useAsyncData(e,t){let r=co.get(t);r||(r={trigger:new Me(void 0),state$:new Me(un.get(t)??null),fetcher:null,started:un.has(t),seedHit:un.has(t),sub:null},un.delete(t),co.set(t,r)),r.fetcher=e;let s=()=>{if(r.sub||r.seedHit)return;r.started=!0;let a=r.trigger.asObservable().pipe(Jt(()=>{let l=r.fetcher;if(!l)return Je(Promise.resolve(null));let c=l();return uo.add(c),c.finally(()=>uo.delete(c)).catch(()=>{}),Je(c)}));r.sub=a.subscribe({next:l=>{r.state$.next(l)},error:l=>{console.error("[vdom] useAsyncData:",l),Ja.next({key:t,error:l}),r.state$.next(null)}})};return s(),[de(n,r.state$.asObservable(),null),()=>{r.seedHit&&(r.seedHit=!1),r.state$.next(null),r.sub?r.trigger.next():s()}]},useSession(e){let[t]=this.useAsyncData(async()=>{let r={},s=e?.token?.();s&&(r.Authorization=`Bearer ${s}`);let o=await fetch(e?.path??"/api/auth/me",{headers:r});if(!o.ok)throw new Error(`session \u83B7\u53D6\u5931\u8D25 HTTP ${o.status}`);return await o.json()},"wf:session");return t},useExternal(e){let t=n.getInstanceData(),r=t.get(e);if(!r){let s=e.subscribe(()=>n.requestRender());n.onUnmount(s),r={unsub:s},t.set(e,r)}return()=>e.state},signal:e=>{let t=Yn(e),r=t.subscribe(()=>n.requestRender());return n.onUnmount(r),t},hold:e=>n.onUnmount(e),useStableRef:(e,t)=>Ts(n,e,t),useOpen:(e,t)=>Cs(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>Xt(n,e,t),openPopup:e=>cn(n,e),usePopupPosition:e=>Os(n,e),useControlled:(e,t)=>Xs(n,e,t),useScrollPosition:e=>Ys(n,e),useInView:e=>eo(n,e),useControlledInput:(e,t)=>to(n,e,t),useDragDrop:e=>ro(n,e),useMedia:e=>Pt(n,e),useBreakpoint:e=>so(n,e),useChat:e=>oo(n,e),useTween:(e,t)=>io(n,e,t),useDrag:e=>ao(n,e),useVisualViewport:()=>lo(n),useReducedMotion:()=>gr(n),useSignal:e=>hr(n,e),useOverlay:e=>wr(n,e),useField:e=>yr(n,e)}}function nn(n){return X(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function $e(n){return n.kind==="hole"?null:n.kind==="array"?n.items:n.v}function ke(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},delete:e=>{n.delete(e)},keys:()=>[...n.keys()],asyncTimeout:15e3}}function pr(n,e){let t=[...e.keys()].filter(r=>r===n||r.startsWith(n+".")).reverse();for(let r of t){let s=e.get(r);if(s){for(let o of s.onUnmounts.reverse())try{o()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(r)}}}function ur(n,e,t,r){return typeof n?.type=="function"||Array.isArray(n)||pe(n)==="hole"?{parent:e,index:0}:{parent:t,index:r}}function z(n,e,t,r,s,o,i,a){let l=[];return _t(n,e,t,r,s,o,i,a,l),W(l)}function _t(n,e,t,r,s,o,i,a,l){let c=I(e,t);switch(pe(n)){case"text":{let u=en(n);l.push({op:"createText",id:c,value:u},{op:"insert",id:c,parent:e,ref:r});break}case"hole":{sr(u=>l.push(u),c,e,r);break}case"array":{let u=n;St(u,`\u6570\u7EC4\u5C55\u5F00\uFF08${e}\uFF09`);let d=t,p=r;for(let h of u){_t(h,e,d,p,s,o,i,a,l);let m=G(h);p=I(e,d+m-1),d+=m}break}case"fragment":{let u=K(n);St(u,`Fragment \u5C55\u5F00\uFF08${e}\uFF09`);let d=t,p=r;for(let h of u){_t(h,e,d,p,s,o,i,a,l);let m=G(h);p=I(e,d+m-1),d+=m}break}case"element":{let u=n;l.push({op:"create",id:c,tag:u.type,attrs:kt(u.props)});for(let[f,g]of Object.entries(u.props))f==="children"||f==="key"||f==="ref"||typeof g=="function"&&l.push({op:"setProp",id:c,key:f,value:g});l.push({op:"insert",id:c,parent:e,ref:r});let d=u.props.ref;typeof d=="function"&&l.push({op:"ref",id:c,fn:d});let p=K(u);St(p,`\u5143\u7D20 children\uFF08${c}\uFF09`);let h=null,m=0;for(let f of p){_t(f,c,m,h,s,o,i,a,l);let g=G(f);h=I(c,m+g-1),m+=g}l.push({op:"close",id:c});break}case"component":{let u=n,d=u.key!==null?ie(e,u.key):c,p=i??new Map,h=p.get(d);h&&h.factory!==u.type&&(ae(d,p),h=void 0),h?ue("seg:reuse",d):(h=ar(u.type,u.props,s,d,a),p.set(d,h),ue("seg:create",d));let m;try{m=lr(h,u.props)}catch(g){vt(d,g),m=null}m!==null&&Qn(d),h.lastOutput=nn(m);let f=ur(m,d,e,t);if(X(m)){let g=I(d,0);l.push({op:"createAnchor",id:g},{op:"insert",id:g,parent:e,ref:r},{op:"mount",compId:d});break}_t(m,f.parent,f.index,r,s,o,p,a,l),l.push({op:"mount",compId:d});break}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${rr(n)}`),sr(u=>l.push(u),c,e,r,rr(n));break}}}function ot(n,e,t,r,s){let o=e??{},i=t??ke();return z(n,"root",0,null,o,i,r,s).pipe(Xa(W([{op:"done",full:!0}])))}function W(n){return L(e=>{for(let t of n)e.next(t);return e.complete(),()=>{}})}function ee(n){return L(e=>{let t=0,r=null,s=!1,o=!1,i=()=>{if(!(s||o)){for(o=!0;!s;){if(t>=n.length){e.complete();break}let a=n[t++],l=!1,c=!0;if(r=a.subscribe({next:u=>e.next(u),error:u=>{s||(s=!0,e.error(u))},complete:()=>{l||s||(l=!0,!c&&i())}}),c=!1,!l)break}o=!1}};return i(),()=>{s=!0,r?.unsubscribe()}})}function Xa(n){return e=>ee([e,n])}function yo(n){return new Promise((e,t)=>{let r=[];n.subscribe({next:s=>r.push(s),error:t,complete:()=>e(r)})})}async function br(n,e,t){let r=t??ke(),s=await yo(ot(n,e,r)),{commandToHtml:o}=await Promise.resolve().then(()=>(wo(),ho)),a=new ReadableStream({start(c){for(let u of s)c.enqueue(u);c.close()}}).pipeThrough(o()).getReader(),l="";for(;;){let{value:c,done:u}=await a.read();if(u)break;l+=c}return l}function ll(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Ro(n){return n==null||n===!1||n===!0?"":Array.isArray(n)?n.map(Ro).join(""):n instanceof _e?n.value:ll(String(n))}function cl(n){return new _e(n)}var ul=32;async function vo(n){let e={};for(let t of n)try{let r=await vr(t);e[t]={mtimeMs:r.mtimeMs,size:r.size}}catch{e[t]={mtimeMs:-1,size:-1}}return e}async function To(n,e=new Set){if(e.has(n))return[];e.add(n);let t;try{t=await xo(n,"utf-8")}catch{return[]}let r=Mt(n),s=[];for(let o of t.matchAll(/@import\s+['"](\.[^'"]+\.css)['"]/g)){let i=dn(r,o[1]);s.push(i,...await To(i,e))}return s}function Co(){let n=Mt(ko(import.meta.url));for(;;){if(Sr(Z(n,"package.json")))return n;let e=Mt(n);if(e===n)throw new Error("[ui] \u5305\u6839\u5B9A\u4F4D\u5931\u8D25\uFF08\u5411\u4E0A\u672A\u627E\u5230 package.json\uFF09");n=e}}var dl={weifuwu:"level6/index.js","weifuwu/client/vdom":"level6/client/vdom/index.js","weifuwu/client/vdom/jsx-runtime":"level6/client/vdom/jsx-runtime.js","weifuwu/client/vdom/testing":"level6/client/vdom/testing.js","weifuwu/client/components":"level6/client/components/index.js","weifuwu/client/layout":"level6/client/layout/index.js","weifuwu/dev":"level6/dev/index.js","weifuwu/shared/router":"level0/router/index.js"};function Eo(n){let e=Z(Co(),"dist"),t=dl[n];if(t)return Z(e,t);if(n.startsWith("weifuwu/server/"))return Z(e,"level6","server",n.slice(15),"index.js");if(n.startsWith("weifuwu/")){let r=n.slice(8);for(let s of[Z(e,r),`${Z(e,r)}.js`,`${Z(e,r)}.css`,Z(e,r,"index.js"),Z(e,"level6",r,"index.js"),Z(e,"level5",r,"index.js")])if(Sr(s))return s;return Z(e,r,"index.js")}return n}function pl(n){let e=Co();return n.startsWith(Z(e,"src")+al)?Z(e,"src","level6","client","vdom"):Z(e,"dist","level6","client","vdom")}function So(n){if(n.startsWith(".")||n.startsWith("/"))return dn(n);if(n==="weifuwu"||n.startsWith("weifuwu/"))return Eo(n);try{return ko(import.meta.resolve(n))}catch{return dn(n)}}function xr(n={}){let e=n.cache!==!1,t=new Map,r=new Map,s={builds:0,hits:0,dedups:0};async function o(c){for(let[u,d]of Object.entries(c))try{let p=await vr(u);if(p.mtimeMs!==d.mtimeMs||p.size!==d.size)return!1}catch{return!1}return!0}async function i(c,u,d){let p=`${c}:${u}`;if(e){let m=t.get(p);if(m&&await o(m.inputs))return s.hits++,m;let f=r.get(p);if(f)return s.dedups++,f}s.builds++;let h=(async()=>{let{code:m,inputs:f}=await d(),g=`"${ol("sha1").update(m).digest("hex").slice(0,20)}"`,y={code:m,etag:g,inputs:f};if(e){if(t.size>=ul){let v=t.keys().next().value;v!==void 0&&t.delete(v)}t.set(p,y)}return y})();return e&&(r.set(p,h),h.catch(()=>{}).finally(()=>r.delete(p))),h}function a(c,u,d,p){let h={"Content-Type":p,ETag:d,"Cache-Control":"no-cache"};return c.headers.get("if-none-match")===d?new Response(null,{status:304,headers:h}):new Response(u,{headers:h})}let l=(async(c,u,d)=>{function p(h,...m){let f="";for(let g=0;g<h.length;g++)f+=h[g],g<m.length&&(f+=Ro(m[g]));return new Response(f,{headers:{"Content-Type":"text/html; charset=utf-8"}})}return u.ui={html:Object.assign(p,{unsafe:cl}),async ssr(h,m){return br(J(h,m??{}))},ssrData(h){let m=JSON.stringify(Object.fromEntries(h)).replace(/</g,"<");return new _e(`<script>window.__DATA__=${m};</script>`)},async js(h){let m=So(h),{code:f,etag:g}=await i("js",m,async()=>{let y=await sl({entryPoints:[m],bundle:!0,format:"esm",platform:"browser",jsx:"automatic",jsxImportSource:pl(m),write:!1,metafile:!0,logLevel:"silent",plugins:[{name:"weifuwu-dist-fallback",setup(k){k.onResolve({filter:/^weifuwu(\/|$)/},w=>{let b=w.resolveDir;for(;;){if(Sr(Z(b,"tsconfig.json")))return;let x=Mt(b);if(x===b)break;b=x}return{path:Eo(w.path)}})}}]}),v={};for(let k of Object.keys(y.metafile?.inputs??{})){let w=dn(k);try{let b=await vr(w);v[w]={mtimeMs:b.mtimeMs,size:b.size}}catch{v[w]={mtimeMs:-1,size:-1}}}return{code:y.outputFiles[0].text,inputs:v}});return a(c,f,g,"application/javascript")},async css(h){let m=So(h),{code:f,etag:g}=await i("css",m,async()=>{let y=Mt(m);if(il(m)==="weifuwu-layout.css"&&await Ss(y)){let w=await Bn(y);return{code:w.css,inputs:await vo(w.inputs)}}let v=await xo(m,"utf-8"),k=await vo([m,...await To(m)]);return{code:v,inputs:k}});return a(c,f,g,"text/css; charset=utf-8")}},d(c,u)});return l.__stats=s,l}import{buildSchema as ml,graphql as gl,validate as hl,parse as wl}from"graphql";import{buildSchema as fl}from"graphql";function Ao(n){let e=typeof n.typeDefs=="string"?fl(n.typeDefs):n.typeDefs,t=n.resolvers??{};for(let[r,s]of Object.entries(t)){let o=e.getType(r);if(!o||typeof o!="object"||!("getFields"in o))continue;let i=o.getFields();for(let[a,l]of Object.entries(s)){let c=i[a];c&&typeof l=="function"&&(c.resolve=l)}}return e}function yl(n){let e=n.searchParams.get("query");if(!e)return null;let t={},r=n.searchParams.get("variables");if(r)try{t=JSON.parse(r)}catch{return{error:"Invalid variables JSON"}}return{query:e,variables:t,operationName:n.searchParams.get("operationName")||void 0}}async function bl(n){try{let e=await n.json();return e.query?{query:e.query,variables:e.variables||{},operationName:e.operationName}:null}catch{return null}}var Oo=64,Po=new WeakMap,kr=new Map;function vl(n){let e=new Set;for(let t of Object.values(n))for(let r of Object.values(t))typeof r=="function"&&e.add(r);return e}function Sl(n,e){if(n.size!==e.size)return!1;for(let t of n)if(!e.has(t))return!1;return!0}function _o(n,e){if(n.size>=e){let t=n.keys().next().value;t!==void 0&&n.delete(t)}}function xl(n){if(typeof n.schema!="string")return n.schema;let e=n.resolvers;if(!e||typeof e!="object"){let i=kr.get(n.schema);if(i)return i;let a=ml(n.schema);return _o(kr,Oo),kr.set(n.schema,a),a}let t=Po.get(e);t||(t=new Map,Po.set(e,t));let r=vl(e),s=t.get(n.schema);if(s&&Sl(s.sig,r))return s.schema;let o=Ao({typeDefs:n.schema,resolvers:e});return _o(t,Oo),t.set(n.schema,{sig:r,schema:o}),o}function kl(n){let e=new Map;for(let s of n.definitions)s.kind==="FragmentDefinition"&&e.set(s.name.value,s);let t=0;function r(s,o,i){if(o>t&&(t=o),s.kind==="SelectionSet"){for(let a of s.selections)r(a,o,i);return}if(s.kind==="FragmentSpread"){let a=s.name.value;if(i.has(a))return;let l=e.get(a);if(!l)return;let c=new Set(i);c.add(a),r(l.selectionSet,o,c);return}s.selectionSet&&r(s.selectionSet,o+1,i)}for(let s of n.definitions)s.kind==="OperationDefinition"&&r(s,0,new Set);return t}var pn=class extends Error{status;constructor(e,t){super(t),this.name="GraphHttpError",this.status=e}};function Rl(n){let e=n instanceof Error?n.message:String(n),t=n instanceof pn?n.status:500;return Response.json({errors:[{message:e}]},{status:t})}async function Mo(n,e,t,r,s){let o=t.maxDepth??10;if(o>0)try{let l=wl(e.query),c=kl(l);if(c>o)return Response.json({errors:[{message:`Query depth ${c} exceeds limit ${o}`}]},{status:400});let u=hl(n,l);if(u.length>0)return Response.json({errors:u.map(d=>({message:d.message}))},{status:400})}catch(l){let c=l instanceof Error?l.message:String(l);return Response.json({errors:[{message:`Parse error: ${c}`}]},{status:400})}let i=t.timeout??3e4,a;try{a=t.context?await t.context(r,s):s}catch(l){let c=l instanceof Error?l.message:String(l);return Response.json({errors:[{message:c}]},{status:500})}try{let l=gl({schema:n,source:e.query,rootValue:t.rootValue,contextValue:a,variableValues:e.variables,operationName:e.operationName}),c;if(i>0){let d=null,p=new Promise((h,m)=>{d=setTimeout(()=>m(new Error("Query timeout")),i)});c=await Promise.race([l,p]),d&&clearTimeout(d)}else c=await l;let u=(c.errors??[]).some(d=>!d.path);return Response.json(c,{status:u?400:200})}catch(l){let c=l instanceof Error?l.message:String(l);return Response.json({errors:[{message:c}]},{status:500})}}function Tl(n){return`<!doctype html>
71
+ `,{css:i,inputs:r}}var _e=class{value;constructor(e){this.value=e}toString(){return this.value}};var zt=globalThis;zt.__wfErrState||(zt.__wfErrState={errState:new Map,totalErrors:0});var{errState:Gn,totalErrorsRef:qn}={errState:zt.__wfErrState.errState,totalErrorsRef:zt.__wfErrState},ta={get:()=>qn.totalErrors,inc:()=>{qn.totalErrors++},reset:()=>{qn.totalErrors=0}};function vt(n,e){ta.inc();let t=Gn.get(n);if(t){t.count++;return}Gn.set(n,{shown:!0,count:1}),console.error(`[vdom] renderFn \u9519\u8BEF\uFF08${n}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,e)}function Qn(n){Gn.delete(n)}var Zt=()=>{},ye=class{_subscribe;constructor(e){this._subscribe=e}subscribe(e){let t=na(e),r=!1,s=null,o={next:l=>{r||t.next(l)},error:l=>{r||(r=!0,t.error(l),s?.())},complete:()=>{r||(r=!0,t.complete(),s?.())}},i=this._subscribe(o);s=typeof i=="function"?i:i?()=>i.unsubscribe():Zt,r&&s();let a=!1;return{unsubscribe(){a||(a=!0,r||(r=!0,s?.()))}}}pipe(...e){return e.reduce((t,r)=>r(t),this)}};function na(n){return{next:n?.next??Zt,error:n?.error??Zt,complete:n?.complete??Zt}}function L(n){return new ye(n)}var Kn=()=>{},N=class{subs=new Set;closed=!1;asObservable(){return L(e=>this.closed?(e.complete(),Kn):(this.subs.add(e),()=>{this.subs.delete(e)}))}subscribe(e){return this.asObservable().subscribe(e)}next(e){if(!this.closed)for(let t of this.subs)t.next(e)}error(e){if(!this.closed){this.closed=!0;for(let t of this.subs)t.error(e);this.subs.clear()}}complete(){if(!this.closed){this.closed=!0;for(let e of this.subs)e.complete();this.subs.clear()}}},Me=class extends N{value;constructor(e){super(),this.value=e}get(){return this.value}next(e){this.value=e,super.next(e)}asObservable(){return L(e=>this.closed?(e.complete(),Kn):(e.next(this.value),this.subs.add(e),()=>{this.subs.delete(e)}))}};function Xe(n,e){return L(t=>{let r=!0,s=()=>{r&&(r=!1,t.complete())},o=e?.signal;if(o){if(o.aborted)return s(),Kn;o.addEventListener("abort",s,{once:!0})}return n.then(i=>{r&&(r=!1,t.next(i),t.complete())},i=>{r&&(r=!1,t.error(i))}),()=>{r=!1,o&&o.removeEventListener("abort",s)}})}function zn(n,e){return L(t=>{let r=n(s=>t.next(s));return e&&t.next(e()),()=>{typeof r=="function"&&r()}})}function Zn(n){return e=>new ye(t=>e.subscribe({next:r=>t.next(n(r)),error:r=>t.error(r),complete:()=>t.complete()}))}function Jn(n){return e=>new ye(t=>e.subscribe({next:r=>{n(r)&&t.next(r)},error:r=>t.error(r),complete:()=>t.complete()}))}function Ye(n,e){let t=e;return r=>new ye(s=>r.subscribe({next:o=>{t=n(t,o),s.next(t)},error:o=>s.error(o),complete:()=>s.complete()}))}function Jt(n){return e=>new ye(t=>{let r=null,s=!1,o=e.subscribe({next:i=>{r?.unsubscribe();let a=!1,l=n(i).subscribe({next:c=>t.next(c),error:c=>t.error(c),complete:()=>{a=!0,r=null}});r=a?null:l},error:i=>t.error(i),complete:()=>{s=!0,r||t.complete()}});return()=>{o.unsubscribe(),r?.unsubscribe()}})}function Xn(n,e){let t=e?.trailing??!1;return r=>new ye(s=>{let o=null,i=!1,a,l=!1,c=!1,u=h=>{c||s.next(h)},d=()=>{o=null,t&&l&&(l=!1,u(a)),i=!1},p=r.subscribe({next:h=>{i?t&&(a=h,l=!0):(i=!0,u(h),o=setTimeout(d,n))},error:h=>{c=!0,o&&clearTimeout(o),s.error(h)},complete:()=>{c=!0,o&&clearTimeout(o),s.complete()}});return()=>{c=!0,o&&clearTimeout(o),p.unsubscribe()}})}function Ts(n){let e=new Set,t=new N,r=n,s=()=>{for(let o of[...e])o();t.next(typeof r=="object"&&r!==null?{...r}:r)};return{get state(){return r},subscribe(o){return e.add(o),()=>{e.delete(o)}},set(o){typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof o=="object"&&o!==null?r={...r,...o}:r=o,s()},update(o){let i=o(r);i!==void 0&&(typeof r!="object"||r===null||i!==r)&&(r=i),s()},notify:s,changes$:t.asObservable()}}function Yn(n){let e=Ts(n),t=(()=>e.state);return t.set=r=>e.set(r),t.update=r=>e.update(r),t.subscribe=r=>e.subscribe(r),t.notify=()=>e.notify(),t.store=e,t}function ue(n,e){let t=globalThis.__wfSpy;t&&t.length<1e3&&t.push({at:Date.now()%1e5,kind:n,data:e===void 0?void 0:String(e).slice(0,80)})}function de(n,e,t,r){let s=n.getInstanceData(),o=s.get(e);if(!o){let i=t,a=!0,l=new N,c=e.subscribe({next:p=>{let h=p!==i;i=p,h&&!a&&l.next()},error:p=>{console.error("[vdom] useObservable:",p)}});a=!1;let d=(r?.throttleMs&&r.throttleMs>0?l.asObservable().pipe(Xn(r.throttleMs,{trailing:!0})):l.asObservable()).subscribe({next:()=>{ue("obs:next",String(i)+" \u2192 req:render"),n.requestRender()}});n.onUnmount(()=>{c.unsubscribe(),d.unsubscribe()}),o={get:()=>i},s.set(e,o)}return()=>o.get()}function Cs(n,e,t){if(typeof e=="function"){let s=e;return i=>{i?s(i):t?.()}}return{current:e}}function Es(n,e,t){let r=typeof e=="object"?e:void 0,s=typeof e=="boolean"?e:!1,o=r??t,i=n.nextHookIndex(),a=n.getHookState(i)??{open:s};n.setHookState(i,a);let l=o?.open!==void 0;return{get open(){return o?.open??a.open},setOpen(c){l?(o?.onOpenChange||console.warn(`[vdom] useOpen${r?.name?`(${r.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),o?.onOpenChange?.(c)):(a.open=c,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function Xt(n,e,t){let r=t?e:(()=>!0),s=t??e,o=n.getBrowser()?.window;if(!o)return()=>{};let i=l=>{if(typeof r=="string"){if(l.key!==r)return}else if(!r(l))return;s(l)};o.addEventListener("keydown",i);let a=()=>o.removeEventListener("keydown",i);return n.onUnmount(a),a}function As(n,e,t,r,s,o,i,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let c=e.innerWidth,u=e.innerHeight,d,p;switch(s){case"bottom":d=l.bottom+o,p=a?l.left+l.width/2-t/2:l.left;break;case"top":d=l.top-r-o,p=a?l.left+l.width/2-t/2:l.left;break;case"left":d=a?l.top+l.height/2-r/2:l.top,p=l.left-t-o;break;case"right":d=a?l.top+l.height/2-r/2:l.top,p=l.right+o;break}return p+t>c-i&&(p=c-t-i),p<i&&(p=i),d+r>u-i&&(d=u-r-i),d<i&&(d=i),{top:d,left:p}}function Os(n,e){let t=e.getComputedStyle(n).animationName;if(t&&t!=="none")return!0;for(let r of n.children){let s=e.getComputedStyle(r).animationName;if(s&&s!=="none")return!0}return!1}function Ps(n,e){let t=new N,r=de(n,aa(n,e,t),{top:0,left:0});return{get top(){return r().top},get left(){return r().left},refresh:()=>{t.next()}}}function aa(n,e,t){let r=n.getBrowser()?.window;return L(s=>{if(!r)return s.next({top:0,left:0}),s.complete(),()=>{};let o,i=()=>{let c=e.el();if(!c)return;let u=c.getBoundingClientRect();u.width===0&&u.height===0||(e.isOpen?.()??!0)&&s.next(e.compute(u))},a=()=>{o===void 0&&(o=r.requestAnimationFrame(()=>{o=void 0,i()}))};r.addEventListener("scroll",a,!0),r.addEventListener("resize",a),i();let l=t?.subscribe({next:()=>i()});return()=>{l?.unsubscribe(),o!==void 0&&r.cancelAnimationFrame(o),r.removeEventListener("scroll",a,!0),r.removeEventListener("resize",a)}})}function _s(n){return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function Ms(n){return _s(n?.key)}function Is(n){let e={...n??{}};return delete e.key,e}function er(n){if(!(n==null||n===!1)){if(typeof n=="string")return n.trim()||void 0;if(typeof n=="number")return String(n);if(Array.isArray(n)){let e=n.map(er).filter(t=>!!t);return e.length?e.join(" "):void 0}if(typeof n=="object"){let e=Object.entries(n).filter(([,t])=>!!t).map(([t])=>t);return e.length?e.join(" "):void 0}}}function la(n){for(let e of["class","className"]){let t=n[e];t!=null&&typeof t!="string"&&(n[e]=er(t))}return n}function J(n,e,...t){let r=Is(la(e??{}));return t.length===1?r.children=t[0]:t.length>1&&(r.children=t),{type:n,props:r,key:Ms(e)}}var $s=Symbol("vdom-fragment");function Se(n){return n.type===$s}function K(n){let e=n.children??(n.props.children===void 0?[]:n.props.children),t=r=>Array.isArray(r)?r.flatMap(t):[r];return Array.isArray(e)?e.flatMap(t):[e]}function G(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&Se(n)?K(n).reduce((e,t)=>e+G(t),0):1}var Ns="pos:";function ie(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function B(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function ca(n){return B(n)!==null}function tr(n){return`${Ns}${n}`}function Fs(n){return n.startsWith(Ns)}function St(n,e){let t=new Set;for(let r of n){let s=B(r);if(s!==null){if(t.has(s)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${s}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}t.add(s)}}}function Ds(n,e){if(n.length<2)return;let t=n.some(s=>typeof s?.type=="function"),r=n.some(s=>!ca(s)&&typeof s?.type=="function");if(t&&r){let s=n.map(o=>{let i=o;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${n.length}\uFF09\u2014\u2014\u9879: [${s.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}Yt();function I(n,e){return`${n}.${e}`}function kt(n){let e={};for(let[t,r]of Object.entries(n)){if(t==="children"||t==="key"||t==="ref"||typeof r=="function"||r===void 0)continue;let s=xt(t,r);e[t]=s!==null?s:r}return e}function js(n){return n==null||typeof n=="boolean"}function Ws(n){return!(n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)||typeof n=="object"&&typeof n.type=="string"||typeof n.type=="function"||typeof n.type=="symbol")}function rr(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function da(n,e,t,r){return[{op:"createAnchor",id:n,...r!==void 0?{detail:r}:{}},{op:"insert",id:n,parent:e,ref:t}]}function sr(n,e,t,r,s){for(let o of da(e,t,r,s))n(o)}function pe(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":js(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":Se(n)?"fragment":typeof n.type=="function"?"component":(Ws(n),"invalid")}function en(n){return typeof n=="string"||typeof n=="number"?String(n):null}function X(n){return pe(n)==="hole"}function Ie(n){return pe(n)==="text"}function xe(n){if(n==null)return"hole";let e=pe(n);return e==="invalid"?"hole":e}function Ls(n,e,t,r,s){let o=kt(n.props),i=kt(e.props);for(let[a,l]of Object.entries(i))a==="value"&&s?.formControl?r({op:"setProp",id:t,key:a,value:l}):o[a]!==l&&r({op:"setProp",id:t,key:a,value:l});for(let a of Object.keys(o))a in i||r({op:"setProp",id:t,key:a,value:void 0});for(let[a,l]of Object.entries(e.props))a==="children"||a==="key"||typeof l=="function"&&n.props[a]!==l&&r({op:"setProp",id:t,key:a,value:l,prev:n.props[a]});for(let a of Object.keys(n.props))a==="children"||a==="key"||typeof n.props[a]=="function"&&e.props[a]===void 0&&r({op:"setProp",id:t,key:a,value:void 0,prev:n.props[a]})}function et(n,e,t){return typeof n?.type=="function"?I(e,0):Array.isArray(n)?e:X(n)?I(e,0):t}function Rt(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function Y(n,e,t,r,s){if(X(n)){r({op:"remove",id:e});return}if(Ie(n)){r({op:"remove",id:e});return}if(Array.isArray(n)){let l=0;for(let c of n)Y(c,I(e,l),e,r,s),l+=G(c);return}let o=n;if(Se(o)){let l=Number(e.slice(t.length+1)),c=K(o),u=l;for(let d of c)Y(d,I(t,u),t,r,s),u+=G(d);return}if(typeof o.type=="function"){let l=o.key!==null?ie(t,o.key):e;r({op:"unmount",compId:l});let c=s?.get(l)?.lastOutput;if(c!==void 0){let u=$e(c),d=et(u,l,e),h=u!==null&&typeof u=="object"&&!Array.isArray(u)&&Se(u)?e.slice(0,e.lastIndexOf(".")):Rt(u,l,l);Y(u,d,h,r,s)}}let i=K(o),a=0;i.forEach(l=>{let c=I(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?Y(l,c,e,r,s):r({op:"remove",id:c}),a+=G(l)}),r({op:"remove",id:e})}var tt=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var nt=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var rt=(n,e,t)=>{Y(n,t.oldId,t.parent,t.emit,t.registry),t.emitNode(e,t.parent,t.index,t.ref)};var st=(n,e,t)=>{t.oldCompId&&t.emit({op:"unmount",compId:t.oldCompId});let r=t.registry?.get(t.oldCompId??"")?.lastOutput;if(r!==void 0){let s=$e(r);Y(s,et(s,t.oldCompId??"",I(t.parent,t.index)),Rt(s,t.oldCompId??"",t.parent),t.emit,t.registry)}else t.emit({op:"remove",id:t.oldId});t.emitNode(e,t.parent,t.index,t.ref)};var fe=(n,e,t)=>{let r=Array.isArray(n)?n:K(n),s=t.index;for(let o of r)Y(o,I(t.parent,s),t.parent,t.emit,t.registry),s+=G(o);t.emitNode(e,t.parent,t.index,t.ref)};var pa={text:{text:null,hole:tt,element:tt,component:tt,fragment:tt,array:tt},hole:{text:nt,hole:null,element:nt,component:nt,fragment:nt,array:nt},element:{text:rt,hole:rt,element:null,component:rt,fragment:rt,array:rt},component:{text:st,hole:st,element:st,component:null,fragment:st,array:st},fragment:{text:fe,hole:fe,element:fe,component:fe,fragment:null,array:fe},array:{text:fe,hole:fe,element:fe,component:fe,fragment:fe,array:null}};function or(n,e){return pa[n]?.[e]??null}var fa=0;function ar(n,e,t,r,s){let o=[],i=new Map,a={n:0},l=new Map,c=new N;c.subscribe({next:()=>{for(let m of[...o].reverse())try{m()}catch(f){console.error("[vdom] v2 onUnmount:",f)}}});let u=Object.create(t);u.onUnmount=m=>{o.push(m)},u.ui=cr({requestRender:()=>{ue("req:render",r.slice(-18)),s?.()},onUnmount:m=>{o.push(m)},getBrowser:()=>t.browser??null,nextHookIndex:()=>a.n++,getHookState:m=>l.get(m),setHookState:(m,f)=>{l.set(m,f)},getInstanceData:()=>i,scheduleAfterRender:m=>{let f=t.afterRender;f?f(m):setTimeout(m,0)},getSharedContext:()=>t??null});let d=n(e,u),p;typeof d=="function"?p=d:p=(m=>{let f=n(m,u);return typeof f=="function"?null:f});let h=a.n;return{factory:n,renderFn:p,lastOutput:void 0,hookSeq:a,renderBase:h,instData:i,destroy$:c,disposed:!1,epoch:fa}}function lr(n,e){let t=n.renderFn.shouldRender;return t&&n.lastProps!==void 0&&n.lastOutput!==void 0&&!t(n.lastProps,e)?$e(n.lastOutput):(n.lastProps=e,n.hookSeq.n=n.renderBase,n.renderFn(e))}function ae(n,e){let t=e.get(n);if(!(!t||t.disposed)){t.disposed=!0;try{t.destroy$.next()}catch(r){console.error("[vdom] v2 destroy$:",r)}t.instData.clear(),e.delete(n)}}function ma(n,e,t,r){let s=e.get(n),o=[];if(s){let a=s.lastOutput!==void 0?$e(s.lastOutput):void 0;if(a!==void 0){let l={get:c=>{let u=e.get(c);return u?{lastOutput:u.lastOutput}:void 0}};Y(a,et(a,n,t),Rt(a,n,r),c=>{o.push(c)},l)}}let i=[];for(let a of o)a.op==="unmount"&&e.has(a.compId)&&i.push(a.compId);ae(n,e);for(let a of i)e.has(a)&&ae(a,e);return o.unshift({op:"unmount",compId:n}),o}function Bs(n,e,t,r){let s=n?.lastOutput;if(s===void 0)return[e+".0"];if(typeof s=="object"&&s!==null&&"kind"in s){let o=s;if(o.kind==="hole")return[e+".0"];if(o.kind==="array")return(o.items??[]).map((a,l)=>`${e}.${l}`);let i=o.v;return i?typeof i.type=="function"?[e+".0"]:[I(t,r)]:[e+".0"]}return[e+".0"]}function ga(n,e,t,r){if(X(n))return I(e,t);if(Ie(n))return I(e,t);let s=n;if(typeof s.type!="function")return I(e,t);let o=B(s);if(o===null)return I(e,t);let i=ie(e,o);return Bs(r?.get(i),i,e,t)[0]}function Us(n,e,t,r,s,o,i,a){let l=[],c=[],u=0,d=null;for(let p=0;p<e.length;p++){let h=G(e[p]);l.push(n[p]===void 0?z(e[p],t,u,d,r,o,s,i):Ue(n[p],e[p],t,u,d,r,s,o,i)),d=I(t,u+h-1),u+=h}for(let p=n.length-1;p>=e.length;p--)c.push(W(Le(n[p],t,ha(n,p),s)));return a?ee([...c.reverse(),...l]):(c.reverse(),ee([...l,...c]))}function Ue(n,e,t,r,s,o,i,a,l){let c=I(t,r),u=pe(n),d=pe(e);if(u==="text"&&d==="text")return String(n)===String(e)?W([]):W([{op:"setText",id:c,value:en(e)}]);if(u==="hole"&&d==="hole")return W([]);if(u==="hole")return ee([W([{op:"remove",id:c}]),z(e,t,r,s,o,a,i,l)]);if(d==="hole")return ir(n,e,t,r,s,o,a,u==="component"?Ct(n,t,r):void 0,i,l);if((u==="fragment"||u==="array")&&(d==="fragment"||d==="array")){let f=Tt(Array.isArray(n)?n:K(n)),g=Tt(Array.isArray(e)?e:K(e));return tn(g)||tn(f)?Hs(f,g,t,o,i,a,l):Us(f,g,t,o,i,a,l,!0)}if(u===d&&typeof n!="string"&&typeof n!="number"){let f=n,g=e;if(typeof f.type=="function"&&typeof g.type=="function"){if(f.type===g.type)return ya(f,g,t,r,s,o,i,a,l);let y=Ct(f,t,r),v=ma(y,i,I(t,r),t);return ee([W(v),z(g,t,r,s,o,a,i,l)])}if(typeof f.type=="string"&&typeof g.type=="string"){if(f.type===g.type){let y=[];Ls(f,g,c,b=>y.push(b),{formControl:f.type==="input"||f.type==="textarea"});let v=Tt(K(f)),k=Tt(K(g));if(va(v,k,c),tn(k)||tn(v))return ee([W(y),Hs(v,k,c,o,i,a,l)]);let w=Us(v,k,c,o,i,a,l,!1);return ee([W(y),w])}return ee([W(Le(f,t,r,i)),z(g,t,r,s,o,a,i,l)])}}let p=xe(n),h=xe(e),m=pe(n)==="component"?Ct(n,t,r):void 0;return ir(n,e,t,r,s,o,a,m,i,l)}function ha(n,e){let t=0;for(let r=0;r<e;r++)t+=G(n[r]);return t}function wa(n,e){let t=0;for(let r=0;r<e;r++)t+=G(n[r]);return t}function ya(n,e,t,r,s,o,i,a,l){let c=Ct(e,t,r),u=i.get(c);if(!u||u.factory!==e.type)return u&&ae(c,i),z(e,t,r,s,o,a,i,l);let d;try{d=lr(u,e.props)}catch(m){return vt(c,m),W([])}let p=u.lastOutput!==void 0?$e(u.lastOutput):void 0;u.lastOutput=nn(d);let h=ur(d,c,t,r);return p===void 0?z(d,h.parent,h.index,s,o,a,i,l):ba(p,d,h.parent,h.index,s,o,i,a,l)}function ba(n,e,t,r,s,o,i,a,l){if(n===e)return W([]);let c=Array.isArray(n),u=Array.isArray(e);if(c||u){let d=c?n:[n],p=u?e:[e],h=0,m=null,f=[];for(let g=0;g<p.length;g++){let y=G(p[g]);f.push(d[g]===void 0?z(p[g],t,h,m,o,a,i,l):Ue(d[g],p[g],t,h,m,o,i,a,l)),m=I(t,h+y-1),h+=y}for(let g=p.length;g<d.length;g++)f.push(W(Le(d[g],t,wa(d,g),i)));return ee(f)}return Ue(n,e,t,r,s,o,i,a,l)}function Tt(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&Se(t)?e.push(...Tt(K(t))):e.push(t);return e}function va(n,e,t){if(globalThis.__WF_NO_A_CHECK__)return;let r=d=>!X(d)&&!Ie(d)&&!Array.isArray(d),s=n.filter(r),o=e.filter(r),i=d=>typeof d?.type=="function"&&B(d)===null,a=(d,p)=>p>=d.length||X(d[p]),l=d=>a(n,d)||i(n[d]),c=d=>a(e,d)||i(e[d]);(e.some((d,p)=>i(d)&&!l(p))||n.some((d,p)=>i(d)&&!c(p)))&&Ds(o,`children\uFF08${t}\u2014\u2014\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${s.length}\u2192${o.length}\uFF09`)}function Ct(n,e,t){return n.key!==null?ie(e,n.key):I(e,t)}function Et(n,e,t,r,s,o){let i=xe(n),a=xe(e);return or(i,a)?ir(n,e,"root",0,null,t,s,i==="component"?Ct(n,"root",0):void 0,r,o).pipe(Vs):Ue(n,e,"root",0,null,t,r,s,o).pipe(Vs)}var Vs=n=>ee([n,W([{op:"done"}])]);function Sa(n,e,t,r,s,o,i,a,l){return n===void 0?z(e,t,r,s,o,a,i,l):Ue(n,e,t,r,s,o,i,a,l)}function Hs(n,e,t,r,s,o,i){let a=[],l=(w,b)=>B(w)??tr(b),c=new Map;n.forEach((w,b)=>{let x=l(w,b);c.has(x)||c.set(x,b)});let u=new Set(e.map((w,b)=>l(w,b))),d=new Map;for(let w=0;w<n.length;w++){let b=n[w];if(X(b)){a.push({op:"remove",id:I(t,w)});continue}if(Ie(b)){a.push({op:"remove",id:I(t,w)});continue}if(Array.isArray(b))continue;let x=B(b);if(x!==null){let R=(d.get(x)??0)+1;if(d.set(x,R),R===1)continue;a.push(...Le(b,t,w,s));continue}}for(let[w,b]of c)if(!u.has(w)&&(a.push(...Le(n[b],t,b,s)),!Fs(w))){let x=ie(t,w);s.has(x)&&ae(x,s)}let p=n.map(w=>B(w)).filter(w=>w!==null&&u.has(w)),h=e.map(w=>B(w)).filter(w=>w!==null&&c.has(w)),f=!e.some((w,b)=>{let x=B(w);if(x===null||typeof w.type!="function")return!1;let R=c.get(x);return R===void 0||R===b?!1:s?.get(ie(t,x))===void 0});{let w=0;for(let b of h){let x=p.indexOf(b,w);if(x===-1){f=!1;break}w=x+1}}if(!f){n.forEach((x,R)=>{if(!(X(x)||Ie(x))&&!Array.isArray(x)){if(B(x)!==null&&typeof x.type=="function"){a.push(...Le(x,t,R,s,{keepSegments:!0}));return}if(B(x)!==null){a.push({op:"remove",id:I(t,R)});return}a.push(...Le(x,t,R,s))}});let w=[],b=null;for(let x=0;x<e.length;x++){let R=e[x],A=B(R),F=A!==null?ie(t,A):I(t,x);A!==null&&typeof R.type=="function"?w.push(z(R,t,x,b,r,o,s,i)):w.push(z(R,t,x,b,r,o,s,i)),b=I(t,x)}return ee([W(a),...w])}let g=[];e.forEach((w,b)=>{let x=B(w);if(x===null)return;let R=c.get(x);R!==void 0&&R!==b&&g.push({oldIdx:R,newIdx:b})});let y=g.every(w=>w.newIdx<w.oldIdx);g.sort((w,b)=>y?w.newIdx-b.newIdx:b.newIdx-w.newIdx);for(let w of g){let b=e[w.newIdx],x=B(b);if(x!==null&&typeof b.type=="function"){let R=ie(t,x),A=Bs(s?.get(R),R,t,w.oldIdx);if(A.length===1&&!A[0].startsWith(R+"."))a.push({op:"move",id:A[0],parent:t,ref:null,newId:I(t,w.newIdx),noMove:!0});else{let ce=w.newIdx>0?e[w.newIdx-1]:null,ne=ce===null?null:ga(ce,t,w.newIdx-1,s);for(let re of A)a.push({op:"move",id:re,parent:t,ref:ne,newId:re,noMove:!1}),ne=re}}else a.push({op:"move",id:I(t,w.oldIdx),parent:t,ref:null,newId:I(t,w.newIdx),noMove:!0})}let v=[],k=null;for(let w=0;w<e.length;w++){let b=e[w],x=B(b),R=I(t,w);if(x!==null){let A=c.get(x);A===void 0?v.push(z(b,t,w,k,r,o,s,i)):typeof b.type=="function"?v.push(Sa(n[A],b,t,w,k,r,s,o,i)):v.push(Ue(n[A],b,t,w,k,r,s,o,i))}else{let A=c.get(tr(w)),F=A===void 0?void 0:n[A];F!==void 0&&!X(F)&&!Ie(F)&&!Array.isArray(F)?v.push(Ue(F,b,t,w,k,r,s,o,i)):v.push(z(b,t,w,k,r,o,s,i))}k=R}return ee([W(a),...v])}function Le(n,e,t,r,s){let o=[],i=I(e,t),a=r&&r.size>0?{get:c=>{let u=r.get(c);return u?{lastOutput:u.lastOutput}:void 0}}:void 0;if(Y(n,i,e,c=>o.push(c),a),r&&!s?.keepSegments)for(let c of o)c.op==="unmount"&&r.has(c.compId)&&ae(c.compId,r);else if(r&&s?.keepSegments){for(let c of o)if(c.op==="unmount"){let u=r.get(c.compId);u&&(u.lastOutput=void 0)}}return s?.keepSegments?o.filter(c=>c.op!=="unmount"):o}function tn(n){return n.some(e=>B(e)!==null)}function ir(n,e,t,r,s,o,i,a,l,c){let u=or(xe(n),xe(e));if(!u)throw new Error(`[vdom] v2 \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${xe(n)} \u2192 ${xe(e)}`);let d=[],p=null,h=[],m=l&&l.size>0?{get:y=>{let v=l.get(y);return v?{lastOutput:v.lastOutput}:void 0}}:i,f={emit:y=>{let v=y;v.op==="unmount"&&l?.has(v.compId)&&h.push(v.compId),d.push(v)},emitNode:(y,v,k,w)=>{p={v:y,p:v,i:k,r:w}},oldId:I(t,r),newId:I(t,r),parent:t,index:r,ref:s,oldCompId:a,registry:m};u(n,e,f);let g=p?L(y=>{let v=p;return z(v.v,v.p,v.i,v.r,o,i,l,c).subscribe({next:w=>y.next(w),error:w=>y.error(w),complete:()=>y.complete()})}):W([]);return ee([L(y=>{for(let v of h)l?.has(v)&&ae(v,l);return y.complete(),()=>{}}),W(d),g])}var rn=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,t){this.doc=e,this.container=t,this.dispatchBound=this.dispatch.bind(this)}set(e,t,r){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${t}) \u88AB\u5FFD\u7565`);return}if(typeof r!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${t} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof r}`);return}let s=this.table.get(e);s||(s=new Map,this.table.set(e,s)),s.set(t,r),this.ensureRoot(t)}get(e,t){return this.table.get(e)?.get(t)}removeEvent(e,t){let r=this.table.get(e);r&&(r.delete(t),r.size===0&&this.table.delete(e))}remove(e){for(let t of[...this.table.keys()])(t===e||t.startsWith(e+"."))&&this.table.delete(t)}removeOne(e){this.table.delete(e)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let r=e.target;if(r&&!this.container.contains(r))return}if(e.type==="contextmenu"&&window.__dbgEvt){let r=e.target,s=[...this.table.entries()].map(([o,i])=>o+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",r?.getAttribute("data-wf-id"),"ALL:",s.slice(0,400))}let t=e.target;for(t&&t.nodeType===3&&(t=t.parentElement);t;){if(!t.hasAttribute?.("data-wf-id")){let s=t.closest?.("[data-wf-id]");if(s&&s!==t){t=s;continue}}let r=t.getAttribute?.("data-wf-id");if(r){let s=this.table.get(r)?.get(e.type);if(s){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{s(e)}catch(o){console.error("[vdom] \u4E8B\u4EF6 handler:",o)}if(e.cancelBubble)return}}t=t.parentElement}}clear(){this.table.clear()}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},ot=/^on[A-Z]/;function At(n){return ot.test(n)?n.slice(2).toLowerCase():null}var sn=class{refs=new Map;phase="active";set(e,t,r){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(r&&r!==t&&typeof r=="function")try{r(null)}catch(s){console.error("[vdom] ref prev:",s)}this.refs.set(e,t)}mount(e,t){let r=this.refs.get(e);if(typeof r=="function")try{r(t)}catch(s){console.error("[vdom] ref mount:",s)}}unmount(e){for(let[t,r]of[...this.refs])if(t===e||t.startsWith(e+".")){if(typeof r=="function")try{r(null)}catch(s){console.error("[vdom] ref unmount:",s)}this.refs.delete(t)}}unmountOne(e){let t=this.refs.get(e);if(typeof t=="function")try{t(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(e)}remap(e,t){for(let[r,s]of[...this.refs])(r===e||r.startsWith(e+"."))&&(this.refs.delete(r),this.refs.set(t+r.slice(e.length),s))}clear(){this.refs.clear()}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};function xa(n,e){switch(e.kind){case"begin":return"consuming";case"next":return e.matched?"consuming":"failed";case"end":return n==="consuming"?e.remaining>0?"failed":"inactive":n;case"reset":return"inactive"}}var on=class{queue=null;phase="inactive";events$;failed$;events=new N;constructor(){this.events$=this.events.asObservable(),this.events.asObservable().pipe(Ye(xa,"inactive")).subscribe({next:e=>{this.phase=e}}),this.failed$=this.events.asObservable().pipe(Jn(e=>e.kind==="next"&&!e.matched||e.kind==="end"&&e.remaining>0),Zn(()=>{}))}begin(e){let t=[],r=s=>{t.push(s);for(let o of s.childNodes)r(o)};for(let s of e.childNodes)r(s);this.queue=t,this.events.next({kind:"begin"})}end(){if(this.phase!=="consuming")return;let e=this.queue?.length??0;this.queue=null,this.events.next({kind:"end",remaining:e})}reset(){this.queue=null,this.events.next({kind:"reset"})}next(e,t,r){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let s=this.queue;if(!s)return null;for(;s.length>0;){let o=s.shift();if(e==="element"?o.nodeType===1&&o.tagName.toLowerCase()===t:e==="text"?o.nodeType===3:o.nodeType===8){if(e==="text"&&r!==void 0){let a=o,l=a.textContent??"";if(l!==r&&l.startsWith(r)){let c=a.splitText(r.length);s.unshift(c)}}return this.events.next({kind:"next",matched:!0}),o}}return this.events.next({kind:"next",matched:!1}),null}};Yt();var ka=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Ra(n,e,t){if(t==null||t===!1){e.startsWith("--")&&n.style.removeProperty(e),n.style[e]="";return}if(e.startsWith("--")){n.style.setProperty(e,String(t));return}typeof t=="number"&&!ka.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function dr(n,e){if(e==null||e===!1){n.style.cssText="";return}if(typeof e=="string"){n.setAttribute("style",e);return}if(e&&typeof e=="object"){n.style.cssText="";for(let[t,r]of Object.entries(e))Ra(n,t,r)}}var an=null,qs=new WeakSet;function Ta(n){if(an||(an=new WeakSet),!qs.has(n)){qs.add(n);let e=an;n.addEventListener("compositionstart",t=>{let r=t.target;r instanceof HTMLElement&&e.add(r)},!0),n.addEventListener("compositionend",t=>{let r=t.target;r instanceof HTMLElement&&e.delete(r)},!0)}return an}function Gs(n,e){return Ta(n).has(e)}var Ca=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function Qs(n){return Ca.has(n)}function Ks(n,e,t){if(t===void 0){if(Ea.has(e)){n[e]=!1;return}return}if(e==="value"&&n.nodeType===1){let r=n;if(n.ownerDocument&&Gs(n.ownerDocument,r))return;let s=r.value;if(s===t||String(s)===String(t))return}n[e]=t}var Ea=new Set(["disabled","checked","selected","multiple","readOnly","required","indeterminate","muted","paused","open","autofocus","draggable","hidden"]);function Ot(n,e){for(let[t,r]of Object.entries(e))t==="style"?dr(n,r):nr(n,t,r)}function zs(n,e,t,r,s,o){if(r!=="ref")if(typeof s=="function"||s===void 0&&typeof o=="function"){if(ot.test(r)){let i=At(r);i&&n.set(e,i,s)}return}else if(ot.test(r)){let i=At(r);i&&n.set(e,i,s)}else r==="style"?dr(t,s):Qs(r)?Ks(t,r,s):nr(t,r,s)}var Aa="http://www.w3.org/2000/svg",Oa=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function Zs(n,e){return Oa.has(e)?n.createElementNS(Aa,e):n.createElement(e)}function Pa(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)Ot(t,e.attrs);else if(n.absorb.queue&&!t){let s=n.absorb.next("element",e.tag);if(s)Ot(s,e.attrs),n.nodes.set(e.id,s);else{let o=Zs(n.doc,e.tag);Ot(o,e.attrs),n.nodes.set(e.id,o)}}else{let s=Zs(n.doc,e.tag);Ot(s,e.attrs),t&&(n.refRegistry.unmountOne(e.id),n.eventRegistry.removeOne(e.id),t.replaceWith(s)),n.nodes.set(e.id,s)}let r=n.nodes.get(e.id);r&&r.nodeType===1&&r.setAttribute("data-wf-id",e.id)}function _a(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===3)t.textContent!==e.value&&(t.textContent=e.value);else if(n.absorb.queue&&!t){let r=n.absorb.next("text",void 0,e.value);if(r)r.textContent!==e.value&&(r.textContent=e.value),n.nodes.set(e.id,r);else{let s=n.doc.createTextNode(e.value);n.nodes.set(e.id,s)}}else{let r=n.doc.createTextNode(e.value);t&&t.replaceWith(r),n.nodes.set(e.id,r)}}function Ma(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===8){let r=e.detail?`wf-hole: ${e.detail}`:"wf-hole";t.textContent!==r&&(t.textContent=r)}else if(n.absorb.queue&&!t){let r=n.absorb.next("comment");if(r)n.nodes.set(e.id,r);else{let s=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n.nodes.set(e.id,s)}}else{let r=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t&&t.replaceWith(r),n.nodes.set(e.id,r)}}function Ia(n,e){let t=n.nodes.get(e.id);if(!t||t.isConnected)return;let r=n.parentOf(e);if(r){if(r.nodeType===3){let s=r.parentElement;if(!s)return;let o=r.nextSibling&&r.nextSibling.parentNode===s?r.nextSibling:null;s.insertBefore(t,o),t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id);return}if(r.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u951A\u540E`);let s=r.parentElement;s&&s.insertBefore(t,r.nextSibling),t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id);return}if(e.ref){let s=n.nodes.get(e.ref)??null;if(!s){let o=n.childIds.size>0&&n.childIds.has(e.ref)?n.collectDesc(e.ref):null;if(o){let i="",a=-1;for(let l of o){let c=n.seq.get(l)??0;c>a&&(a=c,i=l)}i&&(s=n.nodes.get(i)??null)}else{let i=e.ref+".";for(let[a,l]of n.nodes)a.startsWith(i)&&(s=l)}}s&&s.parentNode===r?r.insertBefore(t,s.nextSibling):s?r.appendChild(t):r.insertBefore(t,r.firstChild)}else r.insertBefore(t,r.firstChild);t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id)}}function $a(n,e){let t=n.nodes.get(e.id);if(t){if(!e.noMove){let r=n.parentOf(e);if(!r)return;let s=e.ref?n.nodes.get(e.ref)??null:null;s?r.insertBefore(t,s.nextSibling):e.first?r.insertBefore(t,r.firstChild):r.appendChild(t)}n.remapSubtree(e.id,e.newId)}}function Na(n,e){n.refRegistry.unmountOne(e.id),n.eventRegistry.removeOne(e.id),n.nodes.get(e.id)?.remove();let t=n.childIds.size>0?n.collectDesc(e.id):null,r=t??[];if(!t){let s=e.id+".";for(let o of[...n.nodes.keys()])o.startsWith(s)&&r.push(o)}for(let s of r)n.refRegistry.unmountOne(s),n.eventRegistry.removeOne(s),n.nodes.delete(s),n.unregisterChild(s);n.nodes.delete(e.id),n.unregisterChild(e.id)}function Fa(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function Da(n,e){let t=n.nodes.get(e.id);if(!t||t.nodeType!==1)return;let r=t;if(e.key==="ref"){let s=n.refRegistry.refs.get(e.id);if(e.value===void 0){n.refRegistry.set(e.id,void 0,s),n.refRegistry.refs.delete(e.id);return}n.refRegistry.set(e.id,e.value,s),r.isConnected&&n.refRegistry.mount(e.id,r);return}if(ot.test(e.key)){let s=At(e.key);s&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,s):n.eventRegistry.set(e.id,s,e.value));return}zs(n.eventRegistry,e.id,r,e.key,e.value,e.prev)}function ja(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===1&&typeof e.fn=="function"&&(n.refRegistry.set(e.id,e.fn),n.refRegistry.mount(e.id,t))}function Wa(n,e){n.clearNodeRefs(e.id)}function La(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function Ua(n,e){n.registry&&pr(e.compId,n.registry)}function Va(n,e){if(e.full&&n.absorb.end(),e.full&&n.touched.size>0)for(let[t,r]of[...n.nodes])n.touched.has(t)||(n.refRegistry.unmountOne(t),n.eventRegistry.removeOne(t),r.remove(),n.nodes.delete(t),n.unregisterChild(t));n.touched.clear()}function Js(n,e){switch(e.op){case"create":Pa(n,e);break;case"createText":_a(n,e);break;case"createAnchor":Ma(n,e);break;case"insert":Ia(n,e);break;case"move":$a(n,e);break;case"remove":Na(n,e);break;case"setText":Fa(n,e);break;case"setProp":Da(n,e);break;case"ref":ja(n,e);break;case"unref":Wa(n,e);break;case"mount":La(n,e);break;case"unmount":Ua(n,e);break;case"done":Va(n,e);break;case"close":break}}var Ve=class{nodes=new Map;touched=new Set;childIds=new Map;byChild=new Map;seq=new Map;seqCounter=0;registerChild(e,t){this.byChild.set(t,e),this.seq.set(t,++this.seqCounter);let r=this.childIds.get(e);r||(r=new Set,this.childIds.set(e,r)),r.add(t)}unregisterChild(e){let t=this.byChild.get(e);if(t===void 0)return;this.byChild.delete(e),this.seq.delete(e);let r=this.childIds.get(t);r&&(r.delete(e),r.size===0&&this.childIds.delete(t))}collectDesc(e){let t=[],r=[e];for(;r.length>0;){let s=r.pop();t.push(s);let o=this.childIds.get(s);if(o)for(let i of o)r.push(i)}return t}reset(){this.nodes.clear(),this.touched.clear(),this.childIds.clear(),this.byChild.clear(),this.seq.clear(),this.seqCounter=0,this.eventRegistry.clear(),this.refRegistry.clear()}eventRegistry;refRegistry=new sn;absorb=new on;container;doc;registry;devVerify=null;constructor(e,t,r){this.container=e,this.doc=t,this.registry=r??null,this.eventRegistry=new rn(t,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let t=this.registry.get(e);if(t){for(let r of[...t.onUnmounts].reverse())try{r()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,t){let r=(o,i)=>{let a=o.get(i);a!==void 0&&(o.delete(i),o.set(t+i.slice(e.length),a))};for(let o of[...this.nodes.keys()])if(o===e||o.startsWith(e+".")){r(this.nodes,o);let i=this.nodes.get(t+o.slice(e.length));i&&i.nodeType===1&&i.setAttribute("data-wf-id",t+o.slice(e.length))}for(let[o,i]of[...this.byChild]){let a=o===e||o.startsWith(e+"."),l=i===e||i.startsWith(e+".");if(!a&&!l)continue;let c=a?t+o.slice(e.length):o,u=l?t+i.slice(e.length):i;this.byChild.delete(o),this.byChild.set(c,u);let d=this.childIds.get(i);d&&(d.delete(o),d.size===0&&this.childIds.delete(i));let p=this.childIds.get(u);p||(p=new Set,this.childIds.set(u,p)),p.add(c)}let s=this.byChild.get(e);s!==void 0&&!this.byChild.has(t)&&(this.unregisterChild(e),this.registerChild(s,t)),this.refRegistry.remap(e,t);for(let o of[...this.eventRegistry.table.keys()])if(o===e||o.startsWith(e+".")){let i=this.eventRegistry.table.get(o);this.eventRegistry.table.delete(o),this.eventRegistry.table.set(t+o.slice(e.length),i)}if(this.registry){for(let o of[...this.registry.keys()])if(o===e||o.startsWith(e+".")){let i=this.registry.get(o);this.registry.delete(o),this.registry.set(t+o.slice(e.length),i)}}}parentOf(e){if(e.parent==="root")return this.container;let t=this.nodes.get(e.parent);if(t&&t.isConnected)return t;let r=e.parent.split(".");for(let s=r.length-1;s>0;s--){let o=r.slice(0,s).join(".");if(o==="root")return this.container;let i=this.nodes.get(o);if(i&&i.isConnected)return i}return null}apply(e){Js(this,e),this.devVerify&&this.devVerify(e,this)}};var ln="__wf_portal";function fr(n){return`${ln}-${n}`}function Ha(n,e){switch(e.kind){case"open":return"open";case"exit":return n==="open"?"exit":n;case"closed":return"closed";case"disposed":return"closed"}}function Ba(n){return typeof n=="function"?n():n}function Xs(n){return n?typeof n=="function"?n():n:null}function cn(n,e){let t={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0},segments:new Map},r=new N,s=r.asObservable();r.asObservable().pipe(Ye(Ha,"closed")).subscribe({next:T=>{t.phase=T}});let o=T=>{r.next(T)},i=n.getBrowser()?.window,a=n.getBrowser()?.document,l=()=>{if(!a)return null;if(t.container)return t.container;let T=a.getElementById(ln);T||(T=a.createElement("div"),T.id=ln,a.body.appendChild(T));let P=e.key??"popup",M=a.getElementById(fr(P));return M?t.container=M:(t.container=a.createElement("div"),t.container.id=fr(P),T.appendChild(t.container)),t.container},c=0,u=!1,d=()=>{if(t.disposed||!t.open)return;if(e.position&&t.panel){let _=e.position();if(_&&typeof _.x=="number"&&typeof _.y=="number"){t.pos={top:_.y,left:_.x,width:_.width},u=!0,f();return}}let T=Xs(e.anchor);if(!T||!t.panel){c++<10&&queueMicrotask(d);return}if(!i)return;let P=t.panel,M=P.offsetWidth||P.getBoundingClientRect().width,U=P.offsetHeight||P.getBoundingClientRect().height;if((M===0||U===0)&&c++<10){typeof i.requestAnimationFrame=="function"?i.requestAnimationFrame(d):queueMicrotask(d);return}let Q=typeof e.placement=="function"?e.placement():e.placement??"bottom",C=As(T,i,M,U,Q,e.gap??8,e.margin??8,e.center??!0);if(!C){c++<10&&queueMicrotask(d);return}if(c=0,t.pos=C,t.applier){let _=g(t.tree);_&&y(_)}},p=T=>{if(t.panel=T,T&&t.open&&!u&&e.positioning!=="none"&&(i&&typeof i.requestAnimationFrame=="function"?i.requestAnimationFrame(d):queueMicrotask(d)),T&&e.presence){let P=M=>{t.phase==="exit"&&k()};T.addEventListener("animationend",P),n.onUnmount(()=>T.removeEventListener("animationend",P))}},h=null,m=T=>{h=T,T&&u&&f()},f=()=>{let T=e.mask?h:t.panel;T&&(T.style.top=`${t.pos.top}px`,T.style.left=`${t.pos.left}px`,t.pos.width!==void 0&&(T.style.width=`${t.pos.width}px`))},g=T=>{if(!T)return null;let P=T;e.mask&&(P=J("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:O=>{e.maskClosable!==!1&&O.target===O.currentTarget&&w()}},e.maskCentered?{...P,props:{...P.props??{}}}:J("div",{class:"wf-popup-mask-inner",ref:m,style:e.position?{position:"fixed",top:`${t.pos.top}px`,left:`${t.pos.left}px`,...t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}}:void 0},P)));let M=P.props??{},U=e.positioning==="none"||String(M.class??"").includes("mask")?M.class??"":["wf-popup",M.class].filter(Boolean).join(" "),Q=!(e.mask&&e.position),C=e.positioning==="none"?{...M.style??{},position:"fixed"}:{...M.style??{},position:"fixed",...Q?{top:`${t.pos.top}px`,left:`${t.pos.left}px`}:{},...Q&&t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...P,props:{...M,class:U,style:C,ref:p}}},y=T=>{let P=++t.version,M=t.tree;t.tree=T,t.chain=t.chain.then(async()=>{if(t.disposed||P!==t.version)return;let U=t.applier;if(!U)return;let Q=U.registry;if(!Q)return;let C=n.getSharedContext()??{},_=await new Promise((O,te)=>{let j=[],se=()=>n.requestRender?.();(M?Et(M,T,C,t.segments,Q,se):it(T,C,Q,t.segments,se)).subscribe({next:Qo=>j.push(Qo),error:te,complete:()=>O(j)})});for(let O of _){if(t.disposed||P!==t.version)return;U.apply(O)}for(let O of _)O.op==="unmount"&&ae(O.compId,t.segments)}).catch(U=>{console.error("[popup] render error:",U)})},v=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},k=()=>{t.disposed||(t.open=!1,o({kind:"closed"}),A(),v(),o({kind:"disposed"}),e.onClose?.())},w=()=>{!t.open||t.disposed||(e.presence?(o({kind:"exit"}),t.panel&&i&&!Os(t.panel,i)&&k(),t.panel||k()):k())},b={value:""},x={value:null},R={value:!1},A=()=>{R.value&&(a?.body&&(a.body.style.overflow=b.value),b.value="",x.value&&(x.value.focus?.(),x.value=null),R.value=!1)},F=()=>{n.scheduleAfterRender(()=>{let T=P=>{let M=t.panel;M?(M.querySelector?.("input, button, [tabindex], select, textarea")??M).focus?.():P<10&&t.open&&queueMicrotask(()=>T(P+1))};T(0)})},ce=()=>{R.value=!0,e.lockScroll&&a?.body&&(b.value=a.body.style.overflow,a.body.style.overflow="hidden"),e.trapFocus&&i&&(x.value=i.document.activeElement,F())},ne=null;e.trapFocus&&i&&(ne=T=>{if(T.key!=="Tab"||!t.open||!t.panel)return;let P=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(C=>!C.disabled&&C.offsetParent!==null);if(P.length===0)return;let M=P[0],U=P[P.length-1],Q=i?.document.activeElement;T.shiftKey&&(Q===M||Q===t.panel||!t.panel.contains(Q))?(T.preventDefault(),U.focus()):!T.shiftKey&&(Q===U||!t.panel.contains(Q))&&(T.preventDefault(),M.focus())},i.addEventListener("keydown",ne));let re=T=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let P=T.target,M=Xs(e.anchor);P&&M?.contains(P)||P&&t.panel?.contains(P)||w()},ut=T=>{t.open&&(e.closeOnEscape??!0)&&T.key==="Escape"&&w()};i&&(i.addEventListener("mousedown",re),i.addEventListener("keydown",ut)),n.onUnmount(()=>{i&&(i.removeEventListener("mousedown",re),i.removeEventListener("keydown",ut),ne&&i.removeEventListener("keydown",ne)),k()});let Nt=()=>{if(t.open||t.disposed)return;t.open=!0,o({kind:"open"});let T=l();if(!T)return;e.trapFocus||e.lockScroll?ce():e.autoFocus&&F();let P=ke();t.applier=new Ve(T,a,P),t.segments=new Map;let M=Ba(e.content);M!=null?y(g(M)):k()},Ft={close:w,update(T){if(t.disposed||!t.open)return;if(T==null){w();return}let P=!1;if(e.position){let M=e.position();M&&typeof M.x=="number"&&typeof M.y=="number"&&(t.pos={top:M.y,left:M.x,width:M.width},P=!0)}y(g(T)),P&&f()},refresh(){if(!(t.disposed||!t.open||!t.tree)&&e.position){let T=e.position();T&&typeof T.x=="number"&&typeof T.y=="number"&&(t.pos={top:T.y,left:T.x,width:T.width},f())}},get open(){return t.open},events$:s};return Nt(),Ft}function Ys(n,e,t){let r=n.nextHookIndex(),s=n.getHookState(r)??{value:t};n.setHookState(r,s);let o=e.value!==void 0;return{get value(){return e.value??s.value},controlled:e,setValue(i){o?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(s.value=i,n.requestRender())}}}function eo(n,e){let t=new N,r=de(n,qa(n,e,t),{y:0,x:0});return{get y(){return r().y},get x(){return r().x},refresh:()=>{t.next()}}}function qa(n,e,t){let r=n.getBrowser()?.window,s=n.getBrowser()?.document??null;return L(o=>{if(!r)return o.next({y:0,x:0}),o.complete(),()=>{};let i,a=null,l=null,c=0,u=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let f=e;return typeof f.getScroller=="function"?f.getScroller()??null:f.root?typeof f.root=="string"?s?s.querySelector(f.root)??r:r:f.root:r}return r},d=f=>f?f===r?{y:r.scrollY||0,x:r.scrollX||0}:{y:f.scrollTop,x:f.scrollLeft}:{y:0,x:0},p=()=>{o.next(d(l))},h=()=>{if(a)return;if(l=u(),!l){c++<10&&n.scheduleAfterRender(h);return}let f=()=>{i===void 0&&(i=r.requestAnimationFrame(()=>{i=void 0,p()}))};l.addEventListener("scroll",f,{passive:!0}),a=f,p()};h();let m=t?.subscribe({next:()=>{h(),p()}});return()=>{m?.unsubscribe(),i!==void 0&&r.cancelAnimationFrame(i),a&&l&&l.removeEventListener("scroll",a),a=null}})}function to(n,e){let t=n.nextHookIndex(),r=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,r);let o=n.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,c=typeof i?.threshold=="function"?i.threshold():i?.threshold,u=typeof i?.root=="function"?i.root():i?.root??null,d=p=>{if(!o||!p||r.io)return;let h=new o(m=>{let f=m[0];f&&f.isIntersecting!==r.isIn&&(r.isIn=f.isIntersecting,i?.onChange?.(f,f.isIntersecting),n.requestRender())},{root:u??void 0,rootMargin:l,threshold:c});h.observe(p),r.io=h,r.ready=!0,n.onUnmount(()=>r.io?.disconnect())};if(o&&!r.io){let p=typeof a=="function"?a():a??null;p?d(p):a!==void 0&&r.retries++<10&&n.scheduleAfterRender(()=>d(typeof a=="function"?a():a??null))}return{get isIn(){return r.isIn},get ready(){return r.ready},ref:p=>{p?d(p):r.io?.disconnect()},observe:p=>d(p),disconnect:()=>{r.io?.disconnect(),r.io=null}}}function no(n,e,t){let r=n.nextHookIndex(),s=n.getHookState(r)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(r,s);let o=e.value!==void 0;return{controlled:e,get value(){return e.value??s.keyword},setValue(i){o?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(s.keyword=i,n.requestRender())},get keyword(){return s.keyword},setKeyword(i){s.keyword=i,s.composing||this.setValue(i)},get selectedLabel(){return s.selectedLabel},setSelectedLabel(i){s.selectedLabel=i},get isComposing(){return s.composing},onCompositionStart(){s.composing=!0},onCompositionEnd(){s.composing=!1}}}function so(n,e){let t={draggable:!0,onDragStart:r=>{e.data!==void 0&&r.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(r,e.data)},onDragEnd:r=>e.onDragEnd?.(r)};return{draggableProps:t,dragProps:t,dropProps:{onDragEnter:r=>e.onDragEnter?.(r),onDragOver:r=>{r.preventDefault(),e.onDragOver?.(r)},onDragLeave:r=>e.onDragLeave?.(r),onDrop:r=>{r.preventDefault();let s;try{s=r.dataTransfer?.getData("text/plain")?JSON.parse(r.dataTransfer.getData("text/plain")):void 0}catch{s=void 0}e.onDrop?.(r,s)}}}}var ro=new WeakMap,Ga=new Map;function Qa(n,e){let t=n.getBrowser()?.window,r=t?ro.get(t)??ro.set(t,new Map).get(t):Ga,s=r.get(e);return s||(s=zn(o=>{let i=n.getBrowser()?.window,l=(i?.matchMedia?.bind(i)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0))?.(e);if(!l)return;let c=()=>o(l.matches);return l.addEventListener("change",c),()=>l.removeEventListener("change",c)},()=>{let o=n.getBrowser()?.window,i=o?.matchMedia?.bind(o)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0);return i?i(e).matches:!1}),r.set(e,s)),s}function Pt(n,e){return de(n,Qa(n,e),!1)}function oo(n,e){let t=Object.entries(e).sort((r,s)=>r[1]-s[1]);return()=>{let r=t[0]?.[0]??"default";for(let[s,o]of t)Pt(n,`(min-width: ${o}px)`)()&&(r=s);return r}}var Ka=0,mr=()=>`m${Date.now().toString(36)}${(Ka++).toString(36)}`;function za(){let n="";return(e,t)=>{let r=e.trim();if(!r)return null;if(r.startsWith("event:"))return n=r.slice(6).trim(),null;let s=t??n,o=r.startsWith("data:")?r.slice(5).trim():r;if(!o)return null;let i;try{i=JSON.parse(o)}catch{return null}if(!s)return i.toolCalls?{toolCalls:i.toolCalls}:i.text!==void 0?{content:String(i.text)}:i.content!==void 0?{content:i.content}:null;switch(s){case"wf:message_start":return null;case"wf:token":return{content:i.text!==void 0?String(i.text):i.content};case"wf:step":return{step:i};case"wf:usage":return{usage:i};case"wf:tool_call":return{toolCalls:[{id:i.id,name:i.name,args:i.args,status:"running",call:i}]};case"wf:tool_progress":return{toolProgress:i};case"wf:tool_result":return{toolResult:i};case"wf:approval_request":return{approval:i};case"wf:error":return{error:i};case"wf:done":{let a=i.usage?{usage:i.usage}:{};return{done:!0,...i.content?{content:i.content,doneContent:!0}:{},...a}}default:return null}}}function io(n,e){let t=n.nextHookIndex(),r=n.getHookState(t)??{messages:[],status:"idle",subs:new Set,changes:new N,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(n.setHookState(t,r),r.messages.length===0){let a=[];e.system&&a.push({id:mr(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),r.messages=a}let s=()=>{for(let a of[...r.subs])a();r.changes.next([...r.messages])},o=e.parseChunk??za(),i={get state(){return r.messages},get messages(){return r.messages},changes$:r.changes.asObservable(),get status(){return r.status},get input(){return r.input??""},setInput(a){r.input=a},get streaming(){return r.status==="streaming"},get error(){return r.error??null},get usage(){return r.usage??null},get step(){return r.step??null},subscribe(a){return r.subs.add(a),()=>{r.subs.delete(a)}},set(){},update(){},notify:s,async send(a=r.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",c={id:mr(),role:"user",content:a};r.messages=[...r.messages,c];let u={id:mr(),role:"assistant",content:"",status:"streaming"};r.messages=[...r.messages,u],r.status="streaming",s();let d=new AbortController;r.controller=d;try{let p=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:r.messages.map(g=>({role:g.role,content:g.content}))}),signal:d.signal});if(!p.ok||!p.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${p.status}`);let h=p.body.getReader(),m=new TextDecoder,f="";for(;;){let{value:g,done:y}=await h.read();if(y)break;f+=m.decode(g,{stream:!0});let v=f.split(`
72
+ `);f=v.pop()??"";let k;for(let w of v){if(!w.trim())continue;if(w.trim().startsWith("event:")){k=w.trim().slice(6).trim();continue}let b=o(w,k);if(w.trim().startsWith("data:")&&(k=void 0),!!b){if(b.content&&(u.content=b.doneContent?u.content||b.content:u.content+b.content,s()),b.toolCalls?.length&&(u.toolCalls=[...u.toolCalls??[],...b.toolCalls],s()),b.toolProgress){let x=u.toolCalls?.find(R=>R.id===b.toolProgress.toolCallId);x&&(x.progress=b.toolProgress,s())}if(b.toolResult){let x=u.toolCalls?.find(R=>R.id===b.toolResult.id);x&&(x.result=b.toolResult.output,x.status=b.toolResult.ok===!1?"error":"ok",s())}if(b.approval){u.approval=b.approval;let x=u.toolCalls?.find(R=>R.id===b.approval.toolCallId);x&&(x.approval=b.approval),s()}b.usage&&(r.usage=b.usage,s()),b.step!==void 0&&(r.step=b.step,s()),b.error&&(r.error=b.error,u.status="error",s()),b.done&&(r.step=null,s())}}}u.status=void 0,r.status="idle"}catch(p){p.name!=="AbortError"?(u.status="error",r.status="error"):(u.status=void 0,r.status="idle")}finally{r.controller=null,s()}},stop(){r.controller?.abort()},retry(){let a=[...r.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){r.messages=[],r.status="idle",s()},async approve(a,l,c){let u=!1;for(let d of r.messages){for(let p of d.toolCalls??[])if(!p.approved){p.approved=a!=="rejected",l&&(p.feedback=l),a==="modified"&&c&&(p.args=c),u=!0;break}if(u)break}s()}};return i}function gr(n){return Pt(n,"(prefers-reduced-motion: reduce)")()}function ao(n,e,t){let r=n.getBrowser()?.window,s=gr(n),o=t?.duration??400;if(o<=0)return{value:e,reset:()=>{}};let i=t?.ease==="linear"?k=>k:k=>1-Math.pow(1-k,3),a=n.nextHookIndex(),l=n.getHookState(a);if(l)return l.reset(e),l;let c=s?e:0,u,d=e,p=0,h=o+200,m,f={get value(){return u!==void 0&&r&&r.performance.now()-p>h?d:c},set value(k){c=k},reset:()=>{}},g=()=>{n.requestRender()},y=k=>{if(d=k,s){f.value=k,g();return}if(k===f.value)return;if(!r){f.value=k;return}u!==void 0&&r.cancelAnimationFrame(u);let w=f.value,b=r.performance.now();p=b,v();let x=R=>{let A=Math.min(1,(R-b)/o);f.value=Math.round(w+(k-w)*i(A)),A<1?u=r.requestAnimationFrame(x):u=void 0,g()};u=r.requestAnimationFrame(x)},v=()=>{r&&(m!==void 0&&clearTimeout(m),m=setTimeout(()=>{m=void 0,u!==void 0&&(r&&r.cancelAnimationFrame(u),u=void 0,f.value=d,g())},h))};return f.reset=k=>{k===d&&u!==void 0||y(k)},n.onUnmount(()=>{u!==void 0&&r&&(r.cancelAnimationFrame(u),u=void 0)}),n.setHookState(a,f),l=f,l.reset(e),l}function lo(n,e){let t=n.getBrowser()?.window,r=0,s=0,o=!1,i=0,a=d=>{o&&e.onMove(d,{x:d.clientX-r,y:d.clientY-s})},l=d=>{o&&d.pointerId===i&&(o=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",c)),e.onEnd?.(d))},c=d=>{!o||d.pointerId!==i||(o=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",c)),e.onEnd?.(d))},u=d=>{o||(d.preventDefault(),o=!0,i=d.pointerId,r=d.clientX,s=d.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",c)),e.onStart?.(d))};return n.onUnmount(()=>{o&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",c),o=!1)}),{onPointerDown:u}}function co(n){let e=de(n,Za(n),{height:0,offsetTop:0,keyboardOpen:!1});return{get height(){return e().height},get offsetTop(){return e().offsetTop},get keyboardOpen(){return e().keyboardOpen}}}function Za(n){let e=n.getBrowser()?.window;return L(t=>{let r=()=>{let i=e?.visualViewport,a=i?.height??e?.innerHeight??0;return{height:a,offsetTop:i?.offsetTop??0,keyboardOpen:a<(e?.innerHeight??0)*.9}};if(!e)return t.next({height:0,offsetTop:0,keyboardOpen:!1}),t.complete(),()=>{};let s=()=>t.next(r()),o=e.visualViewport;return o?.addEventListener?(o.addEventListener("resize",s),o.addEventListener("scroll",s),s(),()=>{o.removeEventListener("resize",s),o.removeEventListener("scroll",s)}):(e.addEventListener("resize",s),s(),()=>e.removeEventListener("resize",s))})}function hr(n,e){let t=n.nextHookIndex(),r=n.getHookState(t);return r===void 0&&(r={v:e},n.setHookState(t,r)),{get:()=>r.v,set:s=>{r.v=typeof s=="function"?s(r.v):s,n.requestRender()}}}function wr(n,e){let t=null,r=e,s={onClick:l=>{r.maskClosable!==!1&&l.target===l.currentTarget&&i()}},o={role:e.role??"dialog","aria-modal":!0},i=()=>r.onOpenChange?.(!1),a=(l,c)=>{c&&(r=c);let u=!!r.open;u&&!t?t=cn(n,{key:"overlay",presence:!!r.presence,trapFocus:r.trapFocus!==!1,lockScroll:r.lockScroll!==!1,positioning:"none",closeOnOutside:!1,closeOnEscape:!1,content:l,onClose:()=>{t=null}}):!u&&t?(t.update(l()),t.close(),t=null):t&&t.update(l())};return Xt(n,l=>{l.key==="Escape"&&t?.open&&r.closeOnEscape!==!1&&i()}),n.onUnmount?.(()=>{t&&t.close()}),{maskProps:s,panelProps:o,close:i,sync:a}}function yr(n,e){let t=e,r=()=>t.id??(t.name?`wf-${t.name}`:void 0),s=()=>r()??"wf-field";return{get hasWrap(){return!!(t.label||t.error||t.hint)},get stateClass(){return t.error?` ${t.wrapErrClass??"wf-field--err"}`:""},get inputId(){return r()},inputProps(){let o={},i=r();i&&(o.id=i),t.error&&(o["aria-invalid"]=!0);let a=[];return t.error&&a.push(`${s()}-err`),t.hint&&!t.error&&a.push(`${s()}-hint`),a.length&&(o["aria-describedby"]=a.join(" ")),t.required&&(o["aria-required"]=!0),o},renderLabel(){if(t.label==null&&!t.required)return null;let o=[];return t.label!=null&&o.push(t.label),t.required&&o.push(J("span",{class:t.reqClass??"wf-field-req"},t.reqChar??"*")),J("label",{class:t.labelClass,...r()?{for:r()}:{}},o)},renderError(){return t.error?J("div",{class:t.errClass,id:`${s()}-err`},t.error):null},renderHint(){return t.hint&&!t.error?J("div",{class:t.hintClass,id:`${s()}-hint`},t.hint):null}}}var uo=new Map,po=new Set,Ja=new N;var un=new Map;function cr(n){return{useObservable(e,t,r){return de(n,e,t,r)},useAsyncData(e,t){let r=uo.get(t);r||(r={trigger:new Me(void 0),state$:new Me(un.get(t)??null),fetcher:null,started:un.has(t),seedHit:un.has(t),sub:null},un.delete(t),uo.set(t,r)),r.fetcher=e;let s=()=>{if(r.sub||r.seedHit)return;r.started=!0;let a=r.trigger.asObservable().pipe(Jt(()=>{let l=r.fetcher;if(!l)return Xe(Promise.resolve(null));let c=l();return po.add(c),c.finally(()=>po.delete(c)).catch(()=>{}),Xe(c)}));r.sub=a.subscribe({next:l=>{r.state$.next(l)},error:l=>{console.error("[vdom] useAsyncData:",l),Ja.next({key:t,error:l}),r.state$.next(null)}})};return s(),[de(n,r.state$.asObservable(),null),()=>{r.seedHit&&(r.seedHit=!1),r.state$.next(null),r.sub?r.trigger.next():s()}]},useSession(e){let[t]=this.useAsyncData(async()=>{let r={},s=e?.token?.();s&&(r.Authorization=`Bearer ${s}`);let o=await fetch(e?.path??"/api/auth/me",{headers:r});if(!o.ok)throw new Error(`session \u83B7\u53D6\u5931\u8D25 HTTP ${o.status}`);return await o.json()},"wf:session");return t},useExternal(e){let t=n.getInstanceData(),r=t.get(e);if(!r){let s=e.subscribe(()=>n.requestRender());n.onUnmount(s),r={unsub:s},t.set(e,r)}return()=>e.state},signal:e=>{let t=Yn(e),r=t.subscribe(()=>n.requestRender());return n.onUnmount(r),t},hold:e=>n.onUnmount(e),useStableRef:(e,t)=>Cs(n,e,t),useOpen:(e,t)=>Es(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>Xt(n,e,t),openPopup:e=>cn(n,e),usePopupPosition:e=>Ps(n,e),useControlled:(e,t)=>Ys(n,e,t),useScrollPosition:e=>eo(n,e),useInView:e=>to(n,e),useControlledInput:(e,t)=>no(n,e,t),useDragDrop:e=>so(n,e),useMedia:e=>Pt(n,e),useBreakpoint:e=>oo(n,e),useChat:e=>io(n,e),useTween:(e,t)=>ao(n,e,t),useDrag:e=>lo(n,e),useVisualViewport:()=>co(n),useReducedMotion:()=>gr(n),useSignal:e=>hr(n,e),useOverlay:e=>wr(n,e),useField:e=>yr(n,e)}}function nn(n){return X(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function $e(n){return n.kind==="hole"?null:n.kind==="array"?n.items:n.v}function ke(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},delete:e=>{n.delete(e)},keys:()=>[...n.keys()],asyncTimeout:15e3}}function pr(n,e){let t=[...e.keys()].filter(r=>r===n||r.startsWith(n+".")).reverse();for(let r of t){let s=e.get(r);if(s){for(let o of s.onUnmounts.reverse())try{o()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(r)}}}function ur(n,e,t,r){return typeof n?.type=="function"||Array.isArray(n)||pe(n)==="hole"?{parent:e,index:0}:{parent:t,index:r}}function z(n,e,t,r,s,o,i,a){let l=[];return _t(n,e,t,r,s,o,i,a,l),W(l)}function _t(n,e,t,r,s,o,i,a,l){let c=I(e,t);switch(pe(n)){case"text":{let u=en(n);l.push({op:"createText",id:c,value:u},{op:"insert",id:c,parent:e,ref:r});break}case"hole":{sr(u=>l.push(u),c,e,r);break}case"array":{let u=n;St(u,`\u6570\u7EC4\u5C55\u5F00\uFF08${e}\uFF09`);let d=t,p=r;for(let h of u){_t(h,e,d,p,s,o,i,a,l);let m=G(h);p=I(e,d+m-1),d+=m}break}case"fragment":{let u=K(n);St(u,`Fragment \u5C55\u5F00\uFF08${e}\uFF09`);let d=t,p=r;for(let h of u){_t(h,e,d,p,s,o,i,a,l);let m=G(h);p=I(e,d+m-1),d+=m}break}case"element":{let u=n;l.push({op:"create",id:c,tag:u.type,attrs:kt(u.props)});for(let[f,g]of Object.entries(u.props))f==="children"||f==="key"||f==="ref"||typeof g=="function"&&l.push({op:"setProp",id:c,key:f,value:g});l.push({op:"insert",id:c,parent:e,ref:r});let d=u.props.ref;typeof d=="function"&&l.push({op:"ref",id:c,fn:d});let p=K(u);St(p,`\u5143\u7D20 children\uFF08${c}\uFF09`);let h=null,m=0;for(let f of p){_t(f,c,m,h,s,o,i,a,l);let g=G(f);h=I(c,m+g-1),m+=g}l.push({op:"close",id:c});break}case"component":{let u=n,d=u.key!==null?ie(e,u.key):c,p=i??new Map,h=p.get(d);h&&h.factory!==u.type&&(ae(d,p),h=void 0),h?ue("seg:reuse",d):(h=ar(u.type,u.props,s,d,a),p.set(d,h),ue("seg:create",d));let m;try{m=lr(h,u.props)}catch(g){vt(d,g),m=null}m!==null&&Qn(d),h.lastOutput=nn(m);let f=ur(m,d,e,t);if(X(m)){let g=I(d,0);l.push({op:"createAnchor",id:g},{op:"insert",id:g,parent:e,ref:r},{op:"mount",compId:d});break}_t(m,f.parent,f.index,r,s,o,p,a,l),l.push({op:"mount",compId:d});break}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${rr(n)}`),sr(u=>l.push(u),c,e,r,rr(n));break}}}function it(n,e,t,r,s){let o=e??{},i=t??ke();return z(n,"root",0,null,o,i,r,s).pipe(Xa(W([{op:"done",full:!0}])))}function W(n){return L(e=>{for(let t of n)e.next(t);return e.complete(),()=>{}})}function ee(n){return L(e=>{let t=0,r=null,s=!1,o=!1,i=()=>{if(!(s||o)){for(o=!0;!s;){if(t>=n.length){e.complete();break}let a=n[t++],l=!1,c=!0;if(r=a.subscribe({next:u=>e.next(u),error:u=>{s||(s=!0,e.error(u))},complete:()=>{l||s||(l=!0,!c&&i())}}),c=!1,!l)break}o=!1}};return i(),()=>{s=!0,r?.unsubscribe()}})}function Xa(n){return e=>ee([e,n])}function bo(n){return new Promise((e,t)=>{let r=[];n.subscribe({next:s=>r.push(s),error:t,complete:()=>e(r)})})}async function br(n,e,t){let r=t??ke(),s=await bo(it(n,e,r)),{commandToHtml:o}=await Promise.resolve().then(()=>(yo(),wo)),a=new ReadableStream({start(c){for(let u of s)c.enqueue(u);c.close()}}).pipeThrough(o()).getReader(),l="";for(;;){let{value:c,done:u}=await a.read();if(u)break;l+=c}return l}function ll(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function To(n){return n==null||n===!1||n===!0?"":Array.isArray(n)?n.map(To).join(""):n instanceof _e?n.value:ll(String(n))}function cl(n){return new _e(n)}var ul=32;async function So(n){let e={};for(let t of n)try{let r=await vr(t);e[t]={mtimeMs:r.mtimeMs,size:r.size}}catch{e[t]={mtimeMs:-1,size:-1}}return e}async function Co(n,e=new Set){if(e.has(n))return[];e.add(n);let t;try{t=await ko(n,"utf-8")}catch{return[]}let r=Mt(n),s=[];for(let o of t.matchAll(/@import\s+['"](\.[^'"]+\.css)['"]/g)){let i=dn(r,o[1]);s.push(i,...await Co(i,e))}return s}function Eo(){let n=Mt(Ro(import.meta.url));for(;;){if(Sr(Z(n,"package.json")))return n;let e=Mt(n);if(e===n)throw new Error("[ui] \u5305\u6839\u5B9A\u4F4D\u5931\u8D25\uFF08\u5411\u4E0A\u672A\u627E\u5230 package.json\uFF09");n=e}}var dl={weifuwu:"level6/index.js","weifuwu/client/vdom":"level6/client/vdom/index.js","weifuwu/client/vdom/jsx-runtime":"level6/client/vdom/jsx-runtime.js","weifuwu/client/vdom/testing":"level6/client/vdom/testing.js","weifuwu/client/components":"level6/client/components/index.js","weifuwu/client/layout":"level6/client/layout/index.js","weifuwu/dev":"level6/dev/index.js","weifuwu/shared/router":"level0/router/index.js"};function Ao(n){let e=Z(Eo(),"dist"),t=dl[n];if(t)return Z(e,t);if(n.startsWith("weifuwu/server/"))return Z(e,"level6","server",n.slice(15),"index.js");if(n.startsWith("weifuwu/")){let r=n.slice(8);for(let s of[Z(e,r),`${Z(e,r)}.js`,`${Z(e,r)}.css`,Z(e,r,"index.js"),Z(e,"level6",r,"index.js"),Z(e,"level5",r,"index.js")])if(Sr(s))return s;return Z(e,r,"index.js")}return n}function pl(n){let e=Eo();return n.startsWith(Z(e,"src")+al)?Z(e,"src","level6","client","vdom"):Z(e,"dist","level6","client","vdom")}function xo(n){if(n.startsWith(".")||n.startsWith("/"))return dn(n);if(n==="weifuwu"||n.startsWith("weifuwu/"))return Ao(n);try{return Ro(import.meta.resolve(n))}catch{return dn(n)}}function xr(n={}){let e=n.cache!==!1,t=new Map,r=new Map,s={builds:0,hits:0,dedups:0};async function o(c){for(let[u,d]of Object.entries(c))try{let p=await vr(u);if(p.mtimeMs!==d.mtimeMs||p.size!==d.size)return!1}catch{return!1}return!0}async function i(c,u,d){let p=`${c}:${u}`;if(e){let m=t.get(p);if(m&&await o(m.inputs))return s.hits++,m;let f=r.get(p);if(f)return s.dedups++,f}s.builds++;let h=(async()=>{let{code:m,inputs:f}=await d(),g=`"${ol("sha1").update(m).digest("hex").slice(0,20)}"`,y={code:m,etag:g,inputs:f};if(e){if(t.size>=ul){let v=t.keys().next().value;v!==void 0&&t.delete(v)}t.set(p,y)}return y})();return e&&(r.set(p,h),h.catch(()=>{}).finally(()=>r.delete(p))),h}function a(c,u,d,p){let h={"Content-Type":p,ETag:d,"Cache-Control":"no-cache"};return c.headers.get("if-none-match")===d?new Response(null,{status:304,headers:h}):new Response(u,{headers:h})}let l=(async(c,u,d)=>{function p(h,...m){let f="";for(let g=0;g<h.length;g++)f+=h[g],g<m.length&&(f+=To(m[g]));return new Response(f,{headers:{"Content-Type":"text/html; charset=utf-8"}})}return u.ui={html:Object.assign(p,{unsafe:cl}),async ssr(h,m){return br(J(h,m??{}))},ssrData(h){let m=JSON.stringify(Object.fromEntries(h)).replace(/</g,"<");return new _e(`<script>window.__DATA__=${m};</script>`)},async js(h){let m=xo(h),{code:f,etag:g}=await i("js",m,async()=>{let y=await sl({entryPoints:[m],bundle:!0,format:"esm",platform:"browser",jsx:"automatic",jsxImportSource:pl(m),write:!1,metafile:!0,logLevel:"silent",plugins:[{name:"weifuwu-dist-fallback",setup(k){k.onResolve({filter:/^weifuwu(\/|$)/},w=>{let b=w.resolveDir;for(;;){if(Sr(Z(b,"tsconfig.json")))return;let x=Mt(b);if(x===b)break;b=x}return{path:Ao(w.path)}})}}]}),v={};for(let k of Object.keys(y.metafile?.inputs??{})){let w=dn(k);try{let b=await vr(w);v[w]={mtimeMs:b.mtimeMs,size:b.size}}catch{v[w]={mtimeMs:-1,size:-1}}}return{code:y.outputFiles[0].text,inputs:v}});return a(c,f,g,"application/javascript")},async css(h){let m=xo(h),{code:f,etag:g}=await i("css",m,async()=>{let y=Mt(m);if(il(m)==="weifuwu-layout.css"&&await xs(y)){let w=await Bn(y);return{code:w.css,inputs:await So(w.inputs)}}let v=await ko(m,"utf-8"),k=await So([m,...await Co(m)]);return{code:v,inputs:k}});return a(c,f,g,"text/css; charset=utf-8")}},d(c,u)});return l.__stats=s,l}import{buildSchema as ml,graphql as gl,validate as hl,parse as wl}from"graphql";import{buildSchema as fl}from"graphql";function Oo(n){let e=typeof n.typeDefs=="string"?fl(n.typeDefs):n.typeDefs,t=n.resolvers??{};for(let[r,s]of Object.entries(t)){let o=e.getType(r);if(!o||typeof o!="object"||!("getFields"in o))continue;let i=o.getFields();for(let[a,l]of Object.entries(s)){let c=i[a];c&&typeof l=="function"&&(c.resolve=l)}}return e}function yl(n){let e=n.searchParams.get("query");if(!e)return null;let t={},r=n.searchParams.get("variables");if(r)try{t=JSON.parse(r)}catch{return{error:"Invalid variables JSON"}}return{query:e,variables:t,operationName:n.searchParams.get("operationName")||void 0}}async function bl(n){try{let e=await n.json();return e.query?{query:e.query,variables:e.variables||{},operationName:e.operationName}:null}catch{return null}}var Po=64,_o=new WeakMap,kr=new Map;function vl(n){let e=new Set;for(let t of Object.values(n))for(let r of Object.values(t))typeof r=="function"&&e.add(r);return e}function Sl(n,e){if(n.size!==e.size)return!1;for(let t of n)if(!e.has(t))return!1;return!0}function Mo(n,e){if(n.size>=e){let t=n.keys().next().value;t!==void 0&&n.delete(t)}}function xl(n){if(typeof n.schema!="string")return n.schema;let e=n.resolvers;if(!e||typeof e!="object"){let i=kr.get(n.schema);if(i)return i;let a=ml(n.schema);return Mo(kr,Po),kr.set(n.schema,a),a}let t=_o.get(e);t||(t=new Map,_o.set(e,t));let r=vl(e),s=t.get(n.schema);if(s&&Sl(s.sig,r))return s.schema;let o=Oo({typeDefs:n.schema,resolvers:e});return Mo(t,Po),t.set(n.schema,{sig:r,schema:o}),o}function kl(n){let e=new Map;for(let s of n.definitions)s.kind==="FragmentDefinition"&&e.set(s.name.value,s);let t=0;function r(s,o,i){if(o>t&&(t=o),s.kind==="SelectionSet"){for(let a of s.selections)r(a,o,i);return}if(s.kind==="FragmentSpread"){let a=s.name.value;if(i.has(a))return;let l=e.get(a);if(!l)return;let c=new Set(i);c.add(a),r(l.selectionSet,o,c);return}s.selectionSet&&r(s.selectionSet,o+1,i)}for(let s of n.definitions)s.kind==="OperationDefinition"&&r(s,0,new Set);return t}var pn=class extends Error{status;constructor(e,t){super(t),this.name="GraphHttpError",this.status=e}};function Rl(n){let e=n instanceof Error?n.message:String(n),t=n instanceof pn?n.status:500;return Response.json({errors:[{message:e}]},{status:t})}async function Io(n,e,t,r,s){let o=t.maxDepth??10;if(o>0)try{let l=wl(e.query),c=kl(l);if(c>o)return Response.json({errors:[{message:`Query depth ${c} exceeds limit ${o}`}]},{status:400});let u=hl(n,l);if(u.length>0)return Response.json({errors:u.map(d=>({message:d.message}))},{status:400})}catch(l){let c=l instanceof Error?l.message:String(l);return Response.json({errors:[{message:`Parse error: ${c}`}]},{status:400})}let i=t.timeout??3e4,a;try{a=t.context?await t.context(r,s):s}catch(l){let c=l instanceof Error?l.message:String(l);return Response.json({errors:[{message:c}]},{status:500})}try{let l=gl({schema:n,source:e.query,rootValue:t.rootValue,contextValue:a,variableValues:e.variables,operationName:e.operationName}),c;if(i>0){let d=null,p=new Promise((h,m)=>{d=setTimeout(()=>m(new Error("Query timeout")),i)});c=await Promise.race([l,p]),d&&clearTimeout(d)}else c=await l;let u=(c.errors??[]).some(d=>!d.path);return Response.json(c,{status:u?400:200})}catch(l){let c=l instanceof Error?l.message:String(l);return Response.json({errors:[{message:c}]},{status:500})}}function Tl(n){return`<!doctype html>
73
73
  <html lang="en">
74
74
  <head>
75
75
  <meta charset="UTF-8" />
@@ -114,13 +114,13 @@ ${s.join(`
114
114
  <body>
115
115
  <div id="graphiql">Loading\u2026</div>
116
116
  </body>
117
- </html>`}function Cl(n){let e=new Ee;async function t(s,o){let i=await n(s,o),a;try{a=xl(i)}catch(l){throw new pn(500,`schema \u6784\u5EFA\u5931\u8D25: ${l instanceof Error?l.message:String(l)}`)}return{options:i,schema:a}}async function r(s,o,i){let a;try{a=await t(s,o)}catch(l){return Rl(l)}return i(a)}return e.get("/",async(s,o)=>r(s,o,async({options:i,schema:a})=>{let l=new URL(s.url);if(i.graphiql&&!l.searchParams.has("query"))return new Response(Tl(l.pathname),{status:200,headers:{"Content-Type":"text/html"}});let c=yl(l);return c===null?Response.json({errors:[{message:"Missing query"}]},{status:400}):"error"in c?Response.json({errors:[{message:c.error}]},{status:400}):Mo(a,c,i,s,o)})),e.post("/",async(s,o)=>r(s,o,async({options:i,schema:a})=>{if(!(s.headers.get("content-type")??"").toLowerCase().includes("application/json"))return Response.json({errors:[{message:"Unsupported Media Type: expected application/json"}]},{status:415});let c=await bl(s);return c?Mo(a,c,i,s,o):Response.json({errors:[{message:"Missing query"}]},{status:400})})),e}function Rr(n,e){let t=typeof n=="string"?n:"/graphql",r=typeof n=="string"?e:n;if(!r)throw new Error("graphql(): \u7F3A\u5C11 handler");let s=new Ee;s.mount(t,Cl(r));let o=s.handler(),i=t.length>1&&t.endsWith("/")?t.slice(0,-1):t;return(a,l,c)=>{let u;try{u=new URL(a.url).pathname}catch{u=a.url.split("?")[0]}return(i==="/"?u==="/":u===i||u.startsWith(i+"/"))?o(a,l):c(a,l)}}var Tr=class n{buf=new Uint8Array(0);off=0;static MAX_BUFFER=1<<20;push(e){this.append(e);let t=[];for(;;){let r=this.off,s=this.tryRead();if(!s){this.off=r;break}t.push(s)}return t.length>0&&this.compact(),t}append(e){if(e.length===0)return;let t=this.buf.length-this.off;if(t===0){this.buf=e,this.off=0;return}let r=t+e.length;if(r>n.MAX_BUFFER)throw new $(`postgres: \u4E0D\u5B8C\u6574\u6D88\u606F\u8D85\u8FC7\u7F13\u51B2\u4E0A\u9650\uFF08${n.MAX_BUFFER} \u5B57\u8282\uFF09\u2014\u2014DoS \u9632\u5FA1`);if(this.buf.length>=r){this.buf.set(e,t),this.off=0;return}let s=new Uint8Array(Math.max(r,this.buf.length*2));s.set(this.buf.subarray(this.off),0),s.set(e,t),this.buf=s,this.off=0}compact(){this.off===this.buf.length?(this.buf=new Uint8Array(0),this.off=0):this.off>0&&(this.buf=this.buf.subarray(this.off),this.off=0)}tryRead(){if(this.buf.length-this.off<5)return null;let e=(this.buf[this.off+1]<<24|this.buf[this.off+2]<<16|this.buf[this.off+3]<<8|this.buf[this.off+4])>>>0;if(e===0||e>n.MAX_BUFFER||this.buf.length-this.off<1+e)return null;let t=String.fromCharCode(this.buf[this.off]),r=this.buf.subarray(this.off+5,this.off+1+e);return this.off+=1+e,{type:t,payload:r}}};var xb=new TextDecoder,kb=new TextEncoder;import{AsyncLocalStorage as Fl}from"node:async_hooks";import{randomUUID as Al}from"node:crypto";var $t=class{opts;constructor(e){this.opts=e}tables=new Map;enums=new Map;async close(){}executeQuery(e){let t;switch(e.kind){case"select":t=this.execSelect(e);break;case"insert":t=this.execInsert(e);break;case"update":t=this.execUpdate(e);break;case"delete":t=this.execDelete(e);break;case"ddl":return this.executeDdl(e)}return this.jsonDecodeRows(e.table,t)}jsonDecodeRows(e,t){if(!e||!this.tables.has(e))return t;let r=this.tables.get(e),s=r.columnTypes,o=new Set(Object.entries(s).filter(([,a])=>/^(jsonb?|vector(?:\\(\d+\\))?)$/i.test(a)).map(([a])=>a)),i=a=>{if(typeof a!="string")return!1;try{let l=JSON.parse(a);return typeof l=="object"&&l!==null}catch{return!1}};for(let a of t)if(!(typeof a!="object"||a===null))for(let l of Object.keys(a)){let c=l.includes(".")?l.slice(l.lastIndexOf(".")+1):l;if((r.state==="declared"?o.has(c):i(a[l]))&&typeof a[l]=="string")try{a[l]=JSON.parse(a[l])}catch{}}return t}tableCols(e){let t=this.table(e),r=new Set(t.columns);for(let s of t.rows)for(let o of Object.keys(s))r.add(lt(o));return r}assertKnownCols(e,t,r){if(this.opts?.validateCols===!1||r)return;let s=[{alias:t.alias??t.table,cols:this.tableCols(t.table)}];for(let a of t.joins??[])s.push({alias:a.alias??a.table,cols:this.tableCols(a.table)});let o=new Set((t.aggregate??[]).map(a=>a.as)),i=[];t.where&&i.push(...Ar(t.where));for(let a of t.joins??[])It(a.on)||i.push(...Ar(a.on));for(let a of t.cols??[])typeof a=="string"&&i.push(a);for(let a of t.orderBy??[])o.has(a.col)||i.push(a.col);if(t.groupBy)for(let a of t.groupBy)o.has(a)||i.push(a);i.length&&Pl(e,i,s,t.table,o)}execSelect(e,t){if(e.table&&(this.assertTableExists("SELECT",e.table),this.assertKnownCols("SELECT",e,t)),e.count){let c=this.table(e.table),u=e.where?c.rows.filter(p=>Re(p,e.where,e.alias)).length:c.rows.length,d=e.cols?.[0]??"count";return at([{[d]:u}],1)}let r=this.table(e.table).rows,s=e.alias??e.table;for(let c of e.joins??[]){let u=this.table(c.table).rows,d=c.alias??c.table,p=c.type==="left",h=[];for(let m of r){let f=!1;for(let g of u){let y={};for(let[v,k]of Object.entries(m))y[v.includes(".")?v:`${s}.${v}`]=k;for(let[v,k]of Object.entries(g))y[`${d}.${v}`]=k;if(It(c.on))throw new $("raw JOIN","memory-sql: raw JOIN ON \u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09");Re(y,c.on,void 0)&&(h.push(y),f=!0)}if(!f&&p){let g={};for(let[y,v]of Object.entries(m))g[y.includes(".")?y:`${s}.${y}`]=v;h.push(g)}}r=h,s=d}let o=c=>{if(!t)return c;let u={};for(let[d,p]of Object.entries(c))u[`${e.alias??e.table}.${d}`]=p;for(let[d,p]of Object.entries(t.row))u[`${t.alias}.${d}`]=p;return u},i=e.where;Or(i);let a=i?r.filter(c=>Re(o(c),i,e.alias)):r;for(let c of e.sub??[])a=a.filter(u=>{let d=this.execSelect(c.query,{row:u,alias:s});if(c.type==="exists")return c.not?d.length===0:d.length>0;let p=new Set(d.map(m=>m[String(c.query.cols?.[0]??Object.keys(m)[0])])),h=me(u,c.col,s);return c.not?!p.has(h):p.has(h)});let l;if(e.aggregate?.length){let c=new Map;for(let u of a){let d=(e.groupBy??[]).map(p=>JSON.stringify(me(u,p,s))).join("|");c.has(d)||c.set(d,[]),c.get(d).push(u)}if(!c.size&&!e.groupBy?.length&&c.set("",[]),l=[...c.values()].map(u=>{let d={};for(let p of e.groupBy??[])d[p]=me(u[0],p,s);for(let p of e.aggregate){let h=p.col==="*"?void 0:me(u[0],p.col,s),m=p.filter?u.filter(g=>Re(g,p.filter,void 0)):u,f=p.col==="*"?m:m.map(g=>me(g,p.col,s));p.fn==="count"?d[p.as]=f.length:f.length?p.fn==="sum"?d[p.as]=f.reduce((g,y)=>g+Number(y??0),0):p.fn==="avg"?d[p.as]=f.length?f.reduce((g,y)=>g+Number(y??0),0)/f.length:0:p.fn==="min"?d[p.as]=f.reduce((g,y)=>y!==null&&(g===null||y<g)?y:g,null):p.fn==="max"&&(d[p.as]=f.reduce((g,y)=>y!==null&&(g===null||y>g)?y:g,null)):d[p.as]=null}return d}),e.having){let u=new Map;for(let p of e.aggregate??[])u.set(`${p.fn}(${p.col==="*"?"*":p.col})`,p.as);let d={};for(let[p,h]of Object.entries(e.having))d[u.get(p)??p]=h;l=l.filter(p=>Re(p,d,void 0))}}else if(e.cols?.length){let c=new Set(this.table(e.table).columns);for(let u of e.joins??[])for(let d of this.table(u.table).columns)c.add(d);l=a.map(u=>{let d={};for(let p of e.cols){if(It(p))throw new $("raw \u6295\u5F71","memory-sql: raw \u6295\u5F71\u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09");let h=/^(.+?)\s+AS\s+([\w.]+)$/i.exec(p);if(h)d[h[2]]=me(u,h[1].trim());else{let m=lt(p),f=me(u,p);d[m]=f===void 0&&c.has(m)?null:f}}return e.vector&&(d[e.vector.as]=No($o(me(u,e.vector.col,s)),e.vector.vec)),d})}else l=a.map(c=>{let u={},d=e.joins?.length?c:_l(c);for(let[p,h]of Object.entries(d))u[lt(p)]=h;return u});if(e.distinct){let c=new Set;l=l.filter(u=>{let d=JSON.stringify(u);return c.has(d)?!1:(c.add(d),!0)})}if(e.vector&&(l=l.map(c=>({r:c,sim:No($o(me(c,e.vector.col,s)),e.vector.vec)})).sort((c,u)=>u.sim-c.sim).map(c=>c.r)),e.orderBy?.length){let c=e.orderBy;l=l.map((u,d)=>({r:u,idx:d})).sort((u,d)=>{for(let p of c){let h=u.r[lt(p.col)],m=d.r[lt(p.col)];if(h===m)continue;let f=typeof h=="number"&&typeof m=="number"?h>m?1:-1:String(h)>String(m)?1:-1;return p.dir==="desc"?-f:f}return d.idx-u.idx}).map(u=>u.r)}return e.offset!==void 0&&(l=l.slice(e.offset)),e.limit!==void 0&&(l=l.slice(0,e.limit)),at(l,l.length)}execInsert(e){let t=this.obtain(e.table),r=[],s=0,o=e.rows.map(i=>({...i}));for(let i of o){let a=Object.keys(i);t.pk&&!(t.pk.col in i)&&(i[t.pk.col]=t.pk.defaultUuid?Al():`mem-${t.nextId}`);for(let c of t.defaultNow)c in i||(i[c]=new Date().toISOString());for(let[c,u]of t.defaultVals)c in i||(i[c]=u);for(let c of Object.keys(i))i[c]=Er(c,void 0,i[c],i);let l;for(let c of t.uniques)if(c in i&&i[c]!=null){let u=t.rows.find(d=>be(d[c],i[c]));if(u){l={u:c,row:u};break}}if(!l){for(let c of t.groups)if(c.every(u=>u in i&&i[u]!=null)){let u=t.rows.find(d=>c.every(p=>be(d[p],i[p])));if(u){l={u:c.join(","),row:u};break}}}if(l){if(!e.onConflict)throw new D(`\u6570\u636E\u5E93\u9519\u8BEF: duplicate key value violates unique constraint "${l.u}"`,409);if(e.onConflict.update){if(e.onConflict.merge)for(let[c,u]of Object.entries(e.onConflict.merge))l.row[c]=Er(c,l.row[c],u,l.row);else{let c=Array.isArray(e.onConflict.col)?new Set(e.onConflict.col):e.onConflict.col?new Set([e.onConflict.col]):null;for(let u of a)c?.has(u)||(l.row[u]=i[u])}s++,e.returning&&r.push(e.returning==="*"?{...l.row}:fn(l.row,e.returning))}continue}t.rows.push(i),t.nextId++,s++,e.returning&&r.push(e.returning==="*"?{...i}:fn(i,e.returning))}return at(r,s)}execUpdate(e){let t=this.table(e.table),r=[],s=[];for(let i of t.rows)if(!e.where||Re(i,e.where,void 0)){let a={...i};for(let[l,c]of Object.entries(e.sets))if(Ol(c))a[l]=Er(l,a[l],c,a);else if(It(c))if(/^now\(\)$/i.test(c.__raw.trim()))a[l]=new Date().toISOString();else throw new $("raw SET","memory-sql: raw SET \u503C\u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09");else a[l]=c;s.push({row:i,next:a})}let o=new Map(s.map(i=>[i.row,i.next]));for(let{row:i,next:a}of s){for(let l of t.uniques){if(!(l in a)||a[l]==null)continue;if(t.rows.some(u=>u!==i&&be((o.get(u)??u)[l],a[l])))throw new D(`\u6570\u636E\u5E93\u9519\u8BEF: duplicate key value violates unique constraint "${l}"`,409)}for(let l of t.groups){if(!l.every(u=>u in a&&a[u]!=null))continue;if(t.rows.some(u=>u!==i&&l.every(d=>be((o.get(u)??u)[d],a[d]))))throw new D(`\u6570\u636E\u5E93\u9519\u8BEF: duplicate key value violates unique constraint "${l.join(", ")}"`,409)}}for(let{row:i,next:a}of s){for(let[l,c]of Object.entries(a))i[l]=c;e.returning&&r.push(e.returning==="*"?{...i}:fn(i,e.returning))}return at(r,s.length)}execDelete(e){Or(e.where);let t=this.table(e.table),r=t.rows.length,s=[],o=[];for(let i of t.rows)!e.where||Re(i,e.where,void 0)?e.returning&&o.push(e.returning==="*"?{...i}:fn(i,e.returning)):s.push(i);return t.rows=s,at(o,r-s.length)}assertTableExists(e,t){if(t&&!this.tables.has(t))throw new $("relation",`memory-sql: ${e} \u8868 '${t}' \u4E0D\u5B58\u5728\uFF08relation does not exist\u2014\u2014\u5BF9\u9F50\u771F\u5E93 42P01\uFF09`)}table(e){let t=this.tables.get(e);if(!t)throw new $("relation",`memory-sql: \u8868 '${e}' \u4E0D\u5B58\u5728\uFF08relation does not exist\u2014\u2014\u5BF9\u9F50\u771F\u5E93 42P01\uFF09`);return t}obtain(e){let t=this.tables.get(e);return t||(t={state:"observed",rows:[],nextId:1,uniques:new Set,groups:[],defaultNow:new Set,defaultVals:new Map,columns:[],columnTypes:{}},this.tables.set(e,t)),t}toDeclared(e){let t=this.obtain(e);return t.state="declared",t}hasTable(e){return this.tables.has(e)}inspectTable(e){let t=this.tables.get(e);if(!t)throw new $("relation",`memory-sql: \u8868 '${e}' \u4E0D\u5B58\u5728\uFF0842P01\uFF09`);return{state:t.state,columns:[...t.columns],columnTypes:{...t.columnTypes},constraints:{pk:t.pk?{...t.pk}:void 0,uniques:[...t.uniques],groups:t.groups.map(r=>[...r]),defaultNow:[...t.defaultNow],defaultVals:{...t.defaultVals}}}}schemaSnapshot(){let e=[];for(let[t,r]of this.tables)e.push({name:t,columns:r.columns.map(s=>({name:s,type:(r.columnTypes[s]??"TEXT").toLowerCase()}))});return e}getColumnType(e,t){return this.tables.get(e)?.columnTypes[t]}getColumnTypes(e){return this.tables.get(e)?.columns.map(t=>this.tables.get(e).columnTypes[t]??"text")??[]}snapshot(){let e=new Map;for(let[t,r]of this.tables)e.set(t,{rows:r.rows.map(s=>({...s})),nextId:r.nextId,columns:[...r.columns],columnTypes:{...r.columnTypes},pk:r.pk?{...r.pk}:void 0,uniques:[...r.uniques],groups:r.groups.map(s=>[...s]),state:r.state,defaultNow:[...r.defaultNow],defaultVals:Object.fromEntries(r.defaultVals)});return e}restore(e){let t=new Set;for(let[r,s]of e)this.tables.set(r,{state:s.state,rows:s.rows.map(o=>({...o})),nextId:s.nextId,columns:[...s.columns],columnTypes:{...s.columnTypes},pk:s.pk?{...s.pk}:void 0,uniques:new Set(s.uniques),groups:(s.groups??[]).map(o=>[...o]),defaultNow:new Set(s.defaultNow),defaultVals:new Map(Object.entries(s.defaultVals??{}))}),t.add(r);for(let r of this.tables.keys())t.has(r)||this.tables.delete(r)}applySchema(e){for(let t of e.tables??[]){let r=this.toDeclared(t.name);r.columns=[],r.columnTypes={};for(let[s,o]of Object.entries(t.columns)){let i=o,a=i.metaInfo,l=a.column??s;r.columns.push(l),r.columnTypes[l]=(t.columnTypes?.[l]??Vt(i)).toLowerCase(),a.pk&&(r.pk={col:l,defaultUuid:a.default==="random"}),a.unique&&r.uniques.add(l),a.default==="now"?r.defaultNow.add(l):a.default!==void 0&&a.default!=="random"&&r.defaultVals.set(l,a.default)}for(let s of t.uniques??[])s.length>1&&r.groups.push(s)}}executeDdl(e){if(e.op==="createTable"&&e.table){let t=this.toDeclared(e.table),r=(e.columns??[]).filter(s=>s.type!=="table-constraint");if(t.columns.length===0){t.columns=r.map(s=>s.name);for(let s of r)t.columnTypes[s.name]=s.type.toLowerCase()}else{for(let s of r)t.columns.includes(s.name)||(t.columns.push(s.name),t.columnTypes[s.name]=s.type.toLowerCase());for(let s of t.rows)for(let o of r)!(o.name in s)&&o.defaultVal!==void 0&&(s[o.name]=o.defaultVal)}for(let s of e.columns??[]){if(s.type==="table-constraint"){s.constraintCols&&s.constraintCols.length>1&&t.groups.push(s.constraintCols);continue}s.pk&&(t.pk={col:s.name,defaultUuid:s.defaultUuid}),s.unique&&t.uniques.add(s.name),s.defaultNow&&t.defaultNow.add(s.name),s.defaultVal!==void 0&&t.defaultVals.set(s.name,s.defaultVal)}}else if(e.op==="alterAddColumn"&&e.table&&e.column){let t=this.table(e.table);if(!t.columns.includes(e.column)&&(t.columns.push(e.column),e.columnType&&(t.columnTypes[e.column]=e.columnType),e.defaultVal!==void 0)){let r=typeof e.defaultVal=="object"&&e.defaultVal!==null&&"__now"in e.defaultVal?new Date().toISOString():e.defaultVal;t.defaultVals.set(e.column,r);for(let s of t.rows)e.column in s||(s[e.column]=r)}}else if(e.op==="dropTable"&&e.table)this.tables.delete(e.table);else if(e.op==="dropEnum"&&e.table)this.enums.delete(e.table);else if(e.op==="alterEnumAddValue"&&e.table){let t=this.enums.get(e.table)??[];for(let r of e.enumValues??[])t.includes(r)||t.push(r);this.enums.set(e.table,t)}else e.op==="createEnum"&&e.table&&(this.enums.has(e.table)||this.enums.set(e.table,e.enumValues??[]));return at([],0)}};function Io(n){if(Array.isArray(n))return n;if(typeof n=="string")try{let e=JSON.parse(n);if(Array.isArray(e))return e}catch{}return n==null?[]:[n]}function $o(n){if(Array.isArray(n))return n;if(typeof n=="string")try{let e=JSON.parse(n);if(Array.isArray(e))return e}catch{}return n==null?[]:[]}function No(n,e){let t=0,r=0,s=0,o=Math.min(n.length,e.length);for(let i=0;i<o;i++)t+=n[i]*e[i],r+=n[i]*n[i],s+=e[i]*e[i];return r&&s?t/(Math.sqrt(r)*Math.sqrt(s)):0}function Er(n,e,t,r){if(typeof t!="object"||t===null)return t;let s=t;if("__jsonbAppend"in s)return[...Io(e),...Io(s.__jsonbAppend)];if("__inc"in s)return Number(e??0)+Number(s.__inc);if("__now"in s)return new Date().toISOString();if("__interval"in s){let[o,i]=s.__interval;return new Date(Date.now()+o*jo(i)).toISOString()}return"__colRef"in s?r[String(s.__colRef)]:"__monthStart"in s?Wo(t):t}function Ol(n){return typeof n=="object"&&n!==null&&["__jsonbAppend","__inc","__now","__interval","__colRef","__monthStart"].some(e=>e in n)}function jo(n){switch(n){case"day":return 864e5;case"hour":return 36e5;case"minute":return 6e4;default:return 1e3}}function Wo(n){if(typeof n=="object"&&n!==null){if("__interval"in n){let[e,t]=n.__interval;return new Date(Date.now()+e*jo(t)).toISOString()}if("__monthStart"in n){let e=new Date;return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),1)).toISOString()}}return n}function at(n,e){let t=n;return Object.defineProperty(t,"affectedRows",{value:e,enumerable:!1,writable:!0,configurable:!0}),t}function fn(n,e){let t={};for(let r of e)r in n&&(t[r]=n[r]);return t}function Pl(n,e,t,r,s){for(let o of e){if(o==="*"||o===""||/^\d+$/.test(o)||!/^[\w.]+$/.test(o)||s?.has(o)||s?.has(o.slice(o.lastIndexOf(".")+1)))continue;let i=o.includes(".")?o.slice(o.lastIndexOf(".")+1):o;if(t.some(l=>l.cols.has(i)))continue;let a=[...new Set(t.flatMap(l=>[...l.cols]))].sort();throw new $("\u672A\u77E5\u5217",`memory-sql: ${n} \u672A\u77E5\u5217 '${o}'\u2014\u2014${r} \u5408\u6CD5\u5217\uFF1A${a.join(", ")}`)}}function Ar(n){let e=[];for(let[t,r]of Object.entries(n)){if(t==="or"||t==="and"){for(let s of r)e.push(...Ar(s));continue}t!=="__raw"&&(e.push(t),typeof r=="object"&&r!==null&&!Array.isArray(r)&&"col"in r&&e.push(String(r.col)))}return e}function me(n,e,t){if(n==null)return;if(e in n)return n[e];let r=e.indexOf(".");if(r>=0){let s=e.slice(r+1);return s in n?n[s]:void 0}for(let[s,o]of Object.entries(n))if(s.slice(s.indexOf(".")+1)===e)return o}function lt(n){let e=n.lastIndexOf(".");return e>=0?n.slice(e+1):n}function _l(n){let e={};for(let[t,r]of Object.entries(n))e[lt(t)]=r;return e}function It(n){return typeof n=="object"&&n!==null&&"__raw"in n}function Or(n,e="where"){if(n)for(let[t,r]of Object.entries(n)){if(r===void 0)throw new $(`weifuwu/db: ${e}.${t} \u4E0D\u80FD\u4E3A undefined\u2014\u2014\u7701\u7565\u8BE5\u952E\u6216\u663E\u5F0F isNull`);typeof r=="object"&&r!==null&&Or(r,`${e}.${t}`)}}function Re(n,e,t){for(let[r,s]of Object.entries(e)){if(r==="or"){if(!s.some(i=>Re(n,i,t)))return!1;continue}if(r==="and"){if(!s.every(i=>Re(n,i,t)))return!1;continue}if(typeof s=="object"&&s!==null){let o=s,i=me(n,r,t);if(!["col","eq","gt","gte","lt","lte","ne","in","notIn","like","ilike","isNull","between"].some(c=>o[c]!==void 0)){if(!be(i,s))return!1;continue}let l=c=>{if(typeof c=="object"&&c!==null&&("__interval"in c||"__monthStart"in c))return Wo(c);if(!It(c))return c;let u=c.__raw.trim(),d=/^now\(\)\s*-\s*interval\s*'([0-9]+)\s*(days?|hours?|minutes?)'$/i.exec(u);if(/^now\(\)$/i.test(u))return new Date().toISOString();if(d){let h=Number(d[1]),m=d[2].toLowerCase(),f=m.startsWith("day")?h*864e5:m.startsWith("hour")?h*36e5:h*6e4;return new Date(Date.now()-f).toISOString()}let p=/^date_trunc\('(month|day|week|hour|minute)',\s*now\(\)\)$/i.exec(u);if(p){let h=new Date,m=p[1].toLowerCase();return m==="month"?new Date(Date.UTC(h.getUTCFullYear(),h.getUTCMonth(),1)).toISOString():m==="day"?new Date(Date.UTC(h.getUTCFullYear(),h.getUTCMonth(),h.getUTCDate())).toISOString():m==="hour"?new Date(h.setUTCMinutes(0,0,0)).toISOString():m==="minute"?new Date(h.setUTCSeconds(0,0)).toISOString():new Date(h).toISOString()}throw new $("WHERE \u503C\u8868\u8FBE\u5F0F",`memory-sql: WHERE \u503C\u8868\u8FBE\u5F0F\u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09\uFF1A${u}`)};if(o.col!==void 0&&!be(i,me(n,o.col,t))||o.eq!==void 0&&!be(i,l(o.eq))||o.gt!==void 0&&mn(i,l(o.gt))<=0||o.gte!==void 0&&mn(i,l(o.gte))<0||o.lt!==void 0&&mn(i,l(o.lt))>=0||o.lte!==void 0&&mn(i,l(o.lte))>0||o.ne!==void 0&&be(i,l(o.ne))||o.in&&!o.in.some(c=>be(i,l(c)))||o.notIn&&o.notIn.some(c=>be(i,l(c)))||o.like!==void 0&&(i==null||!Fo(o.like).test(String(i)))||o.ilike!==void 0&&(i==null||!Fo(o.ilike,!0).test(String(i))))return!1;if(o.between){let[c,u]=o.between;if(!(Number(i)>=Number(c)&&Number(i)<=Number(u)))return!1}if(o.isNull!==void 0&&i==null!==o.isNull)return!1;continue}throw process.env.PGDBG2&&console.error("[mmw where]",JSON.stringify({col:r,field:s})),new $("WHERE \u503C\u5F62\u6001",`memory-sql: WHERE \u5217 ${r} \u503C\u5FC5\u987B\u4E3A\u7B97\u5B50\u5BF9\u8C61\uFF08\u88F8\u6807\u91CF/\u6570\u7EC4/null \u5F62\u6001\u5DF2\u79FB\u9664\u2014\u2014\u7528 { eq: v } / { in: [...] } / { isNull: true }\uFF09`)}return!0}function Fo(n,e=!1){let t="";for(let r=0;r<n.length;r++){let s=n[r];if(s==="\\"){let o=n[r+1];if(o==="%"||o==="_"||o==="\\"){t+=Do(o),r++;continue}t+="\\\\";continue}if(s==="%"){t+=".*";continue}if(s==="_"){t+=".";continue}t+=Do(s)}return new RegExp(`^${t}$`,e?"i":"")}function Do(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function mn(n,e){if(typeof n=="number"&&typeof e=="number")return n>e?1:n<e?-1:0;let t=String(n),r=String(e);return t>r?1:t<r?-1:0}function be(n,e){return n===e?!0:n===null||e===null?!1:typeof n=="object"&&typeof e=="object"?JSON.stringify(n)===JSON.stringify(e):!1}function Pr(n){let e=n??new $t;return{orm:qt(Gt(e)),mem:e,close:async()=>e.close()}}var fv=new Fl;var yv=new TextDecoder,bv=new TextEncoder;var Ul=[{name:"GET",minArity:1,maxArity:1},{name:"KEYS",minArity:1,maxArity:1},{name:"SET",minArity:2,maxArity:5,parse(n){let[e,t,...r]=n,s,o=!1;for(let a=0;a<r.length;a+=2){let l=String(r[a]).toUpperCase(),c=r[a+1];if(l==="EX"&&c!==void 0)s=Number(c)*1e3;else if(l==="PX"&&c!==void 0)s=Number(c);else if(l==="KEEPTTL")o=!0;else throw new $(`ERR syntax error: SET \u9009\u9879 ${l} \u4E0D\u652F\u6301`)}if(s!==void 0&&!Number.isFinite(s))throw new $("ERR value is not an integer or out of range");let i={keepTtl:o};return s!==void 0&&(i.ttl=s),{args:[String(e),String(t)],meta:i}}},{name:"EXISTS",minArity:1},{name:"DEL",minArity:1},{name:"EXPIRE",minArity:2,maxArity:3,parse(n){return{args:[String(n[0]),String(n[1])],meta:{ttlMs:Number(n[1])*1e3}}}},{name:"PEXPIRE",minArity:2,maxArity:3,parse(n){return{args:[String(n[0]),String(n[1])],meta:{ttlMs:Number(n[1])}}}},{name:"TTL",minArity:1,maxArity:1},{name:"INCR",minArity:1,maxArity:1},{name:"INCRBY",minArity:2,maxArity:2},{name:"STRLEN",minArity:1,maxArity:1},{name:"APPEND",minArity:2,maxArity:2},{name:"MGET",minArity:1},{name:"MSET",minArity:2},{name:"HSET",minArity:3},{name:"HGET",minArity:2,maxArity:2},{name:"HDEL",minArity:2},{name:"HGETALL",minArity:1,maxArity:1},{name:"HEXISTS",minArity:2,maxArity:2},{name:"HLEN",minArity:1,maxArity:1},{name:"HKEYS",minArity:1,maxArity:1},{name:"HVALS",minArity:1,maxArity:1},{name:"HINCRBY",minArity:3,maxArity:3},{name:"LPUSH",minArity:2},{name:"RPUSH",minArity:2},{name:"LPOP",minArity:1,maxArity:2},{name:"RPOP",minArity:1,maxArity:2},{name:"LLEN",minArity:1,maxArity:1},{name:"LRANGE",minArity:3,maxArity:3},{name:"LSET",minArity:3,maxArity:3},{name:"LINDEX",minArity:2,maxArity:2},{name:"BLPOP",minArity:2,parse(n){let e=Number(n[n.length-1]);if(!Number.isFinite(e))throw new $("ERR timeout is not a float");return{args:n.map(String),meta:{timeoutMs:e*1e3}}}},{name:"SADD",minArity:2},{name:"SREM",minArity:2},{name:"SMEMBERS",minArity:1,maxArity:1},{name:"SISMEMBER",minArity:2,maxArity:2},{name:"SCARD",minArity:1,maxArity:1},{name:"ZADD",minArity:3},{name:"ZREM",minArity:2},{name:"ZRANGE",minArity:3},{name:"ZRANGEBYSCORE",minArity:3},{name:"ZREMRANGEBYSCORE",minArity:3,maxArity:3},{name:"ZCARD",minArity:1,maxArity:1},{name:"ZSCORE",minArity:2,maxArity:2},{name:"XADD",minArity:4},{name:"XREADGROUP",minArity:5},{name:"XACK",minArity:3},{name:"XPENDING",minArity:2},{name:"XAUTOCLAIM",minArity:5},{name:"XGROUP",minArity:3},{name:"XLEN",minArity:1,maxArity:1},{name:"XRANGE",minArity:3},{name:"XDEL",minArity:2},{name:"SUBSCRIBE",minArity:1},{name:"UNSUBSCRIBE",minArity:0},{name:"PSUBSCRIBE",minArity:1},{name:"PUNSUBSCRIBE",minArity:0},{name:"PUBLISH",minArity:2,maxArity:2},{name:"PING",minArity:0},{name:"ECHO",minArity:1,maxArity:1},{name:"SELECT",minArity:1,maxArity:1},{name:"FLUSHALL",minArity:0},{name:"FLUSHDB",minArity:0},{name:"CLIENT",minArity:1},{name:"INFO",minArity:0},{name:"TIME",minArity:0},{name:"DBSIZE",minArity:0},{name:"AUTH",minArity:1,maxArity:2},{name:"QUIT",minArity:0}],Vl=new Map(Ul.map(n=>[n.name,n]));function _r(n){let e=n.name.toUpperCase(),t=Vl.get(e);if(!t)throw new $(`ERR unknown command '${e}'`);if(n.args.length<t.minArity)throw new $(`ERR wrong number of arguments for '${e}' command`);if(t.maxArity!==void 0&&n.args.length>t.maxArity)throw new $(`ERR wrong number of arguments for '${e}' command`);return{def:t,parsed:t.parse?t.parse(n.args):{args:n.args}}}var Mr=class{cmds=[];redis;constructor(e){this.redis=e}set(e,t,r){return this.cmds.push(r!==void 0?{name:"SET",args:[e,t,"EX",r]}:{name:"SET",args:[e,t]}),this}get(e){return this.cmds.push({name:"GET",args:[e]}),this}del(...e){return this.cmds.push({name:"DEL",args:e}),this}incr(e){return this.cmds.push({name:"INCR",args:[e]}),this}expire(e,t){return this.cmds.push({name:"EXPIRE",args:[e,t]}),this}ttl(e){return this.cmds.push({name:"TTL",args:[e]}),this}raw(e,...t){return this.cmds.push({name:e,args:t}),this}async exec(){let e=this.cmds;this.cmds=[];let t=[];for(let r of e)try{t.push(await this.redis.command(r.name,...r.args))}catch(s){t.push(s)}return t}},Ir=class{subs=new Map;connected=!1;redis;constructor(e){this.redis=e,e._registerSubscriber(this)}async connect(){this.connected=!0}async subscribe(e,t){this.subs.set(`s:${e}`,t)}async psubscribe(e,t){this.subs.set(`p:${e}`,t)}async close(){this.redis._unregisterSubscriber(this),this.subs.clear()}_dispatch(e,t){if(!this.connected)return!1;let r=!1;for(let[s,o]of this.subs)if(s.startsWith("s:"))s.slice(2)===e&&(o(e,t),r=!0);else{let i=s.slice(2);new RegExp("^"+i.split("*").map(l=>l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$").test(e)&&(o(e,t),r=!0)}return r}},He=class{strings=new Map;hashes=new Map;lists=new Map;sets=new Map;zsets=new Map;streams=new Map;subscribers=new Set;seq=0;closed=!1;_registerSubscriber(e){this.subscribers.add(e)}_unregisterSubscriber(e){this.subscribers.delete(e)}expired(e){let t=this.strings.get(e);return!t||t.expiresAt===null?!1:t.expiresAt<=Date.now()?(this.strings.delete(e),!0):!1}async get(e){return this.assertOpen(),this.expired(e)?null:this.strings.get(e)?.value??null}async getBuffer(e){let t=await this.get(e);return t===null?null:new TextEncoder().encode(t)}async set(e,t,r){return this.assertOpen(),this.strings.set(e,{value:String(t),expiresAt:r?Date.now()+r*1e3:null}),"OK"}async del(...e){this.assertOpen();let t=0;for(let r of e)this.strings.delete(r)&&t++,this.hashes.delete(r)&&t++,this.lists.delete(r)&&t++,this.sets.delete(r)&&t++,this.zsets.delete(r)&&t++,this.streams.delete(r)&&t++;return t}async incr(e){this.assertOpen();let t=this.strings.get(e);t&&t.expiresAt!==null&&t.expiresAt<=Date.now()&&this.strings.delete(e);let r=Number(this.strings.get(e)?.value??"0");if(!Number.isInteger(r))throw new $("ERR value is not an integer or out of range");let s=r+1;return this.strings.set(e,{value:String(s),expiresAt:this.strings.get(e)?.expiresAt??null}),s}async incrby(e,t){this.assertOpen();let r=this.strings.get(e);r&&r.expiresAt!==null&&r.expiresAt<=Date.now()&&this.strings.delete(e);let s=Number(this.strings.get(e)?.value??"0");if(!Number.isInteger(s)||!Number.isInteger(t))throw new $("ERR value is not an integer or out of range");let o=s+t;return this.strings.set(e,{value:String(o),expiresAt:this.strings.get(e)?.expiresAt??null}),o}async expire(e,t){this.assertOpen();let r=this.strings.get(e);return r?(r.expiresAt=Date.now()+t*1e3,1):0}async ttl(e){this.assertOpen();let t=this.strings.get(e);if(!t)return-2;if(t.expiresAt===null)return-1;let r=t.expiresAt-Date.now();return Math.max(0,Math.ceil(r/1e3))}async mget(...e){return Promise.all(e.map(t=>this.get(t)))}async mset(...e){this.assertOpen();for(let t=0;t<e.length;t+=2)this.strings.set(String(e[t]),{value:String(e[t+1]),expiresAt:null});return"OK"}async exists(...e){this.assertOpen();let t=0;for(let r of e)await this.get(r)!==null&&t++;return t}async setnx(e,t){this.assertOpen();let r=this.strings.get(e);return r&&r.expiresAt!==null&&r.expiresAt<=Date.now()&&this.strings.delete(e),this.strings.has(e)?0:(this.strings.set(e,{value:String(t),expiresAt:null}),1)}async jsonGet(e){let t=await this.get(e);if(t===null)return null;try{return JSON.parse(t)}catch{return t}}async jsonSet(e,t,r){return this.set(e,JSON.stringify(t),r)}async cache(e,t,r){let s=await this.get(e);if(s!==null)try{return JSON.parse(s)}catch{return s}let o=await t();return o!==null&&await this.jsonSet(e,o,r),o}async hset(e,t,r){this.assertOpen();let s=this.hashes.get(e);s||(s=new Map,this.hashes.set(e,s));let o=!s.has(t);return s.set(t,String(r)),o?1:0}async hget(e,t){return this.assertOpen(),this.hashes.get(e)?.get(t)??null}async hgetall(e){this.assertOpen();let t=this.hashes.get(e);return t?Object.fromEntries(t):{}}async hdel(e,...t){this.assertOpen();let r=this.hashes.get(e);if(!r)return 0;let s=0;for(let o of t)r.delete(o)&&s++;return r.size===0&&this.hashes.delete(e),s}list(e){let t=this.lists.get(e);return t||(t=[],this.lists.set(e,t)),t}async lpush(e,...t){this.assertOpen();let r=this.list(e);for(let s of t)r.unshift(String(s));return r.length}async rpush(e,...t){this.assertOpen();let r=this.list(e);for(let s of t)r.push(String(s));return r.length}async lpop(e){this.assertOpen();let t=this.lists.get(e);if(!t||t.length===0)return null;let r=t.shift();return t.length===0&&this.lists.delete(e),r}async rpop(e){this.assertOpen();let t=this.lists.get(e);if(!t||t.length===0)return null;let r=t.pop();return t.length===0&&this.lists.delete(e),r}async lrange(e,t,r){this.assertOpen();let s=this.lists.get(e)??[],o=t<0?Math.max(0,s.length+t):t,i=r<0?s.length+r:Math.min(s.length-1,r);return o>i?[]:s.slice(o,i+1)}async sadd(e,...t){this.assertOpen();let r=this.sets.get(e);r||(r=new Set,this.sets.set(e,r));let s=0;for(let o of t){let i=String(o);r.has(i)||(r.add(i),s++)}return s}async srem(e,...t){this.assertOpen();let r=this.sets.get(e);if(!r)return 0;let s=0;for(let o of t)r.delete(String(o))&&s++;return r.size===0&&this.sets.delete(e),s}async smembers(e){return this.assertOpen(),[...this.sets.get(e)??[]]}async zadd(e,t,r){this.assertOpen();let s=this.zsets.get(e);s||(s=new Map,this.zsets.set(e,s));let o=String(r),i=!s.has(o);return s.set(o,t),i?1:0}async zrange(e,t,r){this.assertOpen();let s=this.zsets.get(e);if(!s)return[];let o=[...s.entries()].sort((l,c)=>l[1]-c[1]).map(([l])=>l),i=t<0?Math.max(0,o.length+t):t,a=r<0?o.length+r:Math.min(o.length-1,r);return i>a?[]:o.slice(i,a+1)}async publish(e,t){this.assertOpen();let r=String(t),s=0;for(let o of this.subscribers)o._dispatch(e,r)&&s++;return s}async pipeline(){return new Mr(this)}createSubscriber(){return new Ir(this)}async createConnection(){this.assertOpen();let e=this;return{get connected(){return!e.closed},command:(t,...r)=>e.command(t,...r),close:async()=>{}}}async flushdb(){return this.assertOpen(),this.strings.clear(),this.hashes.clear(),this.lists.clear(),this.sets.clear(),this.zsets.clear(),this.streams.clear(),"OK"}async close(){this.closed=!0;for(let e of this.subscribers)e.close().catch(()=>{});this.subscribers.clear()}assertOpen(){if(this.closed)throw new $("memory-redis: instance is closed")}async command(e,...t){this.assertOpen(),_r({name:e,args:t});let[r,s,o,i,a]=t;switch(e.toUpperCase()){case"GET":return this.get(String(r));case"LPUSH":return this.lpush(String(r),...t.slice(1));case"RPUSH":return this.rpush(String(r),...t.slice(1));case"LPOP":return this.lpop(String(r));case"RPOP":return this.rpop(String(r));case"LLEN":return this.lists.get(String(r))?.length??0;case"LRANGE":return this.lrange(String(r),Number(s),Number(o));case"SET":return this.set(String(r),String(s),o!==void 0?Number(o==="EX"?i:o):void 0);case"DEL":return this.del(...t.map(String));case"INCR":return this.incr(String(r));case"EXPIRE":return this.expire(String(r),Number(s));case"PEXPIRE":{let l=this.strings.get(String(r));return l?(l.expiresAt=Date.now()+Number(s),1):0}case"TTL":return this.ttl(String(r));case"FLUSHDB":return this.flushdb();case"ZADD":return this.zadd(String(r),Number(s),String(o));case"ZRANGEBYSCORE":{let l=this.zsets.get(String(r));if(!l)return[];let c=Number(s),u=Number(o);return[...l.entries()].filter(([,d])=>d>=c&&d<=u).sort((d,p)=>d[1]-p[1]).map(([d])=>d)}case"ZREM":return this.zrem(String(r),String(s));case"ZCARD":return this.zsets.get(String(r))?.size??0;case"ZREMRANGEBYSCORE":return this.zremrangebyscore(String(r),Number(s),Number(o));case"XADD":return this.xadd(String(r),String(s),t.slice(2));case"XLEN":return this.streams.get(String(r))?.entries.length??0;case"XGROUP":return String(r).toUpperCase()==="DESTROY"?this.xgroupDestroy(String(s),String(o)):this.xgroup(String(s),String(o),String(i));case"XREADGROUP":return this.xreadgroup(String(r),String(s),String(o),t);case"XACK":return this.xack(String(r),String(s),String(o));case"XAUTOCLAIM":return this.xautoclaim(String(r),String(s),String(o),Number(i),t);case"XPENDING":return this.xpending(String(r),String(s));default:throw new $(`memory-redis: command '${e}' unsupported (\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u9700\u771F\u5E93/\u8865\u5B9E\u73B0)`)}}async zrem(e,t){let r=this.zsets.get(e);if(!r)return 0;let s=r.delete(t)?1:0;return r.size===0&&this.zsets.delete(e),s}async zremrangebyscore(e,t,r){let s=this.zsets.get(e);if(!s)return 0;let o=0;for(let[i,a]of[...s.entries()])a>=t&&a<=r&&(s.delete(i),o++);return s.size===0&&this.zsets.delete(e),o}stream(e){let t=this.streams.get(e);return t||(t={entries:[],lastDelivered:new Map},this.streams.set(e,t)),t}async xadd(e,t,r){let s=this.stream(e);t==="*"&&(t=`${Date.now()}-${this.seq++}`);let o={};for(let i=0;i<r.length;i+=2)o[String(r[i])]=String(r[i+1]);return s.entries.push({id:t,fields:o,pending:null}),t}async xgroup(e,t,r){if(this.strings.has(e)&&!this.streams.has(e))throw new Error("WRONGTYPE Operation against a key holding the wrong kind of value");let s=this.stream(e);if(s.lastDelivered.has(t))throw new Error(`BUSYGROUP Consumer Group name already exists: ${t}`);return s.lastDelivered.set(t,r==="$"?s.entries.length:0),"OK"}async xgroupDestroy(e,t){let r=this.streams.get(e);return r&&r.lastDelivered.delete(t)?1:0}async xreadgroup(e,t,r,s){let o=s.indexOf("STREAMS"),i=String(s[o+1]),a=this.stream(i),l=s.indexOf("COUNT"),c=l>=0?Number(s[l+1]):1,u=s.indexOf("BLOCK"),d=u>=0?Number(s[u+1]):0,p=String(s[o+2]),h=a.lastDelivered.get(t);if(p===">"){let f=typeof h=="number"?h:0,g=a.entries.slice(f).filter(v=>!v.pending);if(g.length===0){if(d>0){await new Promise(x=>setTimeout(x,d));let v=a.lastDelivered.get(t),k=typeof v=="number"?v:0,w=a.entries.slice(k).filter(x=>!x.pending);if(w.length===0)return null;let b=w.slice(0,c);for(let x of b)x.pending={consumer:r,idleSince:Date.now()};return a.lastDelivered.set(t,k+b.length),[[i,b.map(x=>[x.id,gn(x.fields)])]]}return null}let y=g.slice(0,c);for(let v of y)v.pending={consumer:r,idleSince:Date.now()};return a.lastDelivered.set(t,f+y.length),[[i,y.map(v=>[v.id,gn(v.fields)])]]}let m=a.entries.filter(f=>f.pending?.consumer===r);return[[i,m.slice(0,c).map(f=>[f.id,gn(f.fields)])]]}async xack(e,t,...r){let s=this.streams.get(e);if(!s)return 0;let o=0;for(let i of r){let a=s.entries.find(l=>l.id===i);a?.pending&&(a.pending=null,o++)}return o}async xautoclaim(e,t,r,s,o){let i=this.streams.get(e);if(!i)return["0-0",[]];let a=o.indexOf("COUNT"),l=a>=0?Number(o[a+1]):1,c=Date.now(),d=i.entries.filter(p=>p.pending&&c-p.pending.idleSince>=s).slice(0,l);for(let p of d)p.pending={consumer:r,idleSince:c};return["0-0",d.map(p=>[p.id,gn(p.fields)])]}async xpending(e,t){let r=this.streams.get(e);if(!r)return[0,"0-0","0-0",[]];let s=r.entries.filter(i=>i.pending);if(s.length===0)return[0,"0-0","0-0",[]];let o=new Map;for(let i of s){let a=i.pending.consumer;o.set(a,(o.get(a)??0)+1)}return[s.length,s[0].id,s[s.length-1].id,[...o.entries()].map(([i,a])=>[i,a])]}};function gn(n){let e=[];for(let[t,r]of Object.entries(n))e.push(t,r);return e}import{AsyncLocalStorage as Hl}from"node:async_hooks";var Jv=new Hl;var oS=new TextEncoder;function Vo(n,e){let t=e?.wsAdapter!==void 0?e:{...e,wsAdapter:bn};return Br(n,t)}var Te=(n,e=200)=>new Response(JSON.stringify(n,null,2),{status:e,headers:{"Content-Type":"application/json; charset=utf-8"}});function Ho(n,e){let{orm:t,mem:r}=Pr(),s=new He,o=Vn({redis:s});e.redis=s,e.queue=o.queue,n.get("/api/demo/router",(c,u)=>Te({path:c.url?.split("?")[0],method:c.method,params:u.params,note:"Trie \u8DEF\u7531 + :id \u53C2\u6570\u6CE8\u5165"})),n.get("/api/demo/sql",async c=>{r.executeQuery({kind:"ddl",op:"createTable",table:"demo_items",ifNotExists:!0,columns:[{name:"id",type:"SERIAL",pk:!0,unique:!1,defaultNow:!1,defaultUuid:!1},{name:"name",type:"TEXT",pk:!1,unique:!1,defaultNow:!1,defaultUuid:!1},{name:"done",type:"BOOLEAN",pk:!1,unique:!1,defaultNow:!1,defaultUuid:!1}]});let u=await t.query.from("demo_items").orderBy("id").limit(5).run();return Te({engine:"MemorySql\uFF08\u6F14\u793A\uFF09\u2014\u2014\u751F\u4EA7\u6362 postgres()",rows:u})}),n.post("/api/demo/sql",async c=>{let{name:u}=await c.json(),d=await t.query.insert("demo_items").rows([{name:String(u??"\u4EFB\u52A1"),done:!1}]).returning("id").run();return Te({inserted:d[0]?.id},201)}),n.get("/api/demo/redis",async c=>{let u=await s.incr("demo:counter");return await s.get("demo:greeting")||await s.set("demo:greeting","\u6765\u81EA ctx.redis \u7684\u7F13\u5B58\u95EE\u5019",3600),Te({engine:"MemoryRedis\uFF08\u6F14\u793A\uFF09\u2014\u2014\u751F\u4EA7\u6362 redis()",counter:Number(u),greeting:await s.get("demo:greeting")})});let i=An({redis:s,windowMs:6e4,max:5,message:"\u6F14\u793A\u9650\u6D41\uFF1A1 \u5206\u949F\u6700\u591A 5 \u6B21\uFF08\u751F\u4EA7\u9608\u503C\u81EA\u884C\u914D\u7F6E\uFF09"});n.get("/api/demo/limit",i,c=>Te({ok:!0,note:"\u9650\u6D41\u901A\u8FC7\u2014\u2014\u7B2C 6 \u6B21\u8BF7\u6C42\u5C06\u8FD4\u56DE 429"}));let a=[];e.email={send:async c=>(a.push({to:c.to,subject:c.subject??"",text:c.text??""}),{accepted:!0})},n.get("/api/demo/email",async c=>{let u={to:"user@example.com",subject:"\u6F14\u793A\u90AE\u4EF6",text:"ctx.email \u5951\u7EA6\u2014\u2014Mailer \u63A5\u53E3\uFF0C\u9002\u914D\u5668\u53EF\u6362\uFF08SMTP/Resend/\u81EA\u5B9A\u4E49\uFF09"};return await e.email.send(u),Te({engine:"Mailer \u5951\u7EA6\uFF08\u5185\u5B58\u6355\u83B7\uFF09",sent:a[a.length-1],total:a.length})}),n.post("/api/demo/queue",async c=>{let{task:u}=await c.json(),{id:d}=await o.queue.add("demo-jobs",{task:String(u??"\u6F14\u793A\u4EFB\u52A1"),at:new Date().toISOString()});return Te({enqueued:d,note:"queue({ redis })\u2014\u2014XADD \u5165\u961F\uFF0Cworker \u963B\u585E\u8BFB\uFF08\u6A21\u5F0F A \u663E\u5F0F\u6CE8\u5165\uFF09"},201)}),n.get("/api/demo/queue",async c=>{let u=await o.queue.length("demo-jobs");return Te({queue:"demo-jobs",pending:u})});let l=0;setInterval(()=>{l++},3e4),n.get("/api/demo/cron",c=>Te({ticks:l,note:"\u6F14\u793A\u7528 setInterval\uFF1B\u751F\u4EA7\uFF1Actx.schedule('*/30 * * * * *', fn) \u6216 ctx.cron \u6CE8\u518C"})),n.use(Rr("/api/demo/graphql",async()=>({schema:`
117
+ </html>`}function Cl(n){let e=new Ee;async function t(s,o){let i=await n(s,o),a;try{a=xl(i)}catch(l){throw new pn(500,`schema \u6784\u5EFA\u5931\u8D25: ${l instanceof Error?l.message:String(l)}`)}return{options:i,schema:a}}async function r(s,o,i){let a;try{a=await t(s,o)}catch(l){return Rl(l)}return i(a)}return e.get("/",async(s,o)=>r(s,o,async({options:i,schema:a})=>{let l=new URL(s.url);if(i.graphiql&&!l.searchParams.has("query"))return new Response(Tl(l.pathname),{status:200,headers:{"Content-Type":"text/html"}});let c=yl(l);return c===null?Response.json({errors:[{message:"Missing query"}]},{status:400}):"error"in c?Response.json({errors:[{message:c.error}]},{status:400}):Io(a,c,i,s,o)})),e.post("/",async(s,o)=>r(s,o,async({options:i,schema:a})=>{if(!(s.headers.get("content-type")??"").toLowerCase().includes("application/json"))return Response.json({errors:[{message:"Unsupported Media Type: expected application/json"}]},{status:415});let c=await bl(s);return c?Io(a,c,i,s,o):Response.json({errors:[{message:"Missing query"}]},{status:400})})),e}function Rr(n,e){let t=typeof n=="string"?n:"/graphql",r=typeof n=="string"?e:n;if(!r)throw new Error("graphql(): \u7F3A\u5C11 handler");let s=new Ee;s.mount(t,Cl(r));let o=s.handler(),i=t.length>1&&t.endsWith("/")?t.slice(0,-1):t;return(a,l,c)=>{let u;try{u=new URL(a.url).pathname}catch{u=a.url.split("?")[0]}return(i==="/"?u==="/":u===i||u.startsWith(i+"/"))?o(a,l):c(a,l)}}var Tr=class n{buf=new Uint8Array(0);off=0;static MAX_BUFFER=1<<20;push(e){this.append(e);let t=[];for(;;){let r=this.off,s=this.tryRead();if(!s){this.off=r;break}t.push(s)}return t.length>0&&this.compact(),t}append(e){if(e.length===0)return;let t=this.buf.length-this.off;if(t===0){this.buf=e,this.off=0;return}let r=t+e.length;if(r>n.MAX_BUFFER)throw new $(`postgres: \u4E0D\u5B8C\u6574\u6D88\u606F\u8D85\u8FC7\u7F13\u51B2\u4E0A\u9650\uFF08${n.MAX_BUFFER} \u5B57\u8282\uFF09\u2014\u2014DoS \u9632\u5FA1`);if(this.buf.length>=r){this.buf.set(e,t),this.off=0;return}let s=new Uint8Array(Math.max(r,this.buf.length*2));s.set(this.buf.subarray(this.off),0),s.set(e,t),this.buf=s,this.off=0}compact(){this.off===this.buf.length?(this.buf=new Uint8Array(0),this.off=0):this.off>0&&(this.buf=this.buf.subarray(this.off),this.off=0)}tryRead(){if(this.buf.length-this.off<5)return null;let e=(this.buf[this.off+1]<<24|this.buf[this.off+2]<<16|this.buf[this.off+3]<<8|this.buf[this.off+4])>>>0;if(e===0||e>n.MAX_BUFFER||this.buf.length-this.off<1+e)return null;let t=String.fromCharCode(this.buf[this.off]),r=this.buf.subarray(this.off+5,this.off+1+e);return this.off+=1+e,{type:t,payload:r}}};var xb=new TextDecoder,kb=new TextEncoder;import{AsyncLocalStorage as Fl}from"node:async_hooks";import{randomUUID as Al}from"node:crypto";var $t=class{opts;constructor(e){this.opts=e}tables=new Map;enums=new Map;async close(){}executeQuery(e){let t;switch(e.kind){case"select":t=this.execSelect(e);break;case"insert":t=this.execInsert(e);break;case"update":t=this.execUpdate(e);break;case"delete":t=this.execDelete(e);break;case"ddl":return this.executeDdl(e)}return this.jsonDecodeRows(e.table,t)}jsonDecodeRows(e,t){if(!e||!this.tables.has(e))return t;let r=this.tables.get(e),s=r.columnTypes,o=new Set(Object.entries(s).filter(([,a])=>/^(jsonb?|vector(?:\\(\d+\\))?)$/i.test(a)).map(([a])=>a)),i=a=>{if(typeof a!="string")return!1;try{let l=JSON.parse(a);return typeof l=="object"&&l!==null}catch{return!1}};for(let a of t)if(!(typeof a!="object"||a===null))for(let l of Object.keys(a)){let c=l.includes(".")?l.slice(l.lastIndexOf(".")+1):l;if((r.state==="declared"?o.has(c):i(a[l]))&&typeof a[l]=="string")try{a[l]=JSON.parse(a[l])}catch{}}return t}tableCols(e){let t=this.table(e),r=new Set(t.columns);for(let s of t.rows)for(let o of Object.keys(s))r.add(ct(o));return r}assertKnownCols(e,t,r){if(this.opts?.validateCols===!1||r)return;let s=[{alias:t.alias??t.table,cols:this.tableCols(t.table)}];for(let a of t.joins??[])s.push({alias:a.alias??a.table,cols:this.tableCols(a.table)});let o=new Set((t.aggregate??[]).map(a=>a.as)),i=[];t.where&&i.push(...Ar(t.where));for(let a of t.joins??[])It(a.on)||i.push(...Ar(a.on));for(let a of t.cols??[])typeof a=="string"&&i.push(a);for(let a of t.orderBy??[])o.has(a.col)||i.push(a.col);if(t.groupBy)for(let a of t.groupBy)o.has(a)||i.push(a);i.length&&Pl(e,i,s,t.table,o)}execSelect(e,t){if(e.table&&(this.assertTableExists("SELECT",e.table),this.assertKnownCols("SELECT",e,t)),e.count){let c=this.table(e.table),u=e.where?c.rows.filter(p=>Re(p,e.where,e.alias)).length:c.rows.length,d=e.cols?.[0]??"count";return lt([{[d]:u}],1)}let r=this.table(e.table).rows,s=e.alias??e.table;for(let c of e.joins??[]){let u=this.table(c.table).rows,d=c.alias??c.table,p=c.type==="left",h=[];for(let m of r){let f=!1;for(let g of u){let y={};for(let[v,k]of Object.entries(m))y[v.includes(".")?v:`${s}.${v}`]=k;for(let[v,k]of Object.entries(g))y[`${d}.${v}`]=k;if(It(c.on))throw new $("raw JOIN","memory-sql: raw JOIN ON \u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09");Re(y,c.on,void 0)&&(h.push(y),f=!0)}if(!f&&p){let g={};for(let[y,v]of Object.entries(m))g[y.includes(".")?y:`${s}.${y}`]=v;h.push(g)}}r=h,s=d}let o=c=>{if(!t)return c;let u={};for(let[d,p]of Object.entries(c))u[`${e.alias??e.table}.${d}`]=p;for(let[d,p]of Object.entries(t.row))u[`${t.alias}.${d}`]=p;return u},i=e.where;Or(i);let a=i?r.filter(c=>Re(o(c),i,e.alias)):r;for(let c of e.sub??[])a=a.filter(u=>{let d=this.execSelect(c.query,{row:u,alias:s});if(c.type==="exists")return c.not?d.length===0:d.length>0;let p=new Set(d.map(m=>m[String(c.query.cols?.[0]??Object.keys(m)[0])])),h=me(u,c.col,s);return c.not?!p.has(h):p.has(h)});let l;if(e.aggregate?.length){let c=new Map;for(let u of a){let d=(e.groupBy??[]).map(p=>JSON.stringify(me(u,p,s))).join("|");c.has(d)||c.set(d,[]),c.get(d).push(u)}if(!c.size&&!e.groupBy?.length&&c.set("",[]),l=[...c.values()].map(u=>{let d={};for(let p of e.groupBy??[])d[p]=me(u[0],p,s);for(let p of e.aggregate){let h=p.col==="*"?void 0:me(u[0],p.col,s),m=p.filter?u.filter(g=>Re(g,p.filter,void 0)):u,f=p.col==="*"?m:m.map(g=>me(g,p.col,s));p.fn==="count"?d[p.as]=f.length:f.length?p.fn==="sum"?d[p.as]=f.reduce((g,y)=>g+Number(y??0),0):p.fn==="avg"?d[p.as]=f.length?f.reduce((g,y)=>g+Number(y??0),0)/f.length:0:p.fn==="min"?d[p.as]=f.reduce((g,y)=>y!==null&&(g===null||y<g)?y:g,null):p.fn==="max"&&(d[p.as]=f.reduce((g,y)=>y!==null&&(g===null||y>g)?y:g,null)):d[p.as]=null}return d}),e.having){let u=new Map;for(let p of e.aggregate??[])u.set(`${p.fn}(${p.col==="*"?"*":p.col})`,p.as);let d={};for(let[p,h]of Object.entries(e.having))d[u.get(p)??p]=h;l=l.filter(p=>Re(p,d,void 0))}}else if(e.cols?.length){let c=new Set(this.table(e.table).columns);for(let u of e.joins??[])for(let d of this.table(u.table).columns)c.add(d);l=a.map(u=>{let d={};for(let p of e.cols){if(It(p))throw new $("raw \u6295\u5F71","memory-sql: raw \u6295\u5F71\u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09");let h=/^(.+?)\s+AS\s+([\w.]+)$/i.exec(p);if(h)d[h[2]]=me(u,h[1].trim());else{let m=ct(p),f=me(u,p);d[m]=f===void 0&&c.has(m)?null:f}}return e.vector&&(d[e.vector.as]=Fo(No(me(u,e.vector.col,s)),e.vector.vec)),d})}else l=a.map(c=>{let u={},d=e.joins?.length?c:_l(c);for(let[p,h]of Object.entries(d))u[ct(p)]=h;return u});if(e.distinct){let c=new Set;l=l.filter(u=>{let d=JSON.stringify(u);return c.has(d)?!1:(c.add(d),!0)})}if(e.vector&&(l=l.map(c=>({r:c,sim:Fo(No(me(c,e.vector.col,s)),e.vector.vec)})).sort((c,u)=>u.sim-c.sim).map(c=>c.r)),e.orderBy?.length){let c=e.orderBy;l=l.map((u,d)=>({r:u,idx:d})).sort((u,d)=>{for(let p of c){let h=u.r[ct(p.col)],m=d.r[ct(p.col)];if(h===m)continue;let f=typeof h=="number"&&typeof m=="number"?h>m?1:-1:String(h)>String(m)?1:-1;return p.dir==="desc"?-f:f}return d.idx-u.idx}).map(u=>u.r)}return e.offset!==void 0&&(l=l.slice(e.offset)),e.limit!==void 0&&(l=l.slice(0,e.limit)),lt(l,l.length)}execInsert(e){let t=this.obtain(e.table),r=[],s=0,o=e.rows.map(i=>({...i}));for(let i of o){let a=Object.keys(i);t.pk&&!(t.pk.col in i)&&(i[t.pk.col]=t.pk.defaultUuid?Al():`mem-${t.nextId}`);for(let c of t.defaultNow)c in i||(i[c]=new Date().toISOString());for(let[c,u]of t.defaultVals)c in i||(i[c]=u);for(let c of Object.keys(i))i[c]=Er(c,void 0,i[c],i);let l;for(let c of t.uniques)if(c in i&&i[c]!=null){let u=t.rows.find(d=>be(d[c],i[c]));if(u){l={u:c,row:u};break}}if(!l){for(let c of t.groups)if(c.every(u=>u in i&&i[u]!=null)){let u=t.rows.find(d=>c.every(p=>be(d[p],i[p])));if(u){l={u:c.join(","),row:u};break}}}if(l){if(!e.onConflict)throw new D(`\u6570\u636E\u5E93\u9519\u8BEF: duplicate key value violates unique constraint "${l.u}"`,409);if(e.onConflict.update){if(e.onConflict.merge)for(let[c,u]of Object.entries(e.onConflict.merge))l.row[c]=Er(c,l.row[c],u,l.row);else{let c=Array.isArray(e.onConflict.col)?new Set(e.onConflict.col):e.onConflict.col?new Set([e.onConflict.col]):null;for(let u of a)c?.has(u)||(l.row[u]=i[u])}s++,e.returning&&r.push(e.returning==="*"?{...l.row}:fn(l.row,e.returning))}continue}t.rows.push(i),t.nextId++,s++,e.returning&&r.push(e.returning==="*"?{...i}:fn(i,e.returning))}return lt(r,s)}execUpdate(e){let t=this.table(e.table),r=[],s=[];for(let i of t.rows)if(!e.where||Re(i,e.where,void 0)){let a={...i};for(let[l,c]of Object.entries(e.sets))if(Ol(c))a[l]=Er(l,a[l],c,a);else if(It(c))if(/^now\(\)$/i.test(c.__raw.trim()))a[l]=new Date().toISOString();else throw new $("raw SET","memory-sql: raw SET \u503C\u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09");else a[l]=c;s.push({row:i,next:a})}let o=new Map(s.map(i=>[i.row,i.next]));for(let{row:i,next:a}of s){for(let l of t.uniques){if(!(l in a)||a[l]==null)continue;if(t.rows.some(u=>u!==i&&be((o.get(u)??u)[l],a[l])))throw new D(`\u6570\u636E\u5E93\u9519\u8BEF: duplicate key value violates unique constraint "${l}"`,409)}for(let l of t.groups){if(!l.every(u=>u in a&&a[u]!=null))continue;if(t.rows.some(u=>u!==i&&l.every(d=>be((o.get(u)??u)[d],a[d]))))throw new D(`\u6570\u636E\u5E93\u9519\u8BEF: duplicate key value violates unique constraint "${l.join(", ")}"`,409)}}for(let{row:i,next:a}of s){for(let[l,c]of Object.entries(a))i[l]=c;e.returning&&r.push(e.returning==="*"?{...i}:fn(i,e.returning))}return lt(r,s.length)}execDelete(e){Or(e.where);let t=this.table(e.table),r=t.rows.length,s=[],o=[];for(let i of t.rows)!e.where||Re(i,e.where,void 0)?e.returning&&o.push(e.returning==="*"?{...i}:fn(i,e.returning)):s.push(i);return t.rows=s,lt(o,r-s.length)}assertTableExists(e,t){if(t&&!this.tables.has(t))throw new $("relation",`memory-sql: ${e} \u8868 '${t}' \u4E0D\u5B58\u5728\uFF08relation does not exist\u2014\u2014\u5BF9\u9F50\u771F\u5E93 42P01\uFF09`)}table(e){let t=this.tables.get(e);if(!t)throw new $("relation",`memory-sql: \u8868 '${e}' \u4E0D\u5B58\u5728\uFF08relation does not exist\u2014\u2014\u5BF9\u9F50\u771F\u5E93 42P01\uFF09`);return t}obtain(e){let t=this.tables.get(e);return t||(t={state:"observed",rows:[],nextId:1,uniques:new Set,groups:[],defaultNow:new Set,defaultVals:new Map,columns:[],columnTypes:{}},this.tables.set(e,t)),t}toDeclared(e){let t=this.obtain(e);return t.state="declared",t}hasTable(e){return this.tables.has(e)}inspectTable(e){let t=this.tables.get(e);if(!t)throw new $("relation",`memory-sql: \u8868 '${e}' \u4E0D\u5B58\u5728\uFF0842P01\uFF09`);return{state:t.state,columns:[...t.columns],columnTypes:{...t.columnTypes},constraints:{pk:t.pk?{...t.pk}:void 0,uniques:[...t.uniques],groups:t.groups.map(r=>[...r]),defaultNow:[...t.defaultNow],defaultVals:{...t.defaultVals}}}}schemaSnapshot(){let e=[];for(let[t,r]of this.tables)e.push({name:t,columns:r.columns.map(s=>({name:s,type:(r.columnTypes[s]??"TEXT").toLowerCase()}))});return e}getColumnType(e,t){return this.tables.get(e)?.columnTypes[t]}getColumnTypes(e){return this.tables.get(e)?.columns.map(t=>this.tables.get(e).columnTypes[t]??"text")??[]}snapshot(){let e=new Map;for(let[t,r]of this.tables)e.set(t,{rows:r.rows.map(s=>({...s})),nextId:r.nextId,columns:[...r.columns],columnTypes:{...r.columnTypes},pk:r.pk?{...r.pk}:void 0,uniques:[...r.uniques],groups:r.groups.map(s=>[...s]),state:r.state,defaultNow:[...r.defaultNow],defaultVals:Object.fromEntries(r.defaultVals)});return e}restore(e){let t=new Set;for(let[r,s]of e)this.tables.set(r,{state:s.state,rows:s.rows.map(o=>({...o})),nextId:s.nextId,columns:[...s.columns],columnTypes:{...s.columnTypes},pk:s.pk?{...s.pk}:void 0,uniques:new Set(s.uniques),groups:(s.groups??[]).map(o=>[...o]),defaultNow:new Set(s.defaultNow),defaultVals:new Map(Object.entries(s.defaultVals??{}))}),t.add(r);for(let r of this.tables.keys())t.has(r)||this.tables.delete(r)}applySchema(e){for(let t of e.tables??[]){let r=this.toDeclared(t.name);r.columns=[],r.columnTypes={};for(let[s,o]of Object.entries(t.columns)){let i=o,a=i.metaInfo,l=a.column??s;r.columns.push(l),r.columnTypes[l]=(t.columnTypes?.[l]??Vt(i)).toLowerCase(),a.pk&&(r.pk={col:l,defaultUuid:a.default==="random"}),a.unique&&r.uniques.add(l),a.default==="now"?r.defaultNow.add(l):a.default!==void 0&&a.default!=="random"&&r.defaultVals.set(l,a.default)}for(let s of t.uniques??[])s.length>1&&r.groups.push(s)}}executeDdl(e){if(e.op==="createTable"&&e.table){let t=this.toDeclared(e.table),r=(e.columns??[]).filter(s=>s.type!=="table-constraint");if(t.columns.length===0){t.columns=r.map(s=>s.name);for(let s of r)t.columnTypes[s.name]=s.type.toLowerCase()}else{for(let s of r)t.columns.includes(s.name)||(t.columns.push(s.name),t.columnTypes[s.name]=s.type.toLowerCase());for(let s of t.rows)for(let o of r)!(o.name in s)&&o.defaultVal!==void 0&&(s[o.name]=o.defaultVal)}for(let s of e.columns??[]){if(s.type==="table-constraint"){s.constraintCols&&s.constraintCols.length>1&&t.groups.push(s.constraintCols);continue}s.pk&&(t.pk={col:s.name,defaultUuid:s.defaultUuid}),s.unique&&t.uniques.add(s.name),s.defaultNow&&t.defaultNow.add(s.name),s.defaultVal!==void 0&&t.defaultVals.set(s.name,s.defaultVal)}}else if(e.op==="alterAddColumn"&&e.table&&e.column){let t=this.table(e.table);if(!t.columns.includes(e.column)&&(t.columns.push(e.column),e.columnType&&(t.columnTypes[e.column]=e.columnType),e.defaultVal!==void 0)){let r=typeof e.defaultVal=="object"&&e.defaultVal!==null&&"__now"in e.defaultVal?new Date().toISOString():e.defaultVal;t.defaultVals.set(e.column,r);for(let s of t.rows)e.column in s||(s[e.column]=r)}}else if(e.op==="dropTable"&&e.table)this.tables.delete(e.table);else if(e.op==="dropEnum"&&e.table)this.enums.delete(e.table);else if(e.op==="alterEnumAddValue"&&e.table){let t=this.enums.get(e.table)??[];for(let r of e.enumValues??[])t.includes(r)||t.push(r);this.enums.set(e.table,t)}else e.op==="createEnum"&&e.table&&(this.enums.has(e.table)||this.enums.set(e.table,e.enumValues??[]));return lt([],0)}};function $o(n){if(Array.isArray(n))return n;if(typeof n=="string")try{let e=JSON.parse(n);if(Array.isArray(e))return e}catch{}return n==null?[]:[n]}function No(n){if(Array.isArray(n))return n;if(typeof n=="string")try{let e=JSON.parse(n);if(Array.isArray(e))return e}catch{}return n==null?[]:[]}function Fo(n,e){let t=0,r=0,s=0,o=Math.min(n.length,e.length);for(let i=0;i<o;i++)t+=n[i]*e[i],r+=n[i]*n[i],s+=e[i]*e[i];return r&&s?t/(Math.sqrt(r)*Math.sqrt(s)):0}function Er(n,e,t,r){if(typeof t!="object"||t===null)return t;let s=t;if("__jsonbAppend"in s)return[...$o(e),...$o(s.__jsonbAppend)];if("__inc"in s)return Number(e??0)+Number(s.__inc);if("__now"in s)return new Date().toISOString();if("__interval"in s){let[o,i]=s.__interval;return new Date(Date.now()+o*Wo(i)).toISOString()}return"__colRef"in s?r[String(s.__colRef)]:"__monthStart"in s?Lo(t):t}function Ol(n){return typeof n=="object"&&n!==null&&["__jsonbAppend","__inc","__now","__interval","__colRef","__monthStart"].some(e=>e in n)}function Wo(n){switch(n){case"day":return 864e5;case"hour":return 36e5;case"minute":return 6e4;default:return 1e3}}function Lo(n){if(typeof n=="object"&&n!==null){if("__interval"in n){let[e,t]=n.__interval;return new Date(Date.now()+e*Wo(t)).toISOString()}if("__monthStart"in n){let e=new Date;return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),1)).toISOString()}}return n}function lt(n,e){let t=n;return Object.defineProperty(t,"affectedRows",{value:e,enumerable:!1,writable:!0,configurable:!0}),t}function fn(n,e){let t={};for(let r of e)r in n&&(t[r]=n[r]);return t}function Pl(n,e,t,r,s){for(let o of e){if(o==="*"||o===""||/^\d+$/.test(o)||!/^[\w.]+$/.test(o)||s?.has(o)||s?.has(o.slice(o.lastIndexOf(".")+1)))continue;let i=o.includes(".")?o.slice(o.lastIndexOf(".")+1):o;if(t.some(l=>l.cols.has(i)))continue;let a=[...new Set(t.flatMap(l=>[...l.cols]))].sort();throw new $("\u672A\u77E5\u5217",`memory-sql: ${n} \u672A\u77E5\u5217 '${o}'\u2014\u2014${r} \u5408\u6CD5\u5217\uFF1A${a.join(", ")}`)}}function Ar(n){let e=[];for(let[t,r]of Object.entries(n)){if(t==="or"||t==="and"){for(let s of r)e.push(...Ar(s));continue}t!=="__raw"&&(e.push(t),typeof r=="object"&&r!==null&&!Array.isArray(r)&&"col"in r&&e.push(String(r.col)))}return e}function me(n,e,t){if(n==null)return;if(e in n)return n[e];let r=e.indexOf(".");if(r>=0){let s=e.slice(r+1);return s in n?n[s]:void 0}for(let[s,o]of Object.entries(n))if(s.slice(s.indexOf(".")+1)===e)return o}function ct(n){let e=n.lastIndexOf(".");return e>=0?n.slice(e+1):n}function _l(n){let e={};for(let[t,r]of Object.entries(n))e[ct(t)]=r;return e}function It(n){return typeof n=="object"&&n!==null&&"__raw"in n}function Or(n,e="where"){if(n)for(let[t,r]of Object.entries(n)){if(r===void 0)throw new $(`weifuwu/db: ${e}.${t} \u4E0D\u80FD\u4E3A undefined\u2014\u2014\u7701\u7565\u8BE5\u952E\u6216\u663E\u5F0F isNull`);typeof r=="object"&&r!==null&&Or(r,`${e}.${t}`)}}function Re(n,e,t){for(let[r,s]of Object.entries(e)){if(r==="or"){if(!s.some(i=>Re(n,i,t)))return!1;continue}if(r==="and"){if(!s.every(i=>Re(n,i,t)))return!1;continue}if(typeof s=="object"&&s!==null){let o=s,i=me(n,r,t);if(!["col","eq","gt","gte","lt","lte","ne","in","notIn","like","ilike","isNull","between"].some(c=>o[c]!==void 0)){if(!be(i,s))return!1;continue}let l=c=>{if(typeof c=="object"&&c!==null&&("__interval"in c||"__monthStart"in c))return Lo(c);if(!It(c))return c;let u=c.__raw.trim(),d=/^now\(\)\s*-\s*interval\s*'([0-9]+)\s*(days?|hours?|minutes?)'$/i.exec(u);if(/^now\(\)$/i.test(u))return new Date().toISOString();if(d){let h=Number(d[1]),m=d[2].toLowerCase(),f=m.startsWith("day")?h*864e5:m.startsWith("hour")?h*36e5:h*6e4;return new Date(Date.now()-f).toISOString()}let p=/^date_trunc\('(month|day|week|hour|minute)',\s*now\(\)\)$/i.exec(u);if(p){let h=new Date,m=p[1].toLowerCase();return m==="month"?new Date(Date.UTC(h.getUTCFullYear(),h.getUTCMonth(),1)).toISOString():m==="day"?new Date(Date.UTC(h.getUTCFullYear(),h.getUTCMonth(),h.getUTCDate())).toISOString():m==="hour"?new Date(h.setUTCMinutes(0,0,0)).toISOString():m==="minute"?new Date(h.setUTCSeconds(0,0)).toISOString():new Date(h).toISOString()}throw new $("WHERE \u503C\u8868\u8FBE\u5F0F",`memory-sql: WHERE \u503C\u8868\u8FBE\u5F0F\u4E0D\u652F\u6301\uFF08\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u7528\u771F\u5E93\uFF09\uFF1A${u}`)};if(o.col!==void 0&&!be(i,me(n,o.col,t))||o.eq!==void 0&&!be(i,l(o.eq))||o.gt!==void 0&&mn(i,l(o.gt))<=0||o.gte!==void 0&&mn(i,l(o.gte))<0||o.lt!==void 0&&mn(i,l(o.lt))>=0||o.lte!==void 0&&mn(i,l(o.lte))>0||o.ne!==void 0&&be(i,l(o.ne))||o.in&&!o.in.some(c=>be(i,l(c)))||o.notIn&&o.notIn.some(c=>be(i,l(c)))||o.like!==void 0&&(i==null||!Do(o.like).test(String(i)))||o.ilike!==void 0&&(i==null||!Do(o.ilike,!0).test(String(i))))return!1;if(o.between){let[c,u]=o.between;if(!(Number(i)>=Number(c)&&Number(i)<=Number(u)))return!1}if(o.isNull!==void 0&&i==null!==o.isNull)return!1;continue}throw process.env.PGDBG2&&console.error("[mmw where]",JSON.stringify({col:r,field:s})),new $("WHERE \u503C\u5F62\u6001",`memory-sql: WHERE \u5217 ${r} \u503C\u5FC5\u987B\u4E3A\u7B97\u5B50\u5BF9\u8C61\uFF08\u88F8\u6807\u91CF/\u6570\u7EC4/null \u5F62\u6001\u5DF2\u79FB\u9664\u2014\u2014\u7528 { eq: v } / { in: [...] } / { isNull: true }\uFF09`)}return!0}function Do(n,e=!1){let t="";for(let r=0;r<n.length;r++){let s=n[r];if(s==="\\"){let o=n[r+1];if(o==="%"||o==="_"||o==="\\"){t+=jo(o),r++;continue}t+="\\\\";continue}if(s==="%"){t+=".*";continue}if(s==="_"){t+=".";continue}t+=jo(s)}return new RegExp(`^${t}$`,e?"i":"")}function jo(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function mn(n,e){if(typeof n=="number"&&typeof e=="number")return n>e?1:n<e?-1:0;let t=String(n),r=String(e);return t>r?1:t<r?-1:0}function be(n,e){return n===e?!0:n===null||e===null?!1:typeof n=="object"&&typeof e=="object"?JSON.stringify(n)===JSON.stringify(e):!1}function Pr(n){let e=n??new $t;return{orm:qt(Gt(e)),mem:e,close:async()=>e.close()}}var fv=new Fl;var yv=new TextDecoder,bv=new TextEncoder;var Ul=[{name:"GET",minArity:1,maxArity:1},{name:"KEYS",minArity:1,maxArity:1},{name:"SET",minArity:2,maxArity:5,parse(n){let[e,t,...r]=n,s,o=!1;for(let a=0;a<r.length;a+=2){let l=String(r[a]).toUpperCase(),c=r[a+1];if(l==="EX"&&c!==void 0)s=Number(c)*1e3;else if(l==="PX"&&c!==void 0)s=Number(c);else if(l==="KEEPTTL")o=!0;else throw new $(`ERR syntax error: SET \u9009\u9879 ${l} \u4E0D\u652F\u6301`)}if(s!==void 0&&!Number.isFinite(s))throw new $("ERR value is not an integer or out of range");let i={keepTtl:o};return s!==void 0&&(i.ttl=s),{args:[String(e),String(t)],meta:i}}},{name:"EXISTS",minArity:1},{name:"DEL",minArity:1},{name:"EXPIRE",minArity:2,maxArity:3,parse(n){return{args:[String(n[0]),String(n[1])],meta:{ttlMs:Number(n[1])*1e3}}}},{name:"PEXPIRE",minArity:2,maxArity:3,parse(n){return{args:[String(n[0]),String(n[1])],meta:{ttlMs:Number(n[1])}}}},{name:"TTL",minArity:1,maxArity:1},{name:"INCR",minArity:1,maxArity:1},{name:"INCRBY",minArity:2,maxArity:2},{name:"STRLEN",minArity:1,maxArity:1},{name:"APPEND",minArity:2,maxArity:2},{name:"MGET",minArity:1},{name:"MSET",minArity:2},{name:"HSET",minArity:3},{name:"HGET",minArity:2,maxArity:2},{name:"HDEL",minArity:2},{name:"HGETALL",minArity:1,maxArity:1},{name:"HEXISTS",minArity:2,maxArity:2},{name:"HLEN",minArity:1,maxArity:1},{name:"HKEYS",minArity:1,maxArity:1},{name:"HVALS",minArity:1,maxArity:1},{name:"HINCRBY",minArity:3,maxArity:3},{name:"LPUSH",minArity:2},{name:"RPUSH",minArity:2},{name:"LPOP",minArity:1,maxArity:2},{name:"RPOP",minArity:1,maxArity:2},{name:"LLEN",minArity:1,maxArity:1},{name:"LRANGE",minArity:3,maxArity:3},{name:"LSET",minArity:3,maxArity:3},{name:"LINDEX",minArity:2,maxArity:2},{name:"BLPOP",minArity:2,parse(n){let e=Number(n[n.length-1]);if(!Number.isFinite(e))throw new $("ERR timeout is not a float");return{args:n.map(String),meta:{timeoutMs:e*1e3}}}},{name:"SADD",minArity:2},{name:"SREM",minArity:2},{name:"SMEMBERS",minArity:1,maxArity:1},{name:"SISMEMBER",minArity:2,maxArity:2},{name:"SCARD",minArity:1,maxArity:1},{name:"ZADD",minArity:3},{name:"ZREM",minArity:2},{name:"ZRANGE",minArity:3},{name:"ZRANGEBYSCORE",minArity:3},{name:"ZREMRANGEBYSCORE",minArity:3,maxArity:3},{name:"ZCARD",minArity:1,maxArity:1},{name:"ZSCORE",minArity:2,maxArity:2},{name:"XADD",minArity:4},{name:"XREADGROUP",minArity:5},{name:"XACK",minArity:3},{name:"XPENDING",minArity:2},{name:"XAUTOCLAIM",minArity:5},{name:"XGROUP",minArity:3},{name:"XLEN",minArity:1,maxArity:1},{name:"XRANGE",minArity:3},{name:"XDEL",minArity:2},{name:"SUBSCRIBE",minArity:1},{name:"UNSUBSCRIBE",minArity:0},{name:"PSUBSCRIBE",minArity:1},{name:"PUNSUBSCRIBE",minArity:0},{name:"PUBLISH",minArity:2,maxArity:2},{name:"PING",minArity:0},{name:"ECHO",minArity:1,maxArity:1},{name:"SELECT",minArity:1,maxArity:1},{name:"FLUSHALL",minArity:0},{name:"FLUSHDB",minArity:0},{name:"CLIENT",minArity:1},{name:"INFO",minArity:0},{name:"TIME",minArity:0},{name:"DBSIZE",minArity:0},{name:"AUTH",minArity:1,maxArity:2},{name:"QUIT",minArity:0}],Vl=new Map(Ul.map(n=>[n.name,n]));function _r(n){let e=n.name.toUpperCase(),t=Vl.get(e);if(!t)throw new $(`ERR unknown command '${e}'`);if(n.args.length<t.minArity)throw new $(`ERR wrong number of arguments for '${e}' command`);if(t.maxArity!==void 0&&n.args.length>t.maxArity)throw new $(`ERR wrong number of arguments for '${e}' command`);return{def:t,parsed:t.parse?t.parse(n.args):{args:n.args}}}var Mr=class{cmds=[];redis;constructor(e){this.redis=e}set(e,t,r){return this.cmds.push(r!==void 0?{name:"SET",args:[e,t,"EX",r]}:{name:"SET",args:[e,t]}),this}get(e){return this.cmds.push({name:"GET",args:[e]}),this}del(...e){return this.cmds.push({name:"DEL",args:e}),this}incr(e){return this.cmds.push({name:"INCR",args:[e]}),this}expire(e,t){return this.cmds.push({name:"EXPIRE",args:[e,t]}),this}ttl(e){return this.cmds.push({name:"TTL",args:[e]}),this}raw(e,...t){return this.cmds.push({name:e,args:t}),this}async exec(){let e=this.cmds;this.cmds=[];let t=[];for(let r of e)try{t.push(await this.redis.command(r.name,...r.args))}catch(s){t.push(s)}return t}},Ir=class{subs=new Map;connected=!1;redis;constructor(e){this.redis=e,e._registerSubscriber(this)}async connect(){this.connected=!0}async subscribe(e,t){this.subs.set(`s:${e}`,t)}async psubscribe(e,t){this.subs.set(`p:${e}`,t)}async close(){this.redis._unregisterSubscriber(this),this.subs.clear()}_dispatch(e,t){if(!this.connected)return!1;let r=!1;for(let[s,o]of this.subs)if(s.startsWith("s:"))s.slice(2)===e&&(o(e,t),r=!0);else{let i=s.slice(2);new RegExp("^"+i.split("*").map(l=>l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$").test(e)&&(o(e,t),r=!0)}return r}},He=class{strings=new Map;hashes=new Map;lists=new Map;sets=new Map;zsets=new Map;streams=new Map;subscribers=new Set;seq=0;closed=!1;_registerSubscriber(e){this.subscribers.add(e)}_unregisterSubscriber(e){this.subscribers.delete(e)}expired(e){let t=this.strings.get(e);return!t||t.expiresAt===null?!1:t.expiresAt<=Date.now()?(this.strings.delete(e),!0):!1}async get(e){return this.assertOpen(),this.expired(e)?null:this.strings.get(e)?.value??null}async getBuffer(e){let t=await this.get(e);return t===null?null:new TextEncoder().encode(t)}async set(e,t,r){return this.assertOpen(),this.strings.set(e,{value:String(t),expiresAt:r?Date.now()+r*1e3:null}),"OK"}async del(...e){this.assertOpen();let t=0;for(let r of e)this.strings.delete(r)&&t++,this.hashes.delete(r)&&t++,this.lists.delete(r)&&t++,this.sets.delete(r)&&t++,this.zsets.delete(r)&&t++,this.streams.delete(r)&&t++;return t}async incr(e){this.assertOpen();let t=this.strings.get(e);t&&t.expiresAt!==null&&t.expiresAt<=Date.now()&&this.strings.delete(e);let r=Number(this.strings.get(e)?.value??"0");if(!Number.isInteger(r))throw new $("ERR value is not an integer or out of range");let s=r+1;return this.strings.set(e,{value:String(s),expiresAt:this.strings.get(e)?.expiresAt??null}),s}async incrby(e,t){this.assertOpen();let r=this.strings.get(e);r&&r.expiresAt!==null&&r.expiresAt<=Date.now()&&this.strings.delete(e);let s=Number(this.strings.get(e)?.value??"0");if(!Number.isInteger(s)||!Number.isInteger(t))throw new $("ERR value is not an integer or out of range");let o=s+t;return this.strings.set(e,{value:String(o),expiresAt:this.strings.get(e)?.expiresAt??null}),o}async expire(e,t){this.assertOpen();let r=this.strings.get(e);return r?(r.expiresAt=Date.now()+t*1e3,1):0}async ttl(e){this.assertOpen();let t=this.strings.get(e);if(!t)return-2;if(t.expiresAt===null)return-1;let r=t.expiresAt-Date.now();return Math.max(0,Math.ceil(r/1e3))}async mget(...e){return Promise.all(e.map(t=>this.get(t)))}async mset(...e){this.assertOpen();for(let t=0;t<e.length;t+=2)this.strings.set(String(e[t]),{value:String(e[t+1]),expiresAt:null});return"OK"}async exists(...e){this.assertOpen();let t=0;for(let r of e)await this.get(r)!==null&&t++;return t}async setnx(e,t){this.assertOpen();let r=this.strings.get(e);return r&&r.expiresAt!==null&&r.expiresAt<=Date.now()&&this.strings.delete(e),this.strings.has(e)?0:(this.strings.set(e,{value:String(t),expiresAt:null}),1)}async jsonGet(e){let t=await this.get(e);if(t===null)return null;try{return JSON.parse(t)}catch{return t}}async jsonSet(e,t,r){return this.set(e,JSON.stringify(t),r)}async cache(e,t,r){let s=await this.get(e);if(s!==null)try{return JSON.parse(s)}catch{return s}let o=await t();return o!==null&&await this.jsonSet(e,o,r),o}async hset(e,t,r){this.assertOpen();let s=this.hashes.get(e);s||(s=new Map,this.hashes.set(e,s));let o=!s.has(t);return s.set(t,String(r)),o?1:0}async hget(e,t){return this.assertOpen(),this.hashes.get(e)?.get(t)??null}async hgetall(e){this.assertOpen();let t=this.hashes.get(e);return t?Object.fromEntries(t):{}}async hdel(e,...t){this.assertOpen();let r=this.hashes.get(e);if(!r)return 0;let s=0;for(let o of t)r.delete(o)&&s++;return r.size===0&&this.hashes.delete(e),s}list(e){let t=this.lists.get(e);return t||(t=[],this.lists.set(e,t)),t}async lpush(e,...t){this.assertOpen();let r=this.list(e);for(let s of t)r.unshift(String(s));return r.length}async rpush(e,...t){this.assertOpen();let r=this.list(e);for(let s of t)r.push(String(s));return r.length}async lpop(e){this.assertOpen();let t=this.lists.get(e);if(!t||t.length===0)return null;let r=t.shift();return t.length===0&&this.lists.delete(e),r}async rpop(e){this.assertOpen();let t=this.lists.get(e);if(!t||t.length===0)return null;let r=t.pop();return t.length===0&&this.lists.delete(e),r}async lrange(e,t,r){this.assertOpen();let s=this.lists.get(e)??[],o=t<0?Math.max(0,s.length+t):t,i=r<0?s.length+r:Math.min(s.length-1,r);return o>i?[]:s.slice(o,i+1)}async sadd(e,...t){this.assertOpen();let r=this.sets.get(e);r||(r=new Set,this.sets.set(e,r));let s=0;for(let o of t){let i=String(o);r.has(i)||(r.add(i),s++)}return s}async srem(e,...t){this.assertOpen();let r=this.sets.get(e);if(!r)return 0;let s=0;for(let o of t)r.delete(String(o))&&s++;return r.size===0&&this.sets.delete(e),s}async smembers(e){return this.assertOpen(),[...this.sets.get(e)??[]]}async zadd(e,t,r){this.assertOpen();let s=this.zsets.get(e);s||(s=new Map,this.zsets.set(e,s));let o=String(r),i=!s.has(o);return s.set(o,t),i?1:0}async zrange(e,t,r){this.assertOpen();let s=this.zsets.get(e);if(!s)return[];let o=[...s.entries()].sort((l,c)=>l[1]-c[1]).map(([l])=>l),i=t<0?Math.max(0,o.length+t):t,a=r<0?o.length+r:Math.min(o.length-1,r);return i>a?[]:o.slice(i,a+1)}async publish(e,t){this.assertOpen();let r=String(t),s=0;for(let o of this.subscribers)o._dispatch(e,r)&&s++;return s}async pipeline(){return new Mr(this)}createSubscriber(){return new Ir(this)}async createConnection(){this.assertOpen();let e=this;return{get connected(){return!e.closed},command:(t,...r)=>e.command(t,...r),close:async()=>{}}}async flushdb(){return this.assertOpen(),this.strings.clear(),this.hashes.clear(),this.lists.clear(),this.sets.clear(),this.zsets.clear(),this.streams.clear(),"OK"}async close(){this.closed=!0;for(let e of this.subscribers)e.close().catch(()=>{});this.subscribers.clear()}assertOpen(){if(this.closed)throw new $("memory-redis: instance is closed")}async command(e,...t){this.assertOpen(),_r({name:e,args:t});let[r,s,o,i,a]=t;switch(e.toUpperCase()){case"GET":return this.get(String(r));case"LPUSH":return this.lpush(String(r),...t.slice(1));case"RPUSH":return this.rpush(String(r),...t.slice(1));case"LPOP":return this.lpop(String(r));case"RPOP":return this.rpop(String(r));case"LLEN":return this.lists.get(String(r))?.length??0;case"LRANGE":return this.lrange(String(r),Number(s),Number(o));case"SET":return this.set(String(r),String(s),o!==void 0?Number(o==="EX"?i:o):void 0);case"DEL":return this.del(...t.map(String));case"INCR":return this.incr(String(r));case"EXPIRE":return this.expire(String(r),Number(s));case"PEXPIRE":{let l=this.strings.get(String(r));return l?(l.expiresAt=Date.now()+Number(s),1):0}case"TTL":return this.ttl(String(r));case"FLUSHDB":return this.flushdb();case"ZADD":return this.zadd(String(r),Number(s),String(o));case"ZRANGEBYSCORE":{let l=this.zsets.get(String(r));if(!l)return[];let c=Number(s),u=Number(o);return[...l.entries()].filter(([,d])=>d>=c&&d<=u).sort((d,p)=>d[1]-p[1]).map(([d])=>d)}case"ZREM":return this.zrem(String(r),String(s));case"ZCARD":return this.zsets.get(String(r))?.size??0;case"ZREMRANGEBYSCORE":return this.zremrangebyscore(String(r),Number(s),Number(o));case"XADD":return this.xadd(String(r),String(s),t.slice(2));case"XLEN":return this.streams.get(String(r))?.entries.length??0;case"XGROUP":return String(r).toUpperCase()==="DESTROY"?this.xgroupDestroy(String(s),String(o)):this.xgroup(String(s),String(o),String(i));case"XREADGROUP":return this.xreadgroup(String(r),String(s),String(o),t);case"XACK":return this.xack(String(r),String(s),String(o));case"XAUTOCLAIM":return this.xautoclaim(String(r),String(s),String(o),Number(i),t);case"XPENDING":return this.xpending(String(r),String(s));default:throw new $(`memory-redis: command '${e}' unsupported (\u8BDA\u5B9E\u88C1\u526A\u2014\u2014\u9700\u771F\u5E93/\u8865\u5B9E\u73B0)`)}}async zrem(e,t){let r=this.zsets.get(e);if(!r)return 0;let s=r.delete(t)?1:0;return r.size===0&&this.zsets.delete(e),s}async zremrangebyscore(e,t,r){let s=this.zsets.get(e);if(!s)return 0;let o=0;for(let[i,a]of[...s.entries()])a>=t&&a<=r&&(s.delete(i),o++);return s.size===0&&this.zsets.delete(e),o}stream(e){let t=this.streams.get(e);return t||(t={entries:[],lastDelivered:new Map},this.streams.set(e,t)),t}async xadd(e,t,r){let s=this.stream(e);t==="*"&&(t=`${Date.now()}-${this.seq++}`);let o={};for(let i=0;i<r.length;i+=2)o[String(r[i])]=String(r[i+1]);return s.entries.push({id:t,fields:o,pending:null}),t}async xgroup(e,t,r){if(this.strings.has(e)&&!this.streams.has(e))throw new Error("WRONGTYPE Operation against a key holding the wrong kind of value");let s=this.stream(e);if(s.lastDelivered.has(t))throw new Error(`BUSYGROUP Consumer Group name already exists: ${t}`);return s.lastDelivered.set(t,r==="$"?s.entries.length:0),"OK"}async xgroupDestroy(e,t){let r=this.streams.get(e);return r&&r.lastDelivered.delete(t)?1:0}async xreadgroup(e,t,r,s){let o=s.indexOf("STREAMS"),i=String(s[o+1]),a=this.stream(i),l=s.indexOf("COUNT"),c=l>=0?Number(s[l+1]):1,u=s.indexOf("BLOCK"),d=u>=0?Number(s[u+1]):0,p=String(s[o+2]),h=a.lastDelivered.get(t);if(p===">"){let f=typeof h=="number"?h:0,g=a.entries.slice(f).filter(v=>!v.pending);if(g.length===0){if(d>0){await new Promise(x=>setTimeout(x,d));let v=a.lastDelivered.get(t),k=typeof v=="number"?v:0,w=a.entries.slice(k).filter(x=>!x.pending);if(w.length===0)return null;let b=w.slice(0,c);for(let x of b)x.pending={consumer:r,idleSince:Date.now()};return a.lastDelivered.set(t,k+b.length),[[i,b.map(x=>[x.id,gn(x.fields)])]]}return null}let y=g.slice(0,c);for(let v of y)v.pending={consumer:r,idleSince:Date.now()};return a.lastDelivered.set(t,f+y.length),[[i,y.map(v=>[v.id,gn(v.fields)])]]}let m=a.entries.filter(f=>f.pending?.consumer===r);return[[i,m.slice(0,c).map(f=>[f.id,gn(f.fields)])]]}async xack(e,t,...r){let s=this.streams.get(e);if(!s)return 0;let o=0;for(let i of r){let a=s.entries.find(l=>l.id===i);a?.pending&&(a.pending=null,o++)}return o}async xautoclaim(e,t,r,s,o){let i=this.streams.get(e);if(!i)return["0-0",[]];let a=o.indexOf("COUNT"),l=a>=0?Number(o[a+1]):1,c=Date.now(),d=i.entries.filter(p=>p.pending&&c-p.pending.idleSince>=s).slice(0,l);for(let p of d)p.pending={consumer:r,idleSince:c};return["0-0",d.map(p=>[p.id,gn(p.fields)])]}async xpending(e,t){let r=this.streams.get(e);if(!r)return[0,"0-0","0-0",[]];let s=r.entries.filter(i=>i.pending);if(s.length===0)return[0,"0-0","0-0",[]];let o=new Map;for(let i of s){let a=i.pending.consumer;o.set(a,(o.get(a)??0)+1)}return[s.length,s[0].id,s[s.length-1].id,[...o.entries()].map(([i,a])=>[i,a])]}};function gn(n){let e=[];for(let[t,r]of Object.entries(n))e.push(t,r);return e}import{AsyncLocalStorage as Hl}from"node:async_hooks";var Jv=new Hl;var oS=new TextEncoder;function Ho(n,e){let t=e?.wsAdapter!==void 0?e:{...e,wsAdapter:bn};return qr(n,t)}var Te=(n,e=200)=>new Response(JSON.stringify(n,null,2),{status:e,headers:{"Content-Type":"application/json; charset=utf-8"}});function Bo(n,e){let{orm:t,mem:r}=Pr(),s=new He,o=Vn({redis:s});e.redis=s,e.queue=o.queue,n.get("/api/demo/router",(c,u)=>Te({path:c.url?.split("?")[0],method:c.method,params:u.params,note:"Trie \u8DEF\u7531 + :id \u53C2\u6570\u6CE8\u5165"})),n.get("/api/demo/sql",async c=>{r.executeQuery({kind:"ddl",op:"createTable",table:"demo_items",ifNotExists:!0,columns:[{name:"id",type:"SERIAL",pk:!0,unique:!1,defaultNow:!1,defaultUuid:!1},{name:"name",type:"TEXT",pk:!1,unique:!1,defaultNow:!1,defaultUuid:!1},{name:"done",type:"BOOLEAN",pk:!1,unique:!1,defaultNow:!1,defaultUuid:!1}]});let u=await t.query.from("demo_items").orderBy("id").limit(5).run();return Te({engine:"MemorySql\uFF08\u6F14\u793A\uFF09\u2014\u2014\u751F\u4EA7\u6362 postgres()",rows:u})}),n.post("/api/demo/sql",async c=>{let{name:u}=await c.json(),d=await t.query.insert("demo_items").rows([{name:String(u??"\u4EFB\u52A1"),done:!1}]).returning("id").run();return Te({inserted:d[0]?.id},201)}),n.get("/api/demo/redis",async c=>{let u=await s.incr("demo:counter");return await s.get("demo:greeting")||await s.set("demo:greeting","\u6765\u81EA ctx.redis \u7684\u7F13\u5B58\u95EE\u5019",3600),Te({engine:"MemoryRedis\uFF08\u6F14\u793A\uFF09\u2014\u2014\u751F\u4EA7\u6362 redis()",counter:Number(u),greeting:await s.get("demo:greeting")})});let i=An({redis:s,windowMs:6e4,max:5,message:"\u6F14\u793A\u9650\u6D41\uFF1A1 \u5206\u949F\u6700\u591A 5 \u6B21\uFF08\u751F\u4EA7\u9608\u503C\u81EA\u884C\u914D\u7F6E\uFF09"});n.get("/api/demo/limit",i,c=>Te({ok:!0,note:"\u9650\u6D41\u901A\u8FC7\u2014\u2014\u7B2C 6 \u6B21\u8BF7\u6C42\u5C06\u8FD4\u56DE 429"}));let a=[];e.email={send:async c=>(a.push({to:c.to,subject:c.subject??"",text:c.text??""}),{accepted:!0})},n.get("/api/demo/email",async c=>{let u={to:"user@example.com",subject:"\u6F14\u793A\u90AE\u4EF6",text:"ctx.email \u5951\u7EA6\u2014\u2014Mailer \u63A5\u53E3\uFF0C\u9002\u914D\u5668\u53EF\u6362\uFF08SMTP/Resend/\u81EA\u5B9A\u4E49\uFF09"};return await e.email.send(u),Te({engine:"Mailer \u5951\u7EA6\uFF08\u5185\u5B58\u6355\u83B7\uFF09",sent:a[a.length-1],total:a.length})}),n.post("/api/demo/queue",async c=>{let{task:u}=await c.json(),{id:d}=await o.queue.add("demo-jobs",{task:String(u??"\u6F14\u793A\u4EFB\u52A1"),at:new Date().toISOString()});return Te({enqueued:d,note:"queue({ redis })\u2014\u2014XADD \u5165\u961F\uFF0Cworker \u963B\u585E\u8BFB\uFF08\u6A21\u5F0F A \u663E\u5F0F\u6CE8\u5165\uFF09"},201)}),n.get("/api/demo/queue",async c=>{let u=await o.queue.length("demo-jobs");return Te({queue:"demo-jobs",pending:u})});let l=0;setInterval(()=>{l++},3e4),n.get("/api/demo/cron",c=>Te({ticks:l,note:"\u6F14\u793A\u7528 setInterval\uFF1B\u751F\u4EA7\uFF1Actx.schedule('*/30 * * * * *', fn) \u6216 ctx.cron \u6CE8\u518C"})),n.use(Rr("/api/demo/graphql",async()=>({schema:`
118
118
  type Query { hello: String, add(a: Int!, b: Int!): Int! }
119
- `,resolvers:{Query:{hello:()=>"Hello from weifuwu GraphQL",add:(c,{a:u,b:d})=>u+d}}}))),n.ws("/ws/echo",{message:(c,u,d)=>{c.send(`echo: ${d.toString()}`)}})}var $r=[{id:"videoplayer",name:"VideoPlayer",desc:"\u89C6\u9891\u64AD\u653E\u5668\u2014\u2014\u539F\u751F video \u5C01\u88C5\uFF08controls/\u5C01\u9762/\u5BBD\u9AD8\u6BD4/\u4E8B\u4EF6\u2014\u2014\u96F6\u4F9D\u8D56\uFF09",sourceFile:"src/level5/client/components/VideoPlayer/VideoPlayer.ts",cssFile:"src/level5/client/components/VideoPlayer/VideoPlayer.css",testFile:"src/level5/client/components/VideoPlayer/VideoPlayer.test.ts"},{id:"math",name:"Math",desc:"\u8F7B\u91CF\u516C\u5F0F\u6E32\u67D3\u2014\u2014\u81EA\u7814 LaTeX \u5B50\u96C6\uFF08\u4E0A\u4E0B\u6807/\u5206\u6570/\u6839\u53F7/\u5E0C\u814A\u5B57\u6BCD\u2014\u2014\u96F6\u4F9D\u8D56\u4E0D\u5F15 KaTeX\uFF09",sourceFile:"src/level5/client/components/Math/Math.ts",cssFile:"src/level5/client/components/Math/Math.css",testFile:"src/level5/client/components/Math/Math.test.ts"},{id:"markdowneditor",name:"MarkdownEditor",desc:"\u5206\u5C4F Markdown \u7F16\u8F91\u5668\u2014\u2014textarea + \u5B9E\u65F6\u9884\u89C8\uFF08\u590D\u7528 Markdown parser \u96F6\u6F02\u79FB\uFF09",sourceFile:"src/level5/client/components/MarkdownEditor/MarkdownEditor.ts",cssFile:"src/level5/client/components/MarkdownEditor/MarkdownEditor.css",testFile:"src/level5/client/components/MarkdownEditor/MarkdownEditor.test.ts"},{id:"codeeditor",name:"CodeEditor",desc:"\u8F7B\u91CF\u4EE3\u7801\u7F16\u8F91\u5668\u2014\u2014textarea + \u884C\u53F7 + Tab \u7F29\u8FDB\uFF08\u96F6\u4F9D\u8D56\uFF0C\u4E0D\u5F15 Monaco\uFF09",sourceFile:"src/level5/client/components/CodeEditor/CodeEditor.ts",cssFile:"src/level5/client/components/CodeEditor/CodeEditor.css",testFile:"src/level5/client/components/CodeEditor/CodeEditor.test.ts"},{id:"imagecropper",name:"ImageCropper",desc:"\u56FE\u7247\u88C1\u526A\u2014\u2014canvas \u539F\u751F API + \u62D6\u62FD\u88C1\u526A\u6846 + \u6BD4\u4F8B\u63A7\u5236\uFF08\u96F6\u4F9D\u8D56\uFF09",sourceFile:"src/level5/client/components/ImageCropper/ImageCropper.ts",cssFile:"src/level5/client/components/ImageCropper/ImageCropper.css",testFile:"src/level5/client/components/ImageCropper/ImageCropper.test.ts"},{id:"wordcloud",name:"WordCloud",desc:"\u8BCD\u4E91\u2014\u2014\u6743\u91CD\u2192\u5B57\u53F7\u6620\u5C04 \xB7 \u5706\u5FC3\u540C\u5FC3\u73AF\u53D1\u6563\u5E03\u5C40 \xB7 SVG textLength \u5B9A\u5BBD\uFF08\u96F6\u4F9D\u8D56\u81EA\u7ED8\u2014\u2014SSR \u4E00\u81F4\u96F6\u91CD\u53E0\uFF09",sourceFile:"src/level5/client/components/WordCloud/WordCloud.ts",cssFile:"src/level5/client/components/WordCloud/WordCloud.css",testFile:"src/level5/client/components/WordCloud/WordCloud.test.ts",gotchas:["textLength \u5F3A\u5236\u8BCD\u5BBD=\u4F30\u7B97\u5BBD\uFF080.62\xD7ASCII/1.0\xD7CJK \u7CFB\u6570\uFF09\u2014\u2014lengthAdjust=spacing \u53EA\u8C03\u5B57\u8DDD\u4FDD\u5F62\u2014\u2014\u4E0D\u6362\u884C\u4E0D\u622A\u65AD","\u5E03\u5C40=\u540C\u5FC3\u73AF\u626B\u63CF\uFF08\u73AF\u5BBD=\u8BCD\u9AD8\u2014\u2014\u90BB\u73AF\u76F8\u63A5\u4E0D\u91CD\u53E0\uFF09\u2014\u2014\u6700\u5927\u8BCD\u5C45\u4E2D\u5FC3\u2014\u2014viewBox=\u5168\u90E8\u8BCD\u5305\u56F4\u76D2\uFF08\u81EA\u9002\u5E94\u96F6\u88C1\u526A\uFF09\u2014\u2014height \u4EC5\u663E\u793A\u9AD8","0 \u6743\u91CD\u8BCD\u8FC7\u6EE4\u4E0D\u6E32\u67D3 \xB7 \u5168\u7B49\u6743\u91CD \u2192 \u5168 maxFontSize\uFF08\u540C\u6743\u540C\u5C3A\u5BF8 Wordle \u8BED\u4E49\uFF09","\u53EF\u4EA4\u4E92\u5FC5\u987B pointer-events:bounding-box\u2014\u2014SVG text \u9ED8\u8BA4 visiblePainted=\u5B57\u5F62\u7B14\u753B\u547D\u4E2D\uFF08\u5B57\u6BCD\u95F4\u9699\u6F0F\u5230 svg \u6839\u2014\u2014\u70B9\u51FB\u4E0D\u89E6\u53D1\u5B9E\u8BC1\uFF09","\u8BCD key \u7528 word \u672C\u8EAB\uFF08\u542B\u7D22\u5F15\u65F6\u6392\u5E8F/\u6743\u91CD\u53D8\u5316\u5373 remove+create \u91CD\u5EFA\uFF09"]},{id:"wave",name:"Wave",desc:"\u70B9\u51FB\u6C34\u6CE2\u7EB9\u52A8\u6548\u2014\u2014\u5305\u88C5\u4EFB\u610F\u53EF\u70B9\u51FB\u5143\u7D20\uFF08\u7EAF CSS\uFF0Creduced-motion \u81EA\u52A8\u964D\u7EA7\uFF09",sourceFile:"src/level5/client/components/Wave/Wave.ts",cssFile:"src/level5/client/components/Wave/Wave.css",testFile:"src/level5/client/components/Wave/Wave.test.ts"},{id:"sortablelist",name:"SortableList",desc:"\u62D6\u62FD\u6392\u5E8F\u5217\u8868\u2014\u2014useDragDrop \u539F\u8BED + keyed \u8EAB\u4EFD\uFF08\u4EFB\u52A1/\u5B57\u6BB5/\u914D\u7F6E\u6392\u5E8F\uFF09",sourceFile:"src/level5/client/components/SortableList/SortableList.ts",cssFile:"src/level5/client/components/SortableList/SortableList.css",testFile:"src/level5/client/components/SortableList/SortableList.test.ts"},{id:"exportcsv",name:"ExportCSV",desc:"\u6570\u636E\u5BFC\u51FA CSV\u2014\u2014RFC 4180 \u8F6C\u4E49 + BOM\uFF08Excel \u517C\u5BB9\uFF09\u96F6\u4F9D\u8D56",sourceFile:"src/level5/client/components/ExportCSV/ExportCSV.ts",testFile:"src/level5/client/components/ExportCSV/ExportCSV.test.ts"},{id:"button",name:"Button",desc:"4 variants \xD7 3 sizes + loading + block + disabled",sourceFile:"src/level5/client/components/Button/Button.ts",cssFile:"src/level5/client/components/Button/Button.css",testFile:"src/level5/client/components/Button/Button.test.ts"},{id:"input",name:"Input",desc:"text/email/password/number\uFF0C\u652F\u6301 label/error/hint/required",sourceFile:"src/level5/client/components/Input/Input.ts",cssFile:"src/level5/client/components/Input/Input.css",testFile:"src/level5/client/components/Input/Input.test.ts"},{id:"textarea",name:"Textarea",desc:"\u591A\u884C\u6587\u672C\uFF0C\u652F\u6301 rows/label/error/hint",sourceFile:"src/level5/client/components/Textarea/Textarea.ts",cssFile:"src/level5/client/components/Textarea/Textarea.css",testFile:"src/level5/client/components/Textarea/Textarea.test.ts"},{id:"select",name:"Select",desc:"\u539F\u751F\u4E0B\u62C9\u9009\u62E9\u5668",gotchas:["\u53D7\u63A7\u8F93\u5165\u7EAA\u5F8B\uFF1Asearchable \u8F93\u5165\u7126\u70B9\u4E22\u5931\u2014\u2014useControlledInput \u5185\u90E8\u6001","\u4E8B\u4EF6 prop \u5224\u5B9A\uFF1Aon+\u5927\u5199\uFF08EVENT_RE\uFF09\u2014\u2014once/only \u7B49 on \u5F00\u5934\u5C5E\u6027\u9632\u8BEF\u5224","\u6D6E\u5C42\u5FC5\u987B portal\uFF08\xA75.4\uFF09\u2014\u2014absolute \u76F8\u5BF9\u7236\u5BB9\u5668\u5728 overflow \u4E0B\u88C1\u526A"],sourceFile:"src/level5/client/components/Select/Select.ts",cssFile:"src/level5/client/components/Select/Select.css",testFile:"src/level5/client/components/Select/Select.test.ts"},{id:"checkbox",name:"Checkbox",desc:"\u5E26 label \u7684\u590D\u9009\u6846\uFF0C\u652F\u6301 checked/disabled",sourceFile:"src/level5/client/components/Checkbox/Checkbox.ts",cssFile:"src/level5/client/components/Checkbox/Checkbox.css",testFile:"src/level5/client/components/Checkbox/Checkbox.test.ts"},{id:"switch",name:"Switch",desc:"\u5F00\u5173\u5207\u6362\uFF0C\u89C6\u89C9\u66FF\u4EE3 checkbox",sourceFile:"src/level5/client/components/Switch/Switch.ts",cssFile:"src/level5/client/components/Switch/Switch.css",testFile:"src/level5/client/components/Switch/Switch.test.ts"},{id:"radiogroup",name:"RadioGroup",desc:"\u5355\u9009\u7EC4\uFF0C\u652F\u6301 inline/options/value",sourceFile:"src/level5/client/components/RadioGroup/RadioGroup.ts",cssFile:"src/level5/client/components/RadioGroup/RadioGroup.css",testFile:"src/level5/client/components/RadioGroup/RadioGroup.test.ts"},{id:"segmentedcontrol",name:"SegmentedControl",desc:"\u5206\u6BB5\u5355\u9009\uFF08\u6A21\u5F0F\u5207\u6362/\u7B5B\u9009/\u6A21\u677F\uFF09\uFF0C\u652F\u6301 sm/block",sourceFile:"src/level5/client/components/SegmentedControl/SegmentedControl.ts",cssFile:"src/level5/client/components/SegmentedControl/SegmentedControl.css",testFile:"src/level5/client/components/SegmentedControl/SegmentedControl.test.ts"},{id:"slider",name:"Slider",desc:"\u8303\u56F4\u6ED1\u5757\uFF0C\u652F\u6301 min/max/step/label",gotchas:["\u6D4F\u89C8\u5668\u8868\u5355\u72B6\u6001\u6062\u590D\uFF08\u5237\u65B0/\u540E\u9000\uFF09\u8986\u76D6\u53D7\u63A7 value\u2014\u2014autocomplete=off + \u5185\u90E8 0-100 \u5F52\u4E00\u5316\u523B\u5EA6\uFF082000 slider \u5237\u65B0\u8DF3\u52A8\u4E8B\u6545\uFF09","\u62D6\u62FD\u4E2D\u6C14\u6CE1\u4F4D\u7F6E\u51BB\u7ED3\u2014\u2014usePopup \u951A\u70B9\u6052\u5B9A\u9700 popup.refresh() \u8DDF\u968F thumb"],sourceFile:"src/level5/client/components/Slider/Slider.ts",cssFile:"src/level5/client/components/Slider/Slider.css",testFile:"src/level5/client/components/Slider/Slider.test.ts"},{id:"form",name:"Form",desc:"\u5185\u7F6E\u9A8C\u8BC1\u89C4\u5219\uFF1Arequired/pattern/minLength/\u81EA\u5B9A\u4E49",gotchas:["\u4E09\u5C42\u4E00\u81F4\uFF08\xA76.3\uFF09\uFF1A\u6761\u4EF6\u6E32\u67D3 false \u662F\u7A7A\u6D1E\u5360\u4F4D\u2014\u2014{cond && <Alert/>} \u4E0D\u6EE4\u9664\u4E0D\u584C\u7F29\uFF08\u63D0\u4EA4\u6309\u94AE\u6D88\u5931\u4E8B\u6545\uFF09","\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 value \u5FC5\u987B\u914D onChange\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9"],sourceFile:"src/level5/client/components/Form/Form.ts",cssFile:"src/level5/client/components/Form/Form.css",testFile:"src/level5/client/components/Form/Form.test.ts"},{id:"field",name:"Field",desc:"label+error+hint \u5BB9\u5668",sourceFile:"src/level5/client/components/Field/Field.ts",cssFile:"src/level5/client/components/Field/Field.css",testFile:"src/level5/client/components/Field/Field.test.ts"},{id:"relationgraph",name:"RelationGraph",desc:"\u5173\u7CFB\u56FE\u8C31\u2014\u2014\u73AF\u5F62/\u7F51\u683C\u5E03\u5C40 + \u7C7B\u578B\u7740\u8272 + \u9009\u4E2D\u4EA4\u4E92\uFF08\u4EBA\u7269/\u7EC4\u7EC7/\u7F51\u7EDC\uFF09",sourceFile:"src/level5/client/components/RelationGraph/RelationGraph.ts",cssFile:"src/level5/client/components/RelationGraph/RelationGraph.css",testFile:"src/level5/client/components/RelationGraph/RelationGraph.test.ts"},{id:"appshell",name:"AppShell",desc:"\u5E94\u7528\u58F3\u2014\u2014\u54C1\u724C + \u5206\u7EC4\u5BFC\u822A + \u7528\u6237\u533A + \u4E3B\u5185\u5BB9\uFF08\u53D7\u63A7\u2014\u2014\u7236\u5C42\u9A71\u52A8\uFF09",sourceFile:"src/level5/client/components/AppShell/AppShell.ts",cssFile:"src/level5/client/components/AppShell/AppShell.css",testFile:"src/level5/client/components/AppShell/AppShell.test.ts"},{id:"filetree",name:"FileTree",desc:"\u6587\u4EF6\u6811\u6D4F\u89C8\u5668\u2014\u2014\u9762\u5305\u5C51 + \u5217\u8868/\u7F16\u8F91\u6001 + \u4E0A\u4F20\uFF08\u53D7\u63A7\u2014\u2014\u6570\u636E\u6E90\u65E0\u5173\uFF09",sourceFile:"src/level5/client/components/FileTree/FileTree.ts",cssFile:"src/level5/client/components/FileTree/FileTree.css",testFile:"src/level5/client/components/FileTree/FileTree.test.ts"},{id:"fileupload",name:"FileUpload",desc:"\u6587\u4EF6\u4E0A\u4F20\uFF0C\u62D6\u62FD\u533A + \u6587\u4EF6\u5217\u8868 + accept/maxSize",sourceFile:"src/level5/client/components/FileUpload/FileUpload.ts",cssFile:"src/level5/client/components/FileUpload/FileUpload.css",testFile:"src/level5/client/components/FileUpload/FileUpload.test.ts"},{id:"searchinput",name:"SearchInput",desc:"\u641C\u7D22\u8F93\u5165\u6846\uFF0C\u5E26\u6E05\u9664\u6309\u94AE",sourceFile:"src/level5/client/components/SearchInput/SearchInput.ts",cssFile:"src/level5/client/components/SearchInput/SearchInput.css",testFile:"src/level5/client/components/SearchInput/SearchInput.test.ts"},{id:"progressbar",name:"ProgressBar",desc:"\u8FDB\u5EA6\u6761\uFF0C\u652F\u6301 label/showValue",sourceFile:"src/level5/client/components/ProgressBar/ProgressBar.ts",cssFile:"src/level5/client/components/ProgressBar/ProgressBar.css",testFile:"src/level5/client/components/ProgressBar/ProgressBar.test.ts"},{id:"inputnumber",name:"InputNumber",desc:"\u6570\u5B57\u8F93\u5165\uFF1Amin/max/step + \u589E\u51CF\u6309\u94AE + precision",sourceFile:"src/level5/client/components/InputNumber/InputNumber.ts",cssFile:"src/level5/client/components/InputNumber/InputNumber.css",testFile:"src/level5/client/components/InputNumber/InputNumber.test.ts"},{id:"passwordinput",name:"PasswordInput",desc:"\u5BC6\u7801\u8F93\u5165\uFF1A\u773C\u775B\u6309\u94AE\u5207\u6362\u53EF\u89C1\u6027",sourceFile:"src/level5/client/components/PasswordInput/PasswordInput.ts",cssFile:"src/level5/client/components/PasswordInput/PasswordInput.css",testFile:"src/level5/client/components/PasswordInput/PasswordInput.test.ts"},{id:"tagsinput",name:"TagsInput",desc:"\u6807\u7B7E\u8F93\u5165\uFF1A\u56DE\u8F66/\u9017\u53F7\u6DFB\u52A0 + \u4E2D\u6587\u8F93\u5165\u6CD5\u611F\u77E5",sourceFile:"src/level5/client/components/TagsInput/TagsInput.ts",cssFile:"src/level5/client/components/TagsInput/TagsInput.css",testFile:"src/level5/client/components/TagsInput/TagsInput.test.ts"},{id:"table",name:"Table",desc:"\u53EF\u6392\u5E8F + \u81EA\u5B9A\u4E49 render + \u7A7A\u72B6\u6001",gotchas:["\u56FA\u5B9A\u5217\u5FC5\u987B\u663E\u5F0F width\uFF08\u7F3A\u7701 140 \u4F30\u7B97 + console.warn\u2014\u2014sticky \u504F\u79FB\u7D2F\u8BA1\u4F9D\u8D56\uFF09","\u6570\u7EC4\u7A7A\u6D1E\uFF1Achildren \u91CC {cond && <X/>} \u662F\u5360\u4F4D\u2014\u2014\u4E0D\u5F97\u8BEF\u5220\u4E0B\u4E00\u4E2A\u5144\u5F1F\uFF08\u63D0\u4EA4\u6309\u94AE\u6D88\u5931\u4E8B\u6545\u540C\u6E90\uFF09","\u884C\u5185\u7F16\u8F91\uFF08editable \u5217\uFF09\u5FC5\u987B\u914D onCellEdit\uFF08\u53D7\u63A7\u7EAA\u5F8B\uFF09"],sourceFile:"src/level5/client/components/Table/Table.ts",cssFile:"src/level5/client/components/Table/Table.css",testFile:"src/level5/client/components/Table/Table.test.ts"},{id:"card",name:"Card",desc:"\u5BB9\u5668\uFF0C\u652F\u6301 default/outlined/clickable",sourceFile:"src/level5/client/components/Card/Card.ts",cssFile:"src/level5/client/components/Card/Card.css",testFile:"src/level5/client/components/Card/Card.test.ts"},{id:"badge",name:"Badge",desc:"\u72B6\u6001\u6807\u7B7E + \u5706\u70B9\uFF0C6 \u79CD variant",sourceFile:"src/level5/client/components/Badge/Badge.ts",cssFile:"src/level5/client/components/Badge/Badge.css",testFile:"src/level5/client/components/Badge/Badge.test.ts"},{id:"tag",name:"Tag",desc:"\u6807\u7B7E\uFF0C\u652F\u6301 closable/onClose",sourceFile:"src/level5/client/components/Tag/Tag.ts",cssFile:"src/level5/client/components/Tag/Tag.css",testFile:"src/level5/client/components/Tag/Tag.test.ts"},{id:"avatar",name:"Avatar",desc:"\u5934\u50CF\uFF08\u9996\u5B57\u6BCD/\u56FE\u7247\uFF09\uFF0C3 \u79CD size",sourceFile:"src/level5/client/components/Avatar/Avatar.ts",cssFile:"src/level5/client/components/Avatar/Avatar.css",testFile:"src/level5/client/components/Avatar/Avatar.test.ts"},{id:"img",name:"Img",desc:"\u56FE\u7247 \\<img\\> \u7EC4\u4EF6\uFF1Afallback / lazy / preview \u70B9\u51FB\u653E\u5927",sourceFile:"src/level5/client/components/Img/Img.ts",cssFile:"src/level5/client/components/Img/Img.css",testFile:"src/level5/client/components/Img/Img.test.ts"},{id:"inview",name:"InView",desc:"\u8FDB\u5165\u89C6\u7A97\u540E\u61D2\u52A0\u8F7D\u5185\u5BB9\uFF0C\u652F\u6301 IntersectionObserver",sourceFile:"src/level5/client/components/InView/InView.ts",cssFile:"src/level5/client/components/InView/InView.css",testFile:"src/level5/client/components/InView/InView.test.ts"},{id:"timeline",name:"Timeline",desc:"\u65F6\u95F4\u7EBF\uFF1A\u8282\u70B9\u72B6\u6001\u8272 + \u65F6\u95F4 + \u5185\u5BB9\uFF08\u6267\u884C\u65E5\u5FD7/\u5BA1\u6279\u5386\u53F2\uFF09",sourceFile:"src/level5/client/components/Timeline/Timeline.ts",cssFile:"src/level5/client/components/Timeline/Timeline.css",testFile:"src/level5/client/components/Timeline/Timeline.test.ts"},{id:"descriptions",name:"Descriptions",desc:"\u63CF\u8FF0\u5217\u8868\uFF1Alabel/value \u6805\u683C + bordered + span\uFF08\u8BE6\u60C5\u9875\uFF09",sourceFile:"src/level5/client/components/Descriptions/Descriptions.ts",cssFile:"src/level5/client/components/Descriptions/Descriptions.css",testFile:"src/level5/client/components/Descriptions/Descriptions.test.ts"},{id:"avatargroup",name:"AvatarGroup",desc:"\u5934\u50CF\u7EC4\uFF1A\u5806\u53E0 + max \u6EA2\u51FA +N",sourceFile:"src/level5/client/components/AvatarGroup/AvatarGroup.ts",cssFile:"src/level5/client/components/AvatarGroup/AvatarGroup.css",testFile:"src/level5/client/components/AvatarGroup/AvatarGroup.test.ts"},{id:"markdown",name:"Markdown",desc:"AI \u56DE\u590D\u6E32\u67D3\uFF1A\u5B89\u5168\u5B50\u96C6 parser + \u4EE3\u7801\u5757 + \u94FE\u63A5\u767D\u540D\u5355",sourceFile:"src/level5/client/components/Markdown/Markdown.ts",cssFile:"src/level5/client/components/Markdown/Markdown.css",testFile:"src/level5/client/components/Markdown/Markdown.test.ts"},{id:"codeblock",name:"CodeBlock",desc:"\u4EE3\u7801\u5757\uFF1A\u8BED\u8A00\u6807\u7B7E + \u590D\u5236\u6309\u94AE + \u6A2A\u5411\u6EDA\u52A8",sourceFile:"src/level5/client/components/CodeBlock/CodeBlock.ts",cssFile:"src/level5/client/components/CodeBlock/CodeBlock.css",testFile:"src/level5/client/components/CodeBlock/CodeBlock.test.ts"},{id:"logviewer",name:"LogViewer",desc:"\u65E5\u5FD7\u6D41\uFF1AANSI \u7740\u8272 + \u865A\u62DF\u6EDA\u52A8 + \u81EA\u52A8\u8DDF\u968F + \u590D\u5236",sourceFile:"src/level5/client/components/LogViewer/LogViewer.ts",cssFile:"src/level5/client/components/LogViewer/LogViewer.css",testFile:"src/level5/client/components/LogViewer/LogViewer.test.ts"},{id:"jsonviewer",name:"JSONViewer",desc:"\u7ED3\u6784\u5316 JSON\uFF1A\u9012\u5F52\u6298\u53E0 + \u7C7B\u578B\u8272 + \u8DEF\u5F84\u590D\u5236 + \u61D2\u5C55\u5F00",sourceFile:"src/level5/client/components/JSONViewer/JSONViewer.ts",cssFile:"src/level5/client/components/JSONViewer/JSONViewer.css",testFile:"src/level5/client/components/JSONViewer/JSONViewer.test.ts"},{id:"diffview",name:"DiffView",desc:"\u4EE3\u7801 diff\uFF1ALCS \u884C\u7EA7\u5BF9\u6BD4 + \u672A\u53D8\u5757\u6298\u53E0 + \u4E09\u6001\u7740\u8272",sourceFile:"src/level5/client/components/DiffView/DiffView.ts",cssFile:"src/level5/client/components/DiffView/DiffView.css",testFile:"src/level5/client/components/DiffView/DiffView.test.ts"},{id:"sparkline",name:"Sparkline",desc:"\u8FF7\u4F60\u8D8B\u52BF\u7EBF\uFF1ASVG \u81EA\u7ED8 + \u5F52\u4E00\u5316 + \u5E73\u6ED1\u66F2\u7EBF + \u9762\u79EF\u586B\u5145",sourceFile:"src/level5/client/components/Sparkline/Sparkline.ts",cssFile:"src/level5/client/components/Sparkline/Sparkline.css",testFile:"src/level5/client/components/Sparkline/Sparkline.test.ts"},{id:"tour",name:"Tour",desc:"\u65B0\u624B\u5F15\u5BFC\uFF1A\u6B65\u9AA4\u6C14\u6CE1 + \u76EE\u6807\u9AD8\u4EAE + \u906E\u7F69 + \u952E\u76D8 Escape",sourceFile:"src/level5/client/components/Tour/Tour.ts",cssFile:"src/level5/client/components/Tour/Tour.css",testFile:"src/level5/client/components/Tour/Tour.test.ts"},{id:"kanban",name:"Kanban",desc:"\u770B\u677F\uFF1A\u539F\u751F DnD \u62D6\u62FD + \u8DE8\u5217/\u91CD\u6392 + \u60AC\u505C\u9AD8\u4EAE",gotchas:["enumerated \u5C5E\u6027\uFF08\xA76.2\uFF09\uFF1Adraggable \u7A7A\u5B57\u7B26\u4E32\u89E3\u6790\u4E3A false\u2014\u2014\u5FC5\u987B\u663E\u5F0F setAttribute true/false\uFF08\u62D6\u52A8\u53D8\u6587\u672C\u9009\u4E2D\u4E8B\u6545\uFF09"],sourceFile:"src/level5/client/components/Kanban/Kanban.ts",cssFile:"src/level5/client/components/Kanban/Kanban.css",testFile:"src/level5/client/components/Kanban/Kanban.test.ts"},{id:"pipeline",name:"Pipeline",desc:"Agent \u5DE5\u4F5C\u6D41 DAG\uFF1A\u5206\u5C42\u5E03\u5C40 + \u8D1D\u585E\u5C14\u8FDE\u7EBF + \u72B6\u6001\u8BED\u4E49\u8272 + \u73AF\u68C0\u6D4B",sourceFile:"src/level5/client/components/Pipeline/Pipeline.ts",cssFile:"src/level5/client/components/Pipeline/Pipeline.css",testFile:"src/level5/client/components/Pipeline/Pipeline.test.ts"},{id:"treeselect",name:"TreeSelect",desc:"\u6811\u5F62\u9009\u62E9\uFF1A\u5355\u9009/\u591A\u9009\uFF08\u7236\u5B50\u8054\u52A8\uFF09+ \u9009\u4E2D label \u56DE\u663E + \u53D7\u63A7\u7EAA\u5F8B",gotchas:["\u5F39\u7A97\u7EAA\u5F8B\uFF08\xA75.4\uFF09\uFF1A\u66FE\u9057\u6F0F portal\u2014\u2014absolute \u5728\u7236\u5BB9\u5668 overflow/transform \u4E0B\u88C1\u526A/\u9519\u4F4D\u2014\u2014\u7EDF\u4E00 usePopup","\u9009\u9879\u91CF\u5C0F\u573A\u666F\u641C\u7D22\u8FC7\u6EE4\u5DF2\u88C1\u526A\uFF08docs/client.md#\u80FD\u529B\u88C1\u526A\u767B\u8BB0 \u6C38\u4E45\u88C1\u526A\uFF09"],sourceFile:"src/level5/client/components/TreeSelect/TreeSelect.ts",cssFile:"src/level5/client/components/TreeSelect/TreeSelect.css",testFile:"src/level5/client/components/TreeSelect/TreeSelect.test.ts"},{id:"layout",name:"Layout",desc:"\u5E03\u5C40\u5916\u58F3\uFF1ASider \u6298\u53E0 + Header/Content/Footer \u9AA8\u67B6\uFF08antd Layout / shadcn Sidebar \u7B49\u4EF7\uFF09",sourceFile:"src/level5/client/components/Layout/Layout.ts",cssFile:"src/level5/client/components/Layout/Layout.css",testFile:"src/level5/client/components/Layout/Layout.test.ts"},{id:"popconfirm",name:"Popconfirm",desc:"\u6C14\u6CE1\u786E\u8BA4\uFF1A\u5371\u9669\u64CD\u4F5C\u9632\u8BEF\u89E6 + \u590D\u7528 usePopup \u57FA\u5EA7",gotchas:["\u6C14\u6CE1\u5185\u8868\u5355/\u81EA\u5B9A\u4E49\u7BAD\u5934\u5DF2\u88C1\u526A\uFF08Popover \u57FA\u5EA7 + \u5B9A\u4F4D\u5168\u5957\u590D\u7528\uFF09"],sourceFile:"src/level5/client/components/Popconfirm/Popconfirm.ts",cssFile:"src/level5/client/components/Popconfirm/Popconfirm.css",testFile:"src/level5/client/components/Popconfirm/Popconfirm.test.ts"},{id:"autocomplete",name:"AutoComplete",desc:"\u8F93\u5165\u8054\u60F3\uFF1A\u81EA\u7531\u8F93\u5165 + \u8FC7\u6EE4\u4E0B\u62C9 + \u952E\u76D8\u6D41 + \u9009\u4E2D\u56DE\u586B",gotchas:["\u53D7\u63A7\u8F93\u5165\u7EAA\u5F8B\uFF08\xA75.3\uFF09\uFF1A\u53D7\u63A7 input \u7126\u70B9\u4E22\u5931\u4E8B\u6545\u2014\u2014\u8F93\u5165\u671F\u95F4 value \u8D70\u5185\u90E8 keyword\uFF08useControlledInput\uFF09\uFF0C\u4E0D\u4F9D\u8D56\u53D7\u63A7 value \u56DE\u6D41","IME composition\uFF1A\u4E2D\u6587\u8F93\u5165\u7EC4\u5408\u671F\u95F4\u53D7\u63A7 value \u91CD\u7F6E\u6253\u65AD\u2014\u2014isComposing \u95E8\u63A7"],sourceFile:"src/level5/client/components/AutoComplete/AutoComplete.ts",cssFile:"src/level5/client/components/AutoComplete/AutoComplete.css",testFile:"src/level5/client/components/AutoComplete/AutoComplete.test.ts"},{id:"link",name:"Link",desc:"\u6587\u5B57\u94FE\u63A5\uFF1A\u8BED\u4E49\u8272/\u4E0B\u5212\u7EBF/disabled/\u65B0\u7A97\u53E3",sourceFile:"src/level5/client/components/Link/Link.ts",cssFile:"src/level5/client/components/Link/Link.css",testFile:"src/level5/client/components/Link/Link.test.ts"},{id:"floatbutton",name:"FloatButton",desc:"\u60AC\u6D6E\u6309\u94AE\u7EC4\uFF1A\u5C55\u5F00\u72B6\u6001\u673A + badge",sourceFile:"src/level5/client/components/FloatButton/FloatButton.ts",cssFile:"src/level5/client/components/FloatButton/FloatButton.css",testFile:"src/level5/client/components/FloatButton/FloatButton.test.ts"},{id:"navmenu",name:"NavMenu",desc:"\u9876\u90E8\u5BFC\u822A\uFF1A\u591A\u7EA7 hover \u5F39\u51FA + \u952E\u76D8\uFF08shadcn NavigationMenu\uFF09",sourceFile:"src/level5/client/components/NavMenu/NavMenu.ts",cssFile:"src/level5/client/components/NavMenu/NavMenu.css",testFile:"src/level5/client/components/NavMenu/NavMenu.test.ts"},{id:"space",name:"Space",desc:"\u95F4\u8DDD\u5BB9\u5668\uFF1Asize/direction/wrap + split \u5206\u9694\u7B26",sourceFile:"src/level5/client/components/Space/Space.ts",cssFile:"src/level5/client/components/Space/Space.css",testFile:"src/level5/client/components/Space/Space.test.ts"},{id:"grid",name:"Grid",desc:"24 \u6805\u683C + gutter + flex \u5BB9\u5668\u6A21\u5F0F\uFF08Row/Col/Flex \u7B49\u4EF7\uFF09",sourceFile:"src/level5/client/components/Grid/Grid.ts",cssFile:"src/level5/client/components/Grid/Grid.css",testFile:"src/level5/client/components/Grid/Grid.test.ts"},{id:"scrollbar",name:"Scrollbar",desc:"\u81EA\u5B9A\u4E49\u6EDA\u52A8\u5BB9\u5668\uFF1Awebkit \u6837\u5F0F + hover \u663E\u793A",sourceFile:"src/level5/client/components/Scrollbar/Scrollbar.ts",cssFile:"src/level5/client/components/Scrollbar/Scrollbar.css",testFile:"src/level5/client/components/Scrollbar/Scrollbar.test.ts"},{id:"alertgroup",name:"AlertGroup",desc:"\u901A\u77E5\u5408\u5E76\u7EC4\uFF1A\u22653 \u6761\u6298\u53E0\u4E3A +N\uFF0C\u70B9\u51FB\u5C55\u5F00",sourceFile:"src/level5/client/components/AlertGroup/AlertGroup.ts",cssFile:"src/level5/client/components/AlertGroup/AlertGroup.css",testFile:"src/level5/client/components/AlertGroup/AlertGroup.test.ts"},{id:"messagebubble",name:"MessageBubble",desc:"\u6D88\u606F\u6C14\u6CE1\uFF1Auser/assistant + streaming/error \u72B6\u6001 + actions",family:"ai-chat",sourceFile:"src/level5/client/components/MessageBubble/MessageBubble.ts",cssFile:"src/level5/client/components/MessageBubble/MessageBubble.css",testFile:"src/level5/client/components/MessageBubble/MessageBubble.test.ts"},{id:"highlight",name:"Highlight",desc:"\u641C\u7D22\u8BCD\u9AD8\u4EAE\uFF1A\u5206\u8BCD\u6E32\u67D3 mark\uFF0C\u5927\u5C0F\u5199\u4E0D\u654F\u611F",sourceFile:"src/level5/client/components/Highlight/Highlight.ts",cssFile:"src/level5/client/components/Highlight/Highlight.css",testFile:"src/level5/client/components/Highlight/Highlight.test.ts"},{id:"list",name:"List",desc:"\u901A\u7528\u5217\u8868\uFF1ArenderItem + divided + header/footer/empty",sourceFile:"src/level5/client/components/List/List.ts",cssFile:"src/level5/client/components/List/List.css",testFile:"src/level5/client/components/List/List.test.ts"},{id:"result",name:"Result",desc:"\u7ED3\u679C\u9875\uFF1Asuccess/error/warning/info + extra \u64CD\u4F5C\u533A",sourceFile:"src/level5/client/components/Result/Result.ts",cssFile:"src/level5/client/components/Result/Result.css",testFile:"src/level5/client/components/Result/Result.test.ts"},{id:"confirm",name:"Confirm",desc:"\u786E\u8BA4\u5BF9\u8BDD\u6846\uFF0CPromise \u5316 await \u8C03\u7528",sourceFile:"src/level5/client/components/Confirm/Confirm.ts",testFile:"src/level5/client/components/Confirm/Confirm.test.ts"},{id:"statcard",name:"StatCard",desc:"KPI \u6307\u6807\u5361\uFF0C\u652F\u6301 trend/icon",sourceFile:"src/level5/client/components/StatCard/StatCard.ts",cssFile:"src/level5/client/components/StatCard/StatCard.css",testFile:"src/level5/client/components/StatCard/StatCard.test.ts"},{id:"chart",name:"Chart",desc:"SVG \u56FE\u8868\uFF1Aline/bar/pie/radar/gauge/scatter\u2014\u2014\u96F6\u4F9D\u8D56\u81EA\u7ED8",sourceFile:"src/level5/client/components/Chart/Chart.ts",cssFile:"src/level5/client/components/Chart/Chart.css",testFile:"src/level5/client/components/Chart/Chart.test.ts"},{id:"editor",name:"Editor",desc:"\u5BCC\u6587\u672C\u7F16\u8F91\u5668\uFF0CcontentEditable + toolbar\uFF0C\u96F6\u4F9D\u8D56",sourceFile:"src/level5/client/components/Editor/Editor.ts",cssFile:"src/level5/client/components/Editor/Editor.css",testFile:"src/level5/client/components/Editor/Editor.test.ts"},{id:"filepreview",name:"FilePreview",desc:"\u6587\u4EF6\u9884\u89C8\uFF08md/html/pdf/office\uFF09\u2014\u2014\u57FA\u4E8E\u4E8B\u4EF6\u6D41\uFF0C\u53EF\u7F16\u8F91",family:"file-preview",sourceFile:"src/level5/client/components/FilePreview/FilePreview.ts",cssFile:"src/level5/client/components/FilePreview/FilePreview.css",testFile:"src/level5/client/components/FilePreview/FilePreview.test.ts"},{id:"themeswitch",name:"ThemeSwitch",desc:"\u4E3B\u9898\u5207\u6362\uFF1Aauto/light/dark\uFF0ClocalStorage \u6301\u4E45\u5316",sourceFile:"src/level5/client/components/ThemeSwitch/ThemeSwitch.ts",cssFile:"src/level5/client/components/ThemeSwitch/ThemeSwitch.css",testFile:"src/level5/client/components/ThemeSwitch/ThemeSwitch.test.ts"},{id:"datepicker",name:"DatePicker",desc:"\u65E5\u671F\u9009\u62E9\u5668\uFF0C\u56DB\u79CD\u6A21\u5F0F\uFF1Adate/datetime/time/range",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 value/month \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9"],sourceFile:"src/level5/client/components/DatePicker/DatePicker.ts",cssFile:"src/level5/client/components/DatePicker/DatePicker.css",testFile:"src/level5/client/components/DatePicker/DatePicker.test.ts"},{id:"modal",name:"Modal",desc:"\u81EA\u5B9A\u4E49\u5BBD\u5EA6 + closable \u63A7\u5236\u5173\u95ED\u6309\u94AE",gotchas:["\u9000\u573A\u52A8\u753B\uFF1Aexit \u7C7B\u5FC5\u987B\u6302\u8F7D\uFF08animationend \u9A71\u52A8\u5378\u8F7D\uFF09\u2014\u2014reduced-motion \u4E0B\u52A8\u753B\u964D\u4E3A 0.01ms \u7B49\u6548\u77AC\u65F6","\u4F1A\u8BDD\u7EA7\u6A21\u6001\u56DB\u4EF6\u5957\uFF1Apresence/trapFocus/lockScroll \u7531 usePopup \u7EDF\u4E00\u63D0\u4F9B"],sourceFile:"src/level5/client/components/Modal/Modal.ts",cssFile:"src/level5/client/components/Modal/Modal.css",testFile:"src/level5/client/components/Modal/Modal.test.ts"},{id:"drawer",name:"Drawer",desc:"\u4FA7\u8FB9\u9762\u677F\uFF0C\u5DE6\u53F3\u6ED1\u5165 + ESC \u5173\u95ED",gotchas:["\u9000\u573A\u52A8\u753B\uFF1A--enter/--exit \u7C7B\u5FC5\u987B\u6210\u5BF9\uFF08audit \u5F3A\u5236\uFF09\u2014\u2014\u53EA\u5B9A\u4E49\u4E0D\u6302\u662F\u6B7B\u4EE3\u7801\uFF08CS-01\uFF09"],sourceFile:"src/level5/client/components/Drawer/Drawer.ts",cssFile:"src/level5/client/components/Drawer/Drawer.css",testFile:"src/level5/client/components/Drawer/Drawer.test.ts"},{id:"popover",name:"Popover",desc:"\u901A\u7528\u5F39\u51FA\u5C42\uFF0Cclick/hover \u89E6\u53D1\uFF0C4 \u65B9\u5411",gotchas:["portal \u69FD\u8C41\u514D\uFF08\u540C HoverCard\uFF09","\u5BCC\u5185\u5BB9\u81EA\u52A8\u5224\u5B9A\u5DF2\u88C1\u526A\u2014\u2014HoverCard \u8865\u5BCC\u5185\u5BB9\uFF08docs/client.md#\u80FD\u529B\u88C1\u526A\u767B\u8BB0\uFF09"],sourceFile:"src/level5/client/components/Popover/Popover.ts",cssFile:"src/level5/client/components/Popover/Popover.css",testFile:"src/level5/client/components/Popover/Popover.test.ts"},{id:"tooltip",name:"Tooltip",desc:"hover \u6D6E\u52A8\u63D0\u793A\uFF0C4 \u65B9\u5411",gotchas:["portal \u69FD\u8C41\u514D\uFF08\u540C HoverCard\uFF09\u2014\u2014\u6D6E\u5C42\u63D2\u69FD\u975E\u4E1A\u52A1\u5217\u8868"],sourceFile:"src/level5/client/components/Tooltip/Tooltip.ts",cssFile:"src/level5/client/components/Tooltip/Tooltip.css",testFile:"src/level5/client/components/Tooltip/Tooltip.test.ts"},{id:"toast",name:"Toast",desc:"5 \u79CD\u4F4D\u7F6E + \u81EA\u52A8\u6D88\u5931 + \u6570\u91CF\u9650\u5236",sourceFile:"src/level5/client/components/Toast/Toast.ts",cssFile:"src/level5/client/components/Toast/Toast.css",testFile:"src/level5/client/components/Toast/Toast.test.ts"},{id:"alert",name:"Alert",desc:"\u4FE1\u606F\u63D0\u793A\u6761\uFF0C4 \u79CD variant + closable",sourceFile:"src/level5/client/components/Alert/Alert.ts",cssFile:"src/level5/client/components/Alert/Alert.css",testFile:"src/level5/client/components/Alert/Alert.test.ts"},{id:"loading",name:"Loading",desc:"\u52A0\u8F7D\u72B6\u6001\uFF0C\u652F\u6301\u81EA\u5B9A\u4E49\u6587\u5B57",sourceFile:"src/level5/client/components/Loading/Loading.ts",cssFile:"src/level5/client/components/Loading/Loading.css",testFile:"src/level5/client/components/Loading/Loading.test.ts"},{id:"skeleton",name:"Skeleton",desc:"text/circle/rect/image/avatar/table \u516D\u79CD\u53D8\u4F53",sourceFile:"src/level5/client/components/Skeleton/Skeleton.ts",cssFile:"src/level5/client/components/Skeleton/Skeleton.css",testFile:"src/level5/client/components/Skeleton/Skeleton.test.ts"},{id:"emptystate",name:"EmptyState",desc:"\u7A7A\u72B6\u6001\u5360\u4F4D\uFF0C\u652F\u6301 icon/text/hint/action",sourceFile:"src/level5/client/components/EmptyState/EmptyState.ts",cssFile:"src/level5/client/components/EmptyState/EmptyState.css",testFile:"src/level5/client/components/EmptyState/EmptyState.test.ts"},{id:"breadcrumb",name:"Breadcrumb",desc:"\u9762\u5305\u5C51\u5BFC\u822A\uFF0C\u652F\u6301 aria-current",sourceFile:"src/level5/client/components/Breadcrumb/Breadcrumb.ts",cssFile:"src/level5/client/components/Breadcrumb/Breadcrumb.css",testFile:"src/level5/client/components/Breadcrumb/Breadcrumb.test.ts"},{id:"menu",name:"Menu",desc:"\u4FA7\u680F\u5BFC\u822A\uFF1A\u5206\u7EC4 + \u56FE\u6807 + \u9009\u4E2D\u6001 + \u65B9\u5411\u952E",sourceFile:"src/level5/client/components/Menu/Menu.ts",cssFile:"src/level5/client/components/Menu/Menu.css",testFile:"src/level5/client/components/Menu/Menu.test.ts"},{id:"tabs",name:"Tabs",desc:"\u6807\u7B7E\u9875\u5207\u6362\uFF0C\u652F\u6301 active/onChange",gotchas:["\u6DF7\u5408\u6570\u7EC4\u7A33\u5B9A key\uFF1AtabList+addBtn+ink \u5168 keyed\u2014\u2014\u65E0 key \u9879\u9000 unkeyed \u4F4D\u7F6E\u914D\u5BF9\uFF08\u65B0\u589E tab \u9519\u4F4D\u4E8B\u6545\uFF09","closable \u5FC5\u987B\u914D onClose / addable \u5FC5\u987B\u914D onAdd\uFF08\u53D7\u63A7\u7EAA\u5F8B\u2014\u2014console.warn\uFF09"],sourceFile:"src/level5/client/components/Tabs/Tabs.ts",cssFile:"src/level5/client/components/Tabs/Tabs.css",testFile:"src/level5/client/components/Tabs/Tabs.test.ts"},{id:"dropdown",name:"Dropdown",desc:"\u4E0B\u62C9\u83DC\u5355\uFF0C\u652F\u6301 danger variant",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 open \u5FC5\u987B\u914D onOpenChange\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9","\u547D\u4EE4\u5F0F\u5F39\u7A97\uFF1A\u6D6E\u5C42\u7ECF ctx.ui.openPopup\uFF08\u552F\u4E00\u5F62\u6001\u2014\u2014toast \u5FC3\u667A\u2014\u2014\u5185\u6838\u81EA\u7BA1\u7406\u751F\u547D\u5468\u671F\uFF09"],sourceFile:"src/level5/client/components/Dropdown/Dropdown.ts",cssFile:"src/level5/client/components/Dropdown/Dropdown.css",testFile:"src/level5/client/components/Dropdown/Dropdown.test.ts"},{id:"pagination",name:"Pagination",desc:"\u5206\u9875\u5668\uFF0C\u81EA\u52A8\u8BA1\u7B97\u9875\u7801\u8303\u56F4",sourceFile:"src/level5/client/components/Pagination/Pagination.ts",cssFile:"src/level5/client/components/Pagination/Pagination.css",testFile:"src/level5/client/components/Pagination/Pagination.test.ts"},{id:"steps",name:"Steps",desc:"\u5206\u6B65\u6307\u793A\u5668\uFF0C\u652F\u6301 active/current",sourceFile:"src/level5/client/components/Steps/Steps.ts",cssFile:"src/level5/client/components/Steps/Steps.css",testFile:"src/level5/client/components/Steps/Steps.test.ts"},{id:"accordion",name:"Accordion",desc:"\u6298\u53E0\u9762\u677F\uFF0C\u652F\u6301\u591A\u4E2A items",sourceFile:"src/level5/client/components/Accordion/Accordion.ts",cssFile:"src/level5/client/components/Accordion/Accordion.css",testFile:"src/level5/client/components/Accordion/Accordion.test.ts"},{id:"aichat",name:"AiChat",desc:"useChat + \u6807\u51C6\u5BF9\u8BDD\u754C\u9762\uFF1A\u6D41\u5F0F token / \u5DE5\u5177\u5361 / \u5BA1\u6279\u5361 / \u81EA\u52A8\u6EDA\u52A8\uFF0C\u534F\u8BAE\u5BF9\u9875\u9762\u900F\u660E",family:"ai-chat",sourceFile:"src/level5/client/components/AiChat/AiChat.ts",cssFile:"src/level5/client/components/AiChat/AiChat.css",testFile:"src/level5/client/components/AiChat/AiChat.test.ts"},{id:"chatinput",name:"ChatInput",desc:"\u72EC\u7ACB\u804A\u5929\u8F93\u5165\u6761\uFF08AiChat \u62BD\u53D6\uFF09\uFF1A\u5355\u884C/\u591A\u884C + streaming \u505C\u6B62 + IME \u5B89\u5168\u2014\u2014\u4E0D\u81EA\u5E26\u804A\u5929\u903B\u8F91",family:"ai-chat",sourceFile:"src/level5/client/components/ChatInput/ChatInput.ts",cssFile:"src/level5/client/components/ChatInput/ChatInput.css",testFile:"src/level5/client/components/ChatInput/ChatInput.test.ts"},{id:"authpage",name:"AuthPage",desc:"\u8BA4\u8BC1\u9875\u9AA8\u67B6\uFF1A\u5C45\u4E2D\u5361\u7247 + logo + \u8868\u5355\u63D2\u69FD + \u9519\u8BEF\u6761 + \u63D0\u4EA4 loading\uFF08\u767B\u5F55/\u6CE8\u518C\u590D\u7528\uFF09",sourceFile:"src/level5/client/components/AuthPage/AuthPage.ts",testFile:"src/level5/client/components/AuthPage/AuthPage.test.ts"},{id:"toolcallcard",name:"ToolCallCard",desc:"\u5DE5\u5177\u8C03\u7528\u5361\u7247\uFF1Arunning / ok / error \u72B6\u6001\u673A\uFF08call/progress/result \u4E09\u5B57\u6BB5\u9A71\u52A8\uFF09",family:"ai-chat",sourceFile:"src/level5/client/components/ToolCallCard/ToolCallCard.ts",cssFile:"src/level5/client/components/ToolCallCard/ToolCallCard.css",testFile:"src/level5/client/components/ToolCallCard/ToolCallCard.test.ts"},{id:"jsonschemaform",name:"JsonSchemaForm",desc:"JSON Schema \u2192 \u53C2\u6570\u8F93\u5165\u8868\u5355\uFF1A\u7C7B\u578B\u6620\u5C04 + \u5FC5\u586B/\u8303\u56F4\u6821\u9A8C + \u5D4C\u5957/\u6570\u7EC4\uFF08AI \u5DE5\u5177\u53C2\u6570\u8F93\u5165\u9762\uFF09",sourceFile:"src/level5/client/components/JsonSchemaForm/JsonSchemaForm.ts",cssFile:"src/level5/client/components/JsonSchemaForm/JsonSchemaForm.css",testFile:"src/level5/client/components/JsonSchemaForm/JsonSchemaForm.test.ts"},{id:"reasoningblock",name:"ReasoningBlock",desc:"CoT \u63A8\u7406\u6298\u53E0\u5C55\u793A\uFF1Aaria-expanded + \u952E\u76D8\u53EF\u8FBE + \u6D41\u5F0F\u8109\u51B2\uFF08thinking \u6A21\u5F0F reasoning_content\uFF09",family:"ai-chat",sourceFile:"src/level5/client/components/ReasoningBlock/ReasoningBlock.ts",cssFile:"src/level5/client/components/ReasoningBlock/ReasoningBlock.css",testFile:"src/level5/client/components/ReasoningBlock/ReasoningBlock.test.ts"},{id:"citationcard",name:"CitationCard",desc:"RAG \u5F15\u7528\u6765\u6E90\uFF1A\u6298\u53E0\u300C\u5F15\u7528 N \u6761\u300D+ \u6761\u76EE\u5217\u8868\uFF08\u5E8F\u53F7/\u6807\u9898/\u6765\u6E90/\u7247\u6BB5/\u94FE\u63A5\uFF09+ \u6EA2\u51FA +N",family:"ai-chat",sourceFile:"src/level5/client/components/CitationCard/CitationCard.ts",cssFile:"src/level5/client/components/CitationCard/CitationCard.css",testFile:"src/level5/client/components/CitationCard/CitationCard.test.ts"},{id:"sessionlist",name:"SessionList",desc:"\u4F1A\u8BDD\u7BA1\u7406\u5217\u8868\uFF1A\u5206\u7EC4\uFF08\u4ECA\u5929/\u6628\u5929/\u66F4\u65E9\uFF09+ \u641C\u7D22 + \u9009\u4E2D + \u91CD\u547D\u540D/\u5220\u9664/\u65B0\u5EFA + \u952E\u76D8\u5BFC\u822A",family:"ai-chat",sourceFile:"src/level5/client/components/SessionList/SessionList.ts",cssFile:"src/level5/client/components/SessionList/SessionList.css",testFile:"src/level5/client/components/SessionList/SessionList.test.ts"},{id:"approvalcard",name:"ApprovalCard",desc:"HITL \u5BA1\u6279\u5361\u7247\uFF1Apending \u53EF\u6279/\u62D2 + \u4FEE\u6539\u53C2\u6570\uFF08JsonSchemaForm\uFF09\xB7 approved/rejected/timeout \u7EC8\u6001",family:"ai-chat",sourceFile:"src/level5/client/components/ApprovalCard/ApprovalCard.ts",cssFile:"src/level5/client/components/ApprovalCard/ApprovalCard.css",testFile:"src/level5/client/components/ApprovalCard/ApprovalCard.test.ts"},{id:"pageheader",name:"PageHeader",desc:"\u9875\u9762\u6807\u9898\u680F\uFF0C\u652F\u6301 sub + \u53F3\u4FA7\u64CD\u4F5C\u533A + display \u5927\u6807\u9898",sourceFile:"src/level5/client/components/PageHeader/PageHeader.ts",cssFile:"src/level5/client/components/PageHeader/PageHeader.css",testFile:"src/level5/client/components/PageHeader/PageHeader.test.ts"},{id:"icon",name:"Icon",desc:"stroke SVG \u56FE\u6807\u96C6\uFF0CcurrentColor \u7740\u8272\uFF0C\u968F\u5B57\u53F7\u7F29\u653E",sourceFile:"src/level5/client/components/Icon/Icon.ts",cssFile:"src/level5/client/components/Icon/Icon.css",testFile:"src/level5/client/components/Icon/Icon.test.ts"},{id:"divider",name:"Divider",desc:"\u5206\u5272\u7EBF\uFF0C\u652F\u6301 horizontal/vertical/\u5E26\u6587\u5B57",sourceFile:"src/level5/client/components/Divider/Divider.ts",cssFile:"src/level5/client/components/Divider/Divider.css",testFile:"src/level5/client/components/Divider/Divider.test.ts"},{id:"rate",name:"Rate",desc:"\u8BC4\u5206\uFF1A\u952E\u76D8\u65B9\u5411\u952E / allowClear / readOnly\uFF0C\u65B0\u589E star \u56FE\u6807",gotchas:["\u5C0F\u5C3A\u5BF8 button \u56FA\u5B9A min/max-height\uFF08\xA75.6\uFF09\uFF1A\u661F 16x36 \u7AD6\u6761\u4E8B\u6545"],sourceFile:"src/level5/client/components/Rate/Rate.ts",cssFile:"src/level5/client/components/Rate/Rate.css",testFile:"src/level5/client/components/Rate/Rate.test.ts"},{id:"typography",name:"Typography",desc:"Title/Text/Paragraph\uFF1A\u8BED\u4E49\u6807\u7B7E + \u8BED\u4E49\u8272 -text \u53D8\u4F53 + mark/code/\u5220\u9664\u7EBF",sourceFile:"src/level5/client/components/Typography/Typography.ts",cssFile:"src/level5/client/components/Typography/Typography.css",testFile:"src/level5/client/components/Typography/Typography.test.ts"},{id:"label",name:"Label",desc:"\u72EC\u7ACB\u6807\u7B7E\uFF08required \u661F\u53F7\uFF09+ \u5BBD\u9AD8\u6BD4\u5BB9\u5668\uFF08\u5185\u5BB9\u586B\u6EE1\uFF09",sourceFile:"src/level5/client/components/Label/Label.ts",cssFile:"src/level5/client/components/Label/Label.css",testFile:"src/level5/client/components/Label/Label.test.ts"},{id:"aspectratio",name:"AspectRatio",desc:"\u72EC\u7ACB\u6807\u7B7E\uFF08required \u661F\u53F7\uFF09+ \u5BBD\u9AD8\u6BD4\u5BB9\u5668\uFF08\u5185\u5BB9\u586B\u6EE1\uFF09",sourceFile:"src/level5/client/components/AspectRatio/AspectRatio.ts",cssFile:"src/level5/client/components/AspectRatio/AspectRatio.css",testFile:"src/level5/client/components/AspectRatio/AspectRatio.test.ts"},{id:"checkboxgroup",name:"CheckboxGroup",desc:"\u590D\u9009\u6846\u7EC4\uFF1A\u6570\u7EC4\u53D7\u63A7 + \u6805\u683C\u5217\u6570\uFF08antd Checkbox.Group\uFF09",sourceFile:"src/level5/client/components/CheckboxGroup/CheckboxGroup.ts",cssFile:"src/level5/client/components/CheckboxGroup/CheckboxGroup.css",testFile:"src/level5/client/components/CheckboxGroup/CheckboxGroup.test.ts"},{id:"pininput",name:"PinInput",desc:"\u9A8C\u8BC1\u7801\u8F93\u5165\uFF1A\u81EA\u52A8\u805A\u7126/\u7C98\u8D34\u5206\u6D3E/Backspace \u56DE\u9000\uFF08shadcn InputOTP\uFF09",sourceFile:"src/level5/client/components/PinInput/PinInput.ts",cssFile:"src/level5/client/components/PinInput/PinInput.css",testFile:"src/level5/client/components/PinInput/PinInput.test.ts"},{id:"copybutton",name:"CopyButton",desc:"\u590D\u5236\u6309\u94AE\uFF1Aclipboard + execCommand \u964D\u7EA7 + \u6210\u529F\u72B6\u6001\u673A",sourceFile:"src/level5/client/components/CopyButton/CopyButton.ts",cssFile:"src/level5/client/components/CopyButton/CopyButton.css",testFile:"src/level5/client/components/CopyButton/CopyButton.test.ts"},{id:"colorpicker",name:"ColorPicker",desc:"\u989C\u8272\u9009\u62E9\uFF1A\u9884\u8BBE\u8272\u677F + hex \u8F93\u5165\uFF08Popover \u5F39\u5C42\uFF09",sourceFile:"src/level5/client/components/ColorPicker/ColorPicker.ts",cssFile:"src/level5/client/components/ColorPicker/ColorPicker.css",testFile:"src/level5/client/components/ColorPicker/ColorPicker.test.ts"},{id:"hovercard",name:"HoverCard",desc:"\u60AC\u505C\u5BCC\u5185\u5BB9\u5361\uFF1AopenDelay \u5EF6\u8FDF + \u4EFB\u610F VNode\uFF08shadcn\uFF09",gotchas:["portal \u69FD\u8C41\u514D\uFF1A\u6D6E\u5C42\u63D2\u69FD\u6253\u5F00/\u5173\u95ED\u4E0D\u89E6\u53D1 A \u7EA7\u52A8\u6001\u6570\u7EC4\u68C0\u6D4B\uFF08\u6846\u67B6\u7BA1\u7406\u5207\u6362\u69FD\uFF09"],sourceFile:"src/level5/client/components/HoverCard/HoverCard.ts",cssFile:"src/level5/client/components/HoverCard/HoverCard.css",testFile:"src/level5/client/components/HoverCard/HoverCard.test.ts"},{id:"notification",name:"Notification",desc:"\u961F\u5217\u5F0F\u901A\u77E5\uFF1Anotification.success/error/warning \u547D\u4EE4\u5F0F\uFF08antd \u5BF9\u9F50\uFF09",sourceFile:"src/level5/client/components/Notification/Notification.ts",cssFile:"src/level5/client/components/Notification/Notification.css",testFile:"src/level5/client/components/Notification/Notification.test.ts"},{id:"backtop",name:"BackTop",desc:"\u56DE\u5230\u9876\u90E8\uFF08\u6EDA\u52A8\u8D85 400px \u663E\u793A\uFF09+ \u56FA\u5B9A\u5BFC\u822A\uFF08\u8DDD\u9876 80px \u9489\u4F4F\uFF09",sourceFile:"src/level5/client/components/BackTop/BackTop.ts",cssFile:"src/level5/client/components/BackTop/BackTop.css",testFile:"src/level5/client/components/BackTop/BackTop.test.ts"},{id:"affix",name:"Affix",desc:"\u56DE\u5230\u9876\u90E8\uFF08\u6EDA\u52A8\u8D85 400px \u663E\u793A\uFF09+ \u56FA\u5B9A\u5BFC\u822A\uFF08\u8DDD\u9876 80px \u9489\u4F4F\uFF09",sourceFile:"src/level5/client/components/Affix/Affix.ts",cssFile:"src/level5/client/components/Affix/Affix.css",testFile:"src/level5/client/components/Affix/Affix.test.ts"},{id:"anchor",name:"Anchor",desc:"\u951A\u70B9\u5BFC\u822A\uFF1A\u6EDA\u52A8\u9AD8\u4EAE\u8DDF\u968F + \u70B9\u51FB\u5E73\u6ED1\u6EDA\u52A8",sourceFile:"src/level5/client/components/Anchor/Anchor.ts",cssFile:"src/level5/client/components/Anchor/Anchor.css",testFile:"src/level5/client/components/Anchor/Anchor.test.ts"},{id:"contextmenu",name:"ContextMenu",desc:"\u53F3\u952E\u83DC\u5355\uFF1A\u5149\u6807\u5B9A\u4F4D + \u65B9\u5411\u952E + danger \u53D8\u4F53\uFF08shadcn\uFF09",gotchas:["portal \u69FD\u8C41\u514D\uFF1B\u53F3\u952E + \u89E6\u5C4F\u957F\u6309\u53CC\u901A\u9053"],sourceFile:"src/level5/client/components/ContextMenu/ContextMenu.ts",cssFile:"src/level5/client/components/ContextMenu/ContextMenu.css",testFile:"src/level5/client/components/ContextMenu/ContextMenu.test.ts"},{id:"mentions",name:"Mentions",desc:"@\u63D0\u53CA\uFF1Acomposition \u6291\u5236 + \u8FC7\u6EE4\u63D2\u5165\uFF08antd Mentions\uFF09",sourceFile:"src/level5/client/components/Mentions/Mentions.ts",cssFile:"src/level5/client/components/Mentions/Mentions.css",testFile:"src/level5/client/components/Mentions/Mentions.test.ts"},{id:"collapse",name:"Collapse",desc:"\u884C\u5185\u6298\u53E0\uFF1A\u5F02\u6B65 loading + extra \u64CD\u4F5C\u533A\uFF08\u533A\u522B\u4E8E Accordion\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF08\xA75.2\uFF09\uFF1A\u53D7\u63A7 activeKeys \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9\uFF08console.warn \u9632\u62A4\uFF09"],sourceFile:"src/level5/client/components/Collapse/Collapse.ts",cssFile:"src/level5/client/components/Collapse/Collapse.css",testFile:"src/level5/client/components/Collapse/Collapse.test.ts"},{id:"tree",name:"Tree",desc:"\u6811\u5F62\uFF1A\u9012\u5F52\u6A21\u578B + \u52FE\u9009\u7236\u5B50\u8054\u52A8 + indeterminate\uFF08antd/EP Tree\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1AselectedKeys/checkedKeys/expandedKeys \u5FC5\u987B\u914D\u56DE\u8C03\uFF08\u7F3A\u56DE\u8C03 console.warn\uFF09","\u5C0F\u5C3A\u5BF8 button \u56FA\u5B9A min/max-height\uFF08\xA75.6\uFF09\uFF1Acheckbox 14x36 \u7AD6\u6761\u4E8B\u6545","\u865A\u62DF\u6A21\u5F0F\uFF08virtual\uFF09\u952E\u76D8\u5BFC\u822A\u9650\u4E8E\u53EF\u89C1\u7A97\u53E3\uFF08VirtualList \u65E0 scrollTo\u2014\u2014\u88C1\u526A\u767B\u8BB0\uFF09"],sourceFile:"src/level5/client/components/Tree/Tree.ts",cssFile:"src/level5/client/components/Tree/Tree.css",testFile:"src/level5/client/components/Tree/Tree.test.ts"},{id:"cascader",name:"Cascader",desc:"\u7EA7\u8054\u9009\u62E9\uFF1A\u591A\u5217\u9762\u677F\u9010\u7EA7\u63A8\u8FDB\uFF08antd/EP Cascader\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 value \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9","\u591A\u9009\uFF08multiple\uFF09\u5DF2\u88C1\u526A\uFF08\u4F4E\u9891\u2014\u2014\u5355\u9009+\u641C\u7D22\u5DF2\u591F\uFF0C\u89C1 docs/client.md#\u80FD\u529B\u88C1\u526A\u767B\u8BB0\uFF09"],sourceFile:"src/level5/client/components/Cascader/Cascader.ts",cssFile:"src/level5/client/components/Cascader/Cascader.css",testFile:"src/level5/client/components/Cascader/Cascader.test.ts"},{id:"transfer",name:"Transfer",desc:"\u7A7F\u68AD\u6846\uFF1A\u53CC\u5217\u8868 + \u9009\u4E2D\u79FB\u52A8\uFF08antd/EP Transfer\uFF09",sourceFile:"src/level5/client/components/Transfer/Transfer.ts",cssFile:"src/level5/client/components/Transfer/Transfer.css",testFile:"src/level5/client/components/Transfer/Transfer.test.ts"},{id:"command",name:"Command",desc:"\u547D\u4EE4\u9762\u677F\uFF1A\u2318K \u5168\u5C40\u5FEB\u6377\u952E + \u952E\u76D8\u6D41\uFF08shadcn Command\uFF09",sourceFile:"src/level5/client/components/Command/Command.ts",cssFile:"src/level5/client/components/Command/Command.css",testFile:"src/level5/client/components/Command/Command.test.ts"},{id:"menubar",name:"Menubar",desc:"\u6C34\u5E73\u83DC\u5355\u680F\uFF1A\u2190\u2192 \u5207\u6362 + \u2193 \u5C55\u5F00\uFF08shadcn Menubar\uFF09",sourceFile:"src/level5/client/components/Menubar/Menubar.ts",cssFile:"src/level5/client/components/Menubar/Menubar.css",testFile:"src/level5/client/components/Menubar/Menubar.test.ts"},{id:"carousel",name:"Carousel",desc:"\u8F6E\u64AD\uFF1A\u7BAD\u5934/\u5706\u70B9/\u5FAA\u73AF + \u81EA\u52A8\u64AD\u653E\uFF08\u4E09\u5E93\u5171\u8BC6\uFF09",gotchas:["\u5C0F\u5C3A\u5BF8 button \u56FA\u5B9A min/max-height\uFF08\xA75.6\uFF09\uFF1A\u5706\u70B9 8x45 \u7AD6\u6761\u4E8B\u6545"],sourceFile:"src/level5/client/components/Carousel/Carousel.ts",cssFile:"src/level5/client/components/Carousel/Carousel.css",testFile:"src/level5/client/components/Carousel/Carousel.test.ts"},{id:"resizable",name:"Resizable",desc:"\u62D6\u62FD\u5206\u5272\u9762\u677F\uFF1Apointer + \u952E\u76D8\u65B9\u5411\u952E + clamp\uFF08shadcn\uFF09",sourceFile:"src/level5/client/components/Resizable/Resizable.ts",cssFile:"src/level5/client/components/Resizable/Resizable.css",testFile:"src/level5/client/components/Resizable/Resizable.test.ts"},{id:"calendar",name:"Calendar",desc:"\u6708\u5386\uFF1A\u4E8B\u4EF6\u70B9 + \u6708\u5207\u6362 + \u65E5\u671F\u9009\u62E9\uFF08antd/EP Calendar\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 month/value \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9\uFF08console.warn \u9632\u62A4\uFF09"],sourceFile:"src/level5/client/components/Calendar/Calendar.ts",cssFile:"src/level5/client/components/Calendar/Calendar.css",testFile:"src/level5/client/components/Calendar/Calendar.test.ts"},{id:"watermark",name:"Watermark",desc:"\u6C34\u5370\uFF1Acanvas \u5E73\u94FA\u7ED8\u5236 + overlay\uFF08antd Watermark\uFF09",sourceFile:"src/level5/client/components/Watermark/Watermark.ts",cssFile:"src/level5/client/components/Watermark/Watermark.css",testFile:"src/level5/client/components/Watermark/Watermark.test.ts"},{id:"virtuallist",name:"VirtualList",desc:"\u865A\u62DF\u5217\u8868\uFF1Aspacer + \u53EF\u89C1\u7A97\u53E3\uFF0C200 \u6761\u53EA\u6E32\u67D3 ~12 \u4E2A DOM",sourceFile:"src/level5/client/components/VirtualList/VirtualList.ts",cssFile:"src/level5/client/components/VirtualList/VirtualList.css",testFile:"src/level5/client/components/VirtualList/VirtualList.test.ts"},{id:"virtualtable",name:"VirtualTable",desc:"\u865A\u62DF\u8868\u683C\uFF1A10k \u884C\u56FA\u5B9A\u8868\u5934 + \u53EF\u89C1\u7A97\u53E3\u6E32\u67D3 + \u6392\u5E8F",sourceFile:"src/level5/client/components/VirtualTable/VirtualTable.ts",cssFile:"src/level5/client/components/VirtualTable/VirtualTable.css",testFile:"src/level5/client/components/VirtualTable/VirtualTable.test.ts"},{id:"infinitescroll",name:"InfiniteScroll",desc:"\u65E0\u9650\u6EDA\u52A8\uFF1A\u5E95\u90E8\u54E8\u5175\u89E6\u5E95\u52A0\u8F7D + loading/end \u6001",sourceFile:"src/level5/client/components/InfiniteScroll/InfiniteScroll.ts",cssFile:"src/level5/client/components/InfiniteScroll/InfiniteScroll.css",testFile:"src/level5/client/components/InfiniteScroll/InfiniteScroll.test.ts"},{id:"qrcode",name:"QRCode",desc:"\u4E8C\u7EF4\u7801\uFF1A\u81EA\u7814 QR \u7F16\u7801\uFF08Reed-Solomon + 8 \u63A9\u7801\uFF09\u96F6\u4F9D\u8D56 SVG",sourceFile:"src/level5/client/components/QRCode/QRCode.ts",testFile:"src/level5/client/components/QRCode/QRCode.test.ts"},{id:"sheetgrid",name:"SheetGrid",desc:"weifuwu/client/components/SheetGrid \u2014 xlsx \u7F51\u683C\u7F16\u8F91\u5668\uFF08ODES \u4E8B\u4EF6\u6D41\u5E95\u5EA7\uFF09 \u8BBE\u8BA1\uFF08\uFF09\uFF1A\u6587\u6863 = fold(\u4E8B\u4EF6\u6D41)\u2014\u2014SheetGrid \u7684\u6BCF\u4E2A",family:"file-preview",sourceFile:"src/level5/client/components/SheetGrid/SheetGrid.ts",cssFile:"src/level5/client/components/SheetGrid/SheetGrid.css",testFile:"src/level5/client/components/SheetGrid/SheetGrid.test.ts"},{id:"slidecanvas",name:"SlideCanvas",desc:"weifuwu/client/components/SlideCanvas \u2014 pptx \u753B\u5E03\u7F16\u8F91\u5668\uFF08ODES \u4E8B\u4EF6\u6D41\u2014\u2014\u9636\u6BB5 3\uFF09 \u8BBE\u8BA1\uFF08\uFF09\uFF1A\u6587\u6863 = fold(\u4E8B\u4EF6\u6D41)\u2014\u2014\u6BCF\u4E2A\u7F16\u8F91 =",family:"file-preview",sourceFile:"src/level5/client/components/SlideCanvas/SlideCanvas.ts",cssFile:"src/level5/client/components/SlideCanvas/SlideCanvas.css",testFile:"src/level5/client/components/SlideCanvas/SlideCanvas.test.ts"},{id:"togglegroup",name:"ToggleGroup",desc:"\uFF08\u65E0 demo \u5361\u7247\u2014\u2014\u7EC4\u4EF6\u76EE\u5F55\u5B58\u5728\uFF09\uFF08+ Toggle \u5355\u4F53\u5F00\u5173\u2014\u2014\u540C\u76EE\u5F55\u53CC\u5BFC\u51FA\uFF09",sourceFile:"src/level5/client/components/ToggleGroup/ToggleGroup.ts",cssFile:"src/level5/client/components/ToggleGroup/ToggleGroup.css",testFile:"src/level5/client/components/ToggleGroup/ToggleGroup.test.ts"},{id:"tabbar",name:"TabBar",desc:"\u5E95\u90E8\u6807\u7B7E\u680F\u2014\u2014\u79FB\u52A8\u7AEF App \u4E3B\u5BFC\u822A\uFF083-5 tab + icon/badge/\u53D7\u63A7\u6FC0\u6D3B + safe-area \u907F\u8BA9\uFF09",sourceFile:"src/level5/client/components/TabBar/TabBar.ts",cssFile:"src/level5/client/components/TabBar/TabBar.css",testFile:"src/level5/client/components/TabBar/TabBar.test.ts"},{id:"actionsheet",name:"ActionSheet",desc:"\u52A8\u4F5C\u9762\u677F\u2014\u2014\u79FB\u52A8\u7AEF\u5E95\u90E8\u6ED1\u51FA\uFF08\u547D\u4EE4\u5217\u8868 + \u53D6\u6D88\u6309\u94AE\uFF0CusePopup \u4F1A\u8BDD\u7EA7\u6A21\u6001\uFF09",sourceFile:"src/level5/client/components/ActionSheet/ActionSheet.ts",cssFile:"src/level5/client/components/ActionSheet/ActionSheet.css",testFile:"src/level5/client/components/ActionSheet/ActionSheet.test.ts"},{id:"prompttemplate",name:"PromptTemplate",desc:"\u63D0\u793A\u8BCD\u6A21\u677F\u7F16\u8F91\u5668\u2014\u2014\u53D8\u91CF chips \u63D2\u5165 + \u5B9E\u65F6\u9884\u89C8\u586B\u5145\uFF08AI \u573A\u666F\u75DB\u70B9\uFF09",gotchas:["textarea value \u5FC5\u987B\u8D70 property\uFF08attribute \u53EA\u662F defaultValue\u2014\u2014DOM value \u6052\u7A7A/\u5149\u6807\u5931\u6548\u4E8B\u6545\uFF0Cvdom3 \u6E32\u67D3\u5668\u5DF2\u4FEE\uFF09","\u53D7\u63A7\u8F93\u5165\u7EAA\u5F8B\uFF1Avalue \u7531\u7236\u63A7\u5236 + onChange \u901A\u77E5"],sourceFile:"src/level5/client/components/PromptTemplate/PromptTemplate.ts",cssFile:"src/level5/client/components/PromptTemplate/PromptTemplate.css",testFile:"src/level5/client/components/PromptTemplate/PromptTemplate.test.ts"},{id:"navbar",name:"NavBar",desc:"\u79FB\u52A8\u7AEF\u9876\u680F\u2014\u2014left \u69FD\uFF08\u8FD4\u56DE/\u83DC\u5355\uFF09+ \u6807\u9898\u622A\u65AD + right \u69FD\uFF08antd-mobile NavBar \u5BF9\u4F4D\uFF09",sourceFile:"src/level5/client/components/NavBar/NavBar.ts",cssFile:"src/level5/client/components/NavBar/NavBar.css",testFile:"src/level5/client/components/NavBar/NavBar.test.ts"},{id:"dropzone",name:"DropZone",desc:"\u5168\u533A\u57DF\u62D6\u653E\u533A\u2014\u2014\u6574\u5BB9\u5668\u62D6\u5165\u6587\u4EF6\u9AD8\u4EAE + onFiles \u56DE\u8C03\uFF08\u73B0\u4EE3 IM \u6807\u914D\u2014\u2014Chat \u624B\u6413\u8BC1\u636E\uFF09",sourceFile:"src/level5/client/components/DropZone/DropZone.ts",cssFile:"src/level5/client/components/DropZone/DropZone.css",testFile:"src/level5/client/components/DropZone/DropZone.test.ts"},{id:"cronpicker",name:"CronPicker",desc:"cron \u8868\u8FBE\u5F0F\u5FEB\u6377\u8F93\u5165\uFF1A\u9884\u7F6E\u5E38\u89C1\u6863 + \u81EA\u7531\u7F16\u8F91\u53CC\u901A\u9053\uFF08\u5217\u8868\u9875\u9AA8\u67B6\u539F\u8BED\u5165\u5E93\uFF09",sourceFile:"src/level5/client/components/CronPicker/CronPicker.ts",cssFile:"src/level5/client/components/CronPicker/CronPicker.css",testFile:"src/level5/client/components/CronPicker/CronPicker.test.ts"},{id:"listscaffold",name:"ListScaffold",desc:"\u5217\u8868\u9875\u9AA8\u67B6\uFF1APageHeader + \u5DE5\u5177\u680F + loading/empty \u6001 + \u5185\u5BB9\u63D2\u69FD\uFF08isEmpty \u663E\u5F0F\u5951\u7EA6\uFF09",sourceFile:"src/level5/client/components/ListScaffold/ListScaffold.ts",cssFile:"src/level5/client/components/ListScaffold/ListScaffold.css",testFile:"src/level5/client/components/ListScaffold/ListScaffold.test.ts"},{id:"statusdot",name:"StatusDot",desc:"\u72B6\u6001\u70B9\uFF1Aon/tone \u8BED\u4E49\uFF08label \u7F3A\u7701\u53EA\u6E32\u67D3\u70B9\u2014\u2014\u9632\u53CC\u6807\u7B7E\uFF09",sourceFile:"src/level5/client/components/StatusDot/StatusDot.ts",cssFile:"src/level5/client/components/StatusDot/StatusDot.css",testFile:"src/level5/client/components/StatusDot/StatusDot.test.ts"}];var Bo={\u8F93\u5165:["Input","Textarea","SearchInput","PasswordInput","InputNumber","PinInput","TagsInput","Mentions","Rate","ColorPicker","Slider","Switch","Checkbox","CheckboxGroup","RadioGroup","SegmentedControl","ToggleGroup"],\u9009\u62E9:["Select","AutoComplete","TreeSelect","Cascader","DatePicker","Calendar","Transfer","Tree"],\u8868\u5355:["Form","Field","JsonSchemaForm"],\u5C55\u793A:["InView","\u591A\u5E94\u7528\uFF08app \u8282\u70B9\uFF09","Table","VirtualTable","Descriptions","List","Card","Avatar","AvatarGroup","Badge","Tag","StatCard","Result","EmptyState","Timeline","MessageBubble","Highlight","DiffView","LogViewer","JSONViewer","Markdown","CodeBlock","Img","QRCode","Watermark","Skeleton","Scrollbar"],\u53EF\u89C6\u5316:["Chart","Sparkline","StatCard","Pipeline"],\u53CD\u9988:["Alert","AlertGroup","Toast","Notification","Loading","ProgressBar","Result","Confirm","Popconfirm"],\u5F39\u5C42:["Modal","Drawer","Popover","Tooltip","Dropdown","HoverCard","ContextMenu","Menubar","Popconfirm","Tour","Command","ColorPicker"],\u5BFC\u822A:["Menu","Tabs","Breadcrumb","Pagination","Steps","Anchor","BackTop","Affix","NavMenu","Layout","PageHeader","Accordion","Collapse"],\u865A\u62DF\u5316:["VirtualList","VirtualTable","InfiniteScroll","Resizable","Carousel"],AI:["AiChat","ChatInput","MessageBubble","ToolCallCard","ApprovalCard","ReasoningBlock","CitationCard","SessionList","JsonSchemaForm","AuthPage","Pipeline"],\u7F16\u8F91\u6587\u4EF6:["Editor","CodeBlock","Markdown","FileUpload","FilePreview","Img","SheetGrid","SlideCanvas","CopyButton"],\u901A\u7528\u5E03\u5C40:["Button","Layout","LayoutHeader","LayoutSider","LayoutContent","Space","Grid","Divider","Icon","Typography","Title","Text","Paragraph","Label","AspectRatio","ThemeSwitch","Wave","SortableList","Kanban","FloatButton","Link","ExportCSV"]};var ql={select:[{id:"select-searchable",name:"Select (searchable)",desc:"\u53EF\u641C\u7D22\u4E0B\u62C9\u2014\u2014\u8F93\u5165\u8FC7\u6EE4\u9009\u9879"}],form:[{id:"form-v2",name:"Form \u63D0\u4EA4",desc:"\u8868\u5355\u6574\u4F53\u63D0\u4EA4\u2014\u2014\u6821\u9A8C/loading/\u6210\u529F\u6001"}],fileupload:[{id:"fileupload-v2",name:"FileUpload \u7981\u7528",desc:"\u4E0A\u4F20\u7981\u7528\u6001"}],tagsinput:[{id:"tagsinput-v2",name:"TagsInput \u9650\u5236/\u9519\u8BEF",desc:"\u6807\u7B7E\u6570\u91CF\u9650\u5236 + \u9519\u8BEF\u6001"}],table:[{id:"table-v2",name:"Table \u884C\u9009\u62E9",desc:"\u884C\u9009\u62E9 + \u6279\u91CF\u64CD\u4F5C"}],descriptions:[{id:"descriptions-v2",name:"Descriptions \u7D27\u51D1",desc:"\u7D27\u51D1\u6392\u5E03"}],logviewer:[{id:"logviewer-v2",name:"LogViewer \u81EA\u5B9A\u4E49",desc:"\u81EA\u5B9A\u4E49\u884C\u6E32\u67D3/\u65E5\u5FD7\u7EA7\u522B\u8FC7\u6EE4"}],jsonviewer:[{id:"jsonviewer-v2",name:"JSONViewer \u6DF1\u5C55\u5F00",desc:"\u6DF1\u5C42\u8282\u70B9\u5C55\u5F00"}],diffview:[{id:"diffview-v2",name:"DiffView \u6807\u9898",desc:"\u5BF9\u6BD4\u9762\u677F\u6807\u9898/\u63D0\u793A\u8BED"}],layout:[{id:"layoutheader",name:"LayoutHeader",desc:"\u9876\u680F\u533A\u57DF"},{id:"layoutsider",name:"LayoutSider",desc:"\u4FA7\u680F\u533A\u57DF"},{id:"layoutcontent",name:"LayoutContent",desc:"\u5185\u5BB9\u533A\u57DF"}],autocomplete:[{id:"autocomplete-v2",name:"AutoComplete \u7981\u7528\u6001",desc:"\u7981\u7528\u6001"}],statcard:[{id:"statcard-countdown",name:"StatCard Countdown",desc:"\u5012\u8BA1\u65F6 KPI"}],highlight:[{id:"highlight-v2",name:"Highlight \u591A\u8BCD",desc:"\u591A\u5173\u952E\u8BCD\u9AD8\u4EAE"}],filepreview:[{id:"filepreview-office",name:"FilePreview Office",desc:"Office \u6587\u6863\u9884\u89C8"}],togglegroup:[{id:"toggle-togglegroup",name:"Toggle / ToggleGroup",desc:"\u5F00\u5173\u7EC4 + Toggle \u5355\u4F53\uFF08\u540C\u76EE\u5F55\u53CC\u5BFC\u51FA\uFF09"}],pininput:[{id:"pininput-v2",name:"PinInput \u7981\u7528\u6001",desc:"\u7981\u7528\u6001"}],mentions:[{id:"mentions-v2",name:"Mentions \u7981\u7528\u6001",desc:"\u7981\u7528\u6001"}],tree:[{id:"tree-v2",name:"Tree \u52FE\u9009",desc:"\u52FE\u9009\u6A21\u5F0F"}],cascader:[{id:"cascader-v2",name:"Cascader \u7981\u7528/\u9519\u8BEF",desc:"\u7981\u7528/\u9519\u8BEF\u6001"}],calendar:[{id:"calendar-v2",name:"Calendar \u4E8B\u4EF6",desc:"\u4E8B\u4EF6\u65E5\u671F\u6807\u8BB0"}],virtualtable:[{id:"virtualtable-v2",name:"VirtualTable \u5927\u6570\u636E",desc:"\u4E07\u884C\u865A\u62DF\u6EDA\u52A8"}],infinitescroll:[{id:"infinitescroll-v2",name:"InfiniteScroll \u5931\u8D25\u91CD\u8BD5",desc:"\u52A0\u8F7D\u5931\u8D25\u91CD\u8BD5"}],typography:[{id:"title",name:"Title",desc:"\u6807\u9898\u7EA7"},{id:"text",name:"Text",desc:"\u6B63\u6587\u7EA7"},{id:"paragraph",name:"Paragraph",desc:"\u6BB5\u843D\u7EA7"}]},Gl=n=>Object.entries(Bo).filter(([,e])=>e.includes(n)).map(([e])=>e);function qo(){return{counts:{components:$r.length},components:$r.map(n=>({id:n.id,name:n.name,desc:n.desc,family:n.family??null,variants:(ql[n.id]??[]).map(e=>({...e})),tags:Gl(n.name),sourceFile:n.sourceFile??null,cssFile:n.cssFile??null,testFile:n.testFile??null,gotchas:n.gotchas??[]}))}}import{resolve as ct,dirname as Kl}from"node:path";import{writeFile as zl,rm as Zl}from"node:fs/promises";import{tmpdir as Jl}from"node:os";import{pathToFileURL as Xl}from"node:url";import{fileURLToPath as Yl}from"node:url";import{createHash as ec}from"node:crypto";import{build as tc}from"esbuild";var Ql=n=>new _e(n);process.on("unhandledRejection",n=>{console.error("[showcase] unhandledRejection\uFF08\u8FDB\u7A0B\u4FDD\u62A4\u2014\u2014\u4E0D\u9000\u51FA\uFF09:",n instanceof Error?n.message:String(n).slice(0,200))});process.on("uncaughtException",n=>{console.error("[showcase] uncaughtException\uFF08\u8FDB\u7A0B\u4FDD\u62A4\u2014\u2014\u4E0D\u9000\u51FA\uFF09:",n.message)});var Fr=Kl(Yl(import.meta.url)),Go=ct(Fr,"..","..",".."),le=new Ee;le.use(xr());var nc={};Ho(le,nc);le.get("/index.json",n=>Response.json(qo()));le.post("/api/chat",async n=>{let{messages:e}=await n.json(),t=[...e??[]].reverse().find(i=>i.role==="user")?.content??"\u4E16\u754C",r=t.includes("\u5929\u6C14")?"agent":void 0,s=new TextEncoder,o=new ReadableStream({start(i){let a=(d,p)=>{i.enqueue(s.encode(`event: ${d}
119
+ `,resolvers:{Query:{hello:()=>"Hello from weifuwu GraphQL",add:(c,{a:u,b:d})=>u+d}}}))),n.ws("/ws/echo",{message:(c,u,d)=>{c.send(`echo: ${d.toString()}`)}})}var $r=[{id:"videoplayer",name:"VideoPlayer",desc:"\u89C6\u9891\u64AD\u653E\u5668\u2014\u2014\u539F\u751F video \u5C01\u88C5\uFF08controls/\u5C01\u9762/\u5BBD\u9AD8\u6BD4/\u4E8B\u4EF6\u2014\u2014\u96F6\u4F9D\u8D56\uFF09",sourceFile:"src/level5/client/components/VideoPlayer/VideoPlayer.ts",cssFile:"src/level5/client/components/VideoPlayer/VideoPlayer.css",testFile:"src/level5/client/components/VideoPlayer/VideoPlayer.test.ts"},{id:"math",name:"Math",desc:"\u8F7B\u91CF\u516C\u5F0F\u6E32\u67D3\u2014\u2014\u81EA\u7814 LaTeX \u5B50\u96C6\uFF08\u4E0A\u4E0B\u6807/\u5206\u6570/\u6839\u53F7/\u5E0C\u814A\u5B57\u6BCD\u2014\u2014\u96F6\u4F9D\u8D56\u4E0D\u5F15 KaTeX\uFF09",sourceFile:"src/level5/client/components/Math/Math.ts",cssFile:"src/level5/client/components/Math/Math.css",testFile:"src/level5/client/components/Math/Math.test.ts"},{id:"markdowneditor",name:"MarkdownEditor",desc:"\u5206\u5C4F Markdown \u7F16\u8F91\u5668\u2014\u2014textarea + \u5B9E\u65F6\u9884\u89C8\uFF08\u590D\u7528 Markdown parser \u96F6\u6F02\u79FB\uFF09",sourceFile:"src/level5/client/components/MarkdownEditor/MarkdownEditor.ts",cssFile:"src/level5/client/components/MarkdownEditor/MarkdownEditor.css",testFile:"src/level5/client/components/MarkdownEditor/MarkdownEditor.test.ts"},{id:"codeeditor",name:"CodeEditor",desc:"\u8F7B\u91CF\u4EE3\u7801\u7F16\u8F91\u5668\u2014\u2014textarea + \u884C\u53F7 + Tab \u7F29\u8FDB\uFF08\u96F6\u4F9D\u8D56\uFF0C\u4E0D\u5F15 Monaco\uFF09",sourceFile:"src/level5/client/components/CodeEditor/CodeEditor.ts",cssFile:"src/level5/client/components/CodeEditor/CodeEditor.css",testFile:"src/level5/client/components/CodeEditor/CodeEditor.test.ts"},{id:"imagecropper",name:"ImageCropper",desc:"\u56FE\u7247\u88C1\u526A\u2014\u2014canvas \u539F\u751F API + \u62D6\u62FD\u88C1\u526A\u6846 + \u6BD4\u4F8B\u63A7\u5236\uFF08\u96F6\u4F9D\u8D56\uFF09",sourceFile:"src/level5/client/components/ImageCropper/ImageCropper.ts",cssFile:"src/level5/client/components/ImageCropper/ImageCropper.css",testFile:"src/level5/client/components/ImageCropper/ImageCropper.test.ts"},{id:"wordcloud",name:"WordCloud",desc:"\u8BCD\u4E91\u2014\u2014\u6743\u91CD\u2192\u5B57\u53F7\u6620\u5C04 \xB7 \u5706\u5FC3\u540C\u5FC3\u73AF\u53D1\u6563\u5E03\u5C40 \xB7 SVG textLength \u5B9A\u5BBD\uFF08\u96F6\u4F9D\u8D56\u81EA\u7ED8\u2014\u2014SSR \u4E00\u81F4\u96F6\u91CD\u53E0\uFF09",sourceFile:"src/level5/client/components/WordCloud/WordCloud.ts",cssFile:"src/level5/client/components/WordCloud/WordCloud.css",testFile:"src/level5/client/components/WordCloud/WordCloud.test.ts",gotchas:["textLength \u5F3A\u5236\u8BCD\u5BBD=\u4F30\u7B97\u5BBD\uFF080.62\xD7ASCII/1.0\xD7CJK \u7CFB\u6570\uFF09\u2014\u2014lengthAdjust=spacing \u53EA\u8C03\u5B57\u8DDD\u4FDD\u5F62\u2014\u2014\u4E0D\u6362\u884C\u4E0D\u622A\u65AD","\u5E03\u5C40=\u540C\u5FC3\u73AF\u626B\u63CF\uFF08\u73AF\u5BBD=\u8BCD\u9AD8\u2014\u2014\u90BB\u73AF\u76F8\u63A5\u4E0D\u91CD\u53E0\uFF09\u2014\u2014\u6700\u5927\u8BCD\u5C45\u4E2D\u5FC3\u2014\u2014viewBox=\u5168\u90E8\u8BCD\u5305\u56F4\u76D2\uFF08\u81EA\u9002\u5E94\u96F6\u88C1\u526A\uFF09\u2014\u2014height \u4EC5\u663E\u793A\u9AD8","0 \u6743\u91CD\u8BCD\u8FC7\u6EE4\u4E0D\u6E32\u67D3 \xB7 \u5168\u7B49\u6743\u91CD \u2192 \u5168 maxFontSize\uFF08\u540C\u6743\u540C\u5C3A\u5BF8 Wordle \u8BED\u4E49\uFF09","\u53EF\u4EA4\u4E92\u5FC5\u987B pointer-events:bounding-box\u2014\u2014SVG text \u9ED8\u8BA4 visiblePainted=\u5B57\u5F62\u7B14\u753B\u547D\u4E2D\uFF08\u5B57\u6BCD\u95F4\u9699\u6F0F\u5230 svg \u6839\u2014\u2014\u70B9\u51FB\u4E0D\u89E6\u53D1\u5B9E\u8BC1\uFF09","\u8BCD key \u7528 word \u672C\u8EAB\uFF08\u542B\u7D22\u5F15\u65F6\u6392\u5E8F/\u6743\u91CD\u53D8\u5316\u5373 remove+create \u91CD\u5EFA\uFF09"]},{id:"wave",name:"Wave",desc:"\u70B9\u51FB\u6C34\u6CE2\u7EB9\u52A8\u6548\u2014\u2014\u5305\u88C5\u4EFB\u610F\u53EF\u70B9\u51FB\u5143\u7D20\uFF08\u7EAF CSS\uFF0Creduced-motion \u81EA\u52A8\u964D\u7EA7\uFF09",sourceFile:"src/level5/client/components/Wave/Wave.ts",cssFile:"src/level5/client/components/Wave/Wave.css",testFile:"src/level5/client/components/Wave/Wave.test.ts"},{id:"sortablelist",name:"SortableList",desc:"\u62D6\u62FD\u6392\u5E8F\u5217\u8868\u2014\u2014useDragDrop \u539F\u8BED + keyed \u8EAB\u4EFD\uFF08\u4EFB\u52A1/\u5B57\u6BB5/\u914D\u7F6E\u6392\u5E8F\uFF09",sourceFile:"src/level5/client/components/SortableList/SortableList.ts",cssFile:"src/level5/client/components/SortableList/SortableList.css",testFile:"src/level5/client/components/SortableList/SortableList.test.ts"},{id:"exportcsv",name:"ExportCSV",desc:"\u6570\u636E\u5BFC\u51FA CSV\u2014\u2014RFC 4180 \u8F6C\u4E49 + BOM\uFF08Excel \u517C\u5BB9\uFF09\u96F6\u4F9D\u8D56",sourceFile:"src/level5/client/components/ExportCSV/ExportCSV.ts",testFile:"src/level5/client/components/ExportCSV/ExportCSV.test.ts"},{id:"button",name:"Button",desc:"4 variants \xD7 3 sizes + loading + block + disabled",sourceFile:"src/level5/client/components/Button/Button.ts",cssFile:"src/level5/client/components/Button/Button.css",testFile:"src/level5/client/components/Button/Button.test.ts"},{id:"input",name:"Input",desc:"text/email/password/number\uFF0C\u652F\u6301 label/error/hint/required",sourceFile:"src/level5/client/components/Input/Input.ts",cssFile:"src/level5/client/components/Input/Input.css",testFile:"src/level5/client/components/Input/Input.test.ts"},{id:"textarea",name:"Textarea",desc:"\u591A\u884C\u6587\u672C\uFF0C\u652F\u6301 rows/label/error/hint",sourceFile:"src/level5/client/components/Textarea/Textarea.ts",cssFile:"src/level5/client/components/Textarea/Textarea.css",testFile:"src/level5/client/components/Textarea/Textarea.test.ts"},{id:"select",name:"Select",desc:"\u539F\u751F\u4E0B\u62C9\u9009\u62E9\u5668",gotchas:["\u53D7\u63A7\u8F93\u5165\u7EAA\u5F8B\uFF1Asearchable \u8F93\u5165\u7126\u70B9\u4E22\u5931\u2014\u2014useControlledInput \u5185\u90E8\u6001","\u4E8B\u4EF6 prop \u5224\u5B9A\uFF1Aon+\u5927\u5199\uFF08EVENT_RE\uFF09\u2014\u2014once/only \u7B49 on \u5F00\u5934\u5C5E\u6027\u9632\u8BEF\u5224","\u6D6E\u5C42\u5FC5\u987B portal\uFF08\xA75.4\uFF09\u2014\u2014absolute \u76F8\u5BF9\u7236\u5BB9\u5668\u5728 overflow \u4E0B\u88C1\u526A"],sourceFile:"src/level5/client/components/Select/Select.ts",cssFile:"src/level5/client/components/Select/Select.css",testFile:"src/level5/client/components/Select/Select.test.ts"},{id:"checkbox",name:"Checkbox",desc:"\u5E26 label \u7684\u590D\u9009\u6846\uFF0C\u652F\u6301 checked/disabled",sourceFile:"src/level5/client/components/Checkbox/Checkbox.ts",cssFile:"src/level5/client/components/Checkbox/Checkbox.css",testFile:"src/level5/client/components/Checkbox/Checkbox.test.ts"},{id:"switch",name:"Switch",desc:"\u5F00\u5173\u5207\u6362\uFF0C\u89C6\u89C9\u66FF\u4EE3 checkbox",sourceFile:"src/level5/client/components/Switch/Switch.ts",cssFile:"src/level5/client/components/Switch/Switch.css",testFile:"src/level5/client/components/Switch/Switch.test.ts"},{id:"radiogroup",name:"RadioGroup",desc:"\u5355\u9009\u7EC4\uFF0C\u652F\u6301 inline/options/value",sourceFile:"src/level5/client/components/RadioGroup/RadioGroup.ts",cssFile:"src/level5/client/components/RadioGroup/RadioGroup.css",testFile:"src/level5/client/components/RadioGroup/RadioGroup.test.ts"},{id:"segmentedcontrol",name:"SegmentedControl",desc:"\u5206\u6BB5\u5355\u9009\uFF08\u6A21\u5F0F\u5207\u6362/\u7B5B\u9009/\u6A21\u677F\uFF09\uFF0C\u652F\u6301 sm/block",sourceFile:"src/level5/client/components/SegmentedControl/SegmentedControl.ts",cssFile:"src/level5/client/components/SegmentedControl/SegmentedControl.css",testFile:"src/level5/client/components/SegmentedControl/SegmentedControl.test.ts"},{id:"slider",name:"Slider",desc:"\u8303\u56F4\u6ED1\u5757\uFF0C\u652F\u6301 min/max/step/label",gotchas:["\u6D4F\u89C8\u5668\u8868\u5355\u72B6\u6001\u6062\u590D\uFF08\u5237\u65B0/\u540E\u9000\uFF09\u8986\u76D6\u53D7\u63A7 value\u2014\u2014autocomplete=off + \u5185\u90E8 0-100 \u5F52\u4E00\u5316\u523B\u5EA6\uFF082000 slider \u5237\u65B0\u8DF3\u52A8\u4E8B\u6545\uFF09","\u62D6\u62FD\u4E2D\u6C14\u6CE1\u4F4D\u7F6E\u51BB\u7ED3\u2014\u2014usePopup \u951A\u70B9\u6052\u5B9A\u9700 popup.refresh() \u8DDF\u968F thumb"],sourceFile:"src/level5/client/components/Slider/Slider.ts",cssFile:"src/level5/client/components/Slider/Slider.css",testFile:"src/level5/client/components/Slider/Slider.test.ts"},{id:"form",name:"Form",desc:"\u5185\u7F6E\u9A8C\u8BC1\u89C4\u5219\uFF1Arequired/pattern/minLength/\u81EA\u5B9A\u4E49",gotchas:["\u4E09\u5C42\u4E00\u81F4\uFF08\xA76.3\uFF09\uFF1A\u6761\u4EF6\u6E32\u67D3 false \u662F\u7A7A\u6D1E\u5360\u4F4D\u2014\u2014{cond && <Alert/>} \u4E0D\u6EE4\u9664\u4E0D\u584C\u7F29\uFF08\u63D0\u4EA4\u6309\u94AE\u6D88\u5931\u4E8B\u6545\uFF09","\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 value \u5FC5\u987B\u914D onChange\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9"],sourceFile:"src/level5/client/components/Form/Form.ts",cssFile:"src/level5/client/components/Form/Form.css",testFile:"src/level5/client/components/Form/Form.test.ts"},{id:"field",name:"Field",desc:"label+error+hint \u5BB9\u5668",sourceFile:"src/level5/client/components/Field/Field.ts",cssFile:"src/level5/client/components/Field/Field.css",testFile:"src/level5/client/components/Field/Field.test.ts"},{id:"relationgraph",name:"RelationGraph",desc:"\u5173\u7CFB\u56FE\u8C31\u2014\u2014\u73AF\u5F62/\u7F51\u683C\u5E03\u5C40 + \u7C7B\u578B\u7740\u8272 + \u9009\u4E2D\u4EA4\u4E92\uFF08\u4EBA\u7269/\u7EC4\u7EC7/\u7F51\u7EDC\uFF09",sourceFile:"src/level5/client/components/RelationGraph/RelationGraph.ts",cssFile:"src/level5/client/components/RelationGraph/RelationGraph.css",testFile:"src/level5/client/components/RelationGraph/RelationGraph.test.ts"},{id:"appshell",name:"AppShell",desc:"\u5E94\u7528\u58F3\u2014\u2014\u54C1\u724C + \u5206\u7EC4\u5BFC\u822A + \u7528\u6237\u533A + \u4E3B\u5185\u5BB9\uFF08\u53D7\u63A7\u2014\u2014\u7236\u5C42\u9A71\u52A8\uFF09",sourceFile:"src/level5/client/components/AppShell/AppShell.ts",cssFile:"src/level5/client/components/AppShell/AppShell.css",testFile:"src/level5/client/components/AppShell/AppShell.test.ts"},{id:"filetree",name:"FileTree",desc:"\u6587\u4EF6\u6811\u6D4F\u89C8\u5668\u2014\u2014\u9762\u5305\u5C51 + \u5217\u8868/\u7F16\u8F91\u6001 + \u4E0A\u4F20\uFF08\u53D7\u63A7\u2014\u2014\u6570\u636E\u6E90\u65E0\u5173\uFF09",sourceFile:"src/level5/client/components/FileTree/FileTree.ts",cssFile:"src/level5/client/components/FileTree/FileTree.css",testFile:"src/level5/client/components/FileTree/FileTree.test.ts"},{id:"fileupload",name:"FileUpload",desc:"\u6587\u4EF6\u4E0A\u4F20\uFF0C\u62D6\u62FD\u533A + \u6587\u4EF6\u5217\u8868 + accept/maxSize",sourceFile:"src/level5/client/components/FileUpload/FileUpload.ts",cssFile:"src/level5/client/components/FileUpload/FileUpload.css",testFile:"src/level5/client/components/FileUpload/FileUpload.test.ts"},{id:"searchinput",name:"SearchInput",desc:"\u641C\u7D22\u8F93\u5165\u6846\uFF0C\u5E26\u6E05\u9664\u6309\u94AE",sourceFile:"src/level5/client/components/SearchInput/SearchInput.ts",cssFile:"src/level5/client/components/SearchInput/SearchInput.css",testFile:"src/level5/client/components/SearchInput/SearchInput.test.ts"},{id:"progressbar",name:"ProgressBar",desc:"\u8FDB\u5EA6\u6761\uFF0C\u652F\u6301 label/showValue",sourceFile:"src/level5/client/components/ProgressBar/ProgressBar.ts",cssFile:"src/level5/client/components/ProgressBar/ProgressBar.css",testFile:"src/level5/client/components/ProgressBar/ProgressBar.test.ts"},{id:"inputnumber",name:"InputNumber",desc:"\u6570\u5B57\u8F93\u5165\uFF1Amin/max/step + \u589E\u51CF\u6309\u94AE + precision",sourceFile:"src/level5/client/components/InputNumber/InputNumber.ts",cssFile:"src/level5/client/components/InputNumber/InputNumber.css",testFile:"src/level5/client/components/InputNumber/InputNumber.test.ts"},{id:"passwordinput",name:"PasswordInput",desc:"\u5BC6\u7801\u8F93\u5165\uFF1A\u773C\u775B\u6309\u94AE\u5207\u6362\u53EF\u89C1\u6027",sourceFile:"src/level5/client/components/PasswordInput/PasswordInput.ts",cssFile:"src/level5/client/components/PasswordInput/PasswordInput.css",testFile:"src/level5/client/components/PasswordInput/PasswordInput.test.ts"},{id:"tagsinput",name:"TagsInput",desc:"\u6807\u7B7E\u8F93\u5165\uFF1A\u56DE\u8F66/\u9017\u53F7\u6DFB\u52A0 + \u4E2D\u6587\u8F93\u5165\u6CD5\u611F\u77E5",sourceFile:"src/level5/client/components/TagsInput/TagsInput.ts",cssFile:"src/level5/client/components/TagsInput/TagsInput.css",testFile:"src/level5/client/components/TagsInput/TagsInput.test.ts"},{id:"table",name:"Table",desc:"\u53EF\u6392\u5E8F + \u81EA\u5B9A\u4E49 render + \u7A7A\u72B6\u6001",gotchas:["\u56FA\u5B9A\u5217\u5FC5\u987B\u663E\u5F0F width\uFF08\u7F3A\u7701 140 \u4F30\u7B97 + console.warn\u2014\u2014sticky \u504F\u79FB\u7D2F\u8BA1\u4F9D\u8D56\uFF09","\u6570\u7EC4\u7A7A\u6D1E\uFF1Achildren \u91CC {cond && <X/>} \u662F\u5360\u4F4D\u2014\u2014\u4E0D\u5F97\u8BEF\u5220\u4E0B\u4E00\u4E2A\u5144\u5F1F\uFF08\u63D0\u4EA4\u6309\u94AE\u6D88\u5931\u4E8B\u6545\u540C\u6E90\uFF09","\u884C\u5185\u7F16\u8F91\uFF08editable \u5217\uFF09\u5FC5\u987B\u914D onCellEdit\uFF08\u53D7\u63A7\u7EAA\u5F8B\uFF09"],sourceFile:"src/level5/client/components/Table/Table.ts",cssFile:"src/level5/client/components/Table/Table.css",testFile:"src/level5/client/components/Table/Table.test.ts"},{id:"card",name:"Card",desc:"\u5BB9\u5668\uFF0C\u652F\u6301 default/outlined/clickable",sourceFile:"src/level5/client/components/Card/Card.ts",cssFile:"src/level5/client/components/Card/Card.css",testFile:"src/level5/client/components/Card/Card.test.ts"},{id:"badge",name:"Badge",desc:"\u72B6\u6001\u6807\u7B7E + \u5706\u70B9\uFF0C6 \u79CD variant",sourceFile:"src/level5/client/components/Badge/Badge.ts",cssFile:"src/level5/client/components/Badge/Badge.css",testFile:"src/level5/client/components/Badge/Badge.test.ts"},{id:"tag",name:"Tag",desc:"\u6807\u7B7E\uFF0C\u652F\u6301 closable/onClose",sourceFile:"src/level5/client/components/Tag/Tag.ts",cssFile:"src/level5/client/components/Tag/Tag.css",testFile:"src/level5/client/components/Tag/Tag.test.ts"},{id:"avatar",name:"Avatar",desc:"\u5934\u50CF\uFF08\u9996\u5B57\u6BCD/\u56FE\u7247\uFF09\uFF0C3 \u79CD size",sourceFile:"src/level5/client/components/Avatar/Avatar.ts",cssFile:"src/level5/client/components/Avatar/Avatar.css",testFile:"src/level5/client/components/Avatar/Avatar.test.ts"},{id:"img",name:"Img",desc:"\u56FE\u7247 \\<img\\> \u7EC4\u4EF6\uFF1Afallback / lazy / preview \u70B9\u51FB\u653E\u5927",sourceFile:"src/level5/client/components/Img/Img.ts",cssFile:"src/level5/client/components/Img/Img.css",testFile:"src/level5/client/components/Img/Img.test.ts"},{id:"inview",name:"InView",desc:"\u8FDB\u5165\u89C6\u7A97\u540E\u61D2\u52A0\u8F7D\u5185\u5BB9\uFF0C\u652F\u6301 IntersectionObserver",sourceFile:"src/level5/client/components/InView/InView.ts",cssFile:"src/level5/client/components/InView/InView.css",testFile:"src/level5/client/components/InView/InView.test.ts"},{id:"timeline",name:"Timeline",desc:"\u65F6\u95F4\u7EBF\uFF1A\u8282\u70B9\u72B6\u6001\u8272 + \u65F6\u95F4 + \u5185\u5BB9\uFF08\u6267\u884C\u65E5\u5FD7/\u5BA1\u6279\u5386\u53F2\uFF09",sourceFile:"src/level5/client/components/Timeline/Timeline.ts",cssFile:"src/level5/client/components/Timeline/Timeline.css",testFile:"src/level5/client/components/Timeline/Timeline.test.ts"},{id:"descriptions",name:"Descriptions",desc:"\u63CF\u8FF0\u5217\u8868\uFF1Alabel/value \u6805\u683C + bordered + span\uFF08\u8BE6\u60C5\u9875\uFF09",sourceFile:"src/level5/client/components/Descriptions/Descriptions.ts",cssFile:"src/level5/client/components/Descriptions/Descriptions.css",testFile:"src/level5/client/components/Descriptions/Descriptions.test.ts"},{id:"avatargroup",name:"AvatarGroup",desc:"\u5934\u50CF\u7EC4\uFF1A\u5806\u53E0 + max \u6EA2\u51FA +N",sourceFile:"src/level5/client/components/AvatarGroup/AvatarGroup.ts",cssFile:"src/level5/client/components/AvatarGroup/AvatarGroup.css",testFile:"src/level5/client/components/AvatarGroup/AvatarGroup.test.ts"},{id:"markdown",name:"Markdown",desc:"AI \u56DE\u590D\u6E32\u67D3\uFF1A\u5B89\u5168\u5B50\u96C6 parser + \u4EE3\u7801\u5757 + \u94FE\u63A5\u767D\u540D\u5355",sourceFile:"src/level5/client/components/Markdown/Markdown.ts",cssFile:"src/level5/client/components/Markdown/Markdown.css",testFile:"src/level5/client/components/Markdown/Markdown.test.ts"},{id:"codeblock",name:"CodeBlock",desc:"\u4EE3\u7801\u5757\uFF1A\u8BED\u8A00\u6807\u7B7E + \u590D\u5236\u6309\u94AE + \u6A2A\u5411\u6EDA\u52A8",sourceFile:"src/level5/client/components/CodeBlock/CodeBlock.ts",cssFile:"src/level5/client/components/CodeBlock/CodeBlock.css",testFile:"src/level5/client/components/CodeBlock/CodeBlock.test.ts"},{id:"logviewer",name:"LogViewer",desc:"\u65E5\u5FD7\u6D41\uFF1AANSI \u7740\u8272 + \u865A\u62DF\u6EDA\u52A8 + \u81EA\u52A8\u8DDF\u968F + \u590D\u5236",sourceFile:"src/level5/client/components/LogViewer/LogViewer.ts",cssFile:"src/level5/client/components/LogViewer/LogViewer.css",testFile:"src/level5/client/components/LogViewer/LogViewer.test.ts"},{id:"jsonviewer",name:"JSONViewer",desc:"\u7ED3\u6784\u5316 JSON\uFF1A\u9012\u5F52\u6298\u53E0 + \u7C7B\u578B\u8272 + \u8DEF\u5F84\u590D\u5236 + \u61D2\u5C55\u5F00",sourceFile:"src/level5/client/components/JSONViewer/JSONViewer.ts",cssFile:"src/level5/client/components/JSONViewer/JSONViewer.css",testFile:"src/level5/client/components/JSONViewer/JSONViewer.test.ts"},{id:"diffview",name:"DiffView",desc:"\u4EE3\u7801 diff\uFF1ALCS \u884C\u7EA7\u5BF9\u6BD4 + \u672A\u53D8\u5757\u6298\u53E0 + \u4E09\u6001\u7740\u8272",sourceFile:"src/level5/client/components/DiffView/DiffView.ts",cssFile:"src/level5/client/components/DiffView/DiffView.css",testFile:"src/level5/client/components/DiffView/DiffView.test.ts"},{id:"sparkline",name:"Sparkline",desc:"\u8FF7\u4F60\u8D8B\u52BF\u7EBF\uFF1ASVG \u81EA\u7ED8 + \u5F52\u4E00\u5316 + \u5E73\u6ED1\u66F2\u7EBF + \u9762\u79EF\u586B\u5145",sourceFile:"src/level5/client/components/Sparkline/Sparkline.ts",cssFile:"src/level5/client/components/Sparkline/Sparkline.css",testFile:"src/level5/client/components/Sparkline/Sparkline.test.ts"},{id:"tour",name:"Tour",desc:"\u65B0\u624B\u5F15\u5BFC\uFF1A\u6B65\u9AA4\u6C14\u6CE1 + \u76EE\u6807\u9AD8\u4EAE + \u906E\u7F69 + \u952E\u76D8 Escape",sourceFile:"src/level5/client/components/Tour/Tour.ts",cssFile:"src/level5/client/components/Tour/Tour.css",testFile:"src/level5/client/components/Tour/Tour.test.ts"},{id:"kanban",name:"Kanban",desc:"\u770B\u677F\uFF1A\u539F\u751F DnD \u62D6\u62FD + \u8DE8\u5217/\u91CD\u6392 + \u60AC\u505C\u9AD8\u4EAE",gotchas:["enumerated \u5C5E\u6027\uFF08\xA76.2\uFF09\uFF1Adraggable \u7A7A\u5B57\u7B26\u4E32\u89E3\u6790\u4E3A false\u2014\u2014\u5FC5\u987B\u663E\u5F0F setAttribute true/false\uFF08\u62D6\u52A8\u53D8\u6587\u672C\u9009\u4E2D\u4E8B\u6545\uFF09"],sourceFile:"src/level5/client/components/Kanban/Kanban.ts",cssFile:"src/level5/client/components/Kanban/Kanban.css",testFile:"src/level5/client/components/Kanban/Kanban.test.ts"},{id:"pipeline",name:"Pipeline",desc:"Agent \u5DE5\u4F5C\u6D41 DAG\uFF1A\u5206\u5C42\u5E03\u5C40 + \u8D1D\u585E\u5C14\u8FDE\u7EBF + \u72B6\u6001\u8BED\u4E49\u8272 + \u73AF\u68C0\u6D4B",sourceFile:"src/level5/client/components/Pipeline/Pipeline.ts",cssFile:"src/level5/client/components/Pipeline/Pipeline.css",testFile:"src/level5/client/components/Pipeline/Pipeline.test.ts"},{id:"treeselect",name:"TreeSelect",desc:"\u6811\u5F62\u9009\u62E9\uFF1A\u5355\u9009/\u591A\u9009\uFF08\u7236\u5B50\u8054\u52A8\uFF09+ \u9009\u4E2D label \u56DE\u663E + \u53D7\u63A7\u7EAA\u5F8B",gotchas:["\u5F39\u7A97\u7EAA\u5F8B\uFF08\xA75.4\uFF09\uFF1A\u66FE\u9057\u6F0F portal\u2014\u2014absolute \u5728\u7236\u5BB9\u5668 overflow/transform \u4E0B\u88C1\u526A/\u9519\u4F4D\u2014\u2014\u7EDF\u4E00 usePopup","\u9009\u9879\u91CF\u5C0F\u573A\u666F\u641C\u7D22\u8FC7\u6EE4\u5DF2\u88C1\u526A\uFF08docs/client.md#\u80FD\u529B\u88C1\u526A\u767B\u8BB0 \u6C38\u4E45\u88C1\u526A\uFF09"],sourceFile:"src/level5/client/components/TreeSelect/TreeSelect.ts",cssFile:"src/level5/client/components/TreeSelect/TreeSelect.css",testFile:"src/level5/client/components/TreeSelect/TreeSelect.test.ts"},{id:"layout",name:"Layout",desc:"\u5E03\u5C40\u5916\u58F3\uFF1ASider \u6298\u53E0 + Header/Content/Footer \u9AA8\u67B6\uFF08antd Layout / shadcn Sidebar \u7B49\u4EF7\uFF09",sourceFile:"src/level5/client/components/Layout/Layout.ts",cssFile:"src/level5/client/components/Layout/Layout.css",testFile:"src/level5/client/components/Layout/Layout.test.ts"},{id:"popconfirm",name:"Popconfirm",desc:"\u6C14\u6CE1\u786E\u8BA4\uFF1A\u5371\u9669\u64CD\u4F5C\u9632\u8BEF\u89E6 + \u590D\u7528 usePopup \u57FA\u5EA7",gotchas:["\u6C14\u6CE1\u5185\u8868\u5355/\u81EA\u5B9A\u4E49\u7BAD\u5934\u5DF2\u88C1\u526A\uFF08Popover \u57FA\u5EA7 + \u5B9A\u4F4D\u5168\u5957\u590D\u7528\uFF09"],sourceFile:"src/level5/client/components/Popconfirm/Popconfirm.ts",cssFile:"src/level5/client/components/Popconfirm/Popconfirm.css",testFile:"src/level5/client/components/Popconfirm/Popconfirm.test.ts"},{id:"autocomplete",name:"AutoComplete",desc:"\u8F93\u5165\u8054\u60F3\uFF1A\u81EA\u7531\u8F93\u5165 + \u8FC7\u6EE4\u4E0B\u62C9 + \u952E\u76D8\u6D41 + \u9009\u4E2D\u56DE\u586B",gotchas:["\u53D7\u63A7\u8F93\u5165\u7EAA\u5F8B\uFF08\xA75.3\uFF09\uFF1A\u53D7\u63A7 input \u7126\u70B9\u4E22\u5931\u4E8B\u6545\u2014\u2014\u8F93\u5165\u671F\u95F4 value \u8D70\u5185\u90E8 keyword\uFF08useControlledInput\uFF09\uFF0C\u4E0D\u4F9D\u8D56\u53D7\u63A7 value \u56DE\u6D41","IME composition\uFF1A\u4E2D\u6587\u8F93\u5165\u7EC4\u5408\u671F\u95F4\u53D7\u63A7 value \u91CD\u7F6E\u6253\u65AD\u2014\u2014isComposing \u95E8\u63A7"],sourceFile:"src/level5/client/components/AutoComplete/AutoComplete.ts",cssFile:"src/level5/client/components/AutoComplete/AutoComplete.css",testFile:"src/level5/client/components/AutoComplete/AutoComplete.test.ts"},{id:"link",name:"Link",desc:"\u6587\u5B57\u94FE\u63A5\uFF1A\u8BED\u4E49\u8272/\u4E0B\u5212\u7EBF/disabled/\u65B0\u7A97\u53E3",sourceFile:"src/level5/client/components/Link/Link.ts",cssFile:"src/level5/client/components/Link/Link.css",testFile:"src/level5/client/components/Link/Link.test.ts"},{id:"floatbutton",name:"FloatButton",desc:"\u60AC\u6D6E\u6309\u94AE\u7EC4\uFF1A\u5C55\u5F00\u72B6\u6001\u673A + badge",sourceFile:"src/level5/client/components/FloatButton/FloatButton.ts",cssFile:"src/level5/client/components/FloatButton/FloatButton.css",testFile:"src/level5/client/components/FloatButton/FloatButton.test.ts"},{id:"navmenu",name:"NavMenu",desc:"\u9876\u90E8\u5BFC\u822A\uFF1A\u591A\u7EA7 hover \u5F39\u51FA + \u952E\u76D8\uFF08shadcn NavigationMenu\uFF09",sourceFile:"src/level5/client/components/NavMenu/NavMenu.ts",cssFile:"src/level5/client/components/NavMenu/NavMenu.css",testFile:"src/level5/client/components/NavMenu/NavMenu.test.ts"},{id:"space",name:"Space",desc:"\u95F4\u8DDD\u5BB9\u5668\uFF1Asize/direction/wrap + split \u5206\u9694\u7B26",sourceFile:"src/level5/client/components/Space/Space.ts",cssFile:"src/level5/client/components/Space/Space.css",testFile:"src/level5/client/components/Space/Space.test.ts"},{id:"grid",name:"Grid",desc:"24 \u6805\u683C + gutter + flex \u5BB9\u5668\u6A21\u5F0F\uFF08Row/Col/Flex \u7B49\u4EF7\uFF09",sourceFile:"src/level5/client/components/Grid/Grid.ts",cssFile:"src/level5/client/components/Grid/Grid.css",testFile:"src/level5/client/components/Grid/Grid.test.ts"},{id:"scrollbar",name:"Scrollbar",desc:"\u81EA\u5B9A\u4E49\u6EDA\u52A8\u5BB9\u5668\uFF1Awebkit \u6837\u5F0F + hover \u663E\u793A",sourceFile:"src/level5/client/components/Scrollbar/Scrollbar.ts",cssFile:"src/level5/client/components/Scrollbar/Scrollbar.css",testFile:"src/level5/client/components/Scrollbar/Scrollbar.test.ts"},{id:"alertgroup",name:"AlertGroup",desc:"\u901A\u77E5\u5408\u5E76\u7EC4\uFF1A\u22653 \u6761\u6298\u53E0\u4E3A +N\uFF0C\u70B9\u51FB\u5C55\u5F00",sourceFile:"src/level5/client/components/AlertGroup/AlertGroup.ts",cssFile:"src/level5/client/components/AlertGroup/AlertGroup.css",testFile:"src/level5/client/components/AlertGroup/AlertGroup.test.ts"},{id:"messagebubble",name:"MessageBubble",desc:"\u6D88\u606F\u6C14\u6CE1\uFF1Auser/assistant + streaming/error \u72B6\u6001 + actions",family:"ai-chat",sourceFile:"src/level5/client/components/MessageBubble/MessageBubble.ts",cssFile:"src/level5/client/components/MessageBubble/MessageBubble.css",testFile:"src/level5/client/components/MessageBubble/MessageBubble.test.ts"},{id:"highlight",name:"Highlight",desc:"\u641C\u7D22\u8BCD\u9AD8\u4EAE\uFF1A\u5206\u8BCD\u6E32\u67D3 mark\uFF0C\u5927\u5C0F\u5199\u4E0D\u654F\u611F",sourceFile:"src/level5/client/components/Highlight/Highlight.ts",cssFile:"src/level5/client/components/Highlight/Highlight.css",testFile:"src/level5/client/components/Highlight/Highlight.test.ts"},{id:"list",name:"List",desc:"\u901A\u7528\u5217\u8868\uFF1ArenderItem + divided + header/footer/empty",sourceFile:"src/level5/client/components/List/List.ts",cssFile:"src/level5/client/components/List/List.css",testFile:"src/level5/client/components/List/List.test.ts"},{id:"result",name:"Result",desc:"\u7ED3\u679C\u9875\uFF1Asuccess/error/warning/info + extra \u64CD\u4F5C\u533A",sourceFile:"src/level5/client/components/Result/Result.ts",cssFile:"src/level5/client/components/Result/Result.css",testFile:"src/level5/client/components/Result/Result.test.ts"},{id:"confirm",name:"Confirm",desc:"\u786E\u8BA4\u5BF9\u8BDD\u6846\uFF0CPromise \u5316 await \u8C03\u7528",sourceFile:"src/level5/client/components/Confirm/Confirm.ts",testFile:"src/level5/client/components/Confirm/Confirm.test.ts"},{id:"statcard",name:"StatCard",desc:"KPI \u6307\u6807\u5361\uFF0C\u652F\u6301 trend/icon",sourceFile:"src/level5/client/components/StatCard/StatCard.ts",cssFile:"src/level5/client/components/StatCard/StatCard.css",testFile:"src/level5/client/components/StatCard/StatCard.test.ts"},{id:"chart",name:"Chart",desc:"SVG \u56FE\u8868\uFF1Aline/bar/pie/radar/gauge/scatter\u2014\u2014\u96F6\u4F9D\u8D56\u81EA\u7ED8",sourceFile:"src/level5/client/components/Chart/Chart.ts",cssFile:"src/level5/client/components/Chart/Chart.css",testFile:"src/level5/client/components/Chart/Chart.test.ts"},{id:"editor",name:"Editor",desc:"\u5BCC\u6587\u672C\u7F16\u8F91\u5668\uFF0CcontentEditable + toolbar\uFF0C\u96F6\u4F9D\u8D56",sourceFile:"src/level5/client/components/Editor/Editor.ts",cssFile:"src/level5/client/components/Editor/Editor.css",testFile:"src/level5/client/components/Editor/Editor.test.ts"},{id:"filepreview",name:"FilePreview",desc:"\u6587\u4EF6\u9884\u89C8\uFF08md/html/pdf/office\uFF09\u2014\u2014\u57FA\u4E8E\u4E8B\u4EF6\u6D41\uFF0C\u53EF\u7F16\u8F91",family:"file-preview",sourceFile:"src/level5/client/components/FilePreview/FilePreview.ts",cssFile:"src/level5/client/components/FilePreview/FilePreview.css",testFile:"src/level5/client/components/FilePreview/FilePreview.test.ts"},{id:"themeswitch",name:"ThemeSwitch",desc:"\u4E3B\u9898\u5207\u6362\uFF1Aauto/light/dark\uFF0ClocalStorage \u6301\u4E45\u5316",sourceFile:"src/level5/client/components/ThemeSwitch/ThemeSwitch.ts",cssFile:"src/level5/client/components/ThemeSwitch/ThemeSwitch.css",testFile:"src/level5/client/components/ThemeSwitch/ThemeSwitch.test.ts"},{id:"datepicker",name:"DatePicker",desc:"\u65E5\u671F\u9009\u62E9\u5668\uFF0C\u56DB\u79CD\u6A21\u5F0F\uFF1Adate/datetime/time/range",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 value/month \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9"],sourceFile:"src/level5/client/components/DatePicker/DatePicker.ts",cssFile:"src/level5/client/components/DatePicker/DatePicker.css",testFile:"src/level5/client/components/DatePicker/DatePicker.test.ts"},{id:"modal",name:"Modal",desc:"\u81EA\u5B9A\u4E49\u5BBD\u5EA6 + closable \u63A7\u5236\u5173\u95ED\u6309\u94AE",gotchas:["\u9000\u573A\u52A8\u753B\uFF1Aexit \u7C7B\u5FC5\u987B\u6302\u8F7D\uFF08animationend \u9A71\u52A8\u5378\u8F7D\uFF09\u2014\u2014reduced-motion \u4E0B\u52A8\u753B\u964D\u4E3A 0.01ms \u7B49\u6548\u77AC\u65F6","\u4F1A\u8BDD\u7EA7\u6A21\u6001\u56DB\u4EF6\u5957\uFF1Apresence/trapFocus/lockScroll \u7531 usePopup \u7EDF\u4E00\u63D0\u4F9B"],sourceFile:"src/level5/client/components/Modal/Modal.ts",cssFile:"src/level5/client/components/Modal/Modal.css",testFile:"src/level5/client/components/Modal/Modal.test.ts"},{id:"drawer",name:"Drawer",desc:"\u4FA7\u8FB9\u9762\u677F\uFF0C\u5DE6\u53F3\u6ED1\u5165 + ESC \u5173\u95ED",gotchas:["\u9000\u573A\u52A8\u753B\uFF1A--enter/--exit \u7C7B\u5FC5\u987B\u6210\u5BF9\uFF08audit \u5F3A\u5236\uFF09\u2014\u2014\u53EA\u5B9A\u4E49\u4E0D\u6302\u662F\u6B7B\u4EE3\u7801\uFF08CS-01\uFF09"],sourceFile:"src/level5/client/components/Drawer/Drawer.ts",cssFile:"src/level5/client/components/Drawer/Drawer.css",testFile:"src/level5/client/components/Drawer/Drawer.test.ts"},{id:"popover",name:"Popover",desc:"\u901A\u7528\u5F39\u51FA\u5C42\uFF0Cclick/hover \u89E6\u53D1\uFF0C4 \u65B9\u5411",gotchas:["portal \u69FD\u8C41\u514D\uFF08\u540C HoverCard\uFF09","\u5BCC\u5185\u5BB9\u81EA\u52A8\u5224\u5B9A\u5DF2\u88C1\u526A\u2014\u2014HoverCard \u8865\u5BCC\u5185\u5BB9\uFF08docs/client.md#\u80FD\u529B\u88C1\u526A\u767B\u8BB0\uFF09"],sourceFile:"src/level5/client/components/Popover/Popover.ts",cssFile:"src/level5/client/components/Popover/Popover.css",testFile:"src/level5/client/components/Popover/Popover.test.ts"},{id:"tooltip",name:"Tooltip",desc:"hover \u6D6E\u52A8\u63D0\u793A\uFF0C4 \u65B9\u5411",gotchas:["portal \u69FD\u8C41\u514D\uFF08\u540C HoverCard\uFF09\u2014\u2014\u6D6E\u5C42\u63D2\u69FD\u975E\u4E1A\u52A1\u5217\u8868"],sourceFile:"src/level5/client/components/Tooltip/Tooltip.ts",cssFile:"src/level5/client/components/Tooltip/Tooltip.css",testFile:"src/level5/client/components/Tooltip/Tooltip.test.ts"},{id:"toast",name:"Toast",desc:"5 \u79CD\u4F4D\u7F6E + \u81EA\u52A8\u6D88\u5931 + \u6570\u91CF\u9650\u5236",sourceFile:"src/level5/client/components/Toast/Toast.ts",cssFile:"src/level5/client/components/Toast/Toast.css",testFile:"src/level5/client/components/Toast/Toast.test.ts"},{id:"alert",name:"Alert",desc:"\u4FE1\u606F\u63D0\u793A\u6761\uFF0C4 \u79CD variant + closable",sourceFile:"src/level5/client/components/Alert/Alert.ts",cssFile:"src/level5/client/components/Alert/Alert.css",testFile:"src/level5/client/components/Alert/Alert.test.ts"},{id:"loading",name:"Loading",desc:"\u52A0\u8F7D\u72B6\u6001\uFF0C\u652F\u6301\u81EA\u5B9A\u4E49\u6587\u5B57",sourceFile:"src/level5/client/components/Loading/Loading.ts",cssFile:"src/level5/client/components/Loading/Loading.css",testFile:"src/level5/client/components/Loading/Loading.test.ts"},{id:"skeleton",name:"Skeleton",desc:"text/circle/rect/image/avatar/table \u516D\u79CD\u53D8\u4F53",sourceFile:"src/level5/client/components/Skeleton/Skeleton.ts",cssFile:"src/level5/client/components/Skeleton/Skeleton.css",testFile:"src/level5/client/components/Skeleton/Skeleton.test.ts"},{id:"emptystate",name:"EmptyState",desc:"\u7A7A\u72B6\u6001\u5360\u4F4D\uFF0C\u652F\u6301 icon/text/hint/action",sourceFile:"src/level5/client/components/EmptyState/EmptyState.ts",cssFile:"src/level5/client/components/EmptyState/EmptyState.css",testFile:"src/level5/client/components/EmptyState/EmptyState.test.ts"},{id:"breadcrumb",name:"Breadcrumb",desc:"\u9762\u5305\u5C51\u5BFC\u822A\uFF0C\u652F\u6301 aria-current",sourceFile:"src/level5/client/components/Breadcrumb/Breadcrumb.ts",cssFile:"src/level5/client/components/Breadcrumb/Breadcrumb.css",testFile:"src/level5/client/components/Breadcrumb/Breadcrumb.test.ts"},{id:"menu",name:"Menu",desc:"\u4FA7\u680F\u5BFC\u822A\uFF1A\u5206\u7EC4 + \u56FE\u6807 + \u9009\u4E2D\u6001 + \u65B9\u5411\u952E",sourceFile:"src/level5/client/components/Menu/Menu.ts",cssFile:"src/level5/client/components/Menu/Menu.css",testFile:"src/level5/client/components/Menu/Menu.test.ts"},{id:"tabs",name:"Tabs",desc:"\u6807\u7B7E\u9875\u5207\u6362\uFF0C\u652F\u6301 active/onChange",gotchas:["\u6DF7\u5408\u6570\u7EC4\u7A33\u5B9A key\uFF1AtabList+addBtn+ink \u5168 keyed\u2014\u2014\u65E0 key \u9879\u9000 unkeyed \u4F4D\u7F6E\u914D\u5BF9\uFF08\u65B0\u589E tab \u9519\u4F4D\u4E8B\u6545\uFF09","closable \u5FC5\u987B\u914D onClose / addable \u5FC5\u987B\u914D onAdd\uFF08\u53D7\u63A7\u7EAA\u5F8B\u2014\u2014console.warn\uFF09"],sourceFile:"src/level5/client/components/Tabs/Tabs.ts",cssFile:"src/level5/client/components/Tabs/Tabs.css",testFile:"src/level5/client/components/Tabs/Tabs.test.ts"},{id:"dropdown",name:"Dropdown",desc:"\u4E0B\u62C9\u83DC\u5355\uFF0C\u652F\u6301 danger variant",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 open \u5FC5\u987B\u914D onOpenChange\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9","\u547D\u4EE4\u5F0F\u5F39\u7A97\uFF1A\u6D6E\u5C42\u7ECF ctx.ui.openPopup\uFF08\u552F\u4E00\u5F62\u6001\u2014\u2014toast \u5FC3\u667A\u2014\u2014\u5185\u6838\u81EA\u7BA1\u7406\u751F\u547D\u5468\u671F\uFF09"],sourceFile:"src/level5/client/components/Dropdown/Dropdown.ts",cssFile:"src/level5/client/components/Dropdown/Dropdown.css",testFile:"src/level5/client/components/Dropdown/Dropdown.test.ts"},{id:"pagination",name:"Pagination",desc:"\u5206\u9875\u5668\uFF0C\u81EA\u52A8\u8BA1\u7B97\u9875\u7801\u8303\u56F4",sourceFile:"src/level5/client/components/Pagination/Pagination.ts",cssFile:"src/level5/client/components/Pagination/Pagination.css",testFile:"src/level5/client/components/Pagination/Pagination.test.ts"},{id:"steps",name:"Steps",desc:"\u5206\u6B65\u6307\u793A\u5668\uFF0C\u652F\u6301 active/current",sourceFile:"src/level5/client/components/Steps/Steps.ts",cssFile:"src/level5/client/components/Steps/Steps.css",testFile:"src/level5/client/components/Steps/Steps.test.ts"},{id:"accordion",name:"Accordion",desc:"\u6298\u53E0\u9762\u677F\uFF0C\u652F\u6301\u591A\u4E2A items",sourceFile:"src/level5/client/components/Accordion/Accordion.ts",cssFile:"src/level5/client/components/Accordion/Accordion.css",testFile:"src/level5/client/components/Accordion/Accordion.test.ts"},{id:"aichat",name:"AiChat",desc:"useChat + \u6807\u51C6\u5BF9\u8BDD\u754C\u9762\uFF1A\u6D41\u5F0F token / \u5DE5\u5177\u5361 / \u5BA1\u6279\u5361 / \u81EA\u52A8\u6EDA\u52A8\uFF0C\u534F\u8BAE\u5BF9\u9875\u9762\u900F\u660E",family:"ai-chat",sourceFile:"src/level5/client/components/AiChat/AiChat.ts",cssFile:"src/level5/client/components/AiChat/AiChat.css",testFile:"src/level5/client/components/AiChat/AiChat.test.ts"},{id:"chatinput",name:"ChatInput",desc:"\u72EC\u7ACB\u804A\u5929\u8F93\u5165\u6761\uFF08AiChat \u62BD\u53D6\uFF09\uFF1A\u5355\u884C/\u591A\u884C + streaming \u505C\u6B62 + IME \u5B89\u5168\u2014\u2014\u4E0D\u81EA\u5E26\u804A\u5929\u903B\u8F91",family:"ai-chat",sourceFile:"src/level5/client/components/ChatInput/ChatInput.ts",cssFile:"src/level5/client/components/ChatInput/ChatInput.css",testFile:"src/level5/client/components/ChatInput/ChatInput.test.ts"},{id:"authpage",name:"AuthPage",desc:"\u8BA4\u8BC1\u9875\u9AA8\u67B6\uFF1A\u5C45\u4E2D\u5361\u7247 + logo + \u8868\u5355\u63D2\u69FD + \u9519\u8BEF\u6761 + \u63D0\u4EA4 loading\uFF08\u767B\u5F55/\u6CE8\u518C\u590D\u7528\uFF09",sourceFile:"src/level5/client/components/AuthPage/AuthPage.ts",testFile:"src/level5/client/components/AuthPage/AuthPage.test.ts"},{id:"toolcallcard",name:"ToolCallCard",desc:"\u5DE5\u5177\u8C03\u7528\u5361\u7247\uFF1Arunning / ok / error \u72B6\u6001\u673A\uFF08call/progress/result \u4E09\u5B57\u6BB5\u9A71\u52A8\uFF09",family:"ai-chat",sourceFile:"src/level5/client/components/ToolCallCard/ToolCallCard.ts",cssFile:"src/level5/client/components/ToolCallCard/ToolCallCard.css",testFile:"src/level5/client/components/ToolCallCard/ToolCallCard.test.ts"},{id:"jsonschemaform",name:"JsonSchemaForm",desc:"JSON Schema \u2192 \u53C2\u6570\u8F93\u5165\u8868\u5355\uFF1A\u7C7B\u578B\u6620\u5C04 + \u5FC5\u586B/\u8303\u56F4\u6821\u9A8C + \u5D4C\u5957/\u6570\u7EC4\uFF08AI \u5DE5\u5177\u53C2\u6570\u8F93\u5165\u9762\uFF09",sourceFile:"src/level5/client/components/JsonSchemaForm/JsonSchemaForm.ts",cssFile:"src/level5/client/components/JsonSchemaForm/JsonSchemaForm.css",testFile:"src/level5/client/components/JsonSchemaForm/JsonSchemaForm.test.ts"},{id:"reasoningblock",name:"ReasoningBlock",desc:"CoT \u63A8\u7406\u6298\u53E0\u5C55\u793A\uFF1Aaria-expanded + \u952E\u76D8\u53EF\u8FBE + \u6D41\u5F0F\u8109\u51B2\uFF08thinking \u6A21\u5F0F reasoning_content\uFF09",family:"ai-chat",sourceFile:"src/level5/client/components/ReasoningBlock/ReasoningBlock.ts",cssFile:"src/level5/client/components/ReasoningBlock/ReasoningBlock.css",testFile:"src/level5/client/components/ReasoningBlock/ReasoningBlock.test.ts"},{id:"citationcard",name:"CitationCard",desc:"RAG \u5F15\u7528\u6765\u6E90\uFF1A\u6298\u53E0\u300C\u5F15\u7528 N \u6761\u300D+ \u6761\u76EE\u5217\u8868\uFF08\u5E8F\u53F7/\u6807\u9898/\u6765\u6E90/\u7247\u6BB5/\u94FE\u63A5\uFF09+ \u6EA2\u51FA +N",family:"ai-chat",sourceFile:"src/level5/client/components/CitationCard/CitationCard.ts",cssFile:"src/level5/client/components/CitationCard/CitationCard.css",testFile:"src/level5/client/components/CitationCard/CitationCard.test.ts"},{id:"sessionlist",name:"SessionList",desc:"\u4F1A\u8BDD\u7BA1\u7406\u5217\u8868\uFF1A\u5206\u7EC4\uFF08\u4ECA\u5929/\u6628\u5929/\u66F4\u65E9\uFF09+ \u641C\u7D22 + \u9009\u4E2D + \u91CD\u547D\u540D/\u5220\u9664/\u65B0\u5EFA + \u952E\u76D8\u5BFC\u822A",family:"ai-chat",sourceFile:"src/level5/client/components/SessionList/SessionList.ts",cssFile:"src/level5/client/components/SessionList/SessionList.css",testFile:"src/level5/client/components/SessionList/SessionList.test.ts"},{id:"approvalcard",name:"ApprovalCard",desc:"HITL \u5BA1\u6279\u5361\u7247\uFF1Apending \u53EF\u6279/\u62D2 + \u4FEE\u6539\u53C2\u6570\uFF08JsonSchemaForm\uFF09\xB7 approved/rejected/timeout \u7EC8\u6001",family:"ai-chat",sourceFile:"src/level5/client/components/ApprovalCard/ApprovalCard.ts",cssFile:"src/level5/client/components/ApprovalCard/ApprovalCard.css",testFile:"src/level5/client/components/ApprovalCard/ApprovalCard.test.ts"},{id:"pageheader",name:"PageHeader",desc:"\u9875\u9762\u6807\u9898\u680F\uFF0C\u652F\u6301 sub + \u53F3\u4FA7\u64CD\u4F5C\u533A + display \u5927\u6807\u9898",sourceFile:"src/level5/client/components/PageHeader/PageHeader.ts",cssFile:"src/level5/client/components/PageHeader/PageHeader.css",testFile:"src/level5/client/components/PageHeader/PageHeader.test.ts"},{id:"icon",name:"Icon",desc:"stroke SVG \u56FE\u6807\u96C6\uFF0CcurrentColor \u7740\u8272\uFF0C\u968F\u5B57\u53F7\u7F29\u653E",sourceFile:"src/level5/client/components/Icon/Icon.ts",cssFile:"src/level5/client/components/Icon/Icon.css",testFile:"src/level5/client/components/Icon/Icon.test.ts"},{id:"divider",name:"Divider",desc:"\u5206\u5272\u7EBF\uFF0C\u652F\u6301 horizontal/vertical/\u5E26\u6587\u5B57",sourceFile:"src/level5/client/components/Divider/Divider.ts",cssFile:"src/level5/client/components/Divider/Divider.css",testFile:"src/level5/client/components/Divider/Divider.test.ts"},{id:"rate",name:"Rate",desc:"\u8BC4\u5206\uFF1A\u952E\u76D8\u65B9\u5411\u952E / allowClear / readOnly\uFF0C\u65B0\u589E star \u56FE\u6807",gotchas:["\u5C0F\u5C3A\u5BF8 button \u56FA\u5B9A min/max-height\uFF08\xA75.6\uFF09\uFF1A\u661F 16x36 \u7AD6\u6761\u4E8B\u6545"],sourceFile:"src/level5/client/components/Rate/Rate.ts",cssFile:"src/level5/client/components/Rate/Rate.css",testFile:"src/level5/client/components/Rate/Rate.test.ts"},{id:"typography",name:"Typography",desc:"Title/Text/Paragraph\uFF1A\u8BED\u4E49\u6807\u7B7E + \u8BED\u4E49\u8272 -text \u53D8\u4F53 + mark/code/\u5220\u9664\u7EBF",sourceFile:"src/level5/client/components/Typography/Typography.ts",cssFile:"src/level5/client/components/Typography/Typography.css",testFile:"src/level5/client/components/Typography/Typography.test.ts"},{id:"label",name:"Label",desc:"\u72EC\u7ACB\u6807\u7B7E\uFF08required \u661F\u53F7\uFF09+ \u5BBD\u9AD8\u6BD4\u5BB9\u5668\uFF08\u5185\u5BB9\u586B\u6EE1\uFF09",sourceFile:"src/level5/client/components/Label/Label.ts",cssFile:"src/level5/client/components/Label/Label.css",testFile:"src/level5/client/components/Label/Label.test.ts"},{id:"aspectratio",name:"AspectRatio",desc:"\u72EC\u7ACB\u6807\u7B7E\uFF08required \u661F\u53F7\uFF09+ \u5BBD\u9AD8\u6BD4\u5BB9\u5668\uFF08\u5185\u5BB9\u586B\u6EE1\uFF09",sourceFile:"src/level5/client/components/AspectRatio/AspectRatio.ts",cssFile:"src/level5/client/components/AspectRatio/AspectRatio.css",testFile:"src/level5/client/components/AspectRatio/AspectRatio.test.ts"},{id:"checkboxgroup",name:"CheckboxGroup",desc:"\u590D\u9009\u6846\u7EC4\uFF1A\u6570\u7EC4\u53D7\u63A7 + \u6805\u683C\u5217\u6570\uFF08antd Checkbox.Group\uFF09",sourceFile:"src/level5/client/components/CheckboxGroup/CheckboxGroup.ts",cssFile:"src/level5/client/components/CheckboxGroup/CheckboxGroup.css",testFile:"src/level5/client/components/CheckboxGroup/CheckboxGroup.test.ts"},{id:"pininput",name:"PinInput",desc:"\u9A8C\u8BC1\u7801\u8F93\u5165\uFF1A\u81EA\u52A8\u805A\u7126/\u7C98\u8D34\u5206\u6D3E/Backspace \u56DE\u9000\uFF08shadcn InputOTP\uFF09",sourceFile:"src/level5/client/components/PinInput/PinInput.ts",cssFile:"src/level5/client/components/PinInput/PinInput.css",testFile:"src/level5/client/components/PinInput/PinInput.test.ts"},{id:"copybutton",name:"CopyButton",desc:"\u590D\u5236\u6309\u94AE\uFF1Aclipboard + execCommand \u964D\u7EA7 + \u6210\u529F\u72B6\u6001\u673A",sourceFile:"src/level5/client/components/CopyButton/CopyButton.ts",cssFile:"src/level5/client/components/CopyButton/CopyButton.css",testFile:"src/level5/client/components/CopyButton/CopyButton.test.ts"},{id:"colorpicker",name:"ColorPicker",desc:"\u989C\u8272\u9009\u62E9\uFF1A\u9884\u8BBE\u8272\u677F + hex \u8F93\u5165\uFF08Popover \u5F39\u5C42\uFF09",sourceFile:"src/level5/client/components/ColorPicker/ColorPicker.ts",cssFile:"src/level5/client/components/ColorPicker/ColorPicker.css",testFile:"src/level5/client/components/ColorPicker/ColorPicker.test.ts"},{id:"hovercard",name:"HoverCard",desc:"\u60AC\u505C\u5BCC\u5185\u5BB9\u5361\uFF1AopenDelay \u5EF6\u8FDF + \u4EFB\u610F VNode\uFF08shadcn\uFF09",gotchas:["portal \u69FD\u8C41\u514D\uFF1A\u6D6E\u5C42\u63D2\u69FD\u6253\u5F00/\u5173\u95ED\u4E0D\u89E6\u53D1 A \u7EA7\u52A8\u6001\u6570\u7EC4\u68C0\u6D4B\uFF08\u6846\u67B6\u7BA1\u7406\u5207\u6362\u69FD\uFF09"],sourceFile:"src/level5/client/components/HoverCard/HoverCard.ts",cssFile:"src/level5/client/components/HoverCard/HoverCard.css",testFile:"src/level5/client/components/HoverCard/HoverCard.test.ts"},{id:"notification",name:"Notification",desc:"\u961F\u5217\u5F0F\u901A\u77E5\uFF1Anotification.success/error/warning \u547D\u4EE4\u5F0F\uFF08antd \u5BF9\u9F50\uFF09",sourceFile:"src/level5/client/components/Notification/Notification.ts",cssFile:"src/level5/client/components/Notification/Notification.css",testFile:"src/level5/client/components/Notification/Notification.test.ts"},{id:"backtop",name:"BackTop",desc:"\u56DE\u5230\u9876\u90E8\uFF08\u6EDA\u52A8\u8D85 400px \u663E\u793A\uFF09+ \u56FA\u5B9A\u5BFC\u822A\uFF08\u8DDD\u9876 80px \u9489\u4F4F\uFF09",sourceFile:"src/level5/client/components/BackTop/BackTop.ts",cssFile:"src/level5/client/components/BackTop/BackTop.css",testFile:"src/level5/client/components/BackTop/BackTop.test.ts"},{id:"affix",name:"Affix",desc:"\u56DE\u5230\u9876\u90E8\uFF08\u6EDA\u52A8\u8D85 400px \u663E\u793A\uFF09+ \u56FA\u5B9A\u5BFC\u822A\uFF08\u8DDD\u9876 80px \u9489\u4F4F\uFF09",sourceFile:"src/level5/client/components/Affix/Affix.ts",cssFile:"src/level5/client/components/Affix/Affix.css",testFile:"src/level5/client/components/Affix/Affix.test.ts"},{id:"anchor",name:"Anchor",desc:"\u951A\u70B9\u5BFC\u822A\uFF1A\u6EDA\u52A8\u9AD8\u4EAE\u8DDF\u968F + \u70B9\u51FB\u5E73\u6ED1\u6EDA\u52A8",sourceFile:"src/level5/client/components/Anchor/Anchor.ts",cssFile:"src/level5/client/components/Anchor/Anchor.css",testFile:"src/level5/client/components/Anchor/Anchor.test.ts"},{id:"contextmenu",name:"ContextMenu",desc:"\u53F3\u952E\u83DC\u5355\uFF1A\u5149\u6807\u5B9A\u4F4D + \u65B9\u5411\u952E + danger \u53D8\u4F53\uFF08shadcn\uFF09",gotchas:["portal \u69FD\u8C41\u514D\uFF1B\u53F3\u952E + \u89E6\u5C4F\u957F\u6309\u53CC\u901A\u9053"],sourceFile:"src/level5/client/components/ContextMenu/ContextMenu.ts",cssFile:"src/level5/client/components/ContextMenu/ContextMenu.css",testFile:"src/level5/client/components/ContextMenu/ContextMenu.test.ts"},{id:"mentions",name:"Mentions",desc:"@\u63D0\u53CA\uFF1Acomposition \u6291\u5236 + \u8FC7\u6EE4\u63D2\u5165\uFF08antd Mentions\uFF09",sourceFile:"src/level5/client/components/Mentions/Mentions.ts",cssFile:"src/level5/client/components/Mentions/Mentions.css",testFile:"src/level5/client/components/Mentions/Mentions.test.ts"},{id:"collapse",name:"Collapse",desc:"\u884C\u5185\u6298\u53E0\uFF1A\u5F02\u6B65 loading + extra \u64CD\u4F5C\u533A\uFF08\u533A\u522B\u4E8E Accordion\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF08\xA75.2\uFF09\uFF1A\u53D7\u63A7 activeKeys \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9\uFF08console.warn \u9632\u62A4\uFF09"],sourceFile:"src/level5/client/components/Collapse/Collapse.ts",cssFile:"src/level5/client/components/Collapse/Collapse.css",testFile:"src/level5/client/components/Collapse/Collapse.test.ts"},{id:"tree",name:"Tree",desc:"\u6811\u5F62\uFF1A\u9012\u5F52\u6A21\u578B + \u52FE\u9009\u7236\u5B50\u8054\u52A8 + indeterminate\uFF08antd/EP Tree\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1AselectedKeys/checkedKeys/expandedKeys \u5FC5\u987B\u914D\u56DE\u8C03\uFF08\u7F3A\u56DE\u8C03 console.warn\uFF09","\u5C0F\u5C3A\u5BF8 button \u56FA\u5B9A min/max-height\uFF08\xA75.6\uFF09\uFF1Acheckbox 14x36 \u7AD6\u6761\u4E8B\u6545","\u865A\u62DF\u6A21\u5F0F\uFF08virtual\uFF09\u952E\u76D8\u5BFC\u822A\u9650\u4E8E\u53EF\u89C1\u7A97\u53E3\uFF08VirtualList \u65E0 scrollTo\u2014\u2014\u88C1\u526A\u767B\u8BB0\uFF09"],sourceFile:"src/level5/client/components/Tree/Tree.ts",cssFile:"src/level5/client/components/Tree/Tree.css",testFile:"src/level5/client/components/Tree/Tree.test.ts"},{id:"cascader",name:"Cascader",desc:"\u7EA7\u8054\u9009\u62E9\uFF1A\u591A\u5217\u9762\u677F\u9010\u7EA7\u63A8\u8FDB\uFF08antd/EP Cascader\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 value \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9","\u591A\u9009\uFF08multiple\uFF09\u5DF2\u88C1\u526A\uFF08\u4F4E\u9891\u2014\u2014\u5355\u9009+\u641C\u7D22\u5DF2\u591F\uFF0C\u89C1 docs/client.md#\u80FD\u529B\u88C1\u526A\u767B\u8BB0\uFF09"],sourceFile:"src/level5/client/components/Cascader/Cascader.ts",cssFile:"src/level5/client/components/Cascader/Cascader.css",testFile:"src/level5/client/components/Cascader/Cascader.test.ts"},{id:"transfer",name:"Transfer",desc:"\u7A7F\u68AD\u6846\uFF1A\u53CC\u5217\u8868 + \u9009\u4E2D\u79FB\u52A8\uFF08antd/EP Transfer\uFF09",sourceFile:"src/level5/client/components/Transfer/Transfer.ts",cssFile:"src/level5/client/components/Transfer/Transfer.css",testFile:"src/level5/client/components/Transfer/Transfer.test.ts"},{id:"command",name:"Command",desc:"\u547D\u4EE4\u9762\u677F\uFF1A\u2318K \u5168\u5C40\u5FEB\u6377\u952E + \u952E\u76D8\u6D41\uFF08shadcn Command\uFF09",sourceFile:"src/level5/client/components/Command/Command.ts",cssFile:"src/level5/client/components/Command/Command.css",testFile:"src/level5/client/components/Command/Command.test.ts"},{id:"menubar",name:"Menubar",desc:"\u6C34\u5E73\u83DC\u5355\u680F\uFF1A\u2190\u2192 \u5207\u6362 + \u2193 \u5C55\u5F00\uFF08shadcn Menubar\uFF09",sourceFile:"src/level5/client/components/Menubar/Menubar.ts",cssFile:"src/level5/client/components/Menubar/Menubar.css",testFile:"src/level5/client/components/Menubar/Menubar.test.ts"},{id:"carousel",name:"Carousel",desc:"\u8F6E\u64AD\uFF1A\u7BAD\u5934/\u5706\u70B9/\u5FAA\u73AF + \u81EA\u52A8\u64AD\u653E\uFF08\u4E09\u5E93\u5171\u8BC6\uFF09",gotchas:["\u5C0F\u5C3A\u5BF8 button \u56FA\u5B9A min/max-height\uFF08\xA75.6\uFF09\uFF1A\u5706\u70B9 8x45 \u7AD6\u6761\u4E8B\u6545"],sourceFile:"src/level5/client/components/Carousel/Carousel.ts",cssFile:"src/level5/client/components/Carousel/Carousel.css",testFile:"src/level5/client/components/Carousel/Carousel.test.ts"},{id:"resizable",name:"Resizable",desc:"\u62D6\u62FD\u5206\u5272\u9762\u677F\uFF1Apointer + \u952E\u76D8\u65B9\u5411\u952E + clamp\uFF08shadcn\uFF09",sourceFile:"src/level5/client/components/Resizable/Resizable.ts",cssFile:"src/level5/client/components/Resizable/Resizable.css",testFile:"src/level5/client/components/Resizable/Resizable.test.ts"},{id:"calendar",name:"Calendar",desc:"\u6708\u5386\uFF1A\u4E8B\u4EF6\u70B9 + \u6708\u5207\u6362 + \u65E5\u671F\u9009\u62E9\uFF08antd/EP Calendar\uFF09",gotchas:["\u53D7\u63A7\u7EAA\u5F8B\uFF1A\u53D7\u63A7 month/value \u5FC5\u987B\u914D\u56DE\u8C03\u2014\u2014\u7F3A\u56DE\u8C03\u9759\u9ED8\u4E0D\u53EF\u70B9\uFF08console.warn \u9632\u62A4\uFF09"],sourceFile:"src/level5/client/components/Calendar/Calendar.ts",cssFile:"src/level5/client/components/Calendar/Calendar.css",testFile:"src/level5/client/components/Calendar/Calendar.test.ts"},{id:"watermark",name:"Watermark",desc:"\u6C34\u5370\uFF1Acanvas \u5E73\u94FA\u7ED8\u5236 + overlay\uFF08antd Watermark\uFF09",sourceFile:"src/level5/client/components/Watermark/Watermark.ts",cssFile:"src/level5/client/components/Watermark/Watermark.css",testFile:"src/level5/client/components/Watermark/Watermark.test.ts"},{id:"virtuallist",name:"VirtualList",desc:"\u865A\u62DF\u5217\u8868\uFF1Aspacer + \u53EF\u89C1\u7A97\u53E3\uFF0C200 \u6761\u53EA\u6E32\u67D3 ~12 \u4E2A DOM",sourceFile:"src/level5/client/components/VirtualList/VirtualList.ts",cssFile:"src/level5/client/components/VirtualList/VirtualList.css",testFile:"src/level5/client/components/VirtualList/VirtualList.test.ts"},{id:"virtualtable",name:"VirtualTable",desc:"\u865A\u62DF\u8868\u683C\uFF1A10k \u884C\u56FA\u5B9A\u8868\u5934 + \u53EF\u89C1\u7A97\u53E3\u6E32\u67D3 + \u6392\u5E8F",sourceFile:"src/level5/client/components/VirtualTable/VirtualTable.ts",cssFile:"src/level5/client/components/VirtualTable/VirtualTable.css",testFile:"src/level5/client/components/VirtualTable/VirtualTable.test.ts"},{id:"infinitescroll",name:"InfiniteScroll",desc:"\u65E0\u9650\u6EDA\u52A8\uFF1A\u5E95\u90E8\u54E8\u5175\u89E6\u5E95\u52A0\u8F7D + loading/end \u6001",sourceFile:"src/level5/client/components/InfiniteScroll/InfiniteScroll.ts",cssFile:"src/level5/client/components/InfiniteScroll/InfiniteScroll.css",testFile:"src/level5/client/components/InfiniteScroll/InfiniteScroll.test.ts"},{id:"qrcode",name:"QRCode",desc:"\u4E8C\u7EF4\u7801\uFF1A\u81EA\u7814 QR \u7F16\u7801\uFF08Reed-Solomon + 8 \u63A9\u7801\uFF09\u96F6\u4F9D\u8D56 SVG",sourceFile:"src/level5/client/components/QRCode/QRCode.ts",testFile:"src/level5/client/components/QRCode/QRCode.test.ts"},{id:"sheetgrid",name:"SheetGrid",desc:"weifuwu/client/components/SheetGrid \u2014 xlsx \u7F51\u683C\u7F16\u8F91\u5668\uFF08ODES \u4E8B\u4EF6\u6D41\u5E95\u5EA7\uFF09 \u8BBE\u8BA1\uFF08\uFF09\uFF1A\u6587\u6863 = fold(\u4E8B\u4EF6\u6D41)\u2014\u2014SheetGrid \u7684\u6BCF\u4E2A",family:"file-preview",sourceFile:"src/level5/client/components/SheetGrid/SheetGrid.ts",cssFile:"src/level5/client/components/SheetGrid/SheetGrid.css",testFile:"src/level5/client/components/SheetGrid/SheetGrid.test.ts"},{id:"slidecanvas",name:"SlideCanvas",desc:"weifuwu/client/components/SlideCanvas \u2014 pptx \u753B\u5E03\u7F16\u8F91\u5668\uFF08ODES \u4E8B\u4EF6\u6D41\u2014\u2014\u9636\u6BB5 3\uFF09 \u8BBE\u8BA1\uFF08\uFF09\uFF1A\u6587\u6863 = fold(\u4E8B\u4EF6\u6D41)\u2014\u2014\u6BCF\u4E2A\u7F16\u8F91 =",family:"file-preview",sourceFile:"src/level5/client/components/SlideCanvas/SlideCanvas.ts",cssFile:"src/level5/client/components/SlideCanvas/SlideCanvas.css",testFile:"src/level5/client/components/SlideCanvas/SlideCanvas.test.ts"},{id:"togglegroup",name:"ToggleGroup",desc:"\uFF08\u65E0 demo \u5361\u7247\u2014\u2014\u7EC4\u4EF6\u76EE\u5F55\u5B58\u5728\uFF09\uFF08+ Toggle \u5355\u4F53\u5F00\u5173\u2014\u2014\u540C\u76EE\u5F55\u53CC\u5BFC\u51FA\uFF09",sourceFile:"src/level5/client/components/ToggleGroup/ToggleGroup.ts",cssFile:"src/level5/client/components/ToggleGroup/ToggleGroup.css",testFile:"src/level5/client/components/ToggleGroup/ToggleGroup.test.ts"},{id:"tabbar",name:"TabBar",desc:"\u5E95\u90E8\u6807\u7B7E\u680F\u2014\u2014\u79FB\u52A8\u7AEF App \u4E3B\u5BFC\u822A\uFF083-5 tab + icon/badge/\u53D7\u63A7\u6FC0\u6D3B + safe-area \u907F\u8BA9\uFF09",sourceFile:"src/level5/client/components/TabBar/TabBar.ts",cssFile:"src/level5/client/components/TabBar/TabBar.css",testFile:"src/level5/client/components/TabBar/TabBar.test.ts"},{id:"actionsheet",name:"ActionSheet",desc:"\u52A8\u4F5C\u9762\u677F\u2014\u2014\u79FB\u52A8\u7AEF\u5E95\u90E8\u6ED1\u51FA\uFF08\u547D\u4EE4\u5217\u8868 + \u53D6\u6D88\u6309\u94AE\uFF0CusePopup \u4F1A\u8BDD\u7EA7\u6A21\u6001\uFF09",sourceFile:"src/level5/client/components/ActionSheet/ActionSheet.ts",cssFile:"src/level5/client/components/ActionSheet/ActionSheet.css",testFile:"src/level5/client/components/ActionSheet/ActionSheet.test.ts"},{id:"prompttemplate",name:"PromptTemplate",desc:"\u63D0\u793A\u8BCD\u6A21\u677F\u7F16\u8F91\u5668\u2014\u2014\u53D8\u91CF chips \u63D2\u5165 + \u5B9E\u65F6\u9884\u89C8\u586B\u5145\uFF08AI \u573A\u666F\u75DB\u70B9\uFF09",gotchas:["textarea value \u5FC5\u987B\u8D70 property\uFF08attribute \u53EA\u662F defaultValue\u2014\u2014DOM value \u6052\u7A7A/\u5149\u6807\u5931\u6548\u4E8B\u6545\uFF0Cvdom3 \u6E32\u67D3\u5668\u5DF2\u4FEE\uFF09","\u53D7\u63A7\u8F93\u5165\u7EAA\u5F8B\uFF1Avalue \u7531\u7236\u63A7\u5236 + onChange \u901A\u77E5"],sourceFile:"src/level5/client/components/PromptTemplate/PromptTemplate.ts",cssFile:"src/level5/client/components/PromptTemplate/PromptTemplate.css",testFile:"src/level5/client/components/PromptTemplate/PromptTemplate.test.ts"},{id:"navbar",name:"NavBar",desc:"\u79FB\u52A8\u7AEF\u9876\u680F\u2014\u2014left \u69FD\uFF08\u8FD4\u56DE/\u83DC\u5355\uFF09+ \u6807\u9898\u622A\u65AD + right \u69FD\uFF08antd-mobile NavBar \u5BF9\u4F4D\uFF09",sourceFile:"src/level5/client/components/NavBar/NavBar.ts",cssFile:"src/level5/client/components/NavBar/NavBar.css",testFile:"src/level5/client/components/NavBar/NavBar.test.ts"},{id:"dropzone",name:"DropZone",desc:"\u5168\u533A\u57DF\u62D6\u653E\u533A\u2014\u2014\u6574\u5BB9\u5668\u62D6\u5165\u6587\u4EF6\u9AD8\u4EAE + onFiles \u56DE\u8C03\uFF08\u73B0\u4EE3 IM \u6807\u914D\u2014\u2014Chat \u624B\u6413\u8BC1\u636E\uFF09",sourceFile:"src/level5/client/components/DropZone/DropZone.ts",cssFile:"src/level5/client/components/DropZone/DropZone.css",testFile:"src/level5/client/components/DropZone/DropZone.test.ts"},{id:"cronpicker",name:"CronPicker",desc:"cron \u8868\u8FBE\u5F0F\u5FEB\u6377\u8F93\u5165\uFF1A\u9884\u7F6E\u5E38\u89C1\u6863 + \u81EA\u7531\u7F16\u8F91\u53CC\u901A\u9053\uFF08\u5217\u8868\u9875\u9AA8\u67B6\u539F\u8BED\u5165\u5E93\uFF09",sourceFile:"src/level5/client/components/CronPicker/CronPicker.ts",cssFile:"src/level5/client/components/CronPicker/CronPicker.css",testFile:"src/level5/client/components/CronPicker/CronPicker.test.ts"},{id:"listscaffold",name:"ListScaffold",desc:"\u5217\u8868\u9875\u9AA8\u67B6\uFF1APageHeader + \u5DE5\u5177\u680F + loading/empty \u6001 + \u5185\u5BB9\u63D2\u69FD\uFF08isEmpty \u663E\u5F0F\u5951\u7EA6\uFF09",sourceFile:"src/level5/client/components/ListScaffold/ListScaffold.ts",cssFile:"src/level5/client/components/ListScaffold/ListScaffold.css",testFile:"src/level5/client/components/ListScaffold/ListScaffold.test.ts"},{id:"statusdot",name:"StatusDot",desc:"\u72B6\u6001\u70B9\uFF1Aon/tone \u8BED\u4E49\uFF08label \u7F3A\u7701\u53EA\u6E32\u67D3\u70B9\u2014\u2014\u9632\u53CC\u6807\u7B7E\uFF09",sourceFile:"src/level5/client/components/StatusDot/StatusDot.ts",cssFile:"src/level5/client/components/StatusDot/StatusDot.css",testFile:"src/level5/client/components/StatusDot/StatusDot.test.ts"}];var qo={\u8F93\u5165:["Input","Textarea","SearchInput","PasswordInput","InputNumber","PinInput","TagsInput","Mentions","Rate","ColorPicker","Slider","Switch","Checkbox","CheckboxGroup","RadioGroup","SegmentedControl","ToggleGroup"],\u9009\u62E9:["Select","AutoComplete","TreeSelect","Cascader","DatePicker","Calendar","Transfer","Tree"],\u8868\u5355:["Form","Field","JsonSchemaForm"],\u5C55\u793A:["InView","\u591A\u5E94\u7528\uFF08app \u8282\u70B9\uFF09","Table","VirtualTable","Descriptions","List","Card","Avatar","AvatarGroup","Badge","Tag","StatCard","Result","EmptyState","Timeline","MessageBubble","Highlight","DiffView","LogViewer","JSONViewer","Markdown","CodeBlock","Img","QRCode","Watermark","Skeleton","Scrollbar"],\u53EF\u89C6\u5316:["Chart","Sparkline","StatCard","Pipeline"],\u53CD\u9988:["Alert","AlertGroup","Toast","Notification","Loading","ProgressBar","Result","Confirm","Popconfirm"],\u5F39\u5C42:["Modal","Drawer","Popover","Tooltip","Dropdown","HoverCard","ContextMenu","Menubar","Popconfirm","Tour","Command","ColorPicker"],\u5BFC\u822A:["Menu","Tabs","Breadcrumb","Pagination","Steps","Anchor","BackTop","Affix","NavMenu","Layout","PageHeader","Accordion","Collapse"],\u865A\u62DF\u5316:["VirtualList","VirtualTable","InfiniteScroll","Resizable","Carousel"],AI:["AiChat","ChatInput","MessageBubble","ToolCallCard","ApprovalCard","ReasoningBlock","CitationCard","SessionList","JsonSchemaForm","AuthPage","Pipeline"],\u7F16\u8F91\u6587\u4EF6:["Editor","CodeBlock","Markdown","FileUpload","FilePreview","Img","SheetGrid","SlideCanvas","CopyButton"],\u901A\u7528\u5E03\u5C40:["Button","Layout","LayoutHeader","LayoutSider","LayoutContent","Space","Grid","Divider","Icon","Typography","Title","Text","Paragraph","Label","AspectRatio","ThemeSwitch","Wave","SortableList","Kanban","FloatButton","Link","ExportCSV"]};var ql={select:[{id:"select-searchable",name:"Select (searchable)",desc:"\u53EF\u641C\u7D22\u4E0B\u62C9\u2014\u2014\u8F93\u5165\u8FC7\u6EE4\u9009\u9879"}],form:[{id:"form-v2",name:"Form \u63D0\u4EA4",desc:"\u8868\u5355\u6574\u4F53\u63D0\u4EA4\u2014\u2014\u6821\u9A8C/loading/\u6210\u529F\u6001"}],fileupload:[{id:"fileupload-v2",name:"FileUpload \u7981\u7528",desc:"\u4E0A\u4F20\u7981\u7528\u6001"}],tagsinput:[{id:"tagsinput-v2",name:"TagsInput \u9650\u5236/\u9519\u8BEF",desc:"\u6807\u7B7E\u6570\u91CF\u9650\u5236 + \u9519\u8BEF\u6001"}],table:[{id:"table-v2",name:"Table \u884C\u9009\u62E9",desc:"\u884C\u9009\u62E9 + \u6279\u91CF\u64CD\u4F5C"}],descriptions:[{id:"descriptions-v2",name:"Descriptions \u7D27\u51D1",desc:"\u7D27\u51D1\u6392\u5E03"}],logviewer:[{id:"logviewer-v2",name:"LogViewer \u81EA\u5B9A\u4E49",desc:"\u81EA\u5B9A\u4E49\u884C\u6E32\u67D3/\u65E5\u5FD7\u7EA7\u522B\u8FC7\u6EE4"}],jsonviewer:[{id:"jsonviewer-v2",name:"JSONViewer \u6DF1\u5C55\u5F00",desc:"\u6DF1\u5C42\u8282\u70B9\u5C55\u5F00"}],diffview:[{id:"diffview-v2",name:"DiffView \u6807\u9898",desc:"\u5BF9\u6BD4\u9762\u677F\u6807\u9898/\u63D0\u793A\u8BED"}],layout:[{id:"layoutheader",name:"LayoutHeader",desc:"\u9876\u680F\u533A\u57DF"},{id:"layoutsider",name:"LayoutSider",desc:"\u4FA7\u680F\u533A\u57DF"},{id:"layoutcontent",name:"LayoutContent",desc:"\u5185\u5BB9\u533A\u57DF"}],autocomplete:[{id:"autocomplete-v2",name:"AutoComplete \u7981\u7528\u6001",desc:"\u7981\u7528\u6001"}],statcard:[{id:"statcard-countdown",name:"StatCard Countdown",desc:"\u5012\u8BA1\u65F6 KPI"}],highlight:[{id:"highlight-v2",name:"Highlight \u591A\u8BCD",desc:"\u591A\u5173\u952E\u8BCD\u9AD8\u4EAE"}],filepreview:[{id:"filepreview-office",name:"FilePreview Office",desc:"Office \u6587\u6863\u9884\u89C8"}],togglegroup:[{id:"toggle-togglegroup",name:"Toggle / ToggleGroup",desc:"\u5F00\u5173\u7EC4 + Toggle \u5355\u4F53\uFF08\u540C\u76EE\u5F55\u53CC\u5BFC\u51FA\uFF09"}],pininput:[{id:"pininput-v2",name:"PinInput \u7981\u7528\u6001",desc:"\u7981\u7528\u6001"}],mentions:[{id:"mentions-v2",name:"Mentions \u7981\u7528\u6001",desc:"\u7981\u7528\u6001"}],tree:[{id:"tree-v2",name:"Tree \u52FE\u9009",desc:"\u52FE\u9009\u6A21\u5F0F"}],cascader:[{id:"cascader-v2",name:"Cascader \u7981\u7528/\u9519\u8BEF",desc:"\u7981\u7528/\u9519\u8BEF\u6001"}],calendar:[{id:"calendar-v2",name:"Calendar \u4E8B\u4EF6",desc:"\u4E8B\u4EF6\u65E5\u671F\u6807\u8BB0"}],virtualtable:[{id:"virtualtable-v2",name:"VirtualTable \u5927\u6570\u636E",desc:"\u4E07\u884C\u865A\u62DF\u6EDA\u52A8"}],infinitescroll:[{id:"infinitescroll-v2",name:"InfiniteScroll \u5931\u8D25\u91CD\u8BD5",desc:"\u52A0\u8F7D\u5931\u8D25\u91CD\u8BD5"}],typography:[{id:"title",name:"Title",desc:"\u6807\u9898\u7EA7"},{id:"text",name:"Text",desc:"\u6B63\u6587\u7EA7"},{id:"paragraph",name:"Paragraph",desc:"\u6BB5\u843D\u7EA7"}]},Gl=n=>Object.entries(qo).filter(([,e])=>e.includes(n)).map(([e])=>e);function Go(){return{counts:{components:$r.length},components:$r.map(n=>({id:n.id,name:n.name,desc:n.desc,family:n.family??null,variants:(ql[n.id]??[]).map(e=>({...e})),tags:Gl(n.name),sourceFile:n.sourceFile??null,cssFile:n.cssFile??null,testFile:n.testFile??null,gotchas:n.gotchas??[]}))}}import{resolve as Be,dirname as Kl}from"node:path";import{writeFile as zl,rm as Zl}from"node:fs/promises";import{tmpdir as Jl}from"node:os";import{pathToFileURL as Xl}from"node:url";import{fileURLToPath as Yl}from"node:url";import{createHash as ec}from"node:crypto";import{build as tc}from"esbuild";var Ql=n=>new _e(n);process.on("unhandledRejection",n=>{console.error("[showcase] unhandledRejection\uFF08\u8FDB\u7A0B\u4FDD\u62A4\u2014\u2014\u4E0D\u9000\u51FA\uFF09:",n instanceof Error?n.message:String(n).slice(0,200))});process.on("uncaughtException",n=>{console.error("[showcase] uncaughtException\uFF08\u8FDB\u7A0B\u4FDD\u62A4\u2014\u2014\u4E0D\u9000\u51FA\uFF09:",n.message)});var Dr=Kl(Yl(import.meta.url)),Fr=Be(Dr,"..","..",".."),le=new Ee;le.use(xr());var nc={};Bo(le,nc);le.get("/index.json",n=>Response.json(Go()));le.post("/api/chat",async n=>{let{messages:e}=await n.json(),t=[...e??[]].reverse().find(i=>i.role==="user")?.content??"\u4E16\u754C",r=t.includes("\u5929\u6C14")?"agent":void 0,s=new TextEncoder,o=new ReadableStream({start(i){let a=(d,p)=>{i.enqueue(s.encode(`event: ${d}
120
120
  data: ${JSON.stringify(p)}
121
121
 
122
- `))};if(a("wf:message_start",{id:`demo-${Date.now()}`}),r==="agent"){a("wf:step",{type:"llm"}),a("wf:tool_call",{id:"tc_demo",name:"query_weather",args:{city:"\u5317\u4EAC"}}),a("wf:step",{type:"tool",toolCallId:"tc_demo",name:"query_weather"}),a("wf:tool_progress",{toolCallId:"tc_demo",step:1,total:2,message:"\u67E5\u8BE2 \u5317\u4EAC\u2026",status:"running"}),a("wf:approval_request",{id:"ap_demo",toolCallId:"tc_demo",name:"query_weather",args:{city:"\u5317\u4EAC"},reason:"\uFF08\u6F14\u793A\uFF09\u5DE5\u5177\u6267\u884C\u524D\u9700\u8981\u5BA1\u6279"}),setTimeout(()=>{a("wf:tool_result",{id:"tc_demo",ok:!0,output:{city:"\u5317\u4EAC",temp:25,desc:"\u6674"}});let d="\uFF08demo\uFF09\u5317\u4EAC 25\xB0C\uFF0C\u6674\u3002";for(let p=0;p<d.length;p+=2)a("wf:token",{text:d.slice(p,p+2)});a("wf:usage",{prompt_tokens:20,completion_tokens:d.length}),a("wf:done",{content:d,usage:{prompt_tokens:20,completion_tokens:d.length}}),i.close()},3e3);return}let l=`\uFF08demo \u6D41\u5F0F\u56DE\u590D\uFF09\u4F60\u521A\u624D\u8BF4\uFF1A${t}`,c=0,u=setInterval(()=>{if(c>=l.length){clearInterval(u),a("wf:done",{content:l,usage:{prompt_tokens:12,completion_tokens:l.length}}),i.close();return}a("wf:token",{text:l.slice(c,c+2)}),c+=2},120)}});return new Response(o,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache"}})});le.post("/api/approve",async n=>(await n.json(),Response.json({ok:!0})));var Dr=new Map;Dr.set("README.md",["# weifuwu \u6587\u4EF6\u9884\u89C8","","\u8FD9\u662F **\u8FDC\u7A0B\u52A0\u8F7D** \u7684 Markdown \u6587\u6863\uFF08wire-fake \u6587\u4EF6\u670D\u52A1\uFF09\u3002","","> \u652F\u6301\u9884\u89C8\u4E0E\u7F16\u8F91\u2014\u2014\u57FA\u4E8E\u4E8B\u4EF6\u6D41","","- \u9884\u89C8\uFF1AMarkdown \u5B89\u5168\u6E32\u67D3","- \u7F16\u8F91\uFF1AEditor \u4E8B\u52A1\u5C42\uFF08\u64A4\u9500/AI\uFF09","- \u4FDD\u5B58\uFF1APUT \u56DE\u5199\u6587\u4EF6\u670D\u52A1"].join(`
123
- `));le.get("/api/files/:name",async(n,e)=>{let t=Dr.get(e.params.name);return t===void 0?Response.json({error:"not found"},{status:404}):new Response(t,{headers:{"Content-Type":"text/plain"}})});le.put("/api/files/:name",async(n,e)=>{let t=e.params.name,r=await n.text();return Dr.set(t,r),Response.json({ok:!0,chars:r.length})});le.get("/app.js",(n,e)=>e.ui.js(ct(Fr,"src","main.tsx")));le.get("/components.css",async n=>{let{css:e}=await xs(ct(Go,"level5","client","layout"),ct(Go,"level5","client","components")),t=`"${ec("sha1").update(e).digest("hex").slice(0,20)}"`,r={"content-type":"text/css; charset=utf-8",etag:t,"cache-control":"no-cache"};return n.headers.get("if-none-match")===t?new Response(null,{status:304,headers:r}):new Response(e,{headers:r})});var jr=`<script>
122
+ `))};if(a("wf:message_start",{id:`demo-${Date.now()}`}),r==="agent"){a("wf:step",{type:"llm"}),a("wf:tool_call",{id:"tc_demo",name:"query_weather",args:{city:"\u5317\u4EAC"}}),a("wf:step",{type:"tool",toolCallId:"tc_demo",name:"query_weather"}),a("wf:tool_progress",{toolCallId:"tc_demo",step:1,total:2,message:"\u67E5\u8BE2 \u5317\u4EAC\u2026",status:"running"}),a("wf:approval_request",{id:"ap_demo",toolCallId:"tc_demo",name:"query_weather",args:{city:"\u5317\u4EAC"},reason:"\uFF08\u6F14\u793A\uFF09\u5DE5\u5177\u6267\u884C\u524D\u9700\u8981\u5BA1\u6279"}),setTimeout(()=>{a("wf:tool_result",{id:"tc_demo",ok:!0,output:{city:"\u5317\u4EAC",temp:25,desc:"\u6674"}});let d="\uFF08demo\uFF09\u5317\u4EAC 25\xB0C\uFF0C\u6674\u3002";for(let p=0;p<d.length;p+=2)a("wf:token",{text:d.slice(p,p+2)});a("wf:usage",{prompt_tokens:20,completion_tokens:d.length}),a("wf:done",{content:d,usage:{prompt_tokens:20,completion_tokens:d.length}}),i.close()},3e3);return}let l=`\uFF08demo \u6D41\u5F0F\u56DE\u590D\uFF09\u4F60\u521A\u624D\u8BF4\uFF1A${t}`,c=0,u=setInterval(()=>{if(c>=l.length){clearInterval(u),a("wf:done",{content:l,usage:{prompt_tokens:12,completion_tokens:l.length}}),i.close();return}a("wf:token",{text:l.slice(c,c+2)}),c+=2},120)}});return new Response(o,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache"}})});le.post("/api/approve",async n=>(await n.json(),Response.json({ok:!0})));var jr=new Map;jr.set("README.md",["# weifuwu \u6587\u4EF6\u9884\u89C8","","\u8FD9\u662F **\u8FDC\u7A0B\u52A0\u8F7D** \u7684 Markdown \u6587\u6863\uFF08wire-fake \u6587\u4EF6\u670D\u52A1\uFF09\u3002","","> \u652F\u6301\u9884\u89C8\u4E0E\u7F16\u8F91\u2014\u2014\u57FA\u4E8E\u4E8B\u4EF6\u6D41","","- \u9884\u89C8\uFF1AMarkdown \u5B89\u5168\u6E32\u67D3","- \u7F16\u8F91\uFF1AEditor \u4E8B\u52A1\u5C42\uFF08\u64A4\u9500/AI\uFF09","- \u4FDD\u5B58\uFF1APUT \u56DE\u5199\u6587\u4EF6\u670D\u52A1"].join(`
123
+ `));le.get("/api/files/:name",async(n,e)=>{let t=jr.get(e.params.name);return t===void 0?Response.json({error:"not found"},{status:404}):new Response(t,{headers:{"Content-Type":"text/plain"}})});le.put("/api/files/:name",async(n,e)=>{let t=e.params.name,r=await n.text();return jr.set(t,r),Response.json({ok:!0,chars:r.length})});le.get("/app.js",(n,e)=>e.ui.js(Be(Dr,"src","main.tsx")));le.get("/components.css",async n=>{let{css:e}=await ks(Be(Fr,"level5","client","layout"),Be(Fr,"level5","client","components")),t=`"${ec("sha1").update(e).digest("hex").slice(0,20)}"`,r={"content-type":"text/css; charset=utf-8",etag:t,"cache-control":"no-cache"};return n.headers.get("if-none-match")===t?new Response(null,{status:304,headers:r}):new Response(e,{headers:r})});var Wr=`<script>
124
124
  try {
125
125
  var t = localStorage.getItem('wf_theme')
126
126
  if (t === 'dark') document.documentElement.setAttribute('data-theme', 'dark')
@@ -132,7 +132,7 @@ data: ${JSON.stringify(p)}
132
132
  <meta charset="UTF-8">
133
133
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
134
134
  <link rel="stylesheet" href="/components.css">
135
- ${jr}
135
+ ${Wr}
136
136
  <title>weifuwu showcase</title>
137
137
  </head>
138
138
  <body>
@@ -142,17 +142,17 @@ data: ${JSON.stringify(p)}
142
142
  </html>`;async function sc(n){try{globalThis.__SHOWCASE_SSR_BASE__=ic(n);let e=await oc(),t=new URL(n.url??"/","http://localhost").pathname,s=(await e.uiSsr(e.buildRouter(),t,{title:"weifuwu showcase",prefetch:async()=>(await e.fetchIndex(),{showcaseIndex:e.getIndexCache()})})).replace(/<head>[\s\S]*?<\/head>/,`<head>
143
143
  <meta charset="UTF-8">
144
144
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
145
- ${jr}
145
+ ${Wr}
146
146
  <link rel="stylesheet" href="/components.css">
147
147
  <title>weifuwu showcase</title>
148
- </head>`).replace("</body>",'<script src="/app.js"></script></body>');return new Response(s,{headers:{"Content-Type":"text/html; charset=utf-8"}})}catch(e){return console.error(`[showcase] SSR \u6574\u6811\u5931\u8D25\uFF08\u56DE\u9000 SPA \u7A7A\u58F3\uFF09: ${e.message??String(e)}`),new Response(rc,{headers:{"Content-Type":"text/html; charset=utf-8"}})}}for(let n of["/","/components","/components/:id","/components/:id/:legacy"])le.get(n,e=>sc(e));async function oc(){let n=ct(Fr,"src","ssr.ts");for(let e=0;e<2;e++)try{let t=await tc({entryPoints:[n],bundle:!0,platform:"node",format:"esm",write:!1,jsx:"automatic",jsxImportSource:"weifuwu/client/vdom"}),r=ct(Jl(),`wf-ssr-${process.pid}-${Date.now()}.mjs`);await zl(r,t.outputFiles[0].text);let s=await import(Xl(r).href+`?v=${Date.now()}`);return Zl(r,{force:!0}).catch(()=>{}),s}catch(t){if(e===0){console.error("[showcase] SSR bundle \u7F16\u8BD1/import \u5931\u8D25\u2014\u2014\u91CD\u8BD5\u4E00\u6B21\uFF08\u7F16\u8F91\u7ADE\u6001\uFF09:",t.message.slice(0,120)),await new Promise(r=>setTimeout(r,50));continue}throw t}}var Nr="";function ic(n){return Nr||(Nr=`http://${n.headers.get("host")??"127.0.0.1"}`),Nr}le.get("/*",async(n,e)=>e.ui.html`
148
+ </head>`).replace("</body>",'<script src="/app.js"></script></body>');return new Response(s,{headers:{"Content-Type":"text/html; charset=utf-8"}})}catch(e){return console.error(`[showcase] SSR \u6574\u6811\u5931\u8D25\uFF08\u56DE\u9000 SPA \u7A7A\u58F3\uFF09: ${e.message??String(e)}`),new Response(rc,{headers:{"Content-Type":"text/html; charset=utf-8"}})}}for(let n of["/","/components","/components/:id","/components/:id/:legacy"])le.get(n,e=>sc(e));async function oc(){let n=Be(Dr,"src","ssr.ts");for(let e=0;e<2;e++)try{let t=await tc({entryPoints:[n],bundle:!0,platform:"node",format:"esm",write:!1,jsx:"automatic",jsxImportSource:Be(Fr,"level6","client","vdom")}),r=Be(Jl(),`wf-ssr-${process.pid}-${Date.now()}.mjs`);await zl(r,t.outputFiles[0].text);let s=await import(Xl(r).href+`?v=${Date.now()}`);return Zl(r,{force:!0}).catch(()=>{}),s}catch(t){if(e===0){console.error("[showcase] SSR bundle \u7F16\u8BD1/import \u5931\u8D25\u2014\u2014\u91CD\u8BD5\u4E00\u6B21\uFF08\u7F16\u8F91\u7ADE\u6001\uFF09:",t.message.slice(0,120)),await new Promise(r=>setTimeout(r,50));continue}throw t}}var Nr="";function ic(n){return Nr||(Nr=`http://${n.headers.get("host")??"127.0.0.1"}`),Nr}le.get("/*",async(n,e)=>e.ui.html`
149
149
  <!DOCTYPE html>
150
150
  <html lang="zh-CN">
151
151
  <head>
152
152
  <meta charset="UTF-8">
153
153
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
154
154
  <link rel="stylesheet" href="/components.css">
155
- ${Ql(jr)}
155
+ ${Ql(Wr)}
156
156
  <title>weifuwu showcase — 发展引擎</title>
157
157
  </head>
158
158
  <body>
@@ -163,4 +163,4 @@ data: ${JSON.stringify(p)}
163
163
  script>
164
164
  </body>
165
165
  </html>
166
- `);Vo(le,{port:Number(process.env.PORT??3200)});console.log(`showcase \u2192 http://localhost:${process.env.PORT??3200}`);
166
+ `);Ho(le,{port:Number(process.env.PORT??3200)});console.log(`showcase \u2192 http://localhost:${process.env.PORT??3200}`);