@moyodb/sdk 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CONTRIBUTING.md +46 -0
  2. package/README.md +4 -2
  3. package/dist/assets/browser-worker-p7uX85l-.js +4 -0
  4. package/dist/assets/browser-worker-p7uX85l-.js.map +1 -0
  5. package/dist/assets/shared-worker-BALTqEUe.js +2 -0
  6. package/dist/assets/shared-worker-BALTqEUe.js.map +1 -0
  7. package/dist/chunks/{indexing-CKtbpaZn.js → indexing-DdpU69Fd.js} +344 -185
  8. package/dist/chunks/indexing-DdpU69Fd.js.map +1 -0
  9. package/dist/codec.d.ts.map +1 -1
  10. package/dist/compression.d.ts.map +1 -1
  11. package/dist/demo.d.ts.map +1 -1
  12. package/dist/engine/README.md +4 -2
  13. package/dist/engine/moyodb_engine.d.ts +4 -2
  14. package/dist/engine/moyodb_engine.js +45 -22
  15. package/dist/engine/moyodb_engine_bg.wasm +0 -0
  16. package/dist/engine/moyodb_engine_bg.wasm.d.ts +3 -2
  17. package/dist/engine/package.json +1 -1
  18. package/dist/engine/snippets/{moyodb-engine-54a406e33b0fb849 → moyodb-engine-1f8134232168280b}/js/opfs_shim.js +8 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/indexing.d.ts +7 -0
  21. package/dist/indexing.d.ts.map +1 -1
  22. package/dist/moyodb-sdk.js +1265 -872
  23. package/dist/moyodb-sdk.js.map +1 -1
  24. package/dist/node-engine.js +411 -81
  25. package/dist/node-engine.js.map +1 -1
  26. package/dist/node.js +354 -74
  27. package/dist/node.js.map +1 -1
  28. package/dist/registry.d.ts.map +1 -1
  29. package/dist/subscriptions.d.ts.map +1 -1
  30. package/dist/worker-api.d.ts +2 -5
  31. package/dist/worker-api.d.ts.map +1 -1
  32. package/dist/worker-client.d.ts.map +1 -1
  33. package/dist/worker-protocol.d.ts +7 -2
  34. package/dist/worker-protocol.d.ts.map +1 -1
  35. package/dist/worker-server.d.ts.map +1 -1
  36. package/dist/worker.d.ts +12 -5
  37. package/dist/worker.d.ts.map +1 -1
  38. package/package.json +5 -3
  39. package/dist/assets/browser-worker-DBt51gsS.js +0 -4
  40. package/dist/assets/browser-worker-DBt51gsS.js.map +0 -1
  41. package/dist/assets/shared-worker-NdniRuEL.js +0 -2
  42. package/dist/assets/shared-worker-NdniRuEL.js.map +0 -1
  43. package/dist/chunks/indexing-CKtbpaZn.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ function e(e){return typeof e==`object`&&!!e}function t(e){return!Number.isFinite(e)||e<=0?0:e>2147483647?2147483647:e}const n=`moyodb:worker-protocol:response`,r=`moyodb:worker-protocol:request-batch`,i=/* @__PURE__ */ `open.close.destroy.deleteDB.begin.commit.rollback.autocommit.createStore.dropStore.clearStore.get.getMany.has.put.putMany.delete.deleteMany.applyBatch.scan.scanPage.closeCursor.getByIndex.scanByIndex.scanByIndexPage.getIndexes.reconcileIndexes.listStores.getVersion.changesSince.setSchemaVersion.exportSnapshot.importSnapshot.reset.compact.rebuild.stats.storageInfo.requestPersistence.setFailpoint`.split(`.`),a=/* @__PURE__ */ new Set([`get`,`getMany`,`has`,`put`,`putMany`,`delete`,`deleteMany`,`applyBatch`,`scan`,`getByIndex`,`scanByIndex`,`createStore`,`dropStore`,`clearStore`]);function o(e){return typeof e==`string`&&a.has(e)}const s=`moyodb:packed-binary-list:v1`,c=`moyodb:packed-nullable-binary-list:v1`,l=`moyodb:packed-scan-rows:v1`,u=`moyodb:packed-batch-ops:v1`,d=`moyodb:packed-optional-values:v1`,f=4294967295,p=16777216,m=[],ee=new Set(i);function te(e){return typeof e==`string`&&ee.has(e)}function ne(e){return h(e)&&e.version===1&&(e.batching===void 0||e.batching===1)}function h(t){return e(t)&&t.type===`moyodb:worker-protocol:ready`}function g(t){return e(t)&&t.type===`moyodb:worker-protocol:response`&&t.version===1&&typeof t.id==`number`&&Number.isSafeInteger(t.id)&&typeof t.ok==`boolean`}function re(t){return e(t)&&t.type===`moyodb:worker-protocol:request`&&t.version===1&&typeof t.id==`number`&&Number.isSafeInteger(t.id)&&typeof t.command==`string`&&Array.isArray(t.args)}function ie(e){return _(e,r,`requests`)}function ae(e){if(!_(e,`moyodb:worker-protocol:response-batch`,`responses`))return!1;for(let t of e.responses)if(!g(t))return!1;return!0}function _(t,n,r){return e(t)&&t.type===n&&t.version===1&&Array.isArray(t[r])&&t[r].length>0&&t[r].length<=128}function oe(t){return e(t)&&(t.type===`moyodb:worker-protocol:request`||t.type===`moyodb:worker-protocol:response`||t.type===`moyodb:worker-protocol:request-batch`||t.type===`moyodb:worker-protocol:response-batch`||t.type===`moyodb:worker-protocol:ready`)}function v(t){if(e(t)){let e=L(t.code);return{name:L(t.name)??e??`Error`,code:e,message:L(t.message)??`Unknown error`,stack:L(t.stack)}}return{name:`Error`,message:String(t)}}function se(t){if(!e(t)||typeof t.name!=`string`||typeof t.message!=`string`||t.code!==void 0&&typeof t.code!=`string`||t.stack!==void 0&&typeof t.stack!=`string`)throw y(`WorkerProtocolError`,`invalid serialized worker error`);let n=Error(t.message);return n.name=t.name||t.code||`Error`,t.stack&&(n.stack=t.stack),t.code&&b(n,t.code),n}function y(e,t,n=e){let r=Error(t);return r.name=e,b(r,n),r}function b(e,t){Object.defineProperty(e,"code",{value:t,enumerable:!0,configurable:!0})}function x(e,t){if(e===`autocommit`){let[e,n,r]=t;if(o(n)&&Array.isArray(r)){let t=x(n,[0,...r]);return{args:[e,n,t.args.slice(1)],transfer:t.transfer}}}if(e===`get`||e===`has`||e===`delete`||e===`getByIndex`||e===`put`){let n=e===`getByIndex`?3:2,r=null,i=null;for(let a=n;a<=(e===`put`?3:n);a+=1){let e=t[a];if(e instanceof Uint8Array&&e.buffer instanceof ArrayBuffer&&(e.byteOffset!==0||e.byteLength!==e.buffer.byteLength)){let n=I(e);r??=[...t],r[a]=n,(i??=[]).push(n.buffer)}}if(r!==null)return{args:r,transfer:i??m}}if(e===`importSnapshot`){let e=t[0];if(e instanceof Uint8Array){let t=I(e);return{args:[t],transfer:[t.buffer]}}}if(e===`getMany`||e===`deleteMany`){let[e,n,r]=t;if(Array.isArray(r)&&r.length>0){let t=he(r);return{args:[e,n,t],transfer:[t.bytes.buffer]}}}if(e===`putMany`){let[e,n,r,i]=t;if(Array.isArray(r)&&r.length>0){let t=me(r);return{args:[e,n,t,i],transfer:[t.bytes.buffer]}}}if(e===`applyBatch`){let[e,n,r]=t;if(Array.isArray(r)&&r.length>0){let t=be(r);return{args:[e,n,t],transfer:[t.bytes.buffer]}}}return{args:t,transfer:m}}function S(e,t){if(e===`autocommit`){let[e,n,r]=t;if(o(n)&&Array.isArray(r))return[e,n,S(n,[0,...r]).slice(1)]}if(e===`getMany`||e===`deleteMany`){let[e,n,r]=t;if(!Array.isArray(r)){if(!M(r,s))throw y(`WorkerProtocolError`,`invalid packed binary-list argument`);return[e,n,ge(r)]}}if(e===`putMany`){let[e,n,r,i]=t;if(!Array.isArray(r)){if(!M(r,s))throw y(`WorkerProtocolError`,`invalid packed putMany argument`);return[e,n,_e(r,!1),i]}}if(e===`applyBatch`){let[e,n,r]=t;if(!Array.isArray(r)){if(!M(r,u))throw y(`WorkerProtocolError`,`invalid packed batch argument`);return[e,n,xe(r,!1)]}}return t}function C(e){return M(e,s)?e.bytes:null}function ce(e){return M(e,u)?e.bytes:null}function le(e){if(!(e instanceof Uint8Array)||e.byteLength<4)throw y(`WorkerProtocolError`,`invalid packed optional-values payload`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0,!0),r=P(4,N(n,4,`packed optional-values metadata`),`packed optional-values header`);if(r>e.byteLength)throw y(`WorkerProtocolError`,`packed optional-values metadata exceeds payload length`);let i=Array(n),a=r;for(let r=0;r<n;r+=1){let n=t.getUint32(4+r*4,!0);if(n===f){i[r]=null;continue}let o=a+n;if(o>e.byteLength)throw y(`WorkerProtocolError`,`packed optional-values item exceeds payload length`);i[r]=e.subarray(a,o),a=o}if(a!==e.byteLength)throw y(`WorkerProtocolError`,`packed optional-values payload has trailing bytes`);return i}function ue(t,n){if((t===`scan`||t===`scanByIndex`)&&(w(n)||M(n,l)))return{result:n,transfer:D(n.bytes)};if(t===`scanPage`){let t=n;if(e(t)&&(w(t.rows)||M(t.rows,l)))return{result:t,transfer:D(t.rows.bytes)};if(e(t)&&Array.isArray(t.rows)){let e=A(t.rows);return{result:{...t,rows:e??t.rows},transfer:e?[e.bytes.buffer]:T(t.rows)}}}if(t===`getMany`&&M(n,d))return{result:n,transfer:D(n.bytes)};if(t===`scanByIndexPage`){let t=n;if(e(t)&&M(t.rows,l))return{result:t,transfer:T(t)};if(e(t)&&Array.isArray(t.rows)){let e=t.rows.length>0?A(t.rows):null,n={rows:e??t.rows,cursor:t.cursor},r=e?[e.bytes.buffer]:T(t.rows),i=O(t.cursor);return{result:n,transfer:i===null?r:[...r,i]}}}if(t===`getMany`){let e=n;if(Array.isArray(e)&&e.length>0){let t=ve(e);if(t)return{result:t,transfer:[t.bytes.buffer]}}return{result:n,transfer:T(n)}}if(t===`scan`||t===`scanByIndex`){let e=n;if(Array.isArray(e)&&e.length>0){let t=A(e);if(t)return{result:t,transfer:[t.bytes.buffer]}}return{result:n,transfer:T(n)}}return t===`get`||t===`getByIndex`||t===`exportSnapshot`?{result:n,transfer:D(n)}:t===`changesSince`?{result:n,transfer:pe(n)}:{result:n,transfer:[]}}function de(t,n){if(t===`scanPage`){if(!e(n)||typeof n.done!=`boolean`||typeof n.bytes!=`number`||!Number.isSafeInteger(n.bytes)||n.bytes<4||n.cursorId!==void 0&&(typeof n.cursorId!=`number`||!Number.isSafeInteger(n.cursorId)||n.cursorId<=0)||(n.done?n.cursorId!==void 0:n.cursorId===void 0))throw y(`WorkerProtocolError`,`invalid scan page response`);let t=w(n.rows)?fe(n.rows.bytes):M(n.rows,l)?j(n.rows):n.rows;if(!Array.isArray(t))throw y(`WorkerProtocolError`,`invalid scan page rows`);let r=4;for(let n of t){if(!e(n)||!(n.key instanceof Uint8Array)||!(n.value instanceof Uint8Array))throw y(`WorkerProtocolError`,`invalid scan page row`);r+=8+n.key.byteLength+n.value.byteLength}if(r!==n.bytes)throw y(`WorkerProtocolError`,`scan page byte count mismatch`);return{rows:t,cursorId:n.cursorId,done:n.done,bytes:n.bytes}}if((t===`scan`||t===`scanByIndex`)&&w(n))return fe(n.bytes);if(t===`getMany`&&M(n,c))return ye(n);if(t===`getMany`&&M(n,d))return le(n.bytes);if(t===`getMany`&&!Array.isArray(n))throw y(`WorkerProtocolError`,`invalid packed getMany response`);if(t===`scanByIndexPage`){if(!e(n)||!Array.isArray(n.rows)&&!M(n.rows,l)||n.cursor!==null&&!(n.cursor instanceof Uint8Array))throw y(`WorkerProtocolError`,`invalid packed index scan page response`);return{rows:M(n.rows,l)?j(n.rows):n.rows,cursor:n.cursor}}if((t===`scan`||t===`scanByIndex`)&&M(n,l))return j(n);if((t===`scan`||t===`scanByIndex`)&&!Array.isArray(n))throw y(`WorkerProtocolError`,`invalid packed scan response`);return n}function w(t){return e(t)&&t.__moyodbPacked===`moyodb:packed-engine-scan-rows:v1`&&t.bytes instanceof Uint8Array}function fe(e){if(!(e instanceof Uint8Array)||e.byteLength<4)throw y(`WorkerProtocolError`,`invalid engine scan packet`);let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0,!0);if(n>(e.byteLength-4)/8)throw y(`WorkerProtocolError`,`engine scan row count exceeds packet length`);let r=Array(n),i=4;for(let a=0;a<n;a+=1){if(i+8>e.byteLength)throw y(`WorkerProtocolError`,`truncated engine scan row`);let n=t.getUint32(i,!0),o=t.getUint32(i+4,!0),s=i+8,c=s+n,l=c+o;if(l>e.byteLength)throw y(`WorkerProtocolError`,`engine scan row exceeds packet length`);r[a]={key:e.subarray(s,c),value:e.subarray(c,l)},i=l}if(i!==e.byteLength)throw y(`WorkerProtocolError`,`engine scan packet has trailing bytes`);return r}function T(e){let t=O(e);if(t!==null)return[t];if(typeof e!=`object`||!e)return m;let n=/* @__PURE__ */ new Set;return k(e,n,/* @__PURE__ */ new WeakSet),n.size===0?m:Array.from(n)}function E(e,t){let n=t.length>0?structuredClone(e,{transfer:t.length===1?t:Array.from(new Set(t))}):structuredClone(e),r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new WeakSet,a=0,o=e=>{if(typeof e==`string`){a+=8+e.length*2;return}if(typeof e!=`object`||!e){a+=8;return}if(!i.has(e)){if(i.add(e),a+=8,e instanceof ArrayBuffer)r.add(e),a+=e.byteLength;else if(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)a+=e.byteLength;else if(ArrayBuffer.isView(e))o(e.buffer);else if(Array.isArray(e))for(let t of e)o(t);else if(e instanceof Map)for(let[t,n]of e)o(t),o(n);else if(e instanceof Set)for(let t of e)o(t);else{let t=e;for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&(a+=8+e.length*2,o(t[e]))}}};return o(n),{value:n,transfer:r.size===0?m:Array.from(r),byteLength:a}}function D(e){let t=O(e);return t===null?m:[t]}function O(e){if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e)){let t=e.buffer;if(t instanceof ArrayBuffer&&e.byteOffset===0&&e.byteLength===t.byteLength)return t}return null}function pe(t){if(!e(t)||!Array.isArray(t.changes)||t.changes.length===0)return m;let n=null;for(let r of t.changes){if(!e(r))continue;let t=O(r.key);t!==null&&(n??=/* @__PURE__ */ new Set,n.add(t));let i=O(r.value);i!==null&&(n??=/* @__PURE__ */ new Set,n.add(i))}return n===null||n.size===0?m:Array.from(n)}function k(e,t,n){if(e==null)return;if(e instanceof ArrayBuffer){t.add(e);return}if(ArrayBuffer.isView(e)){let n=e.buffer;n instanceof ArrayBuffer&&e.byteOffset===0&&e.byteLength===n.byteLength&&t.add(n);return}if(typeof e!=`object`)return;let r=e;if(n.has(r))return;if(n.add(r),Array.isArray(e)){for(let r of e)k(r,t,n);return}let i=e;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&k(i[e],t,n)}function me(e){let t=e.length,n=F(t*2,`packed putMany item count`),r=N(n,4,`packed putMany metadata`),i=0;for(let n=0;n<t;n+=1){let t=e[n],r=t[0],a=t[1];if(!(r instanceof Uint8Array)||!(a instanceof Uint8Array))throw y(`WorkerProtocolError`,`putMany entry key/value is not a Uint8Array`);let o=F(r.byteLength,`putMany key length`),s=F(a.byteLength,`putMany value length`);if(i+=o+s,i>f)throw y(`WorkerProtocolError`,`packed putMany payload exceeds 32-bit payload limit`)}let a=P(4,r,`packed putMany header`),o=P(a,i,`packed putMany total`),c=new Uint8Array(o),l=new DataView(c.buffer);l.setUint32(0,n,!0);let u=4,d=a;for(let n=0;n<t;n+=1){let t=e[n],r=t[0],i=t[1],a=r.byteLength,o=i.byteLength;l.setUint32(u,a,!0),u+=4,l.setUint32(u,o,!0),u+=4,c.set(r,d),d+=a,c.set(i,d),d+=o}return{__moyodbPacked:s,bytes:c}}function he(e){let t=e.length,n=N(t,4,`packed binary-list metadata`),r=0;for(let n=0;n<t;n+=1){let t=e[n];if(!(t instanceof Uint8Array))throw y(`WorkerProtocolError`,`binary-list payload item is not a Uint8Array`);let i=F(t.byteLength,`binary-list item length`);if(r+=i,r>f)throw y(`WorkerProtocolError`,`packed binary-list payload exceeds 32-bit payload limit`)}let i=P(4,n,`packed binary-list header`),a=P(i,r,`packed binary-list total`),o=new Uint8Array(a),c=new DataView(o.buffer);c.setUint32(0,t,!0);let l=4,u=i;for(let n=0;n<t;n+=1){let t=e[n],r=t.byteLength;c.setUint32(l,r,!0),l+=4,o.set(t,u),u+=r}return{__moyodbPacked:s,bytes:o}}function ge(e){let t=e.bytes;if(!(t instanceof Uint8Array)||t.byteLength<4)throw y(`WorkerProtocolError`,`invalid packed binary-list payload`);let n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=n.getUint32(0,!0),i=P(4,N(r,4,`packed binary-list metadata`),`packed binary-list header`);if(i>t.byteLength)throw y(`WorkerProtocolError`,`packed binary-list metadata exceeds payload length`);let a=Array(r),o=4,s=i;for(let e=0;e<r;e+=1){let r=n.getUint32(o,!0);o+=4;let i=s+r;if(i>f||i>t.byteLength)throw y(`WorkerProtocolError`,`packed binary-list item exceeds payload length`);a[e]=t.subarray(s,i),s=i}if(s!==t.byteLength)throw y(`WorkerProtocolError`,`packed binary-list payload has trailing bytes`);return a}function _e(e,t){let n=e.bytes;if(!(n instanceof Uint8Array)||n.byteLength<4)throw y(`WorkerProtocolError`,`invalid packed putMany payload`);let r=new DataView(n.buffer,n.byteOffset,n.byteLength),i=r.getUint32(0,!0);if(i%2!=0)throw y(`WorkerProtocolError`,`packed putMany payload has an odd item count`);let a=P(4,N(i,4,`packed putMany metadata`),`packed putMany header`);if(a>n.byteLength)throw y(`WorkerProtocolError`,`packed putMany metadata exceeds payload length`);let o=i/2,s=Array(o),c=4,l=a;for(let e=0;e<o;e+=1){let i=r.getUint32(c,!0),a=r.getUint32(c+4,!0);c+=8;let o=l+i;if(o>f||o>n.byteLength)throw y(`WorkerProtocolError`,`packed putMany key exceeds payload length`);let u=o+a;if(u>f||u>n.byteLength)throw y(`WorkerProtocolError`,`packed putMany value exceeds payload length`);t?s[e]=n.subarray(l,o):s[e]=[n.subarray(l,o),n.subarray(o,u)],l=u}if(l!==n.byteLength)throw y(`WorkerProtocolError`,`packed putMany payload has trailing bytes`);return s}function ve(e){let t=e.length,n=N(t,5,`packed nullable binary-list metadata`),r=0;for(let n=0;n<t;n+=1){let t=e[n];if(t===null)continue;if(!(t instanceof Uint8Array))throw y(`WorkerProtocolError`,`nullable binary-list payload item is not a Uint8Array or null`);let i=F(t.byteLength,`nullable binary-list item length`);if(r+=i,r>f)throw y(`WorkerProtocolError`,`packed nullable binary-list payload exceeds 32-bit payload limit`)}let i=P(4,n,`packed nullable binary-list header`),a=P(i,r,`packed nullable binary-list total`);if(a>p)return null;let o=new Uint8Array(a),s=new DataView(o.buffer);s.setUint32(0,t,!0);let l=4,u=i;for(let n=0;n<t;n+=1){let t=e[n];if(t===null){s.setUint8(l,0),s.setUint32(l+1,0,!0),l+=5;continue}let r=t.byteLength;s.setUint8(l,1),s.setUint32(l+1,r,!0),l+=5,o.set(t,u),u+=r}return{__moyodbPacked:c,bytes:o}}function ye(e){let t=e.bytes;if(!(t instanceof Uint8Array)||t.byteLength<4)throw y(`WorkerProtocolError`,`invalid packed nullable binary-list payload`);let n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=n.getUint32(0,!0),i=P(4,N(r,5,`packed nullable binary-list metadata`),`packed nullable binary-list header`);if(i>t.byteLength)throw y(`WorkerProtocolError`,`packed nullable binary-list metadata exceeds payload length`);let a=Array(r),o=4,s=i;for(let e=0;e<r;e+=1){let r=n.getUint8(o),i=n.getUint32(o+1,!0);if(o+=5,r===0){if(i!==0)throw y(`WorkerProtocolError`,`packed nullable binary-list null item has a payload length`);a[e]=null;continue}if(r!==1)throw y(`WorkerProtocolError`,`packed nullable binary-list item has invalid presence byte: ${r}`);let c=s+i;if(c>f||c>t.byteLength)throw y(`WorkerProtocolError`,`packed nullable binary-list item exceeds payload length`);a[e]=t.subarray(s,c),s=c}if(s!==t.byteLength)throw y(`WorkerProtocolError`,`packed nullable binary-list payload has trailing bytes`);return a}function A(t){let n=t.length,r=N(n,8,`packed scan row metadata`),i=0;for(let r=0;r<n;r+=1){let n=t[r];if(!e(n)||!(n.key instanceof Uint8Array)||!(n.value instanceof Uint8Array))throw y(`WorkerProtocolError`,`scan row payload key/value is not a Uint8Array`);let a=F(n.key.byteLength,`scan row key length`),o=F(n.value.byteLength,`scan row value length`);if(i+=a+o,i>f)throw y(`WorkerProtocolError`,`packed scan row payload exceeds 32-bit payload limit`)}let a=P(4,r,`packed scan row header`),o=P(a,i,`packed scan row total`);if(o>p)return null;let s=new Uint8Array(o),c=new DataView(s.buffer);c.setUint32(0,n,!0);let u=4,d=a;for(let e=0;e<n;e+=1){let n=t[e],r=n.key,i=n.value,a=r.byteLength,o=i.byteLength;c.setUint32(u,a,!0),c.setUint32(u+4,o,!0),u+=8,s.set(r,d),d+=a,s.set(i,d),d+=o}return{__moyodbPacked:l,bytes:s}}function j(e){let t=e.bytes;if(!(t instanceof Uint8Array)||t.byteLength<4)throw y(`WorkerProtocolError`,`invalid packed scan row payload`);let n=new DataView(t.buffer,t.byteOffset,t.byteLength),r=n.getUint32(0,!0),i=P(4,N(r,8,`packed scan row metadata`),`packed scan row header`);if(i>t.byteLength)throw y(`WorkerProtocolError`,`packed scan row metadata exceeds payload length`);let a=Array(r),o=4,s=i;for(let e=0;e<r;e+=1){let r=n.getUint32(o,!0),i=n.getUint32(o+4,!0);o+=8;let c=s+r;if(c>f||c>t.byteLength)throw y(`WorkerProtocolError`,`packed scan row key exceeds payload length`);let l=c+i;if(l>f||l>t.byteLength)throw y(`WorkerProtocolError`,`packed scan row value exceeds payload length`);a[e]={key:t.subarray(s,c),value:t.subarray(c,l)},s=l}if(s!==t.byteLength)throw y(`WorkerProtocolError`,`packed scan row payload has trailing bytes`);return a}function be(t){let n=t.length,r=N(n,9,`packed batch metadata`),i=0;for(let r=0;r<n;r+=1){let n=t[r];if(!e(n)||n.kind!==`put`&&n.kind!==`delete`)throw y(`WorkerProtocolError`,`batch operation kind is not put or delete`);if(!(n.key instanceof Uint8Array))throw y(`WorkerProtocolError`,`batch operation key is not a Uint8Array`);let a=F(n.key.byteLength,`batch operation key length`);if(i+=a,i>f)throw y(`WorkerProtocolError`,`packed batch payload exceeds 32-bit payload limit`);if(n.kind===`put`){if(!(n.value instanceof Uint8Array))throw y(`WorkerProtocolError`,`batch put value is not a Uint8Array`);let e=F(n.value.byteLength,`batch put value length`);if(i+=e,i>f)throw y(`WorkerProtocolError`,`packed batch payload exceeds 32-bit payload limit`)}}let a=P(4,r,`packed batch header`),o=P(a,i,`packed batch total`),s=new Uint8Array(o),c=new DataView(s.buffer);c.setUint32(0,n,!0);let l=4,d=a;for(let e=0;e<n;e+=1){let n=t[e],r=n.key,i=r.byteLength,a=n.kind===`put`?n.value.byteLength:0;c.setUint8(l,+(n.kind===`put`)),c.setUint32(l+1,i,!0),c.setUint32(l+5,a,!0),l+=9,s.set(r,d),d+=i,n.kind===`put`&&(s.set(n.value,d),d+=a)}return{__moyodbPacked:u,bytes:s}}function xe(e,t){let n=e.bytes;if(!(n instanceof Uint8Array)||n.byteLength<4)throw y(`WorkerProtocolError`,`invalid packed batch payload`);let r=new DataView(n.buffer,n.byteOffset,n.byteLength),i=r.getUint32(0,!0),a=P(4,N(i,9,`packed batch metadata`),`packed batch header`);if(a>n.byteLength)throw y(`WorkerProtocolError`,`packed batch metadata exceeds payload length`);let o=Array(i),s=4,c=a;for(let e=0;e<i;e+=1){let i=r.getUint8(s),a=r.getUint32(s+1,!0),l=r.getUint32(s+5,!0);s+=9;let u=c+a;if(u>f||u>n.byteLength)throw y(`WorkerProtocolError`,`packed batch key exceeds payload length`);let d=n.subarray(c,u);if(c=u,i===0){if(l!==0)throw y(`WorkerProtocolError`,`packed delete operation has a value payload`);o[e]={kind:`delete`,key:d};continue}if(i!==1)throw y(`WorkerProtocolError`,`packed batch operation has invalid kind byte: ${i}`);let p=c+l;if(p>f||p>n.byteLength)throw y(`WorkerProtocolError`,`packed batch value exceeds payload length`);t?o[e]={kind:`put`,key:d}:o[e]={kind:`put`,key:d,value:n.subarray(c,p)},c=p}if(c!==n.byteLength)throw y(`WorkerProtocolError`,`packed batch payload has trailing bytes`);return o}function M(t,n){return e(t)&&t.__moyodbPacked===n&&t.bytes instanceof Uint8Array}function N(e,t,n){if(!Number.isSafeInteger(e)||e<0)throw y(`WorkerProtocolError`,`${n} count is invalid: ${e}`);return F(e*t,n)}function P(e,t,n){return F(e+t,n)}function F(e,t){if(!Number.isSafeInteger(e)||e<0||e>f)throw y(`WorkerProtocolError`,`${t} exceeds 32-bit payload limit`);return e}function I(e){let t=new Uint8Array(e.byteLength);return t.set(e),t}function L(e){return typeof e==`string`?e:void 0}function R(e){e.timeout&&=(clearTimeout(e.timeout),null)}var Se=class{worker;nextRequestId=1;pending=/* @__PURE__ */ new Map;closed=!1;readyResolved=!1;readyResolve=null;readyReject=null;ready;requestTimeoutMs;fatalHandler=null;closeReason=null;batching=!1;queuedRequests=[];queuedBytes=0;flushScheduled=!1;awaitingReady=0;readyTimeout=null;forwardScanPackets;constructor(e,n={}){this.worker=e,this.forwardScanPackets=n.forwardScanPackets===!0,this.requestTimeoutMs=t(n.requestTimeoutMs??0),this.ready=new Promise((e,t)=>{this.readyResolve=e,this.readyReject=t});let r=t(n.readyTimeoutMs??0);r>0&&(this.readyTimeout=setTimeout(()=>{this.fail(y(`WorkerReadyTimeoutError`,`worker did not become ready`))},r)),this.ready.catch(()=>void 0),this.worker.addEventListener(`message`,this.handleMessage),this.worker.addEventListener(`messageerror`,this.handleMessageError),this.worker.addEventListener(`error`,this.handleError)}setFatalHandler(e){this.fatalHandler=e}whenReady(){return this.ready}dispose(e=y(`WorkerTerminatedError`,`worker transport was closed`)){this.disposeInternal(e,!1)}fail(e){this.disposeInternal(e,!0)}open(e){return this.request(`open`,[e])}close(){return this.request(`close`,[])}destroy(){return this.request(`destroy`,[])}deleteDB(e){return this.request(`deleteDB`,[e])}begin(e){return this.request(`begin`,[e])}commit(e){return this.request(`commit`,[e])}rollback(e){return this.request(`rollback`,[e])}autocommit(e,t,n){return this.send(`autocommit`,[e,t,n],t)}createStore(e,t,n){return this.request(`createStore`,[e,t,n])}dropStore(e,t){return this.request(`dropStore`,[e,t])}clearStore(e,t){return this.request(`clearStore`,[e,t])}get(e,t,n){return this.request(`get`,[e,t,n])}getMany(e,t,n){return this.request(`getMany`,[e,t,n])}has(e,t,n){return this.request(`has`,[e,t,n])}put(e,t,n,r,i){return this.request(`put`,[e,t,n,r,i])}putMany(e,t,n,r){return this.request(`putMany`,[e,t,n,r])}delete(e,t,n){return this.request(`delete`,[e,t,n])}deleteMany(e,t,n){return this.request(`deleteMany`,[e,t,n])}applyBatch(e,t,n){return this.request(`applyBatch`,[e,t,n])}scan(e,t,n){return this.request(`scan`,[e,t,n])}scanPage(e){return this.request(`scanPage`,[e])}closeCursor(e){return this.request(`closeCursor`,[e])}getByIndex(e,t,n,r){return this.request(`getByIndex`,[e,t,n,r])}scanByIndex(e,t,n,r){return this.request(`scanByIndex`,[e,t,n,r])}scanByIndexPage(e,t,n,r,i,a,o){return this.request(`scanByIndexPage`,[e,t,n,r,i,a,o])}getIndexes(e){return this.request(`getIndexes`,e===void 0?[]:[e])}reconcileIndexes(e,t){return this.request(`reconcileIndexes`,[e,t])}listStores(){return this.request(`listStores`,[])}getVersion(){return this.request(`getVersion`,[])}changesSince(e,t){return this.request(`changesSince`,[e,t])}setSchemaVersion(e,t){return this.request(`setSchemaVersion`,[e,t])}exportSnapshot(e){return this.request(`exportSnapshot`,[e])}importSnapshot(e){return this.request(`importSnapshot`,[e])}reset(){return this.request(`reset`,[])}compact(){return this.request(`compact`,[])}rebuild(){return this.request(`rebuild`,[])}stats(){return this.request(`stats`,[])}storageInfo(){return this.request(`storageInfo`,[])}requestPersistence(){return this.request(`requestPersistence`,[])}setFailpoint(e){return this.request(`setFailpoint`,[e])}async request(e,t){return await this.send(e,t,e)}async send(e,t,n){this.ensureOpen(),this.awaitingReady+=1;try{await this.ready}finally{--this.awaitingReady}this.ensureOpen();let r=this.batching&&(this.awaitingReady>0||this.queuedRequests.length>0),i=this.nextRequestId;this.nextRequestId+=1;let a=x(e,t),o={type:`moyodb:worker-protocol:request`,version:1,id:i,command:e,args:a.args};return await new Promise((t,s)=>{let c=this.requestTimeoutMs>0?setTimeout(()=>{let t=this.pending.get(i);t&&t.timeout!==null&&(this.pending.delete(i),t.timeout=null,s(y(`WorkerRequestTimeoutError`,`worker command ${e} timed out after ${this.requestTimeoutMs}ms`)))},this.requestTimeoutMs):null;this.pending.set(i,{command:n,resolve:t,reject:s,timeout:c});try{r?this.queueRequest(o,a.transfer):a.transfer.length>0?this.worker.postMessage(o,a.transfer):this.worker.postMessage(o)}catch(e){this.rejectPending(i,e instanceof Error?e:Error(String(e)))}})}queueRequest(e,t){if(!this.pending.has(e.id))return;let n=z(e);if(this.queuedRequests.length>0&&this.queuedBytes+n>1048576&&this.flushRequests(),this.queuedRequests.length+1>=128||this.queuedBytes+n>=1048576){this.queuedRequests.push({message:e,transfer:t,byteLength:n}),this.queuedBytes+=n,this.flushRequests();return}let r=we(e,t);this.pending.has(e.id)&&(this.queuedRequests.push({message:r.value,transfer:r.transfer,byteLength:r.byteLength}),this.queuedBytes+=r.byteLength,this.flushScheduled||(this.flushScheduled=!0,queueMicrotask(()=>{this.flushScheduled=!1,this.flushRequests()})))}flushRequests(){let e=this.queuedRequests;if(this.queuedRequests=[],this.queuedBytes=0,this.closed)return;let t=e.filter(e=>this.pending.has(e.message.id));if(t.length===0)return;let n=t.length===1?t[0].message:{type:r,version:1,requests:t.map(e=>e.message)},i=[];for(let e of t)for(let t of e.transfer)i.push(t);try{i.length>0?this.worker.postMessage(n,i):this.worker.postMessage(n)}catch(e){let n=e instanceof Error?e:Error(String(e));for(let e of t)this.rejectPending(e.message.id,n)}}ensureOpen(){if(this.closed)throw this.closeReason??y(`WorkerTerminatedError`,`worker transport is closed`)}handleMessage=t=>{let n=t.data;if(ne(n)){if(this.readyResolved)return;this.batching=n.batching===1,this.readyResolved=!0,this.readyTimeout&&clearTimeout(this.readyTimeout),this.readyTimeout=null,this.readyResolve?.(),this.readyResolve=null,this.readyReject=null;return}if(h(n)){this.fail(y(`WorkerProtocolError`,`incompatible worker protocol ready message`));return}if(e(n)&&(n.type===`moyodb:worker-protocol:response`||n.type===`moyodb:worker-protocol:response-batch`)&&n.version!==1){this.fail(y(`WorkerProtocolError`,`incompatible worker protocol response`));return}if(ae(n)){for(let e of n.responses)this.handleResponse(e);return}if(e(n)&&n.type===`moyodb:worker-protocol:response-batch`&&n.version===1){this.fail(y(`WorkerProtocolError`,`invalid worker response batch`));return}this.handleResponse(n)};handleResponse(t){if(!g(t)){e(t)&&t.type===`moyodb:worker-protocol:response`&&t.version===1&&typeof t.id==`number`&&Number.isSafeInteger(t.id)&&this.rejectPending(t.id,y(`WorkerProtocolError`,`invalid worker response`));return}let n=this.pending.get(t.id);if(n){this.pending.delete(t.id),R(n);try{t.ok?n.resolve(this.forwardScanPackets&&(n.command===`scanPage`||n.command===`scan`||n.command===`scanByIndex`||n.command===`scanByIndexPage`)?t.result:de(n.command,t.result)):n.reject(se(t.error))}catch(e){n.reject(e instanceof Error&&e.name===`WorkerProtocolError`?e:y(`WorkerProtocolError`,`worker response could not be decoded`))}}}handleMessageError=()=>{this.fail(y(`WorkerMessageError`,`worker message could not be deserialized`))};handleError=e=>{let t=e.error instanceof Error?e.error:y(`WorkerError`,e.message||`worker runtime failed`);this.fail(t)};rejectPending(e,t){let n=this.pending.get(e);n&&(this.pending.delete(e),R(n),n.reject(t))}disposeInternal(e,t){if(!this.closed){this.closed=!0,this.closeReason=e,this.worker.removeEventListener(`message`,this.handleMessage),this.worker.removeEventListener(`messageerror`,this.handleMessageError),this.worker.removeEventListener(`error`,this.handleError),this.readyTimeout&&clearTimeout(this.readyTimeout),this.readyTimeout=null,this.readyResolved||this.readyReject?.(e),this.readyResolve=null,this.readyReject=null,this.queuedRequests=[],this.queuedBytes=0;for(let t of this.pending.values())R(t),t.reject(e);this.pending.clear(),t&&this.fatalHandler?.(e)}}};const Ce=/* @__PURE__ */ new Set([DataView,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,Int8Array,Int16Array,Int32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array]);function we(e,t){let n=/* @__PURE__ */ new Set;for(let r of t){if(!(r instanceof ArrayBuffer)||W(r))return E(e,t);n.add(r)}let r=/* @__PURE__ */ new Map;if(!B(e,r,/* @__PURE__ */ new WeakSet))return E(e,t);let i=/* @__PURE__ */ new Map;for(let e of n)i.set(e,De(e));let a=[],o=/* @__PURE__ */ new WeakMap,s=e=>{if(typeof e!=`object`||!e)return e;let t=o.get(e);if(t!==void 0)return t;if(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)return o.set(e,e),e;if(e instanceof ArrayBuffer){let t=i.get(e)??e.slice(0);return o.set(e,t),a.push(t),t}if(ArrayBuffer.isView(e)){let t=r.get(e);if(!t)throw y(`WorkerProtocolError`,`worker payload could not be queued`);let n=e.buffer,i=Ee(e,typeof SharedArrayBuffer<`u`&&n instanceof SharedArrayBuffer?n:s(n),t);return o.set(e,i),i}if(Array.isArray(e)){let t=Array(e.length);o.set(e,t);for(let n=0;n<e.length;n+=1)n in e&&(t[n]=s(e[n]));return t}let n=Object.getPrototypeOf(e)===null?Object.create(null):{};o.set(e,n);let c=e;for(let e in c)Object.prototype.hasOwnProperty.call(c,e)&&(n[e]=s(c[e]));return n},c=s(e);return{value:c,transfer:a,byteLength:z(c)}}function z(e){let t=0,n=/* @__PURE__ */ new WeakSet,r=e=>{if(Number.isFinite(t)){if(typeof e==`string`){t+=8+e.length*2;return}if(typeof e!=`object`||!e){t+=8;return}if(!n.has(e)){if(n.add(e),t+=8,e instanceof ArrayBuffer)t+=e.byteLength;else if(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)t+=e.byteLength;else if(ArrayBuffer.isView(e))r(e.buffer);else if(Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype||V(e)){t=1/0;return}for(let n=0;n<e.length;n+=1){let i=Object.getOwnPropertyDescriptor(e,String(n));if(i&&!(`value`in i)){t=1/0;return}r(i?.value)}}else if(e instanceof Map)for(let[t,n]of e)r(t),r(n);else if(e instanceof Set)for(let t of e)r(t);else{let n=e;for(let e in n)if(Object.prototype.hasOwnProperty.call(n,e)){let i=Object.getOwnPropertyDescriptor(n,e);if(e===`__proto__`||!i||!(`value`in i)){t=1/0;return}t+=8+e.length*2,r(i.value)}}}}};return r(e),t}function B(e,t,n){if(typeof e==`function`||typeof e==`symbol`)return!1;if(typeof e!=`object`||!e||n.has(e))return!0;if(n.add(e),typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer||e instanceof ArrayBuffer)return!W(e);if(ArrayBuffer.isView(e)){if(!Te(e))return!1;let n=e.buffer;return typeof SharedArrayBuffer<`u`&&n instanceof SharedArrayBuffer?!W(n)&&(t.set(e,U(e)),!0):!(n instanceof ArrayBuffer)||W(n)?!1:(t.set(e,U(e)),!0)}if(e instanceof Map||e instanceof Set||e instanceof Date||e instanceof RegExp)return!1;if(Array.isArray(e)){if(V(e)||H(e))return!1;for(let r of e)if(!B(r,t,n))return!1;return!0}let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null||H(e))return!1;let i=e;for(let e in i)if(Object.prototype.hasOwnProperty.call(i,e)&&!B(i[e],t,n))return!1;return!0}function V(e){let t=e;for(let n in t){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let t=Number(n);if(!Number.isInteger(t)||t<0||t>=e.length||String(t)!==n)return!0}return!1}function H(e){for(let t of Object.getOwnPropertySymbols(e))if(Object.prototype.propertyIsEnumerable.call(e,t))return!0;return!1}function Te(e){return Ce.has(e.constructor)}function U(e){return e instanceof DataView?{offset:e.byteOffset,length:e.byteLength,dataView:!0}:{offset:e.byteOffset,length:e.length,dataView:!1}}function Ee(e,t,n){if(n.dataView)return new DataView(t,n.offset,n.length);let r=e.constructor;return new r(t,n.offset,n.length)}function De(e){let t=e;return typeof t.transfer==`function`?t.transfer():structuredClone(e,{transfer:[e]})}function W(e){return e.resizable===!0}const Oe=/* @__PURE__ */ new Set([`commit`,`rollback`,`createStore`,`dropStore`,`clearStore`,`get`,`getMany`,`has`,`put`,`putMany`,`delete`,`deleteMany`,`applyBatch`,`scan`,`getByIndex`,`scanByIndex`,`scanByIndexPage`,`getIndexes`,`reconcileIndexes`,`setSchemaVersion`]),ke=/* @__PURE__ */ new Set([`open`,`close`,`destroy`,`importSnapshot`,`reset`,`compact`,`rebuild`]),Ae=/* @__PURE__ */ new Set([`deleteDB`,`storageInfo`,`requestPersistence`]),G=()=>{};var je=class{#e=/* @__PURE__ */ new Map;#t=/* @__PURE__ */ new Set;#n=Promise.resolve();#r=/* @__PURE__ */ new Map;schedule(t,n,r){if(Ae.has(t))return r();if(ke.has(t))return this.#r.size===0?this.#a(r):this.#a(async()=>{let e=await r();return this.#r.clear(),e});if(t!==`scanPage`&&t!==`closeCursor`&&!((t===`commit`||t===`rollback`)&&this.#r.size>0))return this.#i(K(t,n),r);let i=t===`scanPage`&&e(n[0])?n[0]:null,a=i?.cursorId??(t===`closeCursor`?n[0]:void 0),o=(typeof a==`number`?this.#r.get(a):void 0)??(i&&typeof i.txId==`number`?i.txId:typeof a==`number`?`cursor:${a}`:K(t,n));return this.#i(o,async()=>{try{let t=await r();return i&&e(t)&&(typeof a==`number`&&this.#r.delete(a),typeof t.cursorId==`number`&&this.#r.set(t.cursorId,o??`cursor:${t.cursorId}`)),t}finally{if(t===`closeCursor`&&typeof a==`number`&&this.#r.delete(a),t===`commit`||t===`rollback`)for(let[e,t]of this.#r)t===n[0]&&this.#r.delete(e)}})}#i(e,t){let n=this.#n,r=e===null?void 0:this.#e.get(e),i=(async()=>(await n,r&&await r,t()))(),a=i.then(G,G);return this.#t.add(a),e!==null&&this.#e.set(e,a),a.then(()=>{this.#t.delete(a),e!==null&&this.#e.get(e)===a&&this.#e.delete(e)}),i}#a(e){let t=this.#n,n=Array.from(this.#t),r=(async()=>(await t,await Promise.all(n),e()))();return this.#n=r.then(G,G),r}};function K(e,t){return Oe.has(e)&&typeof t[0]==`number`?t[0]:e===`autocommit`&&t[0]===`readwrite`?`autocommit:readwrite`:null}var Me=class{scope;queued=[];queuedBytes=0;flushScheduled=!1;flushChannel=null;closed=!1;constructor(e){this.scope=e}enqueue(e,t=[],n=!1){if(this.closed)return;let r=Be(e);if(this.queued.length>0&&this.queuedBytes+r>1048576&&this.flush(),n||this.queued.length+1>=128||this.queuedBytes+r>=1048576){this.queued.push({response:e,transfer:t}),this.queuedBytes+=r,this.flush();return}let i=ze(e,t);this.queued.push({response:i.value,transfer:i.transfer}),this.queuedBytes+=i.byteLength,this.flushScheduled||(this.flushScheduled=!0,queueMicrotask(()=>{if(this.closed||this.queued.length===0){this.flushScheduled=!1;return}this.flushChannel??=this.createFlushChannel(),this.flushChannel.port2.postMessage(null)}))}close(){this.closed=!0,this.queued=[],this.queuedBytes=0,this.flushChannel?.port1.close(),this.flushChannel?.port2.close(),this.flushChannel=null}createFlushChannel(){let e=new MessageChannel;return e.port1.addEventListener(`message`,()=>{this.flushScheduled=!1,this.flush()}),e.port1.start(),e}flush(){let e=this.queued;if(this.queued=[],this.queuedBytes=0,this.closed||e.length===0)return;let t=e.length===1?e[0].response:{type:`moyodb:worker-protocol:response-batch`,version:1,responses:e.map(e=>e.response)},n=[];for(let t of e)for(let e of t.transfer)n.push(e);Le(this.scope,t,n)}};function Ne(e,t=self){let n=new je,r=new Me(t),i=i=>{if(i.origin===``||i.origin===t.location.origin){if(ie(i.data)){let a=i.data.requests.length,o=(e,t)=>{--a,r.enqueue(e,t,a===0)};for(let r of i.data.requests)q(t,e,n,r,o);return}q(t,e,n,i.data)}};return t.addEventListener(`message`,i),t.postMessage({type:`moyodb:worker-protocol:ready`,version:1,batching:1}),{close(){t.removeEventListener(`message`,i),r.close()}}}async function q(e,t,n,r,i=(t,n)=>Le(e,t,n)){if(!oe(r))return;let a=typeof r.id==`number`&&Number.isSafeInteger(r.id)?r.id:0;if(!re(r)){i(X(a,y(`WorkerProtocolError`,`invalid worker protocol request`)));return}if(!te(r.command)){i(X(r.id,y(`WorkerProtocolError`,`unsupported worker command: ${String(r.command)}`)));return}let s=r.command,c=r.args;try{let e=s,a;if(s===`autocommit`){let[n,r,i]=c;if(n!==`readonly`&&n!==`readwrite`||!o(r)||!Array.isArray(i))throw y(`WorkerProtocolError`,`invalid autocommit request`);J(t,r),e=r,a=()=>Pe(t,n,r,i)}else J(t,s),a=()=>Y(t,s,c);let l=await n.schedule(s,c,a),u=ue(e,l);i(Ie(r.id,u.result),u.transfer)}catch(e){i(X(r.id,e))}}function J(e,t){if(typeof e[t]!=`function`)throw y(`WorkerProtocolError`,`worker command is not implemented: ${t}`)}function Y(e,t,n){let r=Fe(e,t,n);return r===null?e[t].apply(e,S(t,n)):r}async function Pe(e,t,n,r){let i=await e.begin(t),a;try{a=await Y(e,n,[i,...r])}catch(t){try{await e.rollback(i)}catch{}throw t}return t===`readwrite`?await e.commit(i):await e.rollback(i),a}function Fe(e,t,n){let r=e;if(t===`getMany`||t===`deleteMany`){let[e,i,a]=n;if(typeof e!=`number`||typeof i!=`string`)return null;let o=C(a);return o===null?null:t===`getMany`&&typeof r.getManyPacked==`function`?r.getManyPacked(e,i,o):t===`deleteMany`&&typeof r.deleteManyPacked==`function`?r.deleteManyPacked(e,i,o):null}if(t===`putMany`){let[e,t,i,a]=n;if(typeof e!=`number`||typeof t!=`string`||typeof r.putManyPacked!=`function`)return null;let o=C(i);return o===null?null:r.putManyPacked(e,t,o,a)}if(t===`applyBatch`){let[e,t,i]=n;if(typeof e!=`number`||typeof t!=`string`||typeof r.applyBatchPacked!=`function`)return null;let a=ce(i);return a===null?null:r.applyBatchPacked(e,t,a)}return null}function Ie(e,t){return{type:n,version:1,id:e,ok:!0,result:t}}function X(e,t){return{type:n,version:1,id:e,ok:!1,error:v(t)}}function Le(e,t,n=[]){if(n.length>0)try{e.postMessage(t,n);return}catch{}e.postMessage(t)}const Re=/* @__PURE__ */ new Set([DataView,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,Int8Array,Int16Array,Int32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array]);function ze(e,t){let n=/* @__PURE__ */ new Set;for(let r of t){if(!(r instanceof ArrayBuffer)||Q(r))return E(e,t);n.add(r)}let r=/* @__PURE__ */ new Map;if(!Z(e,r,/* @__PURE__ */ new WeakSet))return E(e,t);let i=/* @__PURE__ */ new Map;for(let e of n)i.set(e,Ke(e));let a=[],o=/* @__PURE__ */ new WeakMap,s=e=>{if(typeof e!=`object`||!e)return e;let t=o.get(e);if(t!==void 0)return t;if(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)return o.set(e,e),e;if(e instanceof ArrayBuffer){let t=i.get(e)??e.slice(0);return o.set(e,t),a.push(t),t}if(ArrayBuffer.isView(e)){let t=r.get(e);if(!t)throw y(`WorkerProtocolError`,`worker payload could not be queued`);let n=e.buffer,i=Ge(e,typeof SharedArrayBuffer<`u`&&n instanceof SharedArrayBuffer?n:s(n),t);return o.set(e,i),i}if(Array.isArray(e)){let t=Array(e.length);o.set(e,t);for(let n=0;n<e.length;n+=1)n in e&&(t[n]=s(e[n]));return t}let n=Object.getPrototypeOf(e)===null?Object.create(null):{};o.set(e,n);let c=e;for(let e in c)Object.prototype.hasOwnProperty.call(c,e)&&(n[e]=s(c[e]));return n},c=s(e);return{value:c,transfer:a,byteLength:Be(c)}}function Be(e){let t=0,n=/* @__PURE__ */ new WeakSet,r=e=>{if(Number.isFinite(t)){if(typeof e==`string`){t+=8+e.length*2;return}if(typeof e!=`object`||!e){t+=8;return}if(!n.has(e)){if(n.add(e),t+=8,e instanceof ArrayBuffer)t+=e.byteLength;else if(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)t+=e.byteLength;else if(ArrayBuffer.isView(e))r(e.buffer);else if(Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype||Ve(e)){t=1/0;return}for(let n=0;n<e.length;n+=1){let i=Object.getOwnPropertyDescriptor(e,String(n));if(i&&!(`value`in i)){t=1/0;return}r(i?.value)}}else if(e instanceof Map)for(let[t,n]of e)r(t),r(n);else if(e instanceof Set)for(let t of e)r(t);else{let n=e;for(let e in n)if(Object.prototype.hasOwnProperty.call(n,e)){let i=Object.getOwnPropertyDescriptor(n,e);if(e===`__proto__`||!i||!(`value`in i)){t=1/0;return}t+=8+e.length*2,r(i.value)}}}}};return r(e),t}function Z(e,t,n){if(typeof e==`function`||typeof e==`symbol`)return!1;if(typeof e!=`object`||!e||n.has(e))return!0;if(n.add(e),typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer||e instanceof ArrayBuffer)return!Q(e);if(ArrayBuffer.isView(e)){if(!Ue(e))return!1;let n=e.buffer;return typeof SharedArrayBuffer<`u`&&n instanceof SharedArrayBuffer?!Q(n)&&(t.set(e,We(e)),!0):!(n instanceof ArrayBuffer)||Q(n)?!1:(t.set(e,We(e)),!0)}if(e instanceof Map||e instanceof Set||e instanceof Date||e instanceof RegExp)return!1;if(Array.isArray(e)){if(Ve(e)||He(e))return!1;for(let r of e)if(!Z(r,t,n))return!1;return!0}let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null||He(e))return!1;let i=e;for(let e in i)if(Object.prototype.hasOwnProperty.call(i,e)&&!Z(i[e],t,n))return!1;return!0}function Ve(e){let t=e;for(let n in t){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let t=Number(n);if(!Number.isInteger(t)||t<0||t>=e.length||String(t)!==n)return!0}return!1}function He(e){for(let t of Object.getOwnPropertySymbols(e))if(Object.prototype.propertyIsEnumerable.call(e,t))return!0;return!1}function Ue(e){return Re.has(e.constructor)}function We(e){return e instanceof DataView?{offset:e.byteOffset,length:e.byteLength,dataView:!0}:{offset:e.byteOffset,length:e.length,dataView:!1}}function Ge(e,t,n){if(n.dataView)return new DataView(t,n.offset,n.length);let r=e.constructor;return new r(t,n.offset,n.length)}function Ke(e){let t=e;return typeof t.transfer==`function`?t.transfer():structuredClone(e,{transfer:[e]})}function Q(e){return e.resizable===!0}const qe=`moyodb:shared-worker:fatal`,Je=`moyodb:shared-worker:owner-host-message`,Ye=/* @__PURE__ */ new Set([`commit`,`rollback`,`createStore`,`dropStore`,`clearStore`,`get`,`getMany`,`has`,`put`,`putMany`,`delete`,`deleteMany`,`applyBatch`,`scan`,`getByIndex`,`scanByIndex`,`scanByIndexPage`,`reconcileIndexes`,`setSchemaVersion`]),$=/* @__PURE__ */ new Set([`importSnapshot`,`reset`,`compact`,`rebuild`]);var Xe=class{origin;sessions=/* @__PURE__ */ new Set;owner=null;dbName=null;ownerId=1;pendingOwners=/* @__PURE__ */ new Map;storageReady=Promise.resolve();lifecycle=Promise.resolve();migrationOwner=null;migrationReleased=null;migrationQueue=Promise.resolve();timer=null;constructor(e){this.origin=e}connect(t){let n={port:t,server:null,opened:!1,closing:!1,nextTxId:1,transactions:/* @__PURE__ */ new Map,nextCursorId:1,cursors:/* @__PURE__ */ new Map,cursorGeneration:0,pending:/* @__PURE__ */ new Set,lastSeen:Date.now(),closingPromise:null};this.sessions.add(n),this.timer??=setInterval(()=>this.expireSessions(),5e3),t.addEventListener(`message`,r=>{if(r.origin!==``&&r.origin!==this.origin)return;let i=r.data;if(!e(i))return;if(n.lastSeen=Date.now(),i.type===`moyodb:shared-worker:owner-response`&&typeof i.id==`number`){let e=this.pendingOwners.get(i.id);if(!e||e.session!==n){r.ports[1]?.postMessage({type:Je,op:`stop`});for(let e of r.ports)e.close();return}this.pendingOwners.delete(i.id),clearTimeout(e.timeout),i.ok===!0&&r.ports.length===2?e.resolve([r.ports[0],r.ports[1]]):e.reject(this.controlError(i.error));return}if(i.type!==`moyodb:shared-worker:control`||typeof i.id!=`number`)return;let a=e=>{t.postMessage({type:`moyodb:shared-worker:control-result`,id:i.id,ok:e===void 0,...e===void 0?{}:{error:v(e)}})};i.op===`ping`?a():i.op===`detach`?this.closeSession(n).then(()=>a(),e=>{a(e),this.failAll(e)}):i.op===`crash`?this.failAll(y(`WorkerTerminatedError`,`storage worker was terminated by unsafeDebugCrashWorker`)):i.op===`acquireMigration`?this.acquireMigration(n).then(()=>a(),a):i.op===`releaseMigration`?(this.releaseMigration(n),a()):a(y(`WorkerProtocolError`,`unsupported shared worker control`))}),t.addEventListener(`messageerror`,()=>{this.closeSession(n).catch(e=>this.failAll(e))});let r={location:{origin:this.origin},postMessage:(e,n)=>t.postMessage(e,n??[]),addEventListener:(e,n)=>t.addEventListener(e,n),removeEventListener:(e,n)=>t.removeEventListener(e,n)};n.server=Ne(this.sessionApi(n),r),t.start()}sessionApi(e){let t={};for(let n of i)t[n]=(...t)=>this.invoke(e,n,t);return t}invoke(t,n,r){if(n===`open`)return this.queueLifecycle(()=>this.openSession(t,r[0]));if(n===`close`)return this.closeSession(t);if(n===`destroy`)return this.queueLifecycle(()=>this.destroySession(t));if(n===`deleteDB`)return Promise.reject(y(`DatabaseBusyError`,`delete shared databases through an exclusive open handle`));let i=(async()=>{await this.storageReady,this.requireSession(t,n!==`begin`&&n!==`setFailpoint`&&!$.has(n));let i=this.owner;if(n===`begin`){if(r[0]===`readwrite`&&this.migrationOwner===t&&Array.from(this.sessions).some(e=>e!==t&&(e.transactions.size>0||e.cursors.size>0)))throw y(`DatabaseBusyError`,`close active shared transactions before schema migration`);let e=await i.proxy.begin(r[0]),n=t.nextTxId++;return t.transactions.set(n,e),n}if(n===`scanPage`){if(!e(r[0]))throw y(`WorkerProtocolError`,`invalid scan page request`);let n=r[0],a=n.cursorId,o=a===void 0?void 0:t.cursors.get(a);if(a!==void 0&&!o)throw y(`TransactionClosedError`,`scan cursor does not belong to this shared client`);if(o&&o.localTxId!==n.txId)throw y(`TransactionClosedError`,`scan cursor does not belong to this transaction`);let s=n.txId===void 0?void 0:t.transactions.get(n.txId);if(n.txId!==void 0&&s===void 0)throw y(`TransactionClosedError`,`transaction does not belong to this shared client`);let c=t.cursorGeneration,l=await i.proxy.scanPage({...n,txId:s,cursorId:o?.ownerId});if(c!==t.cursorGeneration||this.owner!==i)throw l.cursorId!==void 0&&this.owner===i&&await i.proxy.closeCursor(l.cursorId),y(`TransactionClosedError`,`scan snapshot was invalidated`);if(a!==void 0&&t.cursors.delete(a),l.cursorId===void 0)return l;let u=a??t.nextCursorId++;return t.cursors.set(u,{ownerId:l.cursorId,localTxId:n.txId}),{...l,cursorId:u}}if(n===`closeCursor`){let e=t.cursors.get(r[0]);if(!e)throw y(`TransactionClosedError`,`scan cursor does not belong to this shared client`);try{await i.proxy.closeCursor(e.ownerId)}finally{t.cursors.delete(r[0])}return}if(Ye.has(n)||n===`getIndexes`&&r[0]!==void 0){let e=r[0],a=t.transactions.get(e);if(a===void 0)throw y(`TransactionClosedError`,`transaction does not belong to this shared client`);try{return await i.proxy.request(n,[a,...r.slice(1)])}finally{if(n===`commit`||n===`rollback`){t.transactions.delete(e);for(let[n,r]of t.cursors)r.localTxId===e&&t.cursors.delete(n)}}}return $.has(n)&&this.invalidateTransactions(),i.proxy.request(n,r)})();return t.pending.add(i),i.then(()=>t.pending.delete(i),()=>t.pending.delete(i)),i}requireSession(e,t=!1){if(!e.opened||e.closing||!this.owner)throw y(`DatabaseClosedError`,`shared client is closed`);if(!t&&this.migrationOwner!==null&&this.migrationOwner!==e)throw y(`DatabaseBusyError`,`database schema migration is owned by another shared client`)}queueLifecycle(e){let t=this.lifecycle.then(e);return this.lifecycle=t.then(()=>void 0,()=>void 0),t}async openSession(t,n){if(t.closing||!this.sessions.has(t))throw y(`DatabaseClosedError`,`shared client is closed`);if(t.opened)throw y(`InvalidOpenOptionsError`,`shared client is already open`);if(!e(n)||typeof n.dbName!=`string`||!e(n.options))throw y(`InvalidOpenOptionsError`,`invalid shared worker open request`);if(this.dbName!==null&&this.dbName!==n.dbName)throw y(`InvalidOpenOptionsError`,`shared worker database name does not match`);if(this.dbName=n.dbName,this.owner){let e=this.owner.request;if(n.dbName!==e.dbName)throw y(`InvalidOpenOptionsError`,`shared worker database name does not match`);if(n.options.cachePages!==e.options.cachePages)throw y(`InvalidOpenOptionsError`,`shared database cachePages policy does not match its owner`);let r=n.options.changeFeed;if(r!==null&&(r.enabled!==e.options.changeFeed?.enabled||r.retainTxids!==e.options.changeFeed?.retainTxids))throw y(`InvalidOpenOptionsError`,`shared database changeFeed policy does not match its owner`);if(n.options.debugFailpoint!==null){if(this.migrationOwner!==null&&this.migrationOwner!==t)throw y(`DatabaseBusyError`,`cannot change failpoints during another client schema migration`);await this.owner.proxy.setFailpoint(n.options.debugFailpoint)}t.opened=!0;return}let r=await this.createOwner(t,n);this.owner=r,t.opened=!0;try{await r.proxy.open(n)}catch(e){throw t.opened=!1,this.disposeOwner(r),e}}async createOwner(t,n){let r=this.ownerId++,[i,a]=await new Promise((e,n)=>{let i=setTimeout(()=>{this.pendingOwners.delete(r),n(y(`WorkerReadyTimeoutError`,`shared storage owner did not provide a worker port`))},1e4);this.pendingOwners.set(r,{session:t,resolve:e,reject:n,timeout:i}),t.port.postMessage({type:`moyodb:shared-worker:owner-request`,id:r})}),o=new Se(i,{readyTimeoutMs:1e4,forwardScanPackets:!0}),s={port:i,hostPort:a,proxy:o,request:n,session:t,lastSeen:Date.now()};return o.setFatalHandler(e=>this.failAll(e)),a.addEventListener(`message`,t=>{let n=t.data;e(n)&&n.type===`moyodb:shared-worker:owner-host-message`&&this.owner===s&&(s.lastSeen=Date.now(),n.op===`gone`?this.recoverOwner(s):n.op===`error`&&this.failAll(this.controlError(n.error)))}),a.start(),i.start(),s}closeSession(e){return e.closingPromise?e.closingPromise:(e.closing=!0,e.closingPromise=this.queueLifecycle(async()=>{await Promise.allSettled(Array.from(e.pending));let t=this.owner;if(t&&e.opened){let n=(await Promise.allSettled([...Array.from(e.cursors.values(),e=>t.proxy.closeCursor(e.ownerId)),...Array.from(e.transactions.values(),e=>t.proxy.rollback(e))])).find(e=>e.status===`rejected`&&e.reason?.name!==`TransactionClosedError`);if(n?.status===`rejected`)throw this.failAll(n.reason),n.reason}if(e.transactions.clear(),e.cursors.clear(),e.cursorGeneration+=1,e.opened=!1,this.releaseMigration(e),e.server?.close(),this.sessions.delete(e),t&&!Array.from(this.sessions).some(e=>e.opened))try{await t.proxy.close()}finally{this.disposeOwner(t)}this.sessions.size===0&&this.timer!==null&&(clearInterval(this.timer),this.timer=null)}),e.closingPromise)}async destroySession(e){if(await this.storageReady,this.requireSession(e),Array.from(this.sessions).some(t=>t!==e&&t.opened))throw y(`DatabaseBusyError`,`cannot destroy a database with other live shared clients`);let t=this.owner;await t.proxy.destroy(),this.invalidateTransactions(),e.opened=!1,this.releaseMigration(e),this.disposeOwner(t)}acquireMigration(e){let t=this.migrationQueue,n,r=new Promise(e=>{n=e});return this.migrationQueue=t.then(()=>r),t.then(async()=>{try{await this.storageReady,this.requireSession(e),this.migrationOwner=e,this.migrationReleased=n,await Promise.allSettled(Array.from(this.sessions).flatMap(e=>Array.from(e.pending))),this.requireSession(e)}catch(t){throw this.migrationOwner===e?this.releaseMigration(e):n(),t}})}releaseMigration(e){if(this.migrationOwner!==e)return;this.migrationOwner=null;let t=this.migrationReleased;this.migrationReleased=null,t?.()}invalidateTransactions(){for(let e of this.sessions)e.transactions.clear(),e.cursors.clear(),e.cursorGeneration+=1,e.opened&&e.port.postMessage({type:`moyodb:shared-worker:invalidate-transactions`})}recoverOwner(e){this.disposeOwner(e),this.invalidateTransactions();let t=this.queueLifecycle(async()=>{if(this.owner)return;let t=Array.from(this.sessions).find(t=>t!==e.session&&t.opened&&!t.closing&&Date.now()-t.lastSeen<=12e4);if(!t)return;let n={dbName:e.request.dbName,options:{...e.request.options,createIfMissing:!1,ownerWaitMs:Math.max(e.request.options.ownerWaitMs,2e3),debugFailpoint:null}},r=await this.createOwner(t,n);this.owner=r,await r.proxy.open(n)});this.storageReady=t,t.catch(e=>this.failAll(e))}expireSessions(){this.owner&&Date.now()-this.owner.lastSeen>12e4&&this.recoverOwner(this.owner);for(let e of this.sessions)Date.now()-e.lastSeen>12e4&&(e.port.postMessage({type:qe,error:v(y(`WorkerTerminatedError`,`shared client heartbeat expired`))}),this.closeSession(e).catch(e=>this.failAll(e)))}disposeOwner(e){this.owner===e&&(this.owner=null),e.proxy.dispose(),e.hostPort.postMessage({type:Je,op:`stop`}),e.hostPort.close(),e.port.close()}controlError(e){try{return se(e)}catch{return y(`WorkerProtocolError`,`invalid shared worker owner response`)}}failAll(e){this.owner&&this.disposeOwner(this.owner);for(let t of this.pendingOwners.values())clearTimeout(t.timeout),t.reject(e instanceof Error?e:Error(String(e)));this.pendingOwners.clear();for(let t of this.sessions)t.port.postMessage({type:qe,error:v(e)}),t.opened=!1,t.closing=!0,t.transactions.clear(),t.cursors.clear(),t.cursorGeneration+=1,t.server?.close(),this.releaseMigration(t);this.sessions.clear(),this.storageReady=Promise.resolve(),this.timer!==null&&clearInterval(this.timer),this.timer=null}};if(typeof self<`u`&&`onconnect`in self){let e=self,t=new Xe(e.location.origin);e.addEventListener(`connect`,e=>{for(let n of e.ports)t.connect(n)})}
2
+ //# sourceMappingURL=shared-worker-BALTqEUe.js.map