pulse-ui-client 0.1.27 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.bun.js +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +4 -4
- package/dist/index.node.js +3 -3
- package/dist/vdom.d.ts +0 -16
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{useEffect as c,useState as $W,useMemo as QW,createContext as BW,useContext as KW}from"react";import LW,{cloneElement as _,createElement as DW,isValidElement as MW,lazy as yW,Suspense as bW}from"react";var zW="$$fragment",GW="$$";function UW(W){return typeof W==="object"&&W!==null}function VW(W){return typeof W==="object"&&W!==null&&W.tag.startsWith("$$")&&W.tag!=="$$fragment"}import{jsx as l,Fragment as TW}from"react/jsx-runtime";class v{client;path;components;cssModules;callbacks;callbackCache;renderPropKeys;cssProps;callbackList;constructor(W,Z,$,Q,q=[],J=[],V=[]){this.client=W;this.path=Z;this.components=$;this.cssModules=Q;this.callbacks=new Set(q),this.callbackCache=new Map,this.renderPropKeys=new Set(J),this.cssProps=new Set(V),this.callbackList=[...this.callbacks].sort()}hasCallbackPath(W){return this.callbacks.has(W)}hasRenderPropPath(W){return this.renderPropKeys.has(W)}hasAnyCallbackUnder(W){if(W==="")return this.callbackList.length>0;let Z=kW(this.callbackList,W);return Z<this.callbackList.length&&this.callbackList[Z].startsWith(W)}setCallbacks(W){this.callbacks=new Set(W);for(let Z of Array.from(this.callbackCache.keys()))if(!this.callbacks.has(Z))this.callbackCache.delete(Z);this.callbackList=[...this.callbacks].sort()}setRenderProps(W){this.renderPropKeys=new Set(W)}setCssRefs(W){this.cssProps=new Set(W)}applyCallbackDelta(W){if(W.remove)for(let Z of W.remove)this.callbacks.delete(Z),this.callbackCache.delete(Z);if(W.add)for(let Z of W.add)this.callbacks.add(Z);this.callbackList=[...this.callbacks].sort()}applyRenderPropsDelta(W){if(W.remove)for(let Z of W.remove)this.renderPropKeys.delete(Z);if(W.add)for(let Z of W.add)this.renderPropKeys.add(Z)}applyCssRefsDelta(W){if(W.remove)for(let Z of W.remove)this.cssProps.delete(Z);if(W.add)for(let Z of W.add)this.cssProps.add(Z)}getCallback(W,Z){let $=this.propPath(W,Z),Q=this.callbackCache.get($);if(!Q)Q=(...q)=>this.client.invokeCallback(this.path,$,q),this.callbackCache.set($,Q);return Q}renderNode(W,Z=""){if(W==null||typeof W==="boolean"||typeof W==="number"||typeof W==="string")return W;if(UW(W)){let{tag:$,props:Q={},children:q=[]}=W,J={};for(let[F,G]of Object.entries(Q))J[F]=this.transformValue(Z,F,G);if(W.key)J.key=W.key;let V=[];for(let F=0;F<q.length;F+=1){let G=q[F],U=Z?`${Z}.${F}`:String(F);V.push(this.renderNode(G,U))}if(VW(W)){let F=W.tag.slice(GW.length),G=this.components[F];if(!G)throw Error(`Could not find component ${F}. This is a Pulse internal error.`);return DW(G,J,...V)}return DW($===zW?LW.Fragment:$,J,...V)}return null}propPath(W,Z){return W?`${W}.${Z}`:Z}transformValue(W,Z,$){let Q=this.propPath(W,Z);if(this.callbacks.has(Q))return this.getCallback(W,Z);if(this.renderPropKeys.has(Q))return this.renderNode($,Q);if(this.cssProps.has(Q))return this.resolveCssToken($);return $}resolveCssToken(W){let Z=W.indexOf(":");if(Z===-1)return W;let $=W.slice(0,Z),Q=W.slice(Z+1);if(!$||!Q)return W;let q=this.cssModules[$];if(!q)throw Error(`Received CSS reference for unknown module '${$}'`);let J=q[Q];if(typeof J!=="string")throw Error(`Received CSS reference for missing class '${Q}' in module '${$}'`);return J}}function s(W){let Z=W.props?.children;if(Z==null)return[];return Array.isArray(Z)?Z.slice():[Z]}function a(W,Z,$){let Q=W;for(let q of Z){if(q.type==="update_callbacks"){$.applyCallbackDelta(q.data);continue}if(q.type==="update_css_refs"){$.applyCssRefsDelta(q.data);continue}if(q.type==="update_render_props"){$.applyRenderPropsDelta(q.data);continue}let J=q.path.split(".").filter((F)=>F.length>0),V=(F,G,U)=>{if(G<J.length){o(F,J,G);let C=F,f=J[G],D=+f,X=U?`${U}.${f}`:f;if(!Number.isNaN(D)){let A=s(C),O=A[D];return A[D]=V(O,G+1,X),_(C,void 0,...A)}else{let A=C.props??{},O=A[f],R={...A,[f]:V(O,G+1,X)};return _(C,R)}}switch(q.type){case"replace":return $.renderNode(q.data,q.path);case"update_props":{o(F,J,G);let C=F,D={...C.props??{}},X=q.data;if(X.remove&&X.remove.length>0){for(let A of X.remove)if(A in D)delete D[A]}if(X.set)for(let[A,O]of Object.entries(X.set))D[A]=$.transformValue(U,A,O);return _(C,D)}case"reconciliation":{o(F,J,G);let C=F,f=s(C),D=[],[X,A]=q.new,[O,R]=q.reuse,N=-1,K=-1,M=-1,y=-1;if(X.length>0)N=X[0],M=0;if(O.length>0)K=O[0],y=0;for(let H=0;H<q.N;++H)if(H===N){let d=A[M],T=U?`${U}.${H}`:String(H);D.push($.renderNode(d,T)),N=M<X.length-1?X[++M]:-1}else if(H===K){let d=R[y],T=f[d],XW=U?`${U}.${H}`:String(H);if($.hasAnyCallbackUnder(XW))T=r(T,XW,$);D.push(T),K=y<O.length-1?O[++y]:-1}else D.push(f[H]);return _(C,null,...D)}default:throw Error(`[Pulse renderer] Unknown update type: ${q.type}`)}};Q=V(Q,0,"")}return Q}function SW(W,Z){let $=yW(W);return({children:Q,...q})=>{return l(bW,{fallback:Z??l(TW,{}),children:l($,{...q,children:Q})})}}function o(W,Z,$){return!0}function r(W,Z,$){if(!MW(W))return W;let Q=W,q=Q.props??{},J={...q};for(let F of Object.keys(q)){let G=Z?`${Z}.${F}`:F;if($.hasCallbackPath(G))J[F]=$.getCallback(Z,F);if($.hasRenderPropPath(G)&&$.hasAnyCallbackUnder(G))J[F]=r(q[F],G,$)}let V=s(Q).map((F,G)=>{let U=Z?`${Z}.${G}`:String(G);if($.hasAnyCallbackUnder(U))return r(F,U,$);else return F});return _(Q,J,...V)}function kW(W,Z){let $=0,Q=W.length;while($<Q){let q=$+Q>>>1;if(W[q]<Z)$=q+1;else Q=q}return $}function Y(){function W(Z,$){return(Q)=>{let q={};for(let J of Z)q[J]=Q[J];if($)for(let J in $){let V=$[J];q[J]=V(Q)}return q}}return W}var _W=(W)=>W.tagName.toLowerCase(),gW=["id","className","tagName","localName","clientHeight","clientLeft","clientTop","clientWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth","slot"],xW=["autofocus","tabIndex","nonce"],mW=["accessKey","accessKeyLabel","autocapitalize","dir","draggable","hidden","inert","lang","offsetHeight","offsetLeft","offsetTop","offsetWidth","popover","spellcheck","title","translate","writingSuggestions","contentEditable","enterKeyHint","isContentEditable","inputMode"],vW=Y()(gW,{tagName:_W}),hW=Y()(xW),pW=Y()(mW);function w(W){return{...vW(W),...hW(W),...pW(W)}}function z(W,Z){let $=Y()(W,Z);return(Q)=>({...w(Q),...$(Q)})}var EW=["hash","host","hostname","href","origin","password","pathname","port","protocol","search","target","download","rel","hreflang","type","username","ping","referrerPolicy","text"],uW=z(EW),iW=["alt","coords","download","hash","host","hostname","href","origin","password","pathname","port","protocol","rel","search","shape","target","username","ping","referrerPolicy"],cW=z(iW),nW=["autoplay","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","loop","muted","networkState","paused","playbackRate","preload","readyState","seeking","src","volume","preservesPitch"],NW=z(nW),dW=(W)=>NW(W),oW=["disabled","name","type","value","formAction","formEnctype","formMethod","formNoValidate","formTarget","popoverTargetAction"],lW=z(oW),sW=["value"],rW=z(sW),aW=["height","src","type","width","align","name"],tW=z(aW),eW=["disabled","name","type","validationMessage","willValidate"],W1=z(eW),Z1=["acceptCharset","action","autocomplete","encoding","enctype","length","method","name","noValidate","target","rel"],$1=z(Z1),Q1=["allow","allowFullscreen","height","name","referrerPolicy","src","srcdoc","width","align","frameBorder","longDesc","marginHeight","marginWidth","scrolling","sandbox"],q1=z(Q1),F1=["alt","crossOrigin","decoding","height","isMap","loading","naturalHeight","naturalWidth","referrerPolicy","sizes","src","srcset","useMap","width","align","border","complete","hspace","longDesc","lowsrc","name","vspace","x","y","fetchPriority"],J1=z(F1),X1=["accept","alt","autocomplete","checked","defaultChecked","defaultValue","dirName","disabled","height","indeterminate","max","maxLength","min","minLength","multiple","name","pattern","placeholder","readOnly","required","selectionDirection","selectionEnd","selectionStart","size","src","step","type","value","valueAsNumber","width","align","capture","formAction","formEnctype","formMethod","formNoValidate","formTarget","useMap","validationMessage","willValidate","popoverTargetAction"],z1=z(X1),G1=["htmlFor"],U1=z(G1),V1=["value","type"],D1=z(V1),A1=["as","crossOrigin","disabled","fetchPriority","href","hreflang","imageSizes","imageSrcset","integrity","media","referrerPolicy","rel","type","charset","rev","target","sizes"],O1=z(A1),f1=["name"],C1=z(f1),N1=["high","low","max","min","optimum","value"],R1=z(N1),P1=["cite","dateTime"],AW=z(P1),j1=["reversed","start","type","compact"],B1=z(j1),K1=["data","height","name","type","useMap","width","validationMessage","willValidate","align","archive","border","code","codeBase","codeType","declare","hspace","standby","vspace"],I1=z(K1),H1=["disabled","label"],Y1=z(H1),w1=["defaultSelected","disabled","index","label","selected","text","value"],L1=z(w1),M1=["defaultValue","name","type","value","htmlFor","validationMessage","willValidate"],y1=z(M1),b1=["max","position","value"],S1=z(b1),k1=["cite"],OW=z(k1),T1=(W)=>w(W),_1=["async","crossOrigin","defer","fetchPriority","integrity","noModule","referrerPolicy","src","text","type","charset"],g1=Y()(_1,{event:(W)=>W.event,htmlFor:(W)=>W.htmlFor}),x1=(W)=>({...w(W),...g1(W)}),m1=["autocomplete","disabled","length","multiple","name","required","selectedIndex","size","type","value","validationMessage","willValidate"],v1=z(m1),h1=["name"],p1=z(h1),E1=["height","media","sizes","src","srcset","type","width"],u1=z(E1),i1=["align"],c1=z(i1),n1=["abbr","cellIndex","colSpan","headers","rowSpan","scope","align","axis","bgColor","ch","chOff","height","noWrap","vAlign","width"],fW=z(n1),d1=["span","align","ch","chOff","vAlign","width"],CW=z(d1),o1=["align","bgColor","border","cellPadding","cellSpacing","frame","rules","summary","width"],l1=z(o1),s1=["rowIndex","sectionRowIndex","align","bgColor","ch","chOff","vAlign"],r1=z(s1),a1=["align","ch","chOff","vAlign"],t=z(a1),t1=(W)=>w(W),e1=["autocomplete","cols","defaultValue","dirName","disabled","maxLength","minLength","name","placeholder","readOnly","required","rows","selectionDirection","selectionEnd","selectionStart","value","wrap","textLength","validationMessage","willValidate"],WZ=z(e1),ZZ=["dateTime"],$Z=z(ZZ),QZ=["default","kind","label","readyState","src","srclang"],qZ=z(QZ),FZ=["height","poster","videoHeight","videoWidth","width","playsInline"],JZ=Y()(FZ),XZ=(W)=>({...NW(W),...JZ(W)}),zZ=["clear"],GZ=z(zZ),UZ=["href","target"],VZ=z(UZ),DZ=["aLink","background","bgColor","link","text","vLink"],AZ=z(DZ),OZ=["compact"],fZ=z(OZ),CZ=["open"],NZ=z(CZ),RZ=["open","returnValue"],PZ=z(RZ),jZ=["align"],BZ=z(jZ),KZ=(W)=>w(W),IZ=["align"],b=z(IZ),HZ=["align","color","noShade","size","width"],YZ=z(HZ),wZ=["version"],LZ=z(wZ),MZ=(W)=>w(W),yZ=["content","httpEquiv","name","scheme"],bZ=z(yZ),SZ=["align"],kZ=z(SZ),TZ=(W)=>w(W),_Z=["width"],gZ=z(_Z),xZ=(W)=>w(W),mZ=["media","type","disabled"],vZ=z(mZ),hZ=["text"],pZ=z(hZ),EZ=["compact","type"],uZ=z(EZ),iZ={A:uW,AREA:cW,AUDIO:dW,BASE:VZ,BLOCKQUOTE:OW,Q:OW,BODY:AZ,BR:GZ,BUTTON:lW,CANVAS:w,CAPTION:c1,CITE:T1,COL:CW,COLGROUP:CW,DATA:rW,DETAILS:NZ,DIALOG:PZ,DIV:BZ,DL:fZ,EMBED:tW,FIELDSET:W1,FORM:$1,H1:b,H2:b,H3:b,H4:b,H5:b,H6:b,HEAD:KZ,HR:YZ,HTML:LZ,IFRAME:q1,IMG:J1,INPUT:z1,LABEL:U1,LI:D1,LINK:O1,MAP:C1,MENU:MZ,META:bZ,METER:R1,INS:AW,DEL:AW,OBJECT:I1,OL:B1,OPTGROUP:Y1,OPTION:L1,OUTPUT:y1,P:kZ,PICTURE:TZ,PRE:gZ,PROGRESS:S1,SCRIPT:x1,SELECT:v1,SLOT:p1,SOURCE:u1,SPAN:xZ,STYLE:vZ,TABLE:l1,TBODY:t,THEAD:t,TFOOT:t,TD:fW,TH:fW,TEMPLATE:t1,TEXTAREA:WZ,TIME:$Z,TITLE:pZ,TR:r1,TRACK:qZ,UL:uZ,VIDEO:XZ};function h(W){let Z=W.tagName.toUpperCase(),$=iZ[Z];if($)return $(W);throw Error(`Unexpected HTML element tag: ${W.tagName} (update .web/custom/serialize.ts)`)}var cZ=(W)=>h(W.target),g=(W)=>W.relatedTarget?h(W.relatedTarget):null;function P(W,Z){return Y()(W,{target:cZ,...Z||{}})}var I=["target","bubbles","cancelable","defaultPrevented","eventPhase","isTrusted","timeStamp","type"],p=[...I,"detail"],E=[...p,"altKey","button","buttons","clientX","clientY","ctrlKey","metaKey","movementX","movementY","pageX","pageY","screenX","screenY","shiftKey"],nZ=[...E,"pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","width","height","pointerType","isPrimary"],dZ=P(I),oZ=P(p),lZ=P(E,{relatedTarget:g}),sZ=P(I,{clipboardData:(W)=>RW(W.clipboardData)}),rZ=P([...I,"data"]),aZ=P(E,{relatedTarget:g,dataTransfer:(W)=>RW(W.dataTransfer)}),tZ=P(nZ,{relatedTarget:g}),eZ=P(I,{relatedTarget:g}),W0=P(I),Z0=P(I),$0=P(I),Q0=P([...p,"altKey","ctrlKey","code","key","locale","location","metaKey","repeat","shiftKey"]),q0=P([...p,"altKey","ctrlKey","metaKey","shiftKey","changedTouches","targetTouches","touches"],{changedTouches:(W)=>e(W.changedTouches),targetTouches:(W)=>e(W.targetTouches),touches:(W)=>e(W.touches)}),F0=P([...E,"deltaMode","deltaX","deltaY","deltaZ"],{relatedTarget:g}),J0=P([...I,"animationName","elapsedTime","pseudoElement"]),X0=P([...I,"oldState","newState"]),z0=P([...I,"elapsedTime","propertyName","pseudoElement"]);function e(W){return Array.from(W).map((Z)=>({target:h(Z.target),identifier:Z.identifier,screenX:Z.screenX,screenY:Z.screenY,clientX:Z.clientX,clientY:Z.clientY,pageX:Z.pageX,pageY:Z.pageY}))}function RW(W){if(!W)return null;let Z=[];if(W.items)for(let $=0;$<W.items.length;$++){let Q=W.items[$];Z.push({kind:Q.kind,type:Q.type})}return{drop_effect:W.dropEffect,effect_allowed:W.effectAllowed,items:Z,types:Array.from(W.types||[])}}var j={};function B(W,Z,$){for(let Q of Z)W[Q]=$}B(j,["pointerdown","pointermove","pointerup","pointercancel","gotpointercapture","lostpointercapture","pointerenter","pointerleave","pointerover","pointerout"],tZ);B(j,["click","contextmenu","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup"],lZ);B(j,["drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop"],aZ);B(j,["keydown","keypress","keyup"],Q0);B(j,["focus","blur"],eZ);B(j,["change","input"],$0);B(j,["invalid"],Z0);B(j,["reset","submit"],W0);B(j,["copy","cut","paste"],sZ);B(j,["compositionend","compositionstart","compositionupdate"],rZ);B(j,["touchcancel","touchend","touchmove","touchstart"],q0);B(j,["scroll"],oZ);B(j,["wheel"],F0);B(j,["animationstart","animationend","animationiteration"],J0);B(j,["transitionend"],z0);B(j,["toggle"],X0);function WW(W){if(W&&typeof W==="object"&&"nativeEvent"in W&&typeof W.isDefaultPrevented==="function"){let Z=W;if(typeof Z.type!=="string")return W;let $=j[Z.type.toLowerCase()];if($)return $(Z);return dZ(Z)}return W}function x(W){let Z=new Map,$=[],Q=[],q=[],J=[],V=0;function F(U){if(U==null||typeof U==="number"||typeof U==="string"||typeof U==="boolean")return U;let C=V++,f=Z.get(U);if(f!==void 0)return $.push(C),f;if(Z.set(U,C),U instanceof Date)return Q.push(C),U.getTime();if(Array.isArray(U)){let D=U.length,X=Array(D);for(let A=0;A<D;A++)X[A]=F(U[A]);return X}if(U instanceof Map){J.push(C);let D={};for(let[X,A]of U.entries())D[String(X)]=F(A);return D}if(U instanceof Set){q.push(C);let D=U.size,X=Array(D),A=0;for(let O of U)X[A]=F(O),A+=1;return X}if(typeof U==="object"){let D={},X=Object.keys(U);for(let A=0;A<X.length;A++){let O=X[A];D[O]=F(U[O])}return D}throw Error(`Unsupported value in serialization: ${U}`)}let G=F(W);return[[$,Q,q,J],G]}function ZW(W,Z){let[[$,Q,q,J],V]=W,F=new Set($),G=new Set(Q),U=new Set(q),C=new Set(J),f=[];function D(X){let A=f.length;if(F.has(A))return f.push(null),f[X];if(G.has(A)){let O=new Date(X);return f.push(O),O}if(X==null||typeof X==="number"||typeof X==="string"||typeof X==="boolean"){if(Z?.coerceNullsToUndefined)return X??void 0;return X}if(Array.isArray(X)){if(U.has(A)){let N=new Set;f.push(N);for(let K=0;K<X.length;K++)N.add(D(X[K]));return N}let O=X.length,R=Array(O);f.push(R);for(let N=0;N<O;N++)R[N]=D(X[N]);return R}if(typeof X==="object"){if(C.has(A)){let N=new Map;f.push(N);let K=Object.keys(X);for(let M=0;M<K.length;M++){let y=K[M];N.set(y,D(X[y]))}return N}let O={};f.push(O);let R=Object.keys(X);for(let N=0;N<R.length;N++){let K=R[N];O[K]=D(X[K])}return O}throw Error(`Unsupported value in deserialization: ${X}`)}return D(V)}import{io as A0}from"socket.io-client";class L extends Error{constructor(W){super(W);this.name="PulseChannelResetError"}}function G0(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID().replace(/-/g,"");return Math.random().toString(16).slice(2)+Math.random().toString(16).slice(2)}function U0(W){if(W instanceof Error)return W.message;if(typeof W==="string")return W;try{return JSON.stringify(W)}catch{return String(W)}}function V0(W){return typeof W.responseTo==="string"}function D0(W){return typeof W.event==="string"}class PW{client;id;handlers=new Map;pending=new Map;backlog=[];closed=!1;constructor(W,Z){this.client=W;this.id=Z}emit(W,Z){this.ensureOpen(),this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:W,payload:Z})}async request(W,Z){this.ensureOpen();let $=G0();return new Promise((Q,q)=>{this.pending.set($,{resolve:Q,reject:q}),this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:W,payload:Z,requestId:$}).catch((J)=>{this.pending.delete($),q(J)})})}on(W,Z){this.ensureOpen();let $=this.handlers.get(W);if(!$)$=new Set,this.handlers.set(W,$);return $.add(Z),this.flushBacklog(W),()=>{let Q=this.handlers.get(W);if(!Q)return;if(Q.delete(Z),Q.size===0)this.handlers.delete(W)}}handleServerMessage(W){if(V0(W))return this.resolvePending(W),this.closed;if(this.closed)return!0;if(!D0(W))return this.closed;if(W.event==="__close__")return this.close(new L("Channel closed by server")),!0;if(W.requestId)this.dispatchRequest(W);else this.dispatchEvent(W);return this.closed}handleDisconnect(W){this.close(W)}dispose(W){this.close(W)}ensureOpen(){if(this.closed)throw new L("Channel is closed")}flushBacklog(W){if(this.backlog.length===0)return;let Z=[];for(let $ of this.backlog)if($.event===W)this.dispatchEvent($);else Z.push($);this.backlog=Z}dispatchEvent(W){let Z=this.handlers.get(W.event);if(!Z||Z.size===0){this.backlog.push(W);return}for(let $ of Z)try{let Q=$(W.payload);if(Q&&typeof Q.then==="function")Q.catch((q)=>{console.error("Pulse channel handler error",q)})}catch(Q){console.error("Pulse channel handler error",Q)}}async dispatchRequest(W){let Z=this.handlers.get(W.event),$,Q;if(Z&&Z.size>0)for(let q of Z)try{let J=q(W.payload);if($=await Promise.resolve(J),$!==void 0)break}catch(J){Q=J;break}if(Q){await this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:void 0,responseTo:W.requestId,error:U0(Q)});return}await this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:void 0,responseTo:W.requestId,payload:$})}resolvePending(W){let Z=W.responseTo?this.pending.get(W.responseTo):void 0;if(!Z)return;if(this.pending.delete(W.responseTo),W.error!==void 0&&W.error!==null)Z.reject(new L(String(W.error)));else Z.resolve(W.payload)}close(W){if(this.closed)return;this.closed=!0;for(let Z of this.pending.values())Z.reject(W);this.pending.clear(),this.handlers.clear(),this.backlog=[]}}function jW(W,Z){return new PW(W,Z)}class u{url;renderId;frameworkNavigate;activeViews;socket=null;messageQueue;connectionListeners=new Set;serverErrors=new Map;serverErrorListeners=new Set;channels=new Map;constructor(W,Z,$){this.url=W;this.renderId=Z;this.frameworkNavigate=$;this.socket=null,this.activeViews=new Map,this.messageQueue=[]}isConnected(){return this.socket?.connected??!1}async connect(){if(this.socket)return;return new Promise((W,Z)=>{let $=A0(this.url,{transports:["websocket","webtransport"],auth:{renderId:this.renderId}});this.socket=$,$.on("connect",()=>{console.log("[SocketIOTransport] Connected:",this.socket?.id);for(let[Q,q]of this.activeViews)$.emit("message",x({type:"mount",path:Q,routeInfo:q.routeInfo}));for(let Q of this.messageQueue){if(Q.type==="mount"&&this.activeViews.has(Q.path))continue;if(Q.type==="navigate")continue;$.emit("message",x(Q))}this.messageQueue=[],this.notifyConnectionListeners(!0),W()}),$.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),Z(Q)}),$.on("disconnect",()=>{console.log("[SocketIOTransport] Disconnected"),this.handleTransportDisconnect(),this.notifyConnectionListeners(!1)}),$.on("message",(Q)=>this.handleServerMessage(ZW(Q,{coerceNullsToUndefined:!0})))})}onConnectionChange(W){return this.connectionListeners.add(W),W(this.isConnected()),()=>{this.connectionListeners.delete(W)}}notifyConnectionListeners(W){for(let Z of this.connectionListeners)Z(W)}onServerError(W){this.serverErrorListeners.add(W);for(let[Z,$]of this.serverErrors)W(Z,$);return()=>{this.serverErrorListeners.delete(W)}}notifyServerError(W,Z){for(let $ of this.serverErrorListeners)$(W,Z)}async sendMessage(W){if(this.isConnected())this.socket.emit("message",x(W));else this.messageQueue.push(W)}async sendChannelMessage(W){await this.sendMessage(W)}mountView(W,Z){if(this.activeViews.has(W))throw Error(`Path ${W} is already mounted`);this.activeViews.set(W,Z),this.sendMessage({type:"mount",path:W,routeInfo:Z.routeInfo})}async navigate(W,Z){await this.sendMessage({type:"navigate",path:W,routeInfo:Z})}unmount(W){this.sendMessage({type:"unmount",path:W}),this.activeViews.delete(W)}disconnect(){this.socket?.disconnect(),this.socket=null,this.messageQueue=[],this.connectionListeners.clear(),this.activeViews.clear(),this.serverErrors.clear(),this.serverErrorListeners.clear();for(let{bridge:W}of this.channels.values())W.dispose(new L("Client disconnected"));this.channels.clear()}handleServerMessage(W){switch(W.type){case"vdom_init":{let Z=this.activeViews.get(W.path);if(!Z)return;if(Z)Z.onInit(W.vdom,W.callbacks,W.render_props,W.css_refs);if(this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"vdom_update":{let Z=this.activeViews.get(W.path);if(!Z)return;if(Z.onUpdate(W.ops),this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"server_error":{if(!this.activeViews.has(W.path))return;this.serverErrors.set(W.path,W.error),this.notifyServerError(W.path,W.error);break}case"api_call":{this.performApiCall(W);break}case"navigate_to":{let Z=!!W.replace,$=W.path||"";if($.startsWith("//"))$=`${window.location.protocol}${$}`;if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test($))if($.startsWith("http://")||$.startsWith("https://"))try{let q=new URL($);if(q.origin===window.location.origin){let J=`${q.pathname}${q.search}${q.hash}`;this.frameworkNavigate(J,{replace:Z})}else if(Z)window.location.replace($);else window.location.assign($)}catch{if(Z)window.location.replace($);else window.location.assign($)}else if(Z)window.location.replace($);else window.location.assign($);else this.frameworkNavigate($,{replace:Z});break}case"channel_message":{this.routeChannelMessage(W);break}default:console.error("Unexpected message:",W)}}async performApiCall(W){try{let Z=await fetch(W.url,{method:W.method||"GET",headers:{...W.headers||{},...W.body!=null&&!("content-type"in(W.headers||{}))?{"content-type":"application/json"}:{}},body:W.body!=null?typeof W.body==="string"?W.body:JSON.stringify(W.body):void 0,credentials:W.credentials||"include"}),$={};Z.headers.forEach((V,F)=>$[F]=V);let Q=null;if((Z.headers.get("content-type")||"").includes("application/json"))Q=await Z.json().catch(()=>null);else Q=await Z.text().catch(()=>null);let J={type:"api_result",id:W.id,ok:Z.ok,status:Z.status,headers:$,body:Q};await this.sendMessage(J)}catch(Z){let $={type:"api_result",id:W.id,ok:!1,status:0,headers:{},body:{error:String(Z)}};await this.sendMessage($)}}async invokeCallback(W,Z,$){await this.sendMessage({type:"callback",path:W,callback:Z,args:$.map(WW)})}acquireChannel(W){let Z=this.ensureChannelEntry(W);return Z.refCount+=1,Z.bridge}releaseChannel(W){let Z=this.channels.get(W);if(!Z)return;if(Z.refCount=Math.max(0,Z.refCount-1),Z.refCount===0)Z.bridge.dispose(new L("Channel released")),this.channels.delete(W)}ensureChannelEntry(W){let Z=this.channels.get(W);if(!Z)Z={bridge:jW(this,W),refCount:0},this.channels.set(W,Z);return Z}routeChannelMessage(W){let Z=this.ensureChannelEntry(W.channel);if(Z.bridge.handleServerMessage(W)&&Z.refCount===0)this.channels.delete(W.channel)}handleTransportDisconnect(){for(let W of this.channels.values())W.bridge.handleDisconnect(new L("Connection lost"))}}import{useLocation as O0,useParams as f0,useNavigate as C0}from"react-router";import{jsx as S,jsxs as i}from"react/jsx-runtime";var IW=BW(null),HW=BW(null),n=()=>{let W=KW(IW);if(!W)throw Error("usePulseClient must be used within a PulseProvider");return W},N0=(W)=>{let Z=KW(HW);if(!Z)throw Error("usePulsePrerender must be used within a PulseProvider");let $=Z.views[W];if(!$)throw Error(`No prerender found for '${W}'`);return $},qW=typeof window<"u";function R0({children:W,config:Z,prerender:$}){let[Q,q]=$W(!0),J=C0(),{renderId:V}=$,F=QW(()=>new u(Z.serverAddress,V,J),[Z.serverAddress,J,V]);return c(()=>F.onConnectionChange(q),[F]),c(()=>{if(qW)return F.connect(),()=>F.disconnect()},[F]),S(IW.Provider,{value:F,children:i(HW.Provider,{value:$,children:[!Q&&S("div",{style:{position:"fixed",bottom:"20px",right:"20px",backgroundColor:"red",color:"white",padding:"10px",borderRadius:"5px",zIndex:1000},children:"Failed to connect to the server."}),W]})})}function P0({externalComponents:W,path:Z,cssModules:$}){let Q=n(),q=N0(Z),J=q.vdom,V=QW(()=>new v(Q,Z,W,$,q.callbacks,q.render_props,q.css_refs),[Q,Z,W,$,q]),[F,G]=$W(()=>V.renderNode(J)),[U,C]=$W(null),f=O0(),D=f0(),X=QW(()=>{let{"*":A="",...O}=D,R=new URLSearchParams(f.search);return{hash:f.hash,pathname:f.pathname,query:f.search,queryParams:Object.fromEntries(R.entries()),pathParams:O,catchall:A.length>0?A.split("/"):[]}},[f.hash,f.pathname,f.search,JSON.stringify(D)]);if(c(()=>{if(qW){Q.mountView(Z,{routeInfo:X,onInit:(O,R,N,K)=>{V.setCallbacks(R),V.setRenderProps(N),V.setCssRefs(K),G(V.renderNode(O))},onUpdate:(O)=>{G((R)=>R==null?R:a(R,O,V))}});let A=Q.onServerError((O,R)=>{if(O===Z)C(R)});return()=>{A(),Q.unmount(Z)}}},[Q]),c(()=>{if(qW)Q.navigate(Z,X)},[Q,Z,X]),U)return S(j0,{error:U});return F}function j0({error:W}){return i("div",{style:{padding:16,border:"1px solid #e00",background:"#fff5f5",color:"#900",fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',whiteSpace:"pre-wrap"},children:[i("div",{style:{fontWeight:700,marginBottom:8},children:["Server Error during ",W.phase]}),W.message&&S("div",{children:W.message}),W.stack&&i("details",{open:!0,style:{marginTop:8},children:[S("summary",{children:"Stack trace"}),S("pre",{style:{margin:0},children:W.stack})]})]})}import{useEffect as B0,useMemo as K0}from"react";function I0(W){let Z=n(),$=K0(()=>{if(!W)throw Error("usePulseChannel requires a non-empty channelId");return Z.acquireChannel(W)},[Z,W]);return B0(()=>{return()=>{Z.releaseChannel(W)}},[Z,W]),$}import{forwardRef as H0,useCallback as Y0}from"react";import{jsx as L0}from"react/jsx-runtime";var w0=H0(function({onSubmit:Z,action:$,...Q},q){return L0("form",{...Q,action:$,ref:q,onSubmit:Y0((J)=>YW({event:J,action:$,onSubmit:Z}),[$,Z])})});async function YW({event:W,action:Z,onSubmit:$,formData:Q,force:q}){if($?.(W),!q&&W.defaultPrevented)return;let J=W.currentTarget;W.preventDefault();let V=W.nativeEvent;if(!Q)Q=new FormData(J,V.submitter);let F=new URL(Z,window.location.href);try{await fetch(F,{method:"POST",credentials:"include",body:Q})}catch(G){throw G}}import{io as M0}from"socket.io-client";class wW{url;socket=null;listener=null;messageQueue=[];connectionListeners=new Set;constructor(W){this.url=W}connect(W){return this.listener=W,new Promise((Z,$)=>{this.socket=M0(this.url,{transports:["websocket"]}),this.socket.on("connect",()=>{console.log("[SocketIOTransport] Connected:",this.socket?.id);for(let Q of this.messageQueue)this.socket?.emit("message",Q);this.messageQueue=[],this.notifyConnectionListeners(!0),Z()}),this.socket.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),$(Q)}),this.socket.on("disconnect",()=>{console.log("[SocketIOTransport] Disconnected"),this.notifyConnectionListeners(!1)}),this.socket.on("message",(Q)=>{this.listener?.(Q)})})}disconnect(){this.socket?.disconnect(),this.socket=null,this.listener=null,this.messageQueue=[],this.connectionListeners.clear()}async sendMessage(W){if(this.isConnected())this.socket.emit("message",W);else this.messageQueue.push(W)}isConnected(){return this.socket?.connected||!1}onConnectionChange(W){return this.connectionListeners.add(W),W(this.isConnected()),()=>{this.connectionListeners.delete(W)}}notifyConnectionListeners(W){for(let Z of this.connectionListeners)Z(W)}}function y0({params:W,request:Z}){let{"*":$="",...Q}=W,q=new URL(Z.url);return{hash:q.hash,pathname:q.pathname,query:q.search,queryParams:Object.fromEntries(q.searchParams.entries()),pathParams:Q,catchall:$.length>1?$.split("/"):[]}}function b0(W){if(W===null||typeof W!=="object")return!1;let Z=Object.getPrototypeOf(W);return Z===Object.prototype||Z===null}function FW(W){return typeof W==="function"||typeof W==="symbol"||typeof W>"u"}async function S0(W){let Z=await W.arrayBuffer();return Array.from(new Uint8Array(Z))}async function k0(W){return await m(W,{seen:new WeakMap,nextId:1})}function T0(W,Z){if(W.seen.get(Z)!==void 0)return null;let Q=W.nextId++;return W.seen.set(Z,Q),Q}async function m(W,Z){if(W===null||typeof W!=="object")return W;if(W instanceof Date)return{__t:"datetime",timestamp:W.getTime()};if(W instanceof FormData){let F=T0(Z,W);if(F===null)return{__t:"ref",id:Z.seen.get(W)};let G={};for(let[C,f]of W.entries()){let D=await m(f,Z);if(D===void 0)continue;if(Object.prototype.hasOwnProperty.call(G,C)){let X=G[C];if(Array.isArray(X))X.push(D);else G[C]=[X,D]}else G[C]=D}return{__t:"formdata",fields:G,__id:F}}if(W instanceof File){let F=W,G=await S0(W);return{__t:"file",name:F.name,type:F.type,size:F.size,lastModified:F.lastModified,content:G}}let $=W,Q=Z.seen.get($);if(Q!==void 0)return{__t:"ref",id:Q};let q=Z.nextId++;if(Z.seen.set($,q),Array.isArray(W)){let G=(await Promise.all(W.map((C)=>m(C,Z)))).filter((C)=>C!==void 0);return{__t:"array",__id:q,items:G}}let J={};if(b0(W))for(let F of Object.keys(W)){let G=W[F];if(FW(G))continue;let U=await m(G,Z);if(U!==void 0)J[F]=U}else for(let F in W){let G=W[F];if(FW(G))continue;let U=await m(G,Z);if(U!==void 0)J[F]=U}return{__t:"object",__id:q,props:J}}function _0(W){return k(W)}function k(W){if(W===null||typeof W!=="object")return W;let Z=W,$=Z.__t;if($==="datetime"){let q=Z.timestamp;return new Date(q)}if($==="file"){let q=Z.content;if(Array.isArray(q))return{...Z,content:new Uint8Array(q)};return Z}if($==="formdata"){let q=Z.fields,J={};for(let V of Object.keys(q)){let F=q[V];if(Array.isArray(F))J[V]=F.map((G)=>k(G));else J[V]=k(F)}return{__t:"formdata",fields:J}}if($==="array")return Z.items.map((J)=>k(J));if($==="object"){let q=Z.props,J={};for(let V of Object.keys(q))J[V]=k(q[V]);return J}if($==="ref")return Z;let Q={};for(let q of Object.keys(Z))Q[q]=k(Z[q]);return Q}function g0(W){return JW(W,new WeakSet)}function JW(W,Z){if(W===null||typeof W!=="object")return W;if(Z.has(W))return;if(Z.add(W),Array.isArray(W))return W.map((Q)=>JW(Q,Z)).filter((Q)=>Q!==void 0);let $={};for(let Q in W){let q=W[Q];if(FW(q))continue;let J=JW(q,Z);if(J!==void 0)$[Q]=J}return $}export{n as usePulseClient,I0 as usePulseChannel,YW as submitForm,x as serialize,y0 as extractServerRouteInfo,WW as extractEvent,k0 as encodeForWire,ZW as deserialize,_0 as decodeFromWire,g0 as cleanForSerialization,a as applyReactTreeUpdates,v as VDOMRenderer,wW as SocketIOTransport,SW as RenderLazy,P0 as PulseView,u as PulseSocketIOClient,R0 as PulseProvider,w0 as PulseForm,L as PulseChannelResetError};
|
|
1
|
+
import{useEffect as d,useState as QW,useMemo as qW,createContext as BW,useContext as KW}from"react";import LW,{cloneElement as _,createElement as r,isValidElement as MW,lazy as yW,Suspense as bW}from"react";var GW="$$fragment",UW="$$";function VW(W){return typeof W==="object"&&W!==null}function DW(W){return typeof W==="object"&&W!==null&&W.tag.startsWith("$$")&&W.tag!=="$$fragment"}import{jsx as s,Fragment as TW}from"react/jsx-runtime";class h{client;path;components;cssModules;callbacks;callbackCache;renderPropKeys;cssProps;callbackList;constructor(W,Z,$,Q,q=[],J=[],D=[]){this.client=W;this.path=Z;this.components=$;this.cssModules=Q;this.callbacks=new Set(q),this.callbackCache=new Map,this.renderPropKeys=new Set(J),this.cssProps=new Set(D),this.callbackList=[...this.callbacks].sort()}hasCallbackPath(W){return this.callbacks.has(W)}hasRenderPropPath(W){return this.renderPropKeys.has(W)}hasAnyCallbackUnder(W){if(W==="")return this.callbackList.length>0;let Z=kW(this.callbackList,W);return Z<this.callbackList.length&&this.callbackList[Z].startsWith(W)}setCallbacks(W){this.callbacks=new Set(W);for(let Z of Array.from(this.callbackCache.keys()))if(!this.callbacks.has(Z))this.callbackCache.delete(Z);this.callbackList=[...this.callbacks].sort()}setRenderProps(W){this.renderPropKeys=new Set(W)}setCssRefs(W){this.cssProps=new Set(W)}applyCallbackDelta(W){if(W.remove)for(let Z of W.remove)this.callbacks.delete(Z),this.callbackCache.delete(Z);if(W.add)for(let Z of W.add)this.callbacks.add(Z);this.callbackList=[...this.callbacks].sort()}applyRenderPropsDelta(W){if(W.remove)for(let Z of W.remove)this.renderPropKeys.delete(Z);if(W.add)for(let Z of W.add)this.renderPropKeys.add(Z)}applyCssRefsDelta(W){if(W.remove)for(let Z of W.remove)this.cssProps.delete(Z);if(W.add)for(let Z of W.add)this.cssProps.add(Z)}getCallback(W,Z){let $=this.propPath(W,Z),Q=this.callbackCache.get($);if(!Q)Q=(...q)=>this.client.invokeCallback(this.path,$,q),this.callbackCache.set($,Q);return Q}renderNode(W,Z=""){if(W==null||typeof W==="boolean"||typeof W==="number"||typeof W==="string")return W;if(VW(W)){let{tag:$,props:Q={},children:q=[]}=W,J={};for(let[F,G]of Object.entries(Q))J[F]=this.transformValue(Z,F,G);if(W.key)J.key=W.key;let D=[];for(let F=0;F<q.length;F+=1){let G=q[F],U=Z?`${Z}.${F}`:String(F);D.push(this.renderNode(G,U))}if(DW(W)){let F=W.tag.slice(UW.length),G=this.components[F];if(!G)throw Error(`Could not find component ${F}. This is a Pulse internal error.`);return r(G,J,...D)}return r($===GW?LW.Fragment:$,J,...D)}return null}propPath(W,Z){return W?`${W}.${Z}`:Z}transformValue(W,Z,$){let Q=this.propPath(W,Z);if(this.callbacks.has(Q))return this.getCallback(W,Z);if(this.renderPropKeys.has(Q))return this.renderNode($,Q);if(this.cssProps.has(Q))return this.resolveCssToken($);return $}resolveCssToken(W){let Z=W.indexOf(":");if(Z===-1)return W;let $=W.slice(0,Z),Q=W.slice(Z+1);if(!$||!Q)return W;let q=this.cssModules[$];if(!q)throw Error(`Received CSS reference for unknown module '${$}'`);let J=q[Q];if(typeof J!=="string")throw Error(`Received CSS reference for missing class '${Q}' in module '${$}'`);return J}}function v(W){let Z=W.props?.children;if(Z==null)return[];return Array.isArray(Z)?Z.slice():[Z]}function t(W,Z,$){let Q=W;for(let q of Z){if(q.type==="update_callbacks"){$.applyCallbackDelta(q.data);continue}if(q.type==="update_css_refs"){$.applyCssRefsDelta(q.data);continue}if(q.type==="update_render_props"){$.applyRenderPropsDelta(q.data);continue}let J=q.path.split(".").filter((F)=>F.length>0),D=(F,G,U)=>{if(G<J.length){l(F,J,G);let O=F,N=J[G],V=+N,X=U?`${U}.${N}`:N;if(!Number.isNaN(V)){let f=v(O),A=f[V];return f[V]=D(A,G+1,X),_(O,void 0,...f)}else{let f=O.props??{},A=f[N],C={...f,[N]:D(A,G+1,X)};return _(O,C)}}switch(q.type){case"replace":return $.renderNode(q.data,q.path);case"update_props":{l(F,J,G);let O=F,V={...O.props??{}},X=q.data;if(X.remove&&X.remove.length>0){for(let A of X.remove)if(A in V)delete V[A]}if(X.set)for(let[A,C]of Object.entries(X.set))V[A]=$.transformValue(U,A,C);if((X.remove?.length??0)>0)return V.key=O.key,V.ref=O.ref,r(O.type,V,...v(O));else return _(O,V)}case"reconciliation":{l(F,J,G);let O=F,N=v(O),V=[],[X,f]=q.new,[A,C]=q.reuse,R=-1,K=-1,M=-1,y=-1;if(X.length>0)R=X[0],M=0;if(A.length>0)K=A[0],y=0;for(let H=0;H<q.N;++H)if(H===R){let o=f[M],T=U?`${U}.${H}`:String(H);V.push($.renderNode(o,T)),R=M<X.length-1?X[++M]:-1}else if(H===K){let o=C[y],T=N[o],zW=U?`${U}.${H}`:String(H);if($.hasAnyCallbackUnder(zW))T=a(T,zW,$);V.push(T),K=y<A.length-1?A[++y]:-1}else V.push(N[H]);return _(O,null,...V)}default:throw Error(`[Pulse renderer] Unknown update type: ${q.type}`)}};Q=D(Q,0,"")}return Q}function SW(W,Z){let $=yW(W);return({children:Q,...q})=>{return s(bW,{fallback:Z??s(TW,{}),children:s($,{...q,children:Q})})}}function l(W,Z,$){return!0}function a(W,Z,$){if(!MW(W))return W;let Q=W,q=Q.props??{},J={...q};for(let F of Object.keys(q)){let G=Z?`${Z}.${F}`:F;if($.hasCallbackPath(G))J[F]=$.getCallback(Z,F);if($.hasRenderPropPath(G)&&$.hasAnyCallbackUnder(G))J[F]=a(q[F],G,$)}let D=v(Q).map((F,G)=>{let U=Z?`${Z}.${G}`:String(G);if($.hasAnyCallbackUnder(U))return a(F,U,$);else return F});return _(Q,J,...D)}function kW(W,Z){let $=0,Q=W.length;while($<Q){let q=$+Q>>>1;if(W[q]<Z)$=q+1;else Q=q}return $}function Y(){function W(Z,$){return(Q)=>{let q={};for(let J of Z)q[J]=Q[J];if($)for(let J in $){let D=$[J];q[J]=D(Q)}return q}}return W}var _W=(W)=>W.tagName.toLowerCase(),gW=["id","className","tagName","localName","clientHeight","clientLeft","clientTop","clientWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth","slot"],xW=["autofocus","tabIndex","nonce"],mW=["accessKey","accessKeyLabel","autocapitalize","dir","draggable","hidden","inert","lang","offsetHeight","offsetLeft","offsetTop","offsetWidth","popover","spellcheck","title","translate","writingSuggestions","contentEditable","enterKeyHint","isContentEditable","inputMode"],vW=Y()(gW,{tagName:_W}),hW=Y()(xW),pW=Y()(mW);function w(W){return{...vW(W),...hW(W),...pW(W)}}function z(W,Z){let $=Y()(W,Z);return(Q)=>({...w(Q),...$(Q)})}var EW=["hash","host","hostname","href","origin","password","pathname","port","protocol","search","target","download","rel","hreflang","type","username","ping","referrerPolicy","text"],uW=z(EW),iW=["alt","coords","download","hash","host","hostname","href","origin","password","pathname","port","protocol","rel","search","shape","target","username","ping","referrerPolicy"],cW=z(iW),dW=["autoplay","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","loop","muted","networkState","paused","playbackRate","preload","readyState","seeking","src","volume","preservesPitch"],CW=z(dW),nW=(W)=>CW(W),oW=["disabled","name","type","value","formAction","formEnctype","formMethod","formNoValidate","formTarget","popoverTargetAction"],lW=z(oW),sW=["value"],rW=z(sW),aW=["height","src","type","width","align","name"],tW=z(aW),eW=["disabled","name","type","validationMessage","willValidate"],W1=z(eW),Z1=["acceptCharset","action","autocomplete","encoding","enctype","length","method","name","noValidate","target","rel"],$1=z(Z1),Q1=["allow","allowFullscreen","height","name","referrerPolicy","src","srcdoc","width","align","frameBorder","longDesc","marginHeight","marginWidth","scrolling","sandbox"],q1=z(Q1),F1=["alt","crossOrigin","decoding","height","isMap","loading","naturalHeight","naturalWidth","referrerPolicy","sizes","src","srcset","useMap","width","align","border","complete","hspace","longDesc","lowsrc","name","vspace","x","y","fetchPriority"],J1=z(F1),X1=["accept","alt","autocomplete","checked","defaultChecked","defaultValue","dirName","disabled","height","indeterminate","max","maxLength","min","minLength","multiple","name","pattern","placeholder","readOnly","required","selectionDirection","selectionEnd","selectionStart","size","src","step","type","value","valueAsNumber","width","align","capture","formAction","formEnctype","formMethod","formNoValidate","formTarget","useMap","validationMessage","willValidate","popoverTargetAction"],z1=z(X1),G1=["htmlFor"],U1=z(G1),V1=["value","type"],D1=z(V1),A1=["as","crossOrigin","disabled","fetchPriority","href","hreflang","imageSizes","imageSrcset","integrity","media","referrerPolicy","rel","type","charset","rev","target","sizes"],O1=z(A1),f1=["name"],N1=z(f1),C1=["high","low","max","min","optimum","value"],R1=z(C1),P1=["cite","dateTime"],AW=z(P1),j1=["reversed","start","type","compact"],B1=z(j1),K1=["data","height","name","type","useMap","width","validationMessage","willValidate","align","archive","border","code","codeBase","codeType","declare","hspace","standby","vspace"],I1=z(K1),H1=["disabled","label"],Y1=z(H1),w1=["defaultSelected","disabled","index","label","selected","text","value"],L1=z(w1),M1=["defaultValue","name","type","value","htmlFor","validationMessage","willValidate"],y1=z(M1),b1=["max","position","value"],S1=z(b1),k1=["cite"],OW=z(k1),T1=(W)=>w(W),_1=["async","crossOrigin","defer","fetchPriority","integrity","noModule","referrerPolicy","src","text","type","charset"],g1=Y()(_1,{event:(W)=>W.event,htmlFor:(W)=>W.htmlFor}),x1=(W)=>({...w(W),...g1(W)}),m1=["autocomplete","disabled","length","multiple","name","required","selectedIndex","size","type","value","validationMessage","willValidate"],v1=z(m1),h1=["name"],p1=z(h1),E1=["height","media","sizes","src","srcset","type","width"],u1=z(E1),i1=["align"],c1=z(i1),d1=["abbr","cellIndex","colSpan","headers","rowSpan","scope","align","axis","bgColor","ch","chOff","height","noWrap","vAlign","width"],fW=z(d1),n1=["span","align","ch","chOff","vAlign","width"],NW=z(n1),o1=["align","bgColor","border","cellPadding","cellSpacing","frame","rules","summary","width"],l1=z(o1),s1=["rowIndex","sectionRowIndex","align","bgColor","ch","chOff","vAlign"],r1=z(s1),a1=["align","ch","chOff","vAlign"],e=z(a1),t1=(W)=>w(W),e1=["autocomplete","cols","defaultValue","dirName","disabled","maxLength","minLength","name","placeholder","readOnly","required","rows","selectionDirection","selectionEnd","selectionStart","value","wrap","textLength","validationMessage","willValidate"],WZ=z(e1),ZZ=["dateTime"],$Z=z(ZZ),QZ=["default","kind","label","readyState","src","srclang"],qZ=z(QZ),FZ=["height","poster","videoHeight","videoWidth","width","playsInline"],JZ=Y()(FZ),XZ=(W)=>({...CW(W),...JZ(W)}),zZ=["clear"],GZ=z(zZ),UZ=["href","target"],VZ=z(UZ),DZ=["aLink","background","bgColor","link","text","vLink"],AZ=z(DZ),OZ=["compact"],fZ=z(OZ),NZ=["open"],CZ=z(NZ),RZ=["open","returnValue"],PZ=z(RZ),jZ=["align"],BZ=z(jZ),KZ=(W)=>w(W),IZ=["align"],b=z(IZ),HZ=["align","color","noShade","size","width"],YZ=z(HZ),wZ=["version"],LZ=z(wZ),MZ=(W)=>w(W),yZ=["content","httpEquiv","name","scheme"],bZ=z(yZ),SZ=["align"],kZ=z(SZ),TZ=(W)=>w(W),_Z=["width"],gZ=z(_Z),xZ=(W)=>w(W),mZ=["media","type","disabled"],vZ=z(mZ),hZ=["text"],pZ=z(hZ),EZ=["compact","type"],uZ=z(EZ),iZ={A:uW,AREA:cW,AUDIO:nW,BASE:VZ,BLOCKQUOTE:OW,Q:OW,BODY:AZ,BR:GZ,BUTTON:lW,CANVAS:w,CAPTION:c1,CITE:T1,COL:NW,COLGROUP:NW,DATA:rW,DETAILS:CZ,DIALOG:PZ,DIV:BZ,DL:fZ,EMBED:tW,FIELDSET:W1,FORM:$1,H1:b,H2:b,H3:b,H4:b,H5:b,H6:b,HEAD:KZ,HR:YZ,HTML:LZ,IFRAME:q1,IMG:J1,INPUT:z1,LABEL:U1,LI:D1,LINK:O1,MAP:N1,MENU:MZ,META:bZ,METER:R1,INS:AW,DEL:AW,OBJECT:I1,OL:B1,OPTGROUP:Y1,OPTION:L1,OUTPUT:y1,P:kZ,PICTURE:TZ,PRE:gZ,PROGRESS:S1,SCRIPT:x1,SELECT:v1,SLOT:p1,SOURCE:u1,SPAN:xZ,STYLE:vZ,TABLE:l1,TBODY:e,THEAD:e,TFOOT:e,TD:fW,TH:fW,TEMPLATE:t1,TEXTAREA:WZ,TIME:$Z,TITLE:pZ,TR:r1,TRACK:qZ,UL:uZ,VIDEO:XZ};function p(W){let Z=W.tagName.toUpperCase(),$=iZ[Z];if($)return $(W);throw Error(`Unexpected HTML element tag: ${W.tagName} (update .web/custom/serialize.ts)`)}var cZ=(W)=>p(W.target),g=(W)=>W.relatedTarget?p(W.relatedTarget):null;function P(W,Z){return Y()(W,{target:cZ,...Z||{}})}var I=["target","bubbles","cancelable","defaultPrevented","eventPhase","isTrusted","timeStamp","type"],E=[...I,"detail"],u=[...E,"altKey","button","buttons","clientX","clientY","ctrlKey","metaKey","movementX","movementY","pageX","pageY","screenX","screenY","shiftKey"],dZ=[...u,"pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","width","height","pointerType","isPrimary"],nZ=P(I),oZ=P(E),lZ=P(u,{relatedTarget:g}),sZ=P(I,{clipboardData:(W)=>RW(W.clipboardData)}),rZ=P([...I,"data"]),aZ=P(u,{relatedTarget:g,dataTransfer:(W)=>RW(W.dataTransfer)}),tZ=P(dZ,{relatedTarget:g}),eZ=P(I,{relatedTarget:g}),W0=P(I),Z0=P(I),$0=P(I),Q0=P([...E,"altKey","ctrlKey","code","key","locale","location","metaKey","repeat","shiftKey"]),q0=P([...E,"altKey","ctrlKey","metaKey","shiftKey","changedTouches","targetTouches","touches"],{changedTouches:(W)=>WW(W.changedTouches),targetTouches:(W)=>WW(W.targetTouches),touches:(W)=>WW(W.touches)}),F0=P([...u,"deltaMode","deltaX","deltaY","deltaZ"],{relatedTarget:g}),J0=P([...I,"animationName","elapsedTime","pseudoElement"]),X0=P([...I,"oldState","newState"]),z0=P([...I,"elapsedTime","propertyName","pseudoElement"]);function WW(W){return Array.from(W).map((Z)=>({target:p(Z.target),identifier:Z.identifier,screenX:Z.screenX,screenY:Z.screenY,clientX:Z.clientX,clientY:Z.clientY,pageX:Z.pageX,pageY:Z.pageY}))}function RW(W){if(!W)return null;let Z=[];if(W.items)for(let $=0;$<W.items.length;$++){let Q=W.items[$];Z.push({kind:Q.kind,type:Q.type})}return{drop_effect:W.dropEffect,effect_allowed:W.effectAllowed,items:Z,types:Array.from(W.types||[])}}var j={};function B(W,Z,$){for(let Q of Z)W[Q]=$}B(j,["pointerdown","pointermove","pointerup","pointercancel","gotpointercapture","lostpointercapture","pointerenter","pointerleave","pointerover","pointerout"],tZ);B(j,["click","contextmenu","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup"],lZ);B(j,["drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop"],aZ);B(j,["keydown","keypress","keyup"],Q0);B(j,["focus","blur"],eZ);B(j,["change","input"],$0);B(j,["invalid"],Z0);B(j,["reset","submit"],W0);B(j,["copy","cut","paste"],sZ);B(j,["compositionend","compositionstart","compositionupdate"],rZ);B(j,["touchcancel","touchend","touchmove","touchstart"],q0);B(j,["scroll"],oZ);B(j,["wheel"],F0);B(j,["animationstart","animationend","animationiteration"],J0);B(j,["transitionend"],z0);B(j,["toggle"],X0);function ZW(W){if(W&&typeof W==="object"&&"nativeEvent"in W&&typeof W.isDefaultPrevented==="function"){let Z=W;if(typeof Z.type!=="string")return W;let $=j[Z.type.toLowerCase()];if($)return $(Z);return nZ(Z)}return W}function x(W){let Z=new Map,$=[],Q=[],q=[],J=[],D=0;function F(U){if(U==null||typeof U==="number"||typeof U==="string"||typeof U==="boolean")return U;let O=D++,N=Z.get(U);if(N!==void 0)return $.push(O),N;if(Z.set(U,O),U instanceof Date)return Q.push(O),U.getTime();if(Array.isArray(U)){let V=U.length,X=Array(V);for(let f=0;f<V;f++)X[f]=F(U[f]);return X}if(U instanceof Map){J.push(O);let V={};for(let[X,f]of U.entries())V[String(X)]=F(f);return V}if(U instanceof Set){q.push(O);let V=U.size,X=Array(V),f=0;for(let A of U)X[f]=F(A),f+=1;return X}if(typeof U==="object"){let V={},X=Object.keys(U);for(let f=0;f<X.length;f++){let A=X[f];V[A]=F(U[A])}return V}throw Error(`Unsupported value in serialization: ${U}`)}let G=F(W);return[[$,Q,q,J],G]}function $W(W,Z){let[[$,Q,q,J],D]=W,F=new Set($),G=new Set(Q),U=new Set(q),O=new Set(J),N=[];function V(X){let f=N.length;if(F.has(f))return N.push(null),N[X];if(G.has(f)){let A=new Date(X);return N.push(A),A}if(X==null||typeof X==="number"||typeof X==="string"||typeof X==="boolean"){if(Z?.coerceNullsToUndefined)return X??void 0;return X}if(Array.isArray(X)){if(U.has(f)){let R=new Set;N.push(R);for(let K=0;K<X.length;K++)R.add(V(X[K]));return R}let A=X.length,C=Array(A);N.push(C);for(let R=0;R<A;R++)C[R]=V(X[R]);return C}if(typeof X==="object"){if(O.has(f)){let R=new Map;N.push(R);let K=Object.keys(X);for(let M=0;M<K.length;M++){let y=K[M];R.set(y,V(X[y]))}return R}let A={};N.push(A);let C=Object.keys(X);for(let R=0;R<C.length;R++){let K=C[R];A[K]=V(X[K])}return A}throw Error(`Unsupported value in deserialization: ${X}`)}return V(D)}import{io as A0}from"socket.io-client";class L extends Error{constructor(W){super(W);this.name="PulseChannelResetError"}}function G0(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID().replace(/-/g,"");return Math.random().toString(16).slice(2)+Math.random().toString(16).slice(2)}function U0(W){if(W instanceof Error)return W.message;if(typeof W==="string")return W;try{return JSON.stringify(W)}catch{return String(W)}}function V0(W){return typeof W.responseTo==="string"}function D0(W){return typeof W.event==="string"}class PW{client;id;handlers=new Map;pending=new Map;backlog=[];closed=!1;constructor(W,Z){this.client=W;this.id=Z}emit(W,Z){this.ensureOpen(),this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:W,payload:Z})}async request(W,Z){this.ensureOpen();let $=G0();return new Promise((Q,q)=>{this.pending.set($,{resolve:Q,reject:q}),this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:W,payload:Z,requestId:$}).catch((J)=>{this.pending.delete($),q(J)})})}on(W,Z){this.ensureOpen();let $=this.handlers.get(W);if(!$)$=new Set,this.handlers.set(W,$);return $.add(Z),this.flushBacklog(W),()=>{let Q=this.handlers.get(W);if(!Q)return;if(Q.delete(Z),Q.size===0)this.handlers.delete(W)}}handleServerMessage(W){if(V0(W))return this.resolvePending(W),this.closed;if(this.closed)return!0;if(!D0(W))return this.closed;if(W.event==="__close__")return this.close(new L("Channel closed by server")),!0;if(W.requestId)this.dispatchRequest(W);else this.dispatchEvent(W);return this.closed}handleDisconnect(W){this.close(W)}dispose(W){this.close(W)}ensureOpen(){if(this.closed)throw new L("Channel is closed")}flushBacklog(W){if(this.backlog.length===0)return;let Z=[];for(let $ of this.backlog)if($.event===W)this.dispatchEvent($);else Z.push($);this.backlog=Z}dispatchEvent(W){let Z=this.handlers.get(W.event);if(!Z||Z.size===0){this.backlog.push(W);return}for(let $ of Z)try{let Q=$(W.payload);if(Q&&typeof Q.then==="function")Q.catch((q)=>{console.error("Pulse channel handler error",q)})}catch(Q){console.error("Pulse channel handler error",Q)}}async dispatchRequest(W){let Z=this.handlers.get(W.event),$,Q;if(Z&&Z.size>0)for(let q of Z)try{let J=q(W.payload);if($=await Promise.resolve(J),$!==void 0)break}catch(J){Q=J;break}if(Q){await this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:void 0,responseTo:W.requestId,error:U0(Q)});return}await this.client.sendChannelMessage({type:"channel_message",channel:this.id,event:void 0,responseTo:W.requestId,payload:$})}resolvePending(W){let Z=W.responseTo?this.pending.get(W.responseTo):void 0;if(!Z)return;if(this.pending.delete(W.responseTo),W.error!==void 0&&W.error!==null)Z.reject(new L(String(W.error)));else Z.resolve(W.payload)}close(W){if(this.closed)return;this.closed=!0;for(let Z of this.pending.values())Z.reject(W);this.pending.clear(),this.handlers.clear(),this.backlog=[]}}function jW(W,Z){return new PW(W,Z)}class i{url;renderId;frameworkNavigate;activeViews;socket=null;messageQueue;connectionListeners=new Set;serverErrors=new Map;serverErrorListeners=new Set;channels=new Map;constructor(W,Z,$){this.url=W;this.renderId=Z;this.frameworkNavigate=$;this.socket=null,this.activeViews=new Map,this.messageQueue=[]}isConnected(){return this.socket?.connected??!1}async connect(){if(this.socket)return;return new Promise((W,Z)=>{let $=A0(this.url,{transports:["websocket","webtransport"],auth:{renderId:this.renderId}});this.socket=$,$.on("connect",()=>{console.log("[SocketIOTransport] Connected:",this.socket?.id);for(let[Q,q]of this.activeViews)$.emit("message",x({type:"mount",path:Q,routeInfo:q.routeInfo}));for(let Q of this.messageQueue){if(Q.type==="mount"&&this.activeViews.has(Q.path))continue;if(Q.type==="navigate")continue;$.emit("message",x(Q))}this.messageQueue=[],this.notifyConnectionListeners(!0),W()}),$.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),Z(Q)}),$.on("disconnect",()=>{console.log("[SocketIOTransport] Disconnected"),this.handleTransportDisconnect(),this.notifyConnectionListeners(!1)}),$.on("message",(Q)=>this.handleServerMessage($W(Q,{coerceNullsToUndefined:!0})))})}onConnectionChange(W){return this.connectionListeners.add(W),W(this.isConnected()),()=>{this.connectionListeners.delete(W)}}notifyConnectionListeners(W){for(let Z of this.connectionListeners)Z(W)}onServerError(W){this.serverErrorListeners.add(W);for(let[Z,$]of this.serverErrors)W(Z,$);return()=>{this.serverErrorListeners.delete(W)}}notifyServerError(W,Z){for(let $ of this.serverErrorListeners)$(W,Z)}async sendMessage(W){if(this.isConnected())this.socket.emit("message",x(W));else this.messageQueue.push(W)}async sendChannelMessage(W){await this.sendMessage(W)}mountView(W,Z){if(this.activeViews.has(W))throw Error(`Path ${W} is already mounted`);this.activeViews.set(W,Z),this.sendMessage({type:"mount",path:W,routeInfo:Z.routeInfo})}async navigate(W,Z){await this.sendMessage({type:"navigate",path:W,routeInfo:Z})}unmount(W){this.sendMessage({type:"unmount",path:W}),this.activeViews.delete(W)}disconnect(){this.socket?.disconnect(),this.socket=null,this.messageQueue=[],this.connectionListeners.clear(),this.activeViews.clear(),this.serverErrors.clear(),this.serverErrorListeners.clear();for(let{bridge:W}of this.channels.values())W.dispose(new L("Client disconnected"));this.channels.clear()}handleServerMessage(W){switch(W.type){case"vdom_init":{let Z=this.activeViews.get(W.path);if(!Z)return;if(Z)Z.onInit(W.vdom,W.callbacks,W.render_props,W.css_refs);if(this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"vdom_update":{let Z=this.activeViews.get(W.path);if(!Z)return;if(Z.onUpdate(W.ops),this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"server_error":{if(!this.activeViews.has(W.path))return;this.serverErrors.set(W.path,W.error),this.notifyServerError(W.path,W.error);break}case"api_call":{this.performApiCall(W);break}case"navigate_to":{let Z=!!W.replace,$=W.path||"";if($.startsWith("//"))$=`${window.location.protocol}${$}`;if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test($))if($.startsWith("http://")||$.startsWith("https://"))try{let q=new URL($);if(q.origin===window.location.origin){let J=`${q.pathname}${q.search}${q.hash}`;this.frameworkNavigate(J,{replace:Z})}else if(Z)window.location.replace($);else window.location.assign($)}catch{if(Z)window.location.replace($);else window.location.assign($)}else if(Z)window.location.replace($);else window.location.assign($);else this.frameworkNavigate($,{replace:Z});break}case"channel_message":{this.routeChannelMessage(W);break}default:console.error("Unexpected message:",W)}}async performApiCall(W){try{let Z=await fetch(W.url,{method:W.method||"GET",headers:{...W.headers||{},...W.body!=null&&!("content-type"in(W.headers||{}))?{"content-type":"application/json"}:{}},body:W.body!=null?typeof W.body==="string"?W.body:JSON.stringify(W.body):void 0,credentials:W.credentials||"include"}),$={};Z.headers.forEach((D,F)=>$[F]=D);let Q=null;if((Z.headers.get("content-type")||"").includes("application/json"))Q=await Z.json().catch(()=>null);else Q=await Z.text().catch(()=>null);let J={type:"api_result",id:W.id,ok:Z.ok,status:Z.status,headers:$,body:Q};await this.sendMessage(J)}catch(Z){let $={type:"api_result",id:W.id,ok:!1,status:0,headers:{},body:{error:String(Z)}};await this.sendMessage($)}}async invokeCallback(W,Z,$){await this.sendMessage({type:"callback",path:W,callback:Z,args:$.map(ZW)})}acquireChannel(W){let Z=this.ensureChannelEntry(W);return Z.refCount+=1,Z.bridge}releaseChannel(W){let Z=this.channels.get(W);if(!Z)return;if(Z.refCount=Math.max(0,Z.refCount-1),Z.refCount===0)Z.bridge.dispose(new L("Channel released")),this.channels.delete(W)}ensureChannelEntry(W){let Z=this.channels.get(W);if(!Z)Z={bridge:jW(this,W),refCount:0},this.channels.set(W,Z);return Z}routeChannelMessage(W){let Z=this.ensureChannelEntry(W.channel);if(Z.bridge.handleServerMessage(W)&&Z.refCount===0)this.channels.delete(W.channel)}handleTransportDisconnect(){for(let W of this.channels.values())W.bridge.handleDisconnect(new L("Connection lost"))}}import{useLocation as O0,useParams as f0,useNavigate as N0}from"react-router";import{jsx as S,jsxs as c}from"react/jsx-runtime";var IW=BW(null),HW=BW(null),n=()=>{let W=KW(IW);if(!W)throw Error("usePulseClient must be used within a PulseProvider");return W},C0=(W)=>{let Z=KW(HW);if(!Z)throw Error("usePulsePrerender must be used within a PulseProvider");let $=Z.views[W];if(!$)throw Error(`No prerender found for '${W}'`);return $},FW=typeof window<"u";function R0({children:W,config:Z,prerender:$}){let[Q,q]=QW(!0),J=N0(),{renderId:D}=$,F=qW(()=>new i(Z.serverAddress,D,J),[Z.serverAddress,J,D]);return d(()=>F.onConnectionChange(q),[F]),d(()=>{if(FW)return F.connect(),()=>F.disconnect()},[F]),S(IW.Provider,{value:F,children:c(HW.Provider,{value:$,children:[!Q&&S("div",{style:{position:"fixed",bottom:"20px",right:"20px",backgroundColor:"red",color:"white",padding:"10px",borderRadius:"5px",zIndex:1000},children:"Failed to connect to the server."}),W]})})}function P0({externalComponents:W,path:Z,cssModules:$}){let Q=n(),q=C0(Z),J=q.vdom,D=qW(()=>new h(Q,Z,W,$,q.callbacks,q.render_props,q.css_refs),[Q,Z,W,$,q]),[F,G]=QW(()=>D.renderNode(J)),[U,O]=QW(null),N=O0(),V=f0(),X=qW(()=>{let{"*":f="",...A}=V,C=new URLSearchParams(N.search);return{hash:N.hash,pathname:N.pathname,query:N.search,queryParams:Object.fromEntries(C.entries()),pathParams:A,catchall:f.length>0?f.split("/"):[]}},[N.hash,N.pathname,N.search,JSON.stringify(V)]);if(d(()=>{if(FW){Q.mountView(Z,{routeInfo:X,onInit:(A,C,R,K)=>{D.setCallbacks(C),D.setRenderProps(R),D.setCssRefs(K),G(D.renderNode(A))},onUpdate:(A)=>{G((C)=>C==null?C:t(C,A,D))}});let f=Q.onServerError((A,C)=>{if(A===Z)O(C)});return()=>{f(),Q.unmount(Z)}}},[Q]),d(()=>{if(FW)Q.navigate(Z,X)},[Q,Z,X]),U)return S(j0,{error:U});return F}function j0({error:W}){return c("div",{style:{padding:16,border:"1px solid #e00",background:"#fff5f5",color:"#900",fontFamily:'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',whiteSpace:"pre-wrap"},children:[c("div",{style:{fontWeight:700,marginBottom:8},children:["Server Error during ",W.phase]}),W.message&&S("div",{children:W.message}),W.stack&&c("details",{open:!0,style:{marginTop:8},children:[S("summary",{children:"Stack trace"}),S("pre",{style:{margin:0},children:W.stack})]})]})}import{useEffect as B0,useMemo as K0}from"react";function I0(W){let Z=n(),$=K0(()=>{if(!W)throw Error("usePulseChannel requires a non-empty channelId");return Z.acquireChannel(W)},[Z,W]);return B0(()=>{return()=>{Z.releaseChannel(W)}},[Z,W]),$}import{forwardRef as H0,useCallback as Y0}from"react";import{jsx as L0}from"react/jsx-runtime";var w0=H0(function({onSubmit:Z,action:$,...Q},q){return L0("form",{...Q,action:$,ref:q,onSubmit:Y0((J)=>YW({event:J,action:$,onSubmit:Z}),[$,Z])})});async function YW({event:W,action:Z,onSubmit:$,formData:Q,force:q}){if($?.(W),!q&&W.defaultPrevented)return;let J=W.currentTarget;W.preventDefault();let D=W.nativeEvent;if(!Q)Q=new FormData(J,D.submitter);let F=new URL(Z,window.location.href);try{await fetch(F,{method:"POST",credentials:"include",body:Q})}catch(G){throw G}}import{io as M0}from"socket.io-client";class wW{url;socket=null;listener=null;messageQueue=[];connectionListeners=new Set;constructor(W){this.url=W}connect(W){return this.listener=W,new Promise((Z,$)=>{this.socket=M0(this.url,{transports:["websocket"]}),this.socket.on("connect",()=>{console.log("[SocketIOTransport] Connected:",this.socket?.id);for(let Q of this.messageQueue)this.socket?.emit("message",Q);this.messageQueue=[],this.notifyConnectionListeners(!0),Z()}),this.socket.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),$(Q)}),this.socket.on("disconnect",()=>{console.log("[SocketIOTransport] Disconnected"),this.notifyConnectionListeners(!1)}),this.socket.on("message",(Q)=>{this.listener?.(Q)})})}disconnect(){this.socket?.disconnect(),this.socket=null,this.listener=null,this.messageQueue=[],this.connectionListeners.clear()}async sendMessage(W){if(this.isConnected())this.socket.emit("message",W);else this.messageQueue.push(W)}isConnected(){return this.socket?.connected||!1}onConnectionChange(W){return this.connectionListeners.add(W),W(this.isConnected()),()=>{this.connectionListeners.delete(W)}}notifyConnectionListeners(W){for(let Z of this.connectionListeners)Z(W)}}function y0({params:W,request:Z}){let{"*":$="",...Q}=W,q=new URL(Z.url);return{hash:q.hash,pathname:q.pathname,query:q.search,queryParams:Object.fromEntries(q.searchParams.entries()),pathParams:Q,catchall:$.length>1?$.split("/"):[]}}function b0(W){if(W===null||typeof W!=="object")return!1;let Z=Object.getPrototypeOf(W);return Z===Object.prototype||Z===null}function JW(W){return typeof W==="function"||typeof W==="symbol"||typeof W>"u"}async function S0(W){let Z=await W.arrayBuffer();return Array.from(new Uint8Array(Z))}async function k0(W){return await m(W,{seen:new WeakMap,nextId:1})}function T0(W,Z){if(W.seen.get(Z)!==void 0)return null;let Q=W.nextId++;return W.seen.set(Z,Q),Q}async function m(W,Z){if(W===null||typeof W!=="object")return W;if(W instanceof Date)return{__t:"datetime",timestamp:W.getTime()};if(W instanceof FormData){let F=T0(Z,W);if(F===null)return{__t:"ref",id:Z.seen.get(W)};let G={};for(let[O,N]of W.entries()){let V=await m(N,Z);if(V===void 0)continue;if(Object.prototype.hasOwnProperty.call(G,O)){let X=G[O];if(Array.isArray(X))X.push(V);else G[O]=[X,V]}else G[O]=V}return{__t:"formdata",fields:G,__id:F}}if(W instanceof File){let F=W,G=await S0(W);return{__t:"file",name:F.name,type:F.type,size:F.size,lastModified:F.lastModified,content:G}}let $=W,Q=Z.seen.get($);if(Q!==void 0)return{__t:"ref",id:Q};let q=Z.nextId++;if(Z.seen.set($,q),Array.isArray(W)){let G=(await Promise.all(W.map((O)=>m(O,Z)))).filter((O)=>O!==void 0);return{__t:"array",__id:q,items:G}}let J={};if(b0(W))for(let F of Object.keys(W)){let G=W[F];if(JW(G))continue;let U=await m(G,Z);if(U!==void 0)J[F]=U}else for(let F in W){let G=W[F];if(JW(G))continue;let U=await m(G,Z);if(U!==void 0)J[F]=U}return{__t:"object",__id:q,props:J}}function _0(W){return k(W)}function k(W){if(W===null||typeof W!=="object")return W;let Z=W,$=Z.__t;if($==="datetime"){let q=Z.timestamp;return new Date(q)}if($==="file"){let q=Z.content;if(Array.isArray(q))return{...Z,content:new Uint8Array(q)};return Z}if($==="formdata"){let q=Z.fields,J={};for(let D of Object.keys(q)){let F=q[D];if(Array.isArray(F))J[D]=F.map((G)=>k(G));else J[D]=k(F)}return{__t:"formdata",fields:J}}if($==="array")return Z.items.map((J)=>k(J));if($==="object"){let q=Z.props,J={};for(let D of Object.keys(q))J[D]=k(q[D]);return J}if($==="ref")return Z;let Q={};for(let q of Object.keys(Z))Q[q]=k(Z[q]);return Q}function g0(W){return XW(W,new WeakSet)}function XW(W,Z){if(W===null||typeof W!=="object")return W;if(Z.has(W))return;if(Z.add(W),Array.isArray(W))return W.map((Q)=>XW(Q,Z)).filter((Q)=>Q!==void 0);let $={};for(let Q in W){let q=W[Q];if(JW(q))continue;let J=XW(q,Z);if(J!==void 0)$[Q]=J}return $}export{n as usePulseClient,I0 as usePulseChannel,YW as submitForm,x as serialize,y0 as extractServerRouteInfo,ZW as extractEvent,k0 as encodeForWire,$W as deserialize,_0 as decodeFromWire,g0 as cleanForSerialization,t as applyReactTreeUpdates,h as VDOMRenderer,wW as SocketIOTransport,SW as RenderLazy,P0 as PulseView,i as PulseSocketIOClient,R0 as PulseProvider,w0 as PulseForm,L as PulseChannelResetError};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=E513A2E7EE8B3C9164756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"sources": ["../src/pulse.tsx", "../src/renderer.tsx", "../src/vdom.ts", "../src/serialize/extractor.ts", "../src/serialize/elements.ts", "../src/serialize/events.ts", "../src/serialize/serializer.ts", "../src/client.tsx", "../src/channel.ts", "../src/usePulseChannel.ts", "../src/form.tsx", "../src/transport.ts", "../src/helpers.ts", "../src/serialize/clean.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import React, {\n useEffect,\n useState,\n useMemo,\n createContext,\n useContext,\n type ComponentType,\n} from \"react\";\nimport { VDOMRenderer, applyUpdates } from \"./renderer\";\nimport { PulseSocketIOClient } from \"./client\";\nimport type { VDOM, ComponentRegistry, RegistryEntry } from \"./vdom\";\nimport { useLocation, useParams, useNavigate } from \"react-router\";\nimport type { ServerErrorInfo} from \"./messages\";\nimport type { RouteInfo } from \"./helpers\";\n\n// =================================================================\n// Types\n// =================================================================\n\nexport interface PulseConfig {\n serverAddress: string;\n}\n\nexport type PulsePrerenderView = {\n vdom: VDOM;\n callbacks: string[];\n render_props: string[];\n css_refs: string[];\n};\n\nexport type PulsePrerender = {\n renderId: string;\n views: Record<string, PulsePrerenderView>;\n};\n// =================================================================\n// Context and Hooks\n// =================================================================\n\n// Context for the client, provided by PulseProvider\nconst PulseClientContext = createContext<PulseSocketIOClient | null>(null);\nconst PulsePrerenderContext = createContext<PulsePrerender | null>(null);\n\nexport const usePulseClient = () => {\n const client = useContext(PulseClientContext);\n if (!client) {\n throw new Error(\"usePulseClient must be used within a PulseProvider\");\n }\n return client;\n};\n\nexport const usePulsePrerender = (path: string) => {\n const ctx = useContext(PulsePrerenderContext);\n if (!ctx) {\n throw new Error(\"usePulsePrerender must be used within a PulseProvider\");\n }\n const view = ctx.views[path];\n if (!view) {\n throw new Error(`No prerender found for '${path}'`);\n }\n return view;\n};\n\n// =================================================================\n// Provider\n// =================================================================\n\nexport interface PulseProviderProps {\n children: React.ReactNode;\n config: PulseConfig;\n prerender: PulsePrerender;\n}\n\nconst inBrowser = typeof window !== \"undefined\";\n\nexport function PulseProvider({\n children,\n config,\n prerender,\n}: PulseProviderProps) {\n const [connected, setConnected] = useState(true);\n const rrNavigate = useNavigate();\n const { renderId } = prerender;\n\n const client = useMemo(\n () => new PulseSocketIOClient(config.serverAddress, renderId, rrNavigate),\n [config.serverAddress, rrNavigate, renderId]\n );\n\n useEffect(() => client.onConnectionChange(setConnected), [client]);\n\n useEffect(() => {\n if (inBrowser) {\n client.connect();\n return () => client.disconnect();\n }\n }, [client]);\n\n return (\n <PulseClientContext.Provider value={client}>\n <PulsePrerenderContext.Provider value={prerender}>\n {!connected && (\n <div\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"red\",\n color: \"white\",\n padding: \"10px\",\n borderRadius: \"5px\",\n zIndex: 1000,\n }}\n >\n Failed to connect to the server.\n </div>\n )}\n {children}\n </PulsePrerenderContext.Provider>\n </PulseClientContext.Provider>\n );\n}\n\n// =================================================================\n// View\n// =================================================================\n\nexport interface PulseViewProps {\n externalComponents: ComponentRegistry;\n path: string;\n cssModules: Record<string, Record<string, string>>;\n}\n\nexport function PulseView({\n externalComponents,\n path,\n cssModules,\n}: PulseViewProps) {\n const client = usePulseClient();\n const initialView = usePulsePrerender(path);\n const initialVDOM = initialView.vdom;\n const renderer = useMemo(\n () =>\n new VDOMRenderer(\n client,\n path,\n externalComponents,\n cssModules,\n initialView.callbacks,\n initialView.render_props,\n initialView.css_refs\n ),\n [client, path, externalComponents, cssModules, initialView]\n );\n const [tree, setTree] = useState<React.ReactNode>(() =>\n renderer.renderNode(initialVDOM)\n );\n const [serverError, setServerError] = useState<ServerErrorInfo | null>(null);\n\n const location = useLocation();\n const params = useParams();\n\n const routeInfo = useMemo(() => {\n const { \"*\": catchall = \"\", ...pathParams } = params;\n const queryParams = new URLSearchParams(location.search);\n return {\n hash: location.hash,\n pathname: location.pathname,\n query: location.search,\n queryParams: Object.fromEntries(queryParams.entries()),\n pathParams,\n catchall: catchall.length > 0 ? catchall.split(\"/\") : [],\n } satisfies RouteInfo;\n }, [\n location.hash,\n location.pathname,\n location.search,\n JSON.stringify(params),\n ]);\n\n useEffect(() => {\n if (inBrowser) {\n client.mountView(path, {\n routeInfo,\n onInit: (vdom, callbacks, renderProps, cssRefs) => {\n renderer.setCallbacks(callbacks);\n renderer.setRenderProps(renderProps);\n renderer.setCssRefs(cssRefs);\n setTree(renderer.renderNode(vdom));\n },\n onUpdate: (ops) => {\n setTree((prev) =>\n prev == null ? prev : applyUpdates(prev, ops, renderer)\n );\n },\n });\n const offErr = client.onServerError((p, err) => {\n if (p === path) setServerError(err);\n });\n return () => {\n offErr();\n client.unmount(path);\n };\n }\n // routeInfo is NOT included here on purpose\n }, [client]);\n\n useEffect(() => {\n if (inBrowser) {\n client.navigate(path, routeInfo);\n }\n }, [client, path, routeInfo]);\n\n if (serverError) {\n return <ServerError error={serverError} />;\n }\n\n return tree;\n}\n\nfunction ServerError({ error }: { error: ServerErrorInfo }) {\n return (\n <div\n style={{\n padding: 16,\n border: \"1px solid #e00\",\n background: \"#fff5f5\",\n color: \"#900\",\n fontFamily:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n whiteSpace: \"pre-wrap\",\n }}\n >\n <div style={{ fontWeight: 700, marginBottom: 8 }}>\n Server Error during {error.phase}\n </div>\n {error.message && <div>{error.message}</div>}\n {error.stack && (\n <details open style={{ marginTop: 8 }}>\n <summary>Stack trace</summary>\n <pre style={{ margin: 0 }}>{error.stack}</pre>\n </details>\n )}\n </div>\n );\n}\n",
|
|
6
|
-
"import React, {\n cloneElement,\n createElement,\n isValidElement,\n lazy,\n Suspense,\n type ComponentType,\n} from \"react\";\nimport type {\n ComponentRegistry,\n VDOMNode,\n VDOMUpdate,\n VDOM,\n PathDelta,\n} from \"./vdom\";\nimport {\n FRAGMENT_TAG,\n isElementNode,\n isMountPointNode,\n MOUNT_POINT_PREFIX,\n} from \"./vdom\";\nimport type { PulseSocketIOClient } from \"./client\";\n\nexport class VDOMRenderer {\n private callbacks: Set<string>;\n private callbackCache: Map<string, Function>;\n private renderPropKeys: Set<string>;\n private cssProps: Set<string>;\n private callbackList: string[];\n constructor(\n private client: PulseSocketIOClient,\n private path: string,\n private components: ComponentRegistry,\n private cssModules: Record<string, Record<string, string>>,\n initialCallbacks: string[] = [],\n initialRenderProps: string[] = [],\n initialCssRefs: string[] = []\n ) {\n this.callbacks = new Set(initialCallbacks);\n this.callbackCache = new Map();\n this.renderPropKeys = new Set(initialRenderProps);\n this.cssProps = new Set(initialCssRefs);\n this.callbackList = [...this.callbacks].sort();\n }\n\n // Accessors used by update logic to determine which props need rebinding\n hasCallbackPath(path: string) {\n return this.callbacks.has(path);\n }\n\n hasRenderPropPath(path: string) {\n return this.renderPropKeys.has(path);\n }\n\n hasAnyCallbackUnder(prefix: string): boolean {\n if (prefix === \"\") return this.callbackList.length > 0;\n const i = lowerBound(this.callbackList, prefix);\n return (\n i < this.callbackList.length && this.callbackList[i]!.startsWith(prefix)\n );\n }\n\n setCallbacks(keys: string[]) {\n this.callbacks = new Set(keys);\n // prune stale cached callbacks\n for (const k of Array.from(this.callbackCache.keys())) {\n if (!this.callbacks.has(k)) this.callbackCache.delete(k);\n }\n this.callbackList = [...this.callbacks].sort();\n }\n\n setRenderProps(keys: string[]) {\n this.renderPropKeys = new Set(keys);\n }\n\n setCssRefs(entries: string[]) {\n this.cssProps = new Set(entries);\n }\n\n applyCallbackDelta(delta: PathDelta) {\n // Only update the internal callback path registry and cache. We rely on\n // accompanying update_props operations that contain the \"$cb\" placeholder\n // to trigger prop updates; transformValue will resolve to functions.\n if (delta.remove) {\n for (const key of delta.remove) {\n this.callbacks.delete(key);\n this.callbackCache.delete(key);\n }\n }\n if (delta.add) {\n for (const key of delta.add) {\n this.callbacks.add(key);\n }\n }\n this.callbackList = [...this.callbacks].sort();\n }\n\n applyRenderPropsDelta(delta: PathDelta) {\n if (delta.remove) {\n for (const key of delta.remove) {\n this.renderPropKeys.delete(key);\n }\n }\n if (delta.add) {\n for (const key of delta.add) {\n this.renderPropKeys.add(key);\n }\n }\n }\n\n applyCssRefsDelta(delta: PathDelta) {\n if (delta.remove) {\n for (const prop of delta.remove) {\n this.cssProps.delete(prop);\n }\n }\n if (delta.add) {\n for (const prop of delta.add) {\n this.cssProps.add(prop);\n }\n }\n }\n\n getCallback(path: string, prop: string) {\n const key = this.propPath(path, prop);\n let fn = this.callbackCache.get(key);\n if (!fn) {\n fn = (...args: any[]) => this.client.invokeCallback(this.path, key, args);\n this.callbackCache.set(key, fn);\n }\n return fn;\n }\n\n renderNode(node: VDOMNode, currentPath = \"\"): React.ReactNode {\n // Handle primitives early\n if (\n node == null || // catches both null and undefined\n typeof node === \"boolean\" ||\n typeof node === \"number\" ||\n typeof node === \"string\"\n ) {\n return node;\n }\n\n // Element nodes\n if (isElementNode(node)) {\n const { tag, props = {}, children = [] } = node;\n\n const newProps: Record<string, any> = {};\n for (const [propName, propValue] of Object.entries(props)) {\n newProps[propName] = this.transformValue(\n currentPath,\n propName,\n propValue\n );\n }\n\n if (node.key) {\n newProps.key = node.key;\n }\n\n const renderedChildren = [];\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index]!;\n const childPath = currentPath\n ? `${currentPath}.${index}`\n : String(index);\n renderedChildren.push(this.renderNode(child, childPath));\n }\n\n if (isMountPointNode(node)) {\n const componentKey = node.tag.slice(MOUNT_POINT_PREFIX.length);\n const Component = this.components[componentKey]!;\n if (!Component) {\n throw new Error(\n `Could not find component ${componentKey}. This is a Pulse internal error.`\n );\n }\n return createElement(Component, newProps, ...renderedChildren);\n }\n\n return createElement(\n tag === FRAGMENT_TAG ? React.Fragment : tag,\n newProps,\n ...renderedChildren\n );\n }\n\n // Fallback for unknown node types\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Unknown VDOM node type:\", node);\n }\n return null;\n }\n\n private propPath(path: string, prop: string) {\n return path ? `${path}.${prop}` : prop;\n }\n\n transformValue(path: string, key: string, value: any) {\n const propPath = this.propPath(path, key);\n if (this.callbacks.has(propPath)) {\n return this.getCallback(path, key);\n }\n if (this.renderPropKeys.has(propPath)) {\n return this.renderNode(value, propPath);\n }\n if (this.cssProps.has(propPath)) {\n return this.resolveCssToken(value);\n }\n return value;\n }\n\n private resolveCssToken(token: string): string {\n const idx = token.indexOf(\":\");\n if (idx === -1) {\n return token;\n }\n const moduleId = token.slice(0, idx);\n const className = token.slice(idx + 1);\n if (!moduleId || !className) {\n return token;\n }\n const mod = this.cssModules[moduleId];\n if (!mod) {\n throw new Error(\n `Received CSS reference for unknown module '${moduleId}'`\n );\n }\n const resolved = mod[className];\n if (typeof resolved !== \"string\") {\n throw new Error(\n `Received CSS reference for missing class '${className}' in module '${moduleId}'`\n );\n }\n return resolved;\n }\n}\n\n// =================================================================\n// Update Functions (shallow-clone along update path)\n// =================================================================\n\nfunction ensureChildrenArray(el: React.ReactElement): React.ReactNode[] {\n const children = (el.props as any)?.children as React.ReactNode | undefined;\n if (children == null) return [];\n return Array.isArray(children) ? children.slice() : [children];\n}\n\nexport function applyUpdates(\n initialTree: React.ReactNode,\n updates: VDOMUpdate[],\n renderer: VDOMRenderer\n): React.ReactNode {\n let newTree: React.ReactNode = initialTree;\n for (const update of updates) {\n if (update.type === \"update_callbacks\") {\n renderer.applyCallbackDelta(update.data);\n continue;\n }\n if (update.type === \"update_css_refs\") {\n renderer.applyCssRefsDelta(update.data);\n continue;\n }\n if (update.type === \"update_render_props\") {\n renderer.applyRenderPropsDelta(update.data);\n continue;\n }\n\n const parts = update.path.split(\".\").filter((s) => s.length > 0);\n\n const descend = (\n node: React.ReactNode,\n depth: number,\n path: string\n ): React.ReactNode => {\n if (depth < parts.length) {\n assertIsElement(node, parts, depth);\n const element = node as React.ReactElement<Record<string, any> | null>;\n const childKey = parts[depth]!;\n const childIdx = +childKey;\n const childPath = path ? `${path}.${childKey}` : childKey;\n if (!Number.isNaN(childIdx)) {\n // Regular child traversal\n const childrenArr = ensureChildrenArray(element);\n const child = childrenArr[childIdx];\n childrenArr[childIdx] = descend(child, depth + 1, childPath) as any;\n return cloneElement(element, undefined, ...childrenArr);\n } else {\n // Render prop traversal\n const baseProps = (element.props ?? {}) as Record<string, any>;\n const child = baseProps[childKey];\n const props = {\n ...baseProps,\n [childKey]: descend(child, depth + 1, childPath),\n };\n return cloneElement(element, props);\n }\n }\n switch (update.type) {\n case \"replace\": {\n return renderer.renderNode(update.data, update.path);\n }\n case \"update_props\": {\n assertIsElement(node, parts, depth);\n const element = node as React.ReactElement;\n const currentProps = (element.props ?? {}) as Record<string, any>;\n const nextProps: Record<string, any> = { ...currentProps };\n const delta = update.data;\n if (delta.remove && delta.remove.length > 0) {\n for (const key of delta.remove) {\n if (key in nextProps) {\n delete nextProps[key];\n }\n }\n }\n if (delta.set) {\n for (const [k, v] of Object.entries(delta.set)) {\n nextProps[k] = renderer.transformValue(path, k, v);\n }\n }\n // Not passing children -> only update the props\n return cloneElement(element, nextProps);\n }\n // case \"insert\": {\n // assertIsElement(node, parts, depth);\n // const element = node as React.ReactElement;\n // const children = ensureChildrenArray(element);\n // const childPath = currentPath\n // ? `${currentPath}.${update.idx}`\n // : String(update.idx);\n // children.splice(\n // update.idx,\n // 0,\n // renderer.renderNode(update.data, childPath)\n // );\n // // Only update the children (TypeScript doesn't like the `null`, but that's what the official React docs say)\n // return cloneElement(element, null!, ...children);\n // }\n // case \"remove\": {\n // assertIsElement(node, parts, depth);\n // const element = node as React.ReactElement;\n // const children = ensureChildrenArray(element);\n // children.splice(update.idx, 1);\n // // Only update the children (TypeScript doesn't like the `null`, but that's what the official React docs say)\n // return cloneElement(element, null!, ...children);\n // }\n // case \"move\": {\n // assertIsElement(node, parts, depth);\n // const element = node as React.ReactElement;\n // const children = ensureChildrenArray(element);\n // const item = children.splice(update.data.from_index, 1)[0];\n // children.splice(update.data.to_index, 0, item);\n\n // // Rebind callbacks for affected index range (indices whose path changed)\n // const start = Math.min(update.data.from_index, update.data.to_index);\n // const end = Math.max(update.data.from_index, update.data.to_index);\n // for (let i = start; i <= end; i++) {\n // const childPath = currentPath ? `${currentPath}.${i}` : String(i);\n // if (renderer.hasAnyCallbackUnder(childPath)) {\n // children[i] = rebindCallbacksInSubtree(\n // children[i],\n // childPath,\n // renderer\n // ) as any;\n // }\n // }\n\n // // Only update the children (TypeScript doesn't like the `null`, but that's what the official React docs say)\n // return cloneElement(element, null!, ...children);\n // }\n case \"reconciliation\": {\n assertIsElement(node, parts, depth);\n const element = node as React.ReactElement;\n const prevChildren = ensureChildrenArray(element);\n const nextChildren = [];\n\n const [newIndices, newContents] = update.new;\n const [reuseIndices, reuseSources] = update.reuse;\n\n let nextNew = -1,\n nextReuse = -1,\n newIdx = -1,\n reuseIdx = -1;\n if (newIndices.length > 0) {\n nextNew = newIndices[0];\n newIdx = 0;\n }\n if (reuseIndices.length > 0) {\n nextReuse = reuseIndices[0];\n reuseIdx = 0;\n }\n for (let i = 0; i < update.N; ++i) {\n if (i === nextNew) {\n const contents = newContents[newIdx];\n const childPath = path ? `${path}.${i}` : String(i);\n nextChildren.push(renderer.renderNode(contents, childPath));\n nextNew =\n newIdx < newIndices.length - 1 ? newIndices[++newIdx] : -1;\n } else if (i === nextReuse) {\n const srcIdx = reuseSources[reuseIdx];\n let src = prevChildren[srcIdx];\n const childPath = path ? `${path}.${i}` : String(i);\n // The node may have callbacks that need to be updated for this new path\n if (renderer.hasAnyCallbackUnder(childPath)) {\n src = rebindCallbacksInSubtree(src, childPath, renderer);\n }\n nextChildren.push(src);\n nextReuse =\n reuseIdx < reuseIndices.length - 1\n ? reuseIndices[++reuseIdx]\n : -1;\n } else {\n // No need to rebind callbacks, the node hasn't moved\n nextChildren.push(prevChildren[i]);\n }\n }\n // Pass null to reuse previous props\n return cloneElement(element, null!, ...nextChildren);\n }\n default:\n throw new Error(\n `[Pulse renderer] Unknown update type: ${update[\"type\"]}`\n );\n }\n };\n\n newTree = descend(newTree, 0, \"\");\n }\n return newTree;\n}\n\n// The `component` prop should be something like `() =>\n// import('~/path/to/component') (we'll need to remap if we're importing a named export and not the default)\nexport function RenderLazy(\n component: () => Promise<{ default: ComponentType<any> }>,\n fallback?: React.ReactNode\n): React.FC<React.PropsWithChildren<unknown>> {\n const Component = lazy(component);\n return ({ children, ...props }: React.PropsWithChildren<unknown>) => {\n return (\n <Suspense fallback={fallback ?? <></>}>\n <Component {...props}>{children}</Component>\n </Suspense>\n );\n };\n}\n\nfunction assertIsElement(\n node: React.ReactNode,\n parts: string[],\n depth: number\n): node is React.ReactElement {\n if (process.env.NODE_ENV !== \"production\" && !isValidElement(node)) {\n console.error(\"Invalid node:\", node);\n throw new Error(\"Invalid node at path \" + parts.slice(0, depth).join(\".\"));\n }\n return true;\n}\n\n// Rebind callback function props within a subtree after a path-changing move\nfunction rebindCallbacksInSubtree(\n node: React.ReactNode,\n path: string,\n renderer: VDOMRenderer\n): React.ReactNode {\n if (!isValidElement(node)) return node;\n const element = node as React.ReactElement<Record<string, any> | null>;\n const baseProps = (element.props ?? {}) as Record<string, any>;\n const nextProps: Record<string, any> = { ...baseProps };\n\n // Rebind only callback props; CSS refs are path-agnostic and render-props\n // are handled by the server-side renderer via explicit updates\n for (const key of Object.keys(baseProps)) {\n const propPath = path ? `${path}.${key}` : key;\n if (renderer.hasCallbackPath(propPath)) {\n nextProps[key] = renderer.getCallback(path, key);\n }\n if (\n renderer.hasRenderPropPath(propPath) &&\n renderer.hasAnyCallbackUnder(propPath)\n ) {\n nextProps[key] = rebindCallbacksInSubtree(\n baseProps[key],\n propPath,\n renderer\n );\n }\n }\n\n const children = ensureChildrenArray(element).map((child, idx) => {\n const childPath = path ? `${path}.${idx}` : String(idx);\n if (renderer.hasAnyCallbackUnder(childPath)) {\n return rebindCallbacksInSubtree(child, childPath, renderer);\n } else {\n return child;\n }\n });\n\n return cloneElement(element, nextProps, ...children);\n}\n\n// Binary-search lower bound for prefix matching on sorted callback paths\nfunction lowerBound(arr: string[], target: string): number {\n let lo = 0;\n let hi = arr.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (arr[mid]! < target) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n",
|
|
7
|
-
"import type { ComponentType } from \"react\";\n\n// Special prefixes for reserved node types\nexport const FRAGMENT_TAG = \"$$fragment\";\nexport const MOUNT_POINT_PREFIX = \"$$\";\n\n// export type LazyComponent = () => Promise<{ default: ComponentType<any> }>;\nexport type RegistryEntry = ComponentType<any>;\nexport type ComponentRegistry = Record<string, ComponentType<any>>;\n\nexport interface VDOMElement {\n tag: string;\n props?: Record<string, any>;\n children?: VDOMNode[];\n key?: string;\n lazy?: boolean;\n}\n\n// Primitive nodes that can be rendered\nexport type PrimitiveNode = string | number | boolean;\n\n// VDOMNode is either a primitive (string, number, boolean) or an element node.\n// Booleans are valid children in React but do not render anything.\n// Mount points are just UIElementNodes with tags starting with $$ComponentKey\nexport type VDOMNode = PrimitiveNode | VDOMElement;\n\nexport type VDOM = VDOMNode;\n\nexport interface VDOMUpdateBase {\n type: string;\n path: string; // Dot-separated path to the node\n}\n\nexport interface
|
|
6
|
+
"import React, {\n cloneElement,\n createElement,\n isValidElement,\n lazy,\n Suspense,\n type ComponentType,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport type {\n ComponentRegistry,\n VDOMNode,\n VDOMUpdate,\n VDOM,\n PathDelta,\n} from \"./vdom\";\nimport {\n FRAGMENT_TAG,\n isElementNode,\n isMountPointNode,\n MOUNT_POINT_PREFIX,\n} from \"./vdom\";\nimport type { PulseSocketIOClient } from \"./client\";\n\nexport class VDOMRenderer {\n private callbacks: Set<string>;\n private callbackCache: Map<string, Function>;\n private renderPropKeys: Set<string>;\n private cssProps: Set<string>;\n private callbackList: string[];\n constructor(\n private client: PulseSocketIOClient,\n private path: string,\n private components: ComponentRegistry,\n private cssModules: Record<string, Record<string, string>>,\n initialCallbacks: string[] = [],\n initialRenderProps: string[] = [],\n initialCssRefs: string[] = []\n ) {\n this.callbacks = new Set(initialCallbacks);\n this.callbackCache = new Map();\n this.renderPropKeys = new Set(initialRenderProps);\n this.cssProps = new Set(initialCssRefs);\n this.callbackList = [...this.callbacks].sort();\n }\n\n // Accessors used by update logic to determine which props need rebinding\n hasCallbackPath(path: string) {\n return this.callbacks.has(path);\n }\n\n hasRenderPropPath(path: string) {\n return this.renderPropKeys.has(path);\n }\n\n hasAnyCallbackUnder(prefix: string): boolean {\n if (prefix === \"\") return this.callbackList.length > 0;\n const i = lowerBound(this.callbackList, prefix);\n return (\n i < this.callbackList.length && this.callbackList[i]!.startsWith(prefix)\n );\n }\n\n setCallbacks(keys: string[]) {\n this.callbacks = new Set(keys);\n // prune stale cached callbacks\n for (const k of Array.from(this.callbackCache.keys())) {\n if (!this.callbacks.has(k)) this.callbackCache.delete(k);\n }\n this.callbackList = [...this.callbacks].sort();\n }\n\n setRenderProps(keys: string[]) {\n this.renderPropKeys = new Set(keys);\n }\n\n setCssRefs(entries: string[]) {\n this.cssProps = new Set(entries);\n }\n\n applyCallbackDelta(delta: PathDelta) {\n // Only update the internal callback path registry and cache. We rely on\n // accompanying update_props operations that contain the \"$cb\" placeholder\n // to trigger prop updates; transformValue will resolve to functions.\n if (delta.remove) {\n for (const key of delta.remove) {\n this.callbacks.delete(key);\n this.callbackCache.delete(key);\n }\n }\n if (delta.add) {\n for (const key of delta.add) {\n this.callbacks.add(key);\n }\n }\n this.callbackList = [...this.callbacks].sort();\n }\n\n applyRenderPropsDelta(delta: PathDelta) {\n if (delta.remove) {\n for (const key of delta.remove) {\n this.renderPropKeys.delete(key);\n }\n }\n if (delta.add) {\n for (const key of delta.add) {\n this.renderPropKeys.add(key);\n }\n }\n }\n\n applyCssRefsDelta(delta: PathDelta) {\n if (delta.remove) {\n for (const prop of delta.remove) {\n this.cssProps.delete(prop);\n }\n }\n if (delta.add) {\n for (const prop of delta.add) {\n this.cssProps.add(prop);\n }\n }\n }\n\n getCallback(path: string, prop: string) {\n const key = this.propPath(path, prop);\n let fn = this.callbackCache.get(key);\n if (!fn) {\n fn = (...args: any[]) => this.client.invokeCallback(this.path, key, args);\n this.callbackCache.set(key, fn);\n }\n return fn;\n }\n\n renderNode(node: VDOMNode, currentPath = \"\"): React.ReactNode {\n // Handle primitives early\n if (\n node == null || // catches both null and undefined\n typeof node === \"boolean\" ||\n typeof node === \"number\" ||\n typeof node === \"string\"\n ) {\n return node;\n }\n\n // Element nodes\n if (isElementNode(node)) {\n const { tag, props = {}, children = [] } = node;\n\n const newProps: Record<string, any> = {};\n for (const [propName, propValue] of Object.entries(props)) {\n newProps[propName] = this.transformValue(\n currentPath,\n propName,\n propValue\n );\n }\n\n if (node.key) {\n newProps.key = node.key;\n }\n\n const renderedChildren = [];\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index]!;\n const childPath = currentPath\n ? `${currentPath}.${index}`\n : String(index);\n renderedChildren.push(this.renderNode(child, childPath));\n }\n\n if (isMountPointNode(node)) {\n const componentKey = node.tag.slice(MOUNT_POINT_PREFIX.length);\n const Component = this.components[componentKey]!;\n if (!Component) {\n throw new Error(\n `Could not find component ${componentKey}. This is a Pulse internal error.`\n );\n }\n return createElement(Component, newProps, ...renderedChildren);\n }\n\n return createElement(\n tag === FRAGMENT_TAG ? React.Fragment : tag,\n newProps,\n ...renderedChildren\n );\n }\n\n // Fallback for unknown node types\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Unknown VDOM node type:\", node);\n }\n return null;\n }\n\n private propPath(path: string, prop: string) {\n return path ? `${path}.${prop}` : prop;\n }\n\n transformValue(path: string, key: string, value: any) {\n const propPath = this.propPath(path, key);\n if (this.callbacks.has(propPath)) {\n return this.getCallback(path, key);\n }\n if (this.renderPropKeys.has(propPath)) {\n return this.renderNode(value, propPath);\n }\n if (this.cssProps.has(propPath)) {\n return this.resolveCssToken(value);\n }\n return value;\n }\n\n private resolveCssToken(token: string): string {\n const idx = token.indexOf(\":\");\n if (idx === -1) {\n return token;\n }\n const moduleId = token.slice(0, idx);\n const className = token.slice(idx + 1);\n if (!moduleId || !className) {\n return token;\n }\n const mod = this.cssModules[moduleId];\n if (!mod) {\n throw new Error(\n `Received CSS reference for unknown module '${moduleId}'`\n );\n }\n const resolved = mod[className];\n if (typeof resolved !== \"string\") {\n throw new Error(\n `Received CSS reference for missing class '${className}' in module '${moduleId}'`\n );\n }\n return resolved;\n }\n}\n\n// =================================================================\n// Update Functions (shallow-clone along update path)\n// =================================================================\n\nfunction ensureChildrenArray(el: React.ReactElement): React.ReactNode[] {\n const children = (el.props as any)?.children as React.ReactNode | undefined;\n if (children == null) return [];\n return Array.isArray(children) ? children.slice() : [children];\n}\n\nexport function applyUpdates(\n initialTree: React.ReactNode,\n updates: VDOMUpdate[],\n renderer: VDOMRenderer\n): React.ReactNode {\n let newTree: React.ReactNode = initialTree;\n for (const update of updates) {\n if (update.type === \"update_callbacks\") {\n renderer.applyCallbackDelta(update.data);\n continue;\n }\n if (update.type === \"update_css_refs\") {\n renderer.applyCssRefsDelta(update.data);\n continue;\n }\n if (update.type === \"update_render_props\") {\n renderer.applyRenderPropsDelta(update.data);\n continue;\n }\n\n const parts = update.path.split(\".\").filter((s) => s.length > 0);\n\n const descend = (\n node: React.ReactNode,\n depth: number,\n path: string\n ): React.ReactNode => {\n if (depth < parts.length) {\n assertIsElement(node, parts, depth);\n const element = node as React.ReactElement<Record<string, any> | null>;\n const childKey = parts[depth]!;\n const childIdx = +childKey;\n const childPath = path ? `${path}.${childKey}` : childKey;\n if (!Number.isNaN(childIdx)) {\n // Regular child traversal\n const childrenArr = ensureChildrenArray(element);\n const child = childrenArr[childIdx];\n childrenArr[childIdx] = descend(child, depth + 1, childPath) as any;\n return cloneElement(element, undefined, ...childrenArr);\n } else {\n // Render prop traversal\n const baseProps = (element.props ?? {}) as Record<string, any>;\n const child = baseProps[childKey];\n const props = {\n ...baseProps,\n [childKey]: descend(child, depth + 1, childPath),\n };\n return cloneElement(element, props);\n }\n }\n switch (update.type) {\n case \"replace\": {\n return renderer.renderNode(update.data, update.path);\n }\n case \"update_props\": {\n assertIsElement(node, parts, depth);\n const element = node as React.ReactElement;\n const currentProps = (element.props ?? {}) as Record<string, any>;\n const nextProps: Record<string, any> = { ...currentProps };\n const delta = update.data;\n if (delta.remove && delta.remove.length > 0) {\n for (const key of delta.remove) {\n if (key in nextProps) {\n delete nextProps[key];\n }\n }\n }\n if (delta.set) {\n for (const [k, v] of Object.entries(delta.set)) {\n nextProps[k] = renderer.transformValue(path, k, v);\n }\n }\n\n // If some props were removed, use `createElement` to fully override\n // the props, as `cloneElement` shallowly merges the new props with\n // the old ones.\n const removedSomething = (delta.remove?.length ?? 0) > 0;\n if (removedSomething) {\n // Preserve key + ref\n nextProps[\"key\"] = element.key;\n nextProps[\"ref\"] = (element as any).ref;\n return createElement(\n element.type,\n nextProps,\n ...ensureChildrenArray(element)\n );\n } else {\n // Don't touch children. Key and ref are transferred by cloneElement.\n return cloneElement(element, nextProps);\n }\n }\n case \"reconciliation\": {\n assertIsElement(node, parts, depth);\n const element = node as React.ReactElement;\n const prevChildren = ensureChildrenArray(element);\n const nextChildren = [];\n\n const [newIndices, newContents] = update.new;\n const [reuseIndices, reuseSources] = update.reuse;\n\n let nextNew = -1,\n nextReuse = -1,\n newIdx = -1,\n reuseIdx = -1;\n if (newIndices.length > 0) {\n nextNew = newIndices[0];\n newIdx = 0;\n }\n if (reuseIndices.length > 0) {\n nextReuse = reuseIndices[0];\n reuseIdx = 0;\n }\n for (let i = 0; i < update.N; ++i) {\n if (i === nextNew) {\n const contents = newContents[newIdx];\n const childPath = path ? `${path}.${i}` : String(i);\n nextChildren.push(renderer.renderNode(contents, childPath));\n nextNew =\n newIdx < newIndices.length - 1 ? newIndices[++newIdx] : -1;\n } else if (i === nextReuse) {\n const srcIdx = reuseSources[reuseIdx];\n let src = prevChildren[srcIdx];\n const childPath = path ? `${path}.${i}` : String(i);\n // The node may have callbacks that need to be updated for this new path\n if (renderer.hasAnyCallbackUnder(childPath)) {\n src = rebindCallbacksInSubtree(src, childPath, renderer);\n }\n nextChildren.push(src);\n nextReuse =\n reuseIdx < reuseIndices.length - 1\n ? reuseIndices[++reuseIdx]\n : -1;\n } else {\n // No need to rebind callbacks, the node hasn't moved\n nextChildren.push(prevChildren[i]);\n }\n }\n // Pass null to reuse previous props\n return cloneElement(element, null!, ...nextChildren);\n }\n default:\n throw new Error(\n `[Pulse renderer] Unknown update type: ${update[\"type\"]}`\n );\n }\n };\n\n newTree = descend(newTree, 0, \"\");\n }\n return newTree;\n}\n\n// The `component` prop should be something like `() =>\n// import('~/path/to/component') (we'll need to remap if we're importing a named export and not the default)\nexport function RenderLazy(\n component: () => Promise<{ default: ComponentType<any> }>,\n fallback?: React.ReactNode\n): React.FC<React.PropsWithChildren<unknown>> {\n const Component = lazy(component);\n return ({ children, ...props }: React.PropsWithChildren<unknown>) => {\n return (\n <Suspense fallback={fallback ?? <></>}>\n <Component {...props}>{children}</Component>\n </Suspense>\n );\n };\n}\n\nfunction assertIsElement(\n node: React.ReactNode,\n parts: string[],\n depth: number\n): node is React.ReactElement {\n if (process.env.NODE_ENV !== \"production\" && !isValidElement(node)) {\n console.error(\"Invalid node:\", node);\n throw new Error(\"Invalid node at path \" + parts.slice(0, depth).join(\".\"));\n }\n return true;\n}\n\n// Rebind callback function props within a subtree after a path-changing move\nfunction rebindCallbacksInSubtree(\n node: React.ReactNode,\n path: string,\n renderer: VDOMRenderer\n): React.ReactNode {\n if (!isValidElement(node)) return node;\n const element = node as React.ReactElement<Record<string, any> | null>;\n const baseProps = (element.props ?? {}) as Record<string, any>;\n const nextProps: Record<string, any> = { ...baseProps };\n\n // Rebind only callback props; CSS refs are path-agnostic and render-props\n // are handled by the server-side renderer via explicit updates\n for (const key of Object.keys(baseProps)) {\n const propPath = path ? `${path}.${key}` : key;\n if (renderer.hasCallbackPath(propPath)) {\n nextProps[key] = renderer.getCallback(path, key);\n }\n if (\n renderer.hasRenderPropPath(propPath) &&\n renderer.hasAnyCallbackUnder(propPath)\n ) {\n nextProps[key] = rebindCallbacksInSubtree(\n baseProps[key],\n propPath,\n renderer\n );\n }\n }\n\n const children = ensureChildrenArray(element).map((child, idx) => {\n const childPath = path ? `${path}.${idx}` : String(idx);\n if (renderer.hasAnyCallbackUnder(childPath)) {\n return rebindCallbacksInSubtree(child, childPath, renderer);\n } else {\n return child;\n }\n });\n\n return cloneElement(element, nextProps, ...children);\n}\n\n// Binary-search lower bound for prefix matching on sorted callback paths\nfunction lowerBound(arr: string[], target: string): number {\n let lo = 0;\n let hi = arr.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (arr[mid]! < target) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n",
|
|
7
|
+
"import type { ComponentType } from \"react\";\n\n// Special prefixes for reserved node types\nexport const FRAGMENT_TAG = \"$$fragment\";\nexport const MOUNT_POINT_PREFIX = \"$$\";\n\n// export type LazyComponent = () => Promise<{ default: ComponentType<any> }>;\nexport type RegistryEntry = ComponentType<any>;\nexport type ComponentRegistry = Record<string, ComponentType<any>>;\n\nexport interface VDOMElement {\n tag: string;\n props?: Record<string, any>;\n children?: VDOMNode[];\n key?: string;\n lazy?: boolean;\n}\n\n// Primitive nodes that can be rendered\nexport type PrimitiveNode = string | number | boolean;\n\n// VDOMNode is either a primitive (string, number, boolean) or an element node.\n// Booleans are valid children in React but do not render anything.\n// Mount points are just UIElementNodes with tags starting with $$ComponentKey\nexport type VDOMNode = PrimitiveNode | VDOMElement;\n\nexport type VDOM = VDOMNode;\n\nexport interface VDOMUpdateBase {\n type: string;\n path: string; // Dot-separated path to the node\n}\n\nexport interface ReplaceUpdate extends VDOMUpdateBase {\n type: \"replace\";\n data: VDOMNode; // The new node\n}\n\nexport interface UpdatePropsUpdate extends VDOMUpdateBase {\n type: \"update_props\";\n data: {\n set?: Record<string, any>;\n remove?: string[];\n };\n}\n\nexport interface ReconciliationUpdate {\n type: \"reconciliation\";\n path: string;\n N: number;\n new: [number[], VDOM[]];\n reuse: [number[], number[]];\n}\n\nexport interface PathDelta {\n add?: string[];\n remove?: string[];\n}\n\nexport interface UpdateCallbacksUpdate extends VDOMUpdateBase {\n type: \"update_callbacks\";\n data: PathDelta;\n}\n\nexport interface UpdateRenderPropsUpdate extends VDOMUpdateBase {\n type: \"update_render_props\";\n data: PathDelta;\n}\n\nexport interface UpdateCssRefsUpdate extends VDOMUpdateBase {\n type: \"update_css_refs\";\n data: PathDelta;\n}\n\nexport type VDOMUpdate =\n | ReplaceUpdate\n | UpdatePropsUpdate\n | ReconciliationUpdate\n | UpdateCallbacksUpdate\n | UpdateRenderPropsUpdate\n | UpdateCssRefsUpdate;\n\nexport type UpdateType = VDOMUpdate[\"type\"];\n\n// Utility functions for working with the UI tree structure\nexport function isElementNode(node: VDOMNode): node is VDOMElement {\n // Matches all non-text nodes\n return typeof node === \"object\" && node !== null;\n}\n\nexport function isMountPointNode(node: VDOMNode): node is VDOMElement {\n return (\n typeof node === \"object\" &&\n node !== null &&\n node.tag.startsWith(MOUNT_POINT_PREFIX) &&\n node.tag !== FRAGMENT_TAG\n );\n}\n\nexport function isTextNode(node: VDOMNode): node is string {\n return typeof node === \"string\";\n}\n\nexport function isFragment(node: VDOMNode): boolean {\n return typeof node === \"object\" && node !== null && node.tag === FRAGMENT_TAG;\n}\n",
|
|
8
8
|
"\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\n\nexport function createExtractor<T extends object>() {\n function _createExtractor<\n const K extends readonly (keyof T)[],\n C extends Partial<Record<K[number] | string, (src: T) => any>>,\n >(keys: K, computed?: C) {\n return (\n src: T\n ): Simplify<\n Pick<T, K[number]> & {\n [P in keyof C]-?: C[P] extends (...args: any) => infer R ? R : never;\n }\n > => {\n const out: any = {};\n for (const key of keys) {\n out[key as string] = (src as any)[key as string];\n }\n if (computed) {\n for (const key in computed) {\n const fn = computed[key]!;\n out[key] = fn(src);\n }\n }\n return out;\n };\n }\n return _createExtractor;\n}",
|
|
9
9
|
"import { createExtractor } from \"./extractor\";\n\n// Base extractors (camelCase) similar to events.ts style\nconst lowerTagName = (e: Element) => e.tagName.toLowerCase();\n\nconst ELEMENT_KEYS = [\n \"id\",\n \"className\",\n \"tagName\",\n \"localName\",\n \"clientHeight\",\n \"clientLeft\",\n \"clientTop\",\n \"clientWidth\",\n \"scrollHeight\",\n \"scrollLeft\",\n \"scrollTop\",\n \"scrollWidth\",\n \"slot\",\n] as const satisfies readonly (keyof Element)[];\n\nconst HTML_OR_SVG_KEYS = [\n \"autofocus\",\n \"tabIndex\",\n \"nonce\",\n] as const satisfies readonly (keyof HTMLOrSVGElement)[];\n\nconst HTML_ELEMENT_BASE_KEYS = [\n \"accessKey\",\n \"accessKeyLabel\",\n \"autocapitalize\",\n \"dir\",\n \"draggable\",\n \"hidden\",\n \"inert\",\n \"lang\",\n \"offsetHeight\",\n \"offsetLeft\",\n \"offsetTop\",\n \"offsetWidth\",\n \"popover\",\n \"spellcheck\",\n \"title\",\n \"translate\",\n \"writingSuggestions\",\n \"contentEditable\",\n \"enterKeyHint\",\n \"isContentEditable\",\n \"inputMode\",\n] as const satisfies readonly (keyof HTMLElement)[];\n\nconst extractElement = createExtractor<Element>()(ELEMENT_KEYS, {\n tagName: lowerTagName,\n});\n\nconst extractHTMLOrSVGElement =\n createExtractor<HTMLOrSVGElement>()(HTML_OR_SVG_KEYS);\n\nconst extractHTMLElementBaseOnly = createExtractor<HTMLElement>()(\n HTML_ELEMENT_BASE_KEYS\n);\n\nfunction extractHTMLElementBase(elt: HTMLElement) {\n return {\n ...extractElement(elt),\n ...extractHTMLOrSVGElement(elt as HTMLOrSVGElement),\n ...extractHTMLElementBaseOnly(elt),\n };\n}\n\n// Helper to compose per-element extractors with the shared base\nfunction withBase<T extends HTMLElement>(\n keys: readonly (keyof T)[],\n computed?: Partial<Record<string, (src: T) => any>>\n) {\n const only = createExtractor<T>()(keys, computed as any);\n return (elt: T) => ({ ...extractHTMLElementBase(elt), ...only(elt) });\n}\n\nconst HTML_ANCHOR_KEYS = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"origin\",\n \"password\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\",\n \"target\",\n \"download\",\n \"rel\",\n \"hreflang\",\n \"type\",\n \"username\",\n \"ping\",\n \"referrerPolicy\",\n \"text\",\n] as const satisfies readonly (keyof HTMLAnchorElement)[];\nconst anchorExtractor = withBase<HTMLAnchorElement>(HTML_ANCHOR_KEYS);\n\nconst HTML_AREA_KEYS = [\n \"alt\",\n \"coords\",\n \"download\",\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"origin\",\n \"password\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"rel\",\n \"search\",\n \"shape\",\n \"target\",\n \"username\",\n \"ping\",\n \"referrerPolicy\",\n] as const satisfies readonly (keyof HTMLAreaElement)[];\nconst areaExtractor = withBase<HTMLAreaElement>(HTML_AREA_KEYS);\n\nconst HTML_MEDIA_KEYS = [\n \"autoplay\",\n \"controls\",\n \"crossOrigin\",\n \"currentSrc\",\n \"currentTime\",\n \"defaultMuted\",\n \"defaultPlaybackRate\",\n \"duration\",\n \"ended\",\n \"loop\",\n \"muted\",\n \"networkState\",\n \"paused\",\n \"playbackRate\",\n \"preload\",\n \"readyState\",\n \"seeking\",\n \"src\",\n \"volume\",\n \"preservesPitch\",\n] as const satisfies readonly (keyof HTMLMediaElement)[];\nconst mediaExtractor = withBase<HTMLMediaElement>(HTML_MEDIA_KEYS);\n\nconst audioExtractor = (elt: HTMLAudioElement) => mediaExtractor(elt);\n\nconst HTML_BUTTON_KEYS = [\n \"disabled\",\n \"name\",\n \"type\",\n \"value\",\n \"formAction\",\n \"formEnctype\",\n \"formMethod\",\n \"formNoValidate\",\n \"formTarget\",\n \"popoverTargetAction\",\n] as const satisfies readonly (keyof HTMLButtonElement)[];\nconst buttonExtractor = withBase<HTMLButtonElement>(HTML_BUTTON_KEYS);\n\nconst HTML_DATA_KEYS = [\n \"value\",\n] as const satisfies readonly (keyof HTMLDataElement)[];\nconst dataExtractor = withBase<HTMLDataElement>(HTML_DATA_KEYS);\n\nconst HTML_EMBED_KEYS = [\n \"height\",\n \"src\",\n \"type\",\n \"width\",\n \"align\",\n \"name\",\n] as const satisfies readonly (keyof HTMLEmbedElement)[];\nconst embedExtractor = withBase<HTMLEmbedElement>(HTML_EMBED_KEYS);\n\nconst HTML_FIELDSET_KEYS = [\n \"disabled\",\n \"name\",\n \"type\",\n \"validationMessage\",\n \"willValidate\",\n] as const satisfies readonly (keyof HTMLFieldSetElement)[];\nconst fieldsetExtractor = withBase<HTMLFieldSetElement>(HTML_FIELDSET_KEYS);\n\nconst HTML_FORM_KEYS = [\n \"acceptCharset\",\n \"action\",\n \"autocomplete\",\n \"encoding\",\n \"enctype\",\n \"length\",\n \"method\",\n \"name\",\n \"noValidate\",\n \"target\",\n \"rel\",\n] as const satisfies readonly (keyof HTMLFormElement)[];\nconst formExtractor = withBase<HTMLFormElement>(HTML_FORM_KEYS);\n\nconst HTML_IFRAME_KEYS = [\n \"allow\",\n \"allowFullscreen\",\n \"height\",\n \"name\",\n \"referrerPolicy\",\n \"src\",\n \"srcdoc\",\n \"width\",\n \"align\",\n \"frameBorder\",\n \"longDesc\",\n \"marginHeight\",\n \"marginWidth\",\n \"scrolling\",\n \"sandbox\",\n] as const satisfies readonly (keyof HTMLIFrameElement)[];\nconst iframeExtractor = withBase<HTMLIFrameElement>(HTML_IFRAME_KEYS);\n\nconst HTML_IMAGE_KEYS = [\n \"alt\",\n \"crossOrigin\",\n \"decoding\",\n \"height\",\n \"isMap\",\n \"loading\",\n \"naturalHeight\",\n \"naturalWidth\",\n \"referrerPolicy\",\n \"sizes\",\n \"src\",\n \"srcset\",\n \"useMap\",\n \"width\",\n \"align\",\n \"border\",\n \"complete\",\n \"hspace\",\n \"longDesc\",\n \"lowsrc\",\n \"name\",\n \"vspace\",\n \"x\",\n \"y\",\n \"fetchPriority\",\n] as const satisfies readonly (keyof HTMLImageElement)[];\nconst imageExtractor = withBase<HTMLImageElement>(HTML_IMAGE_KEYS);\n\nconst HTML_INPUT_KEYS = [\n \"accept\",\n \"alt\",\n \"autocomplete\",\n \"checked\",\n \"defaultChecked\",\n \"defaultValue\",\n \"dirName\",\n \"disabled\",\n \"height\",\n \"indeterminate\",\n \"max\",\n \"maxLength\",\n \"min\",\n \"minLength\",\n \"multiple\",\n \"name\",\n \"pattern\",\n \"placeholder\",\n \"readOnly\",\n \"required\",\n \"selectionDirection\",\n \"selectionEnd\",\n \"selectionStart\",\n \"size\",\n \"src\",\n \"step\",\n \"type\",\n \"value\",\n \"valueAsNumber\",\n \"width\",\n \"align\",\n \"capture\",\n \"formAction\",\n \"formEnctype\",\n \"formMethod\",\n \"formNoValidate\",\n \"formTarget\",\n \"useMap\",\n \"validationMessage\",\n \"willValidate\",\n \"popoverTargetAction\",\n] as const satisfies readonly (keyof HTMLInputElement)[];\nconst inputExtractor = withBase<HTMLInputElement>(HTML_INPUT_KEYS);\n\nconst HTML_LABEL_KEYS = [\n \"htmlFor\",\n] as const satisfies readonly (keyof HTMLLabelElement)[];\nconst labelExtractor = withBase<HTMLLabelElement>(HTML_LABEL_KEYS);\n\nconst HTML_LI_KEYS = [\n \"value\",\n \"type\",\n] as const satisfies readonly (keyof HTMLLIElement)[];\nconst liExtractor = withBase<HTMLLIElement>(HTML_LI_KEYS);\n\nconst HTML_LINK_KEYS = [\n \"as\",\n \"crossOrigin\",\n \"disabled\",\n \"fetchPriority\",\n \"href\",\n \"hreflang\",\n \"imageSizes\",\n \"imageSrcset\",\n \"integrity\",\n \"media\",\n \"referrerPolicy\",\n \"rel\",\n \"type\",\n \"charset\",\n \"rev\",\n \"target\",\n \"sizes\",\n] as const satisfies readonly (keyof HTMLLinkElement)[];\nconst linkExtractor = withBase<HTMLLinkElement>(HTML_LINK_KEYS);\n\nconst HTML_MAP_KEYS = [\n \"name\",\n] as const satisfies readonly (keyof HTMLMapElement)[];\nconst mapExtractor = withBase<HTMLMapElement>(HTML_MAP_KEYS);\n\nconst HTML_METER_KEYS = [\n \"high\",\n \"low\",\n \"max\",\n \"min\",\n \"optimum\",\n \"value\",\n] as const satisfies readonly (keyof HTMLMeterElement)[];\nconst meterExtractor = withBase<HTMLMeterElement>(HTML_METER_KEYS);\n\nconst HTML_MOD_KEYS = [\n \"cite\",\n \"dateTime\",\n] as const satisfies readonly (keyof HTMLModElement)[];\nconst modExtractor = withBase<HTMLModElement>(HTML_MOD_KEYS);\n\nconst HTML_OL_KEYS = [\n \"reversed\",\n \"start\",\n \"type\",\n \"compact\",\n] as const satisfies readonly (keyof HTMLOListElement)[];\nconst olistExtractor = withBase<HTMLOListElement>(HTML_OL_KEYS);\n\nconst HTML_OBJECT_KEYS = [\n \"data\",\n \"height\",\n \"name\",\n \"type\",\n \"useMap\",\n \"width\",\n \"validationMessage\",\n \"willValidate\",\n \"align\",\n \"archive\",\n \"border\",\n \"code\",\n \"codeBase\",\n \"codeType\",\n \"declare\",\n \"hspace\",\n \"standby\",\n \"vspace\",\n] as const satisfies readonly (keyof HTMLObjectElement)[];\nconst objectExtractor = withBase<HTMLObjectElement>(HTML_OBJECT_KEYS);\n\nconst HTML_OPTGROUP_KEYS = [\n \"disabled\",\n \"label\",\n] as const satisfies readonly (keyof HTMLOptGroupElement)[];\nconst optgroupExtractor = withBase<HTMLOptGroupElement>(HTML_OPTGROUP_KEYS);\n\nconst HTML_OPTION_KEYS = [\n \"defaultSelected\",\n \"disabled\",\n \"index\",\n \"label\",\n \"selected\",\n \"text\",\n \"value\",\n] as const satisfies readonly (keyof HTMLOptionElement)[];\nconst optionExtractor = withBase<HTMLOptionElement>(HTML_OPTION_KEYS);\n\nconst HTML_OUTPUT_KEYS = [\n \"defaultValue\",\n \"name\",\n \"type\",\n \"value\",\n \"htmlFor\",\n \"validationMessage\",\n \"willValidate\",\n] as const satisfies readonly (keyof HTMLOutputElement)[];\nconst outputExtractor = withBase<HTMLOutputElement>(HTML_OUTPUT_KEYS);\n\nconst HTML_PROGRESS_KEYS = [\n \"max\",\n \"position\",\n \"value\",\n] as const satisfies readonly (keyof HTMLProgressElement)[];\nconst progressExtractor = withBase<HTMLProgressElement>(HTML_PROGRESS_KEYS);\n\nconst HTML_QUOTE_KEYS = [\n \"cite\",\n] as const satisfies readonly (keyof HTMLQuoteElement)[];\nconst quoteExtractor = withBase<HTMLQuoteElement>(HTML_QUOTE_KEYS);\n\nconst citeExtractor = (elt: HTMLElement) => extractHTMLElementBase(elt);\n\nconst HTML_SCRIPT_KEYS = [\n \"async\",\n \"crossOrigin\",\n \"defer\",\n \"fetchPriority\",\n \"integrity\",\n \"noModule\",\n \"referrerPolicy\",\n \"src\",\n \"text\",\n \"type\",\n \"charset\",\n] as const satisfies readonly (keyof HTMLScriptElement)[];\nconst extractHTMLScriptOnly = createExtractor<HTMLScriptElement>()(\n HTML_SCRIPT_KEYS,\n {\n event: (s) => (s as any).event,\n htmlFor: (s) => (s as any).htmlFor,\n }\n);\nconst scriptExtractor = (elt: HTMLScriptElement) => ({\n ...extractHTMLElementBase(elt),\n ...extractHTMLScriptOnly(elt),\n});\n\nconst HTML_SELECT_KEYS = [\n \"autocomplete\",\n \"disabled\",\n \"length\",\n \"multiple\",\n \"name\",\n \"required\",\n \"selectedIndex\",\n \"size\",\n \"type\",\n \"value\",\n \"validationMessage\",\n \"willValidate\",\n] as const satisfies readonly (keyof HTMLSelectElement)[];\nconst selectExtractor = withBase<HTMLSelectElement>(HTML_SELECT_KEYS);\n\nconst HTML_SLOT_KEYS = [\n \"name\",\n] as const satisfies readonly (keyof HTMLSlotElement)[];\nconst slotExtractor = withBase<HTMLSlotElement>(HTML_SLOT_KEYS);\n\nconst HTML_SOURCE_KEYS = [\n \"height\",\n \"media\",\n \"sizes\",\n \"src\",\n \"srcset\",\n \"type\",\n \"width\",\n] as const satisfies readonly (keyof HTMLSourceElement)[];\nconst sourceExtractor = withBase<HTMLSourceElement>(HTML_SOURCE_KEYS);\n\nconst HTML_TABLE_CAPTION_KEYS = [\n \"align\",\n] as const satisfies readonly (keyof HTMLTableCaptionElement)[];\nconst tableCaptionExtractor = withBase<HTMLTableCaptionElement>(\n HTML_TABLE_CAPTION_KEYS\n);\n\nconst HTML_TABLE_CELL_KEYS = [\n \"abbr\",\n \"cellIndex\",\n \"colSpan\",\n \"headers\",\n \"rowSpan\",\n \"scope\",\n \"align\",\n \"axis\",\n \"bgColor\",\n \"ch\",\n \"chOff\",\n \"height\",\n \"noWrap\",\n \"vAlign\",\n \"width\",\n] as const satisfies readonly (keyof HTMLTableCellElement)[];\nconst tableCellExtractor = withBase<HTMLTableCellElement>(HTML_TABLE_CELL_KEYS);\n\nconst HTML_TABLE_COL_KEYS = [\n \"span\",\n \"align\",\n \"ch\",\n \"chOff\",\n \"vAlign\",\n \"width\",\n] as const satisfies readonly (keyof HTMLTableColElement)[];\nconst tableColExtractor = withBase<HTMLTableColElement>(HTML_TABLE_COL_KEYS);\n\nconst HTML_TABLE_KEYS = [\n \"align\",\n \"bgColor\",\n \"border\",\n \"cellPadding\",\n \"cellSpacing\",\n \"frame\",\n \"rules\",\n \"summary\",\n \"width\",\n] as const satisfies readonly (keyof HTMLTableElement)[];\nconst tableExtractor = withBase<HTMLTableElement>(HTML_TABLE_KEYS);\n\nconst HTML_TR_KEYS = [\n \"rowIndex\",\n \"sectionRowIndex\",\n \"align\",\n \"bgColor\",\n \"ch\",\n \"chOff\",\n \"vAlign\",\n] as const satisfies readonly (keyof HTMLTableRowElement)[];\nconst tableRowExtractor = withBase<HTMLTableRowElement>(HTML_TR_KEYS);\n\nconst HTML_TSECTION_KEYS = [\n \"align\",\n \"ch\",\n \"chOff\",\n \"vAlign\",\n] as const satisfies readonly (keyof HTMLTableSectionElement)[];\nconst tableSectionExtractor =\n withBase<HTMLTableSectionElement>(HTML_TSECTION_KEYS);\n\nconst templateExtractor = (elt: HTMLTemplateElement) =>\n extractHTMLElementBase(elt);\n\nconst HTML_TEXTAREA_KEYS = [\n \"autocomplete\",\n \"cols\",\n \"defaultValue\",\n \"dirName\",\n \"disabled\",\n \"maxLength\",\n \"minLength\",\n \"name\",\n \"placeholder\",\n \"readOnly\",\n \"required\",\n \"rows\",\n \"selectionDirection\",\n \"selectionEnd\",\n \"selectionStart\",\n \"value\",\n \"wrap\",\n \"textLength\",\n \"validationMessage\",\n \"willValidate\",\n] as const satisfies readonly (keyof HTMLTextAreaElement)[];\nconst textareaExtractor = withBase<HTMLTextAreaElement>(HTML_TEXTAREA_KEYS);\n\nconst HTML_TIME_KEYS = [\n \"dateTime\",\n] as const satisfies readonly (keyof HTMLTimeElement)[];\nconst timeExtractor = withBase<HTMLTimeElement>(HTML_TIME_KEYS);\n\nconst HTML_TRACK_KEYS = [\n \"default\",\n \"kind\",\n \"label\",\n \"readyState\",\n \"src\",\n \"srclang\",\n] as const satisfies readonly (keyof HTMLTrackElement)[];\nconst trackExtractor = withBase<HTMLTrackElement>(HTML_TRACK_KEYS);\n\nconst HTML_VIDEO_KEYS = [\n \"height\",\n \"poster\",\n \"videoHeight\",\n \"videoWidth\",\n \"width\",\n \"playsInline\",\n] as const satisfies readonly (keyof HTMLVideoElement)[];\nconst extractHTMLVideoOnly =\n createExtractor<HTMLVideoElement>()(HTML_VIDEO_KEYS);\nconst videoExtractor = (elt: HTMLVideoElement) => ({\n ...mediaExtractor(elt),\n ...extractHTMLVideoOnly(elt),\n});\n\nconst HTML_BR_KEYS = [\n \"clear\",\n] as const satisfies readonly (keyof HTMLBRElement)[];\nconst brExtractor = withBase<HTMLBRElement>(HTML_BR_KEYS);\n\nconst HTML_BASE_KEYS = [\n \"href\",\n \"target\",\n] as const satisfies readonly (keyof HTMLBaseElement)[];\nconst baseExtractor = withBase<HTMLBaseElement>(HTML_BASE_KEYS);\n\nconst HTML_BODY_KEYS = [\n \"aLink\",\n \"background\",\n \"bgColor\",\n \"link\",\n \"text\",\n \"vLink\",\n] as const satisfies readonly (keyof HTMLBodyElement)[];\nconst bodyExtractor = withBase<HTMLBodyElement>(HTML_BODY_KEYS);\n\nconst HTML_DLIST_KEYS = [\n \"compact\",\n] as const satisfies readonly (keyof HTMLDListElement)[];\nconst dlistExtractor = withBase<HTMLDListElement>(HTML_DLIST_KEYS);\n\nconst HTML_DETAILS_KEYS = [\n \"open\",\n] as const satisfies readonly (keyof HTMLDetailsElement)[];\nconst detailsExtractor = withBase<HTMLDetailsElement>(HTML_DETAILS_KEYS);\n\nconst HTML_DIALOG_KEYS = [\n \"open\",\n \"returnValue\",\n] as const satisfies readonly (keyof HTMLDialogElement)[];\nconst dialogExtractor = withBase<HTMLDialogElement>(HTML_DIALOG_KEYS);\n\nconst HTML_DIV_KEYS = [\n \"align\",\n] as const satisfies readonly (keyof HTMLDivElement)[];\nconst divExtractor = withBase<HTMLDivElement>(HTML_DIV_KEYS);\n\nconst headExtractor = (elt: HTMLHeadElement) => extractHTMLElementBase(elt);\n\nconst HTML_HEADING_KEYS = [\n \"align\",\n] as const satisfies readonly (keyof HTMLHeadingElement)[];\nconst headingExtractor = withBase<HTMLHeadingElement>(HTML_HEADING_KEYS);\n\nconst HTML_HR_KEYS = [\n \"align\",\n \"color\",\n \"noShade\",\n \"size\",\n \"width\",\n] as const satisfies readonly (keyof HTMLHRElement)[];\nconst hrExtractor = withBase<HTMLHRElement>(HTML_HR_KEYS);\n\nconst HTML_HTML_KEYS = [\n \"version\",\n] as const satisfies readonly (keyof HTMLHtmlElement)[];\nconst htmlExtractor = withBase<HTMLHtmlElement>(HTML_HTML_KEYS);\n\nconst menuExtractor = (elt: HTMLMenuElement) => extractHTMLElementBase(elt);\n\nconst HTML_META_KEYS = [\n \"content\",\n \"httpEquiv\",\n \"name\",\n \"scheme\",\n] as const satisfies readonly (keyof HTMLMetaElement)[];\nconst metaExtractor = withBase<HTMLMetaElement>(HTML_META_KEYS);\n\nconst HTML_P_KEYS = [\n \"align\",\n] as const satisfies readonly (keyof HTMLParagraphElement)[];\nconst paragraphExtractor = withBase<HTMLParagraphElement>(HTML_P_KEYS);\n\nconst pictureExtractor = (elt: HTMLPictureElement) =>\n extractHTMLElementBase(elt);\n\nconst HTML_PRE_KEYS = [\n \"width\",\n] as const satisfies readonly (keyof HTMLPreElement)[];\nconst preExtractor = withBase<HTMLPreElement>(HTML_PRE_KEYS);\n\nconst spanExtractor = (elt: HTMLSpanElement) => extractHTMLElementBase(elt);\n\nconst HTML_STYLE_KEYS = [\n \"media\",\n \"type\",\n \"disabled\",\n] as const satisfies readonly (keyof HTMLStyleElement)[];\nconst styleExtractor = withBase<HTMLStyleElement>(HTML_STYLE_KEYS);\n\nconst HTML_TITLE_KEYS = [\n \"text\",\n] as const satisfies readonly (keyof HTMLTitleElement)[];\nconst titleExtractor = withBase<HTMLTitleElement>(HTML_TITLE_KEYS);\n\nconst HTML_UL_KEYS = [\n \"compact\",\n \"type\",\n] as const satisfies readonly (keyof HTMLUListElement)[];\nconst ulistExtractor = withBase<HTMLUListElement>(HTML_UL_KEYS);\n\n// Map of tagName -> extractor (concise, like events.ts)\nconst elementExtractors: Record<string, (elt: any) => object> = {\n A: anchorExtractor,\n AREA: areaExtractor,\n AUDIO: audioExtractor,\n BASE: baseExtractor,\n BLOCKQUOTE: quoteExtractor,\n Q: quoteExtractor,\n BODY: bodyExtractor,\n BR: brExtractor,\n BUTTON: buttonExtractor,\n CANVAS: extractHTMLElementBase,\n CAPTION: tableCaptionExtractor,\n CITE: citeExtractor,\n COL: tableColExtractor,\n COLGROUP: tableColExtractor,\n DATA: dataExtractor,\n DETAILS: detailsExtractor,\n DIALOG: dialogExtractor,\n DIV: divExtractor,\n DL: dlistExtractor,\n EMBED: embedExtractor,\n FIELDSET: fieldsetExtractor,\n FORM: formExtractor,\n H1: headingExtractor,\n H2: headingExtractor,\n H3: headingExtractor,\n H4: headingExtractor,\n H5: headingExtractor,\n H6: headingExtractor,\n HEAD: headExtractor,\n HR: hrExtractor,\n HTML: htmlExtractor,\n IFRAME: iframeExtractor,\n IMG: imageExtractor,\n INPUT: inputExtractor,\n LABEL: labelExtractor,\n LI: liExtractor,\n LINK: linkExtractor,\n MAP: mapExtractor,\n MENU: menuExtractor,\n META: metaExtractor,\n METER: meterExtractor,\n INS: modExtractor,\n DEL: modExtractor,\n OBJECT: objectExtractor,\n OL: olistExtractor,\n OPTGROUP: optgroupExtractor,\n OPTION: optionExtractor,\n OUTPUT: outputExtractor,\n P: paragraphExtractor,\n PICTURE: pictureExtractor,\n PRE: preExtractor,\n PROGRESS: progressExtractor,\n SCRIPT: scriptExtractor,\n SELECT: selectExtractor,\n SLOT: slotExtractor,\n SOURCE: sourceExtractor,\n SPAN: spanExtractor,\n STYLE: styleExtractor,\n TABLE: tableExtractor,\n TBODY: tableSectionExtractor,\n THEAD: tableSectionExtractor,\n TFOOT: tableSectionExtractor,\n TD: tableCellExtractor,\n TH: tableCellExtractor,\n TEMPLATE: templateExtractor,\n TEXTAREA: textareaExtractor,\n TIME: timeExtractor,\n TITLE: titleExtractor,\n TR: tableRowExtractor,\n TRACK: trackExtractor,\n UL: ulistExtractor,\n VIDEO: videoExtractor,\n};\n\nexport function extractHTMLElement(elt: HTMLElement): object {\n const tagName = elt.tagName.toUpperCase();\n\n const extractor = elementExtractors[tagName];\n if (extractor) {\n return extractor(elt);\n }\n throw new Error(\n `Unexpected HTML element tag: ${elt.tagName} (update .web/custom/serialize.ts)`\n );\n}\n",
|
|
10
10
|
"/* === IMPORTANT === */\n\nimport { extractHTMLElement } from \"./elements\";\nimport { createExtractor } from \"./extractor\";\n\n// Reusable computed mappers (helps bundlers/minifiers share references)\nconst mapTarget = (e: { target: EventTarget | null }) =>\n extractHTMLElement(e.target as HTMLElement);\nconst mapRelated = (e: { relatedTarget: EventTarget | null }) =>\n e.relatedTarget ? extractHTMLElement(e.relatedTarget as HTMLElement) : null;\n\nfunction makeExtractor<K extends readonly any[]>(\n keys: K,\n computed?: Record<string, (evt: any) => any>\n) {\n return createExtractor<any>()(\n keys as any,\n {\n target: mapTarget,\n ...(computed || {}),\n } as any\n );\n}\n\nconst SYNTHETIC_KEYS = [\n \"target\",\n \"bubbles\",\n \"cancelable\",\n \"defaultPrevented\",\n \"eventPhase\",\n \"isTrusted\",\n \"timeStamp\",\n \"type\",\n] as const satisfies readonly (keyof React.SyntheticEvent)[];\n\nconst UI_KEYS = [\n ...SYNTHETIC_KEYS,\n \"detail\",\n] as const satisfies readonly (keyof React.UIEvent)[];\n\nconst MOUSE_KEYS = [\n ...UI_KEYS,\n \"altKey\",\n \"button\",\n \"buttons\",\n \"clientX\",\n \"clientY\",\n \"ctrlKey\",\n \"metaKey\",\n \"movementX\",\n \"movementY\",\n \"pageX\",\n \"pageY\",\n \"screenX\",\n \"screenY\",\n \"shiftKey\",\n] as const satisfies readonly (keyof React.MouseEvent)[];\n\nconst POINTER_KEYS = [\n ...MOUSE_KEYS,\n \"pointerId\",\n \"pressure\",\n \"tangentialPressure\",\n \"tiltX\",\n \"tiltY\",\n \"twist\",\n \"width\",\n \"height\",\n \"pointerType\",\n \"isPrimary\",\n] as const satisfies readonly (keyof React.PointerEvent)[];\n\nconst syntheticExtractor = makeExtractor(SYNTHETIC_KEYS);\n\nconst uiExtractor = makeExtractor(UI_KEYS);\n\nconst mouseExtractor = makeExtractor(MOUSE_KEYS, { relatedTarget: mapRelated });\n\nconst clipboardExtractor = makeExtractor(SYNTHETIC_KEYS, {\n clipboardData: (e) => extractDataTransfer(e.clipboardData),\n});\n\nconst compositionExtractor = makeExtractor([\n ...SYNTHETIC_KEYS,\n \"data\",\n] as const);\n\nconst dragExtractor = makeExtractor(MOUSE_KEYS, {\n relatedTarget: mapRelated,\n dataTransfer: (e) => extractDataTransfer(e.dataTransfer),\n});\n\nconst pointerExtractor = makeExtractor(POINTER_KEYS, {\n relatedTarget: mapRelated,\n});\n\nconst focusExtractor = makeExtractor(SYNTHETIC_KEYS, {\n relatedTarget: mapRelated,\n});\n\nconst formExtractor = makeExtractor(SYNTHETIC_KEYS);\n\nconst invalidExtractor = makeExtractor(SYNTHETIC_KEYS);\n\nconst changeExtractor = makeExtractor(SYNTHETIC_KEYS);\n\nconst keyboardExtractor = makeExtractor([\n ...UI_KEYS,\n \"altKey\",\n \"ctrlKey\",\n \"code\",\n \"key\",\n \"locale\",\n \"location\",\n \"metaKey\",\n \"repeat\",\n \"shiftKey\",\n] as const);\n\nconst touchExtractor = makeExtractor(\n [\n ...UI_KEYS,\n \"altKey\",\n \"ctrlKey\",\n \"metaKey\",\n \"shiftKey\",\n \"changedTouches\",\n \"targetTouches\",\n \"touches\",\n ] as const,\n {\n changedTouches: (e) => mapTouchList(e.changedTouches),\n targetTouches: (e) => mapTouchList(e.targetTouches),\n touches: (e) => mapTouchList(e.touches),\n }\n);\n\nconst wheelExtractor = makeExtractor(\n [...MOUSE_KEYS, \"deltaMode\", \"deltaX\", \"deltaY\", \"deltaZ\"] as const,\n {\n relatedTarget: mapRelated,\n }\n);\n\nconst animationExtractor = makeExtractor([\n ...SYNTHETIC_KEYS,\n \"animationName\",\n \"elapsedTime\",\n \"pseudoElement\",\n] as const);\n\nconst toggleExtractor = makeExtractor([\n ...SYNTHETIC_KEYS,\n \"oldState\",\n \"newState\",\n] as const);\n\nconst transitionExtractor = makeExtractor([\n ...SYNTHETIC_KEYS,\n \"elapsedTime\",\n \"propertyName\",\n \"pseudoElement\",\n] as const);\n\nfunction mapTouchList(list: any): any[] {\n return Array.from(list as ArrayLike<any>).map((touch: any) => ({\n target: extractHTMLElement(touch.target as HTMLElement),\n identifier: touch.identifier,\n screenX: touch.screenX,\n screenY: touch.screenY,\n clientX: touch.clientX,\n clientY: touch.clientY,\n pageX: touch.pageX,\n pageY: touch.pageY,\n }));\n}\n\n// Helper function to extract DataTransfer properties\nfunction extractDataTransfer(dt: DataTransfer | null): object | null {\n if (!dt) {\n return null;\n }\n const items = [];\n if (dt.items) {\n for (let i = 0; i < dt.items.length; i++) {\n const item = dt.items[i]!;\n items.push({\n kind: item.kind,\n type: item.type,\n });\n }\n }\n return {\n drop_effect: dt.dropEffect,\n effect_allowed: dt.effectAllowed,\n items: items,\n types: Array.from(dt.types || []),\n };\n}\n\nconst eventExtractorMap: { [key: string]: (evt: any) => object } = {};\n\nfunction add(map: Record<string, any>, names: readonly string[], fn: any) {\n for (const n of names) map[n] = fn;\n}\n\nadd(\n eventExtractorMap,\n [\n \"pointerdown\",\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n \"gotpointercapture\",\n \"lostpointercapture\",\n \"pointerenter\",\n \"pointerleave\",\n \"pointerover\",\n \"pointerout\",\n ],\n pointerExtractor\n);\n\nadd(\n eventExtractorMap,\n [\n \"click\",\n \"contextmenu\",\n \"dblclick\",\n \"mousedown\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseout\",\n \"mouseover\",\n \"mouseup\",\n ],\n mouseExtractor\n);\n\nadd(\n eventExtractorMap,\n [\n \"drag\",\n \"dragend\",\n \"dragenter\",\n \"dragexit\",\n \"dragleave\",\n \"dragover\",\n \"dragstart\",\n \"drop\",\n ],\n dragExtractor\n);\n\nadd(eventExtractorMap, [\"keydown\", \"keypress\", \"keyup\"], keyboardExtractor);\nadd(eventExtractorMap, [\"focus\", \"blur\"], focusExtractor);\nadd(eventExtractorMap, [\"change\", \"input\"], changeExtractor);\nadd(eventExtractorMap, [\"invalid\"], invalidExtractor);\nadd(eventExtractorMap, [\"reset\", \"submit\"], formExtractor);\nadd(eventExtractorMap, [\"copy\", \"cut\", \"paste\"], clipboardExtractor);\nadd(\n eventExtractorMap,\n [\"compositionend\", \"compositionstart\", \"compositionupdate\"],\n compositionExtractor\n);\nadd(\n eventExtractorMap,\n [\"touchcancel\", \"touchend\", \"touchmove\", \"touchstart\"],\n touchExtractor\n);\nadd(eventExtractorMap, [\"scroll\"], uiExtractor);\nadd(eventExtractorMap, [\"wheel\"], wheelExtractor);\nadd(\n eventExtractorMap,\n [\"animationstart\", \"animationend\", \"animationiteration\"],\n animationExtractor\n);\nadd(eventExtractorMap, [\"transitionend\"], transitionExtractor);\nadd(eventExtractorMap, [\"toggle\"], toggleExtractor);\n\nexport function extractEvent(value: any): any {\n // Duck-typing for React's SyntheticEvent.\n // We check for properties that are unique to synthetic events.\n if (\n value &&\n typeof value === \"object\" &&\n \"nativeEvent\" in value &&\n typeof value.isDefaultPrevented === \"function\"\n ) {\n const evt = value as React.SyntheticEvent;\n // The `type` property is crucial for the lookup.\n if (typeof evt.type !== \"string\") {\n return value;\n }\n\n const extractor = eventExtractorMap[evt.type.toLowerCase()];\n if (extractor) {\n return extractor(evt);\n }\n\n // Fallback for unknown event types: minimal synthetic extractor\n return syntheticExtractor(evt);\n }\n\n // If it's not a duck-typed event, return it as is.\n return value;\n}\n",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"import type { LoaderFunctionArgs } from \"react-router\";\n\nexport interface RouteInfo {\n pathname: string;\n hash: string;\n query: string;\n queryParams: Record<string, string>;\n pathParams: Record<string, string | undefined>;\n catchall: string[];\n}\n\nexport function extractServerRouteInfo({\n params,\n request,\n}: LoaderFunctionArgs) {\n const { \"*\": catchall = \"\", ...pathParams } = params;\n const parsedUrl = new URL(request.url);\n\n return {\n hash: parsedUrl.hash,\n pathname: parsedUrl.pathname,\n query: parsedUrl.search,\n queryParams: Object.fromEntries(parsedUrl.searchParams.entries()),\n pathParams,\n catchall: catchall.length > 1 ? catchall.split(\"/\") : [],\n } satisfies RouteInfo;\n}",
|
|
18
18
|
"// Serialization helpers that support:\n// - Circular references via object identity refs\n// - Date instances → { __t: \"datetime\", timestamp }\n// - FormData → { __t: \"formdata\", fields }\n// - File → { __t: \"file\", name, type, size, lastModified, content: number[] }\n// Along with a decoder for the symmetric shapes (we do not reconstruct File/FormData objects).\n\ntype EncodedRef = { __t: \"ref\"; id: number };\ntype EncodedArray = { __t: \"array\"; __id: number; items: unknown[] };\ntype EncodedObject = {\n __t: \"object\";\n __id: number;\n props: Record<string, unknown>;\n};\ntype EncodedDate = { __t: \"datetime\"; timestamp: number };\ntype EncodedFile = {\n __t: \"file\";\n name: string;\n type: string;\n size: number;\n lastModified: number;\n content: number[]; // raw bytes as a JSON-safe number array\n};\ntype EncodedFormData = {\n __t: \"formdata\";\n fields: Record<string, unknown | unknown[]>;\n};\n\ntype IdentityMap = WeakMap<object, number>;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\") return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n\nfunction isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\nfunction isSkippable(value: unknown): boolean {\n return (\n typeof value === \"function\" ||\n typeof value === \"symbol\" ||\n typeof value === \"undefined\"\n );\n}\n\nasync function fileToByteArray(file: File): Promise<number[]> {\n const ab = await file.arrayBuffer();\n return Array.from(new Uint8Array(ab));\n}\n\ninterface EncodeContext {\n seen: IdentityMap;\n nextId: number;\n}\n\nexport async function encodeForWire(input: unknown): Promise<unknown> {\n const ctx: EncodeContext = { seen: new WeakMap(), nextId: 1 };\n return await encodeRecursive(input, ctx);\n}\n\nfunction remember(ctx: EncodeContext, obj: object): number | null {\n const existing = ctx.seen.get(obj);\n if (existing !== undefined) return null;\n const id = ctx.nextId++;\n ctx.seen.set(obj, id);\n return id;\n}\n\nasync function encodeRecursive(\n value: unknown,\n ctx: EncodeContext\n): Promise<unknown> {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n // Special cases first\n if (value instanceof Date) {\n const date = value as Date;\n const encoded: EncodedDate = { __t: \"datetime\", timestamp: date.getTime() };\n return encoded;\n }\n\n if (value instanceof FormData) {\n const id = remember(ctx, value);\n if (id === null) {\n return { __t: \"ref\", id: ctx.seen.get(value as object)! } as EncodedRef;\n }\n const fields: Record<string, unknown | unknown[]> = {};\n for (const [key, v] of value.entries()) {\n const encodedVal = await encodeRecursive(v as unknown, ctx);\n if (encodedVal === undefined) continue;\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const existing = fields[key];\n if (Array.isArray(existing)) {\n existing.push(encodedVal);\n } else {\n fields[key] = [existing, encodedVal];\n }\n } else {\n fields[key] = encodedVal;\n }\n }\n const encoded: EncodedFormData & { __id: number } = {\n __t: \"formdata\",\n fields,\n __id: id,\n } as any;\n return encoded;\n }\n\n if (value instanceof File) {\n const file = value;\n const bytes = await fileToByteArray(value);\n const encoded: EncodedFile = {\n __t: \"file\",\n name: file.name,\n type: file.type,\n size: file.size,\n lastModified: file.lastModified,\n content: bytes,\n };\n return encoded;\n }\n\n // Identity / circular reference handling\n const object = value as object;\n const existingId = ctx.seen.get(object);\n if (existingId !== undefined) {\n const ref: EncodedRef = { __t: \"ref\", id: existingId };\n return ref;\n }\n const thisId = ctx.nextId++;\n ctx.seen.set(object, thisId);\n\n if (Array.isArray(value)) {\n const itemsRaw = await Promise.all(\n (value as unknown[]).map((item) => encodeRecursive(item, ctx))\n );\n const items = itemsRaw.filter((it) => it !== undefined) as unknown[];\n const encoded: EncodedArray = { __t: \"array\", __id: thisId, items };\n return encoded;\n }\n\n // Plain object or other object types\n const props: Record<string, unknown> = {};\n if (isPlainObject(value)) {\n for (const key of Object.keys(value)) {\n const v = (value as Record<string, unknown>)[key];\n if (isSkippable(v)) continue;\n const encodedV = await encodeRecursive(v, ctx);\n if (encodedV !== undefined) props[key] = encodedV;\n }\n } else {\n // Non-plain objects: best effort – enumerate enumerable properties\n for (const key in value as Record<string, unknown>) {\n const v = (value as Record<string, unknown>)[key];\n if (isSkippable(v)) continue;\n const encodedV = await encodeRecursive(v, ctx);\n if (encodedV !== undefined) props[key] = encodedV;\n }\n }\n const encoded: EncodedObject = { __t: \"object\", __id: thisId, props };\n return encoded;\n}\n\nexport function decodeFromWire(input: unknown): unknown {\n return decodeRecursive(input);\n}\n\nfunction decodeRecursive(value: unknown): unknown {\n if (value === null || typeof value !== \"object\") return value;\n\n const obj = value as Record<string, unknown>;\n const tag = obj[\"__t\"];\n\n if (tag === \"datetime\") {\n const ts = obj[\"timestamp\"] as number;\n return new Date(ts);\n }\n\n if (tag === \"file\") {\n // Do not reconstruct File; keep as plain object. Optionally, turn content into Uint8Array for convenience.\n const content = obj[\"content\"];\n if (Array.isArray(content)) {\n // Return a shallow clone with Uint8Array for content\n return {\n ...obj,\n content: new Uint8Array(content as number[]),\n } as any;\n }\n return obj;\n }\n\n if (tag === \"formdata\") {\n // Keep as-is (plain object), but decode nested values\n const fields = obj[\"fields\"] as Record<string, unknown | unknown[]>;\n const decodedFields: Record<string, unknown | unknown[]> = {};\n for (const key of Object.keys(fields)) {\n const v = fields[key];\n if (Array.isArray(v)) {\n decodedFields[key] = v.map((x) => decodeRecursive(x));\n } else {\n decodedFields[key] = decodeRecursive(v);\n }\n }\n return { __t: \"formdata\", fields: decodedFields } as EncodedFormData;\n }\n\n if (tag === \"array\") {\n const items = (obj[\"items\"] as unknown[]).map((x) => decodeRecursive(x));\n return items;\n }\n\n if (tag === \"object\") {\n const props = obj[\"props\"] as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(props)) {\n out[key] = decodeRecursive(props[key]);\n }\n return out;\n }\n\n if (tag === \"ref\") {\n // Without a reconstruction context on the client, leave as-is.\n return obj;\n }\n\n // Unknown object – descend shallowly\n const copy: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n copy[key] = decodeRecursive(obj[key]);\n }\n return copy;\n}\n\n// Legacy cleaner kept for compatibility where a quick best-effort JSON-safe shape is needed\nexport function cleanForSerialization(obj: unknown): unknown {\n return cleanRecursive(obj, new WeakSet());\n}\n\nfunction cleanRecursive(obj: unknown, seen: WeakSet<object>): unknown {\n if (obj === null || typeof obj !== \"object\") return obj;\n if (seen.has(obj as object)) return undefined;\n seen.add(obj as object);\n if (Array.isArray(obj)) {\n return (obj as unknown[])\n .map((item) => cleanRecursive(item, seen))\n .filter((x) => x !== undefined);\n }\n const out: Record<string, unknown> = {};\n for (const key in obj as Record<string, unknown>) {\n const v = (obj as Record<string, unknown>)[key];\n if (isSkippable(v)) continue;\n const cleaned = cleanRecursive(v, seen);\n if (cleaned !== undefined) out[key] = cleaned;\n }\n return out;\n}\n"
|
|
19
19
|
],
|
|
20
|
-
"mappings": "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,KAAM,EAAK,CAAG,CAAE,GAGrE,IAAM,GAAmB,CACvB,OACA,OACA,WACA,OACA,SACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,MACA,WACA,OACA,WACA,OACA,iBACA,MACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAiB,CACrB,MACA,SACA,WACA,OACA,OACA,WACA,OACA,SACA,WACA,WACA,OACA,WACA,MACA,SACA,QACA,SACA,WACA,OACA,gBACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAkB,CACtB,WACA,WACA,cACA,aACA,cACA,eACA,sBACA,WACA,QACA,OACA,QACA,eACA,SACA,eACA,UACA,aACA,UACA,MACA,SACA,gBACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAiB,CAAC,IAA0B,GAAe,CAAG,EAE9D,GAAmB,CACvB,WACA,OACA,OACA,QACA,aACA,cACA,aACA,iBACA,aACA,qBACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAiB,CACrB,OACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAkB,CACtB,SACA,MACA,OACA,QACA,QACA,MACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAqB,CACzB,WACA,OACA,OACA,oBACA,cACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAiB,CACrB,gBACA,SACA,eACA,WACA,UACA,SACA,SACA,OACA,aACA,SACA,KACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAmB,CACvB,QACA,kBACA,SACA,OACA,iBACA,MACA,SACA,QACA,QACA,cACA,WACA,eACA,cACA,YACA,SACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAkB,CACtB,MACA,cACA,WACA,SACA,QACA,UACA,gBACA,eACA,iBACA,QACA,MACA,SACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,SACA,IACA,IACA,eACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAkB,CACtB,SACA,MACA,eACA,UACA,iBACA,eACA,UACA,WACA,SACA,gBACA,MACA,YACA,MACA,YACA,WACA,OACA,UACA,cACA,WACA,WACA,qBACA,eACA,iBACA,OACA,MACA,OACA,OACA,QACA,gBACA,QACA,QACA,UACA,aACA,cACA,aACA,iBACA,aACA,SACA,oBACA,eACA,qBACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAkB,CACtB,SACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAe,CACnB,QACA,MACF,EACM,GAAc,EAAwB,EAAY,EAElD,GAAiB,CACrB,KACA,cACA,WACA,gBACA,OACA,WACA,aACA,cACA,YACA,QACA,iBACA,MACA,OACA,UACA,MACA,SACA,OACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAgB,CACpB,MACF,EACM,GAAe,EAAyB,EAAa,EAErD,GAAkB,CACtB,OACA,MACA,MACA,MACA,UACA,OACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAgB,CACpB,OACA,UACF,EACM,GAAe,EAAyB,EAAa,EAErD,GAAe,CACnB,WACA,QACA,OACA,SACF,EACM,GAAiB,EAA2B,EAAY,EAExD,GAAmB,CACvB,OACA,SACA,OACA,OACA,SACA,QACA,oBACA,eACA,QACA,UACA,SACA,OACA,WACA,WACA,UACA,SACA,UACA,QACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAqB,CACzB,WACA,OACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAmB,CACvB,kBACA,WACA,QACA,QACA,WACA,OACA,OACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAmB,CACvB,eACA,OACA,OACA,QACA,UACA,oBACA,cACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAqB,CACzB,MACA,WACA,OACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAkB,CACtB,MACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAgB,CAAC,IAAqB,EAAuB,CAAG,EAEhE,GAAmB,CACvB,QACA,cACA,QACA,gBACA,YACA,WACA,iBACA,MACA,OACA,OACA,SACF,EACM,GAAwB,EAAmC,EAC/D,GACA,CACE,MAAO,CAAC,IAAO,EAAU,MACzB,QAAS,CAAC,IAAO,EAAU,OAC7B,CACF,EACM,GAAkB,CAAC,KAA4B,IAChD,EAAuB,CAAG,KAC1B,GAAsB,CAAG,CAC9B,GAEM,GAAmB,CACvB,eACA,WACA,SACA,WACA,OACA,WACA,gBACA,OACA,OACA,QACA,oBACA,cACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAiB,CACrB,MACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAmB,CACvB,SACA,QACA,QACA,MACA,SACA,OACA,OACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAA0B,CAC9B,OACF,EACM,GAAwB,EAC5B,EACF,EAEM,GAAuB,CAC3B,OACA,YACA,UACA,UACA,UACA,QACA,QACA,OACA,UACA,KACA,QACA,SACA,SACA,SACA,OACF,EACM,GAAqB,EAA+B,EAAoB,EAExE,GAAsB,CAC1B,OACA,QACA,KACA,QACA,SACA,OACF,EACM,GAAoB,EAA8B,EAAmB,EAErE,GAAkB,CACtB,QACA,UACA,SACA,cACA,cACA,QACA,QACA,UACA,OACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAe,CACnB,WACA,kBACA,QACA,UACA,KACA,QACA,QACF,EACM,GAAoB,EAA8B,EAAY,EAE9D,GAAqB,CACzB,QACA,KACA,QACA,QACF,EACM,EACJ,EAAkC,EAAkB,EAEhD,GAAoB,CAAC,IACzB,EAAuB,CAAG,EAEtB,GAAqB,CACzB,eACA,OACA,eACA,UACA,WACA,YACA,YACA,OACA,cACA,WACA,WACA,OACA,qBACA,eACA,iBACA,QACA,OACA,aACA,oBACA,cACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAiB,CACrB,UACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAkB,CACtB,UACA,OACA,QACA,aACA,MACA,SACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAkB,CACtB,SACA,SACA,cACA,aACA,QACA,aACF,EACM,GACJ,EAAkC,EAAE,EAAe,EAC/C,GAAiB,CAAC,KAA2B,IAC9C,GAAe,C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",
|
|
21
|
-
"debugId": "
|
|
20
|
+
"mappings": "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AC/C,GAA2B,CAAG,CACnC,EAIF,SAAS,CAA+B,CACtC,EACA,EACA,CACA,IAAM,EAAO,EAAmB,EAAE,EAAM,CAAe,EACvD,MAAO,CAAC,KAAY,IAAK,EAAuB,CAAG,KAAM,EAAK,CAAG,CAAE,GAGrE,IAAM,GAAmB,CACvB,OACA,OACA,WACA,OACA,SACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,MACA,WACA,OACA,WACA,OACA,iBACA,MACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAiB,CACrB,MACA,SACA,WACA,OACA,OACA,WACA,OACA,SACA,WACA,WACA,OACA,WACA,MACA,SACA,QACA,SACA,WACA,OACA,gBACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAkB,CACtB,WACA,WACA,cACA,aACA,cACA,eACA,sBACA,WACA,QACA,OACA,QACA,eACA,SACA,eACA,UACA,aACA,UACA,MACA,SACA,gBACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAiB,CAAC,IAA0B,GAAe,CAAG,EAE9D,GAAmB,CACvB,WACA,OACA,OACA,QACA,aACA,cACA,aACA,iBACA,aACA,qBACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAiB,CACrB,OACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAkB,CACtB,SACA,MACA,OACA,QACA,QACA,MACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAqB,CACzB,WACA,OACA,OACA,oBACA,cACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAiB,CACrB,gBACA,SACA,eACA,WACA,UACA,SACA,SACA,OACA,aACA,SACA,KACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAmB,CACvB,QACA,kBACA,SACA,OACA,iBACA,MACA,SACA,QACA,QACA,cACA,WACA,eACA,cACA,YACA,SACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAkB,CACtB,MACA,cACA,WACA,SACA,QACA,UACA,gBACA,eACA,iBACA,QACA,MACA,SACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,SACA,IACA,IACA,eACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAkB,CACtB,SACA,MACA,eACA,UACA,iBACA,eACA,UACA,WACA,SACA,gBACA,MACA,YACA,MACA,YACA,WACA,OACA,UACA,cACA,WACA,WACA,qBACA,eACA,iBACA,OACA,MACA,OACA,OACA,QACA,gBACA,QACA,QACA,UACA,aACA,cACA,aACA,iBACA,aACA,SACA,oBACA,eACA,qBACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAkB,CACtB,SACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAe,CACnB,QACA,MACF,EACM,GAAc,EAAwB,EAAY,EAElD,GAAiB,CACrB,KACA,cACA,WACA,gBACA,OACA,WACA,aACA,cACA,YACA,QACA,iBACA,MACA,OACA,UACA,MACA,SACA,OACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAgB,CACpB,MACF,EACM,GAAe,EAAyB,EAAa,EAErD,GAAkB,CACtB,OACA,MACA,MACA,MACA,UACA,OACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAgB,CACpB,OACA,UACF,EACM,GAAe,EAAyB,EAAa,EAErD,GAAe,CACnB,WACA,QACA,OACA,SACF,EACM,GAAiB,EAA2B,EAAY,EAExD,GAAmB,CACvB,OACA,SACA,OACA,OACA,SACA,QACA,oBACA,eACA,QACA,UACA,SACA,OACA,WACA,WACA,UACA,SACA,UACA,QACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAqB,CACzB,WACA,OACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAmB,CACvB,kBACA,WACA,QACA,QACA,WACA,OACA,OACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAmB,CACvB,eACA,OACA,OACA,QACA,UACA,oBACA,cACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAqB,CACzB,MACA,WACA,OACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAkB,CACtB,MACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAgB,CAAC,IAAqB,EAAuB,CAAG,EAEhE,GAAmB,CACvB,QACA,cACA,QACA,gBACA,YACA,WACA,iBACA,MACA,OACA,OACA,SACF,EACM,GAAwB,EAAmC,EAC/D,GACA,CACE,MAAO,CAAC,IAAO,EAAU,MACzB,QAAS,CAAC,IAAO,EAAU,OAC7B,CACF,EACM,GAAkB,CAAC,KAA4B,IAChD,EAAuB,CAAG,KAC1B,GAAsB,CAAG,CAC9B,GAEM,GAAmB,CACvB,eACA,WACA,SACA,WACA,OACA,WACA,gBACA,OACA,OACA,QACA,oBACA,cACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAAiB,CACrB,MACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAmB,CACvB,SACA,QACA,QACA,MACA,SACA,OACA,OACF,EACM,GAAkB,EAA4B,EAAgB,EAE9D,GAA0B,CAC9B,OACF,EACM,GAAwB,EAC5B,EACF,EAEM,GAAuB,CAC3B,OACA,YACA,UACA,UACA,UACA,QACA,QACA,OACA,UACA,KACA,QACA,SACA,SACA,SACA,OACF,EACM,GAAqB,EAA+B,EAAoB,EAExE,GAAsB,CAC1B,OACA,QACA,KACA,QACA,SACA,OACF,EACM,GAAoB,EAA8B,EAAmB,EAErE,GAAkB,CACtB,QACA,UACA,SACA,cACA,cACA,QACA,QACA,UACA,OACF,EACM,GAAiB,EAA2B,EAAe,EAE3D,GAAe,CACnB,WACA,kBACA,QACA,UACA,KACA,QACA,QACF,EACM,GAAoB,EAA8B,EAAY,EAE9D,GAAqB,CACzB,QACA,KACA,QACA,QACF,EACM,EACJ,EAAkC,EAAkB,EAEhD,GAAoB,CAAC,IACzB,EAAuB,CAAG,EAEtB,GAAqB,CACzB,eACA,OACA,eACA,UACA,WACA,YACA,YACA,OACA,cACA,WACA,WACA,OACA,qBACA,eACA,iBACA,QACA,OACA,aACA,oBACA,cACF,EACM,GAAoB,EAA8B,EAAkB,EAEpE,GAAiB,CACrB,UACF,EACM,GAAgB,EAA0B,EAAc,EAExD,GAAkB,CACtB,UACA,OACA,QACA,aACA,MACA,SACF,EACM,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",
|
|
21
|
+
"debugId": "E513A2E7EE8B3C9164756E2164756E21",
|
|
22
22
|
"names": []
|
|
23
23
|
}
|