UNPKG

@electric-sql/client

Version:

Postgres everywhere - your data, in sync, wherever you need it.

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