pulse-ui-client 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +3 -3
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{useEffect as h,useState as i,useMemo as n,createContext as QW,useContext as JW}from"react";import UW,{cloneElement as H,createElement as t,isValidElement as RW,lazy as VW,Suspense as AW}from"react";var l="$$fragment",o="$$";function r(W){return typeof W==="object"&&W!==null}function a(W){return typeof W==="object"&&W!==null&&W.tag.startsWith("$$")&&W.tag!=="$$fragment"}import{jsxDEV as m,Fragment as CW}from"react/jsx-dev-runtime";class M{client;path;components;callbackCache;constructor(W,q,Z){this.client=W;this.path=q;this.components=Z;this.callbackCache=new Map}getCallback(W){let q=this.callbackCache.get(W);if(!q)q=(...Z)=>this.client.invokeCallback(this.path,W,Z),this.callbackCache.set(W,q);return q}renderNode(W){if(W==null||typeof W==="boolean"||typeof W==="number"||typeof W==="string")return W;if(r(W)){let{tag:q,props:Z={},children:Q=[]}=W,$={};for(let[P,z]of Object.entries(Z))if(typeof z==="string"&&z.startsWith("$$fn:")){let J=z.substring(5);$[P]=this.getCallback(J)}else $[P]=z;if(W.key)$.key=W.key;let X=[];for(let P of Q)X.push(this.renderNode(P));if(a(W)){let P=W.tag.slice(o.length),z=this.components[P];return t(z,$,...X)}return t(q===l?UW.Fragment:q,$,...X)}return console.error("Unknown VDOM node type:",W),null}}function L(W){let q=W.props?.children;if(q==null)return[];return Array.isArray(q)?q.slice():[q]}function DW(W,q){let Z={};for(let[Q,$]of Object.entries(q||{}))if(typeof $==="string"&&$.startsWith("$$fn:")){let X=$.substring(5);Z[Q]=W.getCallback(X)}else Z[Q]=$;return Z}function NW(W,q){return H(W,void 0,...q)}function x(W,q,Z){let Q=W;for(let $ of q){let X=$.path.split(".").filter((z)=>z.length>0).map(Number),P=(z,J)=>{if(J<X.length){K(z,X,J),z=z;let G=X[J],U=L(z),O=U[G];return U[G]=P(O,J+1),NW(z,U)}switch($.type){case"replace":return Z.renderNode($.data);case"update_props":{K(z,X,J),z=z;let G=DW(Z,$.data);return H(z,G)}case"insert":{K(z,X,J),z=z;let G=L(z);return G.splice($.idx,0,Z.renderNode($.data)),H(z,null,...G)}case"remove":{K(z,X,J),z=z;let G=L(z);return G.splice($.idx,1),H(z,null,...G)}case"move":{K(z,X,J),z=z;let G=L(z),U=G.splice($.data.from_index,1)[0];return G.splice($.data.to_index,0,U),H(z,null,...G)}default:throw new Error(`[Pulse renderer] Unknown update type: ${$.type}`)}};Q=P(Q,0)}return Q}function OW(W,q){let Z=VW(W);return({children:Q,...$})=>{return m(AW,{fallback:q??m(CW,{},void 0,!1,void 0,this),children:m(Z,{...$,children:Q},void 0,!1,void 0,this)},void 0,!1,void 0,this)}}function K(W,q,Z){if(!RW(W))throw console.error("Invalid node:",W),new Error("Invalid node at path "+q.slice(0,Z).join("."));return!0}function I(){function W(q,Z){return(Q)=>{let $={};for(let X of q)$[X]=Q[X];if(Z)for(let X in Z){let P=Z[X];$[X]=P(Q)}return $}}return W}var fW=(W)=>W.tagName.toLowerCase(),IW=["id","className","tagName","localName","clientHeight","clientLeft","clientTop","clientWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth","slot"],yW=["autofocus","tabIndex","nonce"],wW=["accessKey","accessKeyLabel","autocapitalize","dir","draggable","hidden","inert","lang","offsetHeight","offsetLeft","offsetTop","offsetWidth","popover","spellcheck","title","translate","writingSuggestions","contentEditable","enterKeyHint","isContentEditable","inputMode"],kW=I()(IW,{tagName:fW}),BW=I()(yW),KW=I()(wW);function y(W){return{...kW(W),...BW(W),...KW(W)}}function F(W,q){let Z=I()(W,q);return(Q)=>({...y(Q),...Z(Q)})}var HW=["hash","host","hostname","href","origin","password","pathname","port","protocol","search","target","download","rel","hreflang","type","username","ping","referrerPolicy","text"],gW=F(HW),jW=["alt","coords","download","hash","host","hostname","href","origin","password","pathname","port","protocol","rel","search","shape","target","username","ping","referrerPolicy"],YW=F(jW),LW=["autoplay","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","loop","muted","networkState","paused","playbackRate","preload","readyState","seeking","src","volume","preservesPitch"],$W=F(LW),MW=(W)=>$W(W),bW=["disabled","name","type","value","formAction","formEnctype","formMethod","formNoValidate","formTarget","popoverTargetAction"],SW=F(bW),TW=["value"],_W=F(TW),hW=["height","src","type","width","align","name"],mW=F(hW),xW=["disabled","name","type","validationMessage","willValidate"],pW=F(xW),uW=["acceptCharset","action","autocomplete","encoding","enctype","length","method","name","noValidate","target","rel"],vW=F(uW),EW=["allow","allowFullscreen","height","name","referrerPolicy","src","srcdoc","width","align","frameBorder","longDesc","marginHeight","marginWidth","scrolling","sandbox"],iW=F(EW),nW=["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"],cW=F(nW),dW=["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"],sW=F(dW),lW=["htmlFor"],oW=F(lW),rW=["value","type"],aW=F(rW),tW=["as","crossOrigin","disabled","fetchPriority","href","hreflang","imageSizes","imageSrcset","integrity","media","referrerPolicy","rel","type","charset","rev","target","sizes"],eW=F(tW),W1=["name"],q1=F(W1),Z1=["high","low","max","min","optimum","value"],$1=F(Z1),z1=["cite","dateTime"],e=F(z1),Q1=["reversed","start","type","compact"],J1=F(Q1),X1=["data","height","name","type","useMap","width","validationMessage","willValidate","align","archive","border","code","codeBase","codeType","declare","hspace","standby","vspace"],G1=F(X1),F1=["disabled","label"],P1=F(F1),U1=["defaultSelected","disabled","index","label","selected","text","value"],R1=F(U1),V1=["defaultValue","name","type","value","htmlFor","validationMessage","willValidate"],A1=F(V1),D1=["max","position","value"],N1=F(D1),O1=["cite"],WW=F(O1),C1=(W)=>y(W),f1=["async","crossOrigin","defer","fetchPriority","integrity","noModule","referrerPolicy","src","text","type","charset"],I1=I()(f1,{event:(W)=>W.event,htmlFor:(W)=>W.htmlFor}),y1=(W)=>({...y(W),...I1(W)}),w1=["autocomplete","disabled","length","multiple","name","required","selectedIndex","size","type","value","validationMessage","willValidate"],k1=F(w1),B1=["name"],K1=F(B1),H1=["height","media","sizes","src","srcset","type","width"],g1=F(H1),j1=["align"],Y1=F(j1),L1=["abbr","cellIndex","colSpan","headers","rowSpan","scope","align","axis","bgColor","ch","chOff","height","noWrap","vAlign","width"],qW=F(L1),M1=["span","align","ch","chOff","vAlign","width"],ZW=F(M1),b1=["align","bgColor","border","cellPadding","cellSpacing","frame","rules","summary","width"],S1=F(b1),T1=["rowIndex","sectionRowIndex","align","bgColor","ch","chOff","vAlign"],_1=F(T1),h1=["align","ch","chOff","vAlign"],p=F(h1),m1=(W)=>y(W),x1=["autocomplete","cols","defaultValue","dirName","disabled","maxLength","minLength","name","placeholder","readOnly","required","rows","selectionDirection","selectionEnd","selectionStart","value","wrap","textLength","validationMessage","willValidate"],p1=F(x1),u1=["dateTime"],v1=F(u1),E1=["default","kind","label","readyState","src","srclang"],i1=F(E1),n1=["height","poster","videoHeight","videoWidth","width","playsInline"],c1=I()(n1),d1=(W)=>({...$W(W),...c1(W)}),s1=["clear"],l1=F(s1),o1=["href","target"],r1=F(o1),a1=["aLink","background","bgColor","link","text","vLink"],t1=F(a1),e1=["compact"],Wq=F(e1),qq=["open"],Zq=F(qq),$q=["open","returnValue"],zq=F($q),Qq=["align"],Jq=F(Qq),Xq=(W)=>y(W),Gq=["align"],k=F(Gq),Fq=["align","color","noShade","size","width"],Pq=F(Fq),Uq=["version"],Rq=F(Uq),Vq=(W)=>y(W),Aq=["content","httpEquiv","name","scheme"],Dq=F(Aq),Nq=["align"],Oq=F(Nq),Cq=(W)=>y(W),fq=["width"],Iq=F(fq),yq=(W)=>y(W),wq=["media","type","disabled"],kq=F(wq),Bq=["text"],Kq=F(Bq),Hq=["compact","type"],gq=F(Hq),jq={A:gW,AREA:YW,AUDIO:MW,BASE:r1,BLOCKQUOTE:WW,Q:WW,BODY:t1,BR:l1,BUTTON:SW,CANVAS:y,CAPTION:Y1,CITE:C1,COL:ZW,COLGROUP:ZW,DATA:_W,DETAILS:Zq,DIALOG:zq,DIV:Jq,DL:Wq,EMBED:mW,FIELDSET:pW,FORM:vW,H1:k,H2:k,H3:k,H4:k,H5:k,H6:k,HEAD:Xq,HR:Pq,HTML:Rq,IFRAME:iW,IMG:cW,INPUT:sW,LABEL:oW,LI:aW,LINK:eW,MAP:q1,MENU:Vq,META:Dq,METER:$1,INS:e,DEL:e,OBJECT:G1,OL:J1,OPTGROUP:P1,OPTION:R1,OUTPUT:A1,P:Oq,PICTURE:Cq,PRE:Iq,PROGRESS:N1,SCRIPT:y1,SELECT:k1,SLOT:K1,SOURCE:g1,SPAN:yq,STYLE:kq,TABLE:S1,TBODY:p,THEAD:p,TFOOT:p,TD:qW,TH:qW,TEMPLATE:m1,TEXTAREA:p1,TIME:v1,TITLE:Kq,TR:_1,TRACK:i1,UL:gq,VIDEO:d1};function b(W){let q=W.tagName.toUpperCase(),Z=jq[q];if(Z)return Z(W);throw new Error(`Unexpected HTML element tag: ${W.tagName} (update .web/custom/serialize.ts)`)}var Yq=(W)=>b(W.target),g=(W)=>W.relatedTarget?b(W.relatedTarget):null;function R(W,q){return I()(W,{target:Yq,...q||{}})}var C=["target","bubbles","cancelable","defaultPrevented","eventPhase","isTrusted","timeStamp","type"],S=[...C,"detail"],T=[...S,"altKey","button","buttons","clientX","clientY","ctrlKey","metaKey","movementX","movementY","pageX","pageY","screenX","screenY","shiftKey"],Lq=[...T,"pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","width","height","pointerType","isPrimary"],Mq=R(C),bq=R(S),Sq=R(T,{relatedTarget:g}),Tq=R(C,{clipboardData:(W)=>zW(W.clipboardData)}),_q=R([...C,"data"]),hq=R(T,{relatedTarget:g,dataTransfer:(W)=>zW(W.dataTransfer)}),mq=R(Lq,{relatedTarget:g}),xq=R(C,{relatedTarget:g}),pq=R(C),uq=R(C),vq=R(C),Eq=R([...S,"altKey","ctrlKey","code","key","locale","location","metaKey","repeat","shiftKey"]),iq=R([...S,"altKey","ctrlKey","metaKey","shiftKey","changedTouches","targetTouches","touches"],{changedTouches:(W)=>u(W.changedTouches),targetTouches:(W)=>u(W.targetTouches),touches:(W)=>u(W.touches)}),nq=R([...T,"deltaMode","deltaX","deltaY","deltaZ"],{relatedTarget:g}),cq=R([...C,"animationName","elapsedTime","pseudoElement"]),dq=R([...C,"oldState","newState"]),sq=R([...C,"elapsedTime","propertyName","pseudoElement"]);function u(W){return Array.from(W).map((q)=>({target:b(q.target),identifier:q.identifier,screenX:q.screenX,screenY:q.screenY,clientX:q.clientX,clientY:q.clientY,pageX:q.pageX,pageY:q.pageY}))}function zW(W){if(!W)return null;let q=[];if(W.items)for(let Z=0;Z<W.items.length;Z++){let Q=W.items[Z];q.push({kind:Q.kind,type:Q.type})}return{drop_effect:W.dropEffect,effect_allowed:W.effectAllowed,items:q,types:Array.from(W.types||[])}}var V={};function A(W,q,Z){for(let Q of q)W[Q]=Z}A(V,["pointerdown","pointermove","pointerup","pointercancel","gotpointercapture","lostpointercapture","pointerenter","pointerleave","pointerover","pointerout"],mq);A(V,["click","contextmenu","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup"],Sq);A(V,["drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop"],hq);A(V,["keydown","keypress","keyup"],Eq);A(V,["focus","blur"],xq);A(V,["change","input"],vq);A(V,["invalid"],uq);A(V,["reset","submit"],pq);A(V,["copy","cut","paste"],Tq);A(V,["compositionend","compositionstart","compositionupdate"],_q);A(V,["touchcancel","touchend","touchmove","touchstart"],iq);A(V,["scroll"],bq);A(V,["wheel"],nq);A(V,["animationstart","animationend","animationiteration"],cq);A(V,["transitionend"],sq);A(V,["toggle"],dq);function v(W){if(W&&typeof W==="object"&&"nativeEvent"in W&&typeof W.isDefaultPrevented==="function"){let q=W;if(typeof q.type!=="string")return W;let Z=V[q.type.toLowerCase()];if(Z)return Z(q);return Mq(q)}return W}function lq(W){return W instanceof Date}function oq(W){return typeof File!=="undefined"&&W instanceof File}function rq(W){return typeof FormData!=="undefined"&&W instanceof FormData}function j(W){let q=new Map,Z=1,Q=($)=>{if($===null||typeof $!=="object")return $;let X=$;if(q.has(X))return{__ref:q.get(X)};if(lq($)){let J=Z++;return q.set(X,J),{__pulse:"date",__id:J,timestamp:$.getTime()}}if(oq($)){let J=Z++;return q.set(X,J),{__pulse:"file",__id:J,name:$.name,type:$.type,size:$.size,lastModified:$.lastModified,file:$}}if(rq($)){let J=Z++;q.set(X,J);let G={};for(let[U,O]of $.entries()){let D=Q(O);if(Object.prototype.hasOwnProperty.call(G,U)){let N=G[U];if(Array.isArray(N))N.push(D);else G[U]=[N,D]}else G[U]=D}return{__pulse:"formdata",__id:J,fields:G}}let P=Z++;if(q.set(X,P),Array.isArray($))return{__pulse:"array",__id:P,items:$.map(Q)};let z={};for(let J in $){let G=$[J];if(typeof G==="function"||typeof G==="symbol"||typeof G==="undefined")continue;z[J]=Q(G)}return{__pulse:"object",__id:P,__data:z}};return Q(W)}function E(W){let q=new Map,Z=(Q)=>{if(Q===null||typeof Q!=="object")return Q;if(Array.isArray(Q))return Q.map(Z);let $=Q;if($.__ref!==void 0){let P=$.__ref;return q.get(P)||null}if($.__pulse==="date"){let P=$.__id,z=new Date($.timestamp);return q.set(P,z),z}if($.__pulse==="file"){let{__id:P,file:z}=$;return q.set(P,z),z}if($.__pulse==="formdata"){let{__id:P,fields:z}=$,J=new FormData;q.set(P,J);for(let[G,U]of Object.entries(z))if(Array.isArray(U))for(let O of U){let D=Z(O);J.append(G,D)}else{let O=Z(U);J.append(G,O)}return J}if($.__pulse==="array"){let P=$.__id,z=[];q.set(P,z);let J=$.items;for(let G=0;G<J.length;G++)z[G]=Z(J[G]);return z}if($.__pulse==="object"){let P=$.__id,z={};q.set(P,z);let J=$.__data;for(let[G,U]of Object.entries(J))z[G]=Z(U);return z}let X={};for(let[P,z]of Object.entries($))X[P]=Z(z);return X};return Z(W)}import{io as aq}from"socket.io-client";class _{url;renderId;frameworkNavigate;activeViews;socket=null;messageQueue;connectionListeners=new Set;serverErrors=new Map;serverErrorListeners=new Set;constructor(W,q,Z){this.url=W;this.renderId=q;this.frameworkNavigate=Z;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,q)=>{let Z=aq(this.url,{transports:["websocket","webtransport"],auth:{renderId:this.renderId}});this.socket=Z,Z.on("connect",()=>{console.log("[SocketIOTransport] Connected:",this.socket?.id);for(let[Q,$]of this.activeViews)Z.emit("message",j({type:"mount",path:Q,routeInfo:$.routeInfo}));for(let Q of this.messageQueue){if(Q.type==="mount"&&this.activeViews.has(Q.path))continue;if(Q.type==="navigate")continue;Z.emit("message",j(Q))}this.messageQueue=[],this.notifyConnectionListeners(!0),W()}),Z.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),q(Q)}),Z.on("disconnect",()=>{console.log("[SocketIOTransport] Disconnected"),this.notifyConnectionListeners(!1)}),Z.on("message",(Q)=>this.handleServerMessage(E(Q)))})}onConnectionChange(W){return this.connectionListeners.add(W),W(this.isConnected()),()=>{this.connectionListeners.delete(W)}}notifyConnectionListeners(W){for(let q of this.connectionListeners)q(W)}onServerError(W){this.serverErrorListeners.add(W);for(let[q,Z]of this.serverErrors)W(q,Z);return()=>{this.serverErrorListeners.delete(W)}}notifyServerError(W,q){for(let Z of this.serverErrorListeners)Z(W,q)}async sendMessage(W){if(this.isConnected())this.socket.emit("message",j(W));else this.messageQueue.push(W)}mountView(W,q){if(this.activeViews.has(W))throw new Error(`Path ${W} is already mounted`);this.activeViews.set(W,q),this.sendMessage({type:"mount",path:W,routeInfo:q.routeInfo})}async navigate(W,q){await this.sendMessage({type:"navigate",path:W,routeInfo:q})}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()}handleServerMessage(W){switch(W.type){case"vdom_init":{let q=this.activeViews.get(W.path);if(q)q.onInit(W.vdom);if(this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"vdom_update":{let q=this.activeViews.get(W.path);if(!q){console.error(`[PulseClient] Received VDOM update for path ${W.path} before initial tree was set.`);return}if(q.onUpdate(W.ops),this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"server_error":{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 q=!!W.replace,Z=W.path||"";if(Z.startsWith("//"))Z=`${window.location.protocol}${Z}`;if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(Z))if(Z.startsWith("http://")||Z.startsWith("https://"))try{let $=new URL(Z);if($.origin===window.location.origin){let X=`${$.pathname}${$.search}${$.hash}`;this.frameworkNavigate(X,{replace:q})}else if(q)window.location.replace(Z);else window.location.assign(Z)}catch{if(q)window.location.replace(Z);else window.location.assign(Z)}else if(q)window.location.replace(Z);else window.location.assign(Z);else this.frameworkNavigate(Z,{replace:q});break}default:console.error("Unexpected message:",W)}}async performApiCall(W){try{let q=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={};q.headers.forEach((P,z)=>Z[z]=P);let Q=null;if((q.headers.get("content-type")||"").includes("application/json"))Q=await q.json().catch(()=>null);else Q=await q.text().catch(()=>null);let X={type:"api_result",id:W.id,ok:q.ok,status:q.status,headers:Z,body:Q};await this.sendMessage(X)}catch(q){let Z={type:"api_result",id:W.id,ok:!1,status:0,headers:{},body:{error:String(q)}};await this.sendMessage(Z)}}async invokeCallback(W,q,Z){await this.sendMessage({type:"callback",path:W,callback:q,args:Z.map(v)})}}import{useLocation as tq,useParams as eq,useNavigate as WZ}from"react-router";import{jsxDEV as f}from"react/jsx-dev-runtime";var XW=QW(null),GW=QW(null),FW=()=>{let W=JW(XW);if(!W)throw new Error("usePulseClient must be used within a PulseProvider");return W},qZ=(W)=>{let q=JW(GW);if(!q)throw new Error("usePulsePrerender must be used within a PulseProvider");let Z=q.views[W];if(!Z)throw new Error(`No prerender found for '${W}'`);return Z},c=typeof window!=="undefined";function ZZ({children:W,config:q,prerender:Z}){let[Q,$]=i(!0),X=WZ(),{renderId:P,views:z}=Z,J=n(()=>new _(q.serverAddress,P,X),[q.serverAddress,X,P]);return h(()=>J.onConnectionChange($),[J]),h(()=>{if(c)return J.connect(),()=>J.disconnect()},[J]),f(XW.Provider,{value:J,children:f(GW.Provider,{value:Z,children:[!Q&&f("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."},void 0,!1,void 0,this),W]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function $Z({externalComponents:W,path:q}){let Z=FW(),Q=qZ(q),$=n(()=>new M(Z,q,W),[Z,q,W]),[X,P]=i(()=>$.renderNode(Q)),[z,J]=i(null),G=tq(),U=eq(),O=n(()=>{let{"*":D="",...N}=U,w=new URLSearchParams(G.search);return{hash:G.hash,pathname:G.pathname,query:G.search,queryParams:Object.fromEntries(w.entries()),pathParams:N,catchall:D.length>0?D.split("/"):[]}},[G.hash,G.pathname,G.search,JSON.stringify(U)]);if(h(()=>{if(c){Z.mountView(q,{routeInfo:O,onInit:(N)=>{P($.renderNode(N))},onUpdate:(N)=>{P((w)=>w==null?w:x(w,N,$))}});let D=Z.onServerError((N,w)=>{if(N===q)J(w)});return()=>{D(),Z.unmount(q)}}},[Z]),h(()=>{if(c)Z.navigate(q,O)},[Z,q,O]),z)return f(zZ,{error:z},void 0,!1,void 0,this);return X}function zZ({error:W}){return f("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:[f("div",{style:{fontWeight:700,marginBottom:8},children:["Server Error during ",W.phase]},void 0,!0,void 0,this),W.message&&f("div",{children:W.message},void 0,!1,void 0,this),W.stack&&f("details",{open:!0,style:{marginTop:8},children:[f("summary",{children:"Stack trace"},void 0,!1,void 0,this),f("pre",{style:{margin:0},children:W.stack},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{io as QZ}from"socket.io-client";class PW{url;socket=null;listener=null;messageQueue=[];connectionListeners=new Set;constructor(W){this.url=W}connect(W){return this.listener=W,new Promise((q,Z)=>{this.socket=QZ(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),q()}),this.socket.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),Z(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 q of this.connectionListeners)q(W)}}function JZ({params:W,request:q}){let{"*":Z="",...Q}=W,$=new URL(q.url);return{hash:$.hash,pathname:$.pathname,query:$.search,queryParams:Object.fromEntries($.searchParams.entries()),pathParams:Q,catchall:Z.length>1?Z.split("/"):[]}}function XZ(W){if(W===null||typeof W!=="object")return!1;let q=Object.getPrototypeOf(W);return q===Object.prototype||q===null}function d(W){return typeof W==="function"||typeof W==="symbol"||typeof W==="undefined"}async function GZ(W){let q=await W.arrayBuffer();return Array.from(new Uint8Array(q))}async function FZ(W){return await Y(W,{seen:new WeakMap,nextId:1})}function PZ(W,q){if(W.seen.get(q)!==void 0)return null;let Q=W.nextId++;return W.seen.set(q,Q),Q}async function Y(W,q){if(W===null||typeof W!=="object")return W;if(W instanceof Date)return{__t:"datetime",timestamp:W.getTime()};if(W instanceof FormData){let z=PZ(q,W);if(z===null)return{__t:"ref",id:q.seen.get(W)};let J={};for(let[U,O]of W.entries()){let D=await Y(O,q);if(D===void 0)continue;if(Object.prototype.hasOwnProperty.call(J,U)){let N=J[U];if(Array.isArray(N))N.push(D);else J[U]=[N,D]}else J[U]=D}return{__t:"formdata",fields:J,__id:z}}if(W instanceof File){let z=W,J=await GZ(W);return{__t:"file",name:z.name,type:z.type,size:z.size,lastModified:z.lastModified,content:J}}let Z=W,Q=q.seen.get(Z);if(Q!==void 0)return{__t:"ref",id:Q};let $=q.nextId++;if(q.seen.set(Z,$),Array.isArray(W)){let J=(await Promise.all(W.map((U)=>Y(U,q)))).filter((U)=>U!==void 0);return{__t:"array",__id:$,items:J}}let X={};if(XZ(W))for(let z of Object.keys(W)){let J=W[z];if(d(J))continue;let G=await Y(J,q);if(G!==void 0)X[z]=G}else for(let z in W){let J=W[z];if(d(J))continue;let G=await Y(J,q);if(G!==void 0)X[z]=G}return{__t:"object",__id:$,props:X}}function UZ(W){return B(W)}function B(W){if(W===null||typeof W!=="object")return W;let q=W,Z=q.__t;if(Z==="datetime"){let $=q.timestamp;return new Date($)}if(Z==="file"){let $=q.content;if(Array.isArray($))return{...q,content:new Uint8Array($)};return q}if(Z==="formdata"){let $=q.fields,X={};for(let P of Object.keys($)){let z=$[P];if(Array.isArray(z))X[P]=z.map((J)=>B(J));else X[P]=B(z)}return{__t:"formdata",fields:X}}if(Z==="array")return q.items.map((X)=>B(X));if(Z==="object"){let $=q.props,X={};for(let P of Object.keys($))X[P]=B($[P]);return X}if(Z==="ref")return q;let Q={};for(let $ of Object.keys(q))Q[$]=B(q[$]);return Q}function RZ(W){return s(W,new WeakSet)}function s(W,q){if(W===null||typeof W!=="object")return W;if(q.has(W))return;if(q.add(W),Array.isArray(W))return W.map((Q)=>s(Q,q)).filter((Q)=>Q!==void 0);let Z={};for(let Q in W){let $=W[Q];if(d($))continue;let X=s($,q);if(X!==void 0)Z[Q]=X}return Z}export{FW as usePulseClient,j as stringify,E as parse,JZ as extractServerRouteInfo,v as extractEvent,FZ as encodeForWire,UZ as decodeFromWire,RZ as cleanForSerialization,x as applyReactTreeUpdates,M as VDOMRenderer,PW as SocketIOTransport,OW as RenderLazy,$Z as PulseView,_ as PulseSocketIOClient,ZZ as PulseProvider};
|
|
1
|
+
import{useEffect as m,useState as n,useMemo as c,createContext as JW,useContext as XW}from"react";import UW,{cloneElement as H,createElement as e,lazy as DW,Suspense as RW}from"react";var o="$$fragment",r="$$";function a(W){return typeof W==="object"&&W!==null}function t(W){return typeof W==="object"&&W!==null&&W.tag.startsWith("$$")&&W.tag!=="$$fragment"}import{jsx as p,Fragment as CW}from"react/jsx-runtime";class M{client;path;components;callbackCache;constructor(W,q,Z){this.client=W;this.path=q;this.components=Z;this.callbackCache=new Map}getCallback(W){let q=this.callbackCache.get(W);if(!q)q=(...Z)=>this.client.invokeCallback(this.path,W,Z),this.callbackCache.set(W,q);return q}renderNode(W){if(W==null||typeof W==="boolean"||typeof W==="number"||typeof W==="string")return W;if(a(W)){let{tag:q,props:Z={},children:Q=[]}=W,$={};for(let[V,z]of Object.entries(Z))if(typeof z==="string"&&z.startsWith("$$fn:")){let J=z.substring(5);$[V]=this.getCallback(J)}else $[V]=z;if(W.key)$.key=W.key;let X=[];for(let V of Q)X.push(this.renderNode(V));if(t(W)){let V=W.tag.slice(r.length),z=this.components[V];return e(z,$,...X)}return e(q===o?UW.Fragment:q,$,...X)}return null}}function L(W){let q=W.props?.children;if(q==null)return[];return Array.isArray(q)?q.slice():[q]}function AW(W,q){let Z={};for(let[Q,$]of Object.entries(q||{}))if(typeof $==="string"&&$.startsWith("$$fn:")){let X=$.substring(5);Z[Q]=W.getCallback(X)}else Z[Q]=$;return Z}function NW(W,q){return H(W,void 0,...q)}function x(W,q,Z){let Q=W;for(let $ of q){let X=$.path.split(".").filter((z)=>z.length>0).map(Number),V=(z,J)=>{if(J<X.length){K(z,X,J),z=z;let G=X[J],P=L(z),O=P[G];return P[G]=V(O,J+1),NW(z,P)}switch($.type){case"replace":return Z.renderNode($.data);case"update_props":{K(z,X,J),z=z;let G=AW(Z,$.data);return H(z,G)}case"insert":{K(z,X,J),z=z;let G=L(z);return G.splice($.idx,0,Z.renderNode($.data)),H(z,null,...G)}case"remove":{K(z,X,J),z=z;let G=L(z);return G.splice($.idx,1),H(z,null,...G)}case"move":{K(z,X,J),z=z;let G=L(z),P=G.splice($.data.from_index,1)[0];return G.splice($.data.to_index,0,P),H(z,null,...G)}default:throw Error(`[Pulse renderer] Unknown update type: ${$.type}`)}};Q=V(Q,0)}return Q}function OW(W,q){let Z=DW(W);return({children:Q,...$})=>{return p(RW,{fallback:q??p(CW,{}),children:p(Z,{...$,children:Q})})}}function K(W,q,Z){return!0}function f(){function W(q,Z){return(Q)=>{let $={};for(let X of q)$[X]=Q[X];if(Z)for(let X in Z){let V=Z[X];$[X]=V(Q)}return $}}return W}var fW=(W)=>W.tagName.toLowerCase(),IW=["id","className","tagName","localName","clientHeight","clientLeft","clientTop","clientWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth","slot"],yW=["autofocus","tabIndex","nonce"],wW=["accessKey","accessKeyLabel","autocapitalize","dir","draggable","hidden","inert","lang","offsetHeight","offsetLeft","offsetTop","offsetWidth","popover","spellcheck","title","translate","writingSuggestions","contentEditable","enterKeyHint","isContentEditable","inputMode"],kW=f()(IW,{tagName:fW}),BW=f()(yW),KW=f()(wW);function I(W){return{...kW(W),...BW(W),...KW(W)}}function F(W,q){let Z=f()(W,q);return(Q)=>({...I(Q),...Z(Q)})}var HW=["hash","host","hostname","href","origin","password","pathname","port","protocol","search","target","download","rel","hreflang","type","username","ping","referrerPolicy","text"],gW=F(HW),jW=["alt","coords","download","hash","host","hostname","href","origin","password","pathname","port","protocol","rel","search","shape","target","username","ping","referrerPolicy"],YW=F(jW),LW=["autoplay","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","loop","muted","networkState","paused","playbackRate","preload","readyState","seeking","src","volume","preservesPitch"],zW=F(LW),MW=(W)=>zW(W),bW=["disabled","name","type","value","formAction","formEnctype","formMethod","formNoValidate","formTarget","popoverTargetAction"],SW=F(bW),TW=["value"],_W=F(TW),hW=["height","src","type","width","align","name"],mW=F(hW),pW=["disabled","name","type","validationMessage","willValidate"],xW=F(pW),vW=["acceptCharset","action","autocomplete","encoding","enctype","length","method","name","noValidate","target","rel"],uW=F(vW),EW=["allow","allowFullscreen","height","name","referrerPolicy","src","srcdoc","width","align","frameBorder","longDesc","marginHeight","marginWidth","scrolling","sandbox"],iW=F(EW),nW=["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"],cW=F(nW),dW=["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"],sW=F(dW),lW=["htmlFor"],oW=F(lW),rW=["value","type"],aW=F(rW),tW=["as","crossOrigin","disabled","fetchPriority","href","hreflang","imageSizes","imageSrcset","integrity","media","referrerPolicy","rel","type","charset","rev","target","sizes"],eW=F(tW),W1=["name"],q1=F(W1),Z1=["high","low","max","min","optimum","value"],$1=F(Z1),z1=["cite","dateTime"],WW=F(z1),Q1=["reversed","start","type","compact"],J1=F(Q1),X1=["data","height","name","type","useMap","width","validationMessage","willValidate","align","archive","border","code","codeBase","codeType","declare","hspace","standby","vspace"],G1=F(X1),F1=["disabled","label"],V1=F(F1),P1=["defaultSelected","disabled","index","label","selected","text","value"],U1=F(P1),D1=["defaultValue","name","type","value","htmlFor","validationMessage","willValidate"],R1=F(D1),A1=["max","position","value"],N1=F(A1),O1=["cite"],qW=F(O1),C1=(W)=>I(W),f1=["async","crossOrigin","defer","fetchPriority","integrity","noModule","referrerPolicy","src","text","type","charset"],I1=f()(f1,{event:(W)=>W.event,htmlFor:(W)=>W.htmlFor}),y1=(W)=>({...I(W),...I1(W)}),w1=["autocomplete","disabled","length","multiple","name","required","selectedIndex","size","type","value","validationMessage","willValidate"],k1=F(w1),B1=["name"],K1=F(B1),H1=["height","media","sizes","src","srcset","type","width"],g1=F(H1),j1=["align"],Y1=F(j1),L1=["abbr","cellIndex","colSpan","headers","rowSpan","scope","align","axis","bgColor","ch","chOff","height","noWrap","vAlign","width"],ZW=F(L1),M1=["span","align","ch","chOff","vAlign","width"],$W=F(M1),b1=["align","bgColor","border","cellPadding","cellSpacing","frame","rules","summary","width"],S1=F(b1),T1=["rowIndex","sectionRowIndex","align","bgColor","ch","chOff","vAlign"],_1=F(T1),h1=["align","ch","chOff","vAlign"],v=F(h1),m1=(W)=>I(W),p1=["autocomplete","cols","defaultValue","dirName","disabled","maxLength","minLength","name","placeholder","readOnly","required","rows","selectionDirection","selectionEnd","selectionStart","value","wrap","textLength","validationMessage","willValidate"],x1=F(p1),v1=["dateTime"],u1=F(v1),E1=["default","kind","label","readyState","src","srclang"],i1=F(E1),n1=["height","poster","videoHeight","videoWidth","width","playsInline"],c1=f()(n1),d1=(W)=>({...zW(W),...c1(W)}),s1=["clear"],l1=F(s1),o1=["href","target"],r1=F(o1),a1=["aLink","background","bgColor","link","text","vLink"],t1=F(a1),e1=["compact"],Wq=F(e1),qq=["open"],Zq=F(qq),$q=["open","returnValue"],zq=F($q),Qq=["align"],Jq=F(Qq),Xq=(W)=>I(W),Gq=["align"],w=F(Gq),Fq=["align","color","noShade","size","width"],Vq=F(Fq),Pq=["version"],Uq=F(Pq),Dq=(W)=>I(W),Rq=["content","httpEquiv","name","scheme"],Aq=F(Rq),Nq=["align"],Oq=F(Nq),Cq=(W)=>I(W),fq=["width"],Iq=F(fq),yq=(W)=>I(W),wq=["media","type","disabled"],kq=F(wq),Bq=["text"],Kq=F(Bq),Hq=["compact","type"],gq=F(Hq),jq={A:gW,AREA:YW,AUDIO:MW,BASE:r1,BLOCKQUOTE:qW,Q:qW,BODY:t1,BR:l1,BUTTON:SW,CANVAS:I,CAPTION:Y1,CITE:C1,COL:$W,COLGROUP:$W,DATA:_W,DETAILS:Zq,DIALOG:zq,DIV:Jq,DL:Wq,EMBED:mW,FIELDSET:xW,FORM:uW,H1:w,H2:w,H3:w,H4:w,H5:w,H6:w,HEAD:Xq,HR:Vq,HTML:Uq,IFRAME:iW,IMG:cW,INPUT:sW,LABEL:oW,LI:aW,LINK:eW,MAP:q1,MENU:Dq,META:Aq,METER:$1,INS:WW,DEL:WW,OBJECT:G1,OL:J1,OPTGROUP:V1,OPTION:U1,OUTPUT:R1,P:Oq,PICTURE:Cq,PRE:Iq,PROGRESS:N1,SCRIPT:y1,SELECT:k1,SLOT:K1,SOURCE:g1,SPAN:yq,STYLE:kq,TABLE:S1,TBODY:v,THEAD:v,TFOOT:v,TD:ZW,TH:ZW,TEMPLATE:m1,TEXTAREA:x1,TIME:u1,TITLE:Kq,TR:_1,TRACK:i1,UL:gq,VIDEO:d1};function b(W){let q=W.tagName.toUpperCase(),Z=jq[q];if(Z)return Z(W);throw Error(`Unexpected HTML element tag: ${W.tagName} (update .web/custom/serialize.ts)`)}var Yq=(W)=>b(W.target),g=(W)=>W.relatedTarget?b(W.relatedTarget):null;function U(W,q){return f()(W,{target:Yq,...q||{}})}var C=["target","bubbles","cancelable","defaultPrevented","eventPhase","isTrusted","timeStamp","type"],S=[...C,"detail"],T=[...S,"altKey","button","buttons","clientX","clientY","ctrlKey","metaKey","movementX","movementY","pageX","pageY","screenX","screenY","shiftKey"],Lq=[...T,"pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","width","height","pointerType","isPrimary"],Mq=U(C),bq=U(S),Sq=U(T,{relatedTarget:g}),Tq=U(C,{clipboardData:(W)=>QW(W.clipboardData)}),_q=U([...C,"data"]),hq=U(T,{relatedTarget:g,dataTransfer:(W)=>QW(W.dataTransfer)}),mq=U(Lq,{relatedTarget:g}),pq=U(C,{relatedTarget:g}),xq=U(C),vq=U(C),uq=U(C),Eq=U([...S,"altKey","ctrlKey","code","key","locale","location","metaKey","repeat","shiftKey"]),iq=U([...S,"altKey","ctrlKey","metaKey","shiftKey","changedTouches","targetTouches","touches"],{changedTouches:(W)=>u(W.changedTouches),targetTouches:(W)=>u(W.targetTouches),touches:(W)=>u(W.touches)}),nq=U([...T,"deltaMode","deltaX","deltaY","deltaZ"],{relatedTarget:g}),cq=U([...C,"animationName","elapsedTime","pseudoElement"]),dq=U([...C,"oldState","newState"]),sq=U([...C,"elapsedTime","propertyName","pseudoElement"]);function u(W){return Array.from(W).map((q)=>({target:b(q.target),identifier:q.identifier,screenX:q.screenX,screenY:q.screenY,clientX:q.clientX,clientY:q.clientY,pageX:q.pageX,pageY:q.pageY}))}function QW(W){if(!W)return null;let q=[];if(W.items)for(let Z=0;Z<W.items.length;Z++){let Q=W.items[Z];q.push({kind:Q.kind,type:Q.type})}return{drop_effect:W.dropEffect,effect_allowed:W.effectAllowed,items:q,types:Array.from(W.types||[])}}var D={};function R(W,q,Z){for(let Q of q)W[Q]=Z}R(D,["pointerdown","pointermove","pointerup","pointercancel","gotpointercapture","lostpointercapture","pointerenter","pointerleave","pointerover","pointerout"],mq);R(D,["click","contextmenu","dblclick","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup"],Sq);R(D,["drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop"],hq);R(D,["keydown","keypress","keyup"],Eq);R(D,["focus","blur"],pq);R(D,["change","input"],uq);R(D,["invalid"],vq);R(D,["reset","submit"],xq);R(D,["copy","cut","paste"],Tq);R(D,["compositionend","compositionstart","compositionupdate"],_q);R(D,["touchcancel","touchend","touchmove","touchstart"],iq);R(D,["scroll"],bq);R(D,["wheel"],nq);R(D,["animationstart","animationend","animationiteration"],cq);R(D,["transitionend"],sq);R(D,["toggle"],dq);function E(W){if(W&&typeof W==="object"&&"nativeEvent"in W&&typeof W.isDefaultPrevented==="function"){let q=W;if(typeof q.type!=="string")return W;let Z=D[q.type.toLowerCase()];if(Z)return Z(q);return Mq(q)}return W}function lq(W){return W instanceof Date}function oq(W){return typeof File<"u"&&W instanceof File}function rq(W){return typeof FormData<"u"&&W instanceof FormData}function j(W){let q=new Map,Z=1,Q=($)=>{if($===null||typeof $!=="object")return $;let X=$;if(q.has(X))return{__ref:q.get(X)};if(lq($)){let J=Z++;return q.set(X,J),{__pulse:"date",__id:J,timestamp:$.getTime()}}if(oq($)){let J=Z++;return q.set(X,J),{__pulse:"file",__id:J,name:$.name,type:$.type,size:$.size,lastModified:$.lastModified,file:$}}if(rq($)){let J=Z++;q.set(X,J);let G={};for(let[P,O]of $.entries()){let A=Q(O);if(Object.prototype.hasOwnProperty.call(G,P)){let N=G[P];if(Array.isArray(N))N.push(A);else G[P]=[N,A]}else G[P]=A}return{__pulse:"formdata",__id:J,fields:G}}let V=Z++;if(q.set(X,V),Array.isArray($))return{__pulse:"array",__id:V,items:$.map(Q)};let z={};for(let J in $){let G=$[J];if(typeof G==="function"||typeof G==="symbol"||typeof G>"u")continue;z[J]=Q(G)}return{__pulse:"object",__id:V,__data:z}};return Q(W)}function i(W){let q=new Map,Z=(Q)=>{if(Q===null||typeof Q!=="object")return Q;if(Array.isArray(Q))return Q.map(Z);let $=Q;if($.__ref!==void 0){let V=$.__ref;return q.get(V)||null}if($.__pulse==="date"){let V=$.__id,z=new Date($.timestamp);return q.set(V,z),z}if($.__pulse==="file"){let{__id:V,file:z}=$;return q.set(V,z),z}if($.__pulse==="formdata"){let{__id:V,fields:z}=$,J=new FormData;q.set(V,J);for(let[G,P]of Object.entries(z))if(Array.isArray(P))for(let O of P){let A=Z(O);J.append(G,A)}else{let O=Z(P);J.append(G,O)}return J}if($.__pulse==="array"){let V=$.__id,z=[];q.set(V,z);let J=$.items;for(let G=0;G<J.length;G++)z[G]=Z(J[G]);return z}if($.__pulse==="object"){let V=$.__id,z={};q.set(V,z);let J=$.__data;for(let[G,P]of Object.entries(J))z[G]=Z(P);return z}let X={};for(let[V,z]of Object.entries($))X[V]=Z(z);return X};return Z(W)}import{io as aq}from"socket.io-client";class _{url;renderId;frameworkNavigate;activeViews;socket=null;messageQueue;connectionListeners=new Set;serverErrors=new Map;serverErrorListeners=new Set;constructor(W,q,Z){this.url=W;this.renderId=q;this.frameworkNavigate=Z;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,q)=>{let Z=aq(this.url,{transports:["websocket","webtransport"],auth:{renderId:this.renderId}});this.socket=Z,Z.on("connect",()=>{console.log("[SocketIOTransport] Connected:",this.socket?.id);for(let[Q,$]of this.activeViews)Z.emit("message",j({type:"mount",path:Q,routeInfo:$.routeInfo}));for(let Q of this.messageQueue){if(Q.type==="mount"&&this.activeViews.has(Q.path))continue;if(Q.type==="navigate")continue;Z.emit("message",j(Q))}this.messageQueue=[],this.notifyConnectionListeners(!0),W()}),Z.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),q(Q)}),Z.on("disconnect",()=>{console.log("[SocketIOTransport] Disconnected"),this.notifyConnectionListeners(!1)}),Z.on("message",(Q)=>this.handleServerMessage(i(Q)))})}onConnectionChange(W){return this.connectionListeners.add(W),W(this.isConnected()),()=>{this.connectionListeners.delete(W)}}notifyConnectionListeners(W){for(let q of this.connectionListeners)q(W)}onServerError(W){this.serverErrorListeners.add(W);for(let[q,Z]of this.serverErrors)W(q,Z);return()=>{this.serverErrorListeners.delete(W)}}notifyServerError(W,q){for(let Z of this.serverErrorListeners)Z(W,q)}async sendMessage(W){if(this.isConnected())this.socket.emit("message",j(W));else this.messageQueue.push(W)}mountView(W,q){if(this.activeViews.has(W))throw Error(`Path ${W} is already mounted`);this.activeViews.set(W,q),this.sendMessage({type:"mount",path:W,routeInfo:q.routeInfo})}async navigate(W,q){await this.sendMessage({type:"navigate",path:W,routeInfo:q})}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()}handleServerMessage(W){switch(W.type){case"vdom_init":{let q=this.activeViews.get(W.path);if(!q)return;if(q)q.onInit(W.vdom);if(this.serverErrors.has(W.path))this.serverErrors.delete(W.path),this.notifyServerError(W.path,null);break}case"vdom_update":{let q=this.activeViews.get(W.path);if(!q)return;if(q.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 q=!!W.replace,Z=W.path||"";if(Z.startsWith("//"))Z=`${window.location.protocol}${Z}`;if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(Z))if(Z.startsWith("http://")||Z.startsWith("https://"))try{let $=new URL(Z);if($.origin===window.location.origin){let X=`${$.pathname}${$.search}${$.hash}`;this.frameworkNavigate(X,{replace:q})}else if(q)window.location.replace(Z);else window.location.assign(Z)}catch{if(q)window.location.replace(Z);else window.location.assign(Z)}else if(q)window.location.replace(Z);else window.location.assign(Z);else this.frameworkNavigate(Z,{replace:q});break}default:console.error("Unexpected message:",W)}}async performApiCall(W){try{let q=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={};q.headers.forEach((V,z)=>Z[z]=V);let Q=null;if((q.headers.get("content-type")||"").includes("application/json"))Q=await q.json().catch(()=>null);else Q=await q.text().catch(()=>null);let X={type:"api_result",id:W.id,ok:q.ok,status:q.status,headers:Z,body:Q};await this.sendMessage(X)}catch(q){let Z={type:"api_result",id:W.id,ok:!1,status:0,headers:{},body:{error:String(q)}};await this.sendMessage(Z)}}async invokeCallback(W,q,Z){await this.sendMessage({type:"callback",path:W,callback:q,args:Z.map(E)})}}import{useLocation as tq,useParams as eq,useNavigate as WZ}from"react-router";import{jsx as k,jsxs as h}from"react/jsx-runtime";var GW=JW(null),FW=JW(null),VW=()=>{let W=XW(GW);if(!W)throw Error("usePulseClient must be used within a PulseProvider");return W},qZ=(W)=>{let q=XW(FW);if(!q)throw Error("usePulsePrerender must be used within a PulseProvider");let Z=q.views[W];if(!Z)throw Error(`No prerender found for '${W}'`);return Z},d=typeof window<"u";function ZZ({children:W,config:q,prerender:Z}){let[Q,$]=n(!0),X=WZ(),{renderId:V,views:z}=Z,J=c(()=>new _(q.serverAddress,V,X),[q.serverAddress,X,V]);return m(()=>J.onConnectionChange($),[J]),m(()=>{if(d)return J.connect(),()=>J.disconnect()},[J]),k(GW.Provider,{value:J,children:h(FW.Provider,{value:Z,children:[!Q&&k("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 $Z({externalComponents:W,path:q}){let Z=VW(),Q=qZ(q),$=c(()=>new M(Z,q,W),[Z,q,W]),[X,V]=n(()=>$.renderNode(Q)),[z,J]=n(null),G=tq(),P=eq(),O=c(()=>{let{"*":A="",...N}=P,y=new URLSearchParams(G.search);return{hash:G.hash,pathname:G.pathname,query:G.search,queryParams:Object.fromEntries(y.entries()),pathParams:N,catchall:A.length>0?A.split("/"):[]}},[G.hash,G.pathname,G.search,JSON.stringify(P)]);if(m(()=>{if(d){Z.mountView(q,{routeInfo:O,onInit:(N)=>{V($.renderNode(N))},onUpdate:(N)=>{V((y)=>y==null?y:x(y,N,$))}});let A=Z.onServerError((N,y)=>{if(N===q)J(y)});return()=>{A(),Z.unmount(q)}}},[Z]),m(()=>{if(d)Z.navigate(q,O)},[Z,q,O]),z)return k(zZ,{error:z});return X}function zZ({error:W}){return h("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:[h("div",{style:{fontWeight:700,marginBottom:8},children:["Server Error during ",W.phase]}),W.message&&k("div",{children:W.message}),W.stack&&h("details",{open:!0,style:{marginTop:8},children:[k("summary",{children:"Stack trace"}),k("pre",{style:{margin:0},children:W.stack})]})]})}import{io as QZ}from"socket.io-client";class PW{url;socket=null;listener=null;messageQueue=[];connectionListeners=new Set;constructor(W){this.url=W}connect(W){return this.listener=W,new Promise((q,Z)=>{this.socket=QZ(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),q()}),this.socket.on("connect_error",(Q)=>{console.error("[SocketIOTransport] Connection failed:",Q),this.notifyConnectionListeners(!1),Z(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 q of this.connectionListeners)q(W)}}function JZ({params:W,request:q}){let{"*":Z="",...Q}=W,$=new URL(q.url);return{hash:$.hash,pathname:$.pathname,query:$.search,queryParams:Object.fromEntries($.searchParams.entries()),pathParams:Q,catchall:Z.length>1?Z.split("/"):[]}}function XZ(W){if(W===null||typeof W!=="object")return!1;let q=Object.getPrototypeOf(W);return q===Object.prototype||q===null}function s(W){return typeof W==="function"||typeof W==="symbol"||typeof W>"u"}async function GZ(W){let q=await W.arrayBuffer();return Array.from(new Uint8Array(q))}async function FZ(W){return await Y(W,{seen:new WeakMap,nextId:1})}function VZ(W,q){if(W.seen.get(q)!==void 0)return null;let Q=W.nextId++;return W.seen.set(q,Q),Q}async function Y(W,q){if(W===null||typeof W!=="object")return W;if(W instanceof Date)return{__t:"datetime",timestamp:W.getTime()};if(W instanceof FormData){let z=VZ(q,W);if(z===null)return{__t:"ref",id:q.seen.get(W)};let J={};for(let[P,O]of W.entries()){let A=await Y(O,q);if(A===void 0)continue;if(Object.prototype.hasOwnProperty.call(J,P)){let N=J[P];if(Array.isArray(N))N.push(A);else J[P]=[N,A]}else J[P]=A}return{__t:"formdata",fields:J,__id:z}}if(W instanceof File){let z=W,J=await GZ(W);return{__t:"file",name:z.name,type:z.type,size:z.size,lastModified:z.lastModified,content:J}}let Z=W,Q=q.seen.get(Z);if(Q!==void 0)return{__t:"ref",id:Q};let $=q.nextId++;if(q.seen.set(Z,$),Array.isArray(W)){let J=(await Promise.all(W.map((P)=>Y(P,q)))).filter((P)=>P!==void 0);return{__t:"array",__id:$,items:J}}let X={};if(XZ(W))for(let z of Object.keys(W)){let J=W[z];if(s(J))continue;let G=await Y(J,q);if(G!==void 0)X[z]=G}else for(let z in W){let J=W[z];if(s(J))continue;let G=await Y(J,q);if(G!==void 0)X[z]=G}return{__t:"object",__id:$,props:X}}function PZ(W){return B(W)}function B(W){if(W===null||typeof W!=="object")return W;let q=W,Z=q.__t;if(Z==="datetime"){let $=q.timestamp;return new Date($)}if(Z==="file"){let $=q.content;if(Array.isArray($))return{...q,content:new Uint8Array($)};return q}if(Z==="formdata"){let $=q.fields,X={};for(let V of Object.keys($)){let z=$[V];if(Array.isArray(z))X[V]=z.map((J)=>B(J));else X[V]=B(z)}return{__t:"formdata",fields:X}}if(Z==="array")return q.items.map((X)=>B(X));if(Z==="object"){let $=q.props,X={};for(let V of Object.keys($))X[V]=B($[V]);return X}if(Z==="ref")return q;let Q={};for(let $ of Object.keys(q))Q[$]=B(q[$]);return Q}function UZ(W){return l(W,new WeakSet)}function l(W,q){if(W===null||typeof W!=="object")return W;if(q.has(W))return;if(q.add(W),Array.isArray(W))return W.map((Q)=>l(Q,q)).filter((Q)=>Q!==void 0);let Z={};for(let Q in W){let $=W[Q];if(s($))continue;let X=l($,q);if(X!==void 0)Z[Q]=X}return Z}export{VW as usePulseClient,j as stringify,i as parse,JZ as extractServerRouteInfo,E as extractEvent,FZ as encodeForWire,PZ as decodeFromWire,UZ as cleanForSerialization,x as applyReactTreeUpdates,M as VDOMRenderer,PW as SocketIOTransport,OW as RenderLazy,$Z as PulseView,_ as PulseSocketIOClient,ZZ as PulseProvider};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=E18861139DDB9F6B64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
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",
|
|
11
11
|
"// Simple object transformation for socket.io transport\n// Handles Dates, Files (via socket.io binary), FormData, and circular references\n\nfunction isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\nfunction isFile(value: unknown): value is File {\n return typeof File !== \"undefined\" && value instanceof File;\n}\n\nfunction isFormData(value: unknown): value is FormData {\n return typeof FormData !== \"undefined\" && value instanceof FormData;\n}\n\nexport function stringify(input: unknown): unknown {\n const seen = new Map<object, number>();\n let nextId = 1;\n\n const transform = (value: unknown): unknown => {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n // Handle circular references\n const obj = value as object;\n if (seen.has(obj)) {\n return { __ref: seen.get(obj) };\n }\n\n // Special type transformations\n if (isDate(value)) {\n const id = nextId++;\n seen.set(obj, id);\n return { __pulse: \"date\", __id: id, timestamp: value.getTime() };\n }\n\n if (isFile(value)) {\n // Socket.io can handle File objects directly, just add metadata wrapper\n const id = nextId++;\n seen.set(obj, id);\n return {\n __pulse: \"file\",\n __id: id,\n name: value.name,\n type: value.type,\n size: value.size,\n lastModified: value.lastModified,\n file: value, // socket.io will handle the binary data\n };\n }\n\n if (isFormData(value)) {\n const id = nextId++;\n seen.set(obj, id);\n const fields: Record<string, unknown | unknown[]> = {};\n\n for (const [key, val] of value.entries()) {\n const transformedVal = transform(val);\n if (Object.prototype.hasOwnProperty.call(fields, key)) {\n const existing = fields[key];\n if (Array.isArray(existing)) {\n existing.push(transformedVal);\n } else {\n fields[key] = [existing, transformedVal];\n }\n } else {\n fields[key] = transformedVal;\n }\n }\n\n return { __pulse: \"formdata\", __id: id, fields };\n }\n\n // Regular objects and arrays\n const id = nextId++;\n seen.set(obj, id);\n\n if (Array.isArray(value)) {\n return {\n __pulse: \"array\",\n __id: id,\n items: value.map(transform),\n };\n }\n\n // Plain objects - use __pulse_data to avoid conflicts\n const userData: Record<string, unknown> = {};\n for (const key in value as Record<string, unknown>) {\n const v = (value as Record<string, unknown>)[key];\n if (\n typeof v === \"function\" ||\n typeof v === \"symbol\" ||\n typeof v === \"undefined\"\n ) {\n continue;\n }\n userData[key] = transform(v);\n }\n\n return { __pulse: \"object\", __id: id, __data: userData };\n };\n\n return transform(input);\n}\n\nexport function parse(input: unknown): unknown {\n const objects = new Map<number, unknown>();\n\n const resolve = (value: unknown): unknown => {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(resolve);\n }\n\n const obj = value as Record<string, unknown>;\n\n // Handle references\n if (obj.__ref !== undefined) {\n const id = obj.__ref as number;\n return objects.get(id) || null;\n }\n\n // Handle special types (only if they have __pulse marker)\n if (obj.__pulse === \"date\") {\n const id = obj.__id as number;\n const resolved = new Date(obj.timestamp as number);\n objects.set(id, resolved);\n return resolved;\n }\n\n if (obj.__pulse === \"file\") {\n const id = obj.__id as number;\n // Return the original File object directly (socket.io preserves it)\n const resolved = obj.file as File;\n objects.set(id, resolved);\n return resolved;\n }\n\n if (obj.__pulse === \"formdata\") {\n const id = obj.__id as number;\n const fields = obj.fields as Record<string, unknown | unknown[]>;\n\n // Reconstruct FormData object\n const resolved = new FormData();\n objects.set(id, resolved);\n\n for (const [key, v] of Object.entries(fields)) {\n if (Array.isArray(v)) {\n // Multiple values for same key\n for (const item of v) {\n const resolvedItem = resolve(item);\n resolved.append(key, resolvedItem as string | File);\n }\n } else {\n const resolvedValue = resolve(v);\n resolved.append(key, resolvedValue as string | File);\n }\n }\n\n return resolved;\n }\n\n if (obj.__pulse === \"array\") {\n const id = obj.__id as number;\n const resolved: unknown[] = [];\n objects.set(id, resolved);\n\n const items = obj.items as unknown[];\n for (let i = 0; i < items.length; i++) {\n resolved[i] = resolve(items[i]);\n }\n return resolved;\n }\n\n if (obj.__pulse === \"object\") {\n const id = obj.__id as number;\n const resolved: Record<string, unknown> = {};\n objects.set(id, resolved);\n\n const userData = obj.__data as Record<string, unknown>;\n for (const [key, v] of Object.entries(userData)) {\n resolved[key] = resolve(v);\n }\n return resolved;\n }\n\n // Unknown object type - process properties\n const result: Record<string, unknown> = {};\n for (const [key, v] of Object.entries(obj)) {\n result[key] = resolve(v);\n }\n return result;\n };\n\n return resolve(input);\n}\n",
|
|
12
|
-
"import type { RouteInfo } from \"./helpers\";\nimport type { ClientMountMessage } from \"./messages\";\nimport type { VDOM, VDOMUpdate } from \"./vdom\";\nimport { extractEvent } from \"./serialize/events\";\nimport {\n stringify as flattedStringify,\n parse as flattedParse,\n} from \"./serialize/flatted\";\n\nimport { io, Socket } from \"socket.io-client\";\nimport type {\n ClientApiResultMessage,\n ClientMessage,\n ServerApiCallMessage,\n ServerErrorInfo,\n ServerMessage,\n} from \"./messages\";\nimport type { NavigateFunction } from \"react-router\";\n\nexport interface MountedView {\n routeInfo: RouteInfo;\n onInit: (vdom: VDOM) => void;\n onUpdate: (ops: VDOMUpdate[]) => void;\n}\nexport type ConnectionStatusListener = (connected: boolean) => void;\nexport type ServerErrorListener = (\n path: string,\n error: ServerErrorInfo | null\n) => void;\n\nexport interface PulseClient {\n // Connection management\n connect(): Promise<void>;\n disconnect(): void;\n isConnected(): boolean;\n onConnectionChange(listener: ConnectionStatusListener): () => void;\n // Messages\n navigate(path: string, routeInfo: RouteInfo): Promise<void>;\n leave(path: string): Promise<void>;\n invokeCallback(path: string, callback: string, args: any[]): Promise<void>;\n // VDOM subscription\n mountView(path: string, view: MountedView): () => void;\n}\n\nexport class PulseSocketIOClient {\n private activeViews: Map<string, MountedView>;\n private socket: Socket | null = null;\n private messageQueue: ClientMessage[];\n private connectionListeners: Set<ConnectionStatusListener> = new Set();\n private serverErrors: Map<string, ServerErrorInfo> = new Map();\n private serverErrorListeners: Set<ServerErrorListener> = new Set();\n\n constructor(\n private url: string,\n private renderId: string,\n private frameworkNavigate: NavigateFunction\n ) {\n this.socket = null;\n this.activeViews = new Map();\n this.messageQueue = [];\n }\n public isConnected(): boolean {\n return this.socket?.connected ?? false;\n }\n\n public async connect(): Promise<void> {\n if (this.socket) {\n return;\n }\n return new Promise((resolve, reject) => {\n const socket = io(this.url, {\n transports: [\"websocket\", \"webtransport\"],\n auth: { renderId: this.renderId },\n });\n this.socket = socket;\n\n socket.on(\"connect\", () => {\n console.log(\"[SocketIOTransport] Connected:\", this.socket?.id);\n // Make sure to send a navigate payload for all the routes\n for (const [path, route] of this.activeViews) {\n socket.emit(\n \"message\",\n flattedStringify({\n type: \"mount\",\n path: path,\n routeInfo: route.routeInfo,\n } satisfies ClientMountMessage)\n );\n }\n\n for (const payload of this.messageQueue) {\n // Already sent above\n if (payload.type === \"mount\" && this.activeViews.has(payload.path)) {\n continue;\n }\n // We're remounting all the routes, so no need to navigate\n if (payload.type === \"navigate\") {\n continue;\n }\n socket.emit(\"message\", flattedStringify(payload));\n }\n this.messageQueue = [];\n\n this.notifyConnectionListeners(true);\n resolve();\n });\n\n socket.on(\"connect_error\", (err) => {\n console.error(\"[SocketIOTransport] Connection failed:\", err);\n this.notifyConnectionListeners(false);\n reject(err);\n });\n\n socket.on(\"disconnect\", () => {\n console.log(\"[SocketIOTransport] Disconnected\");\n this.notifyConnectionListeners(false);\n });\n\n // Wrap in an arrow function to avoid losing the `this` reference\n socket.on(\"message\", (data) =>\n this.handleServerMessage(flattedParse(data) as ServerMessage)\n );\n });\n }\n\n onConnectionChange(listener: ConnectionStatusListener): () => void {\n this.connectionListeners.add(listener);\n listener(this.isConnected());\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionListeners(connected: boolean): void {\n for (const listener of this.connectionListeners) {\n listener(connected);\n }\n }\n\n public onServerError(listener: ServerErrorListener): () => void {\n this.serverErrorListeners.add(listener);\n // Emit current errors to new listener\n for (const [path, err] of this.serverErrors) listener(path, err);\n return () => {\n this.serverErrorListeners.delete(listener);\n };\n }\n\n private notifyServerError(path: string, error: ServerErrorInfo | null) {\n for (const listener of this.serverErrorListeners) listener(path, error);\n }\n\n private async sendMessage(payload: ClientMessage): Promise<void> {\n if (this.isConnected()) {\n // console.log(\"[SocketIOTransport] Sending:\", payload);\n this.socket!.emit(\"message\", flattedStringify(payload));\n } else {\n // console.log(\"[SocketIOTransport] Queuing message:\", payload);\n this.messageQueue.push(payload);\n }\n }\n\n public mountView(path: string, view: MountedView) {\n if (this.activeViews.has(path)) {\n throw new Error(`Path ${path} is already mounted`);\n }\n this.activeViews.set(path, view);\n void this.sendMessage({\n type: \"mount\",\n path,\n routeInfo: view.routeInfo,\n });\n }\n\n public async navigate(path: string, routeInfo: RouteInfo) {\n await this.sendMessage({\n type: \"navigate\",\n path,\n routeInfo,\n });\n }\n\n public unmount(path: string) {\n void this.sendMessage({ type: \"unmount\", path });\n this.activeViews.delete(path);\n }\n\n public disconnect() {\n this.socket?.disconnect();\n this.socket = null;\n this.messageQueue = [];\n this.connectionListeners.clear();\n this.activeViews.clear();\n this.serverErrors.clear();\n this.serverErrorListeners.clear();\n }\n\n private handleServerMessage(message: ServerMessage) {\n // console.log(\"[PulseClient] Received message:\", message);\n switch (message.type) {\n case \"vdom_init\": {\n const route = this.activeViews.get(message.path);\n if (route) {\n route.onInit(message.vdom);\n }\n // Clear any prior error for this path on successful init\n if (this.serverErrors.has(message.path)) {\n this.serverErrors.delete(message.path);\n this.notifyServerError(message.path, null);\n }\n break;\n }\n case \"vdom_update\": {\n const route = this.activeViews.get(message.path);\n if (!route) {\n console.error(\n `[PulseClient] Received VDOM update for path ${message.path} before initial tree was set.`\n );\n return;\n }\n route.onUpdate(message.ops);\n // Clear any prior error for this path on successful update\n if (this.serverErrors.has(message.path)) {\n this.serverErrors.delete(message.path);\n this.notifyServerError(message.path, null);\n }\n break;\n }\n case \"server_error\": {\n this.serverErrors.set(message.path, message.error);\n this.notifyServerError(message.path, message.error);\n break;\n }\n case \"api_call\": {\n void this.performApiCall(message);\n break;\n }\n case \"navigate_to\": {\n const replace = !!message.replace;\n let dest = message.path || \"\";\n // Normalize protocol-relative URLs to absolute\n if (dest.startsWith(\"//\")) dest = `${window.location.protocol}${dest}`;\n const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(dest);\n if (hasScheme) {\n if (dest.startsWith(\"http://\") || dest.startsWith(\"https://\")) {\n try {\n const url = new URL(dest);\n if (url.origin === window.location.origin) {\n const internal = `${url.pathname}${url.search}${url.hash}`;\n this.frameworkNavigate(internal, { replace });\n } else {\n if (replace) window.location.replace(dest);\n else window.location.assign(dest);\n }\n } catch {\n if (replace) window.location.replace(dest);\n else window.location.assign(dest);\n }\n } else {\n // mailto:, tel:, data:, etc.\n if (replace) window.location.replace(dest);\n else window.location.assign(dest);\n }\n } else {\n // Relative or root-relative path → SPA navigate\n this.frameworkNavigate(dest, { replace });\n }\n break;\n }\n default: {\n console.error(\"Unexpected message:\", message);\n }\n }\n }\n\n private async performApiCall(msg: ServerApiCallMessage) {\n try {\n const res = await fetch(msg.url, {\n method: msg.method || \"GET\",\n headers: {\n ...(msg.headers || {}),\n ...(msg.body != null && !(\"content-type\" in (msg.headers || {}))\n ? { \"content-type\": \"application/json\" }\n : {}),\n },\n body:\n msg.body != null\n ? typeof msg.body === \"string\"\n ? msg.body\n : JSON.stringify(msg.body)\n : undefined,\n credentials: msg.credentials || \"include\",\n });\n const headersObj: Record<string, string> = {};\n res.headers.forEach((v, k) => (headersObj[k] = v));\n let body: any = null;\n const ct = res.headers.get(\"content-type\") || \"\";\n if (ct.includes(\"application/json\")) {\n body = await res.json().catch(() => null);\n } else {\n body = await res.text().catch(() => null);\n }\n const reply: ClientApiResultMessage = {\n type: \"api_result\",\n id: msg.id,\n ok: res.ok,\n status: res.status,\n headers: headersObj,\n body,\n };\n await this.sendMessage(reply);\n } catch (err) {\n const reply: ClientApiResultMessage = {\n type: \"api_result\",\n id: msg.id,\n ok: false,\n status: 0,\n headers: {},\n body: { error: String(err) },\n };\n await this.sendMessage(reply);\n }\n }\n\n public async invokeCallback(path: string, callback: string, args: any[]) {\n await this.sendMessage({\n type: \"callback\",\n path,\n callback,\n args: args.map(extractEvent),\n });\n }\n\n // public getVDOM(path: string): VDOM | null {\n // return this.activeViews.get(path)?.vdom ?? null;\n // }\n}\n",
|
|
12
|
+
"import type { RouteInfo } from \"./helpers\";\nimport type { ClientMountMessage } from \"./messages\";\nimport type { VDOM, VDOMUpdate } from \"./vdom\";\nimport { extractEvent } from \"./serialize/events\";\nimport {\n stringify as flattedStringify,\n parse as flattedParse,\n} from \"./serialize/flatted\";\n\nimport { io, Socket } from \"socket.io-client\";\nimport type {\n ClientApiResultMessage,\n ClientMessage,\n ServerApiCallMessage,\n ServerErrorInfo,\n ServerMessage,\n} from \"./messages\";\nimport type { NavigateFunction } from \"react-router\";\n\nexport interface MountedView {\n routeInfo: RouteInfo;\n onInit: (vdom: VDOM) => void;\n onUpdate: (ops: VDOMUpdate[]) => void;\n}\nexport type ConnectionStatusListener = (connected: boolean) => void;\nexport type ServerErrorListener = (\n path: string,\n error: ServerErrorInfo | null\n) => void;\n\nexport interface PulseClient {\n // Connection management\n connect(): Promise<void>;\n disconnect(): void;\n isConnected(): boolean;\n onConnectionChange(listener: ConnectionStatusListener): () => void;\n // Messages\n navigate(path: string, routeInfo: RouteInfo): Promise<void>;\n leave(path: string): Promise<void>;\n invokeCallback(path: string, callback: string, args: any[]): Promise<void>;\n // VDOM subscription\n mountView(path: string, view: MountedView): () => void;\n}\n\nexport class PulseSocketIOClient {\n private activeViews: Map<string, MountedView>;\n private socket: Socket | null = null;\n private messageQueue: ClientMessage[];\n private connectionListeners: Set<ConnectionStatusListener> = new Set();\n private serverErrors: Map<string, ServerErrorInfo> = new Map();\n private serverErrorListeners: Set<ServerErrorListener> = new Set();\n\n constructor(\n private url: string,\n private renderId: string,\n private frameworkNavigate: NavigateFunction\n ) {\n this.socket = null;\n this.activeViews = new Map();\n this.messageQueue = [];\n }\n public isConnected(): boolean {\n return this.socket?.connected ?? false;\n }\n\n public async connect(): Promise<void> {\n if (this.socket) {\n return;\n }\n return new Promise((resolve, reject) => {\n const socket = io(this.url, {\n transports: [\"websocket\", \"webtransport\"],\n auth: { renderId: this.renderId },\n });\n this.socket = socket;\n\n socket.on(\"connect\", () => {\n console.log(\"[SocketIOTransport] Connected:\", this.socket?.id);\n // Make sure to send a navigate payload for all the routes\n for (const [path, route] of this.activeViews) {\n socket.emit(\n \"message\",\n flattedStringify({\n type: \"mount\",\n path: path,\n routeInfo: route.routeInfo,\n } satisfies ClientMountMessage)\n );\n }\n\n for (const payload of this.messageQueue) {\n // Already sent above\n if (payload.type === \"mount\" && this.activeViews.has(payload.path)) {\n continue;\n }\n // We're remounting all the routes, so no need to navigate\n if (payload.type === \"navigate\") {\n continue;\n }\n socket.emit(\"message\", flattedStringify(payload));\n }\n this.messageQueue = [];\n\n this.notifyConnectionListeners(true);\n resolve();\n });\n\n socket.on(\"connect_error\", (err) => {\n console.error(\"[SocketIOTransport] Connection failed:\", err);\n this.notifyConnectionListeners(false);\n reject(err);\n });\n\n socket.on(\"disconnect\", () => {\n console.log(\"[SocketIOTransport] Disconnected\");\n this.notifyConnectionListeners(false);\n });\n\n // Wrap in an arrow function to avoid losing the `this` reference\n socket.on(\"message\", (data) =>\n this.handleServerMessage(flattedParse(data) as ServerMessage)\n );\n });\n }\n\n onConnectionChange(listener: ConnectionStatusListener): () => void {\n this.connectionListeners.add(listener);\n listener(this.isConnected());\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionListeners(connected: boolean): void {\n for (const listener of this.connectionListeners) {\n listener(connected);\n }\n }\n\n public onServerError(listener: ServerErrorListener): () => void {\n this.serverErrorListeners.add(listener);\n // Emit current errors to new listener\n for (const [path, err] of this.serverErrors) listener(path, err);\n return () => {\n this.serverErrorListeners.delete(listener);\n };\n }\n\n private notifyServerError(path: string, error: ServerErrorInfo | null) {\n for (const listener of this.serverErrorListeners) listener(path, error);\n }\n\n private async sendMessage(payload: ClientMessage): Promise<void> {\n if (this.isConnected()) {\n // console.log(\"[SocketIOTransport] Sending:\", payload);\n this.socket!.emit(\"message\", flattedStringify(payload));\n } else {\n // console.log(\"[SocketIOTransport] Queuing message:\", payload);\n this.messageQueue.push(payload);\n }\n }\n\n public mountView(path: string, view: MountedView) {\n if (this.activeViews.has(path)) {\n throw new Error(`Path ${path} is already mounted`);\n }\n this.activeViews.set(path, view);\n void this.sendMessage({\n type: \"mount\",\n path,\n routeInfo: view.routeInfo,\n });\n }\n\n public async navigate(path: string, routeInfo: RouteInfo) {\n await this.sendMessage({\n type: \"navigate\",\n path,\n routeInfo,\n });\n }\n\n public unmount(path: string) {\n void this.sendMessage({ type: \"unmount\", path });\n this.activeViews.delete(path);\n }\n\n public disconnect() {\n this.socket?.disconnect();\n this.socket = null;\n this.messageQueue = [];\n this.connectionListeners.clear();\n this.activeViews.clear();\n this.serverErrors.clear();\n this.serverErrorListeners.clear();\n }\n\n private handleServerMessage(message: ServerMessage) {\n // console.log(\"[PulseClient] Received message:\", message);\n switch (message.type) {\n case \"vdom_init\": {\n const route = this.activeViews.get(message.path);\n // Ignore messages for paths that are not mounted\n if (!route) return;\n if (route) {\n route.onInit(message.vdom);\n }\n // Clear any prior error for this path on successful init\n if (this.serverErrors.has(message.path)) {\n this.serverErrors.delete(message.path);\n this.notifyServerError(message.path, null);\n }\n break;\n }\n case \"vdom_update\": {\n const route = this.activeViews.get(message.path);\n if (!route) return; // Not an active path; discard\n route.onUpdate(message.ops);\n // Clear any prior error for this path on successful update\n if (this.serverErrors.has(message.path)) {\n this.serverErrors.delete(message.path);\n this.notifyServerError(message.path, null);\n }\n break;\n }\n case \"server_error\": {\n if (!this.activeViews.has(message.path)) return; // discard for inactive paths\n this.serverErrors.set(message.path, message.error);\n this.notifyServerError(message.path, message.error);\n break;\n }\n case \"api_call\": {\n void this.performApiCall(message);\n break;\n }\n case \"navigate_to\": {\n // `navigate_to` is navigational; allow regardless of activeViews membership\n const replace = !!message.replace;\n let dest = message.path || \"\";\n // Normalize protocol-relative URLs to absolute\n if (dest.startsWith(\"//\")) dest = `${window.location.protocol}${dest}`;\n const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(dest);\n if (hasScheme) {\n if (dest.startsWith(\"http://\") || dest.startsWith(\"https://\")) {\n try {\n const url = new URL(dest);\n if (url.origin === window.location.origin) {\n const internal = `${url.pathname}${url.search}${url.hash}`;\n this.frameworkNavigate(internal, { replace });\n } else {\n if (replace) window.location.replace(dest);\n else window.location.assign(dest);\n }\n } catch {\n if (replace) window.location.replace(dest);\n else window.location.assign(dest);\n }\n } else {\n // mailto:, tel:, data:, etc.\n if (replace) window.location.replace(dest);\n else window.location.assign(dest);\n }\n } else {\n // Relative or root-relative path → SPA navigate\n this.frameworkNavigate(dest, { replace });\n }\n break;\n }\n default: {\n console.error(\"Unexpected message:\", message);\n }\n }\n }\n\n private async performApiCall(msg: ServerApiCallMessage) {\n try {\n const res = await fetch(msg.url, {\n method: msg.method || \"GET\",\n headers: {\n ...(msg.headers || {}),\n ...(msg.body != null && !(\"content-type\" in (msg.headers || {}))\n ? { \"content-type\": \"application/json\" }\n : {}),\n },\n body:\n msg.body != null\n ? typeof msg.body === \"string\"\n ? msg.body\n : JSON.stringify(msg.body)\n : undefined,\n credentials: msg.credentials || \"include\",\n });\n const headersObj: Record<string, string> = {};\n res.headers.forEach((v, k) => (headersObj[k] = v));\n let body: any = null;\n const ct = res.headers.get(\"content-type\") || \"\";\n if (ct.includes(\"application/json\")) {\n body = await res.json().catch(() => null);\n } else {\n body = await res.text().catch(() => null);\n }\n const reply: ClientApiResultMessage = {\n type: \"api_result\",\n id: msg.id,\n ok: res.ok,\n status: res.status,\n headers: headersObj,\n body,\n };\n await this.sendMessage(reply);\n } catch (err) {\n const reply: ClientApiResultMessage = {\n type: \"api_result\",\n id: msg.id,\n ok: false,\n status: 0,\n headers: {},\n body: { error: String(err) },\n };\n await this.sendMessage(reply);\n }\n }\n\n public async invokeCallback(path: string, callback: string, args: any[]) {\n await this.sendMessage({\n type: \"callback\",\n path,\n callback,\n args: args.map(extractEvent),\n });\n }\n\n // public getVDOM(path: string): VDOM | null {\n // return this.activeViews.get(path)?.vdom ?? null;\n // }\n}\n",
|
|
13
13
|
"import { io, Socket } from \"socket.io-client\";\nimport type { ServerMessage, ClientMessage } from \"./messages\";\n\n// =================================================================\n// Transport Abstraction\n// =================================================================\n\nexport type MessageListener = (message: ServerMessage) => void;\nexport type ConnectionStatusListener = (connected: boolean) => void;\n\nexport interface Transport {\n connect(listener: MessageListener): Promise<void>;\n disconnect(): void;\n sendMessage(payload: ClientMessage): Promise<void>;\n isConnected(): boolean;\n onConnectionChange(listener: ConnectionStatusListener): () => void;\n}\n\n// =================================================================\n// Socket.IO Transport\n// =================================================================\n\nexport class SocketIOTransport implements Transport {\n private socket: Socket | null = null;\n private listener: MessageListener | null = null;\n private messageQueue: ClientMessage[] = [];\n private connectionListeners: Set<ConnectionStatusListener> = new Set();\n\n constructor(private url: string) {}\n\n connect(listener: MessageListener): Promise<void> {\n this.listener = listener;\n return new Promise((resolve, reject) => {\n this.socket = io(this.url, {\n transports: [\"websocket\"],\n });\n\n this.socket.on(\"connect\", () => {\n console.log(\"[SocketIOTransport] Connected:\", this.socket?.id);\n\n for (const payload of this.messageQueue) {\n // console.log(\"[SocketIOTransport] Sending queued message:\", payload);\n this.socket?.emit(\"message\", payload);\n }\n this.messageQueue = [];\n\n this.notifyConnectionListeners(true);\n resolve();\n });\n\n this.socket.on(\"connect_error\", (err) => {\n console.error(\"[SocketIOTransport] Connection failed:\", err);\n this.notifyConnectionListeners(false);\n reject(err);\n });\n\n this.socket.on(\"disconnect\", () => {\n console.log(\"[SocketIOTransport] Disconnected\");\n this.notifyConnectionListeners(false);\n });\n\n this.socket.on(\"message\", (data: ServerMessage) => {\n // console.log(\"[SocketIOTransport] Received message:\", data);\n this.listener?.(data);\n });\n });\n }\n\n disconnect(): void {\n this.socket?.disconnect();\n this.socket = null;\n this.listener = null;\n this.messageQueue = [];\n this.connectionListeners.clear();\n }\n\n async sendMessage(payload: ClientMessage): Promise<void> {\n if (this.isConnected()) {\n // console.log(\"[SocketIOTransport] Sending:\", payload);\n this.socket!.emit(\"message\", payload);\n } else {\n // console.log(\"[SocketIOTransport] Queuing message:\", payload);\n this.messageQueue.push(payload);\n }\n }\n\n isConnected(): boolean {\n return this.socket?.connected || false;\n }\n\n onConnectionChange(listener: ConnectionStatusListener): () => void {\n this.connectionListeners.add(listener);\n listener(this.isConnected());\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionListeners(connected: boolean): void {\n for (const listener of this.connectionListeners) {\n listener(connected);\n }\n }\n}\n\n// =================================================================\n// In-Memory Transport (for testing)\n// =================================================================\n\nexport class InMemoryTransport implements Transport {\n private listener: MessageListener | null = null;\n private connected = false;\n private connectionListeners: Set<ConnectionStatusListener> = new Set();\n\n // Simulate server-side message dispatching\n public dispatchMessage(message: ServerMessage) {\n if (this.listener) {\n // Simulate async behavior\n setTimeout(() => this.listener?.(message), 0);\n }\n }\n\n async connect(listener: MessageListener): Promise<void> {\n this.listener = listener;\n this.connected = true;\n console.log(\"[InMemoryTransport] Connected.\");\n }\n\n disconnect(): void {\n this.listener = null;\n this.connected = false;\n console.log(\"[InMemoryTransport] Disconnected.\");\n }\n\n async sendMessage(payload: ClientMessage): Promise<void> {\n if (!this.connected) {\n throw new Error(\"[InMemoryTransport] Not connected.\");\n }\n console.log(`[InMemoryTransport] Sent message:`, payload);\n // In a real test setup, this might trigger a simulated server response\n // via `dispatchMessage`.\n }\n\n isConnected(): boolean {\n return this.connected;\n }\n\n onConnectionChange(listener: ConnectionStatusListener): () => void {\n this.connectionListeners.add(listener);\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n}\n",
|
|
14
14
|
"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}",
|
|
15
15
|
"// 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"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "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ACA,YACA,cACA,UACA,aACA,QACA,YACA,qBACA,kBACA,eACA,oBACA,WACF,EAEM,GAAiB,EAAyB,EAAE,GAAc,CAC9D,QAAS,EACX,CAAC,EAEK,GACJ,EAAkC,EAAE,EAAgB,EAEhD,GAA6B,EAA6B,EAC9D,EACF,EAEA,SAAS,CAAsB,CAAC,EAAkB,CAChD,MAAO,IACF,GAAe,CAAG,KAClB,GAAwB,CAAuB,KAC/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,EAAe,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,EAEt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",
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": "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AEA,SAAS,CAAsB,CAAC,EAAkB,CAChD,MAAO,IACF,GAAe,CAAG,KAClB,GAAwB,CAAuB,KAC/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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",
|
|
18
|
+
"debugId": "E18861139DDB9F6B64756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pulse-ui-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"react-router": "^7"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "rm -rf dist || true && bun build ./src/index.ts --outdir=dist --format=esm --target=browser --minify --sourcemap=external --external react --external react-dom --external react-router --external socket.io-client && tsc -p tsconfig.build.json",
|
|
37
|
-
"build:dev": "rm -rf dist || true && bun build ./src/index.ts --outdir=dist --format=esm --target=browser --sourcemap=inline --external react --external react-dom --external react-router --external socket.io-client && tsc -p tsconfig.build.json",
|
|
36
|
+
"build": "rm -rf dist || true && NODE_ENV=production bun build ./src/index.ts --outdir=dist --format=esm --target=browser --minify --sourcemap=external --define process.env.NODE_ENV=\\\"production\\\" --define __DEV__=false --external react --external react-dom --external react-router --external socket.io-client && tsc -p tsconfig.build.json",
|
|
37
|
+
"build:dev": "rm -rf dist || true && NODE_ENV=development bun build ./src/index.ts --outdir=dist --format=esm --target=browser --sourcemap=inline --define process.env.NODE_ENV=\\\"development\\\" --external react --external react-dom --external react-router --external socket.io-client && tsc -p tsconfig.build.json",
|
|
38
38
|
"prepublishOnly": "bun run build"
|
|
39
39
|
}
|
|
40
40
|
}
|