1import{b as F,d as V,h as M,i as ee,j as W,m as O,n as D,o as H,q as S,r as g,s as U}from"/build/_shared/chunk-C5QLHMJW.js";import{Fa as re,I as $,N as te,P,U as Y,Z as ae,da as ne,ia as K,n as G,w as se}from"/build/_shared/chunk-7DTFGDJT.js";var ce=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),j={randomUUID:ce};var z,ue=new Uint8Array(16);function X(){if(!z){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");z=crypto.getRandomValues.bind(crypto)}return z(ue)}var f=[];for(let e=0;e<256;++e)f.push((e+256).toString(16).slice(1));function oe(e,s=0){return(f[e[s+0]]+f[e[s+1]]+f[e[s+2]]+f[e[s+3]]+"-"+f[e[s+4]]+f[e[s+5]]+"-"+f[e[s+6]]+f[e[s+7]]+"-"+f[e[s+8]]+f[e[s+9]]+"-"+f[e[s+10]]+f[e[s+11]]+f[e[s+12]]+f[e[s+13]]+f[e[s+14]]+f[e[s+15]]).toLowerCase()}function pe(e,s,a){if(j.randomUUID&&!s&&!e)return j.randomUUID();e=e||{};let t=e.random??e.rng?.()??X();if(t.length<16)throw new Error("Random bytes length must be >= 16");if(t[6]=t[6]&15|64,t[8]=t[8]&63|128,s){if(a=a||0,a<0||a+16>s.length)throw new RangeError(`UUID byte range ${a}:${a+15} is out of buffer bounds`);for(let n=0;n<16;++n)s[a+n]=t[n];return s}return oe(t)}var R=pe;var I=e=>({context:s})=>{let{count:a,include:t,exclude:n,responseType:r="message.received"}=e;return{count:a,domain:s.domain,from:s.connectTo,include:t?Array.isArray(t)?t:[t]:[],exclude:n?Array.isArray(n)?n:[n]:[],responseType:r,target:s.target,to:s.name}},le=e=>s=>{let{data:a}=s;return(e.include.length?e.include.includes(a.type):!0)&&(e.exclude.length?!e.exclude.includes(a.type):!0)&&a.domain===e.domain&&a.from===e.from&&a.to===e.to&&(!e.target||s.source===e.target)},ge=e=>s=>({type:e,message:s}),me=te(()=>P(window,"message")),B=e=>W(({input:s})=>me.pipe(e?$(e):G(),Y(le(s)),$(ge(s.responseType)),s.count?G(ae(s.count),ne(a=>a),K(s.count)):G())),x="sanity/comlink",he=3e3,fe=1e4;var ye=500,q="comlink/response",w="comlink/heartbeat",A="comlink/disconnect",_="comlink/handshake/syn",C="comlink/handshake/syn-ack",N="comlink/handshake/ack",be=[_,C,N],Pe=[q,A,w,...be],Ee=e=>s=>s.pipe(K(1),$(()=>{throw new Error(e)})),L=()=>U({types:{},actors:{listen:W(({input:e})=>{let s=e.signal?P(e.signal,"abort").pipe(Ee(`Request ${e.requestId} aborted`)):se,a=t=>t.data?.type===q&&t.data?.responseTo===e.requestId&&!!t.source&&e.sources.has(t.source);return P(window,"message").pipe(Y(a),K(e.sources.size),re(s))})},actions:{"send message":({context:e},s)=>{let{sources:a,targetOrigin:t}=e,{message:n}=s;a.forEach(r=>{r.postMessage(n,{targetOrigin:t})})},"on success":H(({context:e})=>e.parentRef,({context:e,self:s})=>(e.response&&e.resolvable?.resolve(e.response),{type:"request.success",requestId:s.id,response:e.response,responseTo:e.responseTo})),"on fail":H(({context:e})=>e.parentRef,({context:e,self:s})=>(e.suppressWarnings||console.warn(`[@sanity/comlink] Received no response to message '${e.type}' on client '${e.from}' (ID: '${e.id}').`),e.resolvable?.reject(new Error("No response received")),{type:"request.failed",requestId:s.id})),"on abort":H(({context:e})=>e.parentRef,({context:e,self:s})=>(e.resolvable?.reject(new Error("Request aborted")),{type:"request.aborted",requestId:s.id}))},guards:{expectsResponse:({context:e})=>e.expectResponse},delays:{initialTimeout:0,responseTimeout:({context:e})=>e.responseTimeout??he}}).createMachine({context:({input:e})=>({channelId:e.channelId,data:e.data,domain:e.domain,expectResponse:e.expectResponse??!1,from:e.from,id:`msg-${R()}`,parentRef:e.parentRef,resolvable:e.resolvable,response:null,responseTimeout:e.responseTimeout,responseTo:e.responseTo,signal:e.signal,sources:e.sources instanceof Set?e.sources:new Set([e.sources]),suppressWarnings:e.suppressWarnings,targetOrigin:e.targetOrigin,to:e.to,type:e.type}),initial:"idle",on:{abort:".aborted"},states:{idle:{after:{initialTimeout:[{target:"sending"}]}},sending:{entry:{type:"send message",params:({context:e})=>{let{channelId:s,data:a,domain:t,from:n,id:r,responseTo:d,to:c,type:y}=e;return{message:{channelId:s,data:a,domain:t,from:n,id:r,to:c,type:y,responseTo:d}}}},always:[{guard:"expectsResponse",target:"awaiting"},"success"]},awaiting:{invoke:{id:"listen for response",src:"listen",input:({context:e})=>({requestId:e.id,sources:e.sources,signal:e.signal}),onError:"aborted"},after:{responseTimeout:"failed"},on:{message:{actions:O({response:({event:e})=>e.data.data,responseTo:({event:e})=>e.data.responseTo}),target:"success"}}},failed:{type:"final",entry:"on fail"},success:{type:"final",entry:"on success"},aborted:{type:"final",entry:"on abort"}},output:({context:e,self:s})=>({requestId:s.id,response:e.response,responseTo:e.responseTo})}),Te=ee(({sendBack:e,input:s})=>{let a=()=>{e(s.event)};s.immediate&&a();let t=setInterval(a,s.interval);return()=>{clearInterval(t)}}),ie=()=>U({types:{},actors:{requestMachine:L(),listen:B(),sendBackAtInterval:Te},actions:{"buffer message":S(({enqueue:e})=>{e.assign({buffer:({event:s,context:a})=>(g(s,"post"),[...a.buffer,s.data])}),e.emit(({event:s})=>(g(s,"post"),{type:"buffer.added",message:s.data}))}),"create request":O({requests:({context:e,event:s,self:a,spawn:t})=>{g(s,"request");let n=(Array.isArray(s.data)?s.data:[s.data]).map(r=>{let d=`req-${R()}`;return t("requestMachine",{id:d,input:{channelId:e.channelId,data:r.data,domain:e.domain,expectResponse:r.expectResponse,from:e.name,parentRef:a,responseTo:r.responseTo,sources:e.target,targetOrigin:e.targetOrigin,to:e.connectTo,type:r.type}})});return[...e.requests,...n]}}),"emit received message":S(({enqueue:e})=>{e.emit(({event:s})=>(g(s,"message.received"),{type:"message",message:s.message.data}))}),"emit status":D((e,s)=>({type:"status",status:s.status})),"post message":M(({event:e})=>(g(e,"post"),{type:"request",data:{data:e.data.data,expectResponse:!0,type:e.data.type}})),"remove request":S(({context:e,enqueue:s,event:a})=>{g(a,["request.success","request.failed","request.aborted"]),V(a.requestId),s.assign({requests:e.requests.filter(({id:t})=>t!==a.requestId)})}),respond:M(({event:e})=>(g(e,"response"),{type:"request",data:{data:e.data,type:q,responseTo:e.respondTo}})),"send handshake ack":M({type:"request",data:{type:N}}),"send disconnect":M(()=>({type:"request",data:{type:A}})),"send handshake syn":M({type:"request",data:{type:_}}),"send pending messages":S(({enqueue:e})=>{e.raise(({context:s})=>({type:"request",data:s.buffer.map(({data:a,type:t})=>({data:a,type:t}))})),e.emit(({context:s})=>({type:"buffer.flushed",messages:s.buffer})),e.assign({buffer:[]})}),"set target":O({target:({event:e})=>(g(e,"target.set"),e.target)})},guards:{"has target":({context:e})=>!!e.target,"should send heartbeats":({context:e})=>e.heartbeat}}).createMachine({id:"connection",context:({input:e})=>({id:e.id||`${e.name}-${R()}`,buffer:[],channelId:`chn-${R()}`,connectTo:e.connectTo,domain:e.domain??x,heartbeat:e.heartbeat??!1,name:e.name,requests:[],target:e.target,targetOrigin:e.targetOrigin}),on:{"target.set":{actions:"set target"},"request.success":{actions:"remove request"},"request.failed":{actions:"remove request"}}
1,initial:"idle",states:{idle:{entry:[{type:"emit status",params:{status:"idle"}}],on:{connect:{target:"handshaking",guard:"has target"},post:{actions:"buffer message"}}},handshaking:{id:"handshaking",entry:[{type:"emit status",params:{status:"handshaking"}}],invoke:[{id:"send syn",src:"sendBackAtInterval",input:()=>({event:{type:"syn"},interval:ye,immediate:!0})},{id:"listen for handshake",src:"listen",input:e=>I({include:C,count:1})(e)}],on:{syn:{actions:"send handshake syn"},request:{actions:"create request"},post:{actions:"buffer message"},"message.received":{target:"connected"},disconnect:{target:"disconnected"}},exit:"send handshake ack"},connected:{entry:["send pending messages",{type:"emit status",params:{status:"connected"}}],invoke:{id:"listen for messages",src:"listen",input:I({exclude:[q,w]})},on:{post:{actions:"post message"},request:{actions:"create request"},response:{actions:"respond"},"message.received":{actions:"emit received message"},disconnect:{target:"disconnected"}},initial:"heartbeat",states:{heartbeat:{initial:"checking",states:{checking:{always:{guard:"should send heartbeats",target:"sending"}},sending:{on:{"request.failed":{target:"#handshaking"}},invoke:{id:"send heartbeat",src:"sendBackAtInterval",input:()=>({event:{type:"post",data:{type:w,data:void 0}},interval:2e3,immediate:!1})}}}}}},disconnected:{id:"disconnected",entry:["send disconnect",{type:"emit status",params:{status:"disconnected"}}],on:{request:{actions:"create request"},post:{actions:"buffer message"},connect:{target:"handshaking",guard:"has target"}}}}}),J=(e,s=ie())=>{let a=e.id||`${e.name}-${R()}`,t=F(s,{input:{...e,id:a}}),n=new Map,r=new Map,d=(o,m,i)=>{let u=n.get(o)||new Set;n.has(o)||n.set(o,u),u.add(m);let l=r.get(o);if(l){let E=i?.replay??1;
1Array.from(l).slice(-E).forEach(async({data:v,id:de})=>{let Z=await m(v);Z&&t.send({type:"response",respondTo:de,data:Z})}),r.delete(o)}return()=>{u.delete(m)}},c=()=>{t.send({type:"connect"})},y=()=>{t.send({type:"disconnect"})},k=(o,m)=>{let{unsubscribe:i}=t.on("status",u=>{m&&u.status!==m||o(u.status)});return i},T=o=>{t.send({type:"target.set",target:o})},p=(o,m)=>{let i={type:o,data:m};t.send({type:"post",data:i})};t.on("message",async({message:o})=>{let m=n.get(o.type);if(m){m.forEach(async u=>{let l=await u(o.data);l&&t.send({type:"response",respondTo:o.id,data:l})});return}let i=r.get(o.type);i?i.add(o):r.set(o.type,new Set([o]))});let h=()=>{t.stop()},b=()=>(t.start(),h);return{actor:t,connect:c,disconnect:y,id:a,name:e.name,machine:s,on:d,onStatus:k,post:p,setTarget:T,start:b,stop:h,get target(){return t.getSnapshot().context.target}}},Q=e=>{e.disconnect(),setTimeout(()=>{e.stop()},0)},ke=()=>{},Ke=e=>{let{targetOrigin:s}=e,a=new Set,t=new Set;return{addTarget:n=>{if(a.has(n))return ke;if(!a.size||!t.size)return a.add(n),t.forEach(d=>{d.connections.forEach(c=>{c.setTarget(n),c.connect()})}),()=>{a.delete(n),t.forEach(d=>{d.connections.forEach(c=>{c.target===n&&c.disconnect()})})};a.add(n);let r=new Set;return t.forEach(d=>{let c=J({...d.input,target:n,targetOrigin:s},d.machine);r.add(c),d.connections.add(c),d.subscribers.forEach(({type:y,handler:k,unsubscribers:T})=>{T.push(c.on(y,k))}),d.internalEventSubscribers.forEach(({type:y,handler:k,unsubscribers:T})=>{T.push(c.actor.on(y,k).unsubscribe)}),d.statusSubscribers.forEach(({handler:y,unsubscribers:k})=>{k.push(c.onStatus(T=>y({connection:c.id,status:T})))}),c.start(),c.connect()}),()=>{a.delete(n),r.forEach(d=>{Q(d),t.forEach(c=>{c.connections.delete(d)})})}},createChannel:(n,r=ie())=>{let d={connections:new Set,input:n,internalEventSubscribers:new Set,machine:r,statusSub
1scribers:new Set,subscribers:new Set};t.add(d);let{connections:c,internalEventSubscribers:y,statusSubscribers:k,subscribers:T}=d;if(a.size)a.forEach(i=>{let u=J({...n,target:i,targetOrigin:s},r);c.add(u)});else{let i=J({...n,targetOrigin:s},r);c.add(i)}let p=(...i)=>{let[u,l]=i;c.forEach(E=>{E.post(u,l)})},h=(i,u)=>{let l=[];c.forEach(v=>{l.push(v.on(i,u))});let E={type:i,handler:u,unsubscribers:l};return T.add(E),()=>{l.forEach(v=>v()),T.delete(E)}},b=(i,u)=>{let l=[];c.forEach(v=>{l.push(v.actor.on(i,u).unsubscribe)});let E={type:i,handler:u,unsubscribers:l};return y.add(E),()=>{l.forEach(v=>v()),y.delete(E)}},o=i=>{let u=[];c.forEach(E=>{u.push(E.onStatus(v=>i({connection:E.id,status:v})))});let l={handler:i,unsubscribers:u};return k.add(l),()=>{u.forEach(E=>E()),k.delete(l)}},m=()=>{let i=d.connections;i.forEach(Q),i.clear(),t.delete(d)};return{on:h,onInternalEvent:b,onStatus:o,post:p,start:()=>(c.forEach(i=>{i.start(),i.connect()}),m),stop:m}},destroy:()=>{t.forEach(({connections:n})=>{n.forEach(Q),n.clear()}),t.clear(),a.clear()}}},ve=()=>U({types:{},actors:{requestMachine:L(),listen:B()},actions:{"buffer handshake":O({handshakeBuffer:({event:e,context:s})=>(g(e,"message.received"),[...s.handshakeBuffer,e])}),"buffer message":S(({enqueue:e})=>{e.assign({buffer:({event:s,context:a})=>(g(s,"post"),[...a.buffer,{data:s.data,resolvable:s.resolvable,options:s.options}])}),e.emit(({event:s})=>(g(s,"post"),{type:"buffer.added",message:s.data}))}),"create request":O({requests:({context:e,event:s,self:a,spawn:t})=>{g(s,"request");let n=(Array.isArray(s.data)?s.data:[s.data]).map(r=>{let d=`req-${R()}`;return t("requestMachine",{id:d,input:{channelId:e.channelId,data:r.data,domain:e.domain,expectResponse:r.expectResponse,from:e.name,parentRef:a,resolvable:r.resolvable,responseTimeout:r.options?.responseTimeout,responseTo:r.responseTo,signal:r.options?.signal,sources:e.target,suppressWarnings:r.options?.suppressWarnings,targetOrigin:e.targetOrigin,to:e.connectTo,type:r.type}})});return[...e.requests,...n]}}),"emit heartbeat":D(()=>({type:"heartbeat"})),"emit received message":S(({enqueue:e})=>{e.emit(({event:s})=>(g(s,"message.received"),{type:"message",message:s.message.data}))}),"emit status":D((e,s)=>({type:"status",status:s.status})),"post message":M(({event:e})=>(g(e,"post"),{type:"request",data:{data:e.data.data,expectResponse:!!e.resolvable,type:e.data.type,resolvable:e.resolvable,options:e.options}})),"process pending handshakes":S(({context:e,enqueue:s})=>{e.handshakeBuffer.forEach(a=>s.raise(a)),s.assign({handshakeBuffer:[]})}),"remove request":S(({context:e,enqueue:s,event:a})=>{g(a,["request.success","request.failed","request.aborted"]),V(a.requestId),s.assign({requests:e.requests.filter(({id:t})=>t!==a.requestId)})}),"send response":M(({event:e})=>(g(e,["message.received","heartbeat.received"]),{type:"request",data:{type:q,responseTo:e.message.data.id,data:void 0}})),"send handshake syn ack":M({type:"request",data:{type:C}}),"send pending messages":S(({enqueue:e})=>{e.raise(({context:s})=>({type:"request",data:s.buffer.map(({data:a,resolvable:t,options:n})=>({data:a.data,type:a.type,expectResponse:!!t,resolvable:t,options:n}))})),e.emit(({context:s})=>({type:"buffer.flushed",messages:s.buffer.map(({data:a})=>a)})),e.assign({buffer:[]})}),"set connection config":O({channelId:({event:e})=>(g(e,"handshake.syn"),e.message.data.channelId),target:({event:e})=>(g(e,"handshake.syn"),e.message.source||void 0),targetOrigin:({event:e})=>(g(e,"handshake.syn"),e.message.origin)})},guards:{hasSource:({context:e})=>e.target!==null}}).createMachine({id:"node",context:({input:e})=>({buffer:[],channelId:null,connectTo:e.connectTo,domain:e.domain??x,handshakeBuffer:[],name:e.name,requests:[],target:void 0,targetOrigin:null}),invoke:{id:"listen for handshake syn",src:"listen",input:I({include:_,responseType:"handshake.syn"})},on:{"request.success":{actions:"remove request"},"request.failed":{actions:"remove request"},"request.aborted":{actions:"remove request"},"handshake.syn":{actions:"set connection config",target:".handshaking"}}
1,initial:"idle",states:{idle:{entry:[{type:"emit status",params:{status:"idle"}}],on:{post:{actions:"buffer message"}}},handshaking:{guard:"hasSource",entry:["send handshake syn ack",{type:"emit status",params:{status:"handshaking"}}],invoke:[{id:"listen for handshake ack",src:"listen",input:I({include:N,count:1,responseType:"handshake.complete"}),onDone:"connected"},{id:"listen for disconnect",src:"listen",input:I({include:A,count:1,responseType:"disconnect"})},{id:"listen for messages",src:"listen",input:I({exclude:[A,_,N,w,q]})}],on:{request:{actions:"create request"},post:{actions:"buffer message"},"message.received":{actions:"buffer handshake"},disconnect:{target:"idle"}}},connected:{entry:["process pending handshakes","send pending messages",{type:"emit status",params:{status:"connected"}}],invoke:[{id:"listen for messages",src:"listen",input:I({exclude:[A,_,N,w,q]})},{id:"listen for heartbeat",src:"listen",input:I({include:w,responseType:"heartbeat.received"})},{id:"listen for disconnect",src:"listen",input:I({include:A,count:1,responseType:"disconnect"})}],on:{request:{actions:"create request"},post:{actions:"post message"},disconnect:{target:"idle"},"message.received":{actions:["send response","emit received message"]},"heartbeat.received":{actions:["send response","emit heartbeat"]}}}}}),Be=(e,s=ve())=>{let a=F(s,{input:e}),t=new Map,n=new Map,r=(p,h,b)=>{let o=t.get(p)||new Set;t.has(p)||t.set(p,o),o.add(h);let m=n.get(p);if(m){let i=b?.replay??1;
1Array.from(m).slice(-i).forEach(({data:u})=>h(u)),n.delete(p)}return()=>{o.delete(h)}},d,c=(p,h)=>{let{unsubscribe:b}=a.on("status",o=>{d=o.status,!(h&&o.status!==h)&&p(o.status)});return d&&p(d),b},y=(p,h)=>{let b={type:p,data:h};a.send({type:"post",data:b})},k=(p,h,b)=>{let{responseTimeout:o=fe,signal:m,suppressWarnings:i}=b||{},u=Promise.withResolvers(),l={type:p,data:h};return a.send({type:"post",data:l,resolvable:u,options:{responseTimeout:o,signal:m,suppressWarnings:i}}),u.promise};a.on("message",({message:p})=>{let h=t.get(p.type);if(h){h.forEach(o=>o(p.data));return}let b=n.get(p.type);b?b.add(p):n.set(p.type,new Set([p]))});let T=()=>{a.stop()};return{actor:a,fetch:k,machine:s,on:r,onStatus:c,post:y,start:()=>(a.start(),T),stop:T}};var Se={"handshake/syn":_,"handshake/syn-ack":C,"handshake/ack":N,"channel/response":q,"channel/heartbeat":w,"channel/disconnect":A,"overlay/focus":"visual-editing/focus","overlay/navigate":"visual-editing/navigate","overlay/toggle":"visual-editing/toggle","presentation/toggleOverlay":"presentation/toggle-overlay"},qe={[_]:"handshake/syn",[C]:"handshake/syn-ack",[N]:"handshake/ack",[q]:"channel/response",[w]:"channel/heartbeat",[A]:"channel/disconnect","visual-editing/focus":"overlay/focus","visual-editing/navigate":"overlay/navigate","visual-editing/toggle":"overlay/toggle","presentation/toggle-overlay":"presentation/toggleOverlay"},Me=e=>{let{data:s}=e;return s&&typeof s=="object"&&"domain"in s&&"type"in s&&"from"in s&&"to"in s&&(s.domain==="sanity/channels"&&(s.domain=x),s.to==="overlays"&&(s.to="visual-editing"),s.from==="overlays"&&(s.from="visual-editing"),s.channelId=s.connectionId,delete s.connectionId,s.type=Se[s.type]??s.type),e},Ie=e=>{let{channelId:s,...a}=e,t={...a,connectionId:s};return t.domain===x&&(t.domain="sanity/channels"),t.to==="visual-editing"&&(t.to="overlays"),t.from==="visual-editing"&&(t.from="overlays"),t.type=qe[t.type]??t.type,t.type==="channel/response"&&t.responseTo&&!t.data&&(t.data={responseTo:t.responseTo}),(t.type==="handshake/syn"||t.type==="handshake/syn-ack"||t.type==="handshake/ack")&&(t.data={id:t.connectionId}),t},Ae=({context:e},s)=>{let{sources:a,targetOrigin:t}=e,n=Ie(s.message);a.forEach(r=>{r.postMessage(n,{targetOrigin:t})})},Ve=()=>({listen:B(Me),requestMachine:L().provide({actions:{"send message":Ae}})});function We(){return window.self!==window.top}function Ye(){return!!window.opener}export{R as a,ie as b,Ke as c,ve as d,Be as e,Ve as f,We as g,Ye as h}; 2
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.