@electric-sql/client 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- var $t=Object.defineProperty,Gt=Object.defineProperties;var Jt=Object.getOwnPropertyDescriptors;var _e=Object.getOwnPropertySymbols;var ft=Object.prototype.hasOwnProperty,ut=Object.prototype.propertyIsEnumerable;var dt=r=>{throw TypeError(r)};var lt=(r,e,t)=>e in r?$t(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,b=(r,e)=>{for(var t in e||(e={}))ft.call(e,t)&&lt(r,t,e[t]);if(_e)for(var t of _e(e))ut.call(e,t)&&lt(r,t,e[t]);return r},le=(r,e)=>Gt(r,Jt(e));var pt=(r,e)=>{var t={};for(var s in r)ft.call(r,s)&&e.indexOf(s)<0&&(t[s]=r[s]);if(r!=null&&_e)for(var s of _e(r))e.indexOf(s)<0&&ut.call(r,s)&&(t[s]=r[s]);return t};var Ve=(r,e,t)=>e.has(r)||dt("Cannot "+t);var n=(r,e,t)=>(Ve(r,e,"read from private field"),t?t.call(r):e.get(r)),m=(r,e,t)=>e.has(r)?dt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(r):e.set(r,t),h=(r,e,t,s)=>(Ve(r,e,"write to private field"),s?s.call(r,t):e.set(r,t),t),u=(r,e,t)=>(Ve(r,e,"access private method"),t);var je=(r,e,t,s)=>({set _(a){h(r,e,a,t)},get _(){return n(r,e,s)}});var E=(r,e,t)=>new Promise((s,a)=>{var o=f=>{try{c(t.next(f))}catch(d){a(d)}},i=f=>{try{c(t.throw(f))}catch(d){a(d)}},c=f=>f.done?s(f.value):Promise.resolve(f.value).then(o,i);c((t=t.apply(r,e)).next())});var y=class r extends Error{constructor(t,s,a,o,i,c){super(c||`HTTP Error ${t} at ${i}: ${s!=null?s:JSON.stringify(a)}`);this.url=i;this.name="FetchError",this.status=t,this.text=s,this.json=a,this.headers=o}static fromResponse(t,s){return E(this,null,function*(){let a=t.status,o=Object.fromEntries([...t.headers.entries()]),i,c,f=t.headers.get("content-type");return t.bodyUsed||(f&&f.includes("application/json")?c=yield t.json():i=yield t.text()),new r(a,i,c,o,s)})}},v=class extends Error{constructor(){super("Fetch with backoff aborted"),this.name="FetchBackoffAbortError"}};var xe=class extends Error{constructor(){super("Invalid shape options: missing required url parameter"),this.name="MissingShapeUrlError"}},we=class extends Error{constructor(){super("Invalid signal option. It must be an instance of AbortSignal."),this.name="InvalidSignalError"}},Te=class extends Error{constructor(){super("shapeHandle is required if this isn't an initial fetch (i.e. offset > -1)"),this.name="MissingShapeHandleError"}},Me=class extends Error{constructor(e){super(`Cannot use reserved Electric parameter names in custom params: ${e.join(", ")}`),this.name="ReservedParamError"}},ve=class extends Error{constructor(e){super(`Column "${e!=null?e:"unknown"}" does not allow NULL values`),this.name="ParserNullValueError"}};var Ce=class extends Error{constructor(e,t){let s=`The response for the shape request to ${e} didn't include the following required headers:
1
+ var ts=Object.defineProperty,ss=Object.defineProperties;var rs=Object.getOwnPropertyDescriptors;var Me=Object.getOwnPropertySymbols;var St=Object.prototype.hasOwnProperty,Rt=Object.prototype.propertyIsEnumerable;var bt=n=>{throw TypeError(n)};var Et=(n,e,t)=>e in n?ts(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,S=(n,e)=>{for(var t in e||(e={}))St.call(e,t)&&Et(n,t,e[t]);if(Me)for(var t of Me(e))Rt.call(e,t)&&Et(n,t,e[t]);return n},de=(n,e)=>ss(n,rs(e));var yt=(n,e)=>{var t={};for(var s in n)St.call(n,s)&&e.indexOf(s)<0&&(t[s]=n[s]);if(n!=null&&Me)for(var s of Me(n))e.indexOf(s)<0&&Rt.call(n,s)&&(t[s]=n[s]);return t};var Je=(n,e,t)=>e.has(n)||bt("Cannot "+t);var r=(n,e,t)=>(Je(n,e,"read from private field"),t?t.call(n):e.get(n)),l=(n,e,t)=>e.has(n)?bt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),h=(n,e,t,s)=>(Je(n,e,"write to private field"),s?s.call(n,t):e.set(n,t),t),d=(n,e,t)=>(Je(n,e,"access private method"),t);var ve=(n,e,t,s)=>({set _(a){h(n,e,a,t)},get _(){return r(n,e,s)}});var g=(n,e,t)=>new Promise((s,a)=>{var o=u=>{try{c(t.next(u))}catch(p){a(p)}},i=u=>{try{c(t.throw(u))}catch(p){a(p)}},c=u=>u.done?s(u.value):Promise.resolve(u.value).then(o,i);c((t=t.apply(n,e)).next())});var y=class n extends Error{constructor(t,s,a,o,i,c){super(c||`HTTP Error ${t} at ${i}: ${s!=null?s:JSON.stringify(a)}`);this.url=i;this.name="FetchError",this.status=t,this.text=s,this.json=a,this.headers=o}static fromResponse(t,s){return g(this,null,function*(){let a=t.status,o=Object.fromEntries([...t.headers.entries()]),i,c,u=t.headers.get("content-type");return t.bodyUsed||(u&&u.includes("application/json")?c=yield t.json():i=yield t.text()),new n(a,i,c,o,s)})}},C=class extends Error{constructor(){super("Fetch with backoff aborted"),this.name="FetchBackoffAbortError"}};var Ce=class extends Error{constructor(){super("Invalid shape options: missing required url parameter"),this.name="MissingShapeUrlError"}},Ue=class extends Error{constructor(){super("Invalid signal option. It must be an instance of AbortSignal."),this.name="InvalidSignalError"}},ke=class extends Error{constructor(){super("shapeHandle is required if this isn't an initial fetch (i.e. offset > -1)"),this.name="MissingShapeHandleError"}},Oe=class extends Error{constructor(e){super(`Cannot use reserved Electric parameter names in custom params: ${e.join(", ")}`),this.name="ReservedParamError"}},He=class extends Error{constructor(e){super(`Column "${e!=null?e:"unknown"}" does not allow NULL values`),this.name="ParserNullValueError"}};var Le=class extends Error{constructor(e,t){let s=`The response for the shape request to ${e} didn't include the following required headers:
2
2
  `;t.forEach(a=>{s+=`- ${a}
3
3
  `}),s+=`
4
4
  This is often due to a proxy not setting CORS correctly so that all Electric headers can be read by the client.`,s+=`
5
- For more information visit the troubleshooting guide: /docs/guides/troubleshooting/missing-headers`,super(s)}};var Ue=r=>Number(r),zt=r=>r==="true"||r==="t",Xt=r=>BigInt(r),mt=r=>JSON.parse(r),Zt=r=>r,es={int2:Ue,int4:Ue,int8:Xt,bool:zt,float4:Ue,float8:Ue,json:mt,jsonb:mt};function ts(r,e){let t=0,s=null,a="",o=!1,i=0,c;function f(p,g,Q){let S=p.slice(g,Q);return S=S==="NULL"?null:S,e?e(S):S}function d(p){let g=[];for(;t<p.length;t++){if(s=p[t],o)s==="\\"?a+=p[++t]:s==='"'?(g.push(e?e(a):a),a="",o=p[t+1]==='"',i=t+2):a+=s;else if(s==='"')o=!0;else if(s==="{")i=++t,g.push(d(p));else if(s==="}"){o=!1,i<t&&g.push(f(p,i,t)),i=t+1;break}else s===","&&c!=="}"&&c!=='"'&&(g.push(f(p,i,t)),i=t+1);c=s}return i<t&&g.push(g.push(f(p,i,t+1))),g}return d(r)[0]}var ke=class{constructor(e,t){this.parser=b(b({},es),e),this.transformer=t}parse(e,t){return JSON.parse(e,(s,a)=>{if((s==="value"||s==="old_value")&&typeof a=="object"&&a!==null){let o=a;Object.keys(o).forEach(i=>{o[i]=this.parseRow(i,o[i],t)}),this.transformer&&(a=this.transformer(a))}return a})}parseRow(e,t,s){var g;let a=s[e];if(!a)return t;let p=a,{type:o,dims:i}=p,c=pt(p,["type","dims"]),f=(g=this.parser[o])!=null?g:Zt,d=Et(f,a,e);return i&&i>0?Et((S,Ne)=>ts(S,d),a,e)(t):d(t,c)}};function Et(r,e,t){var a;let s=!((a=e.not_null)!=null&&a);return o=>{if(o===null){if(!s)throw new ve(t!=null?t:"unknown");return null}return r(o,e)}}function z(r){return"key"in r}function Oe(r){return!z(r)}function Ye(r){return Oe(r)&&r.headers.control==="up-to-date"}function gt(r){let e=r.headers.global_last_seen_lsn;if(e)return`${e}_0`}function Qe(r,e){let t=BigInt(r),s=BigInt(e.xmin),a=BigInt(e.xmax),o=e.xip_list.map(BigInt);return t<s||t<a&&!o.includes(t)}var Rt="electric-cursor",fe="electric-handle",He="electric-offset",St="electric-schema",bt="electric-up-to-date",yt="columns",Le="cursor",Ke="expired_handle",X="handle",C="live",Z="offset",At="table",Pt="where",_t="replica",xt="params",wt="experimental_live_sse",Tt="live_sse",We="force-disconnect-and-refresh",$e="pause-stream",Ge="log",ue="subset__where",de="subset__limit",pe="subset__offset",me="subset__order_by",Ee="subset__params",Je=[C,X,Z,Le,Ke,Ge,ue,de,pe,me,Ee];var ss=[429],De={initialDelay:100,maxDelay:1e4,multiplier:1.3};function Mt(r,e=De){let{initialDelay:t,maxDelay:s,multiplier:a,debug:o=!1,onFailedAttempt:i}=e;return(...c)=>E(this,null,function*(){var Q;let f=c[0],d=c[1],p=t,g=0;for(;;)try{let S=yield r(...c);if(S.ok)return S;throw yield y.fromResponse(S,f.toString())}catch(S){if(i==null||i(),(Q=d==null?void 0:d.signal)!=null&&Q.aborted)throw new v;if(S instanceof y&&!ss.includes(S.status)&&S.status>=400&&S.status<500)throw S;yield new Promise(Ne=>setTimeout(Ne,p)),p=Math.min(p*a,s),o&&(g++,console.log(`Retry attempt #${g} after ${p}ms`))}})}var rs=[201,204,205];function vt(r){return(...e)=>E(this,null,function*(){var a,o;let t=e[0],s=yield r(...e);try{if(s.status<200||rs.includes(s.status))return s;let i=yield s.text();return new Response(i,s)}catch(i){throw(o=(a=e[1])==null?void 0:a.signal)!=null&&o.aborted?new v:new y(s.status,void 0,void 0,Object.fromEntries([...s.headers.entries()]),t.toString(),i instanceof Error?i.message:typeof i=="string"?i:"failed to read body")}})}var ns={maxChunksToPrefetch:2};function Ct(r,e=ns){let{maxChunksToPrefetch:t}=e,s;return(...o)=>E(this,null,function*(){let i=o[0].toString(),c=s==null?void 0:s.consume(...o);if(c)return c;s==null||s.abort();let f=yield r(...o),d=Xe(i,f);return d&&(s=new ze({fetchClient:r,maxPrefetchedRequests:t,url:d,requestInit:o[1]})),f})}var as=["electric-offset","electric-handle"],is=["electric-cursor"],os=["electric-schema"];function Ut(r){return(...e)=>E(this,null,function*(){let t=yield r(...e);if(t.ok){let s=t.headers,a=[],o=p=>a.push(...p.filter(g=>!s.has(g))),c=e[0].toString(),f=new URL(c);if([ue,Ee,de,pe,me].some(p=>f.searchParams.has(p)))return t;if(o(as),f.searchParams.get(C)==="true"&&o(is),(!f.searchParams.has(C)||f.searchParams.get(C)==="false")&&o(os),a.length>0)throw new Ce(c,a)}return t})}var ge,Re,U,K,k,ee,Ie,ze=class{constructor(e){m(this,ee);m(this,ge);m(this,Re);m(this,U,new Map);m(this,K);m(this,k);var t;h(this,ge,(t=e.fetchClient)!=null?t:(...s)=>fetch(...s)),h(this,Re,e.maxPrefetchedRequests),h(this,K,e.url.toString()),h(this,k,n(this,K)),u(this,ee,Ie).call(this,e.url,e.requestInit)}abort(){n(this,U).forEach(([e,t])=>t.abort())}consume(...e){var a;let t=e[0].toString(),s=(a=n(this,U).get(t))==null?void 0:a[0];if(!(!s||t!==n(this,K)))return n(this,U).delete(t),s.then(o=>{let i=Xe(t,o);h(this,K,i),n(this,k)&&!n(this,U).has(n(this,k))&&u(this,ee,Ie).call(this,n(this,k),e[1])}).catch(()=>{}),s}};ge=new WeakMap,Re=new WeakMap,U=new WeakMap,K=new WeakMap,k=new WeakMap,ee=new WeakSet,Ie=function(...e){var a,o;let t=e[0].toString();if(n(this,U).size>=n(this,Re))return;let s=new AbortController;try{let{signal:i,cleanup:c}=hs(s,(a=e[1])==null?void 0:a.signal),f=n(this,ge).call(this,t,le(b({},(o=e[1])!=null?o:{}),{signal:i}));n(this,U).set(t,[f,s]),f.then(d=>{if(!d.ok||s.signal.aborted)return;let p=Xe(t,d);if(!p||p===t){h(this,k,void 0);return}return h(this,k,p),u(this,ee,Ie).call(this,p,e[1])}).catch(()=>{}).finally(c)}catch(i){}};function Xe(r,e){let t=e.headers.get(fe),s=e.headers.get(He),a=e.headers.has(bt);if(!t||!s||a)return;let o=new URL(r);if(!o.searchParams.has(C))return o.searchParams.set(X,t),o.searchParams.set(Z,s),o.searchParams.sort(),o.toString()}function hs(r,e){let t=cs;if(e)if(e.aborted)r.abort();else{let s=()=>r.abort();e.addEventListener("abort",s,{once:!0,signal:r.signal}),t=()=>e.removeEventListener("abort",s)}return{signal:r.signal,cleanup:t}}function cs(){}import{fetchEventSource as ls}from"@microsoft/fetch-event-source";var Ze=class{constructor(){this.data={};this.max=250;this.storageKey="electric_expired_shapes";this.load()}getExpiredHandle(e){let t=this.data[e];return t?(t.lastUsed=Date.now(),this.save(),t.expiredHandle):null}markExpired(e,t){this.data[e]={expiredHandle:t,lastUsed:Date.now()};let s=Object.keys(this.data);if(s.length>this.max){let a=s.reduce((o,i)=>this.data[i].lastUsed<this.data[o].lastUsed?i:o);delete this.data[a]}this.save()}save(){if(typeof localStorage!="undefined")try{localStorage.setItem(this.storageKey,JSON.stringify(this.data))}catch(e){}}load(){if(typeof localStorage!="undefined")try{let e=localStorage.getItem(this.storageKey);e&&(this.data=JSON.parse(e))}catch(e){this.data={}}}clear(){this.data={},this.save()}},et=new Ze;var Be=class{constructor(){this.activeSnapshots=new Map;this.xmaxSnapshots=new Map;this.snapshotsByDatabaseLsn=new Map}addSnapshot(e,t){var o,i,c,f;this.activeSnapshots.set(e.snapshot_mark,{xmin:BigInt(e.xmin),xmax:BigInt(e.xmax),xip_list:e.xip_list.map(BigInt),keys:t});let s=(i=(o=this.xmaxSnapshots.get(BigInt(e.xmax)))==null?void 0:o.add(e.snapshot_mark))!=null?i:new Set([e.snapshot_mark]);this.xmaxSnapshots.set(BigInt(e.xmax),s);let a=(f=(c=this.snapshotsByDatabaseLsn.get(BigInt(e.database_lsn)))==null?void 0:c.add(e.snapshot_mark))!=null?f:new Set([e.snapshot_mark]);this.snapshotsByDatabaseLsn.set(BigInt(e.database_lsn),a)}removeSnapshot(e){this.activeSnapshots.delete(e)}shouldRejectMessage(e){let t=e.headers.txids||[];if(t.length===0)return!1;let s=Math.max(...t);for(let[a,o]of this.xmaxSnapshots.entries())if(s>=a)for(let i of o)this.removeSnapshot(i);return[...this.activeSnapshots.values()].some(a=>a.keys.has(e.key)&&Qe(s,a))}lastSeenUpdate(e){for(let[t,s]of this.snapshotsByDatabaseLsn.entries())if(t<=e)for(let a of s)this.removeSnapshot(a)}};var fs=new Set([Le,X,C,Z]);function Ot(r){return E(this,null,function*(){return typeof r=="function"?r():r})}function us(r){return E(this,null,function*(){let e=Object.entries(r),t=yield Promise.all(e.map(o=>E(this,[o],function*([s,a]){if(a===void 0)return[s,void 0];let i=yield Ot(a);return[s,Array.isArray(i)?i.join(","):i]})));return Object.fromEntries(t.filter(([s,a])=>a!==void 0))})}function ds(r){return E(this,null,function*(){if(!r)return{};let e=Object.entries(r),t=yield Promise.all(e.map(o=>E(this,[o],function*([s,a]){return[s,yield Ot(a)]})));return Object.fromEntries(t)})}function kt(r){let e=new URL(r.origin+r.pathname);for(let[t,s]of r.searchParams)Je.includes(t)||e.searchParams.set(t,s);return e.searchParams.sort(),e.toString()}var ye,te,se,W,B,M,P,O,$,F,w,G,H,_,q,L,re,T,J,I,ne,ae,ie,Ae,N,D,oe,l,Se,be,st,Ht,rt,Fe,Lt,It,Dt,nt,at,Bt,Ft,it,qt,Nt,ot,Vt,tt=class{constructor(e){m(this,l);m(this,ye,null);m(this,te);m(this,se);m(this,W);m(this,B,new Map);m(this,M,!1);m(this,P,"active");m(this,O);m(this,$);m(this,F);m(this,w,!1);m(this,G,!0);m(this,H,!1);m(this,_);m(this,q);m(this,L);m(this,re);m(this,T);m(this,J,!1);m(this,I);m(this,ne);m(this,ae);m(this,ie,Promise.resolve([]));m(this,Ae,new Be);m(this,N,0);m(this,D);m(this,oe);var o,i,c,f;this.options=b({subscribe:!0},e),ps(this.options),h(this,O,(o=this.options.offset)!=null?o:"-1"),h(this,$,""),h(this,_,this.options.handle),h(this,W,new ke(e.parser,e.transformer)),h(this,re,this.options.onError),h(this,q,(i=this.options.log)!=null?i:"full");let t=(c=e.fetchClient)!=null?c:(...d)=>fetch(...d),s=le(b({},(f=e.backoffOptions)!=null?f:De),{onFailedAttempt:()=>{var d,p;h(this,H,!1),(p=(d=e.backoffOptions)==null?void 0:d.onFailedAttempt)==null||p.call(d)}}),a=Mt(t,s);h(this,se,Ut(Ct(a))),h(this,te,vt(n(this,se))),u(this,l,Nt).call(this)}get shapeHandle(){return n(this,_)}get error(){return n(this,ye)}get isUpToDate(){return n(this,w)}get lastOffset(){return n(this,O)}get mode(){return n(this,q)}subscribe(e,t=()=>{}){let s=Math.random();return n(this,B).set(s,[e,t]),n(this,M)||u(this,l,Se).call(this),()=>{n(this,B).delete(s)}}unsubscribeAll(){n(this,B).clear()}lastSyncedAt(){return n(this,F)}lastSynced(){return n(this,F)===void 0?1/0:Date.now()-n(this,F)}isConnected(){return n(this,H)}isLoading(){return!n(this,w)}hasStarted(){return n(this,M)}isPaused(){return n(this,P)==="paused"}forceDisconnectAndRefresh(){return E(this,null,function*(){var e,t;h(this,J,!0),n(this,w)&&!((e=n(this,T))!=null&&e.signal.aborted)&&((t=n(this,T))==null||t.abort(We)),yield u(this,l,Bt).call(this),h(this,J,!1)})}requestSnapshot(e){return E(this,null,function*(){if(n(this,q)==="full")throw new Error(`Snapshot requests are not supported in ${n(this,q)} mode, as the consumer is guaranteed to observe all data`);n(this,M)||(yield u(this,l,Se).call(this)),yield u(this,l,Ft).call(this),je(this,N)._++;try{n(this,N)===1&&u(this,l,nt).call(this);let{fetchUrl:t,requestHeaders:s}=yield u(this,l,st).call(this,this.options.url,!0,e),{metadata:a,data:o}=yield u(this,l,Vt).call(this,t,s),i=o.concat([{headers:b({control:"snapshot-end"},a)}]);return n(this,Ae).addSnapshot(a,new Set(o.map(c=>c.key))),u(this,l,Fe).call(this,i,!1),{metadata:a,data:o}}finally{je(this,N)._--,n(this,N)===0&&u(this,l,at).call(this)}})}};ye=new WeakMap,te=new WeakMap,se=new WeakMap,W=new WeakMap,B=new WeakMap,M=new WeakMap,P=new WeakMap,O=new WeakMap,$=new WeakMap,F=new WeakMap,w=new WeakMap,G=new WeakMap,H=new WeakMap,_=new WeakMap,q=new WeakMap,L=new WeakMap,re=new WeakMap,T=new WeakMap,J=new WeakMap,I=new WeakMap,ne=new WeakMap,ae=new WeakMap,ie=new WeakMap,Ae=new WeakMap,N=new WeakMap,D=new WeakMap,oe=new WeakMap,l=new WeakSet,Se=function(){return E(this,null,function*(){var e;h(this,M,!0);try{yield u(this,l,be).call(this)}catch(t){if(h(this,ye,t),n(this,re)){let s=yield n(this,re).call(this,t);typeof s=="object"&&(u(this,l,ot).call(this),"params"in s&&(this.options.params=s.params),"headers"in s&&(this.options.headers=s.headers),h(this,M,!1),u(this,l,Se).call(this));return}throw t}finally{h(this,H,!1),(e=n(this,ae))==null||e.call(this)}})},be=function(){return E(this,null,function*(){var f,d;if(n(this,P)==="pause-requested"){h(this,P,"paused");return}if(!this.options.subscribe&&((f=this.options.signal)!=null&&f.aborted||n(this,w)))return;let e=n(this,P)==="paused";h(this,P,"active");let{url:t,signal:s}=this.options,{fetchUrl:a,requestHeaders:o}=yield u(this,l,st).call(this,t,e),i=yield u(this,l,Ht).call(this,s),c=n(this,T);try{yield u(this,l,Lt).call(this,{fetchUrl:a,requestAbortController:c,headers:o,resumingFromPause:e})}catch(p){if((p instanceof y||p instanceof v)&&c.signal.aborted&&c.signal.reason===We)return u(this,l,be).call(this);if(p instanceof v){c.signal.aborted&&c.signal.reason===$e&&h(this,P,"paused");return}if(!(p instanceof y))throw p;if(p.status==409){if(n(this,_)){let Q=kt(a);et.markExpired(Q,n(this,_))}let g=p.headers[fe]||`${n(this,_)}-next`;return u(this,l,ot).call(this,g),yield u(this,l,it).call(this,Array.isArray(p.json)?p.json:[p.json]),u(this,l,be).call(this)}else throw u(this,l,qt).call(this,p),p}finally{i&&s&&s.removeEventListener("abort",i),h(this,T,void 0)}return(d=n(this,ne))==null||d.call(this),u(this,l,be).call(this)})},st=function(e,t,s){return E(this,null,function*(){let[a,o]=yield Promise.all([ds(this.options.headers),this.options.params?us(ms(this.options.params)):void 0]);o&&jt(o);let i=new URL(e);if(o){o.table&&x(i,At,o.table),o.where&&x(i,Pt,o.where),o.columns&&x(i,yt,o.columns),o.replica&&x(i,_t,o.replica),o.params&&x(i,xt,o.params);let d=b({},o);delete d.table,delete d.where,delete d.columns,delete d.replica,delete d.params;for(let[p,g]of Object.entries(d))x(i,p,g)}s&&(s.where&&x(i,ue,s.where),s.params&&x(i,Ee,s.params),s.limit&&x(i,de,s.limit),s.offset&&x(i,pe,s.offset),s.orderBy&&x(i,me,s.orderBy)),i.searchParams.set(Z,n(this,O)),i.searchParams.set(Ge,n(this,q)),n(this,w)&&(!n(this,J)&&!t&&i.searchParams.set(C,"true"),i.searchParams.set(Le,n(this,$))),n(this,_)&&i.searchParams.set(X,n(this,_));let c=kt(i),f=et.getExpiredHandle(c);return f&&i.searchParams.set(Ke,f),i.searchParams.sort(),{fetchUrl:i,requestHeaders:a}})},Ht=function(e){return E(this,null,function*(){var t;if(h(this,T,new AbortController),e){let s=()=>{var a;(a=n(this,T))==null||a.abort(e.reason)};return e.addEventListener("abort",s,{once:!0}),e.aborted&&((t=n(this,T))==null||t.abort(e.reason)),s}})},rt=function(e){return E(this,null,function*(){var f;let{headers:t,status:s}=e,a=t.get(fe);a&&h(this,_,a);let o=t.get(He);o&&h(this,O,o);let i=t.get(Rt);i&&h(this,$,i);let c=()=>{let d=t.get(St);return d?JSON.parse(d):{}};h(this,L,(f=n(this,L))!=null?f:c()),s===204&&h(this,F,Date.now())})},Fe=function(e,t=!1){return E(this,null,function*(){var s;if(e.length>0){h(this,G,!0);let a=e[e.length-1];if(Ye(a)){if(t){let i=gt(a);i&&h(this,O,i)}h(this,F,Date.now()),h(this,w,!0),h(this,G,!1),(s=n(this,oe))==null||s.call(this)}let o=e.filter(i=>z(i)?!n(this,Ae).shouldRejectMessage(i):!0);yield u(this,l,it).call(this,o)}})},Lt=function(e){return E(this,null,function*(){var s;let t=(s=this.options.liveSse)!=null?s:this.options.experimentalLiveSse;return n(this,w)&&t&&!n(this,J)&&!e.resumingFromPause?(e.fetchUrl.searchParams.set(wt,"true"),e.fetchUrl.searchParams.set(Tt,"true"),u(this,l,Dt).call(this,e)):u(this,l,It).call(this,e)})},It=function(e){return E(this,null,function*(){let{fetchUrl:t,requestAbortController:s,headers:a}=e,o=yield n(this,te).call(this,t.toString(),{signal:s.signal,headers:a});h(this,H,!0),yield u(this,l,rt).call(this,o);let i=n(this,L),f=(yield o.text())||"[]",d=n(this,W).parse(f,i);yield u(this,l,Fe).call(this,d)})},Dt=function(e){return E(this,null,function*(){let{fetchUrl:t,requestAbortController:s,headers:a}=e,o=n(this,se);try{let i=[];yield ls(t.toString(),{headers:a,fetch:o,onopen:c=>E(this,null,function*(){h(this,H,!0),yield u(this,l,rt).call(this,c)}),onmessage:c=>{if(c.data){let f=n(this,L),d=n(this,W).parse(c.data,f);i.push(d),Ye(d)&&(u(this,l,Fe).call(this,i,!0),i=[])}},onerror:c=>{throw c},signal:s.signal})}catch(i){throw s.signal.aborted?new v:i}})},nt=function(){var e;n(this,M)&&n(this,P)==="active"&&(h(this,P,"pause-requested"),(e=n(this,T))==null||e.abort($e))},at=function(){n(this,M)&&n(this,P)==="paused"&&u(this,l,Se).call(this)},Bt=function(){return E(this,null,function*(){return n(this,I)?n(this,I):(h(this,I,new Promise((e,t)=>{h(this,ne,e),h(this,ae,t)})),n(this,I).finally(()=>{h(this,I,void 0),h(this,ne,void 0),h(this,ae,void 0)}),n(this,I))})},Ft=function(){return E(this,null,function*(){if(n(this,G))return n(this,D)?n(this,D):(h(this,D,new Promise(e=>{h(this,oe,e)})),n(this,D).finally(()=>{h(this,D,void 0),h(this,oe,void 0)}),n(this,D))})},it=function(e){return E(this,null,function*(){return h(this,ie,n(this,ie).then(()=>Promise.all(Array.from(n(this,B).values()).map(a=>E(this,[a],function*([t,s]){try{yield t(e)}catch(o){queueMicrotask(()=>{throw o})}}))))),n(this,ie)})},qt=function(e){n(this,B).forEach(([t,s])=>{s==null||s(e)})},Nt=function(){if(typeof document=="object"&&typeof document.hidden=="boolean"&&typeof document.addEventListener=="function"){let e=()=>{document.hidden?u(this,l,nt).call(this):u(this,l,at).call(this)};document.addEventListener("visibilitychange",e)}},ot=function(e){h(this,O,"-1"),h(this,$,""),h(this,_,e),h(this,w,!1),h(this,G,!0),h(this,H,!1),h(this,L,void 0),h(this,N,0)},Vt=function(e,t){return E(this,null,function*(){let s=yield n(this,te).call(this,e.toString(),{headers:t});if(!s.ok)throw new y(s.status,void 0,void 0,Object.fromEntries([...s.headers.entries()]),e.toString());let{metadata:a,data:o}=yield s.json(),i=n(this,W).parse(JSON.stringify(o),n(this,L));return{metadata:a,data:i}})},tt.Replica={FULL:"full",DEFAULT:"default"};function jt(r){if(!r)return;let e=Object.keys(r).filter(t=>fs.has(t));if(e.length>0)throw new Me(e)}function ps(r){if(!r.url)throw new xe;if(r.signal&&!(r.signal instanceof AbortSignal))throw new we;if(r.offset!==void 0&&r.offset!=="-1"&&r.offset!=="now"&&!r.handle)throw new Te;jt(r.params)}function x(r,e,t){if(!(t===void 0||t==null))if(typeof t=="string")r.searchParams.set(e,t);else if(typeof t=="object")for(let[s,a]of Object.entries(t))r.searchParams.set(`${e}[${s}]`,a);else r.searchParams.set(e,t.toString())}function ms(r){return Array.isArray(r.params)?le(b({},r),{params:Object.fromEntries(r.params.map((e,t)=>[t+1,e]))}):r}var A,V,j,Pe,he,ce,Y,R,Qt,Kt,ht,qe,Wt,ct,Yt=class{constructor(e){m(this,R);m(this,A,new Map);m(this,V,new Map);m(this,j,new Set);m(this,Pe,new Set);m(this,he,!1);m(this,ce,"syncing");m(this,Y,!1);this.stream=e,this.stream.subscribe(u(this,R,Qt).bind(this),u(this,R,Wt).bind(this))}get isUpToDate(){return n(this,ce)==="up-to-date"}get lastOffset(){return this.stream.lastOffset}get handle(){return this.stream.shapeHandle}get rows(){return this.value.then(e=>Array.from(e.values()))}get currentRows(){return Array.from(this.currentValue.values())}get value(){return new Promise((e,t)=>{if(this.stream.isUpToDate)e(this.currentValue);else{let s=this.subscribe(({value:a})=>{s(),n(this,Y)&&t(n(this,Y)),e(a)})}})}get currentValue(){return n(this,A)}get error(){return n(this,Y)}lastSyncedAt(){return this.stream.lastSyncedAt()}lastSynced(){return this.stream.lastSynced()}isLoading(){return this.stream.isLoading()}isConnected(){return this.stream.isConnected()}get mode(){return this.stream.mode}requestSnapshot(e){return E(this,null,function*(){let t=JSON.stringify(e);n(this,Pe).add(t),yield u(this,R,ht).call(this),yield this.stream.requestSnapshot(e)})}subscribe(e){let t=Math.random();return n(this,V).set(t,e),()=>{n(this,V).delete(t)}}unsubscribeAll(){n(this,V).clear()}get numSubscribers(){return n(this,V).size}};A=new WeakMap,V=new WeakMap,j=new WeakMap,Pe=new WeakMap,he=new WeakMap,ce=new WeakMap,Y=new WeakMap,R=new WeakSet,Qt=function(e){let t=!1;e.forEach(s=>{if(z(s))if(t=u(this,R,qe).call(this,"syncing"),this.mode==="full")switch(s.headers.operation){case"insert":n(this,A).set(s.key,s.value);break;case"update":n(this,A).set(s.key,b(b({},n(this,A).get(s.key)),s.value));break;case"delete":n(this,A).delete(s.key);break}else switch(s.headers.operation){case"insert":n(this,j).add(s.key),n(this,A).set(s.key,s.value);break;case"update":n(this,j).has(s.key)&&n(this,A).set(s.key,b(b({},n(this,A).get(s.key)),s.value));break;case"delete":n(this,j).has(s.key)&&(n(this,A).delete(s.key),n(this,j).delete(s.key));break}if(Oe(s))switch(s.headers.control){case"up-to-date":t=u(this,R,qe).call(this,"up-to-date"),n(this,he)&&(h(this,he,!1),u(this,R,Kt).call(this));break;case"must-refetch":n(this,A).clear(),n(this,j).clear(),h(this,Y,!1),t=u(this,R,qe).call(this,"syncing"),h(this,he,!0);break}}),t&&u(this,R,ct).call(this)},Kt=function(){return E(this,null,function*(){yield u(this,R,ht).call(this),yield Promise.all(Array.from(n(this,Pe)).map(e=>E(this,null,function*(){try{let t=JSON.parse(e);yield this.stream.requestSnapshot(t)}catch(t){}})))})},ht=function(){return E(this,null,function*(){this.stream.isUpToDate||(yield new Promise(e=>{let t=()=>{this.stream.isUpToDate&&(clearInterval(s),a(),e())},s=setInterval(t,10),a=this.stream.subscribe(()=>t(),()=>t());t()}))})},qe=function(e){let t=n(this,ce)!==e;return h(this,ce,e),t&&e==="up-to-date"},Wt=function(e){e instanceof y&&(h(this,Y,e),u(this,R,ct).call(this))},ct=function(){n(this,V).forEach(e=>{e({value:this.currentValue,rows:this.currentRows})})};export{De as BackoffDefaults,Je as ELECTRIC_PROTOCOL_QUERY_PARAMS,y as FetchError,Yt as Shape,tt as ShapeStream,z as isChangeMessage,Oe as isControlMessage,Qe as isVisibleInSnapshot,Ot as resolveValue};
5
+ For more information visit the troubleshooting guide: /docs/guides/troubleshooting/missing-headers`,super(s)}};var De=n=>Number(n),ns=n=>n==="true"||n==="t",is=n=>BigInt(n),At=n=>JSON.parse(n),as=n=>n,os={int2:De,int4:De,int8:is,bool:ns,float4:De,float8:De,json:At,jsonb:At};function hs(n,e){let t=0,s=null,a="",o=!1,i=0,c;function u(m,E,W){let b=m.slice(E,W);return b=b==="NULL"?null:b,e?e(b):b}function p(m){let E=[];for(;t<m.length;t++){if(s=m[t],o)s==="\\"?a+=m[++t]:s==='"'?(E.push(e?e(a):a),a="",o=m[t+1]==='"',i=t+2):a+=s;else if(s==='"')o=!0;else if(s==="{")i=++t,E.push(p(m));else if(s==="}"){o=!1,i<t&&E.push(u(m,i,t)),i=t+1;break}else s===","&&c!=="}"&&c!=='"'&&(E.push(u(m,i,t)),i=t+1);c=s}return i<t&&E.push(E.push(u(m,i,t+1))),E}return p(n)[0]}var Ie=class{constructor(e,t){this.parser=S(S({},os),e),this.transformer=t}parse(e,t){return JSON.parse(e,(s,a)=>{if((s==="value"||s==="old_value")&&typeof a=="object"&&a!==null){let o=a;Object.keys(o).forEach(i=>{o[i]=this.parseRow(i,o[i],t)}),this.transformer&&(a=this.transformer(a))}return a})}parseRow(e,t,s){var E;let a=s[e];if(!a)return t;let m=a,{type:o,dims:i}=m,c=yt(m,["type","dims"]),u=(E=this.parser[o])!=null?E:as,p=Pt(u,a,e);return i&&i>0?Pt((b,Ge)=>hs(b,p),a,e)(t):p(t,c)}};function Pt(n,e,t){var a;let s=!((a=e.not_null)!=null&&a);return o=>{if(o===null){if(!s)throw new He(t!=null?t:"unknown");return null}return n(o,e)}}function Z(n){return"key"in n}function Be(n){return!Z(n)}function ze(n){return Be(n)&&n.headers.control==="up-to-date"}function _t(n){let e=n.headers.global_last_seen_lsn;if(e)return`${e}_0`}function Xe(n,e){let t=BigInt(n),s=BigInt(e.xmin),a=BigInt(e.xmax),o=e.xip_list.map(BigInt);return t<s||t<a&&!o.includes(t)}var xt="electric-cursor",pe="electric-handle",Fe="electric-offset",wt="electric-schema",Tt="electric-up-to-date",Mt="columns",qe="cursor",Ze="expired_handle",ee="handle",U="live",te="offset",vt="table",Ct="where",Ut="replica",kt="params",Ot="experimental_live_sse",Ht="live_sse",et="force-disconnect-and-refresh",tt="pause-stream",st="log",me="subset__where",ge="subset__limit",Ee="subset__offset",Se="subset__order_by",Re="subset__params",rt=[U,ee,te,qe,Ze,st,me,ge,Ee,Se,Re];var cs=[429],Ve={initialDelay:100,maxDelay:1e4,multiplier:1.3};function Lt(n,e=Ve){let{initialDelay:t,maxDelay:s,multiplier:a,debug:o=!1,onFailedAttempt:i}=e;return(...c)=>g(this,null,function*(){var W;let u=c[0],p=c[1],m=t,E=0;for(;;)try{let b=yield n(...c);if(b.ok)return b;throw yield y.fromResponse(b,u.toString())}catch(b){if(i==null||i(),(W=p==null?void 0:p.signal)!=null&&W.aborted)throw new C;if(b instanceof y&&!cs.includes(b.status)&&b.status>=400&&b.status<500)throw b;yield new Promise(Ge=>setTimeout(Ge,m)),m=Math.min(m*a,s),o&&(E++,console.log(`Retry attempt #${E} after ${m}ms`))}})}var ls=[201,204,205];function Dt(n){return(...e)=>g(this,null,function*(){var a,o;let t=e[0],s=yield n(...e);try{if(s.status<200||ls.includes(s.status))return s;let i=yield s.text();return new Response(i,s)}catch(i){throw(o=(a=e[1])==null?void 0:a.signal)!=null&&o.aborted?new C:new y(s.status,void 0,void 0,Object.fromEntries([...s.headers.entries()]),t.toString(),i instanceof Error?i.message:typeof i=="string"?i:"failed to read body")}})}var fs={maxChunksToPrefetch:2};function It(n,e=fs){let{maxChunksToPrefetch:t}=e,s;return(...o)=>g(this,null,function*(){let i=o[0].toString(),c=s==null?void 0:s.consume(...o);if(c)return c;s==null||s.abort();let u=yield n(...o),p=it(i,u);return p&&(s=new nt({fetchClient:n,maxPrefetchedRequests:t,url:p,requestInit:o[1]})),u})}var us=["electric-offset","electric-handle"],ds=["electric-cursor"],ps=["electric-schema"];function Bt(n){return(...e)=>g(this,null,function*(){let t=yield n(...e);if(t.ok){let s=t.headers,a=[],o=m=>a.push(...m.filter(E=>!s.has(E))),c=e[0].toString(),u=new URL(c);if([me,Re,ge,Ee,Se].some(m=>u.searchParams.has(m)))return t;if(o(us),u.searchParams.get(U)==="true"&&o(ds),(!u.searchParams.has(U)||u.searchParams.get(U)==="false")&&o(ps),a.length>0)throw new Le(c,a)}return t})}var be,ye,k,$,O,se,Ne,nt=class{constructor(e){l(this,se);l(this,be);l(this,ye);l(this,k,new Map);l(this,$);l(this,O);var t;h(this,be,(t=e.fetchClient)!=null?t:(...s)=>fetch(...s)),h(this,ye,e.maxPrefetchedRequests),h(this,$,e.url.toString()),h(this,O,r(this,$)),d(this,se,Ne).call(this,e.url,e.requestInit)}abort(){r(this,k).forEach(([e,t])=>t.abort())}consume(...e){var a;let t=e[0].toString(),s=(a=r(this,k).get(t))==null?void 0:a[0];if(!(!s||t!==r(this,$)))return r(this,k).delete(t),s.then(o=>{let i=it(t,o);h(this,$,i),r(this,O)&&!r(this,k).has(r(this,O))&&d(this,se,Ne).call(this,r(this,O),e[1])}).catch(()=>{}),s}};be=new WeakMap,ye=new WeakMap,k=new WeakMap,$=new WeakMap,O=new WeakMap,se=new WeakSet,Ne=function(...e){var a,o;let t=e[0].toString();if(r(this,k).size>=r(this,ye))return;let s=new AbortController;try{let{signal:i,cleanup:c}=ms(s,(a=e[1])==null?void 0:a.signal),u=r(this,be).call(this,t,de(S({},(o=e[1])!=null?o:{}),{signal:i}));r(this,k).set(t,[u,s]),u.then(p=>{if(!p.ok||s.signal.aborted)return;let m=it(t,p);if(!m||m===t){h(this,O,void 0);return}return h(this,O,m),d(this,se,Ne).call(this,m,e[1])}).catch(()=>{}).finally(c)}catch(i){}};function it(n,e){let t=e.headers.get(pe),s=e.headers.get(Fe),a=e.headers.has(Tt);if(!t||!s||a)return;let o=new URL(n);if(!o.searchParams.has(U))return o.searchParams.set(ee,t),o.searchParams.set(te,s),o.searchParams.sort(),o.toString()}function ms(n,e){let t=gs;if(e)if(e.aborted)n.abort();else{let s=()=>n.abort();e.addEventListener("abort",s,{once:!0,signal:n.signal}),t=()=>e.removeEventListener("abort",s)}return{signal:n.signal,cleanup:t}}function gs(){}import{fetchEventSource as Es}from"@microsoft/fetch-event-source";var at=class{constructor(){this.data={};this.max=250;this.storageKey="electric_expired_shapes";this.load()}getExpiredHandle(e){let t=this.data[e];return t?(t.lastUsed=Date.now(),this.save(),t.expiredHandle):null}markExpired(e,t){this.data[e]={expiredHandle:t,lastUsed:Date.now()};let s=Object.keys(this.data);if(s.length>this.max){let a=s.reduce((o,i)=>this.data[i].lastUsed<this.data[o].lastUsed?i:o);delete this.data[a]}this.save()}save(){if(typeof localStorage!="undefined")try{localStorage.setItem(this.storageKey,JSON.stringify(this.data))}catch(e){}}load(){if(typeof localStorage!="undefined")try{let e=localStorage.getItem(this.storageKey);e&&(this.data=JSON.parse(e))}catch(e){this.data={}}}clear(){this.data={},this.save()}},ot=new at;var Ye=class{constructor(){this.activeSnapshots=new Map;this.xmaxSnapshots=new Map;this.snapshotsByDatabaseLsn=new Map}addSnapshot(e,t){var o,i,c,u;this.activeSnapshots.set(e.snapshot_mark,{xmin:BigInt(e.xmin),xmax:BigInt(e.xmax),xip_list:e.xip_list.map(BigInt),keys:t});let s=(i=(o=this.xmaxSnapshots.get(BigInt(e.xmax)))==null?void 0:o.add(e.snapshot_mark))!=null?i:new Set([e.snapshot_mark]);this.xmaxSnapshots.set(BigInt(e.xmax),s);let a=(u=(c=this.snapshotsByDatabaseLsn.get(BigInt(e.database_lsn)))==null?void 0:c.add(e.snapshot_mark))!=null?u:new Set([e.snapshot_mark]);this.snapshotsByDatabaseLsn.set(BigInt(e.database_lsn),a)}removeSnapshot(e){this.activeSnapshots.delete(e)}shouldRejectMessage(e){let t=e.headers.txids||[];if(t.length===0)return!1;let s=Math.max(...t);for(let[a,o]of this.xmaxSnapshots.entries())if(s>=a)for(let i of o)this.removeSnapshot(i);return[...this.activeSnapshots.values()].some(a=>a.keys.has(e.key)&&Xe(s,a))}lastSeenUpdate(e){for(let[t,s]of this.snapshotsByDatabaseLsn.entries())if(t<=e)for(let a of s)this.removeSnapshot(a)}};var Ss=new Set([qe,ee,U,te]);function qt(n){return g(this,null,function*(){return typeof n=="function"?n():n})}function Rs(n){return g(this,null,function*(){let e=Object.entries(n),t=yield Promise.all(e.map(o=>g(this,[o],function*([s,a]){if(a===void 0)return[s,void 0];let i=yield qt(a);return[s,Array.isArray(i)?i.join(","):i]})));return Object.fromEntries(t.filter(([s,a])=>a!==void 0))})}function bs(n){return g(this,null,function*(){if(!n)return{};let e=Object.entries(n),t=yield Promise.all(e.map(o=>g(this,[o],function*([s,a]){return[s,yield qt(a)]})));return Object.fromEntries(t)})}function Ft(n){let e=new URL(n.origin+n.pathname);for(let[t,s]of n.searchParams)rt.includes(t)||e.searchParams.set(t,s);return e.searchParams.sort(),e.toString()}var re,ne,ie,G,B,v,P,H,J,F,w,z,T,_,q,L,ae,M,X,D,oe,N,he,_e,V,I,ce,xe,we,Y,Qe,le,Ke,We,f,Ae,Pe,ct,Nt,lt,je,Vt,Yt,jt,ft,ut,Qt,Kt,dt,pt,Wt,$t,Gt,ht=class{constructor(e){l(this,f);l(this,re,null);l(this,ne);l(this,ie);l(this,G);l(this,B,new Map);l(this,v,!1);l(this,P,"active");l(this,H);l(this,J);l(this,F);l(this,w,!1);l(this,z,!0);l(this,T,!1);l(this,_);l(this,q);l(this,L);l(this,ae);l(this,M);l(this,X,!1);l(this,D);l(this,oe);l(this,N);l(this,he,Promise.resolve([]));l(this,_e,new Ye);l(this,V,0);l(this,I);l(this,ce);l(this,xe);l(this,we,1e3);l(this,Y,0);l(this,Qe,3);l(this,le,!1);l(this,Ke,100);l(this,We,5e3);var o,i,c,u;this.options=S({subscribe:!0},e),ys(this.options),h(this,H,(o=this.options.offset)!=null?o:"-1"),h(this,J,""),h(this,_,this.options.handle),h(this,G,new Ie(e.parser,e.transformer)),h(this,ae,this.options.onError),h(this,q,(i=this.options.log)!=null?i:"full");let t=(c=e.fetchClient)!=null?c:(...p)=>fetch(...p),s=de(S({},(u=e.backoffOptions)!=null?u:Ve),{onFailedAttempt:()=>{var p,m;h(this,T,!1),(m=(p=e.backoffOptions)==null?void 0:p.onFailedAttempt)==null||m.call(p)}}),a=Lt(t,s);h(this,ie,Bt(It(a))),h(this,ne,Dt(r(this,ie))),d(this,f,Wt).call(this)}get shapeHandle(){return r(this,_)}get error(){return r(this,re)}get isUpToDate(){return r(this,w)}get lastOffset(){return r(this,H)}get mode(){return r(this,q)}subscribe(e,t=()=>{}){let s=Math.random();return r(this,B).set(s,[e,t]),r(this,v)||d(this,f,Ae).call(this),()=>{r(this,B).delete(s)}}unsubscribeAll(){r(this,B).clear()}lastSyncedAt(){return r(this,F)}lastSynced(){return r(this,F)===void 0?1/0:Date.now()-r(this,F)}isConnected(){return r(this,T)}isLoading(){return!r(this,w)}hasStarted(){return r(this,v)}isPaused(){return r(this,P)==="paused"}forceDisconnectAndRefresh(){return g(this,null,function*(){var e,t;h(this,X,!0),r(this,w)&&!((e=r(this,M))!=null&&e.signal.aborted)&&((t=r(this,M))==null||t.abort(et)),yield d(this,f,Qt).call(this),h(this,X,!1)})}requestSnapshot(e){return g(this,null,function*(){if(r(this,q)==="full")throw new Error(`Snapshot requests are not supported in ${r(this,q)} mode, as the consumer is guaranteed to observe all data`);r(this,v)||(yield d(this,f,Ae).call(this)),yield d(this,f,Kt).call(this),ve(this,V)._++;try{r(this,V)===1&&d(this,f,ft).call(this);let{fetchUrl:t,requestHeaders:s}=yield d(this,f,ct).call(this,this.options.url,!0,e),{metadata:a,data:o}=yield d(this,f,Gt).call(this,t,s),i=o.concat([{headers:S({control:"snapshot-end"},a)}]);return r(this,_e).addSnapshot(a,new Set(o.map(c=>c.key))),d(this,f,je).call(this,i,!1),{metadata:a,data:o}}finally{ve(this,V)._--,r(this,V)===0&&d(this,f,ut).call(this)}})}};re=new WeakMap,ne=new WeakMap,ie=new WeakMap,G=new WeakMap,B=new WeakMap,v=new WeakMap,P=new WeakMap,H=new WeakMap,J=new WeakMap,F=new WeakMap,w=new WeakMap,z=new WeakMap,T=new WeakMap,_=new WeakMap,q=new WeakMap,L=new WeakMap,ae=new WeakMap,M=new WeakMap,X=new WeakMap,D=new WeakMap,oe=new WeakMap,N=new WeakMap,he=new WeakMap,_e=new WeakMap,V=new WeakMap,I=new WeakMap,ce=new WeakMap,xe=new WeakMap,we=new WeakMap,Y=new WeakMap,Qe=new WeakMap,le=new WeakMap,Ke=new WeakMap,We=new WeakMap,f=new WeakSet,Ae=function(){return g(this,null,function*(){var e,t,s,a,o;h(this,v,!0);try{yield d(this,f,Pe).call(this)}catch(i){if(h(this,re,i),r(this,ae)){let c=yield r(this,ae).call(this,i);if(c&&typeof c=="object"){c.params&&(this.options.params=S(S({},(e=this.options.params)!=null?e:{}),c.params)),c.headers&&(this.options.headers=S(S({},(t=this.options.headers)!=null?t:{}),c.headers)),h(this,re,null),h(this,v,!1),yield d(this,f,Ae).call(this);return}i instanceof Error&&d(this,f,pt).call(this,i),h(this,T,!1),(s=r(this,N))==null||s.call(this);return}throw i instanceof Error&&d(this,f,pt).call(this,i),h(this,T,!1),(a=r(this,N))==null||a.call(this),i}h(this,T,!1),(o=r(this,N))==null||o.call(this)})},Pe=function(){return g(this,null,function*(){var u,p;if(r(this,P)==="pause-requested"){h(this,P,"paused");return}if(!this.options.subscribe&&((u=this.options.signal)!=null&&u.aborted||r(this,w)))return;let e=r(this,P)==="paused";h(this,P,"active");let{url:t,signal:s}=this.options,{fetchUrl:a,requestHeaders:o}=yield d(this,f,ct).call(this,t,e),i=yield d(this,f,Nt).call(this,s),c=r(this,M);try{yield d(this,f,Vt).call(this,{fetchUrl:a,requestAbortController:c,headers:o,resumingFromPause:e})}catch(m){if((m instanceof y||m instanceof C)&&c.signal.aborted&&c.signal.reason===et)return d(this,f,Pe).call(this);if(m instanceof C){c.signal.aborted&&c.signal.reason===tt&&h(this,P,"paused");return}if(!(m instanceof y))throw m;if(m.status==409){if(r(this,_)){let W=Ft(a);ot.markExpired(W,r(this,_))}let E=m.headers[pe]||`${r(this,_)}-next`;return d(this,f,$t).call(this,E),yield d(this,f,dt).call(this,Array.isArray(m.json)?m.json:[m.json]),d(this,f,Pe).call(this)}else throw m}finally{i&&s&&s.removeEventListener("abort",i),h(this,M,void 0)}return(p=r(this,oe))==null||p.call(this),d(this,f,Pe).call(this)})},ct=function(e,t,s){return g(this,null,function*(){let[a,o]=yield Promise.all([bs(this.options.headers),this.options.params?Rs(As(this.options.params)):void 0]);o&&Jt(o);let i=new URL(e);if(o){o.table&&x(i,vt,o.table),o.where&&x(i,Ct,o.where),o.columns&&x(i,Mt,o.columns),o.replica&&x(i,Ut,o.replica),o.params&&x(i,kt,o.params);let p=S({},o);delete p.table,delete p.where,delete p.columns,delete p.replica,delete p.params;for(let[m,E]of Object.entries(p))x(i,m,E)}s&&(s.where&&x(i,me,s.where),s.params&&x(i,Re,s.params),s.limit&&x(i,ge,s.limit),s.offset&&x(i,Ee,s.offset),s.orderBy&&x(i,Se,s.orderBy)),i.searchParams.set(te,r(this,H)),i.searchParams.set(st,r(this,q)),r(this,w)&&(!r(this,X)&&!t&&i.searchParams.set(U,"true"),i.searchParams.set(qe,r(this,J))),r(this,_)&&i.searchParams.set(ee,r(this,_));let c=Ft(i),u=ot.getExpiredHandle(c);return u&&i.searchParams.set(Ze,u),i.searchParams.sort(),{fetchUrl:i,requestHeaders:a}})},Nt=function(e){return g(this,null,function*(){var t;if(h(this,M,new AbortController),e){let s=()=>{var a;(a=r(this,M))==null||a.abort(e.reason)};return e.addEventListener("abort",s,{once:!0}),e.aborted&&((t=r(this,M))==null||t.abort(e.reason)),s}})},lt=function(e){return g(this,null,function*(){var u;let{headers:t,status:s}=e,a=t.get(pe);a&&h(this,_,a);let o=t.get(Fe);o&&h(this,H,o);let i=t.get(xt);i&&h(this,J,i);let c=()=>{let p=t.get(wt);return p?JSON.parse(p):{}};h(this,L,(u=r(this,L))!=null?u:c()),s===204&&h(this,F,Date.now())})},je=function(e,t=!1){return g(this,null,function*(){var s;if(e.length>0){h(this,z,!0);let a=e[e.length-1];if(ze(a)){if(t){let i=_t(a);i&&h(this,H,i)}h(this,F,Date.now()),h(this,w,!0),h(this,z,!1),(s=r(this,ce))==null||s.call(this)}let o=e.filter(i=>Z(i)?!r(this,_e).shouldRejectMessage(i):!0);yield d(this,f,dt).call(this,o)}})},Vt=function(e){return g(this,null,function*(){var s;let t=(s=this.options.liveSse)!=null?s:this.options.experimentalLiveSse;return r(this,w)&&t&&!r(this,X)&&!e.resumingFromPause&&!r(this,le)?(e.fetchUrl.searchParams.set(Ot,"true"),e.fetchUrl.searchParams.set(Ht,"true"),d(this,f,jt).call(this,e)):d(this,f,Yt).call(this,e)})},Yt=function(e){return g(this,null,function*(){let{fetchUrl:t,requestAbortController:s,headers:a}=e,o=yield r(this,ne).call(this,t.toString(),{signal:s.signal,headers:a});h(this,T,!0),yield d(this,f,lt).call(this,o);let i=r(this,L),u=(yield o.text())||"[]",p=r(this,G).parse(u,i);yield d(this,f,je).call(this,p)})},jt=function(e){return g(this,null,function*(){let{fetchUrl:t,requestAbortController:s,headers:a}=e,o=r(this,ie);h(this,xe,Date.now());try{let i=[];yield Es(t.toString(),{headers:a,fetch:o,onopen:c=>g(this,null,function*(){h(this,T,!0),yield d(this,f,lt).call(this,c)}),onmessage:c=>{if(c.data){let u=r(this,L),p=r(this,G).parse(c.data,u);i.push(p),ze(p)&&(d(this,f,je).call(this,i,!0),i=[])}},onerror:c=>{throw c},signal:s.signal})}catch(i){throw s.signal.aborted?new C:i}finally{let i=Date.now()-r(this,xe),c=s.signal.aborted;if(i<r(this,we)&&!c)if(ve(this,Y)._++,r(this,Y)>=r(this,Qe))h(this,le,!0),console.warn("[Electric] SSE connections are closing immediately (possibly due to proxy buffering or misconfiguration). Falling back to long polling. Your proxy must support streaming SSE responses (not buffer the complete response). Configuration: Nginx add 'X-Accel-Buffering: no', Caddy add 'flush_interval -1' to reverse_proxy. Note: Do NOT disable caching entirely - Electric uses cache headers to enable request collapsing for efficiency.");else{let u=Math.min(r(this,We),r(this,Ke)*Math.pow(2,r(this,Y))),p=Math.floor(Math.random()*u);yield new Promise(m=>setTimeout(m,p))}else i>=r(this,we)&&h(this,Y,0)}})},ft=function(){var e;r(this,v)&&r(this,P)==="active"&&(h(this,P,"pause-requested"),(e=r(this,M))==null||e.abort(tt))},ut=function(){r(this,v)&&r(this,P)==="paused"&&d(this,f,Ae).call(this)},Qt=function(){return g(this,null,function*(){return r(this,D)?r(this,D):(h(this,D,new Promise((e,t)=>{h(this,oe,e),h(this,N,t)})),r(this,D).finally(()=>{h(this,D,void 0),h(this,oe,void 0),h(this,N,void 0)}),r(this,D))})},Kt=function(){return g(this,null,function*(){if(r(this,z))return r(this,I)?r(this,I):(h(this,I,new Promise(e=>{h(this,ce,e)})),r(this,I).finally(()=>{h(this,I,void 0),h(this,ce,void 0)}),r(this,I))})},dt=function(e){return g(this,null,function*(){return h(this,he,r(this,he).then(()=>Promise.all(Array.from(r(this,B).values()).map(a=>g(this,[a],function*([t,s]){try{yield t(e)}catch(o){queueMicrotask(()=>{throw o})}}))))),r(this,he)})},pt=function(e){r(this,B).forEach(([t,s])=>{s==null||s(e)})},Wt=function(){if(typeof document=="object"&&typeof document.hidden=="boolean"&&typeof document.addEventListener=="function"){let e=()=>{document.hidden?d(this,f,ft).call(this):d(this,f,ut).call(this)};document.addEventListener("visibilitychange",e)}},$t=function(e){h(this,H,"-1"),h(this,J,""),h(this,_,e),h(this,w,!1),h(this,z,!0),h(this,T,!1),h(this,L,void 0),h(this,V,0),h(this,Y,0),h(this,le,!1)},Gt=function(e,t){return g(this,null,function*(){let s=yield r(this,ne).call(this,e.toString(),{headers:t});if(!s.ok)throw new y(s.status,void 0,void 0,Object.fromEntries([...s.headers.entries()]),e.toString());let{metadata:a,data:o}=yield s.json(),i=r(this,G).parse(JSON.stringify(o),r(this,L));return{metadata:a,data:i}})},ht.Replica={FULL:"full",DEFAULT:"default"};function Jt(n){if(!n)return;let e=Object.keys(n).filter(t=>Ss.has(t));if(e.length>0)throw new Oe(e)}function ys(n){if(!n.url)throw new Ce;if(n.signal&&!(n.signal instanceof AbortSignal))throw new Ue;if(n.offset!==void 0&&n.offset!=="-1"&&n.offset!=="now"&&!n.handle)throw new ke;Jt(n.params)}function x(n,e,t){if(!(t===void 0||t==null))if(typeof t=="string")n.searchParams.set(e,t);else if(typeof t=="object")for(let[s,a]of Object.entries(t))n.searchParams.set(`${e}[${s}]`,a);else n.searchParams.set(e,t.toString())}function As(n){return Array.isArray(n.params)?de(S({},n),{params:Object.fromEntries(n.params.map((e,t)=>[t+1,e]))}):n}var A,j,Q,Te,fe,ue,K,R,Xt,Zt,mt,$e,es,gt,zt=class{constructor(e){l(this,R);l(this,A,new Map);l(this,j,new Map);l(this,Q,new Set);l(this,Te,new Set);l(this,fe,!1);l(this,ue,"syncing");l(this,K,!1);this.stream=e,this.stream.subscribe(d(this,R,Xt).bind(this),d(this,R,es).bind(this))}get isUpToDate(){return r(this,ue)==="up-to-date"}get lastOffset(){return this.stream.lastOffset}get handle(){return this.stream.shapeHandle}get rows(){return this.value.then(e=>Array.from(e.values()))}get currentRows(){return Array.from(this.currentValue.values())}get value(){return new Promise((e,t)=>{if(this.stream.isUpToDate)e(this.currentValue);else{let s=this.subscribe(({value:a})=>{s(),r(this,K)&&t(r(this,K)),e(a)})}})}get currentValue(){return r(this,A)}get error(){return r(this,K)}lastSyncedAt(){return this.stream.lastSyncedAt()}lastSynced(){return this.stream.lastSynced()}isLoading(){return this.stream.isLoading()}isConnected(){return this.stream.isConnected()}get mode(){return this.stream.mode}requestSnapshot(e){return g(this,null,function*(){let t=JSON.stringify(e);r(this,Te).add(t),yield d(this,R,mt).call(this),yield this.stream.requestSnapshot(e)})}subscribe(e){let t=Math.random();return r(this,j).set(t,e),()=>{r(this,j).delete(t)}}unsubscribeAll(){r(this,j).clear()}get numSubscribers(){return r(this,j).size}};A=new WeakMap,j=new WeakMap,Q=new WeakMap,Te=new WeakMap,fe=new WeakMap,ue=new WeakMap,K=new WeakMap,R=new WeakSet,Xt=function(e){let t=!1;e.forEach(s=>{if(Z(s))if(t=d(this,R,$e).call(this,"syncing"),this.mode==="full")switch(s.headers.operation){case"insert":r(this,A).set(s.key,s.value);break;case"update":r(this,A).set(s.key,S(S({},r(this,A).get(s.key)),s.value));break;case"delete":r(this,A).delete(s.key);break}else switch(s.headers.operation){case"insert":r(this,Q).add(s.key),r(this,A).set(s.key,s.value);break;case"update":r(this,Q).has(s.key)&&r(this,A).set(s.key,S(S({},r(this,A).get(s.key)),s.value));break;case"delete":r(this,Q).has(s.key)&&(r(this,A).delete(s.key),r(this,Q).delete(s.key));break}if(Be(s))switch(s.headers.control){case"up-to-date":t=d(this,R,$e).call(this,"up-to-date"),r(this,fe)&&(h(this,fe,!1),d(this,R,Zt).call(this));break;case"must-refetch":r(this,A).clear(),r(this,Q).clear(),h(this,K,!1),t=d(this,R,$e).call(this,"syncing"),h(this,fe,!0);break}}),t&&d(this,R,gt).call(this)},Zt=function(){return g(this,null,function*(){yield d(this,R,mt).call(this),yield Promise.all(Array.from(r(this,Te)).map(e=>g(this,null,function*(){try{let t=JSON.parse(e);yield this.stream.requestSnapshot(t)}catch(t){}})))})},mt=function(){return g(this,null,function*(){this.stream.isUpToDate||(yield new Promise(e=>{let t=()=>{this.stream.isUpToDate&&(clearInterval(s),a(),e())},s=setInterval(t,10),a=this.stream.subscribe(()=>t(),()=>t());t()}))})},$e=function(e){let t=r(this,ue)!==e;return h(this,ue,e),t&&e==="up-to-date"},es=function(e){e instanceof y&&(h(this,K,e),d(this,R,gt).call(this))},gt=function(){r(this,j).forEach(e=>{e({value:this.currentValue,rows:this.currentRows})})};export{Ve as BackoffDefaults,rt as ELECTRIC_PROTOCOL_QUERY_PARAMS,y as FetchError,zt as Shape,ht as ShapeStream,Z as isChangeMessage,Be as isControlMessage,Xe as isVisibleInSnapshot,qt as resolveValue};
6
6
  //# sourceMappingURL=index.browser.mjs.map