@pixagram/lacerta-db 0.7.0 → 0.7.2
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.
- package/dist/browser.min.js +8 -1
- package/dist/index.min.js +8 -1
- package/index.js +462 -1
- package/package.json +1 -1
package/dist/browser.min.js
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
(e=>{var t={};function r(i){var s;return(t[i]||(s=t[i]={i:i,l:!1,exports:{}},e[i].call(s.exports,s,s.exports,r),s.l=!0,s)).exports}r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=2)})([function(e,t){var r={},i=new Float32Array(4);function s(e,t){if((0|e)!==e)throw new TypeError("Lane index must be an int32");if(e<0||t<=e)throw new RangeError("Lane index must be in bounds")}new Int32Array(i.buffer),new Int16Array(i.buffer),new Int8Array(i.buffer),new Uint32Array(i.buffer),new Uint16Array(i.buffer),new Uint8Array(i.buffer),void 0!==r.Int8x16&&void 0!==r.Int8x16.extractLane||(r.Int8x16=function(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y){if(!(this instanceof r.Int8x16))return new r.Int8x16(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y);this.s_=new Int8Array([e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y])},r.Int8x16.check=function(e){if(e instanceof r.Int8x16)return e;throw new TypeError("Argument is not a Int8x16.")},r.Int8x16.splat=function(e){return new r.Int8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},r.Int8x16.extractLane=function(e,t){return e=r.Int8x16.check(e),s(t,16),e.s_[t]},r.Int8x16.replaceLane=function(e,t,i){return e=r.Int8x16.check(e),s(t,16),(e=Array.from(e.s_))[t]=i,new r.Int8x16(...e)},r.Int8x16.shuffle=function(e,t,i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v){var A=[i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v],U=[];e=r.Int8x16.check(e),t=r.Int8x16.check(t);for(var V=0;V<16;V++){var m=A[V];s(m,32),U[V]=m<16?e.s_[m]:t.s_[m-16]}return new r.Int8x16(...U)}),void 0!==r.Uint8x16&&void 0!==r.Uint8x16.extractLane||(r.Uint8x16=function(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y){if(!(this instanceof r.Uint8x16))return new r.Uint8x16(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y);this.s_=new Uint8Array([e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y])},r.Uint8x16.check=function(e){if(e instanceof r.Uint8x16)return e;throw new TypeError("Argument is not a Uint8x16.")},r.Uint8x16.splat=function(e){return new r.Uint8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},r.Uint8x16.extractLane=function(e,t){return e=r.Uint8x16.check(e),s(t,16),e.s_[t]},r.Uint8x16.load=function(e,t){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return new r.Uint8x16(...e.subarray(t,t+16))},r.Uint8x16.store=function(e,t,r){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return e.set(r.s_,t),r},r.Uint8x16.shuffle=function(e,t,i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v){var A=[i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v],U=[];e=r.Uint8x16.check(e),t=r.Uint8x16.check(t);for(var V=0;V<16;V++){var m=A[V];s(m,32),U[V]=m<16?e.s_[m]:t.s_[m-16]}return new r.Uint8x16(...U)},r.Uint8x16.and=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]&t.s_[s];return new r.Uint8x16(...i)},r.Uint8x16.or=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]|t.s_[s];return new r.Uint8x16(...i)},r.Uint8x16.shiftLeftByScalar=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]<<t;return new r.Uint8x16(...i)},r.Uint8x16.shiftRightByScalar=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]>>>t;return new r.Uint8x16(...i)}),e.exports=class{constructor(){this.ENC_SHUFFLE=r.Int8x16(10,11,9,10,7,8,6,7,4,5,3,4,1,2,0,1),this.ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.ENC_LUT_SIMD=[r.Uint8x16.splat(0),r.Uint8x16.splat(0),r.Uint8x16.splat(0),r.Uint8x16.splat(0)];for(let t=0;t<4;t++){var e=this.ENC_LUT.substring(16*t,16*(t+1));this.ENC_LUT_SIMD[t]=r.Uint8x16(...Array.from(e).map(e=>e.charCodeAt(0)))}this.DEC_DELTA_ASSO=r.Uint8x16(1,1,1,1,1,1,1,1,0,0,0,0,0,15,0,15),this.DEC_DELTA_VALUES=r.Int8x16(0,0,0,19,4,191,191,185,185,0,16,195,191,191,185,185),this.DEC_SHUFFLE=r.Int8x16(-1,-1,-1,-1,12,13,14,8,9,10,4,5,6,0,1,2),this.SCALAR_ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.SCALAR_DEC_LUT={};for(let e=0;e<this.SCALAR_ENC_LUT.length;e++)this.SCALAR_DEC_LUT[this.SCALAR_ENC_LUT.charAt(e)]=e;this.SCALAR_DEC_LUT["="]=0}_scalar_encode(e){let t="";for(let a=0;a<e.length;a+=3){var r=e[a],i=a+1<e.length?e[a+1]:0,s=a+2<e.length?e[a+2]:0;t+=this.SCALAR_ENC_LUT[r>>2]+this.SCALAR_ENC_LUT[(3&r)<<4|i>>4],a+1<e.length?t+=this.SCALAR_ENC_LUT[(15&i)<<2|s>>6]:t+="=",a+2<e.length?t+=this.SCALAR_ENC_LUT[63&s]:t+="="}return t}encode(e){var t=e.length,r=4*Math.ceil(t/3),i=new Uint8Array(r);let s=0,a=0;for(;s+12<=t;){var n=e.subarray(s,s+12),o=new Uint8Array(16);o[0]=n[0]>>2,o[1]=(3&n[0])<<4|n[1]>>4,o[2]=(15&n[1])<<2|n[2]>>6,o[3]=63&n[2],o[4]=n[3]>>2,o[5]=(3&n[3])<<4|n[4]>>4,o[6]=(15&n[4])<<2|n[5]>>6,o[7]=63&n[5],o[8]=n[6]>>2,o[9]=(3&n[6])<<4|n[7]>>4,o[10]=(15&n[7])<<2|n[8]>>6,o[11]=63&n[8],o[12]=n[9]>>2,o[13]=(3&n[9])<<4|n[10]>>4,o[14]=(15&n[10])<<2|n[11]>>6,o[15]=63&n[11];for(let e=0;e<16;e++)i[a+e]=this.SCALAR_ENC_LUT.charCodeAt(o[e]);s+=12,a+=16}let h=(new TextDecoder).decode(i.subarray(0,a));return s<t&&(h+=this._scalar_encode(e.subarray(s))),h}_scalar_decode(e){e=e.replace(/=+$/,"");var t=Math.floor(3*e.length/4),r=new Uint8Array(t);let i=0;for(let h=0;h<e.length;h+=4){var s=this.SCALAR_DEC_LUT[e[h]],a=this.SCALAR_DEC_LUT[e[h+1]],n=h+2<e.length?this.SCALAR_DEC_LUT[e[h+2]]:0,o=h+3<e.length?this.SCALAR_DEC_LUT[e[h+3]]:0;r[i++]=s<<2|a>>4,i<t&&(r[i++]=(15&a)<<4|n>>2),i<t&&(r[i++]=(3&n)<<6|o)}return r}decode(e){var t=e.length;if(t%4!=0)throw new Error("Invalid Base64 string length.");var r=(e.match(/=/g)||[]).length,i=new Uint8Array(3*t/4-r);let s=0,a=0;for(var n;s+16<=t-r;){var o=Array.from(e.substring(s,s+16)).map(e=>this.SCALAR_DEC_LUT[e]),h=new Uint8Array(12);h[0]=o[0]<<2|o[1]>>4,h[1]=(15&o[1])<<4|o[2]>>2,h[2]=(3&o[2])<<6|o[3],h[3]=o[4]<<2|o[5]>>4,h[4]=(15&o[5])<<4|o[6]>>2,h[5]=(3&o[6])<<6|o[7],h[6]=o[8]<<2|o[9]>>4,h[7]=(15&o[9])<<4|o[10]>>2,h[8]=(3&o[10])<<6|o[11],h[9]=o[12]<<2|o[13]>>4,h[10]=(15&o[13])<<4|o[14]>>2,h[11]=(3&o[14])<<6|o[15],i.set(h,a),s+=16,a+=12}return s<t&&(n=this._scalar_decode(e.substring(s)),i.set(n,a)),i}}},function(e,t,r){r.r(t);let i=240,s=0,a=16,n=32,o=48,h=64,l=80,c=96,u=112,f=128,p=144,w=160,d=176,y=192,g=224,b=240,v=0,A=1,U=2,V=3,m=16,E=17,k=18,x=19,S=20,_=21,I=22,B=23,C=24,O=25,T=26,M=32,L=33,z=34,F=35,j=48,P=49,R=50,D=51,$=52,N=53,W=54,H=55,Y=64,q=65,G=66,J=67,K=68,Q=69,X=70,Z=71,ee=80,te=81,re=82,ie=83,se=84,ae=85,ne=96,oe=97,he=98,le=99,ce=100,ue=101,fe=102,pe=103,we=104,de=105,ye=106,ge=107,be=112,ve=113,Ae=114,Ue=128,Ve=129,me=144,Ee=145,ke=160,xe=161,Se=162,_e=163,Ie=164,Be=165,Ce=166,Oe=167,Te=168,Me=176,Le=192,ze=193,Fe=208,je=209,Pe=224,Re=225,De=226,$e=227,Ne=240,We=new Uint8Array(256),He=new Uint8Array(256);new Map;let Ye=new Map,qe=new Map;var Ge=[[E,2],[k,4],[x,4],[S,4],[_,8],[M,8],[L,8]];for(let e=0;e<Ge.length;e++)We[Ge[e][0]]=Ge[e][1];var Je,Ke=[[ne,1],[oe,1],[he,1],[le,2],[ce,2],[ue,4],[fe,4],[pe,4],[we,8],[de,8],[ye,8],[J,1],[K,2],[Q,4],[X,4],[Z,8]];for(let e=0;e<Ke.length;e++)He[Ke[e][0]]=Ke[e][1];for(Je of["asyncIterator","hasInstance","isConcatSpreadable","iterator","match","matchAll","replace","search","species","split","toPrimitive","toStringTag","unscopables"]){var Qe=Symbol[Je];Qe&&(Ye.set(Qe,Je),qe.set(Je,Qe))}class Xe{constructor(e=65536){this.size=(e+128-1&-128)>>>0,this.buffer=new ArrayBuffer(this.size),this.offset=0,this.u8=new Uint8Array(this.buffer),this.view=new DataView(this.buffer),this.pos=0,this.f32View=null,this.f64View=null,this.i32View=null}ensure(e){var t,r;(e=this.pos+(e|=0)|0)>this.size&&(e=(128+(0|Math.max(this.size<<1,128+e))-1&-128)>>>0,t=new ArrayBuffer(e),(r=new Uint8Array(t)).set(this.u8.subarray(0,this.pos)),this.buffer=t,this.u8=r,this.view=new DataView(t),this.size=e,this.f32View=null,this.f64View=null,this.i32View=null)}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}writeU8(e){this.ensure(1),this.u8[this.pos++]=255&e}writeU16(e){this.alignPos(2),this.ensure(2),this.view.setUint16(this.pos,65535&e,!0),this.pos=this.pos+2|0}writeI16(e){this.alignPos(2),this.ensure(2),this.view.setInt16(this.pos,e,!0),this.pos=this.pos+2|0}writeU32(e){this.alignPos(4),this.ensure(4),this.view.setUint32(this.pos,e>>>0,!0),this.pos=this.pos+4|0}writeI32(e){this.alignPos(4),this.ensure(4),this.view.setInt32(this.pos,0|e,!0),this.pos=this.pos+4|0}writeF32(e){this.alignPos(4),this.ensure(4),this.view.setFloat32(this.pos,+e,!0),this.pos=this.pos+4|0}writeF64(e){this.alignPos(8),this.ensure(8),this.view.setFloat64(this.pos,+e,!0),this.pos=this.pos+8|0}writeBigInt64(e){this.alignPos(8),this.ensure(8),this.view.setBigInt64(this.pos,BigInt(e),!0),this.pos=this.pos+8|0}writeVarint(e){if(e>>>=0,this.ensure(5),e<128)this.u8[this.pos++]=e;else if(e<16384)this.u8[this.pos]=127&e|128,this.u8[this.pos+1]=e>>>7,this.pos=this.pos+2|0;else{let t=this.pos;for(;this.u8[t++]=127&e|128,128<=(e>>>=7););this.u8[t++]=e,this.pos=t}}writePackedArray(e,t){var r=0|e.length,i=(this.writeVarint(r),0|He[t]);if(!i)throw new Error("Unknown element type: 0x"+t.toString(16));switch(this.alignPos(Math.min(i,8)),this.ensure(r*i),t){case J:new Int8Array(this.buffer,this.pos,r).set(e),this.pos=this.pos+r|0;break;case K:var s=new Int16Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)s[t]=0|e[t];this.pos=this.pos+(r<<1)|0;break;case Q:var a=new Int32Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)a[t]=0|e[t];this.pos=this.pos+(r<<2)|0;break;case X:var n=new Float32Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)n[t]=+e[t];this.pos=this.pos+(r<<2)|0;break;case Z:var o=new Float64Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)o[t]=+e[t];this.pos=this.pos+(r<<3)|0;break;default:throw new Error("Unsupported packed array type: 0x"+t.toString(16))}}writeBulkAligned(e,t){var r;t=Math.min(t,8),this.alignPos(t),t=e.byteLength||e.length;this.ensure(t),e.buffer&&void 0!==e.byteOffset?(r=new Uint8Array(e.buffer,e.byteOffset,t),this.u8.set(r,this.pos)):this.u8.set(e,this.pos),this.pos=this.pos+t|0}reset(){this.pos=0}getResult(){return this.u8.subarray(0,this.pos)}}class Ze{constructor(){this.blockSize=16}canOptimize(e){var t=e.length;if(!(8<=t&(0==(t&t-1)||16<=t)))return!1;var r=typeof e[0];if("number"!=r)return!1;var i=Math.max(1,t>>>5|0);for(let s=i;s<t;s+=i)if(typeof e[s]!=r)return!1;return!0}analyzeNumericArray(e){let t=1,r=1/0,i=-1/0,s=1;var a,n=e.length;for(let a=0;a<n;a++){var o=e[a];t&=+(o==(0|o)),r=Math.min(r,o),i=Math.max(i,o),s&&(s&=+(Math.fround(o)==o))}return t?(a=+((a=Math.max(Math.abs(r),Math.abs(i)))<=127)<<0|+(a<=32767)<<1|+(a<=2147483647)<<2,[{type:Q,elementSize:4},{type:J,elementSize:1},{type:K,elementSize:2},{type:Q,elementSize:4}][3&a]):s?{type:X,elementSize:4}:{type:Z,elementSize:8}}}class et{constructor(){this.simdProcessor=new Ze,this.constructorMap=new Map,this.typeNameMap=new Map,this.errorTypeMap=new Map,this.initMaps()}initMaps(){var e,t,r,i,s=[[Date,me],[RegExp,Me],[Map,Ue],[Set,Ve],[ArrayBuffer,be],[DataView,ge]],a=[["Uint8Array",ne],["Int8Array",oe],["Uint8ClampedArray",he],["Uint16Array",le],["Int16Array",ce],["Uint32Array",ue],["Int32Array",fe],["Float32Array",pe],["Float64Array",we],["BigInt64Array",de],["BigUint64Array",ye],["SharedArrayBuffer",Ae]];for([e,t]of s)this.constructorMap.set(e,t);for([r,i]of a){var n=globalThis[r];n&&(this.constructorMap.set(n,i),this.typeNameMap.set(r,i))}this.errorTypeMap.set("Error",ke),this.errorTypeMap.set("EvalError",xe),this.errorTypeMap.set("RangeError",Se),this.errorTypeMap.set("ReferenceError",_e),this.errorTypeMap.set("SyntaxError",Ie),this.errorTypeMap.set("TypeError",Be),this.errorTypeMap.set("URIError",Ce),this.errorTypeMap.set("AggregateError",Oe)}detect(e){if(null==e)return null===e?v:A;switch(typeof e){case"boolean":return e?V:U;case"number":return this.detectNumber(e);case"bigint":return this.detectBigInt(e);case"string":return this.detectString(e);case"symbol":return this.detectSymbol(e);case"object":return this.detectObject(e);default:return A}}detectNumber(e){var t,r,i;return e!=e?I:(i=new Float64Array([e]),((t=(i=new Uint32Array(i.buffer))[1])&(r=2146435072))==r&0==i[0]&0==(1048575&t)?t>>>31?C:B:0==e&&t>>>31?O:e==(0|e)?(i=+((r=Math.abs(e))<=127)<<0|+(r<=32767)<<1|+(r<=2147483647)<<2,[T,m,E,k][Math.min(i,3)]):Math.fround(e)==e?S:_)}detectBigInt(e){var t=e<0n;return(t?-e:e)<=0x7fffffffffffffffn?t?L:M:t?F:z}detectString(e){var t,r=e.length;if(0==r)return j;let i=1;for(let t=0;t<r&&i;t++)i&=+(e.charCodeAt(t)<=127);return i?r<16?P:r<256?R:D:(t=(new TextEncoder).encode(e).length)<16?$:t<256?N:W}detectSymbol(e){return void 0!==Symbol.keyFor(e)?Re:Ye.has(e)?De:void 0===e.description?$e:Pe}detectObject(e){var t,r;return null==e?v:(t=e.constructor,void 0!==(t=this.constructorMap.get(t))?t==me?(r=e.getTime())==r?me:Ee:t:Array.isArray(e)?this.detectArray(e):ArrayBuffer.isView(e)?this.detectTypedArrayType(e):e instanceof Error?this.detectErrorType(e):"undefined"!=typeof Blob&&e instanceof Blob?e instanceof File?ze:Le:this.classifyObject(e))}classifyObject(e){var t=Object.getPrototypeOf(e);if(e.constructor!=Object&&t!=Object.prototype&&null!=t)return ie;t=Object.getOwnPropertyNames(e);var r,i=Object.getOwnPropertySymbols(e);if(0===(t=[...t,...i]).length)return ee;let s=!1,a=!1;for(r of t){var n=Object.getOwnPropertyDescriptor(e,r);if(n.get||n.set){s=!0;break}"function"==typeof n.value&&(a=!0),n.enumerable&&n.writable&&n.configurable||(s=!0)}return s?se:a?ae:re}detectArray(e){var t=e.length;if(0==t)return Y;let r=0,i=!1;for(let s=0;s<t;s++)s in e?r++:i=!0;return i||r<3*t>>>2?G:this.simdProcessor.canOptimize(e)?this.simdProcessor.analyzeNumericArray(e).type:q}detectTypedArrayType(e){return e=e.constructor.name,this.typeNameMap.get(e)||ne}detectErrorType(e){return e=e.constructor.name,this.errorTypeMap.get(e)||Te}}let tt=r(0),rt=r.n(tt),it=new class{constructor(e={}){this.options={compression:e.compression||!1,deduplication:!1!==e.deduplication,shareArrayBuffers:!1!==e.shareArrayBuffers,simdOptimization:!1!==e.simdOptimization,detectCircular:!1!==e.detectCircular,serializeFunctions:e.serializeFunctions||!1,preservePropertyDescriptors:!1!==e.preservePropertyDescriptors,memoryPoolSize:e.memoryPoolSize||65536,...e},this.pool=new Xe(this.options.memoryPoolSize),this.detector=new et,this.simdProcessor=new Ze,this.refs=new Map,this.circularRefs=new Set,this.strings=new Map,this.buffers=new Map,this.encoder=new TextEncoder,this.decoder=new TextDecoder}serialize(e){return this.resetState(),this.pool.writeU32(1413632565),this.pool.writeU8(5),this.options.detectCircular&&this.detectCircularReferences(e,new WeakSet),this.writeValue(e),this.pool.getResult()}resetState(){this.pool.reset(),this.refs.clear(),this.circularRefs.clear(),this.strings.clear(),this.buffers.clear()}detectCircularReferences(e,t){if("object"==typeof e&&null!=e)if(t.has(e))this.circularRefs.add(e);else{t.add(e);try{if(Array.isArray(e))for(let r=0;r<e.length;r++)r in e&&this.detectCircularReferences(e[r],t);else if(e instanceof Map)for(var[r,i]of e)this.detectCircularReferences(r,t),this.detectCircularReferences(i,t);else if(e instanceof Set)for(var s of e)this.detectCircularReferences(s,t);else for(var a in e)if(e.hasOwnProperty(a))try{this.detectCircularReferences(e[a],t)}catch(r){}}finally{t.delete(e)}}}writeValue(e){if(this.options.detectCircular&&"object"==typeof e&&null!=e&&this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(je),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"object"==typeof e&&null!=e&&!this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(Fe),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"string"==typeof e&&3<e.length){if(void 0!==(t=this.strings.get(e)))return this.pool.writeU8(H),void this.pool.writeVarint(t);this.strings.set(e,this.strings.size)}if(this.options.shareArrayBuffers&&e instanceof ArrayBuffer){if(void 0!==(t=this.buffers.get(e)))return this.pool.writeU8(ve),void this.pool.writeVarint(t);this.buffers.set(e,this.buffers.size)}var t,r=this.detector.detect(e);switch(t=(this.pool.writeU8(r),r&i)){case s:break;case a:this.writeNumber(e,r);break;case n:this.writeBigInt(e,r);break;case o:this.writeString(e,r);break;case h:this.writeArray(e,r);break;case l:this.writeObject(e,r);break;case c:this.writeTypedArray(e,r);break;case u:this.writeArrayBuffer(e,r);break;case f:this.writeCollection(e,r);break;case p:this.writeDate(e,r);break;case w:this.writeError(e,r);break;case d:this.writeRegExp(e);break;case y:this.writeBinary(e,r);break;case g:this.writeSpecial(e,r);break;case b:this.writeExtension(e,r)}}writeNumber(e,t){switch(t){case m:this.pool.writeU8(e);break;case E:this.pool.writeI16(e);break;case k:this.pool.writeI32(e);break;case x:this.pool.writeU32(e);break;case S:this.pool.writeF32(e);break;case _:this.pool.writeF64(e);break;case T:var r=e<0;this.pool.writeVarint(Math.abs(e)),this.pool.writeU8(r?1:0)}}writeBigInt(e,t){switch(t){case M:case L:this.pool.writeBigInt64(e);break;case z:case F:this.writeLargeBigInt(e)}}writeLargeBigInt(e){var t,r=BigInt(e).toString(16).replace("-",""),i=[];for(let e=r.length-2;0<=e;e-=2)i.push(parseInt(r.substr(e,2),16));for(t of(r.length%2&&i.push(parseInt(r[0],16)),this.pool.writeVarint(i.length),i))this.pool.writeU8(t)}writeString(e,t){var r=e.length;switch(t){case j:break;case P:case R:this.pool.writeU8(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case D:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case $:case N:case W:var i=this.encoder.encode(e);t==$||t==N?this.pool.writeU8(i.length):this.pool.writeVarint(i.length),this.pool.writeBulkAligned(i,1)}}writeArray(e,t){var r=e.length;switch(t){case Y:break;case q:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.writeValue(e[t]);break;case G:this.writeSparseArray(e);break;case J:case K:case Q:case X:case Z:this.pool.writePackedArray(e,t)}}writeSparseArray(e){var t=e.length,r=new Uint32Array(t),i=[];let s=0;for(let a=0;a<t;a++)a in e&&(r[s]=a,i[s]=e[a],s++);this.pool.writeVarint(t),this.pool.writeVarint(s);for(let e=0;e<s;e++)this.pool.writeVarint(r[e]),this.writeValue(i[e])}writeObject(e,t){if(t!=ee)switch(t){case re:case te:this.writeSimpleObject(e);break;case se:this.writeObjectWithDescriptors(e);break;case ae:this.writeObjectWithMethods(e);break;case ie:this.writeConstructorObject(e)}}writeSimpleObject(e){var t,r=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(r.sort(),this.pool.writeVarint(r.length),r))this.writeValue(t),this.writeValue(e[t])}writeObjectWithDescriptors(e){var t,r=Object.getOwnPropertyNames(e),i=Object.getOwnPropertySymbols(e);r=[...r,...i].filter(t=>{try{var r=Object.getOwnPropertyDescriptor(e,t);return r&&(this.options.serializeFunctions||!r.get&&!r.set&&"function"!=typeof r.value)}catch(t){return!1}});for(t of(this.pool.writeVarint(r.length),r)){this.writeValue(t);var s=Object.getOwnPropertyDescriptor(e,t);let r=0;s.enumerable&&(r|=1),s.writable&&(r|=2),s.configurable&&(r|=4),s.get&&(r|=8),s.set&&(r|=16),this.pool.writeU8(r),s.get||s.set?(s.get&&this.writeValue(s.get),s.set&&this.writeValue(s.set)):this.writeValue(s.value)}}writeObjectWithMethods(e){var t,r,i,s,a=[];for(t of Object.keys(e))try{var n=e[t];"function"==typeof n?this.options.serializeFunctions?a.push([t,n,!0]):a.push([t,null,!1]):a.push([t,n,!1])}catch(e){}for([r,i,s]of(this.pool.writeVarint(a.length),a))this.writeValue(r),this.pool.writeU8(s?1:0),s&&this.options.serializeFunctions?(this.writeValue(i.toString()),this.writeValue(i.name||"")):s?this.pool.writeU8(Ne):this.writeValue(i)}writeConstructorObject(e){this.writeValue(e.constructor.name||"");var t,r=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(this.pool.writeVarint(r.length),r))this.writeValue(t),this.writeValue(e[t])}writeTypedArray(e,t){var r=e.buffer,i=e.byteOffset,s=e.length;if(this.options.shareArrayBuffers){if(void 0!==(a=this.buffers.get(r)))return this.pool.writeU8(1),this.pool.writeVarint(a),this.pool.writeVarint(i),void this.pool.writeVarint(s);this.buffers.set(r,this.buffers.size)}this.pool.writeU8(0),this.pool.writeVarint(i),this.pool.writeVarint(s);var a,n=s*(a=He[t]||1);if(t==de||t==ye)for(let t=0;t<s;t++)this.pool.writeBigInt64(e[t]);else t=new Uint8Array(r,i,n),this.pool.writeBulkAligned(t,a)}writeArrayBuffer(e,t){e=new Uint8Array(e),this.pool.writeVarint(e.length),this.pool.writeBulkAligned(e,1)}writeCollection(e,t){switch(t){case Ue:for(var[r,i]of(this.pool.writeVarint(e.size),e))this.writeValue(r),this.writeValue(i);break;case Ve:for(var s of(this.pool.writeVarint(e.size),e))this.writeValue(s)}}writeDate(e,t){t==me&&this.pool.writeF64(e.getTime())}writeError(e,t){if(this.writeValue(e.message||""),this.writeValue(e.stack||""),t==Oe&&e.errors)for(var r of(this.pool.writeVarint(e.errors.length),e.errors))this.writeValue(r)}writeRegExp(e){this.writeValue(e.source),this.writeValue(e.flags)}writeBinary(e,t){this.pool.writeVarint(0),this.pool.writeVarint(0)}writeSpecial(e,t){switch(t){case Pe:var r=e.description;this.writeValue(r);break;case $e:break;case Re:r=Symbol.keyFor(e),this.writeValue(r||"");break;case De:r=Ye.get(e),this.writeValue(r||"")}}writeExtension(e,t){}deserialize(e){if(this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset),this.pos=0,this.deserializeRefs=[],this.deserializeStrings=[],this.deserializeBuffers=[],1413632565!==this.readU32())throw new Error("Invalid TurboSerial data");if(5!==(e=this.readU8()))throw new Error("Unsupported version: "+e);return this.readValue()}readValue(){if(this.pos>=this.buffer.length)throw new Error("Unexpected end of buffer");var e=this.readU8();if(e==Fe||e==je){var t=this.readVarint();if(t>=this.deserializeRefs.length)throw new Error("Invalid reference: "+t);return this.deserializeRefs[t]}if(e==H){if((t=this.readVarint())>=this.deserializeStrings.length)throw new Error("Invalid string reference: "+t);return this.deserializeStrings[t]}if(e==ve){if((t=this.readVarint())>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return this.deserializeBuffers[t]}let r,v=!1;switch(t=e&i){case l:case h:case f:v=!0}if(v){switch(t){case h:r=[];break;case f:e==Ue?r=new Map:e==Ve&&(r=new Set);break;case l:r={}}switch(r&&this.deserializeRefs.push(r),t){case h:this.fillArray(r,e);break;case l:this.fillObject(r,e);break;case f:this.fillCollection(r,e)}}else{switch(t){case s:r=this.readPrimitive(e);break;case a:r=this.readNumber(e);break;case n:r=this.readBigInt(e);break;case o:r=this.readString(e);break;case c:r=this.readTypedArray(e);break;case u:r=this.readArrayBuffer(e);break;case p:r=this.readDate(e);break;case w:r=this.readError(e);break;case d:r=this.readRegExp();break;case y:r=this.readBinary(e);break;case g:r=this.readSpecial(e);break;case b:r=this.readExtension(e);break;default:throw new Error("Unknown type: 0x"+e.toString(16))}"object"!=typeof r||null==r||v||this.deserializeRefs.push(r)}return r}fillArray(e,t){switch(t){case Y:break;case q:var r=this.readVarint();for(let t=0;t<r;t++)e[t]=this.readValue();break;case G:var i=this.readVarint(),s=this.readVarint();e.length=i;for(let t=0;t<s;t++)e[this.readVarint()]=this.readValue();break;case J:case K:case Q:case X:case Z:i=this.readPackedArrayData(t),e.push(...i)}}fillObject(e,t){if(t!=ee)switch(t){case re:case te:this.fillSimpleObject(e);break;case se:this.fillObjectWithDescriptors(e);break;case ae:this.fillObjectWithMethods(e);break;case ie:this.fillConstructorObject(e)}}fillSimpleObject(e){var t=this.readVarint();for(let r=0;r<t;r++)e[this.readValue()]=this.readValue()}fillObjectWithDescriptors(e){var t=this.readVarint();for(let n=0;n<t;n++){var r=this.readValue(),i={enumerable:!!(1&(a=this.readU8())),writable:!!(2&a),configurable:!!(4&a)},s=!!(8&a),a=!!(16&a);s||a?(s&&(i.get=this.readValue()),a&&(i.set=this.readValue())):i.value=this.readValue(),Object.defineProperty(e,r,i)}}fillObjectWithMethods(e){var t=this.readVarint();for(let s=0;s<t;s++){var r=this.readValue();if(this.readU8())if(this.options.serializeFunctions){var i=this.readValue();this.readValue();try{e[r]=new Function("return "+i)()}catch(t){e[r]=function(){throw new Error("Function deserialization failed")}}}else this.readU8()===Ne&&(e[r]=function(){throw new Error("Function not serialized")});else e[r]=this.readValue()}}fillConstructorObject(e){var t=this.readValue(),r=this.readVarint();for(let t=0;t<r;t++)e[this.readValue()]=this.readValue();Object.defineProperty(e,"__constructorName",{value:t,enumerable:!1,writable:!1,configurable:!0})}fillCollection(e,t){var r=this.readVarint();switch(t){case Ue:for(let t=0;t<r;t++){var i=this.readValue(),s=this.readValue();e.set(i,s)}break;case Ve:for(let t=0;t<r;t++)e.add(this.readValue())}}readPrimitive(e){switch(e){case v:return null;case A:return;case U:return!1;case V:return!0;default:throw new Error("Unknown primitive: 0x"+e.toString(16))}}readNumber(e){switch(e){case m:return this.view.getInt8(this.pos++);case E:return this.readI16();case k:return this.readI32();case x:return this.readU32();case S:return this.readF32();case _:return this.readF64();case I:return NaN;case B:return 1/0;case C:return-1/0;case O:return-0;case T:var t=this.readVarint();return this.readU8()?-t:t;default:throw new Error("Unknown number type: 0x"+e.toString(16))}}readBigInt(e){switch(e){case M:case L:return this.readBigInt64();case z:case F:return this.readLargeBigInt(e==F);default:throw new Error("Unknown BigInt type: 0x"+e.toString(16))}}readLargeBigInt(e){var t=this.readVarint(),r=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t;let i="";for(let e=r.length-1;0<=e;e--)i+=r[e].toString(16).padStart(2,"0");return t=BigInt("0x"+i),e?-t:t}readString(e){if(e==j)return"";let t,r;switch(e){case P:case R:case $:case N:t=this.readU8();break;default:t=this.readVarint()}if(this.ensureBytes(t),e==P||e==R||e==D){r="";for(let e=0;e<t;e++)r+=String.fromCharCode(this.readU8())}else e=this.buffer.subarray(this.pos,this.pos+t),this.pos+=t,r=this.decoder.decode(e);return this.deserializeStrings.push(r),r}readPackedArrayData(e){var t=this.readVarint(),r=new Array(t),i=He[e];if(!i)throw new Error("Unknown packed array type: 0x"+e.toString(16));switch(this.alignPos(Math.min(i,8)),this.ensureBytes(t*i),e){case J:for(let e=0;e<t;e++)r[e]=this.view.getInt8(this.pos++);break;case K:for(let e=0;e<t;e++)r[e]=this.view.getInt16(this.pos,!0),this.pos+=2;break;case Q:for(let e=0;e<t;e++)r[e]=this.view.getInt32(this.pos,!0),this.pos+=4;break;case X:for(let e=0;e<t;e++)r[e]=this.view.getFloat32(this.pos,!0),this.pos+=4;break;case Z:for(let e=0;e<t;e++)r[e]=this.view.getFloat64(this.pos,!0),this.pos+=8}return r}readTypedArray(e){if(this.readU8()){var t=this.readVarint(),r=this.readVarint(),i=this.readVarint();if(t>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return t=this.deserializeBuffers[t],this.createTypedArray(e,t,r,i)}this.readVarint();var s=this.readVarint();t=He[e]||1;if(e!=de&&e!=ye)return r=s*t,this.alignPos(t),this.ensureBytes(r),i=this.buffer.subarray(this.pos,this.pos+r),this.pos+=r,t=new ArrayBuffer(r),new Uint8Array(t).set(i),this.deserializeBuffers.push(t),this.createTypedArray(e,t,0,s);this.alignPos(8);var a=[];for(let e=0;e<s;e++)a.push(this.readBigInt64());return new(e==de?BigInt64Array:BigUint64Array)(a)}createTypedArray(e,t,r,i){var s={[ne]:Uint8Array,[oe]:Int8Array,[he]:Uint8ClampedArray,[le]:Uint16Array,[ce]:Int16Array,[ue]:Uint32Array,[fe]:Int32Array,[pe]:Float32Array,[we]:Float64Array,[de]:BigInt64Array,[ye]:BigUint64Array,[ge]:DataView}[e];if(s)return new s(t,r,i);throw new Error("Unknown typed array type: 0x"+e.toString(16))}readArrayBuffer(e){var t=this.readVarint(),r=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t,t=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return this.deserializeBuffers.push(t),t}readDate(e){switch(e){case me:return new Date(this.readF64());case Ee:return new Date(NaN);default:throw new Error("Unknown date type: 0x"+e.toString(16))}}readError(e){var t=this.readValue(),r=this.readValue();let i;var s={[ke]:Error,[xe]:EvalError,[Se]:RangeError,[_e]:ReferenceError,[Ie]:SyntaxError,[Be]:TypeError,[Ce]:URIError}[e]||Error;if(e==Oe){var a=this.readVarint(),n=[];for(let e=0;e<a;e++)n.push(this.readValue());i=new AggregateError(n,t)}else i=new s(t);return r&&(i.stack=r),i}readRegExp(){var e=this.readValue(),t=this.readValue();return new RegExp(e,t)}readBinary(e){return{_type:"Binary",size:this.readVarint(),typeStr:this.readVarint()}}readSpecial(e){switch(e){case Pe:var t=this.readValue();return Symbol(t);case $e:return Symbol();case Re:return t=this.readValue(),Symbol.for(t);case De:return t=this.readValue(),qe.get(t)||Symbol(t);default:throw new Error("Unknown special type: 0x"+e.toString(16))}}readExtension(e){if(e!==Ne)throw new Error("Unknown extension type: 0x"+e.toString(16));return function(){throw new Error("Function not serialized")}}readU8(){return this.ensureBytes(1),this.buffer[this.pos++]}readI16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getInt16(this.pos,!0);return this.pos+=2,e}readU16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}readI32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}readU32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}readF32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getFloat32(this.pos,!0);return this.pos+=4,e}readF64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getFloat64(this.pos,!0);return this.pos+=8,e}readBigInt64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getBigInt64(this.pos,!0);return this.pos+=8,e}readVarint(){let e=0,t=0;for(var r;this.ensureBytes(1),e|=(127&(r=this.buffer[this.pos++]))<<t,t+=7,128&r;);return e>>>0}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}ensureBytes(e){if(this.pos+e>this.buffer.length)throw new Error(`Buffer underflow: need ${e}, available `+(this.buffer.length-this.pos))}}({compression:!0,deduplication:!0,shareArrayBuffers:!0,simdOptimization:!0,detectCircular:!0});new rt.a,new class{constructor(){this._connections=new Map,this._refCounts=new Map}async getConnection(e,t=1,r){var i,s=e+"_v"+t;return this._connections.has(s)?(this._refCounts.set(s,(this._refCounts.get(s)||0)+1),this._connections.get(s)):(i=await new Promise((i,s)=>{let a=indexedDB.open(e,t);a.onerror=()=>s(new st("Failed to open database","DATABASE_OPEN_FAILED",a.error)),a.onsuccess=()=>i(a.result),a.onupgradeneeded=e=>{r&&r(e.target.result,e.oldVersion,e.newVersion)}}),this._connections.set(s,i),this._refCounts.set(s,1),i)}releaseConnection(e,t=1){e=e+"_v"+t;1<(t=this._refCounts.get(e)||0)?this._refCounts.set(e,t-1):(t=this._connections.get(e))&&(t.close(),this._connections.delete(e),this._refCounts.delete(e))}closeAll(){for(var e of this._connections.values())e.close();this._connections.clear(),this._refCounts.clear()}};class st extends Error{constructor(e,t,r){super(e),this.name="LacertaDBError",this.code=t,this.originalError=r||null,this.timestamp=(new Date).toISOString()}}let at=new class{constructor(){this.operators={$eq:(e,t)=>e===t,$ne:(e,t)=>e!==t,$gt:(e,t)=>t<e,$gte:(e,t)=>t<=e,$lt:(e,t)=>e<t,$lte:(e,t)=>e<=t,$in:(e,t)=>Array.isArray(t)&&t.includes(e),$nin:(e,t)=>Array.isArray(t)&&!t.includes(e),$and:(e,t)=>t.every(t=>this.evaluate(e,t)),$or:(e,t)=>t.some(t=>this.evaluate(e,t)),$not:(e,t)=>!this.evaluate(e,t),$nor:(e,t)=>!t.some(t=>this.evaluate(e,t)),$exists:(e,t)=>void 0!==e===t,$type:(e,t)=>typeof e===t,$all:(e,t)=>Array.isArray(e)&&t.every(t=>e.includes(t)),$elemMatch:(e,t)=>Array.isArray(e)&&e.some(e=>this.evaluate({value:e},{value:t})),$size:(e,t)=>Array.isArray(e)&&e.length===t,$regex:(e,t)=>{if("string"!=typeof e)return!1;try{return new RegExp(t).test(e)}catch{return!1}},$text:(e,t)=>"string"==typeof e&&e.toLowerCase().includes(t.toLowerCase())}}evaluate(e,t){for(var r in t){var i=t[r];if(r.startsWith("$")){var s=this.operators[r];if(!s||!s(e,i))return!1}else{var a=this.getFieldValue(e,r);if("object"!=typeof i||null===i||Array.isArray(i)){if(a!==i)return!1}else for(var n in i)if(n.startsWith("$")){var o=this.operators[n];if(!o||!o(a,i[n]))return!1}}}return!0}getFieldValue(e,t){let r=e;for(var i of t.split(".")){if(null==r)return;r=r[i]}return r}};new class{constructor(){this.stages={$match:(e,t)=>e.filter(e=>at.evaluate(e,t)),$project:(e,t)=>e.map(e=>{var r,i={};for(r in t){var s=t[r];1===s||!0===s?i[r]=at.getFieldValue(e,r):"string"==typeof s&&s.startsWith("$")&&(i[r]=at.getFieldValue(e,s.substring(1)))}if(Object.values(t).some(e=>0===e||!1===e)){var a=Object.keys(t).filter(e=>0===t[e]||!1===t[e]);let r={...e};return a.forEach(e=>delete r[e]),r}return i}),$sort:(e,t)=>[...e].sort((e,r)=>{for(var i in t){var s=t[i],a=at.getFieldValue(e,i);if(a<(i=at.getFieldValue(r,i)))return-s;if(i<a)return s}return 0}),$limit:(e,t)=>e.slice(0,t),$skip:(e,t)=>e.slice(t),$group:(e,t)=>{var r,i=new Map,s=t._id;for(r of e){var a="string"==typeof s?at.getFieldValue(r,s.replace("$","")):it.serialize(s);i.has(a)||i.set(a,{_id:a,docs:[]}),i.get(a).docs.push(r)}var n,o=[];for(n of i.values()){var h,l={_id:n._id};for(h in t)if("_id"!==h){var c=t[h],u=Object.keys(c)[0];let e=c[u].toString().replace("$","");switch(u){case"$sum":l[h]=n.docs.reduce((t,r)=>t+(at.getFieldValue(r,e)||0),0);break;case"$avg":var f=n.docs.reduce((t,r)=>t+(at.getFieldValue(r,e)||0),0);l[h]=f/n.docs.length;break;case"$count":l[h]=n.docs.length;break;case"$max":l[h]=Math.max(...n.docs.map(t=>at.getFieldValue(t,e)));break;case"$min":l[h]=Math.min(...n.docs.map(t=>at.getFieldValue(t,e)))}}o.push(l)}return o},$lookup:async(e,t,r)=>{r=await(await r.getCollection(t.from)).getAll();let i=new Map;return r.forEach(e=>{var r=at.getFieldValue(e,t.foreignField);i.has(r)||i.set(r,[]),i.get(r).push(e)}),e.map(e=>{var r=at.getFieldValue(e,t.localField);return{...e,[t.as]:i.get(r)||[]}})}}}async execute(e,t,r){let i=e;for(var s of t){var a=Object.keys(s)[0],n=(s=s[a],this.stages[a]);if(!n)throw new Error("Unknown aggregation stage: "+a);i="$lookup"===a?await n(i,s,r):n(i,s)}return i}}},function(e,t,r){r.r(t),t=r(1),"undefined"!=typeof window?window.LACERTA=t:self.LACERTA=t}]);
|
|
1
|
+
(e=>{var t={};function i(r){var s;return(t[r]||(s=t[r]={i:r,l:!1,exports:{}},e[r].call(s.exports,s,s.exports,i),s.l=!0,s)).exports}i.m=e,i.c=t,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(r,s,function(t){return e[t]}.bind(null,s));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=2)})([function(e,t){var i={},r=new Float32Array(4);function s(e,t){if((0|e)!==e)throw new TypeError("Lane index must be an int32");if(e<0||t<=e)throw new RangeError("Lane index must be in bounds")}new Int32Array(r.buffer),new Int16Array(r.buffer),new Int8Array(r.buffer),new Uint32Array(r.buffer),new Uint16Array(r.buffer),new Uint8Array(r.buffer),void 0!==i.Int8x16&&void 0!==i.Int8x16.extractLane||(i.Int8x16=function(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m){if(!(this instanceof i.Int8x16))return new i.Int8x16(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m);this.s_=new Int8Array([e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m])},i.Int8x16.check=function(e){if(e instanceof i.Int8x16)return e;throw new TypeError("Argument is not a Int8x16.")},i.Int8x16.splat=function(e){return new i.Int8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},i.Int8x16.extractLane=function(e,t){return e=i.Int8x16.check(e),s(t,16),e.s_[t]},i.Int8x16.replaceLane=function(e,t,r){return e=i.Int8x16.check(e),s(t,16),(e=Array.from(e.s_))[t]=r,new i.Int8x16(...e)},i.Int8x16.shuffle=function(e,t,r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g){var v=[r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g],b=[];e=i.Int8x16.check(e),t=i.Int8x16.check(t);for(var A=0;A<16;A++){var x=v[A];s(x,32),b[A]=x<16?e.s_[x]:t.s_[x-16]}return new i.Int8x16(...b)}),void 0!==i.Uint8x16&&void 0!==i.Uint8x16.extractLane||(i.Uint8x16=function(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m){if(!(this instanceof i.Uint8x16))return new i.Uint8x16(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m);this.s_=new Uint8Array([e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m])},i.Uint8x16.check=function(e){if(e instanceof i.Uint8x16)return e;throw new TypeError("Argument is not a Uint8x16.")},i.Uint8x16.splat=function(e){return new i.Uint8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},i.Uint8x16.extractLane=function(e,t){return e=i.Uint8x16.check(e),s(t,16),e.s_[t]},i.Uint8x16.load=function(e,t){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return new i.Uint8x16(...e.subarray(t,t+16))},i.Uint8x16.store=function(e,t,i){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return e.set(i.s_,t),i},i.Uint8x16.shuffle=function(e,t,r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g){var v=[r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g],b=[];e=i.Uint8x16.check(e),t=i.Uint8x16.check(t);for(var A=0;A<16;A++){var x=v[A];s(x,32),b[A]=x<16?e.s_[x]:t.s_[x-16]}return new i.Uint8x16(...b)},i.Uint8x16.and=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]&t.s_[s];return new i.Uint8x16(...r)},i.Uint8x16.or=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]|t.s_[s];return new i.Uint8x16(...r)},i.Uint8x16.shiftLeftByScalar=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]<<t;return new i.Uint8x16(...r)},i.Uint8x16.shiftRightByScalar=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]>>>t;return new i.Uint8x16(...r)}),e.exports=class{constructor(){this.ENC_SHUFFLE=i.Int8x16(10,11,9,10,7,8,6,7,4,5,3,4,1,2,0,1),this.ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.ENC_LUT_SIMD=[i.Uint8x16.splat(0),i.Uint8x16.splat(0),i.Uint8x16.splat(0),i.Uint8x16.splat(0)];for(let t=0;t<4;t++){var e=this.ENC_LUT.substring(16*t,16*(t+1));this.ENC_LUT_SIMD[t]=i.Uint8x16(...Array.from(e).map(e=>e.charCodeAt(0)))}this.DEC_DELTA_ASSO=i.Uint8x16(1,1,1,1,1,1,1,1,0,0,0,0,0,15,0,15),this.DEC_DELTA_VALUES=i.Int8x16(0,0,0,19,4,191,191,185,185,0,16,195,191,191,185,185),this.DEC_SHUFFLE=i.Int8x16(-1,-1,-1,-1,12,13,14,8,9,10,4,5,6,0,1,2),this.SCALAR_ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.SCALAR_DEC_LUT={};for(let e=0;e<this.SCALAR_ENC_LUT.length;e++)this.SCALAR_DEC_LUT[this.SCALAR_ENC_LUT.charAt(e)]=e;this.SCALAR_DEC_LUT["="]=0}_scalar_encode(e){let t="";for(let a=0;a<e.length;a+=3){var i=e[a],r=a+1<e.length?e[a+1]:0,s=a+2<e.length?e[a+2]:0;t+=this.SCALAR_ENC_LUT[i>>2]+this.SCALAR_ENC_LUT[(3&i)<<4|r>>4],a+1<e.length?t+=this.SCALAR_ENC_LUT[(15&r)<<2|s>>6]:t+="=",a+2<e.length?t+=this.SCALAR_ENC_LUT[63&s]:t+="="}return t}encode(e){var t=e.length,i=4*Math.ceil(t/3),r=new Uint8Array(i);let s=0,a=0;for(;s+12<=t;){var n=e.subarray(s,s+12),o=new Uint8Array(16);o[0]=n[0]>>2,o[1]=(3&n[0])<<4|n[1]>>4,o[2]=(15&n[1])<<2|n[2]>>6,o[3]=63&n[2],o[4]=n[3]>>2,o[5]=(3&n[3])<<4|n[4]>>4,o[6]=(15&n[4])<<2|n[5]>>6,o[7]=63&n[5],o[8]=n[6]>>2,o[9]=(3&n[6])<<4|n[7]>>4,o[10]=(15&n[7])<<2|n[8]>>6,o[11]=63&n[8],o[12]=n[9]>>2,o[13]=(3&n[9])<<4|n[10]>>4,o[14]=(15&n[10])<<2|n[11]>>6,o[15]=63&n[11];for(let e=0;e<16;e++)r[a+e]=this.SCALAR_ENC_LUT.charCodeAt(o[e]);s+=12,a+=16}let h=(new TextDecoder).decode(r.subarray(0,a));return s<t&&(h+=this._scalar_encode(e.subarray(s))),h}_scalar_decode(e){e=e.replace(/=+$/,"");var t=Math.floor(3*e.length/4),i=new Uint8Array(t);let r=0;for(let h=0;h<e.length;h+=4){var s=this.SCALAR_DEC_LUT[e[h]],a=this.SCALAR_DEC_LUT[e[h+1]],n=h+2<e.length?this.SCALAR_DEC_LUT[e[h+2]]:0,o=h+3<e.length?this.SCALAR_DEC_LUT[e[h+3]]:0;i[r++]=s<<2|a>>4,r<t&&(i[r++]=(15&a)<<4|n>>2),r<t&&(i[r++]=(3&n)<<6|o)}return i}decode(e){var t=e.length;if(t%4!=0)throw new Error("Invalid Base64 string length.");var i=(e.match(/=/g)||[]).length,r=new Uint8Array(3*t/4-i);let s=0,a=0;for(var n;s+16<=t-i;){var o=Array.from(e.substring(s,s+16)).map(e=>this.SCALAR_DEC_LUT[e]),h=new Uint8Array(12);h[0]=o[0]<<2|o[1]>>4,h[1]=(15&o[1])<<4|o[2]>>2,h[2]=(3&o[2])<<6|o[3],h[3]=o[4]<<2|o[5]>>4,h[4]=(15&o[5])<<4|o[6]>>2,h[5]=(3&o[6])<<6|o[7],h[6]=o[8]<<2|o[9]>>4,h[7]=(15&o[9])<<4|o[10]>>2,h[8]=(3&o[10])<<6|o[11],h[9]=o[12]<<2|o[13]>>4,h[10]=(15&o[13])<<4|o[14]>>2,h[11]=(3&o[14])<<6|o[15],r.set(h,a),s+=16,a+=12}return s<t&&(n=this._scalar_decode(e.substring(s)),r.set(n,a)),r}}},function(e,t,i){i.r(t);let r=240,s=0,a=16,n=32,o=48,h=64,c=80,l=96,d=112,u=128,f=144,p=160,_=176,m=192,y=224,w=240,g=0,v=1,b=2,A=3,x=16,S=17,k=18,E=19,z=20,U=21,I=22,D=23,M=24,B=25,C=26,V=32,L=33,T=34,O=35,P=48,F=49,$=50,R=51,j=52,K=53,N=54,q=55,H=64,W=65,G=66,Q=67,Y=68,X=69,J=70,Z=71,ee=80,te=81,ie=82,re=83,se=84,ae=85,ne=96,oe=97,he=98,ce=99,le=100,de=101,ue=102,fe=103,pe=104,_e=105,me=106,ye=107,we=112,ge=113,ve=114,be=128,Ae=129,xe=144,Se=145,ke=160,Ee=161,ze=162,Ue=163,Ie=164,De=165,Me=166,Be=167,Ce=168,Ve=176,Le=192,Te=193,Oe=208,Pe=209,Fe=224,$e=225,Re=226,je=227,Ke=240,Ne=new Uint8Array(256),qe=new Uint8Array(256);new Map;let He=new Map,We=new Map;var Ge=[[S,2],[k,4],[E,4],[z,4],[U,8],[V,8],[L,8]];for(let e=0;e<Ge.length;e++)Ne[Ge[e][0]]=Ge[e][1];var Qe,Ye=[[ne,1],[oe,1],[he,1],[ce,2],[le,2],[de,4],[ue,4],[fe,4],[pe,8],[_e,8],[me,8],[Q,1],[Y,2],[X,4],[J,4],[Z,8]];for(let e=0;e<Ye.length;e++)qe[Ye[e][0]]=Ye[e][1];for(Qe of["asyncIterator","hasInstance","isConcatSpreadable","iterator","match","matchAll","replace","search","species","split","toPrimitive","toStringTag","unscopables"]){var Xe=Symbol[Qe];Xe&&(He.set(Xe,Qe),We.set(Qe,Xe))}class Je{constructor(e=65536){this.size=(e+128-1&-128)>>>0,this.buffer=new ArrayBuffer(this.size),this.offset=0,this.u8=new Uint8Array(this.buffer),this.view=new DataView(this.buffer),this.pos=0,this.f32View=null,this.f64View=null,this.i32View=null}ensure(e){var t,i;(e=this.pos+(e|=0)|0)>this.size&&(e=(128+(0|Math.max(this.size<<1,128+e))-1&-128)>>>0,t=new ArrayBuffer(e),(i=new Uint8Array(t)).set(this.u8.subarray(0,this.pos)),this.buffer=t,this.u8=i,this.view=new DataView(t),this.size=e,this.f32View=null,this.f64View=null,this.i32View=null)}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}writeU8(e){this.ensure(1),this.u8[this.pos++]=255&e}writeU16(e){this.alignPos(2),this.ensure(2),this.view.setUint16(this.pos,65535&e,!0),this.pos=this.pos+2|0}writeI16(e){this.alignPos(2),this.ensure(2),this.view.setInt16(this.pos,e,!0),this.pos=this.pos+2|0}writeU32(e){this.alignPos(4),this.ensure(4),this.view.setUint32(this.pos,e>>>0,!0),this.pos=this.pos+4|0}writeI32(e){this.alignPos(4),this.ensure(4),this.view.setInt32(this.pos,0|e,!0),this.pos=this.pos+4|0}writeF32(e){this.alignPos(4),this.ensure(4),this.view.setFloat32(this.pos,+e,!0),this.pos=this.pos+4|0}writeF64(e){this.alignPos(8),this.ensure(8),this.view.setFloat64(this.pos,+e,!0),this.pos=this.pos+8|0}writeBigInt64(e){this.alignPos(8),this.ensure(8),this.view.setBigInt64(this.pos,BigInt(e),!0),this.pos=this.pos+8|0}writeVarint(e){if(e>>>=0,this.ensure(5),e<128)this.u8[this.pos++]=e;else if(e<16384)this.u8[this.pos]=127&e|128,this.u8[this.pos+1]=e>>>7,this.pos=this.pos+2|0;else{let t=this.pos;for(;this.u8[t++]=127&e|128,128<=(e>>>=7););this.u8[t++]=e,this.pos=t}}writePackedArray(e,t){var i=0|e.length,r=(this.writeVarint(i),0|qe[t]);if(!r)throw new Error("Unknown element type: 0x"+t.toString(16));switch(this.alignPos(Math.min(r,8)),this.ensure(i*r),t){case Q:new Int8Array(this.buffer,this.pos,i).set(e),this.pos=this.pos+i|0;break;case Y:var s=new Int16Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)s[t]=0|e[t];this.pos=this.pos+(i<<1)|0;break;case X:var a=new Int32Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)a[t]=0|e[t];this.pos=this.pos+(i<<2)|0;break;case J:var n=new Float32Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)n[t]=+e[t];this.pos=this.pos+(i<<2)|0;break;case Z:var o=new Float64Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)o[t]=+e[t];this.pos=this.pos+(i<<3)|0;break;default:throw new Error("Unsupported packed array type: 0x"+t.toString(16))}}writeBulkAligned(e,t){var i;t=Math.min(t,8),this.alignPos(t),t=e.byteLength||e.length;this.ensure(t),e.buffer&&void 0!==e.byteOffset?(i=new Uint8Array(e.buffer,e.byteOffset,t),this.u8.set(i,this.pos)):this.u8.set(e,this.pos),this.pos=this.pos+t|0}reset(){this.pos=0}getResult(){return this.u8.subarray(0,this.pos)}}class Ze{constructor(){this.blockSize=16}canOptimize(e){var t=e.length;if(!(8<=t&(0==(t&t-1)||16<=t)))return!1;var i=typeof e[0];if("number"!=i)return!1;var r=Math.max(1,t>>>5|0);for(let s=r;s<t;s+=r)if(typeof e[s]!=i)return!1;return!0}analyzeNumericArray(e){let t=1,i=1/0,r=-1/0,s=1;var a,n=e.length;for(let a=0;a<n;a++){var o=e[a];t&=+(o==(0|o)),i=Math.min(i,o),r=Math.max(r,o),s&&(s&=+(Math.fround(o)==o))}return t?(a=+((a=Math.max(Math.abs(i),Math.abs(r)))<=127)<<0|+(a<=32767)<<1|+(a<=2147483647)<<2,[{type:X,elementSize:4},{type:Q,elementSize:1},{type:Y,elementSize:2},{type:X,elementSize:4}][3&a]):s?{type:J,elementSize:4}:{type:Z,elementSize:8}}}class et{constructor(){this.simdProcessor=new Ze,this.constructorMap=new Map,this.typeNameMap=new Map,this.errorTypeMap=new Map,this.initMaps()}initMaps(){var e,t,i,r,s=[[Date,xe],[RegExp,Ve],[Map,be],[Set,Ae],[ArrayBuffer,we],[DataView,ye]],a=[["Uint8Array",ne],["Int8Array",oe],["Uint8ClampedArray",he],["Uint16Array",ce],["Int16Array",le],["Uint32Array",de],["Int32Array",ue],["Float32Array",fe],["Float64Array",pe],["BigInt64Array",_e],["BigUint64Array",me],["SharedArrayBuffer",ve]];for([e,t]of s)this.constructorMap.set(e,t);for([i,r]of a){var n=globalThis[i];n&&(this.constructorMap.set(n,r),this.typeNameMap.set(i,r))}this.errorTypeMap.set("Error",ke),this.errorTypeMap.set("EvalError",Ee),this.errorTypeMap.set("RangeError",ze),this.errorTypeMap.set("ReferenceError",Ue),this.errorTypeMap.set("SyntaxError",Ie),this.errorTypeMap.set("TypeError",De),this.errorTypeMap.set("URIError",Me),this.errorTypeMap.set("AggregateError",Be)}detect(e){if(null==e)return null===e?g:v;switch(typeof e){case"boolean":return e?A:b;case"number":return this.detectNumber(e);case"bigint":return this.detectBigInt(e);case"string":return this.detectString(e);case"symbol":return this.detectSymbol(e);case"object":return this.detectObject(e);default:return v}}detectNumber(e){var t,i,r;return e!=e?I:(r=new Float64Array([e]),((t=(r=new Uint32Array(r.buffer))[1])&(i=2146435072))==i&0==r[0]&0==(1048575&t)?t>>>31?M:D:0==e&&t>>>31?B:e==(0|e)?(r=+((i=Math.abs(e))<=127)<<0|+(i<=32767)<<1|+(i<=2147483647)<<2,[C,x,S,k][Math.min(r,3)]):Math.fround(e)==e?z:U)}detectBigInt(e){var t=e<0n;return(t?-e:e)<=0x7fffffffffffffffn?t?L:V:t?O:T}detectString(e){var t,i=e.length;if(0==i)return P;let r=1;for(let t=0;t<i&&r;t++)r&=+(e.charCodeAt(t)<=127);return r?i<16?F:i<256?$:R:(t=(new TextEncoder).encode(e).length)<16?j:t<256?K:N}detectSymbol(e){return void 0!==Symbol.keyFor(e)?$e:He.has(e)?Re:void 0===e.description?je:Fe}detectObject(e){var t,i;return null==e?g:(t=e.constructor,void 0!==(t=this.constructorMap.get(t))?t==xe?(i=e.getTime())==i?xe:Se:t:Array.isArray(e)?this.detectArray(e):ArrayBuffer.isView(e)?this.detectTypedArrayType(e):e instanceof Error?this.detectErrorType(e):"undefined"!=typeof Blob&&e instanceof Blob?e instanceof File?Te:Le:this.classifyObject(e))}classifyObject(e){var t=Object.getPrototypeOf(e);if(e.constructor!=Object&&t!=Object.prototype&&null!=t)return re;t=Object.getOwnPropertyNames(e);var i,r=Object.getOwnPropertySymbols(e);if(0===(t=[...t,...r]).length)return ee;let s=!1,a=!1;for(i of t){var n=Object.getOwnPropertyDescriptor(e,i);if(n.get||n.set){s=!0;break}"function"==typeof n.value&&(a=!0),n.enumerable&&n.writable&&n.configurable||(s=!0)}return s?se:a?ae:ie}detectArray(e){var t=e.length;if(0==t)return H;let i=0,r=!1;for(let s=0;s<t;s++)s in e?i++:r=!0;return r||i<3*t>>>2?G:this.simdProcessor.canOptimize(e)?this.simdProcessor.analyzeNumericArray(e).type:W}detectTypedArrayType(e){return e=e.constructor.name,this.typeNameMap.get(e)||ne}detectErrorType(e){return e=e.constructor.name,this.errorTypeMap.get(e)||Ce}}var tt=i(0);tt=i.n(tt);i.d(t,"LacertaDB",(function(){return Ct})),i.d(t,"Database",(function(){return Bt})),i.d(t,"Collection",(function(){return Mt})),i.d(t,"Document",(function(){return xt})),i.d(t,"MigrationManager",(function(){return It})),i.d(t,"PerformanceMonitor",(function(){return Dt})),i.d(t,"LacertaDBError",(function(){return ht})),i.d(t,"OPFSUtility",(function(){return bt})),i.d(t,"IndexManager",(function(){return vt})),i.d(t,"CacheStrategy",(function(){return ut})),i.d(t,"LRUCache",(function(){return ct})),i.d(t,"LFUCache",(function(){return lt})),i.d(t,"TTLCache",(function(){return dt})),i.d(t,"BTreeIndex",(function(){return yt})),i.d(t,"TextIndex",(function(){return wt})),i.d(t,"GeoIndex",(function(){return gt})),i.d(t,"SecureDatabaseEncryption",(function(){return _t})),i.d(t,"QuickStore",(function(){return st})),i.d(t,"AsyncMutex",(function(){return ot})),i.d(t,"IndexedDBConnectionPool",(function(){return at}));
|
|
2
|
+
/**
|
|
3
|
+
* LacertaDB V0.7.0 - Production Library with QuickStore
|
|
4
|
+
* Added: QuickStore feature, private property/method conventions
|
|
5
|
+
* @version 0.7.0
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
let it=new class{constructor(e={}){this.options={compression:e.compression||!1,deduplication:!1!==e.deduplication,shareArrayBuffers:!1!==e.shareArrayBuffers,simdOptimization:!1!==e.simdOptimization,detectCircular:!1!==e.detectCircular,serializeFunctions:e.serializeFunctions||!1,preservePropertyDescriptors:!1!==e.preservePropertyDescriptors,memoryPoolSize:e.memoryPoolSize||65536,...e},this.pool=new Je(this.options.memoryPoolSize),this.detector=new et,this.simdProcessor=new Ze,this.refs=new Map,this.circularRefs=new Set,this.strings=new Map,this.buffers=new Map,this.encoder=new TextEncoder,this.decoder=new TextDecoder}serialize(e){return this.resetState(),this.pool.writeU32(1413632565),this.pool.writeU8(5),this.options.detectCircular&&this.detectCircularReferences(e,new WeakSet),this.writeValue(e),this.pool.getResult()}resetState(){this.pool.reset(),this.refs.clear(),this.circularRefs.clear(),this.strings.clear(),this.buffers.clear()}detectCircularReferences(e,t){if("object"==typeof e&&null!=e)if(t.has(e))this.circularRefs.add(e);else{t.add(e);try{if(Array.isArray(e))for(let i=0;i<e.length;i++)i in e&&this.detectCircularReferences(e[i],t);else if(e instanceof Map)for(var[i,r]of e)this.detectCircularReferences(i,t),this.detectCircularReferences(r,t);else if(e instanceof Set)for(var s of e)this.detectCircularReferences(s,t);else for(var a in e)if(e.hasOwnProperty(a))try{this.detectCircularReferences(e[a],t)}catch(i){}}finally{t.delete(e)}}}writeValue(e){if(this.options.detectCircular&&"object"==typeof e&&null!=e&&this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(Pe),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"object"==typeof e&&null!=e&&!this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(Oe),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"string"==typeof e&&3<e.length){if(void 0!==(t=this.strings.get(e)))return this.pool.writeU8(q),void this.pool.writeVarint(t);this.strings.set(e,this.strings.size)}if(this.options.shareArrayBuffers&&e instanceof ArrayBuffer){if(void 0!==(t=this.buffers.get(e)))return this.pool.writeU8(ge),void this.pool.writeVarint(t);this.buffers.set(e,this.buffers.size)}var t,i=this.detector.detect(e);switch(t=(this.pool.writeU8(i),i&r)){case s:break;case a:this.writeNumber(e,i);break;case n:this.writeBigInt(e,i);break;case o:this.writeString(e,i);break;case h:this.writeArray(e,i);break;case c:this.writeObject(e,i);break;case l:this.writeTypedArray(e,i);break;case d:this.writeArrayBuffer(e,i);break;case u:this.writeCollection(e,i);break;case f:this.writeDate(e,i);break;case p:this.writeError(e,i);break;case _:this.writeRegExp(e);break;case m:this.writeBinary(e,i);break;case y:this.writeSpecial(e,i);break;case w:this.writeExtension(e,i)}}writeNumber(e,t){switch(t){case x:this.pool.writeU8(e);break;case S:this.pool.writeI16(e);break;case k:this.pool.writeI32(e);break;case E:this.pool.writeU32(e);break;case z:this.pool.writeF32(e);break;case U:this.pool.writeF64(e);break;case C:var i=e<0;this.pool.writeVarint(Math.abs(e)),this.pool.writeU8(i?1:0)}}writeBigInt(e,t){switch(t){case V:case L:this.pool.writeBigInt64(e);break;case T:case O:this.writeLargeBigInt(e)}}writeLargeBigInt(e){var t,i=BigInt(e).toString(16).replace("-",""),r=[];for(let e=i.length-2;0<=e;e-=2)r.push(parseInt(i.substr(e,2),16));for(t of(i.length%2&&r.push(parseInt(i[0],16)),this.pool.writeVarint(r.length),r))this.pool.writeU8(t)}writeString(e,t){var i=e.length;switch(t){case P:break;case F:case $:this.pool.writeU8(i);for(let t=0;t<i;t++)this.pool.writeU8(e.charCodeAt(t));break;case R:this.pool.writeVarint(i);for(let t=0;t<i;t++)this.pool.writeU8(e.charCodeAt(t));break;case j:case K:case N:var r=this.encoder.encode(e);t==j||t==K?this.pool.writeU8(r.length):this.pool.writeVarint(r.length),this.pool.writeBulkAligned(r,1)}}writeArray(e,t){var i=e.length;switch(t){case H:break;case W:this.pool.writeVarint(i);for(let t=0;t<i;t++)this.writeValue(e[t]);break;case G:this.writeSparseArray(e);break;case Q:case Y:case X:case J:case Z:this.pool.writePackedArray(e,t)}}writeSparseArray(e){var t=e.length,i=new Uint32Array(t),r=[];let s=0;for(let a=0;a<t;a++)a in e&&(i[s]=a,r[s]=e[a],s++);this.pool.writeVarint(t),this.pool.writeVarint(s);for(let e=0;e<s;e++)this.pool.writeVarint(i[e]),this.writeValue(r[e])}writeObject(e,t){if(t!=ee)switch(t){case ie:case te:this.writeSimpleObject(e);break;case se:this.writeObjectWithDescriptors(e);break;case ae:this.writeObjectWithMethods(e);break;case re:this.writeConstructorObject(e)}}writeSimpleObject(e){var t,i=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(i.sort(),this.pool.writeVarint(i.length),i))this.writeValue(t),this.writeValue(e[t])}writeObjectWithDescriptors(e){var t,i=Object.getOwnPropertyNames(e),r=Object.getOwnPropertySymbols(e);i=[...i,...r].filter(t=>{try{var i=Object.getOwnPropertyDescriptor(e,t);return i&&(this.options.serializeFunctions||!i.get&&!i.set&&"function"!=typeof i.value)}catch(t){return!1}});for(t of(this.pool.writeVarint(i.length),i)){this.writeValue(t);var s=Object.getOwnPropertyDescriptor(e,t);let i=0;s.enumerable&&(i|=1),s.writable&&(i|=2),s.configurable&&(i|=4),s.get&&(i|=8),s.set&&(i|=16),this.pool.writeU8(i),s.get||s.set?(s.get&&this.writeValue(s.get),s.set&&this.writeValue(s.set)):this.writeValue(s.value)}}writeObjectWithMethods(e){var t,i,r,s,a=[];for(t of Object.keys(e))try{var n=e[t];"function"==typeof n?this.options.serializeFunctions?a.push([t,n,!0]):a.push([t,null,!1]):a.push([t,n,!1])}catch(e){}for([i,r,s]of(this.pool.writeVarint(a.length),a))this.writeValue(i),this.pool.writeU8(s?1:0),s&&this.options.serializeFunctions?(this.writeValue(r.toString()),this.writeValue(r.name||"")):s?this.pool.writeU8(Ke):this.writeValue(r)}writeConstructorObject(e){this.writeValue(e.constructor.name||"");var t,i=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(this.pool.writeVarint(i.length),i))this.writeValue(t),this.writeValue(e[t])}writeTypedArray(e,t){var i=e.buffer,r=e.byteOffset,s=e.length;if(this.options.shareArrayBuffers){if(void 0!==(a=this.buffers.get(i)))return this.pool.writeU8(1),this.pool.writeVarint(a),this.pool.writeVarint(r),void this.pool.writeVarint(s);this.buffers.set(i,this.buffers.size)}this.pool.writeU8(0),this.pool.writeVarint(r),this.pool.writeVarint(s);var a,n=s*(a=qe[t]||1);if(t==_e||t==me)for(let t=0;t<s;t++)this.pool.writeBigInt64(e[t]);else t=new Uint8Array(i,r,n),this.pool.writeBulkAligned(t,a)}writeArrayBuffer(e,t){e=new Uint8Array(e),this.pool.writeVarint(e.length),this.pool.writeBulkAligned(e,1)}writeCollection(e,t){switch(t){case be:for(var[i,r]of(this.pool.writeVarint(e.size),e))this.writeValue(i),this.writeValue(r);break;case Ae:for(var s of(this.pool.writeVarint(e.size),e))this.writeValue(s)}}writeDate(e,t){t==xe&&this.pool.writeF64(e.getTime())}writeError(e,t){if(this.writeValue(e.message||""),this.writeValue(e.stack||""),t==Be&&e.errors)for(var i of(this.pool.writeVarint(e.errors.length),e.errors))this.writeValue(i)}writeRegExp(e){this.writeValue(e.source),this.writeValue(e.flags)}writeBinary(e,t){this.pool.writeVarint(0),this.pool.writeVarint(0)}writeSpecial(e,t){switch(t){case Fe:var i=e.description;this.writeValue(i);break;case je:break;case $e:i=Symbol.keyFor(e),this.writeValue(i||"");break;case Re:i=He.get(e),this.writeValue(i||"")}}writeExtension(e,t){}deserialize(e){if(this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset),this.pos=0,this.deserializeRefs=[],this.deserializeStrings=[],this.deserializeBuffers=[],1413632565!==this.readU32())throw new Error("Invalid TurboSerial data");if(5!==(e=this.readU8()))throw new Error("Unsupported version: "+e);return this.readValue()}readValue(){if(this.pos>=this.buffer.length)throw new Error("Unexpected end of buffer");var e=this.readU8();if(e==Oe||e==Pe){var t=this.readVarint();if(t>=this.deserializeRefs.length)throw new Error("Invalid reference: "+t);return this.deserializeRefs[t]}if(e==q){if((t=this.readVarint())>=this.deserializeStrings.length)throw new Error("Invalid string reference: "+t);return this.deserializeStrings[t]}if(e==ge){if((t=this.readVarint())>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return this.deserializeBuffers[t]}let i,g=!1;switch(t=e&r){case c:case h:case u:g=!0}if(g){switch(t){case h:i=[];break;case u:e==be?i=new Map:e==Ae&&(i=new Set);break;case c:i={}}switch(i&&this.deserializeRefs.push(i),t){case h:this.fillArray(i,e);break;case c:this.fillObject(i,e);break;case u:this.fillCollection(i,e)}}else{switch(t){case s:i=this.readPrimitive(e);break;case a:i=this.readNumber(e);break;case n:i=this.readBigInt(e);break;case o:i=this.readString(e);break;case l:i=this.readTypedArray(e);break;case d:i=this.readArrayBuffer(e);break;case f:i=this.readDate(e);break;case p:i=this.readError(e);break;case _:i=this.readRegExp();break;case m:i=this.readBinary(e);break;case y:i=this.readSpecial(e);break;case w:i=this.readExtension(e);break;default:throw new Error("Unknown type: 0x"+e.toString(16))}"object"!=typeof i||null==i||g||this.deserializeRefs.push(i)}return i}fillArray(e,t){switch(t){case H:break;case W:var i=this.readVarint();for(let t=0;t<i;t++)e[t]=this.readValue();break;case G:var r=this.readVarint(),s=this.readVarint();e.length=r;for(let t=0;t<s;t++)e[this.readVarint()]=this.readValue();break;case Q:case Y:case X:case J:case Z:r=this.readPackedArrayData(t),e.push(...r)}}fillObject(e,t){if(t!=ee)switch(t){case ie:case te:this.fillSimpleObject(e);break;case se:this.fillObjectWithDescriptors(e);break;case ae:this.fillObjectWithMethods(e);break;case re:this.fillConstructorObject(e)}}fillSimpleObject(e){var t=this.readVarint();for(let i=0;i<t;i++)e[this.readValue()]=this.readValue()}fillObjectWithDescriptors(e){var t=this.readVarint();for(let n=0;n<t;n++){var i=this.readValue(),r={enumerable:!!(1&(a=this.readU8())),writable:!!(2&a),configurable:!!(4&a)},s=!!(8&a),a=!!(16&a);s||a?(s&&(r.get=this.readValue()),a&&(r.set=this.readValue())):r.value=this.readValue(),Object.defineProperty(e,i,r)}}fillObjectWithMethods(e){var t=this.readVarint();for(let s=0;s<t;s++){var i=this.readValue();if(this.readU8())if(this.options.serializeFunctions){var r=this.readValue();this.readValue();try{e[i]=new Function("return "+r)()}catch(t){e[i]=function(){throw new Error("Function deserialization failed")}}}else this.readU8()===Ke&&(e[i]=function(){throw new Error("Function not serialized")});else e[i]=this.readValue()}}fillConstructorObject(e){var t=this.readValue(),i=this.readVarint();for(let t=0;t<i;t++)e[this.readValue()]=this.readValue();Object.defineProperty(e,"__constructorName",{value:t,enumerable:!1,writable:!1,configurable:!0})}fillCollection(e,t){var i=this.readVarint();switch(t){case be:for(let t=0;t<i;t++){var r=this.readValue(),s=this.readValue();e.set(r,s)}break;case Ae:for(let t=0;t<i;t++)e.add(this.readValue())}}readPrimitive(e){switch(e){case g:return null;case v:return;case b:return!1;case A:return!0;default:throw new Error("Unknown primitive: 0x"+e.toString(16))}}readNumber(e){switch(e){case x:return this.view.getInt8(this.pos++);case S:return this.readI16();case k:return this.readI32();case E:return this.readU32();case z:return this.readF32();case U:return this.readF64();case I:return NaN;case D:return 1/0;case M:return-1/0;case B:return-0;case C:var t=this.readVarint();return this.readU8()?-t:t;default:throw new Error("Unknown number type: 0x"+e.toString(16))}}readBigInt(e){switch(e){case V:case L:return this.readBigInt64();case T:case O:return this.readLargeBigInt(e==O);default:throw new Error("Unknown BigInt type: 0x"+e.toString(16))}}readLargeBigInt(e){var t=this.readVarint(),i=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t;let r="";for(let e=i.length-1;0<=e;e--)r+=i[e].toString(16).padStart(2,"0");return t=BigInt("0x"+r),e?-t:t}readString(e){if(e==P)return"";let t,i;switch(e){case F:case $:case j:case K:t=this.readU8();break;default:t=this.readVarint()}if(this.ensureBytes(t),e==F||e==$||e==R){i="";for(let e=0;e<t;e++)i+=String.fromCharCode(this.readU8())}else e=this.buffer.subarray(this.pos,this.pos+t),this.pos+=t,i=this.decoder.decode(e);return this.deserializeStrings.push(i),i}readPackedArrayData(e){var t=this.readVarint(),i=new Array(t),r=qe[e];if(!r)throw new Error("Unknown packed array type: 0x"+e.toString(16));switch(this.alignPos(Math.min(r,8)),this.ensureBytes(t*r),e){case Q:for(let e=0;e<t;e++)i[e]=this.view.getInt8(this.pos++);break;case Y:for(let e=0;e<t;e++)i[e]=this.view.getInt16(this.pos,!0),this.pos+=2;break;case X:for(let e=0;e<t;e++)i[e]=this.view.getInt32(this.pos,!0),this.pos+=4;break;case J:for(let e=0;e<t;e++)i[e]=this.view.getFloat32(this.pos,!0),this.pos+=4;break;case Z:for(let e=0;e<t;e++)i[e]=this.view.getFloat64(this.pos,!0),this.pos+=8}return i}readTypedArray(e){if(this.readU8()){var t=this.readVarint(),i=this.readVarint(),r=this.readVarint();if(t>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return t=this.deserializeBuffers[t],this.createTypedArray(e,t,i,r)}this.readVarint();var s=this.readVarint();t=qe[e]||1;if(e!=_e&&e!=me)return i=s*t,this.alignPos(t),this.ensureBytes(i),r=this.buffer.subarray(this.pos,this.pos+i),this.pos+=i,t=new ArrayBuffer(i),new Uint8Array(t).set(r),this.deserializeBuffers.push(t),this.createTypedArray(e,t,0,s);this.alignPos(8);var a=[];for(let e=0;e<s;e++)a.push(this.readBigInt64());return new(e==_e?BigInt64Array:BigUint64Array)(a)}createTypedArray(e,t,i,r){var s={[ne]:Uint8Array,[oe]:Int8Array,[he]:Uint8ClampedArray,[ce]:Uint16Array,[le]:Int16Array,[de]:Uint32Array,[ue]:Int32Array,[fe]:Float32Array,[pe]:Float64Array,[_e]:BigInt64Array,[me]:BigUint64Array,[ye]:DataView}[e];if(s)return new s(t,i,r);throw new Error("Unknown typed array type: 0x"+e.toString(16))}readArrayBuffer(e){var t=this.readVarint(),i=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t,t=i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength);return this.deserializeBuffers.push(t),t}readDate(e){switch(e){case xe:return new Date(this.readF64());case Se:return new Date(NaN);default:throw new Error("Unknown date type: 0x"+e.toString(16))}}readError(e){var t=this.readValue(),i=this.readValue();let r;var s={[ke]:Error,[Ee]:EvalError,[ze]:RangeError,[Ue]:ReferenceError,[Ie]:SyntaxError,[De]:TypeError,[Me]:URIError}[e]||Error;if(e==Be){var a=this.readVarint(),n=[];for(let e=0;e<a;e++)n.push(this.readValue());r=new AggregateError(n,t)}else r=new s(t);return i&&(r.stack=i),r}readRegExp(){var e=this.readValue(),t=this.readValue();return new RegExp(e,t)}readBinary(e){return{_type:"Binary",size:this.readVarint(),typeStr:this.readVarint()}}readSpecial(e){switch(e){case Fe:var t=this.readValue();return Symbol(t);case je:return Symbol();case $e:return t=this.readValue(),Symbol.for(t);case Re:return t=this.readValue(),We.get(t)||Symbol(t);default:throw new Error("Unknown special type: 0x"+e.toString(16))}}readExtension(e){if(e!==Ke)throw new Error("Unknown extension type: 0x"+e.toString(16));return function(){throw new Error("Function not serialized")}}readU8(){return this.ensureBytes(1),this.buffer[this.pos++]}readI16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getInt16(this.pos,!0);return this.pos+=2,e}readU16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}readI32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}readU32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}readF32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getFloat32(this.pos,!0);return this.pos+=4,e}readF64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getFloat64(this.pos,!0);return this.pos+=8,e}readBigInt64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getBigInt64(this.pos,!0);return this.pos+=8,e}readVarint(){let e=0,t=0;for(var i;this.ensureBytes(1),e|=(127&(i=this.buffer[this.pos++]))<<t,t+=7,128&i;);return e>>>0}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}ensureBytes(e){if(this.pos+e>this.buffer.length)throw new Error(`Buffer underflow: need ${e}, available `+(this.buffer.length-this.pos))}}({compression:!0,deduplication:!0,shareArrayBuffers:!0,simdOptimization:!0,detectCircular:!0}),rt=new tt.a;class st{constructor(e){this._dbName=e,this._keyPrefix=`lacertadb_${e}_quickstore_`,this._indexKey=this._keyPrefix+"index"}_readIndex(){var e=localStorage.getItem(this._indexKey);if(!e)return[];try{var t=rt.decode(e);return it.deserialize(t)}catch{return[]}}_writeIndex(e){e=it.serialize(e),e=rt.encode(e),localStorage.setItem(this._indexKey,e)}add(e,t){var i=this._keyPrefix+"data_"+e;try{var r=it.serialize(t),s=rt.encode(r),a=(localStorage.setItem(i,s),this._readIndex());return a.includes(e)||(a.push(e),this._writeIndex(a)),!0}catch(e){if("QuotaExceededError"===e.name)throw new ht("QuickStore quota exceeded","QUOTA_EXCEEDED",e);return!1}}get(e){if(e=this._keyPrefix+"data_"+e,e=localStorage.getItem(e))try{var t=rt.decode(e);return it.deserialize(t)}catch(e){console.error("Failed to parse QuickStore data:",e)}return null}update(e,t){return this.add(e,t)}delete(e){var t=this._keyPrefix+"data_"+e;localStorage.removeItem(t);let i=this._readIndex();t=i.length,(i=i.filter(t=>t!==e)).length<t&&this._writeIndex(i)}getAll(){return this._readIndex().map(e=>{var t=this.get(e);return t?{_id:e,...t}:null}).filter(Boolean)}query(e={}){var t=this.getAll();return 0===Object.keys(e).length?t:t.filter(t=>zt.evaluate(t,e))}clear(){var e;for(e of this._readIndex())localStorage.removeItem(this._keyPrefix+"data_"+e);localStorage.removeItem(this._indexKey)}get size(){return this._readIndex().length}}class at{constructor(){this._connections=new Map,this._refCounts=new Map}async getConnection(e,t=1,i){var r,s=e+"_v"+t;return this._connections.has(s)?(this._refCounts.set(s,(this._refCounts.get(s)||0)+1),this._connections.get(s)):(r=await new Promise((r,s)=>{let a=indexedDB.open(e,t);a.onerror=()=>s(new ht("Failed to open database","DATABASE_OPEN_FAILED",a.error)),a.onsuccess=()=>r(a.result),a.onupgradeneeded=e=>{i&&i(e.target.result,e.oldVersion,e.newVersion)}}),this._connections.set(s,r),this._refCounts.set(s,1),r)}releaseConnection(e,t=1){e=e+"_v"+t;1<(t=this._refCounts.get(e)||0)?this._refCounts.set(e,t-1):(t=this._connections.get(e))&&(t.close(),this._connections.delete(e),this._refCounts.delete(e))}closeAll(){for(var e of this._connections.values())e.close();this._connections.clear(),this._refCounts.clear()}}let nt=new at;class ot{constructor(){this._queue=[],this._locked=!1}acquire(){return new Promise(e=>{this._queue.push(e),this._dispatch()})}release(){this._locked=!1,this._dispatch()}async runExclusive(e){var t=await this.acquire();try{return await e()}finally{t()}}_dispatch(){this._locked||0===this._queue.length||(this._locked=!0,this._queue.shift()(()=>this.release()))}}class ht extends Error{constructor(e,t,i){super(e),this.name="LacertaDBError",this.code=t,this.originalError=i||null,this.timestamp=(new Date).toISOString()}}class ct{constructor(e=100,t=null){this._maxSize=e,this._ttl=t,this._cache=new Map,this._accessOrder=[],this._timestamps=new Map}get(e){if(!this._cache.has(e))return null;if(this._ttl){var t=this._timestamps.get(e);if(Date.now()-t>this._ttl)return this.delete(e),null}return-1<(t=this._accessOrder.indexOf(e))&&this._accessOrder.splice(t,1),this._accessOrder.push(e),this._cache.get(e)}set(e,t){var i;for(this._cache.has(e)&&-1<(i=this._accessOrder.indexOf(e))&&this._accessOrder.splice(i,1),this._cache.set(e,t),this._accessOrder.push(e),this._timestamps.set(e,Date.now());this._cache.size>this._maxSize;){var r=this._accessOrder.shift();this._cache.delete(r),this._timestamps.delete(r)}}delete(e){var t=this._accessOrder.indexOf(e);return-1<t&&this._accessOrder.splice(t,1),this._timestamps.delete(e),this._cache.delete(e)}clear(){this._cache.clear(),this._accessOrder=[],this._timestamps.clear()}has(e){if(this._ttl&&this._cache.has(e)){var t=this._timestamps.get(e);if(Date.now()-t>this._ttl)return this.delete(e),!1}return this._cache.has(e)}get size(){return this._cache.size}}class lt{constructor(e=100,t=null){this._maxSize=e,this._ttl=t,this._cache=new Map,this._frequencies=new Map,this._timestamps=new Map}get(e){if(!this._cache.has(e))return null;if(this._ttl){var t=this._timestamps.get(e);if(Date.now()-t>this._ttl)return this.delete(e),null}return this._frequencies.set(e,(this._frequencies.get(e)||0)+1),this._cache.get(e)}set(e,t){if(this._cache.has(e))this._cache.set(e,t),this._frequencies.set(e,(this._frequencies.get(e)||0)+1);else{if(this._cache.size>=this._maxSize){let e=1/0,t=null;for(var[i,r]of this._frequencies)r<e&&(e=r,t=i);t&&this.delete(t)}this._cache.set(e,t),this._frequencies.set(e,1),this._timestamps.set(e,Date.now())}}delete(e){return this._frequencies.delete(e),this._timestamps.delete(e),this._cache.delete(e)}clear(){this._cache.clear(),this._frequencies.clear(),this._timestamps.clear()}has(e){return this._cache.has(e)}get size(){return this._cache.size}}class dt{constructor(e=6e4){this._ttl=e,this._cache=new Map,this._timers=new Map}get(e){return this._cache.get(e)||null}set(e,t){this._timers.has(e)&&clearTimeout(this._timers.get(e)),this._cache.set(e,t),t=setTimeout(()=>{this.delete(e)},this._ttl),this._timers.set(e,t)}delete(e){return this._timers.has(e)&&(clearTimeout(this._timers.get(e)),this._timers.delete(e)),this._cache.delete(e)}clear(){for(var e of this._timers.values())clearTimeout(e);this._timers.clear(),this._cache.clear()}has(e){return this._cache.has(e)}get size(){return this._cache.size}}class ut{constructor(e={}){this._type=e.type||"lru",this._maxSize=e.maxSize||100,this._ttl=e.ttl||null,this._enabled=!1!==e.enabled,this._cache=null}get cache(){return this._cache||(this._cache=this._createCache()),this._cache}_createCache(){switch(this._type){case"lru":return new ct(this._maxSize,this._ttl);case"lfu":return new lt(this._maxSize,this._ttl);case"ttl":return new dt(this._ttl);case"none":return null;default:return new ct(this._maxSize,this._ttl)}}get(e){return this._enabled&&this.cache?this.cache.get(e):null}set(e,t){this._enabled&&this.cache&&this.cache.set(e,t)}delete(e){this._enabled&&this.cache&&this.cache.delete(e)}clear(){this._enabled&&this.cache&&this.cache.clear()}updateStrategy(e){Object.assign(this,e),this._cache=null}}class ft{async compress(e){if(!(e instanceof Uint8Array))throw new TypeError("Input must be Uint8Array");try{var t=new Response(e).body.pipeThrough(new CompressionStream("deflate")),i=await new Response(t).arrayBuffer();return new Uint8Array(i)}catch(t){return console.warn("CompressionStream not available, returning uncompressed data"),e}}async decompress(e){if(!(e instanceof Uint8Array))throw new TypeError("Input must be Uint8Array");try{var t=new Response(e).body.pipeThrough(new DecompressionStream("deflate")),i=await new Response(t).arrayBuffer();return new Uint8Array(i)}catch(t){return console.warn("DecompressionStream failed, returning original data"),e}}compressSync(e){if(e instanceof Uint8Array)return e;throw new TypeError("Input must be Uint8Array")}decompressSync(e){if(e instanceof Uint8Array)return e;throw new TypeError("Input must be Uint8Array")}}class pt{async encrypt(e,t){var i=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(16)),s=crypto.getRandomValues(new Uint8Array(12));i=i.encode(t),t=await crypto.subtle.importKey("raw",i,"PBKDF2",!1,["deriveBits","deriveKey"]),i=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},t,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]),t=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},i,e);return(i=new Uint8Array(r.length+s.length+t.byteLength)).set(r,0),i.set(s,r.length),i.set(new Uint8Array(t),r.length+s.length),i}async decrypt(e,t){var i=new TextEncoder,r=e.slice(0,16),s=e.slice(16,28);e=e.slice(28),i=i.encode(t),t=await crypto.subtle.importKey("raw",i,"PBKDF2",!1,["deriveBits","deriveKey"]),i=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},t,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]),r=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},i,e);return new Uint8Array(r)}}class _t{constructor(e={}){this._masterKey=null,this._salt=null,this._iterations=e.iterations||1e5,this._hashAlgorithm=e.hashAlgorithm||"SHA-256",this._keyLength=e.keyLength||256,this._saltLength=e.saltLength||32,this._initialized=!1,this._encKey=null,this._hmacKey=null}get initialized(){return this._initialized}async initialize(e,t=null){if(this._initialized)throw new Error("Database encryption already initialized");return this._salt=t||crypto.getRandomValues(new Uint8Array(this._saltLength)),t=(new TextEncoder).encode(e),e=await crypto.subtle.importKey("raw",t,"PBKDF2",!1,["deriveBits","deriveKey"]),t=await crypto.subtle.deriveBits({name:"PBKDF2",salt:this._salt,iterations:this._iterations,hash:this._hashAlgorithm},e,512),t=(e=new Uint8Array(t)).slice(0,32),e=e.slice(32,64),this._encKey=await crypto.subtle.importKey("raw",t,{name:"AES-GCM",length:this._keyLength},!1,["encrypt","decrypt"]),this._hmacKey=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]),this._initialized=!0,rt.encode(this._salt)}async encrypt(e){if(!this._initialized)throw new Error("Database encryption not initialized");let t;t="string"==typeof e?(new TextEncoder).encode(e):e instanceof Uint8Array?e:it.serialize(e);e=crypto.getRandomValues(new Uint8Array(12));var i=await crypto.subtle.encrypt({name:"AES-GCM",iv:e},this._encKey,t),r=((r=new Uint8Array(e.length+i.byteLength)).set(e,0),r.set(new Uint8Array(i),e.length),await crypto.subtle.sign("HMAC",this._hmacKey,r)),s=new Uint8Array(e.length+i.byteLength+32);return s.set(e,0),s.set(new Uint8Array(i),e.length),s.set(new Uint8Array(r),e.length+i.byteLength),s}async decrypt(e){if(!this._initialized)throw new Error("Database encryption not initialized");if(!(e instanceof Uint8Array))throw new TypeError("Encrypted data must be Uint8Array");var t=e.slice(0,12),i=e.slice(-32),r=(e=e.slice(12,-32),new Uint8Array(t.length+e.length));if(i=(r.set(t,0),r.set(e,t.length),await crypto.subtle.verify("HMAC",this._hmacKey,i,r)))return r=await crypto.subtle.decrypt({name:"AES-GCM",iv:t},this._encKey,e),new Uint8Array(r);throw new Error("HMAC verification failed - data may be tampered")}async encryptPrivateKey(e,t=""){if(!this._initialized)throw new Error("Database encryption not initialized");t=(r=new TextEncoder).encode(t);let i;i="string"==typeof e?r.encode(e):e instanceof Uint8Array?e:it.serialize(e);var r=crypto.getRandomValues(new Uint8Array(16)),s=(e=await crypto.subtle.encrypt({name:"AES-GCM",iv:r,additionalData:t,tagLength:128},this._encKey,i),new Uint32Array([t.length])),a=new Uint8Array(20+t.length+e.byteLength);return a.set(r,0),a.set(new Uint8Array(s.buffer),16),a.set(t,20),a.set(new Uint8Array(e),20+t.length),rt.encode(a)}async decryptPrivateKey(e,t=""){if(!this._initialized)throw new Error("Database encryption not initialized");var i=(e=rt.decode(e)).slice(0,16),r=e.slice(16,20),s=(r=new Uint32Array(r.buffer)[0],e.slice(20,20+r));e=e.slice(20+r),r=(new TextEncoder).encode(t);if(this._arrayEquals(s,r))return t=await crypto.subtle.decrypt({name:"AES-GCM",iv:i,additionalData:s,tagLength:128},this._encKey,e),(new TextDecoder).decode(t);throw new Error("Additional authentication data mismatch")}static generateSecurePIN(e=6){return e=new Uint8Array(e),crypto.getRandomValues(e),Array.from(e).map(e=>(e%10).toString()).join("")}destroy(){this._masterKey=null,this._encKey=null,this._hmacKey=null,this._salt=null,this._initialized=!1}_arrayEquals(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}async changePin(e,t){var i,r;if(this._initialized)return i=this._salt,r={iterations:this._iterations,hashAlgorithm:this._hashAlgorithm,keyLength:this._keyLength,saltLength:this._saltLength},this.destroy(),Object.assign(this,r),await this.initialize(e,i),this.destroy(),Object.assign(this,r),await this.initialize(t);throw new Error("Database encryption not initialized")}exportMetadata(){if(this._salt)return{salt:rt.encode(this._salt),iterations:this._iterations,algorithm:"AES-GCM-256",kdf:"PBKDF2",hashAlgorithm:this._hashAlgorithm,keyLength:this._keyLength,saltLength:this._saltLength};throw new Error("No encryption metadata to export")}importMetadata(e){if(e.salt)return this._salt=rt.decode(e.salt),this._iterations=e.iterations||1e5,this._hashAlgorithm=e.hashAlgorithm||"SHA-256",this._keyLength=e.keyLength||256,this._saltLength=e.saltLength||32,!0;throw new Error("Invalid encryption metadata")}}class mt{constructor(e,t){this.keys=new Array(2*e-1),this.values=new Array(2*e-1),this.children=new Array(2*e),this.n=0,this.leaf=t,this.order=e}search(e){let t=0;for(;t<this.n&&e>this.keys[t];)t++;return t<this.n&&e===this.keys[t]?this.values[t]:!this.leaf&&this.children[t]?this.children[t].search(e):null}rangeSearch(e,t,i){let r=0;for(;r<this.n;)!this.leaf&&this.children[r]&&this.children[r].rangeSearch(e,t,i),this.keys[r]>=e&&this.keys[r]<=t&&this.values[r]&&this.values[r].forEach(e=>i.push(e)),r++;!this.leaf&&this.children[r]&&this.children[r].rangeSearch(e,t,i)}insertNonFull(e,t){let i=this.n-1;if(this.leaf){for(;0<=i&&this.keys[i]>e;)this.keys[i+1]=this.keys[i],this.values[i+1]=this.values[i],i--;0<=i&&this.keys[i]===e?(this.values[i]||(this.values[i]=new Set),this.values[i].add(t)):(this.keys[i+1]=e,this.values[i+1]=new Set([t]),this.n++)}else{for(;0<=i&&this.keys[i]>e;)i--;0<=i&&this.keys[i]===e?(this.values[i]||(this.values[i]=new Set),this.values[i].add(t)):(i++,this.children[i]&&this.children[i].n===2*this.order-1&&(this.splitChild(i,this.children[i]),this.keys[i]<e)&&i++,this.children[i]&&this.children[i].insertNonFull(e,t))}}splitChild(e,t){var i=new mt(this.order,t.leaf);i.n=this.order-1;for(let e=0;e<this.order-1;e++)i.keys[e]=t.keys[e+this.order],i.values[e]=t.values[e+this.order];if(!t.leaf)for(let e=0;e<this.order;e++)i.children[e]=t.children[e+this.order];t.n=this.order-1;for(let t=this.n;t>=e+1;t--)this.children[t+1]=this.children[t];this.children[e+1]=i;for(let t=this.n-1;t>=e;t--)this.keys[t+1]=this.keys[t],this.values[t+1]=this.values[t];this.keys[e]=t.keys[this.order-1],this.values[e]=t.values[this.order-1],this.n++}remove(e,t){let i=0;for(;i<this.n&&e>this.keys[i];)i++;if(i<this.n&&e===this.keys[i]){if(this.values[i]&&(this.values[i].delete(t),0===this.values[i].size)){for(let e=i;e<this.n-1;e++)this.keys[e]=this.keys[e+1],this.values[e]=this.values[e+1];this.n--}}else!this.leaf&&this.children[i]&&this.children[i].remove(e,t)}verify(){var e,t=[];for(let e=1;e<this.n;e++)this.keys[e]<=this.keys[e-1]&&t.push("Key order violation at index "+e);for(let e=0;e<this.n;e++)!this.values[e]||this.values[e]instanceof Set||(this.values[e]=new Set(Array.isArray(this.values[e])?this.values[e]:[this.values[e]]),t.push("Fixed non-Set value at index "+e));if(!this.leaf)for(let i=0;i<=this.n;i++)this.children[i]&&(e=this.children[i].verify(),t.push(...e));return t}}class yt{constructor(e=4){this._root=null,this._order=e,this._size=0,this._lastVerification=Date.now(),this._verificationInterval=6e4}insert(e,t){if(Date.now()-this._lastVerification>this._verificationInterval&&this.verify(),this._root)if(this._root.n===2*this._order-1){var i=new mt(this._order,!1);i.children[0]=this._root,i.splitChild(0,this._root);let r=0;i.keys[0]<e&&r++,i.children[r].insertNonFull(e,t),this._root=i}else this._root.insertNonFull(e,t);else this._root=new mt(this._order,!0),this._root.keys[0]=e,this._root.values[0]=new Set([t]),this._root.n=1;this._size++}find(e){return this._root&&(e=this._root.search(e))?Array.from(e):[]}contains(e){return!!this._root&&null!==this._root.search(e)}range(e,t){return this._root?(this._root.rangeSearch(e,t,e=[]),e):[]}rangeFrom(e){return this._root?(this._root.rangeSearch(e,1/0,e=[]),e):[]}rangeTo(e){return this._root?(this._root.rangeSearch(-1/0,e,e=[]),e):[]}remove(e,t){this._root&&(this._root.remove(e,t),0===this._root.n&&!this._root.leaf&&this._root.children[0]&&(this._root=this._root.children[0]),this._size--)}verify(){var e;return this._lastVerification=Date.now(),this._root?(0<(e=this._root.verify()).length&&console.warn("BTree index issues detected and fixed:",e),{healthy:0===e.length,issues:e,repaired:e.length}):{healthy:!0,issues:[]}}get size(){return this._size}}class wt{constructor(){this._invertedIndex=new Map,this._documentTexts=new Map}addDocument(e,t){var i;if("string"==typeof e)for(i of(this._documentTexts.set(t,e),this._tokenize(e)))this._invertedIndex.has(i)||this._invertedIndex.set(i,new Set),this._invertedIndex.get(i).add(t)}removeDocument(e){var t,i=this._documentTexts.get(e);if(i){for(t of this._tokenize(i)){var r=this._invertedIndex.get(t);r&&(r.delete(e),0===r.size)&&this._invertedIndex.delete(t)}this._documentTexts.delete(e)}}updateDocument(e,t){this.removeDocument(e),this.addDocument(t,e)}search(e){var t;if(0===(e=this._tokenize(e)).length)return[];let i=null;for(t of e){let e=this._invertedIndex.get(t);if(!e||0===e.size)return[];i=null===i?new Set(e):new Set([...i].filter(t=>e.has(t)))}return i?Array.from(i):[]}_tokenize(e){return e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(e=>2<e.length)}get size(){return this._documentTexts.size}}class gt{constructor(){this._points=new Map}addPoint(e,t){e&&"number"==typeof e.lat&&"number"==typeof e.lng&&this._points.set(t,e)}removePoint(e){this._points.delete(e)}updatePoint(e,t){this._points.set(e,t)}findNear(e,t){var i,r,s=[];for([i,r]of this._points){var a=this._haversine(e,r);a<=t&&s.push({docId:i,distance:a})}return s.sort((e,t)=>e.distance-t.distance).map(e=>e.docId)}findWithin(e){var t,i,r=[];for([t,i]of this._points)this._isWithinBounds(i,e)&&r.push(t);return r}_haversine(e,t){var i=this._toRad(t.lat-e.lat),r=this._toRad(t.lng-e.lng);i=Math.sin(i/2)*Math.sin(i/2)+Math.cos(this._toRad(e.lat))*Math.cos(this._toRad(t.lat))*Math.sin(r/2)*Math.sin(r/2);return 2*Math.atan2(Math.sqrt(i),Math.sqrt(1-i))*6371}_toRad(e){return e*(Math.PI/180)}_isWithinBounds(e,t){return e.lat>=t.minLat&&e.lat<=t.maxLat&&e.lng>=t.minLng&&e.lng<=t.maxLng}get size(){return this._points.size}}class vt{constructor(e){this._collection=e,this._indexes=new Map,this._indexData=new Map,this._indexQueue=[],this._processing=!1}get indexes(){return this._indexes}async createIndex(e,t={}){var i=t.name||e;if(this._indexes.has(i))throw new Error(`Index '${i}' already exists`);return e={fieldPath:e,unique:t.unique||!1,sparse:t.sparse||!1,type:t.type||"btree",collation:t.collation||null,createdAt:Date.now()},this._indexes.set(i,e),await this.rebuildIndex(i),this._saveIndexMetadata(),i}async rebuildIndex(e){var t=this._indexes.get(e);if(!t)throw new Error(`Index '${e}' not found`);var i,r=this._createIndexStructure(t.type);for(i of await this._collection.getAll()){var s=this._getFieldValue(i,t.fieldPath);if(!t.sparse||null!=s){if(t.unique&&r.has&&r.has(s))throw new Error(`Unique constraint violation on index '${e}'`);this._addToIndex(r,s,i._id,t.type)}}this._indexData.set(e,r)}_createIndexStructure(e){switch(e){case"btree":return new yt;case"hash":return new Map;case"text":return new wt;case"geo":return new gt;default:return new Map}}_addToIndex(e,t,i,r){switch(r){case"btree":e.insert(t,i);break;case"hash":e.has(t)||e.set(t,new Set),e.get(t).add(i);break;case"text":e.addDocument(t,i);break;case"geo":e.addPoint(t,i)}}async updateIndexForDocument(e,t,i){for(var[r,s]of this._indexes){var a=this._indexData.get(r);if(a){var n,o=t?this._getFieldValue(t,s.fieldPath):void 0,h=i?this._getFieldValue(i,s.fieldPath):void 0;if(o!==h)switch(s.type){case"btree":void 0!==o&&a.remove(o,e),void 0!==h&&a.insert(h,e);break;case"hash":void 0!==o&&(n=a.get(o))&&(n.delete(e),0===n.size)&&a.delete(o),void 0!==h&&(a.has(h)||a.set(h,new Set),a.get(h).add(e));break;case"text":(o||h)&&a.updateDocument(e,h||"");break;case"geo":o&&a.removePoint(e),h&&a.addPoint(h,e)}}}}async query(e,t){var i=this._indexes.get(e),r=this._indexData.get(e);if(i&&r)return this._queryIndex(r,t,i.type);throw new Error(`Index '${e}' not found`)}_queryIndex(e,t,i){switch(i){case"btree":return this._queryBTree(e,t);case"hash":return this._queryHash(e,t);case"text":return this._queryText(e,t);case"geo":return this._queryGeo(e,t);default:return[]}}_queryBTree(e,t){let i=new Set;return void 0!==t.$eq&&e.find(t.$eq).forEach(e=>i.add(e)),void 0!==t.$gte&&void 0!==t.$lte?e.range(t.$gte,t.$lte).forEach(e=>i.add(e)):void 0!==t.$gte?e.rangeFrom(t.$gte).forEach(e=>i.add(e)):void 0!==t.$gt?e.rangeFrom(t.$gt).forEach(e=>{e!==t.$gt&&i.add(e)}):void 0!==t.$lte?e.rangeTo(t.$lte).forEach(e=>i.add(e)):void 0!==t.$lt&&e.rangeTo(t.$lt).forEach(e=>{e!==t.$lt&&i.add(e)}),Array.from(i)}_queryHash(e,t){var i;if(void 0!==t.$eq)return(i=e.get(t.$eq))?Array.from(i):[];if(void 0===t.$in)return[];{let i=new Set;for(var r of t.$in)(r=e.get(r))&&r.forEach(e=>i.add(e));return Array.from(i)}}_queryText(e,t){return t.$search?e.search(t.$search):[]}_queryGeo(e,t){return t.$near?e.findNear(t.$near.coordinates,t.$near.maxDistance||1e3):t.$within?e.findWithin(t.$within):[]}dropIndex(e){this._indexes.delete(e),this._indexData.delete(e),this._saveIndexMetadata()}_getFieldValue(e,t){var i;let r=e;for(i of t.split(".")){if(null==r)return;r=r[i]}return r}_saveIndexMetadata(){var e={indexes:Array.from(this._indexes.entries()).map(([e,t])=>({name:e,...t}))},t=`lacertadb_${this._collection.database.name}_${this._collection.name}_indexes`;e=it.serialize(e),e=rt.encode(e);localStorage.setItem(t,e)}async loadIndexMetadata(){var e=`lacertadb_${this._collection.database.name}_${this._collection.name}_indexes`;if(e=localStorage.getItem(e))try{var t,i,r=rt.decode(e);for(t of it.deserialize(r).indexes){let{name:e,...i}=t;this._indexes.set(e,i)}for(i of this._indexes.keys())await this.rebuildIndex(i)}catch(e){console.error("Failed to load index metadata:",e)}}getIndexStats(){var e,t,i={};for([e,t]of this._indexes){var r=this._indexData.get(e);i[e]={...t,size:r&&(r.size||r.length)||0,memoryUsage:this._estimateMemoryUsage(r)}}return i}_estimateMemoryUsage(e){return e?e instanceof Map?100*e.size:e instanceof yt?120*e.size:0:0}async verifyIndexes(){var e,t,i={};for([e,t]of this._indexes){var r=this._indexData.get(e);r?r.verify?(r=r.verify(),i[e]=r):i[e]={status:"ok"}:(i[e]={status:"missing",rebuilt:!0},await this.rebuildIndex(e))}return i}}class bt{async saveAttachments(e,t,i,r){try{var s,a,n=[],o=await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:!0})).getDirectoryHandle(t,{create:!0})).getDirectoryHandle(i,{create:!0});for([s,a]of r.entries()){var h=s+"_"+(a.name||"file"),c=await(await o.getFileHandle(h,{create:!0})).createWritable();let r;if(a.data instanceof Uint8Array)r=a.data;else if(a.data instanceof ArrayBuffer)r=new Uint8Array(a.data);else{if(!(a.data instanceof Blob))throw new TypeError("Unsupported attachment data type");r=new Uint8Array(await a.data.arrayBuffer())}var l=new Blob([r],{type:a.type||"application/octet-stream"}),d=(await c.write(l),await c.close(),`/${e}/${t}/${i}/`+h);n.push({path:d,name:a.name,type:a.type,size:r.byteLength,originalName:a.originalName||a.name})}return n}catch(r){throw new ht("Failed to save attachments","ATTACHMENT_SAVE_FAILED",r)}}async getAttachments(e){var t,i=[],r=await navigator.storage.getDirectory();for(t of e)try{var s=t.path.split("/").filter(e=>e);let e=r;for(let t=0;t<s.length-1;t++)e=await e.getDirectoryHandle(s[t]);var a=await(await(await e.getFileHandle(s[s.length-1])).getFile()).arrayBuffer();i.push({name:t.originalName||t.name,type:t.type,data:new Uint8Array(a),size:t.size})}catch(e){console.error("Failed to get attachment: "+t.path,e)}return i}async deleteAttachments(e,t,i){try{await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e)).getDirectoryHandle(t)).removeEntry(i,{recursive:!0})}catch(e){"NotFoundError"!==e.name&&console.error(`Failed to delete attachments for ${i}:`,e)}}static async prepareAttachment(e,t){let i;if(e instanceof File||e instanceof Blob){var r=await e.arrayBuffer();i=new Uint8Array(r)}else if(e instanceof ArrayBuffer)i=new Uint8Array(e);else{if(!(e instanceof Uint8Array))throw new TypeError("Unsupported file type for attachment");i=e}return{name:t||e.name||"unnamed",type:e.type||"application/octet-stream",data:i,originalName:e.name||t}}}class At{constructor(){this._mutex=new ot}async performTransaction(e,t,i,r,s=3){return this._mutex.runExclusive(async()=>{let a;for(let n=0;n<s;n++)try{return await new Promise((s,a)=>{let n,o=e.transaction(t,i);o.oncomplete=()=>s(n),o.onerror=()=>a(o.error),o.onabort=()=>a(new Error("Transaction aborted"));try{var h=r(o);h instanceof Promise?h.then(e=>{n=e}).catch(a):n=h}catch(s){a(s)}})}catch(e){a=e,n<s-1&&await new Promise(e=>setTimeout(e,2**n*100))}throw new ht("Transaction failed after retries","TRANSACTION_FAILED",a)})}_promisifyRequest(e){return new Promise((t,i)=>{let r=e();r.onsuccess=()=>t(r.result),r.onerror=()=>i(r.error)})}add(e,t,i,r){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==r?s.add(i,r):s.add(i))})}put(e,t,i,r){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==r?s.put(i,r):s.put(i))})}get(e,t,i){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).get(i)))}getAll(e,t,i,r){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).getAll(i,r)))}delete(e,t,i){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).delete(i)))}clear(e,t){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).clear()))}count(e,t,i){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).count(i)))}async batchOperation(e,t){return this.performTransaction(e,["documents"],"readwrite",async e=>{let i=e.objectStore("documents");var r=[];for(let s of t)try{let e;switch(s.type){case"add":e=await this._promisifyRequest(()=>i.add(s.data));break;case"put":e=await this._promisifyRequest(()=>i.put(s.data));break;case"delete":e=await this._promisifyRequest(()=>i.delete(s.key));break;default:throw new Error("Unknown operation type: "+s.type)}r.push({success:!0,result:e})}catch(e){r.push({success:!1,error:e.message})}return r})}}class xt{constructor(e={},t={}){this._id=e._id||this._generateId(),this._created=e._created||Date.now(),this._modified=e._modified||Date.now(),this._permanent=e._permanent||t.permanent||!1,this._encrypted=!1,this._compressed=e._compressed||t.compressed||!1,this._attachments=e._attachments||[],this._data=null,this._packedData=e.packedData||null,this._compression=new ft,e.data&&(this.data=e.data)}get data(){return this._data||{}}set data(e){this._data=e}_generateId(){return`doc_${Date.now()}_`+Math.random().toString(36).substring(2,11)}async pack(e=null){try{let t=it.serialize(this.data);return this._compressed&&(t=await this._compression.compress(t)),e&&(t=await e.encrypt(t),this._encrypted=!0),this._packedData=t}catch(e){throw new ht("Failed to pack document","PACK_FAILED",e)}}async unpack(e=null){try{let t=this._packedData;return this._encrypted&&e&&(t=await e.decrypt(t)),this._compressed&&(t=await this._compression.decompress(t)),this.data=it.deserialize(t),this.data}catch(e){throw new ht("Failed to unpack document","UNPACK_FAILED",e)}}packSync(){let e=it.serialize(this.data);return this._compressed&&(e=this._compression.compressSync(e)),this._packedData=e}unpackSync(){if(this._encrypted)throw new ht("Synchronous decryption not supported","SYNC_DECRYPT_NOT_SUPPORTED");let e=this._packedData;return this._compressed&&(e=this._compression.decompressSync(e)),this.data=it.deserialize(e),this.data}objectOutput(e=!1){var t={_id:this._id,_created:this._created,_modified:this._modified,_permanent:this._permanent,...this.data};return e&&0<this._attachments.length&&(t._attachments=this._attachments),t}databaseOutput(){return{_id:this._id,_created:this._created,_modified:this._modified,_permanent:this._permanent,_encrypted:this._encrypted,_compressed:this._compressed,_attachments:this._attachments,packedData:this._packedData}}}class St{constructor(e,t={}){this.name=e,this.sizeKB=t.sizeKB||0,this.length=t.length||0,this.createdAt=t.createdAt||Date.now(),this.modifiedAt=t.modifiedAt||Date.now(),this.documentSizes=t.documentSizes||{},this.documentModifiedAt=t.documentModifiedAt||{},this.documentPermanent=t.documentPermanent||{},this.documentAttachments=t.documentAttachments||{}}addDocument(e,t,i,r){this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),i&&(this.documentPermanent[e]=!0),0<r&&(this.documentAttachments[e]=r),this.sizeKB+=t,this.length++,this.modifiedAt=Date.now()}updateDocument(e,t,i,r){var s=this.documentSizes[e]||0;this.sizeKB=this.sizeKB-s+t,this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),i?this.documentPermanent[e]=!0:delete this.documentPermanent[e],0<r?this.documentAttachments[e]=r:delete this.documentAttachments[e],this.modifiedAt=Date.now()}removeDocument(e){var t=this.documentSizes[e]||0;this.documentSizes[e]&&(this.sizeKB-=t,this.length--),delete this.documentSizes[e],delete this.documentModifiedAt[e],delete this.documentPermanent[e],delete this.documentAttachments[e],this.modifiedAt=Date.now()}getOldestNonPermanentDocuments(e){return Object.entries(this.documentModifiedAt).filter(([e])=>!this.documentPermanent[e]).sort(([,e],[,t])=>e-t).slice(0,e).map(([e])=>e)}}class kt{constructor(e,t={}){this.name=e,this.collections=t.collections||{},this.totalSizeKB=t.totalSizeKB||0,this.totalLength=t.totalLength||0,this.modifiedAt=t.modifiedAt||Date.now()}static load(e){var t=localStorage.getItem(`lacertadb_${e}_metadata`);if(t)try{var i=rt.decode(t),r=it.deserialize(i);return new kt(e,r)}catch(e){console.error("Failed to load metadata:",e)}return new kt(e)}save(){var e=`lacertadb_${this.name}_metadata`;try{var t={collections:this.collections,totalSizeKB:this.totalSizeKB,totalLength:this.totalLength,modifiedAt:this.modifiedAt},i=it.serialize(t),r=rt.encode(i);localStorage.setItem(e,r)}catch(e){if("QuotaExceededError"===e.name)throw new ht("Storage quota exceeded for metadata","QUOTA_EXCEEDED",e);throw new ht("Failed to save metadata","METADATA_SAVE_FAILED",e)}}setCollection(e){this.collections[e.name]={sizeKB:e.sizeKB,length:e.length,createdAt:e.createdAt,modifiedAt:e.modifiedAt,documentSizes:e.documentSizes,documentModifiedAt:e.documentModifiedAt,documentPermanent:e.documentPermanent,documentAttachments:e.documentAttachments},this._recalculate(),this.save()}removeCollection(e){delete this.collections[e],this._recalculate(),this.save()}_recalculate(){for(var e in this.totalSizeKB=0,this.totalLength=0,this.collections)e=this.collections[e],this.totalSizeKB+=e.sizeKB,this.totalLength+=e.length;this.modifiedAt=Date.now()}}class Et{constructor(e,t={}){this.dbName=e,this.sizeLimitKB=null!=t.sizeLimitKB?t.sizeLimitKB:1/0,e=this.sizeLimitKB===1/0?1/0:.8*this.sizeLimitKB,this.bufferLimitKB=null!=t.bufferLimitKB?t.bufferLimitKB:e,this.freeSpaceEvery=this.sizeLimitKB===1/0?0:t.freeSpaceEvery||1e4}static load(e){var t=localStorage.getItem(`lacertadb_${e}_settings`);if(t)try{var i=rt.decode(t),r=it.deserialize(i);return new Et(e,r)}catch(e){console.error("Failed to load settings:",e)}return new Et(e)}save(){var e=`lacertadb_${this.dbName}_settings`,t={sizeLimitKB:this.sizeLimitKB,bufferLimitKB:this.bufferLimitKB,freeSpaceEvery:this.freeSpaceEvery};t=it.serialize(t),t=rt.encode(t);localStorage.setItem(e,t)}updateSettings(e){Object.assign(this,e),void 0!==e.sizeLimitKB&&void 0===e.bufferLimitKB&&(this.bufferLimitKB=this.sizeLimitKB===1/0?1/0:.8*this.sizeLimitKB),this.sizeLimitKB===1/0&&(this.freeSpaceEvery=0),this.save()}}let zt=new class{constructor(){this.operators={$eq:(e,t)=>e===t,$ne:(e,t)=>e!==t,$gt:(e,t)=>t<e,$gte:(e,t)=>t<=e,$lt:(e,t)=>e<t,$lte:(e,t)=>e<=t,$in:(e,t)=>Array.isArray(t)&&t.includes(e),$nin:(e,t)=>Array.isArray(t)&&!t.includes(e),$and:(e,t)=>t.every(t=>this.evaluate(e,t)),$or:(e,t)=>t.some(t=>this.evaluate(e,t)),$not:(e,t)=>!this.evaluate(e,t),$nor:(e,t)=>!t.some(t=>this.evaluate(e,t)),$exists:(e,t)=>void 0!==e===t,$type:(e,t)=>typeof e===t,$all:(e,t)=>Array.isArray(e)&&t.every(t=>e.includes(t)),$elemMatch:(e,t)=>Array.isArray(e)&&e.some(e=>this.evaluate({value:e},{value:t})),$size:(e,t)=>Array.isArray(e)&&e.length===t,$regex:(e,t)=>{if("string"!=typeof e)return!1;try{return new RegExp(t).test(e)}catch{return!1}},$text:(e,t)=>"string"==typeof e&&e.toLowerCase().includes(t.toLowerCase())}}evaluate(e,t){for(var i in t){var r=t[i];if(i.startsWith("$")){var s=this.operators[i];if(!s||!s(e,r))return!1}else{var a=this.getFieldValue(e,i);if("object"!=typeof r||null===r||Array.isArray(r)){if(a!==r)return!1}else for(var n in r)if(n.startsWith("$")){var o=this.operators[n];if(!o||!o(a,r[n]))return!1}}}return!0}getFieldValue(e,t){let i=e;for(var r of t.split(".")){if(null==i)return;i=i[r]}return i}};let Ut=new class{constructor(){this.stages={$match:(e,t)=>e.filter(e=>zt.evaluate(e,t)),$project:(e,t)=>e.map(e=>{var i,r={};for(i in t){var s=t[i];1===s||!0===s?r[i]=zt.getFieldValue(e,i):"string"==typeof s&&s.startsWith("$")&&(r[i]=zt.getFieldValue(e,s.substring(1)))}if(Object.values(t).some(e=>0===e||!1===e)){var a=Object.keys(t).filter(e=>0===t[e]||!1===t[e]);let i={...e};return a.forEach(e=>delete i[e]),i}return r}),$sort:(e,t)=>[...e].sort((e,i)=>{for(var r in t){var s=t[r],a=zt.getFieldValue(e,r);if(a<(r=zt.getFieldValue(i,r)))return-s;if(r<a)return s}return 0}),$limit:(e,t)=>e.slice(0,t),$skip:(e,t)=>e.slice(t),$group:(e,t)=>{var i,r=new Map,s=t._id;for(i of e){var a="string"==typeof s?zt.getFieldValue(i,s.replace("$","")):it.serialize(s);r.has(a)||r.set(a,{_id:a,docs:[]}),r.get(a).docs.push(i)}var n,o=[];for(n of r.values()){var h,c={_id:n._id};for(h in t)if("_id"!==h){var l=t[h],d=Object.keys(l)[0];let e=l[d].toString().replace("$","");switch(d){case"$sum":c[h]=n.docs.reduce((t,i)=>t+(zt.getFieldValue(i,e)||0),0);break;case"$avg":var u=n.docs.reduce((t,i)=>t+(zt.getFieldValue(i,e)||0),0);c[h]=u/n.docs.length;break;case"$count":c[h]=n.docs.length;break;case"$max":c[h]=Math.max(...n.docs.map(t=>zt.getFieldValue(t,e)));break;case"$min":c[h]=Math.min(...n.docs.map(t=>zt.getFieldValue(t,e)))}}o.push(c)}return o},$lookup:async(e,t,i)=>{i=await(await i.getCollection(t.from)).getAll();let r=new Map;return i.forEach(e=>{var i=zt.getFieldValue(e,t.foreignField);r.has(i)||r.set(i,[]),r.get(i).push(e)}),e.map(e=>{var i=zt.getFieldValue(e,t.localField);return{...e,[t.as]:r.get(i)||[]}})}}}async execute(e,t,i){let r=e;for(var s of t){var a=Object.keys(s)[0],n=(s=s[a],this.stages[a]);if(!n)throw new Error("Unknown aggregation stage: "+a);r="$lookup"===a?await n(r,s,i):n(r,s)}return r}};class It{constructor(e){this.database=e,this.migrations=[],this.currentVersion=this._loadVersion()}_loadVersion(){return localStorage.getItem(`lacertadb_${this.database.name}_version`)||"1.0.0"}_saveVersion(e){localStorage.setItem(`lacertadb_${this.database.name}_version`,e),this.currentVersion=e}addMigration(e){this.migrations.push(e)}_compareVersions(e,t){var i=e.split(".").map(Number),r=t.split(".").map(Number),s=Math.max(i.length,r.length);for(let e=0;e<s;e++){var a=i[e]||0,n=r[e]||0;if(n<a)return 1;if(a<n)return-1}return 0}async runMigrations(e){var t;for(t of this.migrations.filter(t=>0<this._compareVersions(t.version,this.currentVersion)&&this._compareVersions(t.version,e)<=0).sort((e,t)=>this._compareVersions(e.version,t.version)))await this._applyMigration(t,"up"),this._saveVersion(t.version)}async rollback(e){var t;for(t of this.migrations.filter(t=>t.down&&0<this._compareVersions(t.version,e)&&this._compareVersions(t.version,this.currentVersion)<=0).sort((e,t)=>this._compareVersions(t.version,e.version)))await this._applyMigration(t,"down");this._saveVersion(e)}async _applyMigration(e,t){var i;for(i of(console.log(`${"up"===t?"Running":"Rolling back"} migration: ${e.name} (v${e.version})`),await this.database.listCollections())){var r,s=await this.database.getCollection(i);for(r of await s.getAll()){var a=await e[t](r);a&&await s.update(r._id,a)}}}}class Dt{constructor(){this._metrics={operations:[],latencies:[],cacheHits:0,cacheMisses:0,memoryUsage:[]},this._monitoring=!1,this._monitoringInterval=null}startMonitoring(){this._monitoring||(this._monitoring=!0,this._monitoringInterval=setInterval(()=>this._collectMetrics(),1e3))}stopMonitoring(){this._monitoring&&(this._monitoring=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null)}recordOperation(e,t){this._monitoring&&(this._metrics.operations.push({type:e,duration:t,timestamp:Date.now()}),this._metrics.latencies.push(t),100<this._metrics.operations.length&&this._metrics.operations.shift(),100<this._metrics.latencies.length)&&this._metrics.latencies.shift()}recordCacheHit(){this._metrics.cacheHits++}recordCacheMiss(){this._metrics.cacheMisses++}_collectMetrics(){performance&&performance.memory&&(this._metrics.memoryUsage.push({used:performance.memory.usedJSHeapSize,total:performance.memory.totalJSHeapSize,limit:performance.memory.jsHeapSizeLimit,timestamp:Date.now()}),60<this._metrics.memoryUsage.length)&&this._metrics.memoryUsage.shift()}getStats(){var e=this._metrics.operations.filter(e=>Date.now()-e.timestamp<1e3).length,t=this._metrics.latencies.reduce((e,t)=>e+t,0),i=(t=0<this._metrics.latencies.length?t/this._metrics.latencies.length:0,0<(i=this._metrics.cacheHits+this._metrics.cacheMisses)?this._metrics.cacheHits/i*100:0),r=(r=0<this._metrics.memoryUsage.length?this._metrics.memoryUsage[this._metrics.memoryUsage.length-1]:null)?r.used/1048576:0;return{opsPerSec:e,avgLatency:t.toFixed(2),cacheHitRate:i.toFixed(1),memoryUsageMB:r.toFixed(2)}}getOptimizationTips(){var e=[],t=this.getStats();return 100<t.avgLatency&&e.push("High average latency detected. Consider enabling compression and indexing frequently queried fields."),t.cacheHitRate<50&&20<this._metrics.cacheHits+this._metrics.cacheMisses&&e.push("Low cache hit rate. Consider increasing cache size or optimizing query patterns."),10<this._metrics.memoryUsage.length&&10485760<(t=this._metrics.memoryUsage.slice(-10))[t.length-1].used-t[0].used&&e.push("Memory usage is increasing rapidly. Check for memory leaks or consider batch processing."),0<e.length?e:["Performance is optimal. No issues detected."]}}class Mt{constructor(e,t){this.name=e,this.database=t,this._db=null,this._metadata=null,this._settings=t.settings,this._indexedDB=new At,this._opfs=new bt,this._cleanupInterval=null,this._events=new Map,this._indexManager=new vt(this),this._cacheStrategy=new ut({type:"lru",maxSize:100,ttl:6e4,enabled:!0}),this._performanceMonitor=t.performanceMonitor,this._initialized=!1}get settings(){return this._settings}get metadata(){return this._metadata}get initialized(){return this._initialized}async init(){var e;return this._initialized||(e=this.database.name+"_"+this.name,this._db=await nt.getConnection(e,1,(e,t)=>{t<1&&!e.objectStoreNames.contains("documents")&&e.createObjectStore("documents",{keyPath:"_id"}).createIndex("modified","_modified",{unique:!1})}),e=this.database.metadata.collections[this.name],this._metadata=new St(this.name,e),await this._indexManager.loadIndexMetadata(),0<this._settings.freeSpaceEvery&&this._settings.sizeLimitKB!==1/0&&(this._cleanupInterval=setInterval(()=>this._freeSpace(),this._settings.freeSpaceEvery)),this._initialized=!0),this}async createIndex(e,t={}){return this._indexManager.createIndex(e,t)}async dropIndex(e){return this._indexManager.dropIndex(e)}async getIndexes(){return this._indexManager.getIndexStats()}async verifyIndexes(){return this._indexManager.verifyIndexes()}configureCacheStrategy(e){this._cacheStrategy.updateStrategy(e)}async add(e,t={}){if(this._initialized||await this.init(),t.encrypted&&!this.database.isEncrypted)throw new ht("Document-level encryption requires database-level encryption. Use getSecureDatabase() to create an encrypted database.","ENCRYPTION_NOT_INITIALIZED");await this._trigger("beforeAdd",e);e=new xt({data:e,_id:t.id},{compressed:!1!==t.compressed,permanent:t.permanent||!1}),(t=t.attachments)&&0<t.length&&(t=await Promise.all(t.map(e=>e instanceof File||e instanceof Blob?bt.prepareAttachment(e,e.name):Promise.resolve(e))),e._attachments=await this._opfs.saveAttachments(this.database.name,this.name,e._id,t)),await e.pack(this.database.encryption),t=e.databaseOutput();var i=(await this._indexedDB.add(this._db,"documents",t),e.objectOutput());await this._indexManager.updateIndexForDocument(e._id,null,i),i=t.packedData.byteLength/1024;return this._metadata.addDocument(e._id,i,e._permanent,e._attachments.length),this.database.metadata.setCollection(this._metadata),await this._checkSpaceLimit(),await this._trigger("afterAdd",e),this._cacheStrategy.clear(),e._id}async get(e,t={}){this._initialized||await this.init(),await this._trigger("beforeGet",e);var i,r=await this._indexedDB.get(this._db,"documents",e);if(r)return i=new xt(r,{encrypted:r._encrypted,compressed:r._compressed}),r.packedData&&await i.unpack(this.database.encryption),t.includeAttachments&&0<i._attachments.length&&(i.data._attachments=await this._opfs.getAttachments(i._attachments)),await this._trigger("afterGet",i),i.objectOutput(t.includeAttachments);throw new ht(`Document with id '${e}' not found.`,"DOCUMENT_NOT_FOUND")}async getAll(e={}){return this._initialized||await this.init(),e=await this._indexedDB.getAll(this._db,"documents",void 0,e.limit),Promise.all(e.map(async e=>{try{var t=new xt(e,{encrypted:e._encrypted,compressed:e._compressed});return e.packedData&&await t.unpack(this.database.encryption),t.objectOutput()}catch(t){return console.error(`Failed to unpack document ${e._id}:`,t),null}})).then(e=>e.filter(Boolean))}async update(e,t,i={}){this._initialized||await this.init(),await this._trigger("beforeUpdate",{docId:e,updates:t});var r,s,a=await this._indexedDB.get(this._db,"documents",e);if(a)return s=new xt(a),a.packedData&&await s.unpack(this.database.encryption),r=s.objectOutput(),s={...s.data,...t},(t=new xt({_id:e,_created:a._created,data:s},{compressed:void 0!==i.compressed?i.compressed:a._compressed,permanent:void 0!==i.permanent?i.permanent:a._permanent}))._modified=Date.now(),(s=i.attachments)&&0<s.length?(await this._opfs.deleteAttachments(this.database.name,this.name,e),i=await Promise.all(s.map(e=>e instanceof File||e instanceof Blob?bt.prepareAttachment(e,e.name):Promise.resolve(e))),t._attachments=await this._opfs.saveAttachments(this.database.name,this.name,t._id,i)):t._attachments=a._attachments,await t.pack(this.database.encryption),s=t.databaseOutput(),await this._indexedDB.put(this._db,"documents",s),i=t.objectOutput(),await this._indexManager.updateIndexForDocument(t._id,r,i),a=s.packedData.byteLength/1024,this._metadata.updateDocument(t._id,a,t._permanent,t._attachments.length),this.database.metadata.setCollection(this._metadata),await this._trigger("afterUpdate",t),this._cacheStrategy.clear(),t._id;throw new ht(`Document with id '${e}' not found for update.`,"DOCUMENT_NOT_FOUND")}async delete(e,t={}){this._initialized||await this.init(),await this._trigger("beforeDelete",e);var i=await this._indexedDB.get(this._db,"documents",e);if(!i)throw new ht("Document not found for deletion","DOCUMENT_NOT_FOUND");if(i._permanent&&!t.force)throw new ht("Cannot delete a permanent document. Use options.force = true to force deletion.","PERMANENT_DOCUMENT_PROTECTION");i._permanent&&t.force&&console.warn("Force deleting permanent document: "+e),t=await this.get(e),await this._indexManager.updateIndexForDocument(e,t,null),await this._indexedDB.delete(this._db,"documents",e),(t=i._attachments)&&0<t.length&&await this._opfs.deleteAttachments(this.database.name,this.name,e),this._metadata.removeDocument(e),this.database.metadata.setCollection(this._metadata),await this._trigger("afterDelete",e),this._cacheStrategy.clear()}async query(e={},t={}){this._initialized||await this.init();var i,r,s=performance.now(),a=rt.encode(it.serialize({filter:e,options:t})),n=this._cacheStrategy.get(a);if(n)return this._performanceMonitor&&this._performanceMonitor.recordCacheHit(),n;this._performanceMonitor&&this._performanceMonitor.recordCacheMiss();let o,h=!1;for([i,r]of this._indexManager.indexes){var c=e[r.fieldPath];if(void 0!==c){c=await this._indexManager.query(i,c),o=(o=await Promise.all(c.map(e=>this.get(e).catch(()=>null)))).filter(Boolean),h=!0;break}}return h||(o=await this.getAll(t),0<Object.keys(e).length&&(o=o.filter(t=>zt.evaluate(t,e)))),t.sort&&(o=Ut.stages.$sort(o,t.sort)),t.skip&&(o=Ut.stages.$skip(o,t.skip)),t.limit&&(o=Ut.stages.$limit(o,t.limit)),t.projection&&(o=Ut.stages.$project(o,t.projection)),this._performanceMonitor&&this._performanceMonitor.recordOperation(h?"indexed-query":"full-scan-query",performance.now()-s),this._cacheStrategy.set(a,o),o}async aggregate(e){this._initialized||await this.init();var t=performance.now(),i=await this.getAll();i=await Ut.execute(i,e,this.database);return this._performanceMonitor&&this._performanceMonitor.recordOperation("aggregate",performance.now()-t),i}async batchAdd(e,t){this._initialized||await this.init();var i,r=performance.now(),s=[];let a=[];for(i of e){var n=new xt({data:i},{compressed:!1!==t.compressed,permanent:t.permanent||!1});await n.pack(this.database.encryption),s.push({type:"add",data:n.databaseOutput()}),a.push(n)}var o,h,c=await this._indexedDB.batchOperation(this._db,s);for(let e=0;e<a.length;e++)c[e].success&&(h=(o=a[e]).objectOutput(),await this._indexManager.updateIndexForDocument(o._id,null,h),h=o._packedData.byteLength/1024,this._metadata.addDocument(o._id,h,o._permanent,0));return this.database.metadata.setCollection(this._metadata),this._performanceMonitor&&this._performanceMonitor.recordOperation("batchAdd",performance.now()-r),c.map((e,t)=>({...e,id:a[t]._id}))}async batchUpdate(e,t){return this._initialized||await this.init(),Promise.all(e.map(e=>this.update(e.id,e.data,t).then(e=>({success:!0,id:e})).catch(t=>({success:!1,id:e.id,error:t.message}))))}async batchDelete(e){return this._initialized||await this.init(),e=e.map(e=>"string"==typeof e?{id:e,options:{}}:{id:e.id,options:e.options||{}}),Promise.all(e.map(({id:e,options:t})=>this.delete(e,t).then(()=>({success:!0,id:e})).catch(t=>({success:!1,id:e,error:t.message}))))}async clear(e={}){if(this._initialized||await this.init(),e.force)for(var t of(await this._indexedDB.clear(this._db,"documents"),this._metadata=new St(this.name),this.database.metadata.setCollection(this._metadata),this._cacheStrategy.clear(),this._indexManager.indexes.keys()))await this._indexManager.rebuildIndex(t);else e=(await this.getAll()).filter(e=>!e._permanent),await this.batchDelete(e.map(e=>e._id))}async _checkSpaceLimit(){this._settings.sizeLimitKB!==1/0&&this._metadata.sizeKB>this._settings.bufferLimitKB&&await this._freeSpace()}async _freeSpace(){for(var e=.8*this._settings.bufferLimitKB;this._metadata.sizeKB>e;){var t=this._metadata.getOldestNonPermanentDocuments(10);if(0===t.length)break;await this.batchDelete(t)}}on(e,t){this._events.has(e)||this._events.set(e,[]),this._events.get(e).push(t)}off(e,t){var i;this._events.has(e)&&(i=this._events.get(e).filter(e=>e!==t),this._events.set(e,i))}async _trigger(e,t){if(this._events.has(e))for(var i of this._events.get(e))await i(t)}clearCache(){this._cacheStrategy.clear()}destroy(){var e;clearInterval(this._cleanupInterval),this._db&&(e=this.database.name+"_"+this.name,nt.releaseConnection(e))}}class Bt{constructor(e,t){this.name=e,this._collections=new Map,this._metadata=null,this._settings=null,this._quickStore=null,this._performanceMonitor=t,this._encryption=null,this._isEncrypted=!1}get collections(){return this._collections}get metadata(){return this._metadata}get settings(){return this._settings}get quickStore(){return this._quickStore}get performanceMonitor(){return this._performanceMonitor}get encryption(){return this._encryption}get isEncrypted(){return this._isEncrypted}async init(e={}){return this._metadata=kt.load(this.name),this._settings=Et.load(this.name),this._quickStore=new st(this.name),e.pin&&await this._initializeEncryption(e.pin,e.salt,e.encryptionConfig),this}async _initializeEncryption(e,t=null,i={}){this._encryption=new _t(i),i=`lacertadb_${this.name}_encryption`;let r=null;t||(s=localStorage.getItem(i))&&(s=rt.decode(s),(r=it.deserialize(s)).salt)&&(this._encryption.importMetadata(r),t=rt.decode(r.salt));var s=await this._encryption.initialize(e,t);return r||(e=this._encryption.exportMetadata(),t=it.serialize(e),e=rt.encode(t),localStorage.setItem(i,e)),this._isEncrypted=!0,s}async changePin(e,t){var i;if(this._isEncrypted)return e=await this._encryption.changePin(e,t),t=`lacertadb_${this.name}_encryption`,i=this._encryption.exportMetadata(),i=it.serialize(i),i=rt.encode(i),localStorage.setItem(t,i),e;throw new Error("Database is not encrypted")}async storePrivateKey(e,t,i=""){if(!this._isEncrypted)throw new Error("Database must be encrypted to store private keys");t=await this._encryption.encryptPrivateKey(t,i);let r=await this.getCollection("__private_keys__").catch(()=>null);return await(r=r||await this.createCollection("__private_keys__")).add({name:e,key:t,createdAt:Date.now()},{id:e,permanent:!0}),!0}async getPrivateKey(e,t=""){if(!this._isEncrypted)throw new Error("Database must be encrypted to retrieve private keys");var i=await(await this.getCollection("__private_keys__")).get(e);if(i)return this._encryption.decryptPrivateKey(i.key,t);throw new Error(`Private key '${e}' not found`)}async createCollection(e,t){if(this._collections.has(e))throw new ht(`Collection '${e}' already exists.`,"COLLECTION_EXISTS");var i=new Mt(e,this);return this._collections.set(e,i),this._metadata.collections[e]||this._metadata.setCollection(new St(e)),i}async getCollection(e){var t;if(this._collections.has(e))return(t=this._collections.get(e)).initialized||await t.init(),t;if(this._metadata.collections[e])return t=new Mt(e,this),this._collections.set(e,t),await t.init(),t;throw new ht(`Collection '${e}' not found.`,"COLLECTION_NOT_FOUND")}async dropCollection(e){var t;this._collections.has(e)&&((t=this._collections.get(e)).initialized&&(await t.clear({force:!0}),t.destroy()),this._collections.delete(e)),this._metadata.removeCollection(e);let i=this.name+"_"+e;await new Promise((e,t)=>{var r=indexedDB.deleteDatabase(i);r.onsuccess=e,r.onerror=t,r.onblocked=()=>console.warn(`Deletion of '${i}' is blocked.`)})}listCollections(){return Object.keys(this._metadata.collections)}getStats(){return{name:this.name,totalSizeKB:this._metadata.totalSizeKB,totalDocuments:this._metadata.totalLength,collections:Object.entries(this._metadata.collections).map(([e,t])=>({name:e,sizeKB:t.sizeKB,documents:t.length,createdAt:new Date(t.createdAt).toISOString(),modifiedAt:new Date(t.modifiedAt).toISOString()}))}}updateSettings(e){this._settings.updateSettings(e)}async export(e="json",t=null){var i,r,s,a={version:"0.7.0",database:this.name,timestamp:Date.now(),collections:{}};for(i of this.listCollections()){var n=await this.getCollection(i);a.collections[i]=await n.getAll()}if("json"===e)return s=it.serialize(a),rt.encode(s);if("encrypted"===e&&t)return s=new pt,r=it.serialize(a),s=await s.encrypt(r,t),rt.encode(s);throw new ht("Unsupported export format: "+e,"INVALID_FORMAT")}async import(e,t="json",i=null){let r;try{var s,a=rt.decode(e);r="encrypted"===t&&i?(s=await(new pt).decrypt(a,i),it.deserialize(s)):it.deserialize(a)}catch(e){throw new ht("Failed to parse import data","IMPORT_PARSE_FAILED",e)}for(var n in r.collections){var o=r.collections[n];let t;try{t=await this.createCollection(n)}catch(e){if("COLLECTION_EXISTS"!==e.code)throw e;t=await this.getCollection(n)}await t.batchAdd(o)}return e=Object.values(r.collections).reduce((e,t)=>e+t.length,0),{collections:Object.keys(r.collections).length,documents:e}}async clearAll(){await Promise.all([...this._collections.keys()].map(e=>this.dropCollection(e))),this._collections.clear(),this._metadata=new kt(this.name),this._metadata.save(),this._quickStore.clear()}destroy(){this._collections.forEach(e=>{e.initialized&&e.destroy()}),this._collections.clear(),this._encryption&&this._encryption.destroy()}}class Ct{constructor(){this._databases=new Map,this._performanceMonitor=new Dt}get performanceMonitor(){return this._performanceMonitor}async getDatabase(e,t={}){var i;return this._databases.has(e)||(await(i=new Bt(e,this._performanceMonitor)).init(t),this._databases.set(e,i)),this._databases.get(e)}async getSecureDatabase(e,t,i=null,r={}){return this.getDatabase(e,{pin:t,salt:i,encryptionConfig:r})}async dropDatabase(e){var t;this._databases.has(e)&&(await(t=this._databases.get(e)).clearAll(),t.destroy(),this._databases.delete(e)),["metadata","settings","version","encryption"].forEach(t=>{localStorage.removeItem(`lacertadb_${e}_`+t)}),new st(e).clear();var i=[];for(let t=0;t<localStorage.length;t++){var r=localStorage.key(t);r&&r.startsWith(`lacertadb_${e}_`)&&i.push(r)}i.forEach(e=>localStorage.removeItem(e))}listDatabases(){var e=new Set;for(let i=0;i<localStorage.length;i++){var t=localStorage.key(i);t&&t.startsWith("lacertadb_")&&(t=t.match(/^lacertadb_([^_]+)_(metadata|settings|version|encryption|quickstore)$/))&&e.add(t[1])}return[...e]}async createBackup(e=null){var t,i={version:"0.7.0",timestamp:Date.now(),databases:{}};for(t of this.listDatabases()){var r=await(await this.getDatabase(t)).export("json");r=rt.decode(r);i.databases[t]=it.deserialize(r)}var s=it.serialize(i);return e?(e=await(new pt).encrypt(s,e),rt.encode(e)):rt.encode(s)}async restoreBackup(e,t=null){let i;try{var r,s=rt.decode(e);i=t?(r=await(new pt).decrypt(s,t),it.deserialize(r)):it.deserialize(s)}catch(e){throw new ht("Failed to parse backup data","BACKUP_PARSE_FAILED",e)}var a,n,o={databases:0,collections:0,documents:0};for([a,n]of Object.entries(i.databases)){var h=await this.getDatabase(a),c=rt.encode(it.serialize(n));h=await h.import(c);o.databases++,o.collections+=h.collections,o.documents+=h.documents}return o}destroy(){for(var e of this._databases.values())e.destroy();this._databases.clear(),nt.closeAll()}}},function(e,t,i){i.r(t),t=i(1),"undefined"!=typeof window?window.LACERTA=t:self.LACERTA=t}]);
|
package/dist/index.min.js
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
(e=>{var t={};function r(i){var s;return(t[i]||(s=t[i]={i:i,l:!1,exports:{}},e[i].call(s.exports,s,s.exports,r),s.l=!0,s)).exports}r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)})([function(e,t){var r={},i=new Float32Array(4);function s(e,t){if((0|e)!==e)throw new TypeError("Lane index must be an int32");if(e<0||t<=e)throw new RangeError("Lane index must be in bounds")}new Int32Array(i.buffer),new Int16Array(i.buffer),new Int8Array(i.buffer),new Uint32Array(i.buffer),new Uint16Array(i.buffer),new Uint8Array(i.buffer),void 0!==r.Int8x16&&void 0!==r.Int8x16.extractLane||(r.Int8x16=function(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y){if(!(this instanceof r.Int8x16))return new r.Int8x16(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y);this.s_=new Int8Array([e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y])},r.Int8x16.check=function(e){if(e instanceof r.Int8x16)return e;throw new TypeError("Argument is not a Int8x16.")},r.Int8x16.splat=function(e){return new r.Int8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},r.Int8x16.extractLane=function(e,t){return e=r.Int8x16.check(e),s(t,16),e.s_[t]},r.Int8x16.replaceLane=function(e,t,i){return e=r.Int8x16.check(e),s(t,16),(e=Array.from(e.s_))[t]=i,new r.Int8x16(...e)},r.Int8x16.shuffle=function(e,t,i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v){var A=[i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v],U=[];e=r.Int8x16.check(e),t=r.Int8x16.check(t);for(var V=0;V<16;V++){var m=A[V];s(m,32),U[V]=m<16?e.s_[m]:t.s_[m-16]}return new r.Int8x16(...U)}),void 0!==r.Uint8x16&&void 0!==r.Uint8x16.extractLane||(r.Uint8x16=function(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y){if(!(this instanceof r.Uint8x16))return new r.Uint8x16(e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y);this.s_=new Uint8Array([e,t,i,s,a,n,o,h,l,c,u,f,p,w,d,y])},r.Uint8x16.check=function(e){if(e instanceof r.Uint8x16)return e;throw new TypeError("Argument is not a Uint8x16.")},r.Uint8x16.splat=function(e){return new r.Uint8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},r.Uint8x16.extractLane=function(e,t){return e=r.Uint8x16.check(e),s(t,16),e.s_[t]},r.Uint8x16.load=function(e,t){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return new r.Uint8x16(...e.subarray(t,t+16))},r.Uint8x16.store=function(e,t,r){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return e.set(r.s_,t),r},r.Uint8x16.shuffle=function(e,t,i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v){var A=[i,a,n,o,h,l,c,u,f,p,w,d,y,g,b,v],U=[];e=r.Uint8x16.check(e),t=r.Uint8x16.check(t);for(var V=0;V<16;V++){var m=A[V];s(m,32),U[V]=m<16?e.s_[m]:t.s_[m-16]}return new r.Uint8x16(...U)},r.Uint8x16.and=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]&t.s_[s];return new r.Uint8x16(...i)},r.Uint8x16.or=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]|t.s_[s];return new r.Uint8x16(...i)},r.Uint8x16.shiftLeftByScalar=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]<<t;return new r.Uint8x16(...i)},r.Uint8x16.shiftRightByScalar=function(e,t){for(var i=[],s=0;s<16;++s)i[s]=e.s_[s]>>>t;return new r.Uint8x16(...i)}),e.exports=class{constructor(){this.ENC_SHUFFLE=r.Int8x16(10,11,9,10,7,8,6,7,4,5,3,4,1,2,0,1),this.ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.ENC_LUT_SIMD=[r.Uint8x16.splat(0),r.Uint8x16.splat(0),r.Uint8x16.splat(0),r.Uint8x16.splat(0)];for(let t=0;t<4;t++){var e=this.ENC_LUT.substring(16*t,16*(t+1));this.ENC_LUT_SIMD[t]=r.Uint8x16(...Array.from(e).map(e=>e.charCodeAt(0)))}this.DEC_DELTA_ASSO=r.Uint8x16(1,1,1,1,1,1,1,1,0,0,0,0,0,15,0,15),this.DEC_DELTA_VALUES=r.Int8x16(0,0,0,19,4,191,191,185,185,0,16,195,191,191,185,185),this.DEC_SHUFFLE=r.Int8x16(-1,-1,-1,-1,12,13,14,8,9,10,4,5,6,0,1,2),this.SCALAR_ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.SCALAR_DEC_LUT={};for(let e=0;e<this.SCALAR_ENC_LUT.length;e++)this.SCALAR_DEC_LUT[this.SCALAR_ENC_LUT.charAt(e)]=e;this.SCALAR_DEC_LUT["="]=0}_scalar_encode(e){let t="";for(let a=0;a<e.length;a+=3){var r=e[a],i=a+1<e.length?e[a+1]:0,s=a+2<e.length?e[a+2]:0;t+=this.SCALAR_ENC_LUT[r>>2]+this.SCALAR_ENC_LUT[(3&r)<<4|i>>4],a+1<e.length?t+=this.SCALAR_ENC_LUT[(15&i)<<2|s>>6]:t+="=",a+2<e.length?t+=this.SCALAR_ENC_LUT[63&s]:t+="="}return t}encode(e){var t=e.length,r=4*Math.ceil(t/3),i=new Uint8Array(r);let s=0,a=0;for(;s+12<=t;){var n=e.subarray(s,s+12),o=new Uint8Array(16);o[0]=n[0]>>2,o[1]=(3&n[0])<<4|n[1]>>4,o[2]=(15&n[1])<<2|n[2]>>6,o[3]=63&n[2],o[4]=n[3]>>2,o[5]=(3&n[3])<<4|n[4]>>4,o[6]=(15&n[4])<<2|n[5]>>6,o[7]=63&n[5],o[8]=n[6]>>2,o[9]=(3&n[6])<<4|n[7]>>4,o[10]=(15&n[7])<<2|n[8]>>6,o[11]=63&n[8],o[12]=n[9]>>2,o[13]=(3&n[9])<<4|n[10]>>4,o[14]=(15&n[10])<<2|n[11]>>6,o[15]=63&n[11];for(let e=0;e<16;e++)i[a+e]=this.SCALAR_ENC_LUT.charCodeAt(o[e]);s+=12,a+=16}let h=(new TextDecoder).decode(i.subarray(0,a));return s<t&&(h+=this._scalar_encode(e.subarray(s))),h}_scalar_decode(e){e=e.replace(/=+$/,"");var t=Math.floor(3*e.length/4),r=new Uint8Array(t);let i=0;for(let h=0;h<e.length;h+=4){var s=this.SCALAR_DEC_LUT[e[h]],a=this.SCALAR_DEC_LUT[e[h+1]],n=h+2<e.length?this.SCALAR_DEC_LUT[e[h+2]]:0,o=h+3<e.length?this.SCALAR_DEC_LUT[e[h+3]]:0;r[i++]=s<<2|a>>4,i<t&&(r[i++]=(15&a)<<4|n>>2),i<t&&(r[i++]=(3&n)<<6|o)}return r}decode(e){var t=e.length;if(t%4!=0)throw new Error("Invalid Base64 string length.");var r=(e.match(/=/g)||[]).length,i=new Uint8Array(3*t/4-r);let s=0,a=0;for(var n;s+16<=t-r;){var o=Array.from(e.substring(s,s+16)).map(e=>this.SCALAR_DEC_LUT[e]),h=new Uint8Array(12);h[0]=o[0]<<2|o[1]>>4,h[1]=(15&o[1])<<4|o[2]>>2,h[2]=(3&o[2])<<6|o[3],h[3]=o[4]<<2|o[5]>>4,h[4]=(15&o[5])<<4|o[6]>>2,h[5]=(3&o[6])<<6|o[7],h[6]=o[8]<<2|o[9]>>4,h[7]=(15&o[9])<<4|o[10]>>2,h[8]=(3&o[10])<<6|o[11],h[9]=o[12]<<2|o[13]>>4,h[10]=(15&o[13])<<4|o[14]>>2,h[11]=(3&o[14])<<6|o[15],i.set(h,a),s+=16,a+=12}return s<t&&(n=this._scalar_decode(e.substring(s)),i.set(n,a)),i}}},function(e,t,r){r.r(t);let i=240,s=0,a=16,n=32,o=48,h=64,l=80,c=96,u=112,f=128,p=144,w=160,d=176,y=192,g=224,b=240,v=0,A=1,U=2,V=3,m=16,k=17,E=18,x=19,S=20,_=21,I=22,B=23,C=24,O=25,T=26,M=32,L=33,z=34,F=35,j=48,P=49,R=50,D=51,$=52,N=53,W=54,H=55,Y=64,q=65,G=66,J=67,K=68,Q=69,X=70,Z=71,ee=80,te=81,re=82,ie=83,se=84,ae=85,ne=96,oe=97,he=98,le=99,ce=100,ue=101,fe=102,pe=103,we=104,de=105,ye=106,ge=107,be=112,ve=113,Ae=114,Ue=128,Ve=129,me=144,ke=145,Ee=160,xe=161,Se=162,_e=163,Ie=164,Be=165,Ce=166,Oe=167,Te=168,Me=176,Le=192,ze=193,Fe=208,je=209,Pe=224,Re=225,De=226,$e=227,Ne=240,We=new Uint8Array(256),He=new Uint8Array(256);new Map;let Ye=new Map,qe=new Map;var Ge=[[k,2],[E,4],[x,4],[S,4],[_,8],[M,8],[L,8]];for(let e=0;e<Ge.length;e++)We[Ge[e][0]]=Ge[e][1];var Je,Ke=[[ne,1],[oe,1],[he,1],[le,2],[ce,2],[ue,4],[fe,4],[pe,4],[we,8],[de,8],[ye,8],[J,1],[K,2],[Q,4],[X,4],[Z,8]];for(let e=0;e<Ke.length;e++)He[Ke[e][0]]=Ke[e][1];for(Je of["asyncIterator","hasInstance","isConcatSpreadable","iterator","match","matchAll","replace","search","species","split","toPrimitive","toStringTag","unscopables"]){var Qe=Symbol[Je];Qe&&(Ye.set(Qe,Je),qe.set(Je,Qe))}class Xe{constructor(e=65536){this.size=(e+128-1&-128)>>>0,this.buffer=new ArrayBuffer(this.size),this.offset=0,this.u8=new Uint8Array(this.buffer),this.view=new DataView(this.buffer),this.pos=0,this.f32View=null,this.f64View=null,this.i32View=null}ensure(e){var t,r;(e=this.pos+(e|=0)|0)>this.size&&(e=(128+(0|Math.max(this.size<<1,128+e))-1&-128)>>>0,t=new ArrayBuffer(e),(r=new Uint8Array(t)).set(this.u8.subarray(0,this.pos)),this.buffer=t,this.u8=r,this.view=new DataView(t),this.size=e,this.f32View=null,this.f64View=null,this.i32View=null)}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}writeU8(e){this.ensure(1),this.u8[this.pos++]=255&e}writeU16(e){this.alignPos(2),this.ensure(2),this.view.setUint16(this.pos,65535&e,!0),this.pos=this.pos+2|0}writeI16(e){this.alignPos(2),this.ensure(2),this.view.setInt16(this.pos,e,!0),this.pos=this.pos+2|0}writeU32(e){this.alignPos(4),this.ensure(4),this.view.setUint32(this.pos,e>>>0,!0),this.pos=this.pos+4|0}writeI32(e){this.alignPos(4),this.ensure(4),this.view.setInt32(this.pos,0|e,!0),this.pos=this.pos+4|0}writeF32(e){this.alignPos(4),this.ensure(4),this.view.setFloat32(this.pos,+e,!0),this.pos=this.pos+4|0}writeF64(e){this.alignPos(8),this.ensure(8),this.view.setFloat64(this.pos,+e,!0),this.pos=this.pos+8|0}writeBigInt64(e){this.alignPos(8),this.ensure(8),this.view.setBigInt64(this.pos,BigInt(e),!0),this.pos=this.pos+8|0}writeVarint(e){if(e>>>=0,this.ensure(5),e<128)this.u8[this.pos++]=e;else if(e<16384)this.u8[this.pos]=127&e|128,this.u8[this.pos+1]=e>>>7,this.pos=this.pos+2|0;else{let t=this.pos;for(;this.u8[t++]=127&e|128,128<=(e>>>=7););this.u8[t++]=e,this.pos=t}}writePackedArray(e,t){var r=0|e.length,i=(this.writeVarint(r),0|He[t]);if(!i)throw new Error("Unknown element type: 0x"+t.toString(16));switch(this.alignPos(Math.min(i,8)),this.ensure(r*i),t){case J:new Int8Array(this.buffer,this.pos,r).set(e),this.pos=this.pos+r|0;break;case K:var s=new Int16Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)s[t]=0|e[t];this.pos=this.pos+(r<<1)|0;break;case Q:var a=new Int32Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)a[t]=0|e[t];this.pos=this.pos+(r<<2)|0;break;case X:var n=new Float32Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)n[t]=+e[t];this.pos=this.pos+(r<<2)|0;break;case Z:var o=new Float64Array(this.buffer,this.pos,r);for(let t=0;t<r;t++)o[t]=+e[t];this.pos=this.pos+(r<<3)|0;break;default:throw new Error("Unsupported packed array type: 0x"+t.toString(16))}}writeBulkAligned(e,t){var r;t=Math.min(t,8),this.alignPos(t),t=e.byteLength||e.length;this.ensure(t),e.buffer&&void 0!==e.byteOffset?(r=new Uint8Array(e.buffer,e.byteOffset,t),this.u8.set(r,this.pos)):this.u8.set(e,this.pos),this.pos=this.pos+t|0}reset(){this.pos=0}getResult(){return this.u8.subarray(0,this.pos)}}class Ze{constructor(){this.blockSize=16}canOptimize(e){var t=e.length;if(!(8<=t&(0==(t&t-1)||16<=t)))return!1;var r=typeof e[0];if("number"!=r)return!1;var i=Math.max(1,t>>>5|0);for(let s=i;s<t;s+=i)if(typeof e[s]!=r)return!1;return!0}analyzeNumericArray(e){let t=1,r=1/0,i=-1/0,s=1;var a,n=e.length;for(let a=0;a<n;a++){var o=e[a];t&=+(o==(0|o)),r=Math.min(r,o),i=Math.max(i,o),s&&(s&=+(Math.fround(o)==o))}return t?(a=+((a=Math.max(Math.abs(r),Math.abs(i)))<=127)<<0|+(a<=32767)<<1|+(a<=2147483647)<<2,[{type:Q,elementSize:4},{type:J,elementSize:1},{type:K,elementSize:2},{type:Q,elementSize:4}][3&a]):s?{type:X,elementSize:4}:{type:Z,elementSize:8}}}class et{constructor(){this.simdProcessor=new Ze,this.constructorMap=new Map,this.typeNameMap=new Map,this.errorTypeMap=new Map,this.initMaps()}initMaps(){var e,t,r,i,s=[[Date,me],[RegExp,Me],[Map,Ue],[Set,Ve],[ArrayBuffer,be],[DataView,ge]],a=[["Uint8Array",ne],["Int8Array",oe],["Uint8ClampedArray",he],["Uint16Array",le],["Int16Array",ce],["Uint32Array",ue],["Int32Array",fe],["Float32Array",pe],["Float64Array",we],["BigInt64Array",de],["BigUint64Array",ye],["SharedArrayBuffer",Ae]];for([e,t]of s)this.constructorMap.set(e,t);for([r,i]of a){var n=globalThis[r];n&&(this.constructorMap.set(n,i),this.typeNameMap.set(r,i))}this.errorTypeMap.set("Error",Ee),this.errorTypeMap.set("EvalError",xe),this.errorTypeMap.set("RangeError",Se),this.errorTypeMap.set("ReferenceError",_e),this.errorTypeMap.set("SyntaxError",Ie),this.errorTypeMap.set("TypeError",Be),this.errorTypeMap.set("URIError",Ce),this.errorTypeMap.set("AggregateError",Oe)}detect(e){if(null==e)return null===e?v:A;switch(typeof e){case"boolean":return e?V:U;case"number":return this.detectNumber(e);case"bigint":return this.detectBigInt(e);case"string":return this.detectString(e);case"symbol":return this.detectSymbol(e);case"object":return this.detectObject(e);default:return A}}detectNumber(e){var t,r,i;return e!=e?I:(i=new Float64Array([e]),((t=(i=new Uint32Array(i.buffer))[1])&(r=2146435072))==r&0==i[0]&0==(1048575&t)?t>>>31?C:B:0==e&&t>>>31?O:e==(0|e)?(i=+((r=Math.abs(e))<=127)<<0|+(r<=32767)<<1|+(r<=2147483647)<<2,[T,m,k,E][Math.min(i,3)]):Math.fround(e)==e?S:_)}detectBigInt(e){var t=e<0n;return(t?-e:e)<=0x7fffffffffffffffn?t?L:M:t?F:z}detectString(e){var t,r=e.length;if(0==r)return j;let i=1;for(let t=0;t<r&&i;t++)i&=+(e.charCodeAt(t)<=127);return i?r<16?P:r<256?R:D:(t=(new TextEncoder).encode(e).length)<16?$:t<256?N:W}detectSymbol(e){return void 0!==Symbol.keyFor(e)?Re:Ye.has(e)?De:void 0===e.description?$e:Pe}detectObject(e){var t,r;return null==e?v:(t=e.constructor,void 0!==(t=this.constructorMap.get(t))?t==me?(r=e.getTime())==r?me:ke:t:Array.isArray(e)?this.detectArray(e):ArrayBuffer.isView(e)?this.detectTypedArrayType(e):e instanceof Error?this.detectErrorType(e):"undefined"!=typeof Blob&&e instanceof Blob?e instanceof File?ze:Le:this.classifyObject(e))}classifyObject(e){var t=Object.getPrototypeOf(e);if(e.constructor!=Object&&t!=Object.prototype&&null!=t)return ie;t=Object.getOwnPropertyNames(e);var r,i=Object.getOwnPropertySymbols(e);if(0===(t=[...t,...i]).length)return ee;let s=!1,a=!1;for(r of t){var n=Object.getOwnPropertyDescriptor(e,r);if(n.get||n.set){s=!0;break}"function"==typeof n.value&&(a=!0),n.enumerable&&n.writable&&n.configurable||(s=!0)}return s?se:a?ae:re}detectArray(e){var t=e.length;if(0==t)return Y;let r=0,i=!1;for(let s=0;s<t;s++)s in e?r++:i=!0;return i||r<3*t>>>2?G:this.simdProcessor.canOptimize(e)?this.simdProcessor.analyzeNumericArray(e).type:q}detectTypedArrayType(e){return e=e.constructor.name,this.typeNameMap.get(e)||ne}detectErrorType(e){return e=e.constructor.name,this.errorTypeMap.get(e)||Te}}let tt=r(0),rt=r.n(tt),it=new class{constructor(e={}){this.options={compression:e.compression||!1,deduplication:!1!==e.deduplication,shareArrayBuffers:!1!==e.shareArrayBuffers,simdOptimization:!1!==e.simdOptimization,detectCircular:!1!==e.detectCircular,serializeFunctions:e.serializeFunctions||!1,preservePropertyDescriptors:!1!==e.preservePropertyDescriptors,memoryPoolSize:e.memoryPoolSize||65536,...e},this.pool=new Xe(this.options.memoryPoolSize),this.detector=new et,this.simdProcessor=new Ze,this.refs=new Map,this.circularRefs=new Set,this.strings=new Map,this.buffers=new Map,this.encoder=new TextEncoder,this.decoder=new TextDecoder}serialize(e){return this.resetState(),this.pool.writeU32(1413632565),this.pool.writeU8(5),this.options.detectCircular&&this.detectCircularReferences(e,new WeakSet),this.writeValue(e),this.pool.getResult()}resetState(){this.pool.reset(),this.refs.clear(),this.circularRefs.clear(),this.strings.clear(),this.buffers.clear()}detectCircularReferences(e,t){if("object"==typeof e&&null!=e)if(t.has(e))this.circularRefs.add(e);else{t.add(e);try{if(Array.isArray(e))for(let r=0;r<e.length;r++)r in e&&this.detectCircularReferences(e[r],t);else if(e instanceof Map)for(var[r,i]of e)this.detectCircularReferences(r,t),this.detectCircularReferences(i,t);else if(e instanceof Set)for(var s of e)this.detectCircularReferences(s,t);else for(var a in e)if(e.hasOwnProperty(a))try{this.detectCircularReferences(e[a],t)}catch(r){}}finally{t.delete(e)}}}writeValue(e){if(this.options.detectCircular&&"object"==typeof e&&null!=e&&this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(je),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"object"==typeof e&&null!=e&&!this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(Fe),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"string"==typeof e&&3<e.length){if(void 0!==(t=this.strings.get(e)))return this.pool.writeU8(H),void this.pool.writeVarint(t);this.strings.set(e,this.strings.size)}if(this.options.shareArrayBuffers&&e instanceof ArrayBuffer){if(void 0!==(t=this.buffers.get(e)))return this.pool.writeU8(ve),void this.pool.writeVarint(t);this.buffers.set(e,this.buffers.size)}var t,r=this.detector.detect(e);switch(t=(this.pool.writeU8(r),r&i)){case s:break;case a:this.writeNumber(e,r);break;case n:this.writeBigInt(e,r);break;case o:this.writeString(e,r);break;case h:this.writeArray(e,r);break;case l:this.writeObject(e,r);break;case c:this.writeTypedArray(e,r);break;case u:this.writeArrayBuffer(e,r);break;case f:this.writeCollection(e,r);break;case p:this.writeDate(e,r);break;case w:this.writeError(e,r);break;case d:this.writeRegExp(e);break;case y:this.writeBinary(e,r);break;case g:this.writeSpecial(e,r);break;case b:this.writeExtension(e,r)}}writeNumber(e,t){switch(t){case m:this.pool.writeU8(e);break;case k:this.pool.writeI16(e);break;case E:this.pool.writeI32(e);break;case x:this.pool.writeU32(e);break;case S:this.pool.writeF32(e);break;case _:this.pool.writeF64(e);break;case T:var r=e<0;this.pool.writeVarint(Math.abs(e)),this.pool.writeU8(r?1:0)}}writeBigInt(e,t){switch(t){case M:case L:this.pool.writeBigInt64(e);break;case z:case F:this.writeLargeBigInt(e)}}writeLargeBigInt(e){var t,r=BigInt(e).toString(16).replace("-",""),i=[];for(let e=r.length-2;0<=e;e-=2)i.push(parseInt(r.substr(e,2),16));for(t of(r.length%2&&i.push(parseInt(r[0],16)),this.pool.writeVarint(i.length),i))this.pool.writeU8(t)}writeString(e,t){var r=e.length;switch(t){case j:break;case P:case R:this.pool.writeU8(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case D:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case $:case N:case W:var i=this.encoder.encode(e);t==$||t==N?this.pool.writeU8(i.length):this.pool.writeVarint(i.length),this.pool.writeBulkAligned(i,1)}}writeArray(e,t){var r=e.length;switch(t){case Y:break;case q:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.writeValue(e[t]);break;case G:this.writeSparseArray(e);break;case J:case K:case Q:case X:case Z:this.pool.writePackedArray(e,t)}}writeSparseArray(e){var t=e.length,r=new Uint32Array(t),i=[];let s=0;for(let a=0;a<t;a++)a in e&&(r[s]=a,i[s]=e[a],s++);this.pool.writeVarint(t),this.pool.writeVarint(s);for(let e=0;e<s;e++)this.pool.writeVarint(r[e]),this.writeValue(i[e])}writeObject(e,t){if(t!=ee)switch(t){case re:case te:this.writeSimpleObject(e);break;case se:this.writeObjectWithDescriptors(e);break;case ae:this.writeObjectWithMethods(e);break;case ie:this.writeConstructorObject(e)}}writeSimpleObject(e){var t,r=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(r.sort(),this.pool.writeVarint(r.length),r))this.writeValue(t),this.writeValue(e[t])}writeObjectWithDescriptors(e){var t,r=Object.getOwnPropertyNames(e),i=Object.getOwnPropertySymbols(e);r=[...r,...i].filter(t=>{try{var r=Object.getOwnPropertyDescriptor(e,t);return r&&(this.options.serializeFunctions||!r.get&&!r.set&&"function"!=typeof r.value)}catch(t){return!1}});for(t of(this.pool.writeVarint(r.length),r)){this.writeValue(t);var s=Object.getOwnPropertyDescriptor(e,t);let r=0;s.enumerable&&(r|=1),s.writable&&(r|=2),s.configurable&&(r|=4),s.get&&(r|=8),s.set&&(r|=16),this.pool.writeU8(r),s.get||s.set?(s.get&&this.writeValue(s.get),s.set&&this.writeValue(s.set)):this.writeValue(s.value)}}writeObjectWithMethods(e){var t,r,i,s,a=[];for(t of Object.keys(e))try{var n=e[t];"function"==typeof n?this.options.serializeFunctions?a.push([t,n,!0]):a.push([t,null,!1]):a.push([t,n,!1])}catch(e){}for([r,i,s]of(this.pool.writeVarint(a.length),a))this.writeValue(r),this.pool.writeU8(s?1:0),s&&this.options.serializeFunctions?(this.writeValue(i.toString()),this.writeValue(i.name||"")):s?this.pool.writeU8(Ne):this.writeValue(i)}writeConstructorObject(e){this.writeValue(e.constructor.name||"");var t,r=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(this.pool.writeVarint(r.length),r))this.writeValue(t),this.writeValue(e[t])}writeTypedArray(e,t){var r=e.buffer,i=e.byteOffset,s=e.length;if(this.options.shareArrayBuffers){if(void 0!==(a=this.buffers.get(r)))return this.pool.writeU8(1),this.pool.writeVarint(a),this.pool.writeVarint(i),void this.pool.writeVarint(s);this.buffers.set(r,this.buffers.size)}this.pool.writeU8(0),this.pool.writeVarint(i),this.pool.writeVarint(s);var a,n=s*(a=He[t]||1);if(t==de||t==ye)for(let t=0;t<s;t++)this.pool.writeBigInt64(e[t]);else t=new Uint8Array(r,i,n),this.pool.writeBulkAligned(t,a)}writeArrayBuffer(e,t){e=new Uint8Array(e),this.pool.writeVarint(e.length),this.pool.writeBulkAligned(e,1)}writeCollection(e,t){switch(t){case Ue:for(var[r,i]of(this.pool.writeVarint(e.size),e))this.writeValue(r),this.writeValue(i);break;case Ve:for(var s of(this.pool.writeVarint(e.size),e))this.writeValue(s)}}writeDate(e,t){t==me&&this.pool.writeF64(e.getTime())}writeError(e,t){if(this.writeValue(e.message||""),this.writeValue(e.stack||""),t==Oe&&e.errors)for(var r of(this.pool.writeVarint(e.errors.length),e.errors))this.writeValue(r)}writeRegExp(e){this.writeValue(e.source),this.writeValue(e.flags)}writeBinary(e,t){this.pool.writeVarint(0),this.pool.writeVarint(0)}writeSpecial(e,t){switch(t){case Pe:var r=e.description;this.writeValue(r);break;case $e:break;case Re:r=Symbol.keyFor(e),this.writeValue(r||"");break;case De:r=Ye.get(e),this.writeValue(r||"")}}writeExtension(e,t){}deserialize(e){if(this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset),this.pos=0,this.deserializeRefs=[],this.deserializeStrings=[],this.deserializeBuffers=[],1413632565!==this.readU32())throw new Error("Invalid TurboSerial data");if(5!==(e=this.readU8()))throw new Error("Unsupported version: "+e);return this.readValue()}readValue(){if(this.pos>=this.buffer.length)throw new Error("Unexpected end of buffer");var e=this.readU8();if(e==Fe||e==je){var t=this.readVarint();if(t>=this.deserializeRefs.length)throw new Error("Invalid reference: "+t);return this.deserializeRefs[t]}if(e==H){if((t=this.readVarint())>=this.deserializeStrings.length)throw new Error("Invalid string reference: "+t);return this.deserializeStrings[t]}if(e==ve){if((t=this.readVarint())>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return this.deserializeBuffers[t]}let r,v=!1;switch(t=e&i){case l:case h:case f:v=!0}if(v){switch(t){case h:r=[];break;case f:e==Ue?r=new Map:e==Ve&&(r=new Set);break;case l:r={}}switch(r&&this.deserializeRefs.push(r),t){case h:this.fillArray(r,e);break;case l:this.fillObject(r,e);break;case f:this.fillCollection(r,e)}}else{switch(t){case s:r=this.readPrimitive(e);break;case a:r=this.readNumber(e);break;case n:r=this.readBigInt(e);break;case o:r=this.readString(e);break;case c:r=this.readTypedArray(e);break;case u:r=this.readArrayBuffer(e);break;case p:r=this.readDate(e);break;case w:r=this.readError(e);break;case d:r=this.readRegExp();break;case y:r=this.readBinary(e);break;case g:r=this.readSpecial(e);break;case b:r=this.readExtension(e);break;default:throw new Error("Unknown type: 0x"+e.toString(16))}"object"!=typeof r||null==r||v||this.deserializeRefs.push(r)}return r}fillArray(e,t){switch(t){case Y:break;case q:var r=this.readVarint();for(let t=0;t<r;t++)e[t]=this.readValue();break;case G:var i=this.readVarint(),s=this.readVarint();e.length=i;for(let t=0;t<s;t++)e[this.readVarint()]=this.readValue();break;case J:case K:case Q:case X:case Z:i=this.readPackedArrayData(t),e.push(...i)}}fillObject(e,t){if(t!=ee)switch(t){case re:case te:this.fillSimpleObject(e);break;case se:this.fillObjectWithDescriptors(e);break;case ae:this.fillObjectWithMethods(e);break;case ie:this.fillConstructorObject(e)}}fillSimpleObject(e){var t=this.readVarint();for(let r=0;r<t;r++)e[this.readValue()]=this.readValue()}fillObjectWithDescriptors(e){var t=this.readVarint();for(let n=0;n<t;n++){var r=this.readValue(),i={enumerable:!!(1&(a=this.readU8())),writable:!!(2&a),configurable:!!(4&a)},s=!!(8&a),a=!!(16&a);s||a?(s&&(i.get=this.readValue()),a&&(i.set=this.readValue())):i.value=this.readValue(),Object.defineProperty(e,r,i)}}fillObjectWithMethods(e){var t=this.readVarint();for(let s=0;s<t;s++){var r=this.readValue();if(this.readU8())if(this.options.serializeFunctions){var i=this.readValue();this.readValue();try{e[r]=new Function("return "+i)()}catch(t){e[r]=function(){throw new Error("Function deserialization failed")}}}else this.readU8()===Ne&&(e[r]=function(){throw new Error("Function not serialized")});else e[r]=this.readValue()}}fillConstructorObject(e){var t=this.readValue(),r=this.readVarint();for(let t=0;t<r;t++)e[this.readValue()]=this.readValue();Object.defineProperty(e,"__constructorName",{value:t,enumerable:!1,writable:!1,configurable:!0})}fillCollection(e,t){var r=this.readVarint();switch(t){case Ue:for(let t=0;t<r;t++){var i=this.readValue(),s=this.readValue();e.set(i,s)}break;case Ve:for(let t=0;t<r;t++)e.add(this.readValue())}}readPrimitive(e){switch(e){case v:return null;case A:return;case U:return!1;case V:return!0;default:throw new Error("Unknown primitive: 0x"+e.toString(16))}}readNumber(e){switch(e){case m:return this.view.getInt8(this.pos++);case k:return this.readI16();case E:return this.readI32();case x:return this.readU32();case S:return this.readF32();case _:return this.readF64();case I:return NaN;case B:return 1/0;case C:return-1/0;case O:return-0;case T:var t=this.readVarint();return this.readU8()?-t:t;default:throw new Error("Unknown number type: 0x"+e.toString(16))}}readBigInt(e){switch(e){case M:case L:return this.readBigInt64();case z:case F:return this.readLargeBigInt(e==F);default:throw new Error("Unknown BigInt type: 0x"+e.toString(16))}}readLargeBigInt(e){var t=this.readVarint(),r=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t;let i="";for(let e=r.length-1;0<=e;e--)i+=r[e].toString(16).padStart(2,"0");return t=BigInt("0x"+i),e?-t:t}readString(e){if(e==j)return"";let t,r;switch(e){case P:case R:case $:case N:t=this.readU8();break;default:t=this.readVarint()}if(this.ensureBytes(t),e==P||e==R||e==D){r="";for(let e=0;e<t;e++)r+=String.fromCharCode(this.readU8())}else e=this.buffer.subarray(this.pos,this.pos+t),this.pos+=t,r=this.decoder.decode(e);return this.deserializeStrings.push(r),r}readPackedArrayData(e){var t=this.readVarint(),r=new Array(t),i=He[e];if(!i)throw new Error("Unknown packed array type: 0x"+e.toString(16));switch(this.alignPos(Math.min(i,8)),this.ensureBytes(t*i),e){case J:for(let e=0;e<t;e++)r[e]=this.view.getInt8(this.pos++);break;case K:for(let e=0;e<t;e++)r[e]=this.view.getInt16(this.pos,!0),this.pos+=2;break;case Q:for(let e=0;e<t;e++)r[e]=this.view.getInt32(this.pos,!0),this.pos+=4;break;case X:for(let e=0;e<t;e++)r[e]=this.view.getFloat32(this.pos,!0),this.pos+=4;break;case Z:for(let e=0;e<t;e++)r[e]=this.view.getFloat64(this.pos,!0),this.pos+=8}return r}readTypedArray(e){if(this.readU8()){var t=this.readVarint(),r=this.readVarint(),i=this.readVarint();if(t>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return t=this.deserializeBuffers[t],this.createTypedArray(e,t,r,i)}this.readVarint();var s=this.readVarint();t=He[e]||1;if(e!=de&&e!=ye)return r=s*t,this.alignPos(t),this.ensureBytes(r),i=this.buffer.subarray(this.pos,this.pos+r),this.pos+=r,t=new ArrayBuffer(r),new Uint8Array(t).set(i),this.deserializeBuffers.push(t),this.createTypedArray(e,t,0,s);this.alignPos(8);var a=[];for(let e=0;e<s;e++)a.push(this.readBigInt64());return new(e==de?BigInt64Array:BigUint64Array)(a)}createTypedArray(e,t,r,i){var s={[ne]:Uint8Array,[oe]:Int8Array,[he]:Uint8ClampedArray,[le]:Uint16Array,[ce]:Int16Array,[ue]:Uint32Array,[fe]:Int32Array,[pe]:Float32Array,[we]:Float64Array,[de]:BigInt64Array,[ye]:BigUint64Array,[ge]:DataView}[e];if(s)return new s(t,r,i);throw new Error("Unknown typed array type: 0x"+e.toString(16))}readArrayBuffer(e){var t=this.readVarint(),r=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t,t=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return this.deserializeBuffers.push(t),t}readDate(e){switch(e){case me:return new Date(this.readF64());case ke:return new Date(NaN);default:throw new Error("Unknown date type: 0x"+e.toString(16))}}readError(e){var t=this.readValue(),r=this.readValue();let i;var s={[Ee]:Error,[xe]:EvalError,[Se]:RangeError,[_e]:ReferenceError,[Ie]:SyntaxError,[Be]:TypeError,[Ce]:URIError}[e]||Error;if(e==Oe){var a=this.readVarint(),n=[];for(let e=0;e<a;e++)n.push(this.readValue());i=new AggregateError(n,t)}else i=new s(t);return r&&(i.stack=r),i}readRegExp(){var e=this.readValue(),t=this.readValue();return new RegExp(e,t)}readBinary(e){return{_type:"Binary",size:this.readVarint(),typeStr:this.readVarint()}}readSpecial(e){switch(e){case Pe:var t=this.readValue();return Symbol(t);case $e:return Symbol();case Re:return t=this.readValue(),Symbol.for(t);case De:return t=this.readValue(),qe.get(t)||Symbol(t);default:throw new Error("Unknown special type: 0x"+e.toString(16))}}readExtension(e){if(e!==Ne)throw new Error("Unknown extension type: 0x"+e.toString(16));return function(){throw new Error("Function not serialized")}}readU8(){return this.ensureBytes(1),this.buffer[this.pos++]}readI16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getInt16(this.pos,!0);return this.pos+=2,e}readU16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}readI32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}readU32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}readF32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getFloat32(this.pos,!0);return this.pos+=4,e}readF64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getFloat64(this.pos,!0);return this.pos+=8,e}readBigInt64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getBigInt64(this.pos,!0);return this.pos+=8,e}readVarint(){let e=0,t=0;for(var r;this.ensureBytes(1),e|=(127&(r=this.buffer[this.pos++]))<<t,t+=7,128&r;);return e>>>0}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}ensureBytes(e){if(this.pos+e>this.buffer.length)throw new Error(`Buffer underflow: need ${e}, available `+(this.buffer.length-this.pos))}}({compression:!0,deduplication:!0,shareArrayBuffers:!0,simdOptimization:!0,detectCircular:!0});new rt.a,new class{constructor(){this._connections=new Map,this._refCounts=new Map}async getConnection(e,t=1,r){var i,s=e+"_v"+t;return this._connections.has(s)?(this._refCounts.set(s,(this._refCounts.get(s)||0)+1),this._connections.get(s)):(i=await new Promise((i,s)=>{let a=indexedDB.open(e,t);a.onerror=()=>s(new st("Failed to open database","DATABASE_OPEN_FAILED",a.error)),a.onsuccess=()=>i(a.result),a.onupgradeneeded=e=>{r&&r(e.target.result,e.oldVersion,e.newVersion)}}),this._connections.set(s,i),this._refCounts.set(s,1),i)}releaseConnection(e,t=1){e=e+"_v"+t;1<(t=this._refCounts.get(e)||0)?this._refCounts.set(e,t-1):(t=this._connections.get(e))&&(t.close(),this._connections.delete(e),this._refCounts.delete(e))}closeAll(){for(var e of this._connections.values())e.close();this._connections.clear(),this._refCounts.clear()}};class st extends Error{constructor(e,t,r){super(e),this.name="LacertaDBError",this.code=t,this.originalError=r||null,this.timestamp=(new Date).toISOString()}}let at=new class{constructor(){this.operators={$eq:(e,t)=>e===t,$ne:(e,t)=>e!==t,$gt:(e,t)=>t<e,$gte:(e,t)=>t<=e,$lt:(e,t)=>e<t,$lte:(e,t)=>e<=t,$in:(e,t)=>Array.isArray(t)&&t.includes(e),$nin:(e,t)=>Array.isArray(t)&&!t.includes(e),$and:(e,t)=>t.every(t=>this.evaluate(e,t)),$or:(e,t)=>t.some(t=>this.evaluate(e,t)),$not:(e,t)=>!this.evaluate(e,t),$nor:(e,t)=>!t.some(t=>this.evaluate(e,t)),$exists:(e,t)=>void 0!==e===t,$type:(e,t)=>typeof e===t,$all:(e,t)=>Array.isArray(e)&&t.every(t=>e.includes(t)),$elemMatch:(e,t)=>Array.isArray(e)&&e.some(e=>this.evaluate({value:e},{value:t})),$size:(e,t)=>Array.isArray(e)&&e.length===t,$regex:(e,t)=>{if("string"!=typeof e)return!1;try{return new RegExp(t).test(e)}catch{return!1}},$text:(e,t)=>"string"==typeof e&&e.toLowerCase().includes(t.toLowerCase())}}evaluate(e,t){for(var r in t){var i=t[r];if(r.startsWith("$")){var s=this.operators[r];if(!s||!s(e,i))return!1}else{var a=this.getFieldValue(e,r);if("object"!=typeof i||null===i||Array.isArray(i)){if(a!==i)return!1}else for(var n in i)if(n.startsWith("$")){var o=this.operators[n];if(!o||!o(a,i[n]))return!1}}}return!0}getFieldValue(e,t){let r=e;for(var i of t.split(".")){if(null==r)return;r=r[i]}return r}};new class{constructor(){this.stages={$match:(e,t)=>e.filter(e=>at.evaluate(e,t)),$project:(e,t)=>e.map(e=>{var r,i={};for(r in t){var s=t[r];1===s||!0===s?i[r]=at.getFieldValue(e,r):"string"==typeof s&&s.startsWith("$")&&(i[r]=at.getFieldValue(e,s.substring(1)))}if(Object.values(t).some(e=>0===e||!1===e)){var a=Object.keys(t).filter(e=>0===t[e]||!1===t[e]);let r={...e};return a.forEach(e=>delete r[e]),r}return i}),$sort:(e,t)=>[...e].sort((e,r)=>{for(var i in t){var s=t[i],a=at.getFieldValue(e,i);if(a<(i=at.getFieldValue(r,i)))return-s;if(i<a)return s}return 0}),$limit:(e,t)=>e.slice(0,t),$skip:(e,t)=>e.slice(t),$group:(e,t)=>{var r,i=new Map,s=t._id;for(r of e){var a="string"==typeof s?at.getFieldValue(r,s.replace("$","")):it.serialize(s);i.has(a)||i.set(a,{_id:a,docs:[]}),i.get(a).docs.push(r)}var n,o=[];for(n of i.values()){var h,l={_id:n._id};for(h in t)if("_id"!==h){var c=t[h],u=Object.keys(c)[0];let e=c[u].toString().replace("$","");switch(u){case"$sum":l[h]=n.docs.reduce((t,r)=>t+(at.getFieldValue(r,e)||0),0);break;case"$avg":var f=n.docs.reduce((t,r)=>t+(at.getFieldValue(r,e)||0),0);l[h]=f/n.docs.length;break;case"$count":l[h]=n.docs.length;break;case"$max":l[h]=Math.max(...n.docs.map(t=>at.getFieldValue(t,e)));break;case"$min":l[h]=Math.min(...n.docs.map(t=>at.getFieldValue(t,e)))}}o.push(l)}return o},$lookup:async(e,t,r)=>{r=await(await r.getCollection(t.from)).getAll();let i=new Map;return r.forEach(e=>{var r=at.getFieldValue(e,t.foreignField);i.has(r)||i.set(r,[]),i.get(r).push(e)}),e.map(e=>{var r=at.getFieldValue(e,t.localField);return{...e,[t.as]:i.get(r)||[]}})}}}async execute(e,t,r){let i=e;for(var s of t){var a=Object.keys(s)[0],n=(s=s[a],this.stages[a]);if(!n)throw new Error("Unknown aggregation stage: "+a);i="$lookup"===a?await n(i,s,r):n(i,s)}return i}}}]);
|
|
1
|
+
(e=>{var t={};function i(r){var s;return(t[r]||(s=t[r]={i:r,l:!1,exports:{}},e[r].call(s.exports,s,s.exports,i),s.l=!0,s)).exports}i.m=e,i.c=t,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(r,s,function(t){return e[t]}.bind(null,s));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)})([function(e,t){var i={},r=new Float32Array(4);function s(e,t){if((0|e)!==e)throw new TypeError("Lane index must be an int32");if(e<0||t<=e)throw new RangeError("Lane index must be in bounds")}new Int32Array(r.buffer),new Int16Array(r.buffer),new Int8Array(r.buffer),new Uint32Array(r.buffer),new Uint16Array(r.buffer),new Uint8Array(r.buffer),void 0!==i.Int8x16&&void 0!==i.Int8x16.extractLane||(i.Int8x16=function(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m){if(!(this instanceof i.Int8x16))return new i.Int8x16(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m);this.s_=new Int8Array([e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m])},i.Int8x16.check=function(e){if(e instanceof i.Int8x16)return e;throw new TypeError("Argument is not a Int8x16.")},i.Int8x16.splat=function(e){return new i.Int8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},i.Int8x16.extractLane=function(e,t){return e=i.Int8x16.check(e),s(t,16),e.s_[t]},i.Int8x16.replaceLane=function(e,t,r){return e=i.Int8x16.check(e),s(t,16),(e=Array.from(e.s_))[t]=r,new i.Int8x16(...e)},i.Int8x16.shuffle=function(e,t,r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g){var v=[r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g],b=[];e=i.Int8x16.check(e),t=i.Int8x16.check(t);for(var A=0;A<16;A++){var x=v[A];s(x,32),b[A]=x<16?e.s_[x]:t.s_[x-16]}return new i.Int8x16(...b)}),void 0!==i.Uint8x16&&void 0!==i.Uint8x16.extractLane||(i.Uint8x16=function(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m){if(!(this instanceof i.Uint8x16))return new i.Uint8x16(e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m);this.s_=new Uint8Array([e,t,r,s,a,n,o,h,c,l,d,u,f,p,_,m])},i.Uint8x16.check=function(e){if(e instanceof i.Uint8x16)return e;throw new TypeError("Argument is not a Uint8x16.")},i.Uint8x16.splat=function(e){return new i.Uint8x16(e,e,e,e,e,e,e,e,e,e,e,e,e,e,e,e)},i.Uint8x16.extractLane=function(e,t){return e=i.Uint8x16.check(e),s(t,16),e.s_[t]},i.Uint8x16.load=function(e,t){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return new i.Uint8x16(...e.subarray(t,t+16))},i.Uint8x16.store=function(e,t,i){if(t<0||t*e.BYTES_PER_ELEMENT+16>e.byteLength)throw new RangeError("The value of index is invalid.");return e.set(i.s_,t),i},i.Uint8x16.shuffle=function(e,t,r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g){var v=[r,a,n,o,h,c,l,d,u,f,p,_,m,y,w,g],b=[];e=i.Uint8x16.check(e),t=i.Uint8x16.check(t);for(var A=0;A<16;A++){var x=v[A];s(x,32),b[A]=x<16?e.s_[x]:t.s_[x-16]}return new i.Uint8x16(...b)},i.Uint8x16.and=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]&t.s_[s];return new i.Uint8x16(...r)},i.Uint8x16.or=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]|t.s_[s];return new i.Uint8x16(...r)},i.Uint8x16.shiftLeftByScalar=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]<<t;return new i.Uint8x16(...r)},i.Uint8x16.shiftRightByScalar=function(e,t){for(var r=[],s=0;s<16;++s)r[s]=e.s_[s]>>>t;return new i.Uint8x16(...r)}),e.exports=class{constructor(){this.ENC_SHUFFLE=i.Int8x16(10,11,9,10,7,8,6,7,4,5,3,4,1,2,0,1),this.ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.ENC_LUT_SIMD=[i.Uint8x16.splat(0),i.Uint8x16.splat(0),i.Uint8x16.splat(0),i.Uint8x16.splat(0)];for(let t=0;t<4;t++){var e=this.ENC_LUT.substring(16*t,16*(t+1));this.ENC_LUT_SIMD[t]=i.Uint8x16(...Array.from(e).map(e=>e.charCodeAt(0)))}this.DEC_DELTA_ASSO=i.Uint8x16(1,1,1,1,1,1,1,1,0,0,0,0,0,15,0,15),this.DEC_DELTA_VALUES=i.Int8x16(0,0,0,19,4,191,191,185,185,0,16,195,191,191,185,185),this.DEC_SHUFFLE=i.Int8x16(-1,-1,-1,-1,12,13,14,8,9,10,4,5,6,0,1,2),this.SCALAR_ENC_LUT="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",this.SCALAR_DEC_LUT={};for(let e=0;e<this.SCALAR_ENC_LUT.length;e++)this.SCALAR_DEC_LUT[this.SCALAR_ENC_LUT.charAt(e)]=e;this.SCALAR_DEC_LUT["="]=0}_scalar_encode(e){let t="";for(let a=0;a<e.length;a+=3){var i=e[a],r=a+1<e.length?e[a+1]:0,s=a+2<e.length?e[a+2]:0;t+=this.SCALAR_ENC_LUT[i>>2]+this.SCALAR_ENC_LUT[(3&i)<<4|r>>4],a+1<e.length?t+=this.SCALAR_ENC_LUT[(15&r)<<2|s>>6]:t+="=",a+2<e.length?t+=this.SCALAR_ENC_LUT[63&s]:t+="="}return t}encode(e){var t=e.length,i=4*Math.ceil(t/3),r=new Uint8Array(i);let s=0,a=0;for(;s+12<=t;){var n=e.subarray(s,s+12),o=new Uint8Array(16);o[0]=n[0]>>2,o[1]=(3&n[0])<<4|n[1]>>4,o[2]=(15&n[1])<<2|n[2]>>6,o[3]=63&n[2],o[4]=n[3]>>2,o[5]=(3&n[3])<<4|n[4]>>4,o[6]=(15&n[4])<<2|n[5]>>6,o[7]=63&n[5],o[8]=n[6]>>2,o[9]=(3&n[6])<<4|n[7]>>4,o[10]=(15&n[7])<<2|n[8]>>6,o[11]=63&n[8],o[12]=n[9]>>2,o[13]=(3&n[9])<<4|n[10]>>4,o[14]=(15&n[10])<<2|n[11]>>6,o[15]=63&n[11];for(let e=0;e<16;e++)r[a+e]=this.SCALAR_ENC_LUT.charCodeAt(o[e]);s+=12,a+=16}let h=(new TextDecoder).decode(r.subarray(0,a));return s<t&&(h+=this._scalar_encode(e.subarray(s))),h}_scalar_decode(e){e=e.replace(/=+$/,"");var t=Math.floor(3*e.length/4),i=new Uint8Array(t);let r=0;for(let h=0;h<e.length;h+=4){var s=this.SCALAR_DEC_LUT[e[h]],a=this.SCALAR_DEC_LUT[e[h+1]],n=h+2<e.length?this.SCALAR_DEC_LUT[e[h+2]]:0,o=h+3<e.length?this.SCALAR_DEC_LUT[e[h+3]]:0;i[r++]=s<<2|a>>4,r<t&&(i[r++]=(15&a)<<4|n>>2),r<t&&(i[r++]=(3&n)<<6|o)}return i}decode(e){var t=e.length;if(t%4!=0)throw new Error("Invalid Base64 string length.");var i=(e.match(/=/g)||[]).length,r=new Uint8Array(3*t/4-i);let s=0,a=0;for(var n;s+16<=t-i;){var o=Array.from(e.substring(s,s+16)).map(e=>this.SCALAR_DEC_LUT[e]),h=new Uint8Array(12);h[0]=o[0]<<2|o[1]>>4,h[1]=(15&o[1])<<4|o[2]>>2,h[2]=(3&o[2])<<6|o[3],h[3]=o[4]<<2|o[5]>>4,h[4]=(15&o[5])<<4|o[6]>>2,h[5]=(3&o[6])<<6|o[7],h[6]=o[8]<<2|o[9]>>4,h[7]=(15&o[9])<<4|o[10]>>2,h[8]=(3&o[10])<<6|o[11],h[9]=o[12]<<2|o[13]>>4,h[10]=(15&o[13])<<4|o[14]>>2,h[11]=(3&o[14])<<6|o[15],r.set(h,a),s+=16,a+=12}return s<t&&(n=this._scalar_decode(e.substring(s)),r.set(n,a)),r}}},function(e,t,i){i.r(t);let r=240,s=0,a=16,n=32,o=48,h=64,c=80,l=96,d=112,u=128,f=144,p=160,_=176,m=192,y=224,w=240,g=0,v=1,b=2,A=3,x=16,S=17,k=18,E=19,z=20,U=21,I=22,D=23,M=24,B=25,C=26,V=32,L=33,T=34,O=35,P=48,F=49,$=50,j=51,R=52,K=53,N=54,q=55,H=64,W=65,G=66,Q=67,Y=68,X=69,J=70,Z=71,ee=80,te=81,ie=82,re=83,se=84,ae=85,ne=96,oe=97,he=98,ce=99,le=100,de=101,ue=102,fe=103,pe=104,_e=105,me=106,ye=107,we=112,ge=113,ve=114,be=128,Ae=129,xe=144,Se=145,ke=160,Ee=161,ze=162,Ue=163,Ie=164,De=165,Me=166,Be=167,Ce=168,Ve=176,Le=192,Te=193,Oe=208,Pe=209,Fe=224,$e=225,je=226,Re=227,Ke=240,Ne=new Uint8Array(256),qe=new Uint8Array(256);new Map;let He=new Map,We=new Map;var Ge=[[S,2],[k,4],[E,4],[z,4],[U,8],[V,8],[L,8]];for(let e=0;e<Ge.length;e++)Ne[Ge[e][0]]=Ge[e][1];var Qe,Ye=[[ne,1],[oe,1],[he,1],[ce,2],[le,2],[de,4],[ue,4],[fe,4],[pe,8],[_e,8],[me,8],[Q,1],[Y,2],[X,4],[J,4],[Z,8]];for(let e=0;e<Ye.length;e++)qe[Ye[e][0]]=Ye[e][1];for(Qe of["asyncIterator","hasInstance","isConcatSpreadable","iterator","match","matchAll","replace","search","species","split","toPrimitive","toStringTag","unscopables"]){var Xe=Symbol[Qe];Xe&&(He.set(Xe,Qe),We.set(Qe,Xe))}class Je{constructor(e=65536){this.size=(e+128-1&-128)>>>0,this.buffer=new ArrayBuffer(this.size),this.offset=0,this.u8=new Uint8Array(this.buffer),this.view=new DataView(this.buffer),this.pos=0,this.f32View=null,this.f64View=null,this.i32View=null}ensure(e){var t,i;(e=this.pos+(e|=0)|0)>this.size&&(e=(128+(0|Math.max(this.size<<1,128+e))-1&-128)>>>0,t=new ArrayBuffer(e),(i=new Uint8Array(t)).set(this.u8.subarray(0,this.pos)),this.buffer=t,this.u8=i,this.view=new DataView(t),this.size=e,this.f32View=null,this.f64View=null,this.i32View=null)}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}writeU8(e){this.ensure(1),this.u8[this.pos++]=255&e}writeU16(e){this.alignPos(2),this.ensure(2),this.view.setUint16(this.pos,65535&e,!0),this.pos=this.pos+2|0}writeI16(e){this.alignPos(2),this.ensure(2),this.view.setInt16(this.pos,e,!0),this.pos=this.pos+2|0}writeU32(e){this.alignPos(4),this.ensure(4),this.view.setUint32(this.pos,e>>>0,!0),this.pos=this.pos+4|0}writeI32(e){this.alignPos(4),this.ensure(4),this.view.setInt32(this.pos,0|e,!0),this.pos=this.pos+4|0}writeF32(e){this.alignPos(4),this.ensure(4),this.view.setFloat32(this.pos,+e,!0),this.pos=this.pos+4|0}writeF64(e){this.alignPos(8),this.ensure(8),this.view.setFloat64(this.pos,+e,!0),this.pos=this.pos+8|0}writeBigInt64(e){this.alignPos(8),this.ensure(8),this.view.setBigInt64(this.pos,BigInt(e),!0),this.pos=this.pos+8|0}writeVarint(e){if(e>>>=0,this.ensure(5),e<128)this.u8[this.pos++]=e;else if(e<16384)this.u8[this.pos]=127&e|128,this.u8[this.pos+1]=e>>>7,this.pos=this.pos+2|0;else{let t=this.pos;for(;this.u8[t++]=127&e|128,128<=(e>>>=7););this.u8[t++]=e,this.pos=t}}writePackedArray(e,t){var i=0|e.length,r=(this.writeVarint(i),0|qe[t]);if(!r)throw new Error("Unknown element type: 0x"+t.toString(16));switch(this.alignPos(Math.min(r,8)),this.ensure(i*r),t){case Q:new Int8Array(this.buffer,this.pos,i).set(e),this.pos=this.pos+i|0;break;case Y:var s=new Int16Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)s[t]=0|e[t];this.pos=this.pos+(i<<1)|0;break;case X:var a=new Int32Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)a[t]=0|e[t];this.pos=this.pos+(i<<2)|0;break;case J:var n=new Float32Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)n[t]=+e[t];this.pos=this.pos+(i<<2)|0;break;case Z:var o=new Float64Array(this.buffer,this.pos,i);for(let t=0;t<i;t++)o[t]=+e[t];this.pos=this.pos+(i<<3)|0;break;default:throw new Error("Unsupported packed array type: 0x"+t.toString(16))}}writeBulkAligned(e,t){var i;t=Math.min(t,8),this.alignPos(t),t=e.byteLength||e.length;this.ensure(t),e.buffer&&void 0!==e.byteOffset?(i=new Uint8Array(e.buffer,e.byteOffset,t),this.u8.set(i,this.pos)):this.u8.set(e,this.pos),this.pos=this.pos+t|0}reset(){this.pos=0}getResult(){return this.u8.subarray(0,this.pos)}}class Ze{constructor(){this.blockSize=16}canOptimize(e){var t=e.length;if(!(8<=t&(0==(t&t-1)||16<=t)))return!1;var i=typeof e[0];if("number"!=i)return!1;var r=Math.max(1,t>>>5|0);for(let s=r;s<t;s+=r)if(typeof e[s]!=i)return!1;return!0}analyzeNumericArray(e){let t=1,i=1/0,r=-1/0,s=1;var a,n=e.length;for(let a=0;a<n;a++){var o=e[a];t&=+(o==(0|o)),i=Math.min(i,o),r=Math.max(r,o),s&&(s&=+(Math.fround(o)==o))}return t?(a=+((a=Math.max(Math.abs(i),Math.abs(r)))<=127)<<0|+(a<=32767)<<1|+(a<=2147483647)<<2,[{type:X,elementSize:4},{type:Q,elementSize:1},{type:Y,elementSize:2},{type:X,elementSize:4}][3&a]):s?{type:J,elementSize:4}:{type:Z,elementSize:8}}}class et{constructor(){this.simdProcessor=new Ze,this.constructorMap=new Map,this.typeNameMap=new Map,this.errorTypeMap=new Map,this.initMaps()}initMaps(){var e,t,i,r,s=[[Date,xe],[RegExp,Ve],[Map,be],[Set,Ae],[ArrayBuffer,we],[DataView,ye]],a=[["Uint8Array",ne],["Int8Array",oe],["Uint8ClampedArray",he],["Uint16Array",ce],["Int16Array",le],["Uint32Array",de],["Int32Array",ue],["Float32Array",fe],["Float64Array",pe],["BigInt64Array",_e],["BigUint64Array",me],["SharedArrayBuffer",ve]];for([e,t]of s)this.constructorMap.set(e,t);for([i,r]of a){var n=globalThis[i];n&&(this.constructorMap.set(n,r),this.typeNameMap.set(i,r))}this.errorTypeMap.set("Error",ke),this.errorTypeMap.set("EvalError",Ee),this.errorTypeMap.set("RangeError",ze),this.errorTypeMap.set("ReferenceError",Ue),this.errorTypeMap.set("SyntaxError",Ie),this.errorTypeMap.set("TypeError",De),this.errorTypeMap.set("URIError",Me),this.errorTypeMap.set("AggregateError",Be)}detect(e){if(null==e)return null===e?g:v;switch(typeof e){case"boolean":return e?A:b;case"number":return this.detectNumber(e);case"bigint":return this.detectBigInt(e);case"string":return this.detectString(e);case"symbol":return this.detectSymbol(e);case"object":return this.detectObject(e);default:return v}}detectNumber(e){var t,i,r;return e!=e?I:(r=new Float64Array([e]),((t=(r=new Uint32Array(r.buffer))[1])&(i=2146435072))==i&0==r[0]&0==(1048575&t)?t>>>31?M:D:0==e&&t>>>31?B:e==(0|e)?(r=+((i=Math.abs(e))<=127)<<0|+(i<=32767)<<1|+(i<=2147483647)<<2,[C,x,S,k][Math.min(r,3)]):Math.fround(e)==e?z:U)}detectBigInt(e){var t=e<0n;return(t?-e:e)<=0x7fffffffffffffffn?t?L:V:t?O:T}detectString(e){var t,i=e.length;if(0==i)return P;let r=1;for(let t=0;t<i&&r;t++)r&=+(e.charCodeAt(t)<=127);return r?i<16?F:i<256?$:j:(t=(new TextEncoder).encode(e).length)<16?R:t<256?K:N}detectSymbol(e){return void 0!==Symbol.keyFor(e)?$e:He.has(e)?je:void 0===e.description?Re:Fe}detectObject(e){var t,i;return null==e?g:(t=e.constructor,void 0!==(t=this.constructorMap.get(t))?t==xe?(i=e.getTime())==i?xe:Se:t:Array.isArray(e)?this.detectArray(e):ArrayBuffer.isView(e)?this.detectTypedArrayType(e):e instanceof Error?this.detectErrorType(e):"undefined"!=typeof Blob&&e instanceof Blob?e instanceof File?Te:Le:this.classifyObject(e))}classifyObject(e){var t=Object.getPrototypeOf(e);if(e.constructor!=Object&&t!=Object.prototype&&null!=t)return re;t=Object.getOwnPropertyNames(e);var i,r=Object.getOwnPropertySymbols(e);if(0===(t=[...t,...r]).length)return ee;let s=!1,a=!1;for(i of t){var n=Object.getOwnPropertyDescriptor(e,i);if(n.get||n.set){s=!0;break}"function"==typeof n.value&&(a=!0),n.enumerable&&n.writable&&n.configurable||(s=!0)}return s?se:a?ae:ie}detectArray(e){var t=e.length;if(0==t)return H;let i=0,r=!1;for(let s=0;s<t;s++)s in e?i++:r=!0;return r||i<3*t>>>2?G:this.simdProcessor.canOptimize(e)?this.simdProcessor.analyzeNumericArray(e).type:W}detectTypedArrayType(e){return e=e.constructor.name,this.typeNameMap.get(e)||ne}detectErrorType(e){return e=e.constructor.name,this.errorTypeMap.get(e)||Ce}}var tt=i(0);tt=i.n(tt);i.d(t,"LacertaDB",(function(){return Ct})),i.d(t,"Database",(function(){return Bt})),i.d(t,"Collection",(function(){return Mt})),i.d(t,"Document",(function(){return xt})),i.d(t,"MigrationManager",(function(){return It})),i.d(t,"PerformanceMonitor",(function(){return Dt})),i.d(t,"LacertaDBError",(function(){return ht})),i.d(t,"OPFSUtility",(function(){return bt})),i.d(t,"IndexManager",(function(){return vt})),i.d(t,"CacheStrategy",(function(){return ut})),i.d(t,"LRUCache",(function(){return ct})),i.d(t,"LFUCache",(function(){return lt})),i.d(t,"TTLCache",(function(){return dt})),i.d(t,"BTreeIndex",(function(){return yt})),i.d(t,"TextIndex",(function(){return wt})),i.d(t,"GeoIndex",(function(){return gt})),i.d(t,"SecureDatabaseEncryption",(function(){return _t})),i.d(t,"QuickStore",(function(){return st})),i.d(t,"AsyncMutex",(function(){return ot})),i.d(t,"IndexedDBConnectionPool",(function(){return at}));
|
|
2
|
+
/**
|
|
3
|
+
* LacertaDB V0.7.0 - Production Library with QuickStore
|
|
4
|
+
* Added: QuickStore feature, private property/method conventions
|
|
5
|
+
* @version 0.7.0
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
let it=new class{constructor(e={}){this.options={compression:e.compression||!1,deduplication:!1!==e.deduplication,shareArrayBuffers:!1!==e.shareArrayBuffers,simdOptimization:!1!==e.simdOptimization,detectCircular:!1!==e.detectCircular,serializeFunctions:e.serializeFunctions||!1,preservePropertyDescriptors:!1!==e.preservePropertyDescriptors,memoryPoolSize:e.memoryPoolSize||65536,...e},this.pool=new Je(this.options.memoryPoolSize),this.detector=new et,this.simdProcessor=new Ze,this.refs=new Map,this.circularRefs=new Set,this.strings=new Map,this.buffers=new Map,this.encoder=new TextEncoder,this.decoder=new TextDecoder}serialize(e){return this.resetState(),this.pool.writeU32(1413632565),this.pool.writeU8(5),this.options.detectCircular&&this.detectCircularReferences(e,new WeakSet),this.writeValue(e),this.pool.getResult()}resetState(){this.pool.reset(),this.refs.clear(),this.circularRefs.clear(),this.strings.clear(),this.buffers.clear()}detectCircularReferences(e,t){if("object"==typeof e&&null!=e)if(t.has(e))this.circularRefs.add(e);else{t.add(e);try{if(Array.isArray(e))for(let i=0;i<e.length;i++)i in e&&this.detectCircularReferences(e[i],t);else if(e instanceof Map)for(var[i,r]of e)this.detectCircularReferences(i,t),this.detectCircularReferences(r,t);else if(e instanceof Set)for(var s of e)this.detectCircularReferences(s,t);else for(var a in e)if(e.hasOwnProperty(a))try{this.detectCircularReferences(e[a],t)}catch(i){}}finally{t.delete(e)}}}writeValue(e){if(this.options.detectCircular&&"object"==typeof e&&null!=e&&this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(Pe),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"object"==typeof e&&null!=e&&!this.circularRefs.has(e)){if(void 0!==(t=this.refs.get(e)))return this.pool.writeU8(Oe),void this.pool.writeVarint(t);this.refs.set(e,this.refs.size)}if(this.options.deduplication&&"string"==typeof e&&3<e.length){if(void 0!==(t=this.strings.get(e)))return this.pool.writeU8(q),void this.pool.writeVarint(t);this.strings.set(e,this.strings.size)}if(this.options.shareArrayBuffers&&e instanceof ArrayBuffer){if(void 0!==(t=this.buffers.get(e)))return this.pool.writeU8(ge),void this.pool.writeVarint(t);this.buffers.set(e,this.buffers.size)}var t,i=this.detector.detect(e);switch(t=(this.pool.writeU8(i),i&r)){case s:break;case a:this.writeNumber(e,i);break;case n:this.writeBigInt(e,i);break;case o:this.writeString(e,i);break;case h:this.writeArray(e,i);break;case c:this.writeObject(e,i);break;case l:this.writeTypedArray(e,i);break;case d:this.writeArrayBuffer(e,i);break;case u:this.writeCollection(e,i);break;case f:this.writeDate(e,i);break;case p:this.writeError(e,i);break;case _:this.writeRegExp(e);break;case m:this.writeBinary(e,i);break;case y:this.writeSpecial(e,i);break;case w:this.writeExtension(e,i)}}writeNumber(e,t){switch(t){case x:this.pool.writeU8(e);break;case S:this.pool.writeI16(e);break;case k:this.pool.writeI32(e);break;case E:this.pool.writeU32(e);break;case z:this.pool.writeF32(e);break;case U:this.pool.writeF64(e);break;case C:var i=e<0;this.pool.writeVarint(Math.abs(e)),this.pool.writeU8(i?1:0)}}writeBigInt(e,t){switch(t){case V:case L:this.pool.writeBigInt64(e);break;case T:case O:this.writeLargeBigInt(e)}}writeLargeBigInt(e){var t,i=BigInt(e).toString(16).replace("-",""),r=[];for(let e=i.length-2;0<=e;e-=2)r.push(parseInt(i.substr(e,2),16));for(t of(i.length%2&&r.push(parseInt(i[0],16)),this.pool.writeVarint(r.length),r))this.pool.writeU8(t)}writeString(e,t){var i=e.length;switch(t){case P:break;case F:case $:this.pool.writeU8(i);for(let t=0;t<i;t++)this.pool.writeU8(e.charCodeAt(t));break;case j:this.pool.writeVarint(i);for(let t=0;t<i;t++)this.pool.writeU8(e.charCodeAt(t));break;case R:case K:case N:var r=this.encoder.encode(e);t==R||t==K?this.pool.writeU8(r.length):this.pool.writeVarint(r.length),this.pool.writeBulkAligned(r,1)}}writeArray(e,t){var i=e.length;switch(t){case H:break;case W:this.pool.writeVarint(i);for(let t=0;t<i;t++)this.writeValue(e[t]);break;case G:this.writeSparseArray(e);break;case Q:case Y:case X:case J:case Z:this.pool.writePackedArray(e,t)}}writeSparseArray(e){var t=e.length,i=new Uint32Array(t),r=[];let s=0;for(let a=0;a<t;a++)a in e&&(i[s]=a,r[s]=e[a],s++);this.pool.writeVarint(t),this.pool.writeVarint(s);for(let e=0;e<s;e++)this.pool.writeVarint(i[e]),this.writeValue(r[e])}writeObject(e,t){if(t!=ee)switch(t){case ie:case te:this.writeSimpleObject(e);break;case se:this.writeObjectWithDescriptors(e);break;case ae:this.writeObjectWithMethods(e);break;case re:this.writeConstructorObject(e)}}writeSimpleObject(e){var t,i=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(i.sort(),this.pool.writeVarint(i.length),i))this.writeValue(t),this.writeValue(e[t])}writeObjectWithDescriptors(e){var t,i=Object.getOwnPropertyNames(e),r=Object.getOwnPropertySymbols(e);i=[...i,...r].filter(t=>{try{var i=Object.getOwnPropertyDescriptor(e,t);return i&&(this.options.serializeFunctions||!i.get&&!i.set&&"function"!=typeof i.value)}catch(t){return!1}});for(t of(this.pool.writeVarint(i.length),i)){this.writeValue(t);var s=Object.getOwnPropertyDescriptor(e,t);let i=0;s.enumerable&&(i|=1),s.writable&&(i|=2),s.configurable&&(i|=4),s.get&&(i|=8),s.set&&(i|=16),this.pool.writeU8(i),s.get||s.set?(s.get&&this.writeValue(s.get),s.set&&this.writeValue(s.set)):this.writeValue(s.value)}}writeObjectWithMethods(e){var t,i,r,s,a=[];for(t of Object.keys(e))try{var n=e[t];"function"==typeof n?this.options.serializeFunctions?a.push([t,n,!0]):a.push([t,null,!1]):a.push([t,n,!1])}catch(e){}for([i,r,s]of(this.pool.writeVarint(a.length),a))this.writeValue(i),this.pool.writeU8(s?1:0),s&&this.options.serializeFunctions?(this.writeValue(r.toString()),this.writeValue(r.name||"")):s?this.pool.writeU8(Ke):this.writeValue(r)}writeConstructorObject(e){this.writeValue(e.constructor.name||"");var t,i=Object.keys(e).filter(t=>{try{return"function"!=typeof e[t]||this.options.serializeFunctions}catch(t){return!1}});for(t of(this.pool.writeVarint(i.length),i))this.writeValue(t),this.writeValue(e[t])}writeTypedArray(e,t){var i=e.buffer,r=e.byteOffset,s=e.length;if(this.options.shareArrayBuffers){if(void 0!==(a=this.buffers.get(i)))return this.pool.writeU8(1),this.pool.writeVarint(a),this.pool.writeVarint(r),void this.pool.writeVarint(s);this.buffers.set(i,this.buffers.size)}this.pool.writeU8(0),this.pool.writeVarint(r),this.pool.writeVarint(s);var a,n=s*(a=qe[t]||1);if(t==_e||t==me)for(let t=0;t<s;t++)this.pool.writeBigInt64(e[t]);else t=new Uint8Array(i,r,n),this.pool.writeBulkAligned(t,a)}writeArrayBuffer(e,t){e=new Uint8Array(e),this.pool.writeVarint(e.length),this.pool.writeBulkAligned(e,1)}writeCollection(e,t){switch(t){case be:for(var[i,r]of(this.pool.writeVarint(e.size),e))this.writeValue(i),this.writeValue(r);break;case Ae:for(var s of(this.pool.writeVarint(e.size),e))this.writeValue(s)}}writeDate(e,t){t==xe&&this.pool.writeF64(e.getTime())}writeError(e,t){if(this.writeValue(e.message||""),this.writeValue(e.stack||""),t==Be&&e.errors)for(var i of(this.pool.writeVarint(e.errors.length),e.errors))this.writeValue(i)}writeRegExp(e){this.writeValue(e.source),this.writeValue(e.flags)}writeBinary(e,t){this.pool.writeVarint(0),this.pool.writeVarint(0)}writeSpecial(e,t){switch(t){case Fe:var i=e.description;this.writeValue(i);break;case Re:break;case $e:i=Symbol.keyFor(e),this.writeValue(i||"");break;case je:i=He.get(e),this.writeValue(i||"")}}writeExtension(e,t){}deserialize(e){if(this.buffer=new Uint8Array(e),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset),this.pos=0,this.deserializeRefs=[],this.deserializeStrings=[],this.deserializeBuffers=[],1413632565!==this.readU32())throw new Error("Invalid TurboSerial data");if(5!==(e=this.readU8()))throw new Error("Unsupported version: "+e);return this.readValue()}readValue(){if(this.pos>=this.buffer.length)throw new Error("Unexpected end of buffer");var e=this.readU8();if(e==Oe||e==Pe){var t=this.readVarint();if(t>=this.deserializeRefs.length)throw new Error("Invalid reference: "+t);return this.deserializeRefs[t]}if(e==q){if((t=this.readVarint())>=this.deserializeStrings.length)throw new Error("Invalid string reference: "+t);return this.deserializeStrings[t]}if(e==ge){if((t=this.readVarint())>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return this.deserializeBuffers[t]}let i,g=!1;switch(t=e&r){case c:case h:case u:g=!0}if(g){switch(t){case h:i=[];break;case u:e==be?i=new Map:e==Ae&&(i=new Set);break;case c:i={}}switch(i&&this.deserializeRefs.push(i),t){case h:this.fillArray(i,e);break;case c:this.fillObject(i,e);break;case u:this.fillCollection(i,e)}}else{switch(t){case s:i=this.readPrimitive(e);break;case a:i=this.readNumber(e);break;case n:i=this.readBigInt(e);break;case o:i=this.readString(e);break;case l:i=this.readTypedArray(e);break;case d:i=this.readArrayBuffer(e);break;case f:i=this.readDate(e);break;case p:i=this.readError(e);break;case _:i=this.readRegExp();break;case m:i=this.readBinary(e);break;case y:i=this.readSpecial(e);break;case w:i=this.readExtension(e);break;default:throw new Error("Unknown type: 0x"+e.toString(16))}"object"!=typeof i||null==i||g||this.deserializeRefs.push(i)}return i}fillArray(e,t){switch(t){case H:break;case W:var i=this.readVarint();for(let t=0;t<i;t++)e[t]=this.readValue();break;case G:var r=this.readVarint(),s=this.readVarint();e.length=r;for(let t=0;t<s;t++)e[this.readVarint()]=this.readValue();break;case Q:case Y:case X:case J:case Z:r=this.readPackedArrayData(t),e.push(...r)}}fillObject(e,t){if(t!=ee)switch(t){case ie:case te:this.fillSimpleObject(e);break;case se:this.fillObjectWithDescriptors(e);break;case ae:this.fillObjectWithMethods(e);break;case re:this.fillConstructorObject(e)}}fillSimpleObject(e){var t=this.readVarint();for(let i=0;i<t;i++)e[this.readValue()]=this.readValue()}fillObjectWithDescriptors(e){var t=this.readVarint();for(let n=0;n<t;n++){var i=this.readValue(),r={enumerable:!!(1&(a=this.readU8())),writable:!!(2&a),configurable:!!(4&a)},s=!!(8&a),a=!!(16&a);s||a?(s&&(r.get=this.readValue()),a&&(r.set=this.readValue())):r.value=this.readValue(),Object.defineProperty(e,i,r)}}fillObjectWithMethods(e){var t=this.readVarint();for(let s=0;s<t;s++){var i=this.readValue();if(this.readU8())if(this.options.serializeFunctions){var r=this.readValue();this.readValue();try{e[i]=new Function("return "+r)()}catch(t){e[i]=function(){throw new Error("Function deserialization failed")}}}else this.readU8()===Ke&&(e[i]=function(){throw new Error("Function not serialized")});else e[i]=this.readValue()}}fillConstructorObject(e){var t=this.readValue(),i=this.readVarint();for(let t=0;t<i;t++)e[this.readValue()]=this.readValue();Object.defineProperty(e,"__constructorName",{value:t,enumerable:!1,writable:!1,configurable:!0})}fillCollection(e,t){var i=this.readVarint();switch(t){case be:for(let t=0;t<i;t++){var r=this.readValue(),s=this.readValue();e.set(r,s)}break;case Ae:for(let t=0;t<i;t++)e.add(this.readValue())}}readPrimitive(e){switch(e){case g:return null;case v:return;case b:return!1;case A:return!0;default:throw new Error("Unknown primitive: 0x"+e.toString(16))}}readNumber(e){switch(e){case x:return this.view.getInt8(this.pos++);case S:return this.readI16();case k:return this.readI32();case E:return this.readU32();case z:return this.readF32();case U:return this.readF64();case I:return NaN;case D:return 1/0;case M:return-1/0;case B:return-0;case C:var t=this.readVarint();return this.readU8()?-t:t;default:throw new Error("Unknown number type: 0x"+e.toString(16))}}readBigInt(e){switch(e){case V:case L:return this.readBigInt64();case T:case O:return this.readLargeBigInt(e==O);default:throw new Error("Unknown BigInt type: 0x"+e.toString(16))}}readLargeBigInt(e){var t=this.readVarint(),i=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t;let r="";for(let e=i.length-1;0<=e;e--)r+=i[e].toString(16).padStart(2,"0");return t=BigInt("0x"+r),e?-t:t}readString(e){if(e==P)return"";let t,i;switch(e){case F:case $:case R:case K:t=this.readU8();break;default:t=this.readVarint()}if(this.ensureBytes(t),e==F||e==$||e==j){i="";for(let e=0;e<t;e++)i+=String.fromCharCode(this.readU8())}else e=this.buffer.subarray(this.pos,this.pos+t),this.pos+=t,i=this.decoder.decode(e);return this.deserializeStrings.push(i),i}readPackedArrayData(e){var t=this.readVarint(),i=new Array(t),r=qe[e];if(!r)throw new Error("Unknown packed array type: 0x"+e.toString(16));switch(this.alignPos(Math.min(r,8)),this.ensureBytes(t*r),e){case Q:for(let e=0;e<t;e++)i[e]=this.view.getInt8(this.pos++);break;case Y:for(let e=0;e<t;e++)i[e]=this.view.getInt16(this.pos,!0),this.pos+=2;break;case X:for(let e=0;e<t;e++)i[e]=this.view.getInt32(this.pos,!0),this.pos+=4;break;case J:for(let e=0;e<t;e++)i[e]=this.view.getFloat32(this.pos,!0),this.pos+=4;break;case Z:for(let e=0;e<t;e++)i[e]=this.view.getFloat64(this.pos,!0),this.pos+=8}return i}readTypedArray(e){if(this.readU8()){var t=this.readVarint(),i=this.readVarint(),r=this.readVarint();if(t>=this.deserializeBuffers.length)throw new Error("Invalid buffer reference: "+t);return t=this.deserializeBuffers[t],this.createTypedArray(e,t,i,r)}this.readVarint();var s=this.readVarint();t=qe[e]||1;if(e!=_e&&e!=me)return i=s*t,this.alignPos(t),this.ensureBytes(i),r=this.buffer.subarray(this.pos,this.pos+i),this.pos+=i,t=new ArrayBuffer(i),new Uint8Array(t).set(r),this.deserializeBuffers.push(t),this.createTypedArray(e,t,0,s);this.alignPos(8);var a=[];for(let e=0;e<s;e++)a.push(this.readBigInt64());return new(e==_e?BigInt64Array:BigUint64Array)(a)}createTypedArray(e,t,i,r){var s={[ne]:Uint8Array,[oe]:Int8Array,[he]:Uint8ClampedArray,[ce]:Uint16Array,[le]:Int16Array,[de]:Uint32Array,[ue]:Int32Array,[fe]:Float32Array,[pe]:Float64Array,[_e]:BigInt64Array,[me]:BigUint64Array,[ye]:DataView}[e];if(s)return new s(t,i,r);throw new Error("Unknown typed array type: 0x"+e.toString(16))}readArrayBuffer(e){var t=this.readVarint(),i=(this.ensureBytes(t),this.buffer.subarray(this.pos,this.pos+t));this.pos+=t,t=i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength);return this.deserializeBuffers.push(t),t}readDate(e){switch(e){case xe:return new Date(this.readF64());case Se:return new Date(NaN);default:throw new Error("Unknown date type: 0x"+e.toString(16))}}readError(e){var t=this.readValue(),i=this.readValue();let r;var s={[ke]:Error,[Ee]:EvalError,[ze]:RangeError,[Ue]:ReferenceError,[Ie]:SyntaxError,[De]:TypeError,[Me]:URIError}[e]||Error;if(e==Be){var a=this.readVarint(),n=[];for(let e=0;e<a;e++)n.push(this.readValue());r=new AggregateError(n,t)}else r=new s(t);return i&&(r.stack=i),r}readRegExp(){var e=this.readValue(),t=this.readValue();return new RegExp(e,t)}readBinary(e){return{_type:"Binary",size:this.readVarint(),typeStr:this.readVarint()}}readSpecial(e){switch(e){case Fe:var t=this.readValue();return Symbol(t);case Re:return Symbol();case $e:return t=this.readValue(),Symbol.for(t);case je:return t=this.readValue(),We.get(t)||Symbol(t);default:throw new Error("Unknown special type: 0x"+e.toString(16))}}readExtension(e){if(e!==Ke)throw new Error("Unknown extension type: 0x"+e.toString(16));return function(){throw new Error("Function not serialized")}}readU8(){return this.ensureBytes(1),this.buffer[this.pos++]}readI16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getInt16(this.pos,!0);return this.pos+=2,e}readU16(){this.alignPos(2),this.ensureBytes(2);var e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}readI32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}readU32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}readF32(){this.alignPos(4),this.ensureBytes(4);var e=this.view.getFloat32(this.pos,!0);return this.pos+=4,e}readF64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getFloat64(this.pos,!0);return this.pos+=8,e}readBigInt64(){this.alignPos(8),this.ensureBytes(8);var e=this.view.getBigInt64(this.pos,!0);return this.pos+=8,e}readVarint(){let e=0,t=0;for(var i;this.ensureBytes(1),e|=(127&(i=this.buffer[this.pos++]))<<t,t+=7,128&i;);return e>>>0}alignPos(e){e=e-1|0,this.pos=(this.pos+e&~e)>>>0}ensureBytes(e){if(this.pos+e>this.buffer.length)throw new Error(`Buffer underflow: need ${e}, available `+(this.buffer.length-this.pos))}}({compression:!0,deduplication:!0,shareArrayBuffers:!0,simdOptimization:!0,detectCircular:!0}),rt=new tt.a;class st{constructor(e){this._dbName=e,this._keyPrefix=`lacertadb_${e}_quickstore_`,this._indexKey=this._keyPrefix+"index"}_readIndex(){var e=localStorage.getItem(this._indexKey);if(!e)return[];try{var t=rt.decode(e);return it.deserialize(t)}catch{return[]}}_writeIndex(e){e=it.serialize(e),e=rt.encode(e),localStorage.setItem(this._indexKey,e)}add(e,t){var i=this._keyPrefix+"data_"+e;try{var r=it.serialize(t),s=rt.encode(r),a=(localStorage.setItem(i,s),this._readIndex());return a.includes(e)||(a.push(e),this._writeIndex(a)),!0}catch(e){if("QuotaExceededError"===e.name)throw new ht("QuickStore quota exceeded","QUOTA_EXCEEDED",e);return!1}}get(e){if(e=this._keyPrefix+"data_"+e,e=localStorage.getItem(e))try{var t=rt.decode(e);return it.deserialize(t)}catch(e){console.error("Failed to parse QuickStore data:",e)}return null}update(e,t){return this.add(e,t)}delete(e){var t=this._keyPrefix+"data_"+e;localStorage.removeItem(t);let i=this._readIndex();t=i.length,(i=i.filter(t=>t!==e)).length<t&&this._writeIndex(i)}getAll(){return this._readIndex().map(e=>{var t=this.get(e);return t?{_id:e,...t}:null}).filter(Boolean)}query(e={}){var t=this.getAll();return 0===Object.keys(e).length?t:t.filter(t=>zt.evaluate(t,e))}clear(){var e;for(e of this._readIndex())localStorage.removeItem(this._keyPrefix+"data_"+e);localStorage.removeItem(this._indexKey)}get size(){return this._readIndex().length}}class at{constructor(){this._connections=new Map,this._refCounts=new Map}async getConnection(e,t=1,i){var r,s=e+"_v"+t;return this._connections.has(s)?(this._refCounts.set(s,(this._refCounts.get(s)||0)+1),this._connections.get(s)):(r=await new Promise((r,s)=>{let a=indexedDB.open(e,t);a.onerror=()=>s(new ht("Failed to open database","DATABASE_OPEN_FAILED",a.error)),a.onsuccess=()=>r(a.result),a.onupgradeneeded=e=>{i&&i(e.target.result,e.oldVersion,e.newVersion)}}),this._connections.set(s,r),this._refCounts.set(s,1),r)}releaseConnection(e,t=1){e=e+"_v"+t;1<(t=this._refCounts.get(e)||0)?this._refCounts.set(e,t-1):(t=this._connections.get(e))&&(t.close(),this._connections.delete(e),this._refCounts.delete(e))}closeAll(){for(var e of this._connections.values())e.close();this._connections.clear(),this._refCounts.clear()}}let nt=new at;class ot{constructor(){this._queue=[],this._locked=!1}acquire(){return new Promise(e=>{this._queue.push(e),this._dispatch()})}release(){this._locked=!1,this._dispatch()}async runExclusive(e){var t=await this.acquire();try{return await e()}finally{t()}}_dispatch(){this._locked||0===this._queue.length||(this._locked=!0,this._queue.shift()(()=>this.release()))}}class ht extends Error{constructor(e,t,i){super(e),this.name="LacertaDBError",this.code=t,this.originalError=i||null,this.timestamp=(new Date).toISOString()}}class ct{constructor(e=100,t=null){this._maxSize=e,this._ttl=t,this._cache=new Map,this._accessOrder=[],this._timestamps=new Map}get(e){if(!this._cache.has(e))return null;if(this._ttl){var t=this._timestamps.get(e);if(Date.now()-t>this._ttl)return this.delete(e),null}return-1<(t=this._accessOrder.indexOf(e))&&this._accessOrder.splice(t,1),this._accessOrder.push(e),this._cache.get(e)}set(e,t){var i;for(this._cache.has(e)&&-1<(i=this._accessOrder.indexOf(e))&&this._accessOrder.splice(i,1),this._cache.set(e,t),this._accessOrder.push(e),this._timestamps.set(e,Date.now());this._cache.size>this._maxSize;){var r=this._accessOrder.shift();this._cache.delete(r),this._timestamps.delete(r)}}delete(e){var t=this._accessOrder.indexOf(e);return-1<t&&this._accessOrder.splice(t,1),this._timestamps.delete(e),this._cache.delete(e)}clear(){this._cache.clear(),this._accessOrder=[],this._timestamps.clear()}has(e){if(this._ttl&&this._cache.has(e)){var t=this._timestamps.get(e);if(Date.now()-t>this._ttl)return this.delete(e),!1}return this._cache.has(e)}get size(){return this._cache.size}}class lt{constructor(e=100,t=null){this._maxSize=e,this._ttl=t,this._cache=new Map,this._frequencies=new Map,this._timestamps=new Map}get(e){if(!this._cache.has(e))return null;if(this._ttl){var t=this._timestamps.get(e);if(Date.now()-t>this._ttl)return this.delete(e),null}return this._frequencies.set(e,(this._frequencies.get(e)||0)+1),this._cache.get(e)}set(e,t){if(this._cache.has(e))this._cache.set(e,t),this._frequencies.set(e,(this._frequencies.get(e)||0)+1);else{if(this._cache.size>=this._maxSize){let e=1/0,t=null;for(var[i,r]of this._frequencies)r<e&&(e=r,t=i);t&&this.delete(t)}this._cache.set(e,t),this._frequencies.set(e,1),this._timestamps.set(e,Date.now())}}delete(e){return this._frequencies.delete(e),this._timestamps.delete(e),this._cache.delete(e)}clear(){this._cache.clear(),this._frequencies.clear(),this._timestamps.clear()}has(e){return this._cache.has(e)}get size(){return this._cache.size}}class dt{constructor(e=6e4){this._ttl=e,this._cache=new Map,this._timers=new Map}get(e){return this._cache.get(e)||null}set(e,t){this._timers.has(e)&&clearTimeout(this._timers.get(e)),this._cache.set(e,t),t=setTimeout(()=>{this.delete(e)},this._ttl),this._timers.set(e,t)}delete(e){return this._timers.has(e)&&(clearTimeout(this._timers.get(e)),this._timers.delete(e)),this._cache.delete(e)}clear(){for(var e of this._timers.values())clearTimeout(e);this._timers.clear(),this._cache.clear()}has(e){return this._cache.has(e)}get size(){return this._cache.size}}class ut{constructor(e={}){this._type=e.type||"lru",this._maxSize=e.maxSize||100,this._ttl=e.ttl||null,this._enabled=!1!==e.enabled,this._cache=null}get cache(){return this._cache||(this._cache=this._createCache()),this._cache}_createCache(){switch(this._type){case"lru":return new ct(this._maxSize,this._ttl);case"lfu":return new lt(this._maxSize,this._ttl);case"ttl":return new dt(this._ttl);case"none":return null;default:return new ct(this._maxSize,this._ttl)}}get(e){return this._enabled&&this.cache?this.cache.get(e):null}set(e,t){this._enabled&&this.cache&&this.cache.set(e,t)}delete(e){this._enabled&&this.cache&&this.cache.delete(e)}clear(){this._enabled&&this.cache&&this.cache.clear()}updateStrategy(e){Object.assign(this,e),this._cache=null}}class ft{async compress(e){if(!(e instanceof Uint8Array))throw new TypeError("Input must be Uint8Array");try{var t=new Response(e).body.pipeThrough(new CompressionStream("deflate")),i=await new Response(t).arrayBuffer();return new Uint8Array(i)}catch(t){return console.warn("CompressionStream not available, returning uncompressed data"),e}}async decompress(e){if(!(e instanceof Uint8Array))throw new TypeError("Input must be Uint8Array");try{var t=new Response(e).body.pipeThrough(new DecompressionStream("deflate")),i=await new Response(t).arrayBuffer();return new Uint8Array(i)}catch(t){return console.warn("DecompressionStream failed, returning original data"),e}}compressSync(e){if(e instanceof Uint8Array)return e;throw new TypeError("Input must be Uint8Array")}decompressSync(e){if(e instanceof Uint8Array)return e;throw new TypeError("Input must be Uint8Array")}}class pt{async encrypt(e,t){var i=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(16)),s=crypto.getRandomValues(new Uint8Array(12));i=i.encode(t),t=await crypto.subtle.importKey("raw",i,"PBKDF2",!1,["deriveBits","deriveKey"]),i=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},t,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]),t=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},i,e);return(i=new Uint8Array(r.length+s.length+t.byteLength)).set(r,0),i.set(s,r.length),i.set(new Uint8Array(t),r.length+s.length),i}async decrypt(e,t){var i=new TextEncoder,r=e.slice(0,16),s=e.slice(16,28);e=e.slice(28),i=i.encode(t),t=await crypto.subtle.importKey("raw",i,"PBKDF2",!1,["deriveBits","deriveKey"]),i=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:1e5,hash:"SHA-256"},t,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]),r=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},i,e);return new Uint8Array(r)}}class _t{constructor(e={}){this._masterKey=null,this._salt=null,this._iterations=e.iterations||1e5,this._hashAlgorithm=e.hashAlgorithm||"SHA-256",this._keyLength=e.keyLength||256,this._saltLength=e.saltLength||32,this._initialized=!1,this._encKey=null,this._hmacKey=null}get initialized(){return this._initialized}async initialize(e,t=null){if(this._initialized)throw new Error("Database encryption already initialized");return this._salt=t||crypto.getRandomValues(new Uint8Array(this._saltLength)),t=(new TextEncoder).encode(e),e=await crypto.subtle.importKey("raw",t,"PBKDF2",!1,["deriveBits","deriveKey"]),t=await crypto.subtle.deriveBits({name:"PBKDF2",salt:this._salt,iterations:this._iterations,hash:this._hashAlgorithm},e,512),t=(e=new Uint8Array(t)).slice(0,32),e=e.slice(32,64),this._encKey=await crypto.subtle.importKey("raw",t,{name:"AES-GCM",length:this._keyLength},!1,["encrypt","decrypt"]),this._hmacKey=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]),this._initialized=!0,rt.encode(this._salt)}async encrypt(e){if(!this._initialized)throw new Error("Database encryption not initialized");let t;t="string"==typeof e?(new TextEncoder).encode(e):e instanceof Uint8Array?e:it.serialize(e);e=crypto.getRandomValues(new Uint8Array(12));var i=await crypto.subtle.encrypt({name:"AES-GCM",iv:e},this._encKey,t),r=((r=new Uint8Array(e.length+i.byteLength)).set(e,0),r.set(new Uint8Array(i),e.length),await crypto.subtle.sign("HMAC",this._hmacKey,r)),s=new Uint8Array(e.length+i.byteLength+32);return s.set(e,0),s.set(new Uint8Array(i),e.length),s.set(new Uint8Array(r),e.length+i.byteLength),s}async decrypt(e){if(!this._initialized)throw new Error("Database encryption not initialized");if(!(e instanceof Uint8Array))throw new TypeError("Encrypted data must be Uint8Array");var t=e.slice(0,12),i=e.slice(-32),r=(e=e.slice(12,-32),new Uint8Array(t.length+e.length));if(i=(r.set(t,0),r.set(e,t.length),await crypto.subtle.verify("HMAC",this._hmacKey,i,r)))return r=await crypto.subtle.decrypt({name:"AES-GCM",iv:t},this._encKey,e),new Uint8Array(r);throw new Error("HMAC verification failed - data may be tampered")}async encryptPrivateKey(e,t=""){if(!this._initialized)throw new Error("Database encryption not initialized");t=(r=new TextEncoder).encode(t);let i;i="string"==typeof e?r.encode(e):e instanceof Uint8Array?e:it.serialize(e);var r=crypto.getRandomValues(new Uint8Array(16)),s=(e=await crypto.subtle.encrypt({name:"AES-GCM",iv:r,additionalData:t,tagLength:128},this._encKey,i),new Uint32Array([t.length])),a=new Uint8Array(20+t.length+e.byteLength);return a.set(r,0),a.set(new Uint8Array(s.buffer),16),a.set(t,20),a.set(new Uint8Array(e),20+t.length),rt.encode(a)}async decryptPrivateKey(e,t=""){if(!this._initialized)throw new Error("Database encryption not initialized");var i=(e=rt.decode(e)).slice(0,16),r=e.slice(16,20),s=(r=new Uint32Array(r.buffer)[0],e.slice(20,20+r));e=e.slice(20+r),r=(new TextEncoder).encode(t);if(this._arrayEquals(s,r))return t=await crypto.subtle.decrypt({name:"AES-GCM",iv:i,additionalData:s,tagLength:128},this._encKey,e),(new TextDecoder).decode(t);throw new Error("Additional authentication data mismatch")}static generateSecurePIN(e=6){return e=new Uint8Array(e),crypto.getRandomValues(e),Array.from(e).map(e=>(e%10).toString()).join("")}destroy(){this._masterKey=null,this._encKey=null,this._hmacKey=null,this._salt=null,this._initialized=!1}_arrayEquals(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}async changePin(e,t){var i,r;if(this._initialized)return i=this._salt,r={iterations:this._iterations,hashAlgorithm:this._hashAlgorithm,keyLength:this._keyLength,saltLength:this._saltLength},this.destroy(),Object.assign(this,r),await this.initialize(e,i),this.destroy(),Object.assign(this,r),await this.initialize(t);throw new Error("Database encryption not initialized")}exportMetadata(){if(this._salt)return{salt:rt.encode(this._salt),iterations:this._iterations,algorithm:"AES-GCM-256",kdf:"PBKDF2",hashAlgorithm:this._hashAlgorithm,keyLength:this._keyLength,saltLength:this._saltLength};throw new Error("No encryption metadata to export")}importMetadata(e){if(e.salt)return this._salt=rt.decode(e.salt),this._iterations=e.iterations||1e5,this._hashAlgorithm=e.hashAlgorithm||"SHA-256",this._keyLength=e.keyLength||256,this._saltLength=e.saltLength||32,!0;throw new Error("Invalid encryption metadata")}}class mt{constructor(e,t){this.keys=new Array(2*e-1),this.values=new Array(2*e-1),this.children=new Array(2*e),this.n=0,this.leaf=t,this.order=e}search(e){let t=0;for(;t<this.n&&e>this.keys[t];)t++;return t<this.n&&e===this.keys[t]?this.values[t]:!this.leaf&&this.children[t]?this.children[t].search(e):null}rangeSearch(e,t,i){let r=0;for(;r<this.n;)!this.leaf&&this.children[r]&&this.children[r].rangeSearch(e,t,i),this.keys[r]>=e&&this.keys[r]<=t&&this.values[r]&&this.values[r].forEach(e=>i.push(e)),r++;!this.leaf&&this.children[r]&&this.children[r].rangeSearch(e,t,i)}insertNonFull(e,t){let i=this.n-1;if(this.leaf){for(;0<=i&&this.keys[i]>e;)this.keys[i+1]=this.keys[i],this.values[i+1]=this.values[i],i--;0<=i&&this.keys[i]===e?(this.values[i]||(this.values[i]=new Set),this.values[i].add(t)):(this.keys[i+1]=e,this.values[i+1]=new Set([t]),this.n++)}else{for(;0<=i&&this.keys[i]>e;)i--;0<=i&&this.keys[i]===e?(this.values[i]||(this.values[i]=new Set),this.values[i].add(t)):(i++,this.children[i]&&this.children[i].n===2*this.order-1&&(this.splitChild(i,this.children[i]),this.keys[i]<e)&&i++,this.children[i]&&this.children[i].insertNonFull(e,t))}}splitChild(e,t){var i=new mt(this.order,t.leaf);i.n=this.order-1;for(let e=0;e<this.order-1;e++)i.keys[e]=t.keys[e+this.order],i.values[e]=t.values[e+this.order];if(!t.leaf)for(let e=0;e<this.order;e++)i.children[e]=t.children[e+this.order];t.n=this.order-1;for(let t=this.n;t>=e+1;t--)this.children[t+1]=this.children[t];this.children[e+1]=i;for(let t=this.n-1;t>=e;t--)this.keys[t+1]=this.keys[t],this.values[t+1]=this.values[t];this.keys[e]=t.keys[this.order-1],this.values[e]=t.values[this.order-1],this.n++}remove(e,t){let i=0;for(;i<this.n&&e>this.keys[i];)i++;if(i<this.n&&e===this.keys[i]){if(this.values[i]&&(this.values[i].delete(t),0===this.values[i].size)){for(let e=i;e<this.n-1;e++)this.keys[e]=this.keys[e+1],this.values[e]=this.values[e+1];this.n--}}else!this.leaf&&this.children[i]&&this.children[i].remove(e,t)}verify(){var e,t=[];for(let e=1;e<this.n;e++)this.keys[e]<=this.keys[e-1]&&t.push("Key order violation at index "+e);for(let e=0;e<this.n;e++)!this.values[e]||this.values[e]instanceof Set||(this.values[e]=new Set(Array.isArray(this.values[e])?this.values[e]:[this.values[e]]),t.push("Fixed non-Set value at index "+e));if(!this.leaf)for(let i=0;i<=this.n;i++)this.children[i]&&(e=this.children[i].verify(),t.push(...e));return t}}class yt{constructor(e=4){this._root=null,this._order=e,this._size=0,this._lastVerification=Date.now(),this._verificationInterval=6e4}insert(e,t){if(Date.now()-this._lastVerification>this._verificationInterval&&this.verify(),this._root)if(this._root.n===2*this._order-1){var i=new mt(this._order,!1);i.children[0]=this._root,i.splitChild(0,this._root);let r=0;i.keys[0]<e&&r++,i.children[r].insertNonFull(e,t),this._root=i}else this._root.insertNonFull(e,t);else this._root=new mt(this._order,!0),this._root.keys[0]=e,this._root.values[0]=new Set([t]),this._root.n=1;this._size++}find(e){return this._root&&(e=this._root.search(e))?Array.from(e):[]}contains(e){return!!this._root&&null!==this._root.search(e)}range(e,t){return this._root?(this._root.rangeSearch(e,t,e=[]),e):[]}rangeFrom(e){return this._root?(this._root.rangeSearch(e,1/0,e=[]),e):[]}rangeTo(e){return this._root?(this._root.rangeSearch(-1/0,e,e=[]),e):[]}remove(e,t){this._root&&(this._root.remove(e,t),0===this._root.n&&!this._root.leaf&&this._root.children[0]&&(this._root=this._root.children[0]),this._size--)}verify(){var e;return this._lastVerification=Date.now(),this._root?(0<(e=this._root.verify()).length&&console.warn("BTree index issues detected and fixed:",e),{healthy:0===e.length,issues:e,repaired:e.length}):{healthy:!0,issues:[]}}get size(){return this._size}}class wt{constructor(){this._invertedIndex=new Map,this._documentTexts=new Map}addDocument(e,t){var i;if("string"==typeof e)for(i of(this._documentTexts.set(t,e),this._tokenize(e)))this._invertedIndex.has(i)||this._invertedIndex.set(i,new Set),this._invertedIndex.get(i).add(t)}removeDocument(e){var t,i=this._documentTexts.get(e);if(i){for(t of this._tokenize(i)){var r=this._invertedIndex.get(t);r&&(r.delete(e),0===r.size)&&this._invertedIndex.delete(t)}this._documentTexts.delete(e)}}updateDocument(e,t){this.removeDocument(e),this.addDocument(t,e)}search(e){var t;if(0===(e=this._tokenize(e)).length)return[];let i=null;for(t of e){let e=this._invertedIndex.get(t);if(!e||0===e.size)return[];i=null===i?new Set(e):new Set([...i].filter(t=>e.has(t)))}return i?Array.from(i):[]}_tokenize(e){return e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(e=>2<e.length)}get size(){return this._documentTexts.size}}class gt{constructor(){this._points=new Map}addPoint(e,t){e&&"number"==typeof e.lat&&"number"==typeof e.lng&&this._points.set(t,e)}removePoint(e){this._points.delete(e)}updatePoint(e,t){this._points.set(e,t)}findNear(e,t){var i,r,s=[];for([i,r]of this._points){var a=this._haversine(e,r);a<=t&&s.push({docId:i,distance:a})}return s.sort((e,t)=>e.distance-t.distance).map(e=>e.docId)}findWithin(e){var t,i,r=[];for([t,i]of this._points)this._isWithinBounds(i,e)&&r.push(t);return r}_haversine(e,t){var i=this._toRad(t.lat-e.lat),r=this._toRad(t.lng-e.lng);i=Math.sin(i/2)*Math.sin(i/2)+Math.cos(this._toRad(e.lat))*Math.cos(this._toRad(t.lat))*Math.sin(r/2)*Math.sin(r/2);return 2*Math.atan2(Math.sqrt(i),Math.sqrt(1-i))*6371}_toRad(e){return e*(Math.PI/180)}_isWithinBounds(e,t){return e.lat>=t.minLat&&e.lat<=t.maxLat&&e.lng>=t.minLng&&e.lng<=t.maxLng}get size(){return this._points.size}}class vt{constructor(e){this._collection=e,this._indexes=new Map,this._indexData=new Map,this._indexQueue=[],this._processing=!1}get indexes(){return this._indexes}async createIndex(e,t={}){var i=t.name||e;if(this._indexes.has(i))throw new Error(`Index '${i}' already exists`);return e={fieldPath:e,unique:t.unique||!1,sparse:t.sparse||!1,type:t.type||"btree",collation:t.collation||null,createdAt:Date.now()},this._indexes.set(i,e),await this.rebuildIndex(i),this._saveIndexMetadata(),i}async rebuildIndex(e){var t=this._indexes.get(e);if(!t)throw new Error(`Index '${e}' not found`);var i,r=this._createIndexStructure(t.type);for(i of await this._collection.getAll()){var s=this._getFieldValue(i,t.fieldPath);if(!t.sparse||null!=s){if(t.unique&&r.has&&r.has(s))throw new Error(`Unique constraint violation on index '${e}'`);this._addToIndex(r,s,i._id,t.type)}}this._indexData.set(e,r)}_createIndexStructure(e){switch(e){case"btree":return new yt;case"hash":return new Map;case"text":return new wt;case"geo":return new gt;default:return new Map}}_addToIndex(e,t,i,r){switch(r){case"btree":e.insert(t,i);break;case"hash":e.has(t)||e.set(t,new Set),e.get(t).add(i);break;case"text":e.addDocument(t,i);break;case"geo":e.addPoint(t,i)}}async updateIndexForDocument(e,t,i){for(var[r,s]of this._indexes){var a=this._indexData.get(r);if(a){var n,o=t?this._getFieldValue(t,s.fieldPath):void 0,h=i?this._getFieldValue(i,s.fieldPath):void 0;if(o!==h)switch(s.type){case"btree":void 0!==o&&a.remove(o,e),void 0!==h&&a.insert(h,e);break;case"hash":void 0!==o&&(n=a.get(o))&&(n.delete(e),0===n.size)&&a.delete(o),void 0!==h&&(a.has(h)||a.set(h,new Set),a.get(h).add(e));break;case"text":(o||h)&&a.updateDocument(e,h||"");break;case"geo":o&&a.removePoint(e),h&&a.addPoint(h,e)}}}}async query(e,t){var i=this._indexes.get(e),r=this._indexData.get(e);if(i&&r)return this._queryIndex(r,t,i.type);throw new Error(`Index '${e}' not found`)}_queryIndex(e,t,i){switch(i){case"btree":return this._queryBTree(e,t);case"hash":return this._queryHash(e,t);case"text":return this._queryText(e,t);case"geo":return this._queryGeo(e,t);default:return[]}}_queryBTree(e,t){let i=new Set;return void 0!==t.$eq&&e.find(t.$eq).forEach(e=>i.add(e)),void 0!==t.$gte&&void 0!==t.$lte?e.range(t.$gte,t.$lte).forEach(e=>i.add(e)):void 0!==t.$gte?e.rangeFrom(t.$gte).forEach(e=>i.add(e)):void 0!==t.$gt?e.rangeFrom(t.$gt).forEach(e=>{e!==t.$gt&&i.add(e)}):void 0!==t.$lte?e.rangeTo(t.$lte).forEach(e=>i.add(e)):void 0!==t.$lt&&e.rangeTo(t.$lt).forEach(e=>{e!==t.$lt&&i.add(e)}),Array.from(i)}_queryHash(e,t){var i;if(void 0!==t.$eq)return(i=e.get(t.$eq))?Array.from(i):[];if(void 0===t.$in)return[];{let i=new Set;for(var r of t.$in)(r=e.get(r))&&r.forEach(e=>i.add(e));return Array.from(i)}}_queryText(e,t){return t.$search?e.search(t.$search):[]}_queryGeo(e,t){return t.$near?e.findNear(t.$near.coordinates,t.$near.maxDistance||1e3):t.$within?e.findWithin(t.$within):[]}dropIndex(e){this._indexes.delete(e),this._indexData.delete(e),this._saveIndexMetadata()}_getFieldValue(e,t){var i;let r=e;for(i of t.split(".")){if(null==r)return;r=r[i]}return r}_saveIndexMetadata(){var e={indexes:Array.from(this._indexes.entries()).map(([e,t])=>({name:e,...t}))},t=`lacertadb_${this._collection.database.name}_${this._collection.name}_indexes`;e=it.serialize(e),e=rt.encode(e);localStorage.setItem(t,e)}async loadIndexMetadata(){var e=`lacertadb_${this._collection.database.name}_${this._collection.name}_indexes`;if(e=localStorage.getItem(e))try{var t,i,r=rt.decode(e);for(t of it.deserialize(r).indexes){let{name:e,...i}=t;this._indexes.set(e,i)}for(i of this._indexes.keys())await this.rebuildIndex(i)}catch(e){console.error("Failed to load index metadata:",e)}}getIndexStats(){var e,t,i={};for([e,t]of this._indexes){var r=this._indexData.get(e);i[e]={...t,size:r&&(r.size||r.length)||0,memoryUsage:this._estimateMemoryUsage(r)}}return i}_estimateMemoryUsage(e){return e?e instanceof Map?100*e.size:e instanceof yt?120*e.size:0:0}async verifyIndexes(){var e,t,i={};for([e,t]of this._indexes){var r=this._indexData.get(e);r?r.verify?(r=r.verify(),i[e]=r):i[e]={status:"ok"}:(i[e]={status:"missing",rebuilt:!0},await this.rebuildIndex(e))}return i}}class bt{async saveAttachments(e,t,i,r){try{var s,a,n=[],o=await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:!0})).getDirectoryHandle(t,{create:!0})).getDirectoryHandle(i,{create:!0});for([s,a]of r.entries()){var h=s+"_"+(a.name||"file"),c=await(await o.getFileHandle(h,{create:!0})).createWritable();let r;if(a.data instanceof Uint8Array)r=a.data;else if(a.data instanceof ArrayBuffer)r=new Uint8Array(a.data);else{if(!(a.data instanceof Blob))throw new TypeError("Unsupported attachment data type");r=new Uint8Array(await a.data.arrayBuffer())}var l=new Blob([r],{type:a.type||"application/octet-stream"}),d=(await c.write(l),await c.close(),`/${e}/${t}/${i}/`+h);n.push({path:d,name:a.name,type:a.type,size:r.byteLength,originalName:a.originalName||a.name})}return n}catch(r){throw new ht("Failed to save attachments","ATTACHMENT_SAVE_FAILED",r)}}async getAttachments(e){var t,i=[],r=await navigator.storage.getDirectory();for(t of e)try{var s=t.path.split("/").filter(e=>e);let e=r;for(let t=0;t<s.length-1;t++)e=await e.getDirectoryHandle(s[t]);var a=await(await(await e.getFileHandle(s[s.length-1])).getFile()).arrayBuffer();i.push({name:t.originalName||t.name,type:t.type,data:new Uint8Array(a),size:t.size})}catch(e){console.error("Failed to get attachment: "+t.path,e)}return i}async deleteAttachments(e,t,i){try{await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e)).getDirectoryHandle(t)).removeEntry(i,{recursive:!0})}catch(e){"NotFoundError"!==e.name&&console.error(`Failed to delete attachments for ${i}:`,e)}}static async prepareAttachment(e,t){let i;if(e instanceof File||e instanceof Blob){var r=await e.arrayBuffer();i=new Uint8Array(r)}else if(e instanceof ArrayBuffer)i=new Uint8Array(e);else{if(!(e instanceof Uint8Array))throw new TypeError("Unsupported file type for attachment");i=e}return{name:t||e.name||"unnamed",type:e.type||"application/octet-stream",data:i,originalName:e.name||t}}}class At{constructor(){this._mutex=new ot}async performTransaction(e,t,i,r,s=3){return this._mutex.runExclusive(async()=>{let a;for(let n=0;n<s;n++)try{return await new Promise((s,a)=>{let n,o=e.transaction(t,i);o.oncomplete=()=>s(n),o.onerror=()=>a(o.error),o.onabort=()=>a(new Error("Transaction aborted"));try{var h=r(o);h instanceof Promise?h.then(e=>{n=e}).catch(a):n=h}catch(s){a(s)}})}catch(e){a=e,n<s-1&&await new Promise(e=>setTimeout(e,2**n*100))}throw new ht("Transaction failed after retries","TRANSACTION_FAILED",a)})}_promisifyRequest(e){return new Promise((t,i)=>{let r=e();r.onsuccess=()=>t(r.result),r.onerror=()=>i(r.error)})}add(e,t,i,r){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==r?s.add(i,r):s.add(i))})}put(e,t,i,r){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==r?s.put(i,r):s.put(i))})}get(e,t,i){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).get(i)))}getAll(e,t,i,r){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).getAll(i,r)))}delete(e,t,i){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).delete(i)))}clear(e,t){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).clear()))}count(e,t,i){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).count(i)))}async batchOperation(e,t){return this.performTransaction(e,["documents"],"readwrite",async e=>{let i=e.objectStore("documents");var r=[];for(let s of t)try{let e;switch(s.type){case"add":e=await this._promisifyRequest(()=>i.add(s.data));break;case"put":e=await this._promisifyRequest(()=>i.put(s.data));break;case"delete":e=await this._promisifyRequest(()=>i.delete(s.key));break;default:throw new Error("Unknown operation type: "+s.type)}r.push({success:!0,result:e})}catch(e){r.push({success:!1,error:e.message})}return r})}}class xt{constructor(e={},t={}){this._id=e._id||this._generateId(),this._created=e._created||Date.now(),this._modified=e._modified||Date.now(),this._permanent=e._permanent||t.permanent||!1,this._encrypted=!1,this._compressed=e._compressed||t.compressed||!1,this._attachments=e._attachments||[],this._data=null,this._packedData=e.packedData||null,this._compression=new ft,e.data&&(this.data=e.data)}get data(){return this._data||{}}set data(e){this._data=e}_generateId(){return`doc_${Date.now()}_`+Math.random().toString(36).substring(2,11)}async pack(e=null){try{let t=it.serialize(this.data);return this._compressed&&(t=await this._compression.compress(t)),e&&(t=await e.encrypt(t),this._encrypted=!0),this._packedData=t}catch(e){throw new ht("Failed to pack document","PACK_FAILED",e)}}async unpack(e=null){try{let t=this._packedData;return this._encrypted&&e&&(t=await e.decrypt(t)),this._compressed&&(t=await this._compression.decompress(t)),this.data=it.deserialize(t),this.data}catch(e){throw new ht("Failed to unpack document","UNPACK_FAILED",e)}}packSync(){let e=it.serialize(this.data);return this._compressed&&(e=this._compression.compressSync(e)),this._packedData=e}unpackSync(){if(this._encrypted)throw new ht("Synchronous decryption not supported","SYNC_DECRYPT_NOT_SUPPORTED");let e=this._packedData;return this._compressed&&(e=this._compression.decompressSync(e)),this.data=it.deserialize(e),this.data}objectOutput(e=!1){var t={_id:this._id,_created:this._created,_modified:this._modified,_permanent:this._permanent,...this.data};return e&&0<this._attachments.length&&(t._attachments=this._attachments),t}databaseOutput(){return{_id:this._id,_created:this._created,_modified:this._modified,_permanent:this._permanent,_encrypted:this._encrypted,_compressed:this._compressed,_attachments:this._attachments,packedData:this._packedData}}}class St{constructor(e,t={}){this.name=e,this.sizeKB=t.sizeKB||0,this.length=t.length||0,this.createdAt=t.createdAt||Date.now(),this.modifiedAt=t.modifiedAt||Date.now(),this.documentSizes=t.documentSizes||{},this.documentModifiedAt=t.documentModifiedAt||{},this.documentPermanent=t.documentPermanent||{},this.documentAttachments=t.documentAttachments||{}}addDocument(e,t,i,r){this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),i&&(this.documentPermanent[e]=!0),0<r&&(this.documentAttachments[e]=r),this.sizeKB+=t,this.length++,this.modifiedAt=Date.now()}updateDocument(e,t,i,r){var s=this.documentSizes[e]||0;this.sizeKB=this.sizeKB-s+t,this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),i?this.documentPermanent[e]=!0:delete this.documentPermanent[e],0<r?this.documentAttachments[e]=r:delete this.documentAttachments[e],this.modifiedAt=Date.now()}removeDocument(e){var t=this.documentSizes[e]||0;this.documentSizes[e]&&(this.sizeKB-=t,this.length--),delete this.documentSizes[e],delete this.documentModifiedAt[e],delete this.documentPermanent[e],delete this.documentAttachments[e],this.modifiedAt=Date.now()}getOldestNonPermanentDocuments(e){return Object.entries(this.documentModifiedAt).filter(([e])=>!this.documentPermanent[e]).sort(([,e],[,t])=>e-t).slice(0,e).map(([e])=>e)}}class kt{constructor(e,t={}){this.name=e,this.collections=t.collections||{},this.totalSizeKB=t.totalSizeKB||0,this.totalLength=t.totalLength||0,this.modifiedAt=t.modifiedAt||Date.now()}static load(e){var t=localStorage.getItem(`lacertadb_${e}_metadata`);if(t)try{var i=rt.decode(t),r=it.deserialize(i);return new kt(e,r)}catch(e){console.error("Failed to load metadata:",e)}return new kt(e)}save(){var e=`lacertadb_${this.name}_metadata`;try{var t={collections:this.collections,totalSizeKB:this.totalSizeKB,totalLength:this.totalLength,modifiedAt:this.modifiedAt},i=it.serialize(t),r=rt.encode(i);localStorage.setItem(e,r)}catch(e){if("QuotaExceededError"===e.name)throw new ht("Storage quota exceeded for metadata","QUOTA_EXCEEDED",e);throw new ht("Failed to save metadata","METADATA_SAVE_FAILED",e)}}setCollection(e){this.collections[e.name]={sizeKB:e.sizeKB,length:e.length,createdAt:e.createdAt,modifiedAt:e.modifiedAt,documentSizes:e.documentSizes,documentModifiedAt:e.documentModifiedAt,documentPermanent:e.documentPermanent,documentAttachments:e.documentAttachments},this._recalculate(),this.save()}removeCollection(e){delete this.collections[e],this._recalculate(),this.save()}_recalculate(){for(var e in this.totalSizeKB=0,this.totalLength=0,this.collections)e=this.collections[e],this.totalSizeKB+=e.sizeKB,this.totalLength+=e.length;this.modifiedAt=Date.now()}}class Et{constructor(e,t={}){this.dbName=e,this.sizeLimitKB=null!=t.sizeLimitKB?t.sizeLimitKB:1/0,e=this.sizeLimitKB===1/0?1/0:.8*this.sizeLimitKB,this.bufferLimitKB=null!=t.bufferLimitKB?t.bufferLimitKB:e,this.freeSpaceEvery=this.sizeLimitKB===1/0?0:t.freeSpaceEvery||1e4}static load(e){var t=localStorage.getItem(`lacertadb_${e}_settings`);if(t)try{var i=rt.decode(t),r=it.deserialize(i);return new Et(e,r)}catch(e){console.error("Failed to load settings:",e)}return new Et(e)}save(){var e=`lacertadb_${this.dbName}_settings`,t={sizeLimitKB:this.sizeLimitKB,bufferLimitKB:this.bufferLimitKB,freeSpaceEvery:this.freeSpaceEvery};t=it.serialize(t),t=rt.encode(t);localStorage.setItem(e,t)}updateSettings(e){Object.assign(this,e),void 0!==e.sizeLimitKB&&void 0===e.bufferLimitKB&&(this.bufferLimitKB=this.sizeLimitKB===1/0?1/0:.8*this.sizeLimitKB),this.sizeLimitKB===1/0&&(this.freeSpaceEvery=0),this.save()}}let zt=new class{constructor(){this.operators={$eq:(e,t)=>e===t,$ne:(e,t)=>e!==t,$gt:(e,t)=>t<e,$gte:(e,t)=>t<=e,$lt:(e,t)=>e<t,$lte:(e,t)=>e<=t,$in:(e,t)=>Array.isArray(t)&&t.includes(e),$nin:(e,t)=>Array.isArray(t)&&!t.includes(e),$and:(e,t)=>t.every(t=>this.evaluate(e,t)),$or:(e,t)=>t.some(t=>this.evaluate(e,t)),$not:(e,t)=>!this.evaluate(e,t),$nor:(e,t)=>!t.some(t=>this.evaluate(e,t)),$exists:(e,t)=>void 0!==e===t,$type:(e,t)=>typeof e===t,$all:(e,t)=>Array.isArray(e)&&t.every(t=>e.includes(t)),$elemMatch:(e,t)=>Array.isArray(e)&&e.some(e=>this.evaluate({value:e},{value:t})),$size:(e,t)=>Array.isArray(e)&&e.length===t,$regex:(e,t)=>{if("string"!=typeof e)return!1;try{return new RegExp(t).test(e)}catch{return!1}},$text:(e,t)=>"string"==typeof e&&e.toLowerCase().includes(t.toLowerCase())}}evaluate(e,t){for(var i in t){var r=t[i];if(i.startsWith("$")){var s=this.operators[i];if(!s||!s(e,r))return!1}else{var a=this.getFieldValue(e,i);if("object"!=typeof r||null===r||Array.isArray(r)){if(a!==r)return!1}else for(var n in r)if(n.startsWith("$")){var o=this.operators[n];if(!o||!o(a,r[n]))return!1}}}return!0}getFieldValue(e,t){let i=e;for(var r of t.split(".")){if(null==i)return;i=i[r]}return i}};let Ut=new class{constructor(){this.stages={$match:(e,t)=>e.filter(e=>zt.evaluate(e,t)),$project:(e,t)=>e.map(e=>{var i,r={};for(i in t){var s=t[i];1===s||!0===s?r[i]=zt.getFieldValue(e,i):"string"==typeof s&&s.startsWith("$")&&(r[i]=zt.getFieldValue(e,s.substring(1)))}if(Object.values(t).some(e=>0===e||!1===e)){var a=Object.keys(t).filter(e=>0===t[e]||!1===t[e]);let i={...e};return a.forEach(e=>delete i[e]),i}return r}),$sort:(e,t)=>[...e].sort((e,i)=>{for(var r in t){var s=t[r],a=zt.getFieldValue(e,r);if(a<(r=zt.getFieldValue(i,r)))return-s;if(r<a)return s}return 0}),$limit:(e,t)=>e.slice(0,t),$skip:(e,t)=>e.slice(t),$group:(e,t)=>{var i,r=new Map,s=t._id;for(i of e){var a="string"==typeof s?zt.getFieldValue(i,s.replace("$","")):it.serialize(s);r.has(a)||r.set(a,{_id:a,docs:[]}),r.get(a).docs.push(i)}var n,o=[];for(n of r.values()){var h,c={_id:n._id};for(h in t)if("_id"!==h){var l=t[h],d=Object.keys(l)[0];let e=l[d].toString().replace("$","");switch(d){case"$sum":c[h]=n.docs.reduce((t,i)=>t+(zt.getFieldValue(i,e)||0),0);break;case"$avg":var u=n.docs.reduce((t,i)=>t+(zt.getFieldValue(i,e)||0),0);c[h]=u/n.docs.length;break;case"$count":c[h]=n.docs.length;break;case"$max":c[h]=Math.max(...n.docs.map(t=>zt.getFieldValue(t,e)));break;case"$min":c[h]=Math.min(...n.docs.map(t=>zt.getFieldValue(t,e)))}}o.push(c)}return o},$lookup:async(e,t,i)=>{i=await(await i.getCollection(t.from)).getAll();let r=new Map;return i.forEach(e=>{var i=zt.getFieldValue(e,t.foreignField);r.has(i)||r.set(i,[]),r.get(i).push(e)}),e.map(e=>{var i=zt.getFieldValue(e,t.localField);return{...e,[t.as]:r.get(i)||[]}})}}}async execute(e,t,i){let r=e;for(var s of t){var a=Object.keys(s)[0],n=(s=s[a],this.stages[a]);if(!n)throw new Error("Unknown aggregation stage: "+a);r="$lookup"===a?await n(r,s,i):n(r,s)}return r}};class It{constructor(e){this.database=e,this.migrations=[],this.currentVersion=this._loadVersion()}_loadVersion(){return localStorage.getItem(`lacertadb_${this.database.name}_version`)||"1.0.0"}_saveVersion(e){localStorage.setItem(`lacertadb_${this.database.name}_version`,e),this.currentVersion=e}addMigration(e){this.migrations.push(e)}_compareVersions(e,t){var i=e.split(".").map(Number),r=t.split(".").map(Number),s=Math.max(i.length,r.length);for(let e=0;e<s;e++){var a=i[e]||0,n=r[e]||0;if(n<a)return 1;if(a<n)return-1}return 0}async runMigrations(e){var t;for(t of this.migrations.filter(t=>0<this._compareVersions(t.version,this.currentVersion)&&this._compareVersions(t.version,e)<=0).sort((e,t)=>this._compareVersions(e.version,t.version)))await this._applyMigration(t,"up"),this._saveVersion(t.version)}async rollback(e){var t;for(t of this.migrations.filter(t=>t.down&&0<this._compareVersions(t.version,e)&&this._compareVersions(t.version,this.currentVersion)<=0).sort((e,t)=>this._compareVersions(t.version,e.version)))await this._applyMigration(t,"down");this._saveVersion(e)}async _applyMigration(e,t){var i;for(i of(console.log(`${"up"===t?"Running":"Rolling back"} migration: ${e.name} (v${e.version})`),await this.database.listCollections())){var r,s=await this.database.getCollection(i);for(r of await s.getAll()){var a=await e[t](r);a&&await s.update(r._id,a)}}}}class Dt{constructor(){this._metrics={operations:[],latencies:[],cacheHits:0,cacheMisses:0,memoryUsage:[]},this._monitoring=!1,this._monitoringInterval=null}startMonitoring(){this._monitoring||(this._monitoring=!0,this._monitoringInterval=setInterval(()=>this._collectMetrics(),1e3))}stopMonitoring(){this._monitoring&&(this._monitoring=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null)}recordOperation(e,t){this._monitoring&&(this._metrics.operations.push({type:e,duration:t,timestamp:Date.now()}),this._metrics.latencies.push(t),100<this._metrics.operations.length&&this._metrics.operations.shift(),100<this._metrics.latencies.length)&&this._metrics.latencies.shift()}recordCacheHit(){this._metrics.cacheHits++}recordCacheMiss(){this._metrics.cacheMisses++}_collectMetrics(){performance&&performance.memory&&(this._metrics.memoryUsage.push({used:performance.memory.usedJSHeapSize,total:performance.memory.totalJSHeapSize,limit:performance.memory.jsHeapSizeLimit,timestamp:Date.now()}),60<this._metrics.memoryUsage.length)&&this._metrics.memoryUsage.shift()}getStats(){var e=this._metrics.operations.filter(e=>Date.now()-e.timestamp<1e3).length,t=this._metrics.latencies.reduce((e,t)=>e+t,0),i=(t=0<this._metrics.latencies.length?t/this._metrics.latencies.length:0,0<(i=this._metrics.cacheHits+this._metrics.cacheMisses)?this._metrics.cacheHits/i*100:0),r=(r=0<this._metrics.memoryUsage.length?this._metrics.memoryUsage[this._metrics.memoryUsage.length-1]:null)?r.used/1048576:0;return{opsPerSec:e,avgLatency:t.toFixed(2),cacheHitRate:i.toFixed(1),memoryUsageMB:r.toFixed(2)}}getOptimizationTips(){var e=[],t=this.getStats();return 100<t.avgLatency&&e.push("High average latency detected. Consider enabling compression and indexing frequently queried fields."),t.cacheHitRate<50&&20<this._metrics.cacheHits+this._metrics.cacheMisses&&e.push("Low cache hit rate. Consider increasing cache size or optimizing query patterns."),10<this._metrics.memoryUsage.length&&10485760<(t=this._metrics.memoryUsage.slice(-10))[t.length-1].used-t[0].used&&e.push("Memory usage is increasing rapidly. Check for memory leaks or consider batch processing."),0<e.length?e:["Performance is optimal. No issues detected."]}}class Mt{constructor(e,t){this.name=e,this.database=t,this._db=null,this._metadata=null,this._settings=t.settings,this._indexedDB=new At,this._opfs=new bt,this._cleanupInterval=null,this._events=new Map,this._indexManager=new vt(this),this._cacheStrategy=new ut({type:"lru",maxSize:100,ttl:6e4,enabled:!0}),this._performanceMonitor=t.performanceMonitor,this._initialized=!1}get settings(){return this._settings}get metadata(){return this._metadata}get initialized(){return this._initialized}async init(){var e;return this._initialized||(e=this.database.name+"_"+this.name,this._db=await nt.getConnection(e,1,(e,t)=>{t<1&&!e.objectStoreNames.contains("documents")&&e.createObjectStore("documents",{keyPath:"_id"}).createIndex("modified","_modified",{unique:!1})}),e=this.database.metadata.collections[this.name],this._metadata=new St(this.name,e),await this._indexManager.loadIndexMetadata(),0<this._settings.freeSpaceEvery&&this._settings.sizeLimitKB!==1/0&&(this._cleanupInterval=setInterval(()=>this._freeSpace(),this._settings.freeSpaceEvery)),this._initialized=!0),this}async createIndex(e,t={}){return this._indexManager.createIndex(e,t)}async dropIndex(e){return this._indexManager.dropIndex(e)}async getIndexes(){return this._indexManager.getIndexStats()}async verifyIndexes(){return this._indexManager.verifyIndexes()}configureCacheStrategy(e){this._cacheStrategy.updateStrategy(e)}async add(e,t={}){if(this._initialized||await this.init(),t.encrypted&&!this.database.isEncrypted)throw new ht("Document-level encryption requires database-level encryption. Use getSecureDatabase() to create an encrypted database.","ENCRYPTION_NOT_INITIALIZED");await this._trigger("beforeAdd",e);e=new xt({data:e,_id:t.id},{compressed:!1!==t.compressed,permanent:t.permanent||!1}),(t=t.attachments)&&0<t.length&&(t=await Promise.all(t.map(e=>e instanceof File||e instanceof Blob?bt.prepareAttachment(e,e.name):Promise.resolve(e))),e._attachments=await this._opfs.saveAttachments(this.database.name,this.name,e._id,t)),await e.pack(this.database.encryption),t=e.databaseOutput();var i=(await this._indexedDB.add(this._db,"documents",t),e.objectOutput());await this._indexManager.updateIndexForDocument(e._id,null,i),i=t.packedData.byteLength/1024;return this._metadata.addDocument(e._id,i,e._permanent,e._attachments.length),this.database.metadata.setCollection(this._metadata),await this._checkSpaceLimit(),await this._trigger("afterAdd",e),this._cacheStrategy.clear(),e._id}async get(e,t={}){this._initialized||await this.init(),await this._trigger("beforeGet",e);var i,r=await this._indexedDB.get(this._db,"documents",e);if(r)return i=new xt(r,{encrypted:r._encrypted,compressed:r._compressed}),r.packedData&&await i.unpack(this.database.encryption),t.includeAttachments&&0<i._attachments.length&&(i.data._attachments=await this._opfs.getAttachments(i._attachments)),await this._trigger("afterGet",i),i.objectOutput(t.includeAttachments);throw new ht(`Document with id '${e}' not found.`,"DOCUMENT_NOT_FOUND")}async getAll(e={}){return this._initialized||await this.init(),e=await this._indexedDB.getAll(this._db,"documents",void 0,e.limit),Promise.all(e.map(async e=>{try{var t=new xt(e,{encrypted:e._encrypted,compressed:e._compressed});return e.packedData&&await t.unpack(this.database.encryption),t.objectOutput()}catch(t){return console.error(`Failed to unpack document ${e._id}:`,t),null}})).then(e=>e.filter(Boolean))}async update(e,t,i={}){this._initialized||await this.init(),await this._trigger("beforeUpdate",{docId:e,updates:t});var r,s,a=await this._indexedDB.get(this._db,"documents",e);if(a)return s=new xt(a),a.packedData&&await s.unpack(this.database.encryption),r=s.objectOutput(),s={...s.data,...t},(t=new xt({_id:e,_created:a._created,data:s},{compressed:void 0!==i.compressed?i.compressed:a._compressed,permanent:void 0!==i.permanent?i.permanent:a._permanent}))._modified=Date.now(),(s=i.attachments)&&0<s.length?(await this._opfs.deleteAttachments(this.database.name,this.name,e),i=await Promise.all(s.map(e=>e instanceof File||e instanceof Blob?bt.prepareAttachment(e,e.name):Promise.resolve(e))),t._attachments=await this._opfs.saveAttachments(this.database.name,this.name,t._id,i)):t._attachments=a._attachments,await t.pack(this.database.encryption),s=t.databaseOutput(),await this._indexedDB.put(this._db,"documents",s),i=t.objectOutput(),await this._indexManager.updateIndexForDocument(t._id,r,i),a=s.packedData.byteLength/1024,this._metadata.updateDocument(t._id,a,t._permanent,t._attachments.length),this.database.metadata.setCollection(this._metadata),await this._trigger("afterUpdate",t),this._cacheStrategy.clear(),t._id;throw new ht(`Document with id '${e}' not found for update.`,"DOCUMENT_NOT_FOUND")}async delete(e,t={}){this._initialized||await this.init(),await this._trigger("beforeDelete",e);var i=await this._indexedDB.get(this._db,"documents",e);if(!i)throw new ht("Document not found for deletion","DOCUMENT_NOT_FOUND");if(i._permanent&&!t.force)throw new ht("Cannot delete a permanent document. Use options.force = true to force deletion.","PERMANENT_DOCUMENT_PROTECTION");i._permanent&&t.force&&console.warn("Force deleting permanent document: "+e),t=await this.get(e),await this._indexManager.updateIndexForDocument(e,t,null),await this._indexedDB.delete(this._db,"documents",e),(t=i._attachments)&&0<t.length&&await this._opfs.deleteAttachments(this.database.name,this.name,e),this._metadata.removeDocument(e),this.database.metadata.setCollection(this._metadata),await this._trigger("afterDelete",e),this._cacheStrategy.clear()}async query(e={},t={}){this._initialized||await this.init();var i,r,s=performance.now(),a=rt.encode(it.serialize({filter:e,options:t})),n=this._cacheStrategy.get(a);if(n)return this._performanceMonitor&&this._performanceMonitor.recordCacheHit(),n;this._performanceMonitor&&this._performanceMonitor.recordCacheMiss();let o,h=!1;for([i,r]of this._indexManager.indexes){var c=e[r.fieldPath];if(void 0!==c){c=await this._indexManager.query(i,c),o=(o=await Promise.all(c.map(e=>this.get(e).catch(()=>null)))).filter(Boolean),h=!0;break}}return h||(o=await this.getAll(t),0<Object.keys(e).length&&(o=o.filter(t=>zt.evaluate(t,e)))),t.sort&&(o=Ut.stages.$sort(o,t.sort)),t.skip&&(o=Ut.stages.$skip(o,t.skip)),t.limit&&(o=Ut.stages.$limit(o,t.limit)),t.projection&&(o=Ut.stages.$project(o,t.projection)),this._performanceMonitor&&this._performanceMonitor.recordOperation(h?"indexed-query":"full-scan-query",performance.now()-s),this._cacheStrategy.set(a,o),o}async aggregate(e){this._initialized||await this.init();var t=performance.now(),i=await this.getAll();i=await Ut.execute(i,e,this.database);return this._performanceMonitor&&this._performanceMonitor.recordOperation("aggregate",performance.now()-t),i}async batchAdd(e,t){this._initialized||await this.init();var i,r=performance.now(),s=[];let a=[];for(i of e){var n=new xt({data:i},{compressed:!1!==t.compressed,permanent:t.permanent||!1});await n.pack(this.database.encryption),s.push({type:"add",data:n.databaseOutput()}),a.push(n)}var o,h,c=await this._indexedDB.batchOperation(this._db,s);for(let e=0;e<a.length;e++)c[e].success&&(h=(o=a[e]).objectOutput(),await this._indexManager.updateIndexForDocument(o._id,null,h),h=o._packedData.byteLength/1024,this._metadata.addDocument(o._id,h,o._permanent,0));return this.database.metadata.setCollection(this._metadata),this._performanceMonitor&&this._performanceMonitor.recordOperation("batchAdd",performance.now()-r),c.map((e,t)=>({...e,id:a[t]._id}))}async batchUpdate(e,t){return this._initialized||await this.init(),Promise.all(e.map(e=>this.update(e.id,e.data,t).then(e=>({success:!0,id:e})).catch(t=>({success:!1,id:e.id,error:t.message}))))}async batchDelete(e){return this._initialized||await this.init(),e=e.map(e=>"string"==typeof e?{id:e,options:{}}:{id:e.id,options:e.options||{}}),Promise.all(e.map(({id:e,options:t})=>this.delete(e,t).then(()=>({success:!0,id:e})).catch(t=>({success:!1,id:e,error:t.message}))))}async clear(e={}){if(this._initialized||await this.init(),e.force)for(var t of(await this._indexedDB.clear(this._db,"documents"),this._metadata=new St(this.name),this.database.metadata.setCollection(this._metadata),this._cacheStrategy.clear(),this._indexManager.indexes.keys()))await this._indexManager.rebuildIndex(t);else e=(await this.getAll()).filter(e=>!e._permanent),await this.batchDelete(e.map(e=>e._id))}async _checkSpaceLimit(){this._settings.sizeLimitKB!==1/0&&this._metadata.sizeKB>this._settings.bufferLimitKB&&await this._freeSpace()}async _freeSpace(){for(var e=.8*this._settings.bufferLimitKB;this._metadata.sizeKB>e;){var t=this._metadata.getOldestNonPermanentDocuments(10);if(0===t.length)break;await this.batchDelete(t)}}on(e,t){this._events.has(e)||this._events.set(e,[]),this._events.get(e).push(t)}off(e,t){var i;this._events.has(e)&&(i=this._events.get(e).filter(e=>e!==t),this._events.set(e,i))}async _trigger(e,t){if(this._events.has(e))for(var i of this._events.get(e))await i(t)}clearCache(){this._cacheStrategy.clear()}destroy(){var e;clearInterval(this._cleanupInterval),this._db&&(e=this.database.name+"_"+this.name,nt.releaseConnection(e))}}class Bt{constructor(e,t){this.name=e,this._collections=new Map,this._metadata=null,this._settings=null,this._quickStore=null,this._performanceMonitor=t,this._encryption=null,this._isEncrypted=!1}get collections(){return this._collections}get metadata(){return this._metadata}get settings(){return this._settings}get quickStore(){return this._quickStore}get performanceMonitor(){return this._performanceMonitor}get encryption(){return this._encryption}get isEncrypted(){return this._isEncrypted}async init(e={}){return this._metadata=kt.load(this.name),this._settings=Et.load(this.name),this._quickStore=new st(this.name),e.pin&&await this._initializeEncryption(e.pin,e.salt,e.encryptionConfig),this}async _initializeEncryption(e,t=null,i={}){this._encryption=new _t(i),i=`lacertadb_${this.name}_encryption`;let r=null;t||(s=localStorage.getItem(i))&&(s=rt.decode(s),(r=it.deserialize(s)).salt)&&(this._encryption.importMetadata(r),t=rt.decode(r.salt));var s=await this._encryption.initialize(e,t);return r||(e=this._encryption.exportMetadata(),t=it.serialize(e),e=rt.encode(t),localStorage.setItem(i,e)),this._isEncrypted=!0,s}async changePin(e,t){var i;if(this._isEncrypted)return e=await this._encryption.changePin(e,t),t=`lacertadb_${this.name}_encryption`,i=this._encryption.exportMetadata(),i=it.serialize(i),i=rt.encode(i),localStorage.setItem(t,i),e;throw new Error("Database is not encrypted")}async storePrivateKey(e,t,i=""){if(!this._isEncrypted)throw new Error("Database must be encrypted to store private keys");t=await this._encryption.encryptPrivateKey(t,i);let r=await this.getCollection("__private_keys__").catch(()=>null);return await(r=r||await this.createCollection("__private_keys__")).add({name:e,key:t,createdAt:Date.now()},{id:e,permanent:!0}),!0}async getPrivateKey(e,t=""){if(!this._isEncrypted)throw new Error("Database must be encrypted to retrieve private keys");var i=await(await this.getCollection("__private_keys__")).get(e);if(i)return this._encryption.decryptPrivateKey(i.key,t);throw new Error(`Private key '${e}' not found`)}async createCollection(e,t){if(this._collections.has(e))throw new ht(`Collection '${e}' already exists.`,"COLLECTION_EXISTS");var i=new Mt(e,this);return this._collections.set(e,i),this._metadata.collections[e]||this._metadata.setCollection(new St(e)),i}async getCollection(e){var t;if(this._collections.has(e))return(t=this._collections.get(e)).initialized||await t.init(),t;if(this._metadata.collections[e])return t=new Mt(e,this),this._collections.set(e,t),await t.init(),t;throw new ht(`Collection '${e}' not found.`,"COLLECTION_NOT_FOUND")}async dropCollection(e){var t;this._collections.has(e)&&((t=this._collections.get(e)).initialized&&(await t.clear({force:!0}),t.destroy()),this._collections.delete(e)),this._metadata.removeCollection(e);let i=this.name+"_"+e;await new Promise((e,t)=>{var r=indexedDB.deleteDatabase(i);r.onsuccess=e,r.onerror=t,r.onblocked=()=>console.warn(`Deletion of '${i}' is blocked.`)})}listCollections(){return Object.keys(this._metadata.collections)}getStats(){return{name:this.name,totalSizeKB:this._metadata.totalSizeKB,totalDocuments:this._metadata.totalLength,collections:Object.entries(this._metadata.collections).map(([e,t])=>({name:e,sizeKB:t.sizeKB,documents:t.length,createdAt:new Date(t.createdAt).toISOString(),modifiedAt:new Date(t.modifiedAt).toISOString()}))}}updateSettings(e){this._settings.updateSettings(e)}async export(e="json",t=null){var i,r,s,a={version:"0.7.0",database:this.name,timestamp:Date.now(),collections:{}};for(i of this.listCollections()){var n=await this.getCollection(i);a.collections[i]=await n.getAll()}if("json"===e)return s=it.serialize(a),rt.encode(s);if("encrypted"===e&&t)return s=new pt,r=it.serialize(a),s=await s.encrypt(r,t),rt.encode(s);throw new ht("Unsupported export format: "+e,"INVALID_FORMAT")}async import(e,t="json",i=null){let r;try{var s,a=rt.decode(e);r="encrypted"===t&&i?(s=await(new pt).decrypt(a,i),it.deserialize(s)):it.deserialize(a)}catch(e){throw new ht("Failed to parse import data","IMPORT_PARSE_FAILED",e)}for(var n in r.collections){var o=r.collections[n];let t;try{t=await this.createCollection(n)}catch(e){if("COLLECTION_EXISTS"!==e.code)throw e;t=await this.getCollection(n)}await t.batchAdd(o)}return e=Object.values(r.collections).reduce((e,t)=>e+t.length,0),{collections:Object.keys(r.collections).length,documents:e}}async clearAll(){await Promise.all([...this._collections.keys()].map(e=>this.dropCollection(e))),this._collections.clear(),this._metadata=new kt(this.name),this._metadata.save(),this._quickStore.clear()}destroy(){this._collections.forEach(e=>{e.initialized&&e.destroy()}),this._collections.clear(),this._encryption&&this._encryption.destroy()}}class Ct{constructor(){this._databases=new Map,this._performanceMonitor=new Dt}get performanceMonitor(){return this._performanceMonitor}async getDatabase(e,t={}){var i;return this._databases.has(e)||(await(i=new Bt(e,this._performanceMonitor)).init(t),this._databases.set(e,i)),this._databases.get(e)}async getSecureDatabase(e,t,i=null,r={}){return this.getDatabase(e,{pin:t,salt:i,encryptionConfig:r})}async dropDatabase(e){var t;this._databases.has(e)&&(await(t=this._databases.get(e)).clearAll(),t.destroy(),this._databases.delete(e)),["metadata","settings","version","encryption"].forEach(t=>{localStorage.removeItem(`lacertadb_${e}_`+t)}),new st(e).clear();var i=[];for(let t=0;t<localStorage.length;t++){var r=localStorage.key(t);r&&r.startsWith(`lacertadb_${e}_`)&&i.push(r)}i.forEach(e=>localStorage.removeItem(e))}listDatabases(){var e=new Set;for(let i=0;i<localStorage.length;i++){var t=localStorage.key(i);t&&t.startsWith("lacertadb_")&&(t=t.match(/^lacertadb_([^_]+)_(metadata|settings|version|encryption|quickstore)$/))&&e.add(t[1])}return[...e]}async createBackup(e=null){var t,i={version:"0.7.0",timestamp:Date.now(),databases:{}};for(t of this.listDatabases()){var r=await(await this.getDatabase(t)).export("json");r=rt.decode(r);i.databases[t]=it.deserialize(r)}var s=it.serialize(i);return e?(e=await(new pt).encrypt(s,e),rt.encode(e)):rt.encode(s)}async restoreBackup(e,t=null){let i;try{var r,s=rt.decode(e);i=t?(r=await(new pt).decrypt(s,t),it.deserialize(r)):it.deserialize(s)}catch(e){throw new ht("Failed to parse backup data","BACKUP_PARSE_FAILED",e)}var a,n,o={databases:0,collections:0,documents:0};for([a,n]of Object.entries(i.databases)){var h=await this.getDatabase(a),c=rt.encode(it.serialize(n));h=await h.import(c);o.databases++,o.collections+=h.collections,o.documents+=h.documents}return o}destroy(){for(var e of this._databases.values())e.destroy();this._databases.clear(),nt.closeAll()}}}]);
|
package/index.js
CHANGED
|
@@ -3148,4 +3148,465 @@ class Collection {
|
|
|
3148
3148
|
connectionPool.releaseConnection(dbName);
|
|
3149
3149
|
}
|
|
3150
3150
|
}
|
|
3151
|
-
}
|
|
3151
|
+
}
|
|
3152
|
+
// ========================
|
|
3153
|
+
// Database Class (Optimized with QuickStore)
|
|
3154
|
+
// ========================
|
|
3155
|
+
|
|
3156
|
+
class Database {
|
|
3157
|
+
constructor(name, performanceMonitor) {
|
|
3158
|
+
this.name = name;
|
|
3159
|
+
this._collections = new Map();
|
|
3160
|
+
this._metadata = null;
|
|
3161
|
+
this._settings = null;
|
|
3162
|
+
this._quickStore = null;
|
|
3163
|
+
this._performanceMonitor = performanceMonitor;
|
|
3164
|
+
|
|
3165
|
+
// Database-level encryption
|
|
3166
|
+
this._encryption = null;
|
|
3167
|
+
this._isEncrypted = false;
|
|
3168
|
+
}
|
|
3169
|
+
|
|
3170
|
+
get collections() {
|
|
3171
|
+
return this._collections;
|
|
3172
|
+
}
|
|
3173
|
+
|
|
3174
|
+
get metadata() {
|
|
3175
|
+
return this._metadata;
|
|
3176
|
+
}
|
|
3177
|
+
|
|
3178
|
+
get settings() {
|
|
3179
|
+
return this._settings;
|
|
3180
|
+
}
|
|
3181
|
+
|
|
3182
|
+
get quickStore() {
|
|
3183
|
+
return this._quickStore;
|
|
3184
|
+
}
|
|
3185
|
+
|
|
3186
|
+
get performanceMonitor() {
|
|
3187
|
+
return this._performanceMonitor;
|
|
3188
|
+
}
|
|
3189
|
+
|
|
3190
|
+
get encryption() {
|
|
3191
|
+
return this._encryption;
|
|
3192
|
+
}
|
|
3193
|
+
|
|
3194
|
+
get isEncrypted() {
|
|
3195
|
+
return this._isEncrypted;
|
|
3196
|
+
}
|
|
3197
|
+
|
|
3198
|
+
async init(options = {}) {
|
|
3199
|
+
this._metadata = DatabaseMetadata.load(this.name);
|
|
3200
|
+
this._settings = Settings.load(this.name);
|
|
3201
|
+
this._quickStore = new QuickStore(this.name);
|
|
3202
|
+
|
|
3203
|
+
if (options.pin) {
|
|
3204
|
+
await this._initializeEncryption(options.pin, options.salt, options.encryptionConfig);
|
|
3205
|
+
}
|
|
3206
|
+
|
|
3207
|
+
return this;
|
|
3208
|
+
}
|
|
3209
|
+
|
|
3210
|
+
async _initializeEncryption(pin, salt = null, config = {}) {
|
|
3211
|
+
this._encryption = new SecureDatabaseEncryption(config);
|
|
3212
|
+
|
|
3213
|
+
const encMetaKey = `lacertadb_${this.name}_encryption`;
|
|
3214
|
+
let existingMetadata = null;
|
|
3215
|
+
|
|
3216
|
+
if (!salt) {
|
|
3217
|
+
const stored = localStorage.getItem(encMetaKey);
|
|
3218
|
+
if (stored) {
|
|
3219
|
+
const decoded = base64.decode(stored);
|
|
3220
|
+
existingMetadata = serializer.deserialize(decoded);
|
|
3221
|
+
if (existingMetadata.salt) {
|
|
3222
|
+
this._encryption.importMetadata(existingMetadata);
|
|
3223
|
+
salt = base64.decode(existingMetadata.salt);
|
|
3224
|
+
}
|
|
3225
|
+
}
|
|
3226
|
+
}
|
|
3227
|
+
|
|
3228
|
+
const saltBase64 = await this._encryption.initialize(pin, salt);
|
|
3229
|
+
|
|
3230
|
+
if (!existingMetadata) {
|
|
3231
|
+
const metadata = this._encryption.exportMetadata();
|
|
3232
|
+
const serialized = serializer.serialize(metadata);
|
|
3233
|
+
const encoded = base64.encode(serialized);
|
|
3234
|
+
localStorage.setItem(encMetaKey, encoded);
|
|
3235
|
+
}
|
|
3236
|
+
|
|
3237
|
+
this._isEncrypted = true;
|
|
3238
|
+
return saltBase64;
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3241
|
+
async changePin(oldPin, newPin) {
|
|
3242
|
+
if (!this._isEncrypted) {
|
|
3243
|
+
throw new Error('Database is not encrypted');
|
|
3244
|
+
}
|
|
3245
|
+
|
|
3246
|
+
const newSalt = await this._encryption.changePin(oldPin, newPin);
|
|
3247
|
+
|
|
3248
|
+
const encMetaKey = `lacertadb_${this.name}_encryption`;
|
|
3249
|
+
const metadata = this._encryption.exportMetadata();
|
|
3250
|
+
const serialized = serializer.serialize(metadata);
|
|
3251
|
+
const encoded = base64.encode(serialized);
|
|
3252
|
+
localStorage.setItem(encMetaKey, encoded);
|
|
3253
|
+
|
|
3254
|
+
return newSalt;
|
|
3255
|
+
}
|
|
3256
|
+
|
|
3257
|
+
async storePrivateKey(keyName, privateKey, additionalAuth = '') {
|
|
3258
|
+
if (!this._isEncrypted) {
|
|
3259
|
+
throw new Error('Database must be encrypted to store private keys');
|
|
3260
|
+
}
|
|
3261
|
+
|
|
3262
|
+
const encryptedKey = await this._encryption.encryptPrivateKey(
|
|
3263
|
+
privateKey,
|
|
3264
|
+
additionalAuth
|
|
3265
|
+
);
|
|
3266
|
+
|
|
3267
|
+
let keyStore = await this.getCollection('__private_keys__').catch(() => null);
|
|
3268
|
+
if (!keyStore) {
|
|
3269
|
+
keyStore = await this.createCollection('__private_keys__');
|
|
3270
|
+
}
|
|
3271
|
+
|
|
3272
|
+
await keyStore.add({
|
|
3273
|
+
name: keyName,
|
|
3274
|
+
key: encryptedKey,
|
|
3275
|
+
createdAt: Date.now()
|
|
3276
|
+
}, {
|
|
3277
|
+
id: keyName,
|
|
3278
|
+
permanent: true
|
|
3279
|
+
});
|
|
3280
|
+
|
|
3281
|
+
return true;
|
|
3282
|
+
}
|
|
3283
|
+
|
|
3284
|
+
async getPrivateKey(keyName, additionalAuth = '') {
|
|
3285
|
+
if (!this._isEncrypted) {
|
|
3286
|
+
throw new Error('Database must be encrypted to retrieve private keys');
|
|
3287
|
+
}
|
|
3288
|
+
|
|
3289
|
+
const keyStore = await this.getCollection('__private_keys__');
|
|
3290
|
+
const doc = await keyStore.get(keyName);
|
|
3291
|
+
|
|
3292
|
+
if (!doc) {
|
|
3293
|
+
throw new Error(`Private key '${keyName}' not found`);
|
|
3294
|
+
}
|
|
3295
|
+
|
|
3296
|
+
return await this._encryption.decryptPrivateKey(doc.key, additionalAuth);
|
|
3297
|
+
}
|
|
3298
|
+
|
|
3299
|
+
async createCollection(name, options) {
|
|
3300
|
+
if (this._collections.has(name)) {
|
|
3301
|
+
throw new LacertaDBError(`Collection '${name}' already exists.`, 'COLLECTION_EXISTS');
|
|
3302
|
+
}
|
|
3303
|
+
|
|
3304
|
+
const collection = new Collection(name, this);
|
|
3305
|
+
// Lazy initialization - don't init here
|
|
3306
|
+
this._collections.set(name, collection);
|
|
3307
|
+
|
|
3308
|
+
if (!this._metadata.collections[name]) {
|
|
3309
|
+
this._metadata.setCollection(new CollectionMetadata(name));
|
|
3310
|
+
}
|
|
3311
|
+
return collection;
|
|
3312
|
+
}
|
|
3313
|
+
|
|
3314
|
+
async getCollection(name) {
|
|
3315
|
+
if (this._collections.has(name)) {
|
|
3316
|
+
const collection = this._collections.get(name);
|
|
3317
|
+
if (!collection.initialized) {
|
|
3318
|
+
await collection.init();
|
|
3319
|
+
}
|
|
3320
|
+
return collection;
|
|
3321
|
+
}
|
|
3322
|
+
if (this._metadata.collections[name]) {
|
|
3323
|
+
const collection = new Collection(name, this);
|
|
3324
|
+
this._collections.set(name, collection);
|
|
3325
|
+
await collection.init();
|
|
3326
|
+
return collection;
|
|
3327
|
+
}
|
|
3328
|
+
throw new LacertaDBError(`Collection '${name}' not found.`, 'COLLECTION_NOT_FOUND');
|
|
3329
|
+
}
|
|
3330
|
+
|
|
3331
|
+
async dropCollection(name) {
|
|
3332
|
+
if (this._collections.has(name)) {
|
|
3333
|
+
const collection = this._collections.get(name);
|
|
3334
|
+
if (collection.initialized) {
|
|
3335
|
+
await collection.clear({ force: true });
|
|
3336
|
+
collection.destroy();
|
|
3337
|
+
}
|
|
3338
|
+
this._collections.delete(name);
|
|
3339
|
+
}
|
|
3340
|
+
|
|
3341
|
+
this._metadata.removeCollection(name);
|
|
3342
|
+
|
|
3343
|
+
const dbName = `${this.name}_${name}`;
|
|
3344
|
+
await new Promise((resolve, reject) => {
|
|
3345
|
+
const deleteReq = indexedDB.deleteDatabase(dbName);
|
|
3346
|
+
deleteReq.onsuccess = resolve;
|
|
3347
|
+
deleteReq.onerror = reject;
|
|
3348
|
+
deleteReq.onblocked = () => console.warn(`Deletion of '${dbName}' is blocked.`);
|
|
3349
|
+
});
|
|
3350
|
+
}
|
|
3351
|
+
|
|
3352
|
+
listCollections() {
|
|
3353
|
+
return Object.keys(this._metadata.collections);
|
|
3354
|
+
}
|
|
3355
|
+
|
|
3356
|
+
getStats() {
|
|
3357
|
+
return {
|
|
3358
|
+
name: this.name,
|
|
3359
|
+
totalSizeKB: this._metadata.totalSizeKB,
|
|
3360
|
+
totalDocuments: this._metadata.totalLength,
|
|
3361
|
+
collections: Object.entries(this._metadata.collections).map(([name, data]) => ({
|
|
3362
|
+
name,
|
|
3363
|
+
sizeKB: data.sizeKB,
|
|
3364
|
+
documents: data.length,
|
|
3365
|
+
createdAt: new Date(data.createdAt).toISOString(),
|
|
3366
|
+
modifiedAt: new Date(data.modifiedAt).toISOString()
|
|
3367
|
+
}))
|
|
3368
|
+
};
|
|
3369
|
+
}
|
|
3370
|
+
|
|
3371
|
+
updateSettings(newSettings) {
|
|
3372
|
+
this._settings.updateSettings(newSettings);
|
|
3373
|
+
}
|
|
3374
|
+
|
|
3375
|
+
async export(format = 'json', password = null) {
|
|
3376
|
+
const data = {
|
|
3377
|
+
version: '0.7.0',
|
|
3378
|
+
database: this.name,
|
|
3379
|
+
timestamp: Date.now(),
|
|
3380
|
+
collections: {}
|
|
3381
|
+
};
|
|
3382
|
+
|
|
3383
|
+
for (const collName of this.listCollections()) {
|
|
3384
|
+
const collection = await this.getCollection(collName);
|
|
3385
|
+
data.collections[collName] = await collection.getAll();
|
|
3386
|
+
}
|
|
3387
|
+
|
|
3388
|
+
if (format === 'json') {
|
|
3389
|
+
const serialized = serializer.serialize(data);
|
|
3390
|
+
return base64.encode(serialized);
|
|
3391
|
+
}
|
|
3392
|
+
if (format === 'encrypted' && password) {
|
|
3393
|
+
const encryption = new BrowserEncryptionUtility();
|
|
3394
|
+
const serializedData = serializer.serialize(data);
|
|
3395
|
+
const encrypted = await encryption.encrypt(serializedData, password);
|
|
3396
|
+
return base64.encode(encrypted);
|
|
3397
|
+
}
|
|
3398
|
+
throw new LacertaDBError(`Unsupported export format: ${format}`, 'INVALID_FORMAT');
|
|
3399
|
+
}
|
|
3400
|
+
|
|
3401
|
+
async import(data, format = 'json', password = null) {
|
|
3402
|
+
let parsed;
|
|
3403
|
+
try {
|
|
3404
|
+
const decoded = base64.decode(data);
|
|
3405
|
+
if (format === 'encrypted' && password) {
|
|
3406
|
+
const encryption = new BrowserEncryptionUtility();
|
|
3407
|
+
const decrypted = await encryption.decrypt(decoded, password);
|
|
3408
|
+
parsed = serializer.deserialize(decrypted);
|
|
3409
|
+
} else {
|
|
3410
|
+
parsed = serializer.deserialize(decoded);
|
|
3411
|
+
}
|
|
3412
|
+
} catch (e) {
|
|
3413
|
+
throw new LacertaDBError('Failed to parse import data', 'IMPORT_PARSE_FAILED', e);
|
|
3414
|
+
}
|
|
3415
|
+
|
|
3416
|
+
for (const collName in parsed.collections) {
|
|
3417
|
+
const docs = parsed.collections[collName];
|
|
3418
|
+
let collection;
|
|
3419
|
+
try {
|
|
3420
|
+
collection = await this.createCollection(collName);
|
|
3421
|
+
} catch (e) {
|
|
3422
|
+
if (e.code === 'COLLECTION_EXISTS') {
|
|
3423
|
+
collection = await this.getCollection(collName);
|
|
3424
|
+
} else {
|
|
3425
|
+
throw e;
|
|
3426
|
+
}
|
|
3427
|
+
}
|
|
3428
|
+
await collection.batchAdd(docs);
|
|
3429
|
+
}
|
|
3430
|
+
|
|
3431
|
+
const docCount = Object.values(parsed.collections).reduce((sum, docs) => sum + docs.length, 0);
|
|
3432
|
+
return {
|
|
3433
|
+
collections: Object.keys(parsed.collections).length,
|
|
3434
|
+
documents: docCount
|
|
3435
|
+
};
|
|
3436
|
+
}
|
|
3437
|
+
|
|
3438
|
+
async clearAll() {
|
|
3439
|
+
await Promise.all([...this._collections.keys()].map(name => this.dropCollection(name)));
|
|
3440
|
+
this._collections.clear();
|
|
3441
|
+
this._metadata = new DatabaseMetadata(this.name);
|
|
3442
|
+
this._metadata.save();
|
|
3443
|
+
this._quickStore.clear();
|
|
3444
|
+
}
|
|
3445
|
+
|
|
3446
|
+
destroy() {
|
|
3447
|
+
this._collections.forEach(collection => {
|
|
3448
|
+
if (collection.initialized) {
|
|
3449
|
+
collection.destroy();
|
|
3450
|
+
}
|
|
3451
|
+
});
|
|
3452
|
+
this._collections.clear();
|
|
3453
|
+
if (this._encryption) {
|
|
3454
|
+
this._encryption.destroy();
|
|
3455
|
+
}
|
|
3456
|
+
}
|
|
3457
|
+
}
|
|
3458
|
+
|
|
3459
|
+
// ========================
|
|
3460
|
+
// Main LacertaDB Class
|
|
3461
|
+
// ========================
|
|
3462
|
+
|
|
3463
|
+
class LacertaDB {
|
|
3464
|
+
constructor() {
|
|
3465
|
+
this._databases = new Map();
|
|
3466
|
+
this._performanceMonitor = new PerformanceMonitor();
|
|
3467
|
+
}
|
|
3468
|
+
|
|
3469
|
+
get performanceMonitor() {
|
|
3470
|
+
return this._performanceMonitor;
|
|
3471
|
+
}
|
|
3472
|
+
|
|
3473
|
+
async getDatabase(name, options = {}) {
|
|
3474
|
+
if (!this._databases.has(name)) {
|
|
3475
|
+
const db = new Database(name, this._performanceMonitor);
|
|
3476
|
+
await db.init(options);
|
|
3477
|
+
this._databases.set(name, db);
|
|
3478
|
+
}
|
|
3479
|
+
return this._databases.get(name);
|
|
3480
|
+
}
|
|
3481
|
+
|
|
3482
|
+
async getSecureDatabase(name, pin, salt = null, encryptionConfig = {}) {
|
|
3483
|
+
return this.getDatabase(name, { pin, salt, encryptionConfig });
|
|
3484
|
+
}
|
|
3485
|
+
|
|
3486
|
+
async dropDatabase(name) {
|
|
3487
|
+
if (this._databases.has(name)) {
|
|
3488
|
+
const db = this._databases.get(name);
|
|
3489
|
+
await db.clearAll();
|
|
3490
|
+
db.destroy();
|
|
3491
|
+
this._databases.delete(name);
|
|
3492
|
+
}
|
|
3493
|
+
|
|
3494
|
+
['metadata', 'settings', 'version', 'encryption'].forEach(suffix => {
|
|
3495
|
+
localStorage.removeItem(`lacertadb_${name}_${suffix}`);
|
|
3496
|
+
});
|
|
3497
|
+
|
|
3498
|
+
// Clean up quickstore
|
|
3499
|
+
const quickStore = new QuickStore(name);
|
|
3500
|
+
quickStore.clear();
|
|
3501
|
+
|
|
3502
|
+
// Clean up all collections and indexes
|
|
3503
|
+
const keysToRemove = [];
|
|
3504
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
3505
|
+
const key = localStorage.key(i);
|
|
3506
|
+
if (key && key.startsWith(`lacertadb_${name}_`)) {
|
|
3507
|
+
keysToRemove.push(key);
|
|
3508
|
+
}
|
|
3509
|
+
}
|
|
3510
|
+
keysToRemove.forEach(key => localStorage.removeItem(key));
|
|
3511
|
+
}
|
|
3512
|
+
|
|
3513
|
+
listDatabases() {
|
|
3514
|
+
const dbNames = new Set();
|
|
3515
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
3516
|
+
const key = localStorage.key(i);
|
|
3517
|
+
if (key && key.startsWith('lacertadb_')) {
|
|
3518
|
+
const match = key.match(/^lacertadb_([^_]+)_(metadata|settings|version|encryption|quickstore)$/);
|
|
3519
|
+
if (match) {
|
|
3520
|
+
dbNames.add(match[1]);
|
|
3521
|
+
}
|
|
3522
|
+
}
|
|
3523
|
+
}
|
|
3524
|
+
return [...dbNames];
|
|
3525
|
+
}
|
|
3526
|
+
|
|
3527
|
+
async createBackup(password = null) {
|
|
3528
|
+
const backup = {
|
|
3529
|
+
version: '0.7.0',
|
|
3530
|
+
timestamp: Date.now(),
|
|
3531
|
+
databases: {}
|
|
3532
|
+
};
|
|
3533
|
+
|
|
3534
|
+
for (const dbName of this.listDatabases()) {
|
|
3535
|
+
const db = await this.getDatabase(dbName);
|
|
3536
|
+
const exported = await db.export('json');
|
|
3537
|
+
const decoded = base64.decode(exported);
|
|
3538
|
+
backup.databases[dbName] = serializer.deserialize(decoded);
|
|
3539
|
+
}
|
|
3540
|
+
|
|
3541
|
+
const serializedBackup = serializer.serialize(backup);
|
|
3542
|
+
if (password) {
|
|
3543
|
+
const encryption = new BrowserEncryptionUtility();
|
|
3544
|
+
const encrypted = await encryption.encrypt(serializedBackup, password);
|
|
3545
|
+
return base64.encode(encrypted);
|
|
3546
|
+
}
|
|
3547
|
+
return base64.encode(serializedBackup);
|
|
3548
|
+
}
|
|
3549
|
+
|
|
3550
|
+
async restoreBackup(backupData, password = null) {
|
|
3551
|
+
let backup;
|
|
3552
|
+
try {
|
|
3553
|
+
let decodedData = base64.decode(backupData);
|
|
3554
|
+
if (password) {
|
|
3555
|
+
const encryption = new BrowserEncryptionUtility();
|
|
3556
|
+
const decrypted = await encryption.decrypt(decodedData, password);
|
|
3557
|
+
backup = serializer.deserialize(decrypted);
|
|
3558
|
+
} else {
|
|
3559
|
+
backup = serializer.deserialize(decodedData);
|
|
3560
|
+
}
|
|
3561
|
+
} catch (e) {
|
|
3562
|
+
throw new LacertaDBError('Failed to parse backup data', 'BACKUP_PARSE_FAILED', e);
|
|
3563
|
+
}
|
|
3564
|
+
|
|
3565
|
+
const results = { databases: 0, collections: 0, documents: 0 };
|
|
3566
|
+
for (const [dbName, dbData] of Object.entries(backup.databases)) {
|
|
3567
|
+
const db = await this.getDatabase(dbName);
|
|
3568
|
+
const encodedDbData = base64.encode(serializer.serialize(dbData));
|
|
3569
|
+
const importResult = await db.import(encodedDbData);
|
|
3570
|
+
|
|
3571
|
+
results.databases++;
|
|
3572
|
+
results.collections += importResult.collections;
|
|
3573
|
+
results.documents += importResult.documents;
|
|
3574
|
+
}
|
|
3575
|
+
return results;
|
|
3576
|
+
}
|
|
3577
|
+
|
|
3578
|
+
destroy() {
|
|
3579
|
+
for (const db of this._databases.values()) {
|
|
3580
|
+
db.destroy();
|
|
3581
|
+
}
|
|
3582
|
+
this._databases.clear();
|
|
3583
|
+
connectionPool.closeAll();
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
|
|
3587
|
+
// ========================
|
|
3588
|
+
// Export all components
|
|
3589
|
+
// ========================
|
|
3590
|
+
|
|
3591
|
+
export {
|
|
3592
|
+
LacertaDB,
|
|
3593
|
+
Database,
|
|
3594
|
+
Collection,
|
|
3595
|
+
Document,
|
|
3596
|
+
MigrationManager,
|
|
3597
|
+
PerformanceMonitor,
|
|
3598
|
+
LacertaDBError,
|
|
3599
|
+
OPFSUtility,
|
|
3600
|
+
IndexManager,
|
|
3601
|
+
CacheStrategy,
|
|
3602
|
+
LRUCache,
|
|
3603
|
+
LFUCache,
|
|
3604
|
+
TTLCache,
|
|
3605
|
+
BTreeIndex,
|
|
3606
|
+
TextIndex,
|
|
3607
|
+
GeoIndex,
|
|
3608
|
+
SecureDatabaseEncryption,
|
|
3609
|
+
QuickStore,
|
|
3610
|
+
AsyncMutex,
|
|
3611
|
+
IndexedDBConnectionPool
|
|
3612
|
+
};
|