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