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