@pixagram/lacerta-db 0.5.2 → 0.5.4

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.
@@ -1,9 +1,9 @@
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,c,l,d,u,f,p,w,m){if(!(this instanceof r.Int8x16))return new r.Int8x16(e,t,i,s,a,n,o,h,c,l,d,u,f,p,w,m);this.s_=new Int8Array([e,t,i,s,a,n,o,h,c,l,d,u,f,p,w,m])},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,c,l,d,u,f,p,w,m,y,g,v){var b=[i,a,n,o,h,c,l,d,u,f,p,w,m,y,g,v],A=[];e=r.Int8x16.check(e),t=r.Int8x16.check(t);for(var x=0;x<16;x++){var _=b[x];s(_,32),A[x]=_<16?e.s_[_]:t.s_[_-16]}return new r.Int8x16(...A)}),void 0!==r.Uint8x16&&void 0!==r.Uint8x16.extractLane||(r.Uint8x16=function(e,t,i,s,a,n,o,h,c,l,d,u,f,p,w,m){if(!(this instanceof r.Uint8x16))return new r.Uint8x16(e,t,i,s,a,n,o,h,c,l,d,u,f,p,w,m);this.s_=new Uint8Array([e,t,i,s,a,n,o,h,c,l,d,u,f,p,w,m])},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,c,l,d,u,f,p,w,m,y,g,v){var b=[i,a,n,o,h,c,l,d,u,f,p,w,m,y,g,v],A=[];e=r.Uint8x16.check(e),t=r.Uint8x16.check(t);for(var x=0;x<16;x++){var _=b[x];s(_,32),A[x]=_<16?e.s_[_]:t.s_[_-16]}return new r.Uint8x16(...A)},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,c=80,l=96,d=112,u=128,f=144,p=160,w=176,m=192,y=224,g=240,v=0,b=1,A=2,x=3,_=16,S=17,E=18,U=19,k=20,I=21,D=22,M=23,z=24,V=25,B=26,C=32,T=33,O=34,P=35,L=48,F=49,R=50,$=51,N=52,j=53,K=54,q=55,H=64,W=65,G=66,Y=67,J=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,ce=99,le=100,de=101,ue=102,fe=103,pe=104,we=105,me=106,ye=107,ge=112,ve=113,be=114,Ae=128,xe=129,_e=144,Se=145,Ee=160,Ue=161,ke=162,Ie=163,De=164,Me=165,ze=166,Ve=167,Be=168,Ce=176,Te=192,Oe=193,Pe=208,Le=209,Fe=224,Re=225,$e=226,Ne=227,je=240,Ke=new Uint8Array(256),qe=new Uint8Array(256);new Map;let He=new Map,We=new Map;var Ge=[[S,2],[E,4],[U,4],[k,4],[I,8],[C,8],[T,8]];for(let e=0;e<Ge.length;e++)Ke[Ge[e][0]]=Ge[e][1];var Ye,Je=[[ne,1],[oe,1],[he,1],[ce,2],[le,2],[de,4],[ue,4],[fe,4],[pe,8],[we,8],[me,8],[Y,1],[J,2],[Q,4],[X,4],[Z,8]];for(let e=0;e<Je.length;e++)qe[Je[e][0]]=Je[e][1];for(Ye of["asyncIterator","hasInstance","isConcatSpreadable","iterator","match","matchAll","replace","search","species","split","toPrimitive","toStringTag","unscopables"]){var Qe=Symbol[Ye];Qe&&(He.set(Qe,Ye),We.set(Ye,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|qe[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 Y:new Int8Array(this.buffer,this.pos,r).set(e),this.pos=this.pos+r|0;break;case J: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:Y,elementSize:1},{type:J,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,_e],[RegExp,Ce],[Map,Ae],[Set,xe],[ArrayBuffer,ge],[DataView,ye]],a=[["Uint8Array",ne],["Int8Array",oe],["Uint8ClampedArray",he],["Uint16Array",ce],["Int16Array",le],["Uint32Array",de],["Int32Array",ue],["Float32Array",fe],["Float64Array",pe],["BigInt64Array",we],["BigUint64Array",me],["SharedArrayBuffer",be]];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",Ue),this.errorTypeMap.set("RangeError",ke),this.errorTypeMap.set("ReferenceError",Ie),this.errorTypeMap.set("SyntaxError",De),this.errorTypeMap.set("TypeError",Me),this.errorTypeMap.set("URIError",ze),this.errorTypeMap.set("AggregateError",Ve)}detect(e){if(null==e)return null===e?v:b;switch(typeof e){case"boolean":return e?x:A;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 b}}detectNumber(e){var t,r,i;return e!=e?D:(i=new Float64Array([e]),((t=(i=new Uint32Array(i.buffer))[1])&(r=2146435072))==r&0==i[0]&0==(1048575&t)?t>>>31?z:M:0==e&&t>>>31?V:e==(0|e)?(i=+((r=Math.abs(e))<=127)<<0|+(r<=32767)<<1|+(r<=2147483647)<<2,[B,_,S,E][Math.min(i,3)]):Math.fround(e)==e?k:I)}detectBigInt(e){var t=e<0n;return(t?-e:e)<=0x7fffffffffffffffn?t?T:C:t?P:O}detectString(e){var t,r=e.length;if(0==r)return L;let i=1;for(let t=0;t<r&&i;t++)i&=+(e.charCodeAt(t)<=127);return i?r<16?F:r<256?R:$:(t=(new TextEncoder).encode(e).length)<16?N:t<256?j:K}detectSymbol(e){return void 0!==Symbol.keyFor(e)?Re:He.has(e)?$e:void 0===e.description?Ne:Fe}detectObject(e){var t,r;return null==e?v:(t=e.constructor,void 0!==(t=this.constructorMap.get(t))?t==_e?(r=e.getTime())==r?_e: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?Oe:Te: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 H;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:W}detectTypedArrayType(e){return e=e.constructor.name,this.typeNameMap.get(e)||ne}detectErrorType(e){return e=e.constructor.name,this.errorTypeMap.get(e)||Be}}var tt=r(0);tt=r.n(tt);r.d(t,"LacertaDB",(function(){return zt})),r.d(t,"Database",(function(){return Mt})),r.d(t,"Collection",(function(){return Dt})),r.d(t,"Document",(function(){return bt})),r.d(t,"MigrationManager",(function(){return kt})),r.d(t,"PerformanceMonitor",(function(){return It})),r.d(t,"LacertaDBError",(function(){return at})),r.d(t,"OPFSUtility",(function(){return gt})),r.d(t,"IndexManager",(function(){return yt})),r.d(t,"CacheStrategy",(function(){return ct})),r.d(t,"LRUCache",(function(){return nt})),r.d(t,"LFUCache",(function(){return ot})),r.d(t,"TTLCache",(function(){return ht})),r.d(t,"BTreeIndex",(function(){return pt})),r.d(t,"TextIndex",(function(){return wt})),r.d(t,"GeoIndex",(function(){return mt})),r.d(t,"SecureDatabaseEncryption",(function(){return ut}));
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,c,l,d,u,f,p,m,w){if(!(this instanceof r.Int8x16))return new r.Int8x16(e,t,i,s,a,n,o,h,c,l,d,u,f,p,m,w);this.s_=new Int8Array([e,t,i,s,a,n,o,h,c,l,d,u,f,p,m,w])},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,c,l,d,u,f,p,m,w,y,g,v){var b=[i,a,n,o,h,c,l,d,u,f,p,m,w,y,g,v],A=[];e=r.Int8x16.check(e),t=r.Int8x16.check(t);for(var x=0;x<16;x++){var _=b[x];s(_,32),A[x]=_<16?e.s_[_]:t.s_[_-16]}return new r.Int8x16(...A)}),void 0!==r.Uint8x16&&void 0!==r.Uint8x16.extractLane||(r.Uint8x16=function(e,t,i,s,a,n,o,h,c,l,d,u,f,p,m,w){if(!(this instanceof r.Uint8x16))return new r.Uint8x16(e,t,i,s,a,n,o,h,c,l,d,u,f,p,m,w);this.s_=new Uint8Array([e,t,i,s,a,n,o,h,c,l,d,u,f,p,m,w])},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,c,l,d,u,f,p,m,w,y,g,v){var b=[i,a,n,o,h,c,l,d,u,f,p,m,w,y,g,v],A=[];e=r.Uint8x16.check(e),t=r.Uint8x16.check(t);for(var x=0;x<16;x++){var _=b[x];s(_,32),A[x]=_<16?e.s_[_]:t.s_[_-16]}return new r.Uint8x16(...A)},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,c=80,l=96,d=112,u=128,f=144,p=160,m=176,w=192,y=224,g=240,v=0,b=1,A=2,x=3,_=16,S=17,E=18,U=19,k=20,I=21,D=22,z=23,M=24,B=25,V=26,C=32,O=33,P=34,T=35,L=48,F=49,R=50,$=51,N=52,j=53,K=54,q=55,H=64,W=65,G=66,J=67,Y=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,ce=99,le=100,de=101,ue=102,fe=103,pe=104,me=105,we=106,ye=107,ge=112,ve=113,be=114,Ae=128,xe=129,_e=144,Se=145,Ee=160,Ue=161,ke=162,Ie=163,De=164,ze=165,Me=166,Be=167,Ve=168,Ce=176,Oe=192,Pe=193,Te=208,Le=209,Fe=224,Re=225,$e=226,Ne=227,je=240,Ke=new Uint8Array(256),qe=new Uint8Array(256);new Map;let He=new Map,We=new Map;var Ge=[[S,2],[E,4],[U,4],[k,4],[I,8],[C,8],[O,8]];for(let e=0;e<Ge.length;e++)Ke[Ge[e][0]]=Ge[e][1];var Je,Ye=[[ne,1],[oe,1],[he,1],[ce,2],[le,2],[de,4],[ue,4],[fe,4],[pe,8],[me,8],[we,8],[J,1],[Y,2],[Q,4],[X,4],[Z,8]];for(let e=0;e<Ye.length;e++)qe[Ye[e][0]]=Ye[e][1];for(Je of["asyncIterator","hasInstance","isConcatSpreadable","iterator","match","matchAll","replace","search","species","split","toPrimitive","toStringTag","unscopables"]){var Qe=Symbol[Je];Qe&&(He.set(Qe,Je),We.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|qe[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 Y: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:Y,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,_e],[RegExp,Ce],[Map,Ae],[Set,xe],[ArrayBuffer,ge],[DataView,ye]],a=[["Uint8Array",ne],["Int8Array",oe],["Uint8ClampedArray",he],["Uint16Array",ce],["Int16Array",le],["Uint32Array",de],["Int32Array",ue],["Float32Array",fe],["Float64Array",pe],["BigInt64Array",me],["BigUint64Array",we],["SharedArrayBuffer",be]];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",Ue),this.errorTypeMap.set("RangeError",ke),this.errorTypeMap.set("ReferenceError",Ie),this.errorTypeMap.set("SyntaxError",De),this.errorTypeMap.set("TypeError",ze),this.errorTypeMap.set("URIError",Me),this.errorTypeMap.set("AggregateError",Be)}detect(e){if(null==e)return null===e?v:b;switch(typeof e){case"boolean":return e?x:A;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 b}}detectNumber(e){var t,r,i;return e!=e?D:(i=new Float64Array([e]),((t=(i=new Uint32Array(i.buffer))[1])&(r=2146435072))==r&0==i[0]&0==(1048575&t)?t>>>31?M:z:0==e&&t>>>31?B:e==(0|e)?(i=+((r=Math.abs(e))<=127)<<0|+(r<=32767)<<1|+(r<=2147483647)<<2,[V,_,S,E][Math.min(i,3)]):Math.fround(e)==e?k:I)}detectBigInt(e){var t=e<0n;return(t?-e:e)<=0x7fffffffffffffffn?t?O:C:t?T:P}detectString(e){var t,r=e.length;if(0==r)return L;let i=1;for(let t=0;t<r&&i;t++)i&=+(e.charCodeAt(t)<=127);return i?r<16?F:r<256?R:$:(t=(new TextEncoder).encode(e).length)<16?N:t<256?j:K}detectSymbol(e){return void 0!==Symbol.keyFor(e)?Re:He.has(e)?$e:void 0===e.description?Ne:Fe}detectObject(e){var t,r;return null==e?v:(t=e.constructor,void 0!==(t=this.constructorMap.get(t))?t==_e?(r=e.getTime())==r?_e: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?Pe:Oe: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 H;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:W}detectTypedArrayType(e){return e=e.constructor.name,this.typeNameMap.get(e)||ne}detectErrorType(e){return e=e.constructor.name,this.errorTypeMap.get(e)||Ve}}var tt=r(0);tt=r.n(tt);r.d(t,"LacertaDB",(function(){return Mt})),r.d(t,"Database",(function(){return zt})),r.d(t,"Collection",(function(){return Dt})),r.d(t,"Document",(function(){return bt})),r.d(t,"MigrationManager",(function(){return kt})),r.d(t,"PerformanceMonitor",(function(){return It})),r.d(t,"LacertaDBError",(function(){return at})),r.d(t,"OPFSUtility",(function(){return gt})),r.d(t,"IndexManager",(function(){return yt})),r.d(t,"CacheStrategy",(function(){return ct})),r.d(t,"LRUCache",(function(){return nt})),r.d(t,"LFUCache",(function(){return ot})),r.d(t,"TTLCache",(function(){return ht})),r.d(t,"BTreeIndex",(function(){return pt})),r.d(t,"TextIndex",(function(){return mt})),r.d(t,"GeoIndex",(function(){return wt})),r.d(t,"SecureDatabaseEncryption",(function(){return ut}));
2
2
  /**
3
- * LacertaDB V5.0.0 - Complete Production Library
3
+ * LacertaDB V5.0.0 - Complete Production Library (Corrected)
4
4
  * A powerful browser-based document database with encryption, compression, OPFS support,
5
5
  * custom indexes, LRU caching, and database-level security for private keys
6
6
  * @version 5.0.0
7
7
  * @license MIT
8
8
  */
9
- let rt=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(Le),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(Pe),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(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 c:this.writeObject(e,r);break;case l:this.writeTypedArray(e,r);break;case d:this.writeArrayBuffer(e,r);break;case u:this.writeCollection(e,r);break;case f:this.writeDate(e,r);break;case p:this.writeError(e,r);break;case w:this.writeRegExp(e);break;case m:this.writeBinary(e,r);break;case y:this.writeSpecial(e,r);break;case g:this.writeExtension(e,r)}}writeNumber(e,t){switch(t){case _:this.pool.writeU8(e);break;case S:this.pool.writeI16(e);break;case E:this.pool.writeI32(e);break;case U:this.pool.writeU32(e);break;case k:this.pool.writeF32(e);break;case I:this.pool.writeF64(e);break;case B:var r=e<0;this.pool.writeVarint(Math.abs(e)),this.pool.writeU8(r?1:0)}}writeBigInt(e,t){switch(t){case C:case T:this.pool.writeBigInt64(e);break;case O:case P: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 L:break;case F:case R:this.pool.writeU8(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case $:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case N:case j:case K:var i=this.encoder.encode(e);t==N||t==j?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 H:break;case W:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.writeValue(e[t]);break;case G:this.writeSparseArray(e);break;case Y:case J: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(je):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=qe[t]||1);if(t==we||t==me)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 Ae:for(var[r,i]of(this.pool.writeVarint(e.size),e))this.writeValue(r),this.writeValue(i);break;case xe:for(var s of(this.pool.writeVarint(e.size),e))this.writeValue(s)}}writeDate(e,t){t==_e&&this.pool.writeF64(e.getTime())}writeError(e,t){if(this.writeValue(e.message||""),this.writeValue(e.stack||""),t==Ve&&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 Fe:var r=e.description;this.writeValue(r);break;case Ne:break;case Re:r=Symbol.keyFor(e),this.writeValue(r||"");break;case $e:r=He.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==Pe||e==Le){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==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 c:case h:case u:v=!0}if(v){switch(t){case h:r=[];break;case u:e==Ae?r=new Map:e==xe&&(r=new Set);break;case c:r={}}switch(r&&this.deserializeRefs.push(r),t){case h:this.fillArray(r,e);break;case c:this.fillObject(r,e);break;case u: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 l:r=this.readTypedArray(e);break;case d:r=this.readArrayBuffer(e);break;case f:r=this.readDate(e);break;case p:r=this.readError(e);break;case w:r=this.readRegExp();break;case m:r=this.readBinary(e);break;case y:r=this.readSpecial(e);break;case g: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 H:break;case W: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 Y:case J: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()===je&&(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 Ae:for(let t=0;t<r;t++){var i=this.readValue(),s=this.readValue();e.set(i,s)}break;case xe:for(let t=0;t<r;t++)e.add(this.readValue())}}readPrimitive(e){switch(e){case v:return null;case b:return;case A:return!1;case x:return!0;default:throw new Error("Unknown primitive: 0x"+e.toString(16))}}readNumber(e){switch(e){case _:return this.view.getInt8(this.pos++);case S:return this.readI16();case E:return this.readI32();case U:return this.readU32();case k:return this.readF32();case I:return this.readF64();case D:return NaN;case M:return 1/0;case z:return-1/0;case V:return-0;case B: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 C:case T:return this.readBigInt64();case O:case P:return this.readLargeBigInt(e==P);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==L)return"";let t,r;switch(e){case F:case R:case N:case j:t=this.readU8();break;default:t=this.readVarint()}if(this.ensureBytes(t),e==F||e==R||e==$){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=qe[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 Y:for(let e=0;e<t;e++)r[e]=this.view.getInt8(this.pos++);break;case J: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=qe[e]||1;if(e!=we&&e!=me)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==we?BigInt64Array:BigUint64Array)(a)}createTypedArray(e,t,r,i){var s={[ne]:Uint8Array,[oe]:Int8Array,[he]:Uint8ClampedArray,[ce]:Uint16Array,[le]:Int16Array,[de]:Uint32Array,[ue]:Int32Array,[fe]:Float32Array,[pe]:Float64Array,[we]:BigInt64Array,[me]:BigUint64Array,[ye]: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 _e: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(),r=this.readValue();let i;var s={[Ee]:Error,[Ue]:EvalError,[ke]:RangeError,[Ie]:ReferenceError,[De]:SyntaxError,[Me]:TypeError,[ze]:URIError}[e]||Error;if(e==Ve){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 Fe:var t=this.readValue();return Symbol(t);case Ne:return Symbol();case Re:return t=this.readValue(),Symbol.for(t);case $e:return t=this.readValue(),We.get(t)||Symbol(t);default:throw new Error("Unknown special type: 0x"+e.toString(16))}}readExtension(e){if(e!==je)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}),it=new tt.a;class st{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 at extends Error{constructor(e,t,r){super(e),this.name="LacertaDBError",this.code=t,this.originalError=r||null,this.timestamp=(new Date).toISOString()}}class nt{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 r;for(this.cache.has(e)&&-1<(r=this.accessOrder.indexOf(e))&&this.accessOrder.splice(r,1),this.cache.set(e,t),this.accessOrder.push(e),this.timestamps.set(e,Date.now());this.cache.size>this.maxSize;){var i=this.accessOrder.shift();this.cache.delete(i),this.timestamps.delete(i)}}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 ot{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[r,i]of this.frequencies)i<e&&(e=i,t=r);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 ht{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 ct{constructor(e={}){this.type=e.type||"lru",this.maxSize=e.maxSize||100,this.ttl=e.ttl||null,this.enabled=!1!==e.enabled,this.cache=this.createCache()}createCache(){switch(this.type){case"lru":return new nt(this.maxSize,this.ttl);case"lfu":return new ot(this.maxSize,this.ttl);case"ttl":return new ht(this.ttl);case"none":return null;default:return new nt(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=this.createCache()}}class lt{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")),r=await new Response(t).arrayBuffer();return new Uint8Array(r)}catch(e){throw new at("Compression failed","COMPRESSION_FAILED",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")),r=await new Response(t).arrayBuffer();return new Uint8Array(r)}catch(e){throw new at("Decompression failed","DECOMPRESSION_FAILED",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 dt{async encrypt(e,t){if(!(e instanceof Uint8Array))throw new TypeError("Data must be Uint8Array");try{var r=crypto.getRandomValues(new Uint8Array(16)),i=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]),a=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:6e5,hash:"SHA-512"},s,{name:"AES-GCM",length:256},!1,["encrypt"]),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},a,e),o=new Uint8Array(r.length+i.length+n.byteLength);return o.set(r,0),o.set(i,r.length),o.set(new Uint8Array(n),r.length+i.length),o}catch(e){throw new at("Encryption failed","ENCRYPTION_FAILED",e)}}async decrypt(e,t){if(!(e instanceof Uint8Array))throw new TypeError("Data must be Uint8Array");try{var r=e.slice(0,16),i=e.slice(16,28),s=e.slice(28),a=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]),n=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:6e5,hash:"SHA-512"},a,{name:"AES-GCM",length:256},!1,["decrypt"]),o=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},n,s);return new Uint8Array(o)}catch(e){throw new at("Decryption failed. This may be due to an incorrect password or corrupted data.","DECRYPTION_FAILED",e)}}}class ut{constructor(){this.masterKey=null,this.salt=null,this.iterations=1e6,this.initialized=!1}async initialize(e,t=null){if(this.initialized)throw new Error("Database encryption already initialized");return this.salt=t||crypto.getRandomValues(new Uint8Array(32)),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:"SHA-512"},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:256},!1,["encrypt","decrypt"]),this.hmacKey=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]),this.initialized=!0,it.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:rt.serialize(e);e=crypto.getRandomValues(new Uint8Array(12));var r=await crypto.subtle.encrypt({name:"AES-GCM",iv:e},this.encKey,t),i=((i=new Uint8Array(e.length+r.byteLength)).set(e,0),i.set(new Uint8Array(r),e.length),await crypto.subtle.sign("HMAC",this.hmacKey,i)),s=new Uint8Array(e.length+r.byteLength+32);return s.set(e,0),s.set(new Uint8Array(r),e.length),s.set(new Uint8Array(i),e.length+r.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),r=e.slice(-32),i=(e=e.slice(12,-32),new Uint8Array(t.length+e.length));if(r=(i.set(t,0),i.set(e,t.length),await crypto.subtle.verify("HMAC",this.hmacKey,r,i)))return i=await crypto.subtle.decrypt({name:"AES-GCM",iv:t},this.encKey,e),new Uint8Array(i);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=(i=new TextEncoder).encode(t);let r;r="string"==typeof e?i.encode(e):e instanceof Uint8Array?e:i.encode(JSON.stringify(e));var i=crypto.getRandomValues(new Uint8Array(16)),s=(e=await crypto.subtle.encrypt({name:"AES-GCM",iv:i,additionalData:t,tagLength:128},this.encKey,r),new Uint32Array([t.length])),a=new Uint8Array(20+t.length+e.byteLength);return a.set(i,0),a.set(new Uint8Array(s.buffer),16),a.set(t,20),a.set(new Uint8Array(e),20+t.length),it.encode(a)}async decryptPrivateKey(e,t=""){if(!this.initialized)throw new Error("Database encryption not initialized");var r=(e=it.decode(e)).slice(0,16),i=e.slice(16,20),s=(i=new Uint32Array(i.buffer)[0],e.slice(20,20+i));e=e.slice(20+i),i=(new TextEncoder).encode(t);if(this.arrayEquals(s,i))return t=await crypto.subtle.decrypt({name:"AES-GCM",iv:r,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 r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}async changePin(e,t){var r;if(this.initialized)return r=this.salt,this.destroy(),await this.initialize(e,r),this.destroy(),await this.initialize(t);throw new Error("Database encryption not initialized")}exportMetadata(){if(this.salt)return{salt:it.encode(this.salt),iterations:this.iterations,algorithm:"AES-GCM-256",kdf:"PBKDF2-SHA-512"};throw new Error("No encryption metadata to export")}importMetadata(e){if(e.salt)return this.salt=it.decode(e.salt),this.iterations=e.iterations||1e6,!0;throw new Error("Invalid encryption metadata")}}class ft{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?null:this.children[t].search(e)}rangeSearch(e,t,r){let i=0;for(;i<this.n;)!this.leaf&&this.children[i]&&this.children[i].rangeSearch(e,t,r),this.keys[i]>=e&&this.keys[i]<=t&&this.values[i].forEach(e=>r.push(e)),i++;!this.leaf&&this.children[i]&&this.children[i].rangeSearch(e,t,r)}insertNonFull(e,t){let r=this.n-1;if(this.leaf){for(;0<=r&&this.keys[r]>e;)this.keys[r+1]=this.keys[r],this.values[r+1]=this.values[r],r--;0<=r&&this.keys[r]===e?this.values[r].add(t):(this.keys[r+1]=e,this.values[r+1]=new Set([t]),this.n++)}else{for(;0<=r&&this.keys[r]>e;)r--;0<=r&&this.keys[r]===e?this.values[r].add(t):(r++,this.children[r].n===2*this.order-1&&(this.splitChild(r,this.children[r]),this.keys[r]<e)&&r++,this.children[r].insertNonFull(e,t))}}splitChild(e,t){var r=new ft(this.order,t.leaf);r.n=this.order-1;for(let e=0;e<this.order-1;e++)r.keys[e]=t.keys[e+this.order],r.values[e]=t.values[e+this.order];if(!t.leaf)for(let e=0;e<this.order;e++)r.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]=r;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 r=0;for(;r<this.n&&e>this.keys[r];)r++;if(r<this.n&&e===this.keys[r]){if(this.values[r].delete(t),0===this.values[r].size){for(let e=r;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[r].remove(e,t)}}class pt{constructor(e=4){this.root=null,this.order=e,this.size=0}insert(e,t){if(this.root)if(this.root.n===2*this.order-1){var r=new ft(this.order,!1);r.children[0]=this.root,r.splitChild(0,this.root);let i=0;r.keys[0]<e&&i++,r.children[i].insertNonFull(e,t),this.root=r}else this.root.insertNonFull(e,t);else this.root=new ft(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--)}}class wt{constructor(){this.invertedIndex=new Map,this.documentTexts=new Map}addDocument(e,t){var r;if("string"==typeof e)for(r of(this.documentTexts.set(t,e),this.tokenize(e)))this.invertedIndex.has(r)||this.invertedIndex.set(r,new Set),this.invertedIndex.get(r).add(t)}removeDocument(e){var t,r=this.documentTexts.get(e);if(r){for(t of this.tokenize(r)){var i=this.invertedIndex.get(t);i&&(i.delete(e),0===i.size)&&this.invertedIndex.delete(t)}this.documentTexts.delete(e)}}search(e){var t;if(0===(e=this.tokenize(e)).length)return[];let r=null;for(t of e){let e=this.invertedIndex.get(t);if(!e||0===e.size)return[];r=null===r?new Set(e):new Set([...r].filter(t=>e.has(t)))}return r?Array.from(r):[]}tokenize(e){return e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(e=>2<e.length)}get size(){return this.documentTexts.size}}class mt{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)}findNear(e,t){var r,i,s=[];for([r,i]of this.points){var a=this.haversine(e,i);a<=t&&s.push({docId:r,distance:a})}return s.sort((e,t)=>e.distance-t.distance).map(e=>e.docId)}findWithin(e){var t,r,i=[];for([t,r]of this.points)this.isWithinBounds(r,e)&&i.push(t);return i}haversine(e,t){var r=this.toRad(t.lat-e.lat),i=this.toRad(t.lng-e.lng);r=Math.sin(r/2)*Math.sin(r/2)+Math.cos(this.toRad(e.lat))*Math.cos(this.toRad(t.lat))*Math.sin(i/2)*Math.sin(i/2);return 2*Math.atan2(Math.sqrt(r),Math.sqrt(1-r))*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 yt{constructor(e){this.collection=e,this.indexes=new Map,this.indexData=new Map}async createIndex(e,t={}){var r=t.name||e;if(this.indexes.has(r))throw new Error(`Index '${r}' 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(r,e),await this.rebuildIndex(r),this.saveIndexMetadata(),r}async rebuildIndex(e){var t=this.indexes.get(e);if(!t)throw new Error(`Index '${e}' not found`);var r,i=this.createIndexStructure(t.type);for(r of await this.collection.getAll()){var s=this.getFieldValue(r,t.fieldPath);if(!t.sparse||null!=s){if(t.unique&&i.has&&i.has(s))throw new Error(`Unique constraint violation on index '${e}'`);this.addToIndex(i,s,r._id,t.type)}}this.indexData.set(e,i)}createIndexStructure(e){switch(e){case"btree":return new pt;case"hash":return new Map;case"text":return new wt;case"geo":return new mt;default:return new Map}}addToIndex(e,t,r,i){switch(i){case"btree":e.insert(t,r);break;case"hash":e.has(t)||e.set(t,new Set),e.get(t).add(r);break;case"text":e.addDocument(t,r);break;case"geo":e.addPoint(t,r)}}async updateIndex(e,t,r,i){var s=this.indexes.get(e),a=this.indexData.get(e);if(s&&a&&(null!=r&&this.removeFromIndex(a,r,t,s.type),null!=i)){if(s.unique&&this.indexContains(a,i,s.type))throw new Error(`Unique constraint violation on index '${e}'`);this.addToIndex(a,i,t,s.type)}}removeFromIndex(e,t,r,i){switch(i){case"btree":e.remove(t,r);break;case"hash":var s=e.get(t);s&&(s.delete(r),0===s.size)&&e.delete(t);break;case"text":e.removeDocument(r);break;case"geo":e.removePoint(r)}}indexContains(e,t,r){switch(r){case"btree":return e.contains(t);case"hash":return e.has(t);default:return!1}}async query(e,t){var r=this.indexes.get(e),i=this.indexData.get(e);if(r&&i)return this.queryIndex(i,t,r.type);throw new Error(`Index '${e}' not found`)}queryIndex(e,t,r){switch(r){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 r=new Set;return void 0!==t.$eq&&e.find(t.$eq).forEach(e=>r.add(e)),void 0!==t.$gte&&void 0!==t.$lte?e.range(t.$gte,t.$lte).forEach(e=>r.add(e)):void 0!==t.$gte?e.rangeFrom(t.$gte).forEach(e=>r.add(e)):void 0!==t.$lte&&e.rangeTo(t.$lte).forEach(e=>r.add(e)),Array.from(r)}queryHash(e,t){var r;if(void 0!==t.$eq)return(r=e.get(t.$eq))?Array.from(r):[];if(void 0===t.$in)return[];{let r=new Set;for(var i of t.$in)(i=e.get(i))&&i.forEach(e=>r.add(e));return Array.from(r)}}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 r;let i=e;for(r of t.split(".")){if(null==i)return;i=i[r]}return i}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=rt.serialize(e),e=it.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,r,i=it.decode(e);for(t of rt.deserialize(i).indexes){let{name:e,...r}=t;this.indexes.set(e,r)}for(r of this.indexes.keys())await this.rebuildIndex(r)}catch(e){console.error("Failed to load index metadata:",e)}}getIndexStats(){var e,t,r={};for([e,t]of this.indexes){var i=this.indexData.get(e);r[e]={...t,size:i&&(i.size||i.length)||0,memoryUsage:this.estimateMemoryUsage(i)}}return r}estimateMemoryUsage(e){return e?e instanceof Map?100*e.size:e instanceof pt?120*e.size:0:0}}class gt{async saveAttachments(e,t,r,i){try{var s,a,n=[],o=await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:!0})).getDirectoryHandle(t,{create:!0})).getDirectoryHandle(r,{create:!0});for([s,a]of i.entries()){var h=s+"_"+(a.name||"file"),c=await(await o.getFileHandle(h,{create:!0})).createWritable();let i;if(a.data instanceof Uint8Array)i=a.data;else if(a.data instanceof ArrayBuffer)i=new Uint8Array(a.data);else{if(!(a.data instanceof Blob))throw new TypeError("Unsupported attachment data type");i=new Uint8Array(await a.data.arrayBuffer())}var l=new Blob([i],{type:a.type||"application/octet-stream"}),d=(await c.write(l),await c.close(),`/${e}/${t}/${r}/`+h);n.push({path:d,name:a.name,type:a.type,size:i.byteLength,originalName:a.originalName||a.name})}return n}catch(i){throw new at("Failed to save attachments","ATTACHMENT_SAVE_FAILED",i)}}async getAttachments(e){var t,r=[],i=await navigator.storage.getDirectory();for(t of e)try{var s=t.path.split("/").filter(e=>e);let e=i;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();r.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 r}async deleteAttachments(e,t,r){try{await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e)).getDirectoryHandle(t)).removeEntry(r,{recursive:!0})}catch(e){"NotFoundError"!==e.name&&console.error(`Failed to delete attachments for ${r}:`,e)}}static async prepareAttachment(e,t){let r;if(e instanceof File||e instanceof Blob){var i=await e.arrayBuffer();r=new Uint8Array(i)}else if(e instanceof ArrayBuffer)r=new Uint8Array(e);else{if(!(e instanceof Uint8Array))throw new TypeError("Unsupported file type for attachment");r=e}return{name:t||e.name||"unnamed",type:e.type||"application/octet-stream",data:r,originalName:e.name||t}}}class vt{constructor(){this.mutex=new st}openDatabase(e,t=1,r){return new Promise((i,s)=>{let a=indexedDB.open(e,t);a.onerror=()=>s(new at("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)}})}async performTransaction(e,t,r,i,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,r);o.oncomplete=()=>s(n),o.onerror=()=>a(o.error),o.onabort=()=>a(new Error("Transaction aborted"));try{var h=i(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 at("Transaction failed after retries","TRANSACTION_FAILED",a)})}_promisifyRequest(e){return new Promise((t,r)=>{let i=e();i.onsuccess=()=>t(i.result),i.onerror=()=>r(i.error)})}add(e,t,r,i){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==i?s.add(r,i):s.add(r))})}put(e,t,r,i){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==i?s.put(r,i):s.put(r))})}get(e,t,r){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).get(r)))}getAll(e,t,r,i){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).getAll(r,i)))}delete(e,t,r){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).delete(r)))}clear(e,t){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).clear()))}count(e,t,r){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).count(r)))}iterateCursorSafe(e,t,r,i="next",s){return this.performTransaction(e,[t],"readonly",e=>new Promise((a,n)=>{let o=[],h=e.objectStore(t).openCursor(s,i);h.onsuccess=e=>{if(e=e.target.result)try{var t=r(e.value,e.key);!1!==t?(o.push(t),e.continue()):a(o)}catch(e){n(e)}else a(o)},h.onerror=()=>n(h.error)}))}}class bt{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=e._encrypted||t.encrypted||!1,this._compressed=e._compressed||t.compressed||!1,this._attachments=e._attachments||[],this.data=e.data||{},this.packedData=e.packedData||null,this.compression=new lt,this.encryption=new dt,this.password=t.password||null}generateId(){return`doc_${Date.now()}_`+Math.random().toString(36).substring(2,11)}async pack(){try{let e=rt.serialize(this.data);return this._compressed&&(e=await this.compression.compress(e)),this._encrypted&&this.password&&(e=await this.encryption.encrypt(e,this.password)),this.packedData=e}catch(e){throw new at("Failed to pack document","PACK_FAILED",e)}}async unpack(){try{let e=this.packedData;return this._encrypted&&this.password&&(e=await this.encryption.decrypt(e,this.password)),this._compressed&&(e=await this.compression.decompress(e)),this.data=rt.deserialize(e),this.data}catch(e){throw new at("Failed to unpack document","UNPACK_FAILED",e)}}packSync(){let e=rt.serialize(this.data);if(this._compressed&&(e=this.compression.compressSync(e)),this._encrypted)throw new at("Synchronous encryption not supported","SYNC_ENCRYPT_NOT_SUPPORTED");return this.packedData=e}unpackSync(){let e=this.packedData;if(this._encrypted)throw new at("Synchronous decryption not supported","SYNC_DECRYPT_NOT_SUPPORTED");return this._compressed&&(e=this.compression.decompressSync(e)),this.data=rt.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 At{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,r,i){this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),r&&(this.documentPermanent[e]=!0),0<i&&(this.documentAttachments[e]=i),this.sizeKB+=t,this.length++,this.modifiedAt=Date.now()}updateDocument(e,t,r,i){var s=this.documentSizes[e]||0;this.sizeKB=this.sizeKB-s+t,this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),r?this.documentPermanent[e]=!0:delete this.documentPermanent[e],0<i?this.documentAttachments[e]=i: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 xt{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 r=it.decode(t),i=rt.deserialize(r);return new xt(e,i)}catch(e){console.error("Failed to load metadata:",e)}return new xt(e)}save(){var e=`lacertadb_${this.name}_metadata`;try{var t={collections:this.collections,totalSizeKB:this.totalSizeKB,totalLength:this.totalLength,modifiedAt:this.modifiedAt},r=rt.serialize(t),i=it.encode(r);localStorage.setItem(e,i)}catch(e){if("QuotaExceededError"===e.name)throw new at("Storage quota exceeded for metadata","QUOTA_EXCEEDED",e);throw new at("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 _t{constructor(e,t={}){this.dbName=e,this.sizeLimitKB=null!=t.sizeLimitKB?t.sizeLimitKB:1/0,e=this.sizeLimitKB===1/0?0:.8*this.sizeLimitKB,this.bufferLimitKB=null!=t.bufferLimitKB?t.bufferLimitKB:e,this.freeSpaceEvery=t.freeSpaceEvery||1e4}static load(e){var t=localStorage.getItem(`lacertadb_${e}_settings`);if(t)try{var r=it.decode(t),i=rt.deserialize(r);return new _t(e,i)}catch(e){console.error("Failed to load settings:",e)}return new _t(e)}save(){var e=`lacertadb_${this.dbName}_settings`,t={sizeLimitKB:this.sizeLimitKB,bufferLimitKB:this.bufferLimitKB,freeSpaceEvery:this.freeSpaceEvery};t=rt.serialize(t),t=it.encode(t);localStorage.setItem(e,t)}updateSettings(e){Object.assign(this,e),this.save()}}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=it.decode(e);return rt.deserialize(t)}catch{return[]}}_writeIndex(e){e=rt.serialize(e),e=it.encode(e),localStorage.setItem(this.indexKey,e)}add(e,t){var r=this.keyPrefix+"data_"+e;try{var i=rt.serialize(t),s=it.encode(i),a=(localStorage.setItem(r,s),this._readIndex());return a.includes(e)||(a.push(e),this._writeIndex(a)),!0}catch(e){if("QuotaExceededError"===e.name)throw new at("QuickStore quota exceeded","QUOTA_EXCEEDED",e);return!1}}get(e){if(e=this.keyPrefix+"data_"+e,e=localStorage.getItem(e))try{var t=it.decode(e);return rt.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 r=this._readIndex();t=r.length,(r=r.filter(t=>t!==e)).length<t&&this._writeIndex(r)}getAll(){return this._readIndex().map(e=>{var t=this.get(e);return t?{_id:e,...t}:null}).filter(Boolean)}clear(){var e;for(e of this._readIndex())localStorage.removeItem(this.keyPrefix+"data_"+e);localStorage.removeItem(this.indexKey)}}let Et=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}};let Ut=new class{constructor(){this.stages={$match:(e,t)=>e.filter(e=>Et.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]=Et.getFieldValue(e,r):"string"==typeof s&&s.startsWith("$")&&(i[r]=Et.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=Et.getFieldValue(e,i);if(a<(i=Et.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?Et.getFieldValue(r,s.replace("$","")):JSON.stringify(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,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,r)=>t+(Et.getFieldValue(r,e)||0),0);break;case"$avg":var u=n.docs.reduce((t,r)=>t+(Et.getFieldValue(r,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=>Et.getFieldValue(t,e)));break;case"$min":c[h]=Math.min(...n.docs.map(t=>Et.getFieldValue(t,e)))}}o.push(c)}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=Et.getFieldValue(e,t.foreignField);i.has(r)||i.set(r,[]),i.get(r).push(e)}),e.map(e=>{var r=Et.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}};class kt{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 r=e.split(".").map(Number),i=t.split(".").map(Number),s=Math.max(r.length,i.length);for(let e=0;e<s;e++){var a=r[e]||0,n=i[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 r;for(r of(console.log(`${"up"===t?"Running":"Rolling back"} migration: ${e.name} (v${e.version})`),await this.database.listCollections())){var i,s=await this.database.getCollection(r);for(i of await s.getAll()){var a=await e[t](i);a&&await s.update(i._id,a)}}}}class It{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),r=(t=0<this.metrics.latencies.length?t/this.metrics.latencies.length:0,0<(r=this.metrics.cacheHits+this.metrics.cacheMisses)?this.metrics.cacheHits/r*100:0),i=(i=0<this.metrics.memoryUsage.length?this.metrics.memoryUsage[this.metrics.memoryUsage.length-1]:null)?i.used/1048576:0;return{opsPerSec:e,avgLatency:t.toFixed(2),cacheHitRate:r.toFixed(1),memoryUsageMB:i.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 Dt{constructor(e,t){this.name=e,this.database=t,this.db=null,this.metadata=null,this.settings=t.settings,this.indexedDB=new vt,this.opfs=new gt,this.cleanupInterval=null,this.events=new Map,this.indexManager=new yt(this),this.cacheStrategy=new ct({type:"lru",maxSize:100,ttl:6e4,enabled:!0}),this.performanceMonitor=t.performanceMonitor}async init(){var e=this.database.name+"_"+this.name;this.db=await this.indexedDB.openDatabase(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];return this.metadata=new At(this.name,e),await this.indexManager.loadIndexMetadata(),0<this.settings.freeSpaceEvery&&(this.cleanupInterval=setInterval(()=>this.freeSpace(),this.settings.freeSpaceEvery)),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()}configureCacheStrategy(e){this.cacheStrategy.updateStrategy(e)}async add(e,t={}){await this.trigger("beforeAdd",e);var r,i,s=new bt({data:e,_id:t.id},{encrypted:t.encrypted||!1,compressed:!1!==t.compressed,permanent:t.permanent||!1,password:t.password}),a=(e=((e=t.attachments)&&0<e.length&&(t=await Promise.all(e.map(e=>e instanceof File||e instanceof Blob?gt.prepareAttachment(e,e.name):Promise.resolve(e))),s._attachments=await this.opfs.saveAttachments(this.database.name,this.name,s._id,t)),await s.pack(),s.databaseOutput()),await this.indexedDB.add(this.db,"documents",e),s.objectOutput());for([r,i]of this.indexManager.indexes){var n=this.indexManager.getFieldValue(a,i.fieldPath);null!=n&&await this.indexManager.updateIndex(r,s._id,void 0,n)}return t=e.packedData.byteLength/1024,this.metadata.addDocument(s._id,t,s._permanent,s._attachments.length),this.database.metadata.setCollection(this.metadata),await this.checkSpaceLimit(),await this.trigger("afterAdd",s),this.cacheStrategy.clear(),s._id}async get(e,t={}){await this.trigger("beforeGet",e);var r,i=await this.indexedDB.get(this.db,"documents",e);if(i)return r=new bt(i,{password:t.password,encrypted:i._encrypted,compressed:i._compressed}),i.packedData&&await r.unpack(),t.includeAttachments&&0<r._attachments.length&&(r.data._attachments=await this.opfs.getAttachments(r._attachments)),await this.trigger("afterGet",r),r.objectOutput(t.includeAttachments);throw new at(`Document with id '${e}' not found.`,"DOCUMENT_NOT_FOUND")}async getAll(e={}){var t=await this.indexedDB.getAll(this.db,"documents",void 0,e.limit);return Promise.all(t.map(async t=>{try{var r=new bt(t,{password:e.password,encrypted:t._encrypted,compressed:t._compressed});return t.packedData&&await r.unpack(),r.objectOutput()}catch(r){return console.error(`Failed to unpack document ${t._id}:`,r),null}})).then(e=>e.filter(Boolean))}async update(e,t,r={}){await this.trigger("beforeUpdate",{docId:e,updates:t});var i=await this.indexedDB.get(this.db,"documents",e);if(!i)throw new at(`Document with id '${e}' not found for update.`,"DOCUMENT_NOT_FOUND");var s,a,n=new bt(i,{password:r.password}),o=(i.packedData&&await n.unpack(),n.objectOutput()),h=(n={...n.data,...t},new bt({_id:e,_created:i._created,data:n},{encrypted:void 0!==r.encrypted?r.encrypted:i._encrypted,compressed:void 0!==r.compressed?r.compressed:i._compressed,permanent:void 0!==r.permanent?r.permanent:i._permanent,password:r.password})),c=(r=((t=(h._modified=Date.now(),r.attachments))&&0<t.length?(await this.opfs.deleteAttachments(this.database.name,this.name,e),n=await Promise.all(t.map(e=>e instanceof File||e instanceof Blob?gt.prepareAttachment(e,e.name):Promise.resolve(e))),h._attachments=await this.opfs.saveAttachments(this.database.name,this.name,h._id,n)):h._attachments=i._attachments,await h.pack(),h.databaseOutput()),await this.indexedDB.put(this.db,"documents",r),h.objectOutput());for([s,a]of this.indexManager.indexes){var l=this.indexManager.getFieldValue(o,a.fieldPath),d=this.indexManager.getFieldValue(c,a.fieldPath);l!==d&&await this.indexManager.updateIndex(s,h._id,l,d)}return e=r.packedData.byteLength/1024,this.metadata.updateDocument(h._id,e,h._permanent,h._attachments.length),this.database.metadata.setCollection(this.metadata),await this.trigger("afterUpdate",h),this.cacheStrategy.clear(),h._id}async delete(e,t={}){await this.trigger("beforeDelete",e);var r=await this.indexedDB.get(this.db,"documents",e);if(!r)throw new at("Document not found for deletion","DOCUMENT_NOT_FOUND");if(r._permanent&&!t.force)throw new at("Cannot delete a permanent document. Use options.force = true to force deletion.","PERMANENT_DOCUMENT_PROTECTION");r._permanent&&t.force&&console.warn("Force deleting permanent document: "+e);var i,s,a=await this.get(e);for([i,s]of this.indexManager.indexes){var n=this.indexManager.getFieldValue(a,s.fieldPath);null!=n&&await this.indexManager.updateIndex(i,e,n,void 0)}await this.indexedDB.delete(this.db,"documents",e),(t=r._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={}){var r,i,s=performance.now(),a=it.encode(rt.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([r,i]of this.indexManager.indexes){var c=e[i.fieldPath];if(void 0!==c){c=await this.indexManager.query(r,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=>Et.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){var t=performance.now(),r=await this.getAll();r=await Ut.execute(r,e,this.database);return this.performanceMonitor&&this.performanceMonitor.recordOperation("aggregate",performance.now()-t),r}async batchAdd(e,t){var r=performance.now();e=await Promise.all(e.map(e=>this.add(e,t).then(e=>({success:!0,id:e})).catch(e=>({success:!1,error:e.message}))));return this.performanceMonitor&&this.performanceMonitor.recordOperation("batchAdd",performance.now()-r),e}async batchUpdate(e,t){return 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 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(e.force)for(var t of(await this.indexedDB.clear(this.db,"documents"),this.metadata=new At(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 r;this.events.has(e)&&(r=this.events.get(e).filter(e=>e!==t),this.events.set(e,r))}async trigger(e,t){if(this.events.has(e))for(var r of this.events.get(e))await r(t)}clearCache(){this.cacheStrategy.clear()}destroy(){clearInterval(this.cleanupInterval),this.db&&this.db.close()}}class Mt{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}async init(e={}){return this.metadata=xt.load(this.name),this.settings=_t.load(this.name),this.quickStore=new St(this.name),e.pin&&await this.initializeEncryption(e.pin,e.salt),this}async initializeEncryption(e,t=null){this.encryption=new ut;var r=`lacertadb_${this.name}_encryption`;let i=null;t||(s=localStorage.getItem(r))&&(i=(s=JSON.parse(s)).salt);var s=await this.encryption.initialize(e,i?it.decode(i):t);return i||(e=this.encryption.exportMetadata(),localStorage.setItem(r,JSON.stringify(e))),this.isEncrypted=!0,s}async changePin(e,t){var r;if(this.isEncrypted)return e=await this.encryption.changePin(e,t),t=`lacertadb_${this.name}_encryption`,r=this.encryption.exportMetadata(),localStorage.setItem(t,JSON.stringify(r)),e;throw new Error("Database is not encrypted")}async storePrivateKey(e,t,r=""){if(!this.isEncrypted)throw new Error("Database must be encrypted to store private keys");t=await this.encryption.encryptPrivateKey(t,r);let i=await this.getCollection("__private_keys__").catch(()=>null);return await(i=i||await this.createCollection("__private_keys__",{encrypted:!1})).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 r=await(await this.getCollection("__private_keys__")).get(e);if(r)return this.encryption.decryptPrivateKey(r.key,t);throw new Error(`Private key '${e}' not found`)}async createCollection(e,t){if(this.collections.has(e))throw new at(`Collection '${e}' already exists.`,"COLLECTION_EXISTS");var r=new Dt(e,this);return await r.init(),this.collections.set(e,r),this.metadata.collections[e]||this.metadata.setCollection(new At(e)),r}async getCollection(e){if(this.collections.has(e))return this.collections.get(e);var t;if(this.metadata.collections[e])return await(t=new Dt(e,this)).init(),this.collections.set(e,t),t;throw new at(`Collection '${e}' not found.`,"COLLECTION_NOT_FOUND")}async dropCollection(e){var t;this.collections.has(e)&&(await(t=this.collections.get(e)).clear({force:!0}),t.destroy(),this.collections.delete(e)),this.metadata.removeCollection(e);let r=this.name+"_"+e;await new Promise((e,t)=>{var i=indexedDB.deleteDatabase(r);i.onsuccess=e,i.onerror=t,i.onblocked=()=>console.warn(`Deletion of '${r}' 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 r,i,s,a={version:"5.0.0",database:this.name,timestamp:Date.now(),collections:{}};for(r of this.listCollections()){var n=await this.getCollection(r);a.collections[r]=await n.getAll({password:t})}if("json"===e)return s=rt.serialize(a),it.encode(s);if("encrypted"===e&&t)return s=new dt,i=rt.serialize(a),s=await s.encrypt(i,t),it.encode(s);throw new at("Unsupported export format: "+e,"INVALID_FORMAT")}async import(e,t="json",r=null){let i;try{var s,a=it.decode(e);i="encrypted"===t&&r?(s=await(new dt).decrypt(a,r),rt.deserialize(s)):rt.deserialize(a)}catch(e){throw new at("Failed to parse import data","IMPORT_PARSE_FAILED",e)}for(let e in i.collections){var n=i.collections[e];await(await this.createCollection(e).catch(()=>this.getCollection(e))).batchAdd(n)}return e=Object.values(i.collections).reduce((e,t)=>e+t.length,0),{collections:Object.keys(i.collections).length,documents:e}}async clearAll(){await Promise.all([...this.collections.keys()].map(e=>this.dropCollection(e))),this.collections.clear(),this.metadata=new xt(this.name),this.metadata.save(),this.quickStore.clear()}destroy(){this.collections.forEach(e=>e.destroy()),this.collections.clear(),this.encryption&&this.encryption.destroy()}}class zt{constructor(){this.databases=new Map,this.performanceMonitor=new It}async getDatabase(e,t={}){var r;return this.databases.has(e)||(await(r=new Mt(e,this.performanceMonitor)).init(t),this.databases.set(e,r)),this.databases.get(e)}async getSecureDatabase(e,t,r=null){return this.getDatabase(e,{pin:t,salt: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()}listDatabases(){var e=new Set;for(let r=0;r<localStorage.length;r++){var t=localStorage.key(r);t&&t.startsWith("lacertadb_")&&2<=(t=t.split("_")).length&&e.add(t[1])}return[...e]}async createBackup(e=null){var t,r={version:"5.0.0",timestamp:Date.now(),databases:{}};for(t of this.listDatabases()){var i=await(await this.getDatabase(t)).export("json");i=it.decode(i);r.databases[t]=rt.deserialize(i)}var s=rt.serialize(r);return e?(e=await(new dt).encrypt(s,e),it.encode(e)):it.encode(s)}async restoreBackup(e,t=null){let r;try{var i,s=it.decode(e);r=t?(i=await(new dt).decrypt(s,t),rt.deserialize(i)):rt.deserialize(s)}catch(e){throw new at("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(r.databases)){var h=await this.getDatabase(a),c=it.encode(rt.serialize(n));h=await h.import(c);o.databases++,o.collections+=h.collections,o.documents+=h.documents}return o}}t.default=zt},function(e,t,r){r.r(t),t=r(1),"undefined"!=typeof window?window.LACERTA=t:self.LACERTA=t}]);
9
+ let rt=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(Le),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(Te),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(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 c:this.writeObject(e,r);break;case l:this.writeTypedArray(e,r);break;case d:this.writeArrayBuffer(e,r);break;case u:this.writeCollection(e,r);break;case f:this.writeDate(e,r);break;case p:this.writeError(e,r);break;case m:this.writeRegExp(e);break;case w:this.writeBinary(e,r);break;case y:this.writeSpecial(e,r);break;case g:this.writeExtension(e,r)}}writeNumber(e,t){switch(t){case _:this.pool.writeU8(e);break;case S:this.pool.writeI16(e);break;case E:this.pool.writeI32(e);break;case U:this.pool.writeU32(e);break;case k:this.pool.writeF32(e);break;case I:this.pool.writeF64(e);break;case V:var r=e<0;this.pool.writeVarint(Math.abs(e)),this.pool.writeU8(r?1:0)}}writeBigInt(e,t){switch(t){case C:case O:this.pool.writeBigInt64(e);break;case P:case T: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 L:break;case F:case R:this.pool.writeU8(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case $:this.pool.writeVarint(r);for(let t=0;t<r;t++)this.pool.writeU8(e.charCodeAt(t));break;case N:case j:case K:var i=this.encoder.encode(e);t==N||t==j?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 H:break;case W: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 Y: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(je):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=qe[t]||1);if(t==me||t==we)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 Ae:for(var[r,i]of(this.pool.writeVarint(e.size),e))this.writeValue(r),this.writeValue(i);break;case xe:for(var s of(this.pool.writeVarint(e.size),e))this.writeValue(s)}}writeDate(e,t){t==_e&&this.pool.writeF64(e.getTime())}writeError(e,t){if(this.writeValue(e.message||""),this.writeValue(e.stack||""),t==Be&&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 Fe:var r=e.description;this.writeValue(r);break;case Ne:break;case Re:r=Symbol.keyFor(e),this.writeValue(r||"");break;case $e:r=He.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==Te||e==Le){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==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 c:case h:case u:v=!0}if(v){switch(t){case h:r=[];break;case u:e==Ae?r=new Map:e==xe&&(r=new Set);break;case c:r={}}switch(r&&this.deserializeRefs.push(r),t){case h:this.fillArray(r,e);break;case c:this.fillObject(r,e);break;case u: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 l:r=this.readTypedArray(e);break;case d:r=this.readArrayBuffer(e);break;case f:r=this.readDate(e);break;case p:r=this.readError(e);break;case m:r=this.readRegExp();break;case w:r=this.readBinary(e);break;case y:r=this.readSpecial(e);break;case g: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 H:break;case W: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 Y: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()===je&&(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 Ae:for(let t=0;t<r;t++){var i=this.readValue(),s=this.readValue();e.set(i,s)}break;case xe:for(let t=0;t<r;t++)e.add(this.readValue())}}readPrimitive(e){switch(e){case v:return null;case b:return;case A:return!1;case x:return!0;default:throw new Error("Unknown primitive: 0x"+e.toString(16))}}readNumber(e){switch(e){case _:return this.view.getInt8(this.pos++);case S:return this.readI16();case E:return this.readI32();case U:return this.readU32();case k:return this.readF32();case I:return this.readF64();case D:return NaN;case z:return 1/0;case M:return-1/0;case B:return-0;case V: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 C:case O:return this.readBigInt64();case P:case T:return this.readLargeBigInt(e==T);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==L)return"";let t,r;switch(e){case F:case R:case N:case j:t=this.readU8();break;default:t=this.readVarint()}if(this.ensureBytes(t),e==F||e==R||e==$){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=qe[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 Y: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=qe[e]||1;if(e!=me&&e!=we)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==me?BigInt64Array:BigUint64Array)(a)}createTypedArray(e,t,r,i){var s={[ne]:Uint8Array,[oe]:Int8Array,[he]:Uint8ClampedArray,[ce]:Uint16Array,[le]:Int16Array,[de]:Uint32Array,[ue]:Int32Array,[fe]:Float32Array,[pe]:Float64Array,[me]:BigInt64Array,[we]:BigUint64Array,[ye]: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 _e: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(),r=this.readValue();let i;var s={[Ee]:Error,[Ue]:EvalError,[ke]:RangeError,[Ie]:ReferenceError,[De]:SyntaxError,[ze]:TypeError,[Me]:URIError}[e]||Error;if(e==Be){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 Fe:var t=this.readValue();return Symbol(t);case Ne:return Symbol();case Re:return t=this.readValue(),Symbol.for(t);case $e:return t=this.readValue(),We.get(t)||Symbol(t);default:throw new Error("Unknown special type: 0x"+e.toString(16))}}readExtension(e){if(e!==je)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}),it=new tt.a;class st{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 at extends Error{constructor(e,t,r){super(e),this.name="LacertaDBError",this.code=t,this.originalError=r||null,this.timestamp=(new Date).toISOString()}}class nt{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 r;for(this.cache.has(e)&&-1<(r=this.accessOrder.indexOf(e))&&this.accessOrder.splice(r,1),this.cache.set(e,t),this.accessOrder.push(e),this.timestamps.set(e,Date.now());this.cache.size>this.maxSize;){var i=this.accessOrder.shift();this.cache.delete(i),this.timestamps.delete(i)}}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 ot{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[r,i]of this.frequencies)i<e&&(e=i,t=r);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 ht{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 ct{constructor(e={}){this.type=e.type||"lru",this.maxSize=e.maxSize||100,this.ttl=e.ttl||null,this.enabled=!1!==e.enabled,this.cache=this.createCache()}createCache(){switch(this.type){case"lru":return new nt(this.maxSize,this.ttl);case"lfu":return new ot(this.maxSize,this.ttl);case"ttl":return new ht(this.ttl);case"none":return null;default:return new nt(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=this.createCache()}}class lt{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")),r=await new Response(t).arrayBuffer();return new Uint8Array(r)}catch(e){throw new at("Compression failed","COMPRESSION_FAILED",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")),r=await new Response(t).arrayBuffer();return new Uint8Array(r)}catch(e){throw new at("Decompression failed","DECOMPRESSION_FAILED",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 dt{async encrypt(e,t){if(!(e instanceof Uint8Array))throw new TypeError("Data must be Uint8Array");try{var r=crypto.getRandomValues(new Uint8Array(16)),i=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]),a=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:6e5,hash:"SHA-512"},s,{name:"AES-GCM",length:256},!1,["encrypt"]),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},a,e),o=new Uint8Array(r.length+i.length+n.byteLength);return o.set(r,0),o.set(i,r.length),o.set(new Uint8Array(n),r.length+i.length),o}catch(e){throw new at("Encryption failed","ENCRYPTION_FAILED",e)}}async decrypt(e,t){if(!(e instanceof Uint8Array))throw new TypeError("Data must be Uint8Array");try{var r=e.slice(0,16),i=e.slice(16,28),s=e.slice(28),a=await crypto.subtle.importKey("raw",(new TextEncoder).encode(t),"PBKDF2",!1,["deriveKey"]),n=await crypto.subtle.deriveKey({name:"PBKDF2",salt:r,iterations:6e5,hash:"SHA-512"},a,{name:"AES-GCM",length:256},!1,["decrypt"]),o=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},n,s);return new Uint8Array(o)}catch(e){throw new at("Decryption failed. This may be due to an incorrect password or corrupted data.","DECRYPTION_FAILED",e)}}}class ut{constructor(e={}){this.masterKey=null,this.salt=null,this.iterations=e.iterations||2e6,this.minPasswordLength=e.minPasswordLength||12,this.initialized=!1}validatePassword(e){if(e.length<this.minPasswordLength)throw new Error(`Password must be at least ${this.minPasswordLength} characters for secure encryption`);if([/[A-Z]/.test(e),/[a-z]/.test(e),/\d/.test(e),/\W/.test(e)].filter(Boolean).length<3)throw new Error("Password must contain at least 3 of: uppercase, lowercase, numbers, special characters")}async initialize(e,t=null){if(this.initialized)throw new Error("Database encryption already initialized");return this.validatePassword(e),this.salt=t||crypto.getRandomValues(new Uint8Array(32)),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:"SHA-512"},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:256},!1,["encrypt","decrypt"]),this.hmacKey=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]),this.initialized=!0,it.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:rt.serialize(e);e=crypto.getRandomValues(new Uint8Array(12));var r=await crypto.subtle.encrypt({name:"AES-GCM",iv:e},this.encKey,t),i=((i=new Uint8Array(e.length+r.byteLength)).set(e,0),i.set(new Uint8Array(r),e.length),await crypto.subtle.sign("HMAC",this.hmacKey,i)),s=new Uint8Array(e.length+r.byteLength+32);return s.set(e,0),s.set(new Uint8Array(r),e.length),s.set(new Uint8Array(i),e.length+r.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),r=e.slice(-32),i=(e=e.slice(12,-32),new Uint8Array(t.length+e.length));if(r=(i.set(t,0),i.set(e,t.length),await crypto.subtle.verify("HMAC",this.hmacKey,r,i)))return i=await crypto.subtle.decrypt({name:"AES-GCM",iv:t},this.encKey,e),new Uint8Array(i);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=(i=new TextEncoder).encode(t);let r;r="string"==typeof e?i.encode(e):e instanceof Uint8Array?e:i.encode(JSON.stringify(e));var i=crypto.getRandomValues(new Uint8Array(16)),s=(e=await crypto.subtle.encrypt({name:"AES-GCM",iv:i,additionalData:t,tagLength:128},this.encKey,r),new Uint32Array([t.length])),a=new Uint8Array(20+t.length+e.byteLength);return a.set(i,0),a.set(new Uint8Array(s.buffer),16),a.set(t,20),a.set(new Uint8Array(e),20+t.length),it.encode(a)}async decryptPrivateKey(e,t=""){if(!this.initialized)throw new Error("Database encryption not initialized");var r=(e=it.decode(e)).slice(0,16),i=e.slice(16,20),s=(i=new Uint32Array(i.buffer)[0],e.slice(20,20+i));e=e.slice(20+i),i=(new TextEncoder).encode(t);if(this.arrayEquals(s,i))return t=await crypto.subtle.decrypt({name:"AES-GCM",iv:r,additionalData:s,tagLength:128},this.encKey,e),(new TextDecoder).decode(t);throw new Error("Additional authentication data mismatch")}static generateSecurePassword(e=20){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?";return e=new Uint8Array(e),crypto.getRandomValues(e),Array.from(e).map(e=>t[e%t.length]).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 r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}async changePin(e,t){if(!this.initialized)throw new Error("Database encryption not initialized");this.validatePassword(t);var r=this.salt,i=this.iterations;return e=(this.destroy(),await this.initialize(e,r),this.destroy(),this.iterations=i,await this.initialize(t))}exportMetadata(){if(this.salt)return{salt:it.encode(this.salt),iterations:this.iterations,algorithm:"AES-GCM-256",kdf:"PBKDF2-SHA-512",minPasswordLength:this.minPasswordLength};throw new Error("No encryption metadata to export")}importMetadata(e){if(e.salt)return this.salt=it.decode(e.salt),this.iterations=e.iterations||2e6,this.minPasswordLength=e.minPasswordLength||12,!0;throw new Error("Invalid encryption metadata")}}class ft{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?null:this.children[t].search(e)}rangeSearch(e,t,r){let i=0;for(;i<this.n;)!this.leaf&&this.children[i]&&this.children[i].rangeSearch(e,t,r),this.keys[i]>=e&&this.keys[i]<=t&&this.values[i].forEach(e=>r.push(e)),i++;!this.leaf&&this.children[i]&&this.children[i].rangeSearch(e,t,r)}insertNonFull(e,t){let r=this.n-1;if(this.leaf){for(;0<=r&&this.keys[r]>e;)this.keys[r+1]=this.keys[r],this.values[r+1]=this.values[r],r--;0<=r&&this.keys[r]===e?this.values[r].add(t):(this.keys[r+1]=e,this.values[r+1]=new Set([t]),this.n++)}else{for(;0<=r&&this.keys[r]>e;)r--;0<=r&&this.keys[r]===e?this.values[r].add(t):(r++,this.children[r].n===2*this.order-1&&(this.splitChild(r,this.children[r]),this.keys[r]<e)&&r++,this.children[r].insertNonFull(e,t))}}splitChild(e,t){var r=new ft(this.order,t.leaf);r.n=this.order-1;for(let e=0;e<this.order-1;e++)r.keys[e]=t.keys[e+this.order],r.values[e]=t.values[e+this.order];if(!t.leaf)for(let e=0;e<this.order;e++)r.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]=r;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 r=0;for(;r<this.n&&e>this.keys[r];)r++;if(r<this.n&&e===this.keys[r]){if(this.values[r].delete(t),0===this.values[r].size){for(let e=r;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[r].remove(e,t)}}class pt{constructor(e=4){this.root=null,this.order=e,this.size=0}insert(e,t){if(this.root)if(this.root.n===2*this.order-1){var r=new ft(this.order,!1);r.children[0]=this.root,r.splitChild(0,this.root);let i=0;r.keys[0]<e&&i++,r.children[i].insertNonFull(e,t),this.root=r}else this.root.insertNonFull(e,t);else this.root=new ft(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--)}}class mt{constructor(){this.invertedIndex=new Map,this.documentTexts=new Map}addDocument(e,t){var r;if("string"==typeof e)for(r of(this.documentTexts.set(t,e),this.tokenize(e)))this.invertedIndex.has(r)||this.invertedIndex.set(r,new Set),this.invertedIndex.get(r).add(t)}removeDocument(e){var t,r=this.documentTexts.get(e);if(r){for(t of this.tokenize(r)){var i=this.invertedIndex.get(t);i&&(i.delete(e),0===i.size)&&this.invertedIndex.delete(t)}this.documentTexts.delete(e)}}search(e){var t;if(0===(e=this.tokenize(e)).length)return[];let r=null;for(t of e){let e=this.invertedIndex.get(t);if(!e||0===e.size)return[];r=null===r?new Set(e):new Set([...r].filter(t=>e.has(t)))}return r?Array.from(r):[]}tokenize(e){return e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(e=>2<e.length)}get size(){return this.documentTexts.size}}class wt{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)}findNear(e,t){var r,i,s=[];for([r,i]of this.points){var a=this.haversine(e,i);a<=t&&s.push({docId:r,distance:a})}return s.sort((e,t)=>e.distance-t.distance).map(e=>e.docId)}findWithin(e){var t,r,i=[];for([t,r]of this.points)this.isWithinBounds(r,e)&&i.push(t);return i}haversine(e,t){var r=this.toRad(t.lat-e.lat),i=this.toRad(t.lng-e.lng);r=Math.sin(r/2)*Math.sin(r/2)+Math.cos(this.toRad(e.lat))*Math.cos(this.toRad(t.lat))*Math.sin(i/2)*Math.sin(i/2);return 2*Math.atan2(Math.sqrt(r),Math.sqrt(1-r))*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 yt{constructor(e){this.collection=e,this.indexes=new Map,this.indexData=new Map}async createIndex(e,t={}){var r=t.name||e;if(this.indexes.has(r))throw new Error(`Index '${r}' 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(r,e),await this.rebuildIndex(r),this.saveIndexMetadata(),r}async rebuildIndex(e){var t=this.indexes.get(e);if(!t)throw new Error(`Index '${e}' not found`);var r,i=this.createIndexStructure(t.type);for(r of await this.collection.getAll()){var s=this.getFieldValue(r,t.fieldPath);if(!t.sparse||null!=s){if(t.unique&&i.has&&i.has(s))throw new Error(`Unique constraint violation on index '${e}'`);this.addToIndex(i,s,r._id,t.type)}}this.indexData.set(e,i)}createIndexStructure(e){switch(e){case"btree":return new pt;case"hash":return new Map;case"text":return new mt;case"geo":return new wt;default:return new Map}}addToIndex(e,t,r,i){switch(i){case"btree":e.insert(t,r);break;case"hash":e.has(t)||e.set(t,new Set),e.get(t).add(r);break;case"text":e.addDocument(t,r);break;case"geo":e.addPoint(t,r)}}async updateIndex(e,t,r,i){var s=this.indexes.get(e),a=this.indexData.get(e);if(s&&a&&(null!=r&&this.removeFromIndex(a,r,t,s.type),null!=i)){if(s.unique&&this.indexContains(a,i,s.type))throw new Error(`Unique constraint violation on index '${e}'`);this.addToIndex(a,i,t,s.type)}}removeFromIndex(e,t,r,i){switch(i){case"btree":e.remove(t,r);break;case"hash":var s=e.get(t);s&&(s.delete(r),0===s.size)&&e.delete(t);break;case"text":e.removeDocument(r);break;case"geo":e.removePoint(r)}}indexContains(e,t,r){switch(r){case"btree":return e.contains(t);case"hash":return e.has(t);default:return!1}}async query(e,t){var r=this.indexes.get(e),i=this.indexData.get(e);if(r&&i)return this.queryIndex(i,t,r.type);throw new Error(`Index '${e}' not found`)}queryIndex(e,t,r){switch(r){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 r=new Set;return void 0!==t.$eq&&e.find(t.$eq).forEach(e=>r.add(e)),void 0!==t.$gte&&void 0!==t.$lte?e.range(t.$gte,t.$lte).forEach(e=>r.add(e)):void 0!==t.$gte?e.rangeFrom(t.$gte).forEach(e=>r.add(e)):void 0!==t.$lte&&e.rangeTo(t.$lte).forEach(e=>r.add(e)),Array.from(r)}queryHash(e,t){var r;if(void 0!==t.$eq)return(r=e.get(t.$eq))?Array.from(r):[];if(void 0===t.$in)return[];{let r=new Set;for(var i of t.$in)(i=e.get(i))&&i.forEach(e=>r.add(e));return Array.from(r)}}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 r;let i=e;for(r of t.split(".")){if(null==i)return;i=i[r]}return i}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=rt.serialize(e),e=it.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,r,i=it.decode(e);for(t of rt.deserialize(i).indexes){let{name:e,...r}=t;this.indexes.set(e,r)}for(r of this.indexes.keys())await this.rebuildIndex(r)}catch(e){console.error("Failed to load index metadata:",e)}}getIndexStats(){var e,t,r={};for([e,t]of this.indexes){var i=this.indexData.get(e);r[e]={...t,size:i&&(i.size||i.length)||0,memoryUsage:this.estimateMemoryUsage(i)}}return r}estimateMemoryUsage(e){return e?e instanceof Map?100*e.size:e instanceof pt?120*e.size:0:0}}class gt{async saveAttachments(e,t,r,i){try{var s,a,n=[],o=await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e,{create:!0})).getDirectoryHandle(t,{create:!0})).getDirectoryHandle(r,{create:!0});for([s,a]of i.entries()){var h=s+"_"+(a.name||"file"),c=await(await o.getFileHandle(h,{create:!0})).createWritable();let i;if(a.data instanceof Uint8Array)i=a.data;else if(a.data instanceof ArrayBuffer)i=new Uint8Array(a.data);else{if(!(a.data instanceof Blob))throw new TypeError("Unsupported attachment data type");i=new Uint8Array(await a.data.arrayBuffer())}var l=new Blob([i],{type:a.type||"application/octet-stream"}),d=(await c.write(l),await c.close(),`/${e}/${t}/${r}/`+h);n.push({path:d,name:a.name,type:a.type,size:i.byteLength,originalName:a.originalName||a.name})}return n}catch(i){throw new at("Failed to save attachments","ATTACHMENT_SAVE_FAILED",i)}}async getAttachments(e){var t,r=[],i=await navigator.storage.getDirectory();for(t of e)try{var s=t.path.split("/").filter(e=>e);let e=i;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();r.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 r}async deleteAttachments(e,t,r){try{await(await(await(await navigator.storage.getDirectory()).getDirectoryHandle(e)).getDirectoryHandle(t)).removeEntry(r,{recursive:!0})}catch(e){"NotFoundError"!==e.name&&console.error(`Failed to delete attachments for ${r}:`,e)}}static async prepareAttachment(e,t){let r;if(e instanceof File||e instanceof Blob){var i=await e.arrayBuffer();r=new Uint8Array(i)}else if(e instanceof ArrayBuffer)r=new Uint8Array(e);else{if(!(e instanceof Uint8Array))throw new TypeError("Unsupported file type for attachment");r=e}return{name:t||e.name||"unnamed",type:e.type||"application/octet-stream",data:r,originalName:e.name||t}}}class vt{constructor(){this.mutex=new st}openDatabase(e,t=1,r){return new Promise((i,s)=>{let a=indexedDB.open(e,t);a.onerror=()=>s(new at("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)}})}async performTransaction(e,t,r,i,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,r);o.oncomplete=()=>s(n),o.onerror=()=>a(o.error),o.onabort=()=>a(new Error("Transaction aborted"));try{var h=i(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 at("Transaction failed after retries","TRANSACTION_FAILED",a)})}_promisifyRequest(e){return new Promise((t,r)=>{let i=e();i.onsuccess=()=>t(i.result),i.onerror=()=>r(i.error)})}add(e,t,r,i){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==i?s.add(r,i):s.add(r))})}put(e,t,r,i){return this.performTransaction(e,[t],"readwrite",e=>{let s=e.objectStore(t);return this._promisifyRequest(()=>void 0!==i?s.put(r,i):s.put(r))})}get(e,t,r){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).get(r)))}getAll(e,t,r,i){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).getAll(r,i)))}delete(e,t,r){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).delete(r)))}clear(e,t){return this.performTransaction(e,[t],"readwrite",e=>this._promisifyRequest(()=>e.objectStore(t).clear()))}count(e,t,r){return this.performTransaction(e,[t],"readonly",e=>this._promisifyRequest(()=>e.objectStore(t).count(r)))}iterateCursorSafe(e,t,r,i="next",s){return this.performTransaction(e,[t],"readonly",e=>new Promise((a,n)=>{let o=[],h=e.objectStore(t).openCursor(s,i);h.onsuccess=e=>{if(e=e.target.result)try{var t=r(e.value,e.key);!1!==t?(o.push(t),e.continue()):a(o)}catch(e){n(e)}else a(o)},h.onerror=()=>n(h.error)}))}}class bt{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=e._encrypted||t.encrypted||!1,this._compressed=e._compressed||t.compressed||!1,this._attachments=e._attachments||[],this.data=e.data||{},this.packedData=e.packedData||null,this.compression=new lt,this.encryption=new dt,this.password=t.password||null}generateId(){return`doc_${Date.now()}_`+Math.random().toString(36).substring(2,11)}async pack(){try{let e=rt.serialize(this.data);return this._compressed&&(e=await this.compression.compress(e)),this._encrypted&&this.password&&(e=await this.encryption.encrypt(e,this.password)),this.packedData=e}catch(e){throw new at("Failed to pack document","PACK_FAILED",e)}}async unpack(){try{let e=this.packedData;return this._encrypted&&this.password&&(e=await this.encryption.decrypt(e,this.password)),this._compressed&&(e=await this.compression.decompress(e)),this.data=rt.deserialize(e),this.data}catch(e){throw new at("Failed to unpack document","UNPACK_FAILED",e)}}packSync(){let e=rt.serialize(this.data);if(this._compressed&&(e=this.compression.compressSync(e)),this._encrypted)throw new at("Synchronous encryption not supported","SYNC_ENCRYPT_NOT_SUPPORTED");return this.packedData=e}unpackSync(){let e=this.packedData;if(this._encrypted)throw new at("Synchronous decryption not supported","SYNC_DECRYPT_NOT_SUPPORTED");return this._compressed&&(e=this.compression.decompressSync(e)),this.data=rt.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 At{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,r,i){this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),r&&(this.documentPermanent[e]=!0),0<i&&(this.documentAttachments[e]=i),this.sizeKB+=t,this.length++,this.modifiedAt=Date.now()}updateDocument(e,t,r,i){var s=this.documentSizes[e]||0;this.sizeKB=this.sizeKB-s+t,this.documentSizes[e]=t,this.documentModifiedAt[e]=Date.now(),r?this.documentPermanent[e]=!0:delete this.documentPermanent[e],0<i?this.documentAttachments[e]=i: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)}toJSON(){return{name:this.name,sizeKB:this.sizeKB,length:this.length,createdAt:this.createdAt,modifiedAt:this.modifiedAt,documentSizes:this.documentSizes,documentModifiedAt:this.documentModifiedAt,documentPermanent:this.documentPermanent,documentAttachments:this.documentAttachments}}}class xt{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 r=it.decode(t),i=rt.deserialize(r);return new xt(e,i)}catch(e){console.error("Failed to load metadata:",e)}return new xt(e)}save(){var e=`lacertadb_${this.name}_metadata`;try{var t={collections:this.collections,totalSizeKB:this.totalSizeKB,totalLength:this.totalLength,modifiedAt:this.modifiedAt},r=rt.serialize(t),i=it.encode(r);localStorage.setItem(e,i)}catch(e){if("QuotaExceededError"===e.name)throw new at("Storage quota exceeded for metadata","QUOTA_EXCEEDED",e);throw new at("Failed to save metadata","METADATA_SAVE_FAILED",e)}}setCollection(e){this.collections[e.name]=e.toJSON?e.toJSON():{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 _t{constructor(e,t={}){this.dbName=e,this.sizeLimitKB=null!=t.sizeLimitKB?t.sizeLimitKB:1/0,e=this.sizeLimitKB===1/0?0:.8*this.sizeLimitKB,this.bufferLimitKB=null!=t.bufferLimitKB?t.bufferLimitKB:e,this.freeSpaceEvery=t.freeSpaceEvery||1e4}static load(e){var t=localStorage.getItem(`lacertadb_${e}_settings`);if(t)try{var r=it.decode(t),i=rt.deserialize(r);return new _t(e,i)}catch(e){console.error("Failed to load settings:",e)}return new _t(e)}save(){var e=`lacertadb_${this.dbName}_settings`,t={sizeLimitKB:this.sizeLimitKB,bufferLimitKB:this.bufferLimitKB,freeSpaceEvery:this.freeSpaceEvery};t=rt.serialize(t),t=it.encode(t);localStorage.setItem(e,t)}updateSettings(e){Object.assign(this,e),this.save()}}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=it.decode(e);return rt.deserialize(t)}catch{return[]}}_writeIndex(e){e=rt.serialize(e),e=it.encode(e),localStorage.setItem(this.indexKey,e)}add(e,t){var r=this.keyPrefix+"data_"+e;try{var i=rt.serialize(t),s=it.encode(i),a=(localStorage.setItem(r,s),this._readIndex());return a.includes(e)||(a.push(e),this._writeIndex(a)),!0}catch(e){if("QuotaExceededError"===e.name)throw new at("QuickStore quota exceeded","QUOTA_EXCEEDED",e);return!1}}get(e){if(e=this.keyPrefix+"data_"+e,e=localStorage.getItem(e))try{var t=it.decode(e);return rt.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 r=this._readIndex();t=r.length,(r=r.filter(t=>t!==e)).length<t&&this._writeIndex(r)}getAll(){return this._readIndex().map(e=>{var t=this.get(e);return t?{_id:e,...t}:null}).filter(Boolean)}clear(){var e;for(e of this._readIndex())localStorage.removeItem(this.keyPrefix+"data_"+e);localStorage.removeItem(this.indexKey)}}let Et=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}};let Ut=new class{constructor(){this.stages={$match:(e,t)=>e.filter(e=>Et.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]=Et.getFieldValue(e,r):"string"==typeof s&&s.startsWith("$")&&(i[r]=Et.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=Et.getFieldValue(e,i);if(a<(i=Et.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?Et.getFieldValue(r,s.replace("$","")):JSON.stringify(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,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,r)=>t+(Et.getFieldValue(r,e)||0),0);break;case"$avg":var u=n.docs.reduce((t,r)=>t+(Et.getFieldValue(r,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=>Et.getFieldValue(t,e)));break;case"$min":c[h]=Math.min(...n.docs.map(t=>Et.getFieldValue(t,e)))}}o.push(c)}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=Et.getFieldValue(e,t.foreignField);i.has(r)||i.set(r,[]),i.get(r).push(e)}),e.map(e=>{var r=Et.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}};class kt{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 r=e.split(".").map(Number),i=t.split(".").map(Number),s=Math.max(r.length,i.length);for(let e=0;e<s;e++){var a=r[e]||0,n=i[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 r;for(r of(console.log(`${"up"===t?"Running":"Rolling back"} migration: ${e.name} (v${e.version})`),await this.database.listCollections())){var i,s=await this.database.getCollection(r);for(i of await s.getAll()){var a=await e[t](i);a&&await s.update(i._id,a)}}}}class It{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),r=(t=0<this.metrics.latencies.length?t/this.metrics.latencies.length:0,0<(r=this.metrics.cacheHits+this.metrics.cacheMisses)?this.metrics.cacheHits/r*100:0),i=(i=0<this.metrics.memoryUsage.length?this.metrics.memoryUsage[this.metrics.memoryUsage.length-1]:null)?i.used/1048576:0;return{opsPerSec:e,avgLatency:t.toFixed(2),cacheHitRate:r.toFixed(1),memoryUsageMB:i.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 Dt{constructor(e,t){this.name=e,this.database=t,this.db=null,this.metadata=null,this.settings=t.settings,this.indexedDB=new vt,this.opfs=new gt,this.cleanupInterval=null,this.events=new Map,this.indexManager=new yt(this),this.cacheStrategy=new ct({type:"lru",maxSize:100,ttl:6e4,enabled:!0}),this.performanceMonitor=t.performanceMonitor}async init(){var e=this.database.name+"_"+this.name;this.db=await this.indexedDB.openDatabase(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];return this.metadata=new At(this.name,e),await this.indexManager.loadIndexMetadata(),0<this.settings.freeSpaceEvery&&(this.cleanupInterval=setInterval(()=>this.freeSpace(),this.settings.freeSpaceEvery)),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()}configureCacheStrategy(e){this.cacheStrategy.updateStrategy(e)}async add(e,t={}){await this.trigger("beforeAdd",e);var r,i,s=new bt({data:e,_id:t.id},{encrypted:t.encrypted||!1,compressed:!1!==t.compressed,permanent:t.permanent||!1,password:t.password}),a=(e=((e=t.attachments)&&0<e.length&&(t=await Promise.all(e.map(e=>e instanceof File||e instanceof Blob?gt.prepareAttachment(e,e.name):Promise.resolve(e))),s._attachments=await this.opfs.saveAttachments(this.database.name,this.name,s._id,t)),await s.pack(),s.databaseOutput()),await this.indexedDB.add(this.db,"documents",e),s.objectOutput());for([r,i]of this.indexManager.indexes){var n=this.indexManager.getFieldValue(a,i.fieldPath);null!=n&&await this.indexManager.updateIndex(r,s._id,void 0,n)}return t=e.packedData.byteLength/1024,this.metadata.addDocument(s._id,t,s._permanent,s._attachments.length),this.database.metadata.setCollection(this.metadata),await this.checkSpaceLimit(),await this.trigger("afterAdd",s),this.cacheStrategy.clear(),s._id}async get(e,t={}){await this.trigger("beforeGet",e);var r,i=await this.indexedDB.get(this.db,"documents",e);if(i)return r=new bt(i,{password:t.password,encrypted:i._encrypted,compressed:i._compressed}),i.packedData&&await r.unpack(),t.includeAttachments&&0<r._attachments.length&&(r.data._attachments=await this.opfs.getAttachments(r._attachments)),await this.trigger("afterGet",r),r.objectOutput(t.includeAttachments);throw new at(`Document with id '${e}' not found.`,"DOCUMENT_NOT_FOUND")}async getAll(e={}){var t=await this.indexedDB.getAll(this.db,"documents",void 0,e.limit);return Promise.all(t.map(async t=>{try{var r=new bt(t,{password:e.password,encrypted:t._encrypted,compressed:t._compressed});return t.packedData&&await r.unpack(),r.objectOutput()}catch(r){return console.error(`Failed to unpack document ${t._id}:`,r),null}})).then(e=>e.filter(Boolean))}async update(e,t,r={}){await this.trigger("beforeUpdate",{docId:e,updates:t});var i=await this.indexedDB.get(this.db,"documents",e);if(!i)throw new at(`Document with id '${e}' not found for update.`,"DOCUMENT_NOT_FOUND");var s,a,n=new bt(i,{password:r.password}),o=(i.packedData&&await n.unpack(),n.objectOutput()),h=(n={...n.data,...t},new bt({_id:e,_created:i._created,data:n},{encrypted:void 0!==r.encrypted?r.encrypted:i._encrypted,compressed:void 0!==r.compressed?r.compressed:i._compressed,permanent:void 0!==r.permanent?r.permanent:i._permanent,password:r.password})),c=(r=((t=(h._modified=Date.now(),r.attachments))&&0<t.length?(await this.opfs.deleteAttachments(this.database.name,this.name,e),n=await Promise.all(t.map(e=>e instanceof File||e instanceof Blob?gt.prepareAttachment(e,e.name):Promise.resolve(e))),h._attachments=await this.opfs.saveAttachments(this.database.name,this.name,h._id,n)):h._attachments=i._attachments,await h.pack(),h.databaseOutput()),await this.indexedDB.put(this.db,"documents",r),h.objectOutput());for([s,a]of this.indexManager.indexes){var l=this.indexManager.getFieldValue(o,a.fieldPath),d=this.indexManager.getFieldValue(c,a.fieldPath);l!==d&&await this.indexManager.updateIndex(s,h._id,l,d)}return e=r.packedData.byteLength/1024,this.metadata.updateDocument(h._id,e,h._permanent,h._attachments.length),this.database.metadata.setCollection(this.metadata),await this.trigger("afterUpdate",h),this.cacheStrategy.clear(),h._id}async delete(e,t={}){await this.trigger("beforeDelete",e);var r=await this.indexedDB.get(this.db,"documents",e);if(!r)throw new at("Document not found for deletion","DOCUMENT_NOT_FOUND");if(r._permanent&&!t.force)throw new at("Cannot delete a permanent document. Use options.force = true to force deletion.","PERMANENT_DOCUMENT_PROTECTION");r._permanent&&t.force&&console.warn("Force deleting permanent document: "+e);var i=await this.get(e,{password:t.password}).catch(()=>null);if(i)for(var[s,a]of this.indexManager.indexes)null!=(a=this.indexManager.getFieldValue(i,a.fieldPath))&&await this.indexManager.updateIndex(s,e,a,void 0);await this.indexedDB.delete(this.db,"documents",e),(t=r._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={}){var r,i,s=performance.now(),a=it.encode(rt.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([r,i]of this.indexManager.indexes){var c=e[i.fieldPath];if(void 0!==c){c=await this.indexManager.query(r,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=>Et.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){var t=performance.now(),r=await this.getAll();r=await Ut.execute(r,e,this.database);return this.performanceMonitor&&this.performanceMonitor.recordOperation("aggregate",performance.now()-t),r}async batchAdd(e,t){var r=performance.now();e=await Promise.all(e.map(e=>this.add(e,t).then(e=>({success:!0,id:e})).catch(e=>({success:!1,error:e.message}))));return this.performanceMonitor&&this.performanceMonitor.recordOperation("batchAdd",performance.now()-r),e}async batchUpdate(e,t){return 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 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(e.force)for(var t of(await this.indexedDB.clear(this.db,"documents"),this.metadata=new At(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 r;this.events.has(e)&&(r=this.events.get(e).filter(e=>e!==t),this.events.set(e,r))}async trigger(e,t){if(this.events.has(e))for(var r of this.events.get(e))await r(t)}clearCache(){this.cacheStrategy.clear()}destroy(){clearInterval(this.cleanupInterval),this.db&&this.db.close()}}class zt{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}async init(e={}){return this.metadata=xt.load(this.name),this.settings=_t.load(this.name),this.quickStore=new St(this.name),e.pin&&await this.initializeEncryption(e.pin,e.salt),this}async initializeEncryption(e,t=null){this.encryption=new ut((null==(r=this.database)?void 0:r.encryptionConfig)||{});var r=`lacertadb_${this.name}_encryption`;let i=null;t||(s=localStorage.getItem(r))&&(i=(s=JSON.parse(s)).salt);var s=await this.encryption.initialize(e,i?it.decode(i):t);return i||(e=this.encryption.exportMetadata(),localStorage.setItem(r,JSON.stringify(e))),this.isEncrypted=!0,s}async changePin(e,t){var r;if(this.isEncrypted)return e=await this.encryption.changePin(e,t),t=`lacertadb_${this.name}_encryption`,r=this.encryption.exportMetadata(),localStorage.setItem(t,JSON.stringify(r)),e;throw new Error("Database is not encrypted")}async storePrivateKey(e,t,r=""){if(!this.isEncrypted)throw new Error("Database must be encrypted to store private keys");t=await this.encryption.encryptPrivateKey(t,r);let i=await this.getCollection("__private_keys__").catch(()=>null);return await(i=i||await this.createCollection("__private_keys__",{encrypted:!1})).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 r=await(await this.getCollection("__private_keys__")).get(e);if(r)return this.encryption.decryptPrivateKey(r.key,t);throw new Error(`Private key '${e}' not found`)}async createCollection(e,t){if(this.collections.has(e))throw new at(`Collection '${e}' already exists.`,"COLLECTION_EXISTS");var r=new Dt(e,this);return await r.init(),this.collections.set(e,r),this.metadata.collections[e]||this.metadata.setCollection(new At(e)),r}async getCollection(e){if(this.collections.has(e))return this.collections.get(e);var t;if(this.metadata.collections[e])return await(t=new Dt(e,this)).init(),this.collections.set(e,t),t;throw new at(`Collection '${e}' not found.`,"COLLECTION_NOT_FOUND")}async dropCollection(e){var t;this.collections.has(e)&&(await(t=this.collections.get(e)).clear({force:!0}),t.destroy(),this.collections.delete(e)),this.metadata.removeCollection(e);let r=this.name+"_"+e;await new Promise((e,t)=>{var i=indexedDB.deleteDatabase(r);i.onsuccess=e,i.onerror=t,i.onblocked=()=>console.warn(`Deletion of '${r}' 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 r,i,s,a={version:"5.0.0",database:this.name,timestamp:Date.now(),collections:{}};for(r of this.listCollections()){var n=await this.getCollection(r);a.collections[r]=await n.getAll({password:t})}if("json"===e)return s=rt.serialize(a),it.encode(s);if("encrypted"===e&&t)return s=new dt,i=rt.serialize(a),s=await s.encrypt(i,t),it.encode(s);throw new at("Unsupported export format: "+e,"INVALID_FORMAT")}async import(e,t="json",r=null){let i;try{var s,a=it.decode(e);i="encrypted"===t&&r?(s=await(new dt).decrypt(a,r),rt.deserialize(s)):rt.deserialize(a)}catch(e){throw new at("Failed to parse import data","IMPORT_PARSE_FAILED",e)}for(var n in i.collections){var o=i.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(i.collections).reduce((e,t)=>e+t.length,0),{collections:Object.keys(i.collections).length,documents:e}}async clearAll(){await Promise.all([...this.collections.keys()].map(e=>this.dropCollection(e))),this.collections.clear(),this.metadata=new xt(this.name),this.metadata.save(),this.quickStore.clear()}destroy(){this.collections.forEach(e=>e.destroy()),this.collections.clear(),this.encryption&&this.encryption.destroy()}}class Mt{constructor(){this.databases=new Map,this.performanceMonitor=new It}async getDatabase(e,t={}){var r;return this.databases.has(e)||(await(r=new zt(e,this.performanceMonitor)).init(t),this.databases.set(e,r)),this.databases.get(e)}async getSecureDatabase(e,t,r=null,i={}){return this.getDatabase(e,{pin:t,salt:r,encryptionConfig:i})}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()}listDatabases(){var e=new Set,t=["lacertadb_"];for(let o=0;o<localStorage.length;o++){var r=localStorage.key(o);if(r)for(var i of t)if(r.startsWith(i)){var s,a=r.substring(i.length);for(s of["_metadata","_settings","_version","_encryption","_quickstore","_indexes"]){var n=a.lastIndexOf(s);if(0<n){(n=a.substring(0,n))&&e.add(n);break}}}}return[...e]}async createBackup(e=null){var t,r={version:"5.0.0",timestamp:Date.now(),databases:{}};for(t of this.listDatabases()){var i=await(await this.getDatabase(t)).export("json");i=it.decode(i);r.databases[t]=rt.deserialize(i)}var s=rt.serialize(r);return e?(e=await(new dt).encrypt(s,e),it.encode(e)):it.encode(s)}async restoreBackup(e,t=null){let r;try{var i,s=it.decode(e);r=t?(i=await(new dt).decrypt(s,t),rt.deserialize(i)):rt.deserialize(s)}catch(e){throw new at("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(r.databases)){var h=await this.getDatabase(a),c=it.encode(rt.serialize(n));h=await h.import(c);o.databases++,o.collections+=h.collections,o.documents+=h.documents}return o}}},function(e,t,r){r.r(t),t=r(1),"undefined"!=typeof window?window.LACERTA=t:self.LACERTA=t}]);