UNPKG

@electric-sql/pglite

Version:

PGlite is a WASM Postgres build packaged into a TypeScript client library that enables you to run Postgres in the browser, Node.js and Bun, with no need to install any other dependencies. It is only 3.7mb gzipped.

9 lines 23 kB
"use strict";var pe=Object.defineProperty;var qe=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var $e=Object.prototype.hasOwnProperty;var Ie=e=>{throw TypeError(e)};var je=(e,r)=>{for(var t in r)pe(e,t,{get:r[t],enumerable:!0})},He=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of ze(r))!$e.call(e,i)&&i!==t&&pe(e,i,{get:()=>r[i],enumerable:!(n=qe(r,i))||n.enumerable});return e};var Ye=e=>He(pe({},"__esModule",{value:!0}),e);var de=(e,r,t)=>r.has(e)||Ie("Cannot "+t);var a=(e,r,t)=>(de(e,r,"read from private field"),t?t.call(e):r.get(e)),p=(e,r,t)=>r.has(e)?Ie("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(e):r.set(e,t),d=(e,r,t,n)=>(de(e,r,"write to private field"),n?n.call(e,t):r.set(e,t),t),c=(e,r,t)=>(de(e,r,"access private method"),t);var ye=(e,r,t,n)=>({set _(i){d(e,r,i,t)},get _(){return a(e,r,n)}});var zt={};je(zt,{LeaderChangedError:()=>le,PGliteWorker:()=>Ee,worker:()=>Qt});module.exports=Ye(zt);var Ke=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,T=Ke();var Me={part:"part",container:"container"};function te(e,r,...t){let n=e.length-1,i=t.length-1;if(i!==-1){if(i===0){e[n]=e[n]+t[0]+r;return}e[n]=e[n]+t[0],e.push(...t.slice(1,i)),e.push(t[i]+r)}}function Je(e,...r){let t=[e[0]];t.raw=[e.raw[0]];let n=[];for(let i=0;i<r.length;i++){let s=r[i],o=i+1;if(s?._templateType===Me.part){te(t,e[o],s.str),te(t.raw,e.raw[o],s.str);continue}if(s?._templateType===Me.container){te(t,e[o],...s.strings),te(t.raw,e.raw[o],...s.strings.raw),n.push(...s.values);continue}t.push(e[o]),t.raw.push(e.raw[o]),n.push(s)}return{_templateType:"container",strings:t,values:n}}function me(e,...r){let{strings:t,values:n}=Je(e,...r);return{query:[t[0],...n.flatMap((i,s)=>[`$${s+1}`,t[s+1]])].join(""),params:n}}var Xe=globalThis.JSON.parse,Ze=globalThis.JSON.stringify,ke=16,Le=17;var Ce=20,et=21,tt=23;var he=25,rt=26;var ve=114;var nt=700,st=701;var at=1042,it=1043,ot=1082;var ct=1114,Oe=1184;var lt=3802;var ut={string:{to:he,from:[he,it,at],serialize:e=>{if(typeof e=="string")return e;if(typeof e=="number")return e.toString();throw new Error("Invalid input for string type")},parse:e=>e},number:{to:0,from:[et,tt,rt,nt,st],serialize:e=>e.toString(),parse:e=>+e},bigint:{to:Ce,from:[Ce],serialize:e=>e.toString(),parse:e=>{let r=BigInt(e);return r<Number.MIN_SAFE_INTEGER||r>Number.MAX_SAFE_INTEGER?r:Number(r)}},json:{to:ve,from:[ve,lt],serialize:e=>typeof e=="string"?e:Ze(e),parse:e=>Xe(e)},boolean:{to:ke,from:[ke],serialize:e=>{if(typeof e!="boolean")throw new Error("Invalid input for boolean type");return e?"t":"f"},parse:e=>e==="t"},date:{to:Oe,from:[ot,ct,Oe],serialize:e=>{if(typeof e=="string")return e;if(typeof e=="number")return new Date(e).toISOString();if(e instanceof Date)return e.toISOString();throw new Error("Invalid input for date type")},parse:e=>new Date(e)},bytea:{to:Le,from:[Le],serialize:e=>{if(!(e instanceof Uint8Array))throw new Error("Invalid input for bytea type");return"\\x"+Array.from(e).map(r=>r.toString(16).padStart(2,"0")).join("")},parse:e=>{let r=e.slice(2);return Uint8Array.from({length:r.length/2},(t,n)=>parseInt(r.substring(n*2,(n+1)*2),16))}}},ge=pt(ut),Ue=ge.parsers,Ne=ge.serializers;function be(e,r,t){if(e===null)return null;let n=t?.[r]??ge.parsers[r];return n?n(e,r):e}function pt(e){return Object.keys(e).reduce(({parsers:r,serializers:t},n)=>{let{to:i,from:s,serialize:o,parse:u}=e[n];return t[i]=o,t[n]=o,r[n]=u,Array.isArray(s)?s.forEach(l=>{r[l]=u,t[l]=o}):(r[s]=u,t[s]=o),{parsers:r,serializers:t}},{parsers:{},serializers:{}})}var dt=/\\/g,yt=/"/g;function mt(e){return e.replace(dt,"\\\\").replace(yt,'\\"')}function we(e,r,t){if(Array.isArray(e)===!1)return e;if(!e.length)return"{}";let n=e[0],i=t===1020?";":",";return Array.isArray(n)?`{${e.map(s=>we(s,r,t)).join(i)}}`:`{${e.map(s=>(s===void 0&&(s=null),s===null?"null":'"'+mt(r?r(s):s.toString())+'"')).join(i)}}`}var fe={i:0,char:null,str:"",quoted:!1,last:0,p:null};function _e(e,r,t){return fe.i=fe.last=0,We(fe,e,r,t)[0]}function We(e,r,t,n){let i=[],s=n===1020?";":",";for(;e.i<r.length;e.i++){if(e.char=r[e.i],e.quoted)e.char==="\\"?e.str+=r[++e.i]:e.char==='"'?(i.push(t?t(e.str):e.str),e.str="",e.quoted=r[e.i+1]==='"',e.last=e.i+2):e.str+=e.char;else if(e.char==='"')e.quoted=!0;else if(e.char==="{")e.last=++e.i,i.push(We(e,r,t,n));else if(e.char==="}"){e.quoted=!1,e.last<e.i&&i.push(t?t(r.slice(e.last,e.i)):r.slice(e.last,e.i)),e.last=e.i+1;break}else e.char===s&&e.p!=="}"&&e.p!=='"'&&(i.push(t?t(r.slice(e.last,e.i)):r.slice(e.last,e.i)),e.last=e.i+1);e.p=e.char}return e.last<e.i&&i.push(t?t(r.slice(e.last,e.i+1)):r.slice(e.last,e.i+1)),i}function Te(e,r,t,n){let i=[],s={rows:[],fields:[]},o=0,u={...r,...t?.parsers};return e.forEach(l=>{switch(l.name){case"rowDescription":{let y=l;s.fields=y.fields.map(m=>({name:m.name,dataTypeID:m.dataTypeID}));break}case"dataRow":{if(!s)break;let y=l;t?.rowMode==="array"?s.rows.push(y.fields.map((m,x)=>be(m,s.fields[x].dataTypeID,u))):s.rows.push(Object.fromEntries(y.fields.map((m,x)=>[s.fields[x].name,be(m,s.fields[x].dataTypeID,u)])));break}case"commandComplete":{o+=ft(l),i.push({...s,affectedRows:o,...n?{blob:n}:{}}),s={rows:[],fields:[]};break}}}),i.length===0&&i.push({affectedRows:0,rows:[],fields:[]}),i}function ft(e){let r=e.text.split(" ");switch(r[0]){case"INSERT":return parseInt(r[2],10);case"UPDATE":case"DELETE":case"COPY":case"MERGE":return parseInt(r[1],10);default:return 0}}function xe(e){let r=e.find(t=>t.name==="parameterDescription");return r?r.dataTypeIDs:[]}function W(e){let r=e.length;for(let t=e.length-1;t>=0;t--){let n=e.charCodeAt(t);n>127&&n<=2047?r++:n>2047&&n<=65535&&(r+=2),n>=56320&&n<=57343&&t--}return r}var b,w,F,ne,Q,P,re,G,Ge,L=class{constructor(r=256){this.size=r;p(this,P);p(this,b);p(this,w,5);p(this,F,!1);p(this,ne,new TextEncoder);p(this,Q,0);d(this,b,c(this,P,re).call(this,r))}addInt32(r){return c(this,P,G).call(this,4),a(this,b).setInt32(a(this,w),r,a(this,F)),d(this,w,a(this,w)+4),this}addInt16(r){return c(this,P,G).call(this,2),a(this,b).setInt16(a(this,w),r,a(this,F)),d(this,w,a(this,w)+2),this}addCString(r){return r&&this.addString(r),c(this,P,G).call(this,1),a(this,b).setUint8(a(this,w),0),ye(this,w)._++,this}addString(r=""){let t=W(r);return c(this,P,G).call(this,t),a(this,ne).encodeInto(r,new Uint8Array(a(this,b).buffer,a(this,w))),d(this,w,a(this,w)+t),this}add(r){return c(this,P,G).call(this,r.byteLength),new Uint8Array(a(this,b).buffer).set(new Uint8Array(r),a(this,w)),d(this,w,a(this,w)+r.byteLength),this}flush(r){let t=c(this,P,Ge).call(this,r);return d(this,w,5),d(this,b,c(this,P,re).call(this,this.size)),new Uint8Array(t)}};b=new WeakMap,w=new WeakMap,F=new WeakMap,ne=new WeakMap,Q=new WeakMap,P=new WeakSet,re=function(r){return new DataView(new ArrayBuffer(r))},G=function(r){if(a(this,b).byteLength-a(this,w)<r){let n=a(this,b).buffer,i=n.byteLength+(n.byteLength>>1)+r;d(this,b,c(this,P,re).call(this,i)),new Uint8Array(a(this,b).buffer).set(new Uint8Array(n))}},Ge=function(r){if(r){a(this,b).setUint8(a(this,Q),r);let t=a(this,w)-(a(this,Q)+1);a(this,b).setInt32(a(this,Q)+1,t,a(this,F))}return a(this,b).buffer.slice(r?0:5,a(this,w))};var h=new L,ht=e=>{h.addInt16(3).addInt16(0);for(let n of Object.keys(e))h.addCString(n).addCString(e[n]);h.addCString("client_encoding").addCString("UTF8");let r=h.addCString("").flush(),t=r.byteLength+4;return new L().addInt32(t).add(r).flush()},gt=()=>{let e=new DataView(new ArrayBuffer(8));return e.setInt32(0,8,!1),e.setInt32(4,80877103,!1),new Uint8Array(e.buffer)},bt=e=>h.addCString(e).flush(112),wt=(e,r)=>(h.addCString(e).addInt32(W(r)).addString(r),h.flush(112)),Tt=e=>h.addString(e).flush(112),xt=e=>h.addCString(e).flush(81),Pt=[],At=e=>{let r=e.name??"";r.length>63&&(console.error("Warning! Postgres only supports 63 characters for query names."),console.error("You supplied %s (%s)",r,r.length),console.error("This can cause conflicts and silent errors executing queries"));let t=h.addCString(r).addCString(e.text).addInt16(e.types?.length??0);return e.types?.forEach(n=>t.addInt32(n)),h.flush(80)},V=new L;var Rt=(e,r)=>{for(let t=0;t<e.length;t++){let n=r?r(e[t],t):e[t];if(n===null)h.addInt16(0),V.addInt32(-1);else if(n instanceof ArrayBuffer||ArrayBuffer.isView(n)){let i=ArrayBuffer.isView(n)?n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength):n;h.addInt16(1),V.addInt32(i.byteLength),V.add(i)}else h.addInt16(0),V.addInt32(W(n)),V.addString(n)}},Et=(e={})=>{let r=e.portal??"",t=e.statement??"",n=e.binary??!1,i=e.values??Pt,s=i.length;return h.addCString(r).addCString(t),h.addInt16(s),Rt(i,e.valueMapper),h.addInt16(s),h.add(V.flush()),h.addInt16(n?1:0),h.flush(66)},Dt=new Uint8Array([69,0,0,0,9,0,0,0,0,0]),Bt=e=>{if(!e||!e.portal&&!e.rows)return Dt;let r=e.portal??"",t=e.rows??0,n=W(r),i=4+n+1+4,s=new DataView(new ArrayBuffer(1+i));return s.setUint8(0,69),s.setInt32(1,i,!1),new TextEncoder().encodeInto(r,new Uint8Array(s.buffer,5)),s.setUint8(n+5,0),s.setUint32(s.byteLength-4,t,!1),new Uint8Array(s.buffer)},St=(e,r)=>{let t=new DataView(new ArrayBuffer(16));return t.setInt32(0,16,!1),t.setInt16(4,1234,!1),t.setInt16(6,5678,!1),t.setInt32(8,e,!1),t.setInt32(12,r,!1),new Uint8Array(t.buffer)},Pe=(e,r)=>{let t=new L;return t.addCString(r),t.flush(e)},It=h.addCString("P").flush(68),Mt=h.addCString("S").flush(68),kt=e=>e.name?Pe(68,`${e.type}${e.name??""}`):e.type==="P"?It:Mt,Lt=e=>{let r=`${e.type}${e.name??""}`;return Pe(67,r)},Ct=e=>h.add(e).flush(100),vt=e=>Pe(102,e),se=e=>new Uint8Array([e,0,0,0,4]),Ot=se(72),Ut=se(83),Nt=se(88),_t=se(99),A={startup:ht,password:bt,requestSsl:gt,sendSASLInitialResponseMessage:wt,sendSCRAMClientFinalMessage:Tt,query:xt,parse:At,bind:Et,execute:Bt,describe:kt,close:Lt,flush:()=>Ot,sync:()=>Ut,end:()=>Nt,copyData:Ct,copyDone:()=>_t,copyFail:vt,cancel:St};var C=class extends Error{constructor(t,n,i){super(t);this.length=n;this.name=i}};var mr=new ArrayBuffer(0);var Gt=1,Ft=4,Zr=Gt+Ft,en=new ArrayBuffer(0);function ae(e){let r=e.e;return r.query=e.query,r.params=e.params,r.queryOptions=e.options,r}var $,k,f,D,ie,v,Ae,oe=class{constructor(){p(this,f);this.serializers={...Ne};this.parsers={...Ue};p(this,$,!1);p(this,k,!1)}async _initArrayTypes({force:r=!1}={}){if(a(this,$)&&!r)return;d(this,$,!0);let t=await this.query(` SELECT b.oid, b.typarray FROM pg_catalog.pg_type a LEFT JOIN pg_catalog.pg_type b ON b.oid = a.typelem WHERE a.typcategory = 'A' GROUP BY b.oid, b.typarray ORDER BY b.oid `);for(let n of t.rows)this.serializers[n.typarray]=i=>we(i,this.serializers[n.oid],n.typarray),this.parsers[n.typarray]=i=>_e(i,this.parsers[n.oid],n.typarray)}async refreshArrayTypes(){await this._initArrayTypes({force:!0})}async query(r,t,n){return await this._checkReady(),await this._runExclusiveTransaction(async()=>await c(this,f,ie).call(this,r,t,n))}async sql(r,...t){let{query:n,params:i}=me(r,...t);return await this.query(n,i)}async exec(r,t){return await this._checkReady(),await this._runExclusiveTransaction(async()=>await c(this,f,v).call(this,r,t))}async describeQuery(r,t){try{await c(this,f,D).call(this,A.parse({text:r,types:t?.paramTypes}),t);let n=await c(this,f,D).call(this,A.describe({type:"S"}),t),i=n.messages.find(l=>l.name==="parameterDescription"),s=n.messages.find(l=>l.name==="rowDescription"),o=i?.dataTypeIDs.map(l=>({dataTypeID:l,serializer:this.serializers[l]}))??[],u=s?.fields.map(l=>({name:l.name,dataTypeID:l.dataTypeID,parser:this.parsers[l.dataTypeID]}))??[];return{queryParams:o,resultFields:u}}catch(n){throw n instanceof C?ae({e:n,options:t,params:void 0,query:r}):n}finally{await c(this,f,D).call(this,A.sync(),t)}}async transaction(r){return await this._checkReady(),await this._runExclusiveTransaction(async()=>{await c(this,f,v).call(this,"BEGIN"),d(this,k,!0);let t=!1,n=()=>{if(t)throw new Error("Transaction is closed")},i={query:async(s,o,u)=>(n(),await c(this,f,ie).call(this,s,o,u)),sql:async(s,...o)=>{let{query:u,params:l}=me(s,...o);return await c(this,f,ie).call(this,u,l)},exec:async(s,o)=>(n(),await c(this,f,v).call(this,s,o)),rollback:async()=>{n(),await c(this,f,v).call(this,"ROLLBACK"),t=!0},listen:async(s,o)=>(n(),await this.listen(s,o,i)),get closed(){return t}};try{let s=await r(i);return t||(t=!0,await c(this,f,v).call(this,"COMMIT")),d(this,k,!1),s}catch(s){throw t||await c(this,f,v).call(this,"ROLLBACK"),d(this,k,!1),s}})}async runExclusive(r){return await this._runExclusiveQuery(r)}};$=new WeakMap,k=new WeakMap,f=new WeakSet,D=async function(r,t={}){return await this.execProtocol(r,{...t,syncToFs:!1})},ie=async function(r,t=[],n){return await this._runExclusiveQuery(async()=>{c(this,f,Ae).call(this,"runQuery",r,t,n),await this._handleBlob(n?.blob);let i;try{let{messages:o}=await c(this,f,D).call(this,A.parse({text:r,types:n?.paramTypes}),n),u=xe((await c(this,f,D).call(this,A.describe({type:"S"}),n)).messages),l=t.map((y,m)=>{let x=u[m];if(y==null)return null;let R=n?.serializers?.[x]??this.serializers[x];return R?R(y):y.toString()});i=[...o,...(await c(this,f,D).call(this,A.bind({values:l}),n)).messages,...(await c(this,f,D).call(this,A.describe({type:"P"}),n)).messages,...(await c(this,f,D).call(this,A.execute({}),n)).messages]}catch(o){throw o instanceof C?ae({e:o,options:n,params:t,query:r}):o}finally{await c(this,f,D).call(this,A.sync(),n)}await this._cleanupBlob(),a(this,k)||await this.syncToFs();let s=await this._getWrittenBlob();return Te(i,this.parsers,n,s)[0]})},v=async function(r,t){return await this._runExclusiveQuery(async()=>{c(this,f,Ae).call(this,"runExec",r,t),await this._handleBlob(t?.blob);let n;try{n=(await c(this,f,D).call(this,A.query(r),t)).messages}catch(s){throw s instanceof C?ae({e:s,options:t,params:void 0,query:r}):s}finally{await c(this,f,D).call(this,A.sync(),t)}this._cleanupBlob(),a(this,k)||await this.syncToFs();let i=await this._getWrittenBlob();return Te(n,this.parsers,t,i)})},Ae=function(...r){this.debug>0&&console.log(...r)};var Dn=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var Re=()=>{if(globalThis.crypto?.randomUUID)return globalThis.crypto.randomUUID();let e=new Uint8Array(16);if(globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(e);else for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let r=[];return e.forEach(t=>{r.push(t.toString(16).padStart(2,"0"))}),r.slice(0,4).join("")+"-"+r.slice(4,6).join("")+"-"+r.slice(6,8).join("")+"-"+r.slice(8,10).join("")+"-"+r.slice(10).join("")};function Fe(e){let r;return e.startsWith('"')&&e.endsWith('"')?r=e.substring(1,e.length-1):r=e.toLowerCase(),r}var q,j,H,z,Y,B,O,U,S,K,J,X,N,M,Z,I,_,ee,ue,g,Qe,ce,E,Ve,Be=class Be extends oe{constructor(t,n){super();p(this,g);p(this,q);p(this,j,0);p(this,H,!1);p(this,z,!1);p(this,Y,!1);p(this,B,new EventTarget);p(this,O);p(this,U,!1);p(this,S);p(this,K);p(this,J);p(this,X);p(this,N);p(this,M);p(this,Z);p(this,I,new Map);p(this,_,new Set);p(this,ee);p(this,ue,[]);d(this,S,t),d(this,O,Re()),d(this,ee,n?.extensions??{}),d(this,J,new Promise(i=>{a(this,S).addEventListener("message",s=>{if(s.data.type==="here")i();else throw new Error("Invalid message")},{once:!0})})),d(this,X,new Promise(i=>{let s=o=>{o.data.type==="ready"&&(d(this,K,o.data.id),a(this,S).removeEventListener("message",s),i())};a(this,S).addEventListener("message",s)})),d(this,q,c(this,g,Qe).call(this,n))}static async create(t,n){let i=new Be(t,n);return await a(i,q),i}get waitReady(){return new Promise(t=>{a(this,q).then(()=>{a(this,U)?t():t(new Promise(n=>{a(this,B).addEventListener("connected",()=>{n()})}))})})}get debug(){return a(this,j)}get ready(){return a(this,H)}get closed(){return a(this,z)}get isLeader(){return a(this,Y)}async close(){var t;a(this,z)||(d(this,z,!0),a(this,N)?.close(),a(this,M)?.close(),(t=a(this,Z))==null||t.call(this),a(this,S).terminate())}async[Symbol.asyncDispose](){await this.close()}async execProtocolRaw(t){return await c(this,g,E).call(this,"execProtocolRaw",t)}async execProtocol(t){return await c(this,g,E).call(this,"execProtocol",t)}async syncToFs(){await c(this,g,E).call(this,"syncToFs")}async listen(t,n,i){let s=Fe(t),o=i??this;return a(this,I).has(s)||a(this,I).set(s,new Set),a(this,I).get(s).add(n),await o.exec(`LISTEN ${t}`),async u=>{await this.unlisten(s,n,u)}}async unlisten(t,n,i){await this.waitReady;let s=i??this;n?a(this,I).get(t)?.delete(n):a(this,I).delete(t),a(this,I).get(t)?.size===0&&await s.exec(`UNLISTEN ${t}`)}onNotification(t){return a(this,_).add(t),()=>{a(this,_).delete(t)}}offNotification(t){a(this,_).delete(t)}async dumpDataDir(t){return await c(this,g,E).call(this,"dumpDataDir",t)}onLeaderChange(t){return a(this,B).addEventListener("leader-change",t),()=>{a(this,B).removeEventListener("leader-change",t)}}offLeaderChange(t){a(this,B).removeEventListener("leader-change",t)}async _handleBlob(t){await c(this,g,E).call(this,"_handleBlob",t)}async _getWrittenBlob(){return await c(this,g,E).call(this,"_getWrittenBlob")}async _cleanupBlob(){await c(this,g,E).call(this,"_cleanupBlob")}async _checkReady(){await this.waitReady}async _runExclusiveQuery(t){await c(this,g,E).call(this,"_acquireQueryLock");try{return await t()}finally{await c(this,g,E).call(this,"_releaseQueryLock")}}async _runExclusiveTransaction(t){await c(this,g,E).call(this,"_acquireTransactionLock");try{return await t()}finally{await c(this,g,E).call(this,"_releaseTransactionLock")}}};q=new WeakMap,j=new WeakMap,H=new WeakMap,z=new WeakMap,Y=new WeakMap,B=new WeakMap,O=new WeakMap,U=new WeakMap,S=new WeakMap,K=new WeakMap,J=new WeakMap,X=new WeakMap,N=new WeakMap,M=new WeakMap,Z=new WeakMap,I=new WeakMap,_=new WeakMap,ee=new WeakMap,ue=new WeakMap,g=new WeakSet,Qe=async function(t={}){for(let[l,y]of Object.entries(a(this,ee))){if(y instanceof URL)throw new Error("URL extensions are not supported on the client side of a worker");{let m=await y.setup(this,{},!0);if(m.emscriptenOpts&&console.warn(`PGlite extension ${l} returned emscriptenOpts, these are not supported on the client side of a worker`),m.namespaceObj){let x=this;x[l]=m.namespaceObj}m.bundlePath&&console.warn(`PGlite extension ${l} returned bundlePath, this is not supported on the client side of a worker`),m.init&&await m.init(),m.close&&a(this,ue).push(m.close)}}await a(this,J);let{extensions:n,...i}=t;a(this,S).postMessage({type:"init",options:i}),await a(this,X);let s=`pglite-tab-close:${a(this,O)}`;d(this,Z,await De(s));let o=`pglite-broadcast:${a(this,K)}`;d(this,N,new BroadcastChannel(o));let u=`pglite-tab:${a(this,O)}`;d(this,M,new BroadcastChannel(u)),a(this,N).addEventListener("message",async l=>{l.data.type==="leader-here"?(d(this,U,!1),a(this,B).dispatchEvent(new Event("leader-change")),c(this,g,ce).call(this)):l.data.type==="notify"&&c(this,g,Ve).call(this,l.data.channel,l.data.payload)}),a(this,M).addEventListener("message",async l=>{l.data.type==="connected"&&(d(this,U,!0),a(this,B).dispatchEvent(new Event("connected")),d(this,j,await c(this,g,E).call(this,"getDebugLevel")),d(this,H,!0))}),a(this,S).addEventListener("message",async l=>{l.data.type==="leader-now"&&(d(this,Y,!0),a(this,B).dispatchEvent(new Event("leader-change")))}),c(this,g,ce).call(this),this._initArrayTypes()},ce=async function(){a(this,U)||(a(this,N).postMessage({type:"tab-here",id:a(this,O)}),setTimeout(()=>c(this,g,ce).call(this),16))},E=async function(t,...n){let i=Re(),s={type:"rpc-call",callId:i,method:t,args:n};return a(this,M).postMessage(s),await new Promise((o,u)=>{let l=x=>{if(x.data.callId!==i)return;m();let R=x.data;if(R.type==="rpc-return")o(R.result);else if(R.type==="rpc-error"){let Se=new Error(R.error.message);Object.assign(Se,R.error),u(Se)}else u(new Error("Invalid message"))},y=()=>{m(),u(new le)},m=()=>{a(this,M).removeEventListener("message",l),a(this,B).removeEventListener("leader-change",y)};a(this,B).addEventListener("leader-change",y),a(this,M).addEventListener("message",l)})},Ve=function(t,n){let i=a(this,I).get(t);if(i)for(let s of i)queueMicrotask(()=>s(n));for(let s of a(this,_))queueMicrotask(()=>s(t,n))};var Ee=Be;async function Qt({init:e}){postMessage({type:"here"});let r=await new Promise(y=>{addEventListener("message",m=>{m.data.type==="init"&&y(m.data.options)},{once:!0})}),t=r.id??`${T}:${r.dataDir??""}`;postMessage({type:"ready",id:t});let n=`pglite-election-lock:${t}`,i=`pglite-broadcast:${t}`,s=new BroadcastChannel(i),o=new Set;await De(n);let u=e(r);s.onmessage=async y=>{let m=y.data;switch(m.type){case"tab-here":Vt(m.id,await u,o);break}},s.postMessage({type:"leader-here",id:t}),postMessage({type:"leader-now"}),(await u).onNotification((y,m)=>{s.postMessage({type:"notify",channel:y,payload:m})})}function Vt(e,r,t){if(t.has(e))return;t.add(e);let n=`pglite-tab:${e}`,i=`pglite-tab-close:${e}`,s=new BroadcastChannel(n);navigator.locks.request(i,()=>new Promise(u=>{s.close(),t.delete(e),u()}));let o=qt(e,r);s.addEventListener("message",async u=>{let l=u.data;switch(l.type){case"rpc-call":{await r.waitReady;let{callId:y,method:m,args:x}=l;try{let R=await o[m](...x);s.postMessage({type:"rpc-return",callId:y,result:R})}catch(R){console.error(R),s.postMessage({type:"rpc-error",callId:y,error:{message:R.message}})}break}}}),s.postMessage({type:"connected"})}function qt(e,r){let t=null,n=null,i=`pglite-tab-close:${e}`;return De(i).then(()=>{n&&r.exec("ROLLBACK"),t?.(),n?.()}),{async getDebugLevel(){return r.debug},async close(){await r.close()},async execProtocol(s){let{messages:o,data:u}=await r.execProtocol(s);if(u.byteLength!==u.buffer.byteLength){let l=new ArrayBuffer(u.byteLength),y=new Uint8Array(l);return y.set(u),{messages:o,data:y}}else return{messages:o,data:u}},async execProtocolRaw(s,o={}){let u=await r.execProtocolRaw(s,o);if(u.byteLength!==u.buffer.byteLength){let l=new ArrayBuffer(u.byteLength),y=new Uint8Array(l);return y.set(u),y}else return u},async dumpDataDir(s){return await r.dumpDataDir(s)},async syncToFs(){return await r.syncToFs()},async _handleBlob(s){return await r._handleBlob(s)},async _getWrittenBlob(){return await r._getWrittenBlob()},async _cleanupBlob(){return await r._cleanupBlob()},async _checkReady(){return await r._checkReady()},async _acquireQueryLock(){return new Promise(s=>{r._runExclusiveQuery(()=>new Promise(o=>{t=o,s()}))})},async _releaseQueryLock(){t?.(),t=null},async _acquireTransactionLock(){return new Promise(s=>{r._runExclusiveTransaction(()=>new Promise(o=>{n=o,s()}))})},async _releaseTransactionLock(){n?.(),n=null}}}var le=class extends Error{constructor(){super("Leader changed, pending operation in indeterminate state")}};async function De(e){let r;return await new Promise(t=>{navigator.locks.request(e,()=>new Promise(n=>{r=n,t()}))}),r}0&&(module.exports={LeaderChangedError,PGliteWorker,worker}); //# sourceMappingURL=index.cjs.map