@verdant-web/store 4.4.1 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
- "use strict";var mo=Object.create;var Vt=Object.defineProperty;var go=Object.getOwnPropertyDescriptor;var yo=Object.getOwnPropertyNames;var bo=Object.getPrototypeOf,vo=Object.prototype.hasOwnProperty;var wo=(i,n)=>()=>(i&&(n=i(i=0)),n);var le=(i,n)=>()=>(n||i((n={exports:{}}).exports,n),n.exports),lr=(i,n)=>{for(var e in n)Vt(i,e,{get:n[e],enumerable:!0})},dr=(i,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of yo(n))!vo.call(i,r)&&r!==e&&Vt(i,r,{get:()=>n[r],enumerable:!(t=go(n,r))||t.enumerable});return i};var Te=(i,n,e)=>(e=i!=null?mo(bo(i)):{},dr(n||!i||!i.__esModule?Vt(e,"default",{value:i,enumerable:!0}):e,i)),tt=i=>dr(Vt({},"__esModule",{value:!0}),i);var br=le((gr,yr)=>{(function(i){var n;typeof gr=="object"?yr.exports=i():typeof define=="function"&&define.amd?define(i):(typeof window<"u"?n=window:typeof global<"u"?n=global:typeof self<"u"&&(n=self),n.objectHash=i())})(function(){return function i(n,e,t){function r(a,d){if(!e[a]){if(!n[a]){var h=typeof require=="function"&&require;if(!d&&h)return h(a,!0);if(s)return s(a,!0);throw new Error("Cannot find module '"+a+"'")}d=e[a]={exports:{}},n[a][0].call(d.exports,function(p){var O=n[a][1][p];return r(O||p)},d,d.exports,i,n,e,t)}return e[a].exports}for(var s=typeof require=="function"&&require,o=0;o<t.length;o++)r(t[o]);return r}({1:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){"use strict";var v=i("crypto");function P(b,S){S=_(b,S);var u;return(u=S.algorithm!=="passthrough"?v.createHash(S.algorithm):new k).write===void 0&&(u.write=u.update,u.end=u.update),D(S,u).dispatch(b),u.update||u.end(""),u.digest?u.digest(S.encoding==="buffer"?void 0:S.encoding):(b=u.read(),S.encoding!=="buffer"?b.toString(S.encoding):b)}(e=n.exports=P).sha1=function(b){return P(b)},e.keys=function(b){return P(b,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},e.MD5=function(b){return P(b,{algorithm:"md5",encoding:"hex"})},e.keysMD5=function(b){return P(b,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var y=v.getHashes?v.getHashes().slice():["sha1","md5"],I=(y.push("passthrough"),["buffer","hex","binary","base64"]);function _(b,S){var u={};if(u.algorithm=(S=S||{}).algorithm||"sha1",u.encoding=S.encoding||"hex",u.excludeValues=!!S.excludeValues,u.algorithm=u.algorithm.toLowerCase(),u.encoding=u.encoding.toLowerCase(),u.ignoreUnknown=S.ignoreUnknown===!0,u.respectType=S.respectType!==!1,u.respectFunctionNames=S.respectFunctionNames!==!1,u.respectFunctionProperties=S.respectFunctionProperties!==!1,u.unorderedArrays=S.unorderedArrays===!0,u.unorderedSets=S.unorderedSets!==!1,u.unorderedObjects=S.unorderedObjects!==!1,u.replacer=S.replacer||void 0,u.excludeKeys=S.excludeKeys||void 0,b===void 0)throw new Error("Object argument required.");for(var m=0;m<y.length;++m)y[m].toLowerCase()===u.algorithm.toLowerCase()&&(u.algorithm=y[m]);if(y.indexOf(u.algorithm)===-1)throw new Error('Algorithm "'+u.algorithm+'" not supported. supported values: '+y.join(", "));if(I.indexOf(u.encoding)===-1&&u.algorithm!=="passthrough")throw new Error('Encoding "'+u.encoding+'" not supported. supported values: '+I.join(", "));return u}function E(b){if(typeof b=="function")return/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(b))!=null}function D(b,S,u){u=u||[];function m(l){return S.update?S.update(l,"utf8"):S.write(l,"utf8")}return{dispatch:function(l){return this["_"+((l=b.replacer?b.replacer(l):l)===null?"null":typeof l)](l)},_object:function(l){var w,x=Object.prototype.toString.call(l),j=/\[object (.*)\]/i.exec(x);if(j=(j=j?j[1]:"unknown:["+x+"]").toLowerCase(),0<=(x=u.indexOf(l)))return this.dispatch("[CIRCULAR:"+x+"]");if(u.push(l),s!==void 0&&s.isBuffer&&s.isBuffer(l))return m("buffer:"),m(l);if(j==="object"||j==="function"||j==="asyncfunction")return x=Object.keys(l),b.unorderedObjects&&(x=x.sort()),b.respectType===!1||E(l)||x.splice(0,0,"prototype","__proto__","constructor"),b.excludeKeys&&(x=x.filter(function(B){return!b.excludeKeys(B)})),m("object:"+x.length+":"),w=this,x.forEach(function(B){w.dispatch(B),m(":"),b.excludeValues||w.dispatch(l[B]),m(",")});if(!this["_"+j]){if(b.ignoreUnknown)return m("["+j+"]");throw new Error('Unknown object type "'+j+'"')}this["_"+j](l)},_array:function(l,B){B=B!==void 0?B:b.unorderedArrays!==!1;var x=this;if(m("array:"+l.length+":"),!B||l.length<=1)return l.forEach(function(M){return x.dispatch(M)});var j=[],B=l.map(function(M){var T=new k,Q=u.slice();return D(b,T,Q).dispatch(M),j=j.concat(Q.slice(u.length)),T.read().toString()});return u=u.concat(j),B.sort(),this._array(B,!1)},_date:function(l){return m("date:"+l.toJSON())},_symbol:function(l){return m("symbol:"+l.toString())},_error:function(l){return m("error:"+l.toString())},_boolean:function(l){return m("bool:"+l.toString())},_string:function(l){m("string:"+l.length+":"),m(l.toString())},_function:function(l){m("fn:"),E(l)?this.dispatch("[native]"):this.dispatch(l.toString()),b.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(l.name)),b.respectFunctionProperties&&this._object(l)},_number:function(l){return m("number:"+l.toString())},_xml:function(l){return m("xml:"+l.toString())},_null:function(){return m("Null")},_undefined:function(){return m("Undefined")},_regexp:function(l){return m("regex:"+l.toString())},_uint8array:function(l){return m("uint8array:"),this.dispatch(Array.prototype.slice.call(l))},_uint8clampedarray:function(l){return m("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(l))},_int8array:function(l){return m("int8array:"),this.dispatch(Array.prototype.slice.call(l))},_uint16array:function(l){return m("uint16array:"),this.dispatch(Array.prototype.slice.call(l))},_int16array:function(l){return m("int16array:"),this.dispatch(Array.prototype.slice.call(l))},_uint32array:function(l){return m("uint32array:"),this.dispatch(Array.prototype.slice.call(l))},_int32array:function(l){return m("int32array:"),this.dispatch(Array.prototype.slice.call(l))},_float32array:function(l){return m("float32array:"),this.dispatch(Array.prototype.slice.call(l))},_float64array:function(l){return m("float64array:"),this.dispatch(Array.prototype.slice.call(l))},_arraybuffer:function(l){return m("arraybuffer:"),this.dispatch(new Uint8Array(l))},_url:function(l){return m("url:"+l.toString())},_map:function(l){return m("map:"),l=Array.from(l),this._array(l,b.unorderedSets!==!1)},_set:function(l){return m("set:"),l=Array.from(l),this._array(l,b.unorderedSets!==!1)},_file:function(l){return m("file:"),this.dispatch([l.name,l.size,l.type,l.lastModfied])},_blob:function(){if(b.ignoreUnknown)return m("[blob]");throw Error(`Hashing Blob objects is currently not supported
1
+ "use strict";var bo=Object.create;var Mt=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var wo=Object.getOwnPropertyNames;var xo=Object.getPrototypeOf,So=Object.prototype.hasOwnProperty;var Oo=(i,n)=>()=>(i&&(n=i(i=0)),n);var le=(i,n)=>()=>(n||i((n={exports:{}}).exports,n),n.exports),fr=(i,n)=>{for(var e in n)Mt(i,e,{get:n[e],enumerable:!0})},hr=(i,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of wo(n))!So.call(i,r)&&r!==e&&Mt(i,r,{get:()=>n[r],enumerable:!(t=vo(n,r))||t.enumerable});return i};var Te=(i,n,e)=>(e=i!=null?bo(xo(i)):{},hr(n||!i||!i.__esModule?Mt(e,"default",{value:i,enumerable:!0}):e,i)),tt=i=>hr(Mt({},"__esModule",{value:!0}),i);var xr=le((vr,wr)=>{(function(i){var n;typeof vr=="object"?wr.exports=i():typeof define=="function"&&define.amd?define(i):(typeof window<"u"?n=window:typeof global<"u"?n=global:typeof self<"u"&&(n=self),n.objectHash=i())})(function(){return function i(n,e,t){function r(a,l){if(!e[a]){if(!n[a]){var p=typeof require=="function"&&require;if(!l&&p)return p(a,!0);if(s)return s(a,!0);throw new Error("Cannot find module '"+a+"'")}l=e[a]={exports:{}},n[a][0].call(l.exports,function(h){var O=n[a][1][h];return r(O||h)},l,l.exports,i,n,e,t)}return e[a].exports}for(var s=typeof require=="function"&&require,o=0;o<t.length;o++)r(t[o]);return r}({1:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){"use strict";var v=i("crypto");function P(b,S){S=_(b,S);var u;return(u=S.algorithm!=="passthrough"?v.createHash(S.algorithm):new k).write===void 0&&(u.write=u.update,u.end=u.update),D(S,u).dispatch(b),u.update||u.end(""),u.digest?u.digest(S.encoding==="buffer"?void 0:S.encoding):(b=u.read(),S.encoding!=="buffer"?b.toString(S.encoding):b)}(e=n.exports=P).sha1=function(b){return P(b)},e.keys=function(b){return P(b,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},e.MD5=function(b){return P(b,{algorithm:"md5",encoding:"hex"})},e.keysMD5=function(b){return P(b,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var y=v.getHashes?v.getHashes().slice():["sha1","md5"],I=(y.push("passthrough"),["buffer","hex","binary","base64"]);function _(b,S){var u={};if(u.algorithm=(S=S||{}).algorithm||"sha1",u.encoding=S.encoding||"hex",u.excludeValues=!!S.excludeValues,u.algorithm=u.algorithm.toLowerCase(),u.encoding=u.encoding.toLowerCase(),u.ignoreUnknown=S.ignoreUnknown===!0,u.respectType=S.respectType!==!1,u.respectFunctionNames=S.respectFunctionNames!==!1,u.respectFunctionProperties=S.respectFunctionProperties!==!1,u.unorderedArrays=S.unorderedArrays===!0,u.unorderedSets=S.unorderedSets!==!1,u.unorderedObjects=S.unorderedObjects!==!1,u.replacer=S.replacer||void 0,u.excludeKeys=S.excludeKeys||void 0,b===void 0)throw new Error("Object argument required.");for(var m=0;m<y.length;++m)y[m].toLowerCase()===u.algorithm.toLowerCase()&&(u.algorithm=y[m]);if(y.indexOf(u.algorithm)===-1)throw new Error('Algorithm "'+u.algorithm+'" not supported. supported values: '+y.join(", "));if(I.indexOf(u.encoding)===-1&&u.algorithm!=="passthrough")throw new Error('Encoding "'+u.encoding+'" not supported. supported values: '+I.join(", "));return u}function E(b){if(typeof b=="function")return/^function\s+\w*\s*\(\s*\)\s*{\s+\[native code\]\s+}$/i.exec(Function.prototype.toString.call(b))!=null}function D(b,S,u){u=u||[];function m(d){return S.update?S.update(d,"utf8"):S.write(d,"utf8")}return{dispatch:function(d){return this["_"+((d=b.replacer?b.replacer(d):d)===null?"null":typeof d)](d)},_object:function(d){var w,x=Object.prototype.toString.call(d),j=/\[object (.*)\]/i.exec(x);if(j=(j=j?j[1]:"unknown:["+x+"]").toLowerCase(),0<=(x=u.indexOf(d)))return this.dispatch("[CIRCULAR:"+x+"]");if(u.push(d),s!==void 0&&s.isBuffer&&s.isBuffer(d))return m("buffer:"),m(d);if(j==="object"||j==="function"||j==="asyncfunction")return x=Object.keys(d),b.unorderedObjects&&(x=x.sort()),b.respectType===!1||E(d)||x.splice(0,0,"prototype","__proto__","constructor"),b.excludeKeys&&(x=x.filter(function(B){return!b.excludeKeys(B)})),m("object:"+x.length+":"),w=this,x.forEach(function(B){w.dispatch(B),m(":"),b.excludeValues||w.dispatch(d[B]),m(",")});if(!this["_"+j]){if(b.ignoreUnknown)return m("["+j+"]");throw new Error('Unknown object type "'+j+'"')}this["_"+j](d)},_array:function(d,B){B=B!==void 0?B:b.unorderedArrays!==!1;var x=this;if(m("array:"+d.length+":"),!B||d.length<=1)return d.forEach(function(M){return x.dispatch(M)});var j=[],B=d.map(function(M){var T=new k,Q=u.slice();return D(b,T,Q).dispatch(M),j=j.concat(Q.slice(u.length)),T.read().toString()});return u=u.concat(j),B.sort(),this._array(B,!1)},_date:function(d){return m("date:"+d.toJSON())},_symbol:function(d){return m("symbol:"+d.toString())},_error:function(d){return m("error:"+d.toString())},_boolean:function(d){return m("bool:"+d.toString())},_string:function(d){m("string:"+d.length+":"),m(d.toString())},_function:function(d){m("fn:"),E(d)?this.dispatch("[native]"):this.dispatch(d.toString()),b.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(d.name)),b.respectFunctionProperties&&this._object(d)},_number:function(d){return m("number:"+d.toString())},_xml:function(d){return m("xml:"+d.toString())},_null:function(){return m("Null")},_undefined:function(){return m("Undefined")},_regexp:function(d){return m("regex:"+d.toString())},_uint8array:function(d){return m("uint8array:"),this.dispatch(Array.prototype.slice.call(d))},_uint8clampedarray:function(d){return m("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(d))},_int8array:function(d){return m("int8array:"),this.dispatch(Array.prototype.slice.call(d))},_uint16array:function(d){return m("uint16array:"),this.dispatch(Array.prototype.slice.call(d))},_int16array:function(d){return m("int16array:"),this.dispatch(Array.prototype.slice.call(d))},_uint32array:function(d){return m("uint32array:"),this.dispatch(Array.prototype.slice.call(d))},_int32array:function(d){return m("int32array:"),this.dispatch(Array.prototype.slice.call(d))},_float32array:function(d){return m("float32array:"),this.dispatch(Array.prototype.slice.call(d))},_float64array:function(d){return m("float64array:"),this.dispatch(Array.prototype.slice.call(d))},_arraybuffer:function(d){return m("arraybuffer:"),this.dispatch(new Uint8Array(d))},_url:function(d){return m("url:"+d.toString())},_map:function(d){return m("map:"),d=Array.from(d),this._array(d,b.unorderedSets!==!1)},_set:function(d){return m("set:"),d=Array.from(d),this._array(d,b.unorderedSets!==!1)},_file:function(d){return m("file:"),this.dispatch([d.name,d.size,d.type,d.lastModfied])},_blob:function(){if(b.ignoreUnknown)return m("[blob]");throw Error(`Hashing Blob objects is currently not supported
2
2
  (see https://github.com/puleos/object-hash/issues/26)
3
3
  Use "options.replacer" or "options.ignoreUnknown"
4
- `)},_domwindow:function(){return m("domwindow")},_bigint:function(l){return m("bigint:"+l.toString())},_process:function(){return m("process")},_timer:function(){return m("timer")},_pipe:function(){return m("pipe")},_tcp:function(){return m("tcp")},_udp:function(){return m("udp")},_tty:function(){return m("tty")},_statwatcher:function(){return m("statwatcher")},_securecontext:function(){return m("securecontext")},_connection:function(){return m("connection")},_zlib:function(){return m("zlib")},_context:function(){return m("context")},_nodescript:function(){return m("nodescript")},_httpparser:function(){return m("httpparser")},_dataview:function(){return m("dataview")},_signal:function(){return m("signal")},_fsevent:function(){return m("fsevent")},_tlswrap:function(){return m("tlswrap")}}}function k(){return{buf:"",write:function(b){this.buf+=b},end:function(b){this.buf+=b},read:function(){return this.buf}}}e.writeToStream=function(b,S,u){return u===void 0&&(u=S,S={}),D(S=_(b,S),u).dispatch(b)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){(function(v){"use strict";var P=typeof Uint8Array<"u"?Uint8Array:Array,y="+".charCodeAt(0),I="/".charCodeAt(0),_="0".charCodeAt(0),E="a".charCodeAt(0),D="A".charCodeAt(0),k="-".charCodeAt(0),b="_".charCodeAt(0);function S(u){return u=u.charCodeAt(0),u===y||u===k?62:u===I||u===b?63:u<_?-1:u<_+10?u-_+26+26:u<D+26?u-D:u<E+26?u-E+26:void 0}v.toByteArray=function(u){var m,l;if(0<u.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var w=u.length,w=u.charAt(w-2)==="="?2:u.charAt(w-1)==="="?1:0,x=new P(3*u.length/4-w),j=0<w?u.length-4:u.length,B=0;function M(T){x[B++]=T}for(m=0;m<j;m+=4,0)M((16711680&(l=S(u.charAt(m))<<18|S(u.charAt(m+1))<<12|S(u.charAt(m+2))<<6|S(u.charAt(m+3))))>>16),M((65280&l)>>8),M(255&l);return w==2?M(255&(l=S(u.charAt(m))<<2|S(u.charAt(m+1))>>4)):w==1&&(M((l=S(u.charAt(m))<<10|S(u.charAt(m+1))<<4|S(u.charAt(m+2))>>2)>>8&255),M(255&l)),x},v.fromByteArray=function(u){var m,l,w,x,j=u.length%3,B="";function M(T){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(T)}for(m=0,w=u.length-j;m<w;m+=3)l=(u[m]<<16)+(u[m+1]<<8)+u[m+2],B+=M((x=l)>>18&63)+M(x>>12&63)+M(x>>6&63)+M(63&x);switch(j){case 1:B=(B+=M((l=u[u.length-1])>>2))+M(l<<4&63)+"==";break;case 2:B=(B=(B+=M((l=(u[u.length-2]<<8)+u[u.length-1])>>10))+M(l>>4&63))+M(l<<2&63)+"="}return B}})(e===void 0?this.base64js={}:e)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(i,n,e){(function(t,r,y,o,a,d,h,p,O){var v=i("base64-js"),P=i("ieee754");function y(c,f,g){if(!(this instanceof y))return new y(c,f,g);var A,C,F,U,J=typeof c;if(f==="base64"&&J=="string")for(c=(U=c).trim?U.trim():U.replace(/^\s+|\s+$/g,"");c.length%4!=0;)c+="=";if(J=="number")A=ie(c);else if(J=="string")A=y.byteLength(c,f);else{if(J!="object")throw new Error("First argument needs to be a number, array or string.");A=ie(c.length)}if(y._useTypedArrays?C=y._augment(new Uint8Array(A)):((C=this).length=A,C._isBuffer=!0),y._useTypedArrays&&typeof c.byteLength=="number")C._set(c);else if(W(U=c)||y.isBuffer(U)||U&&typeof U=="object"&&typeof U.length=="number")for(F=0;F<A;F++)y.isBuffer(c)?C[F]=c.readUInt8(F):C[F]=c[F];else if(J=="string")C.write(c,0,f);else if(J=="number"&&!y._useTypedArrays&&!g)for(F=0;F<A;F++)C[F]=0;return C}function I(c,f,g,A){return y._charsWritten=Mt(function(C){for(var F=[],U=0;U<C.length;U++)F.push(255&C.charCodeAt(U));return F}(f),c,g,A)}function _(c,f,g,A){return y._charsWritten=Mt(function(C){for(var F,U,J=[],X=0;X<C.length;X++)U=C.charCodeAt(X),F=U>>8,U=U%256,J.push(U),J.push(F);return J}(f),c,g,A)}function E(c,f,g){var A="";g=Math.min(c.length,g);for(var C=f;C<g;C++)A+=String.fromCharCode(c[C]);return A}function D(c,f,g,F){F||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+1<c.length,"Trying to read beyond buffer length"));var C,F=c.length;if(!(F<=f))return g?(C=c[f],f+1<F&&(C|=c[f+1]<<8)):(C=c[f]<<8,f+1<F&&(C|=c[f+1])),C}function k(c,f,g,F){F||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+3<c.length,"Trying to read beyond buffer length"));var C,F=c.length;if(!(F<=f))return g?(f+2<F&&(C=c[f+2]<<16),f+1<F&&(C|=c[f+1]<<8),C|=c[f],f+3<F&&(C+=c[f+3]<<24>>>0)):(f+1<F&&(C=c[f+1]<<16),f+2<F&&(C|=c[f+2]<<8),f+3<F&&(C|=c[f+3]),C+=c[f]<<24>>>0),C}function b(c,f,g,A){if(A||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+1<c.length,"Trying to read beyond buffer length")),!(c.length<=f))return A=D(c,f,g,!0),32768&A?-1*(65535-A+1):A}function S(c,f,g,A){if(A||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+3<c.length,"Trying to read beyond buffer length")),!(c.length<=f))return A=k(c,f,g,!0),2147483648&A?-1*(4294967295-A+1):A}function u(c,f,g,A){return A||(R(typeof g=="boolean","missing or invalid endian"),R(f+3<c.length,"Trying to read beyond buffer length")),P.read(c,f,g,23,4)}function m(c,f,g,A){return A||(R(typeof g=="boolean","missing or invalid endian"),R(f+7<c.length,"Trying to read beyond buffer length")),P.read(c,f,g,52,8)}function l(c,f,g,A,C){if(C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+1<c.length,"trying to write beyond buffer length"),ti(f,65535)),C=c.length,!(C<=g))for(var F=0,U=Math.min(C-g,2);F<U;F++)c[g+F]=(f&255<<8*(A?F:1-F))>>>8*(A?F:1-F)}function w(c,f,g,A,C){if(C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"trying to write beyond buffer length"),ti(f,4294967295)),C=c.length,!(C<=g))for(var F=0,U=Math.min(C-g,4);F<U;F++)c[g+F]=f>>>8*(A?F:3-F)&255}function x(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+1<c.length,"Trying to write beyond buffer length"),ni(f,32767,-32768)),c.length<=g||l(c,0<=f?f:65535+f+1,g,A,C)}function j(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"Trying to write beyond buffer length"),ni(f,2147483647,-2147483648)),c.length<=g||w(c,0<=f?f:4294967295+f+1,g,A,C)}function B(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"Trying to write beyond buffer length"),ar(f,34028234663852886e22,-34028234663852886e22)),c.length<=g||P.write(c,f,g,A,23,4)}function M(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+7<c.length,"Trying to write beyond buffer length"),ar(f,17976931348623157e292,-17976931348623157e292)),c.length<=g||P.write(c,f,g,A,52,8)}e.Buffer=y,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,y.poolSize=8192,y._useTypedArrays=function(){try{var c=new ArrayBuffer(0),f=new Uint8Array(c);return f.foo=function(){return 42},f.foo()===42&&typeof f.subarray=="function"}catch{return!1}}(),y.isEncoding=function(c){switch(String(c).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},y.isBuffer=function(c){return!(c==null||!c._isBuffer)},y.byteLength=function(c,f){var g;switch(c+="",f||"utf8"){case"hex":g=c.length/2;break;case"utf8":case"utf-8":g=De(c).length;break;case"ascii":case"binary":case"raw":g=c.length;break;case"base64":g=sr(c).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":g=2*c.length;break;default:throw new Error("Unknown encoding")}return g},y.concat=function(c,f){if(R(W(c),`Usage: Buffer.concat(list, [totalLength])
5
- list should be an Array.`),c.length===0)return new y(0);if(c.length===1)return c[0];if(typeof f!="number")for(C=f=0;C<c.length;C++)f+=c[C].length;for(var g=new y(f),A=0,C=0;C<c.length;C++){var F=c[C];F.copy(g,A),A+=F.length}return g},y.prototype.write=function(c,f,g,A){isFinite(f)?isFinite(g)||(A=g,g=void 0):(X=A,A=f,f=g,g=X),f=Number(f)||0;var C,F,U,J,X=this.length-f;switch((!g||X<(g=Number(g)))&&(g=X),A=String(A||"utf8").toLowerCase()){case"hex":C=function(xe,ae,ce,Z){ce=Number(ce)||0;var Y=xe.length-ce;(!Z||Y<(Z=Number(Z)))&&(Z=Y),R((Y=ae.length)%2==0,"Invalid hex string"),Y/2<Z&&(Z=Y/2);for(var et=0;et<Z;et++){var cr=parseInt(ae.substr(2*et,2),16);R(!isNaN(cr),"Invalid hex string"),xe[ce+et]=cr}return y._charsWritten=2*et,et}(this,c,f,g);break;case"utf8":case"utf-8":F=this,U=f,J=g,C=y._charsWritten=Mt(De(c),F,U,J);break;case"ascii":case"binary":C=I(this,c,f,g);break;case"base64":F=this,U=f,J=g,C=y._charsWritten=Mt(sr(c),F,U,J);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":C=_(this,c,f,g);break;default:throw new Error("Unknown encoding")}return C},y.prototype.toString=function(c,f,g){var A,C,F,U,J=this;if(c=String(c||"utf8").toLowerCase(),f=Number(f)||0,(g=g!==void 0?Number(g):J.length)===f)return"";switch(c){case"hex":A=function(X,xe,ae){var ce=X.length;(!xe||xe<0)&&(xe=0),(!ae||ae<0||ce<ae)&&(ae=ce);for(var Z="",Y=xe;Y<ae;Y++)Z+=H(X[Y]);return Z}(J,f,g);break;case"utf8":case"utf-8":A=function(X,xe,ae){var ce="",Z="";ae=Math.min(X.length,ae);for(var Y=xe;Y<ae;Y++)X[Y]<=127?(ce+=or(Z)+String.fromCharCode(X[Y]),Z=""):Z+="%"+X[Y].toString(16);return ce+or(Z)}(J,f,g);break;case"ascii":case"binary":A=E(J,f,g);break;case"base64":C=J,U=g,A=(F=f)===0&&U===C.length?v.fromByteArray(C):v.fromByteArray(C.slice(F,U));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":A=function(X,xe,ae){for(var ce=X.slice(xe,ae),Z="",Y=0;Y<ce.length;Y+=2)Z+=String.fromCharCode(ce[Y]+256*ce[Y+1]);return Z}(J,f,g);break;default:throw new Error("Unknown encoding")}return A},y.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},y.prototype.copy=function(c,f,g,A){if(f=f||0,(A=A||A===0?A:this.length)!==(g=g||0)&&c.length!==0&&this.length!==0){R(g<=A,"sourceEnd < sourceStart"),R(0<=f&&f<c.length,"targetStart out of bounds"),R(0<=g&&g<this.length,"sourceStart out of bounds"),R(0<=A&&A<=this.length,"sourceEnd out of bounds"),A>this.length&&(A=this.length);var C=(A=c.length-f<A-g?c.length-f+g:A)-g;if(C<100||!y._useTypedArrays)for(var F=0;F<C;F++)c[F+f]=this[F+g];else c._set(this.subarray(g,g+C),f)}},y.prototype.slice=function(c,f){var g=this.length;if(c=Q(c,g,0),f=Q(f,g,g),y._useTypedArrays)return y._augment(this.subarray(c,f));for(var A=f-c,C=new y(A,void 0,!0),F=0;F<A;F++)C[F]=this[F+c];return C},y.prototype.get=function(c){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(c)},y.prototype.set=function(c,f){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(c,f)},y.prototype.readUInt8=function(c,f){if(f||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return this[c]},y.prototype.readUInt16LE=function(c,f){return D(this,c,!0,f)},y.prototype.readUInt16BE=function(c,f){return D(this,c,!1,f)},y.prototype.readUInt32LE=function(c,f){return k(this,c,!0,f)},y.prototype.readUInt32BE=function(c,f){return k(this,c,!1,f)},y.prototype.readInt8=function(c,f){if(f||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return 128&this[c]?-1*(255-this[c]+1):this[c]},y.prototype.readInt16LE=function(c,f){return b(this,c,!0,f)},y.prototype.readInt16BE=function(c,f){return b(this,c,!1,f)},y.prototype.readInt32LE=function(c,f){return S(this,c,!0,f)},y.prototype.readInt32BE=function(c,f){return S(this,c,!1,f)},y.prototype.readFloatLE=function(c,f){return u(this,c,!0,f)},y.prototype.readFloatBE=function(c,f){return u(this,c,!1,f)},y.prototype.readDoubleLE=function(c,f){return m(this,c,!0,f)},y.prototype.readDoubleBE=function(c,f){return m(this,c,!1,f)},y.prototype.writeUInt8=function(c,f,g){g||(R(c!=null,"missing value"),R(f!=null,"missing offset"),R(f<this.length,"trying to write beyond buffer length"),ti(c,255)),f>=this.length||(this[f]=c)},y.prototype.writeUInt16LE=function(c,f,g){l(this,c,f,!0,g)},y.prototype.writeUInt16BE=function(c,f,g){l(this,c,f,!1,g)},y.prototype.writeUInt32LE=function(c,f,g){w(this,c,f,!0,g)},y.prototype.writeUInt32BE=function(c,f,g){w(this,c,f,!1,g)},y.prototype.writeInt8=function(c,f,g){g||(R(c!=null,"missing value"),R(f!=null,"missing offset"),R(f<this.length,"Trying to write beyond buffer length"),ni(c,127,-128)),f>=this.length||(0<=c?this.writeUInt8(c,f,g):this.writeUInt8(255+c+1,f,g))},y.prototype.writeInt16LE=function(c,f,g){x(this,c,f,!0,g)},y.prototype.writeInt16BE=function(c,f,g){x(this,c,f,!1,g)},y.prototype.writeInt32LE=function(c,f,g){j(this,c,f,!0,g)},y.prototype.writeInt32BE=function(c,f,g){j(this,c,f,!1,g)},y.prototype.writeFloatLE=function(c,f,g){B(this,c,f,!0,g)},y.prototype.writeFloatBE=function(c,f,g){B(this,c,f,!1,g)},y.prototype.writeDoubleLE=function(c,f,g){M(this,c,f,!0,g)},y.prototype.writeDoubleBE=function(c,f,g){M(this,c,f,!1,g)},y.prototype.fill=function(c,f,g){if(f=f||0,g=g||this.length,R(typeof(c=typeof(c=c||0)=="string"?c.charCodeAt(0):c)=="number"&&!isNaN(c),"value is not a number"),R(f<=g,"end < start"),g!==f&&this.length!==0){R(0<=f&&f<this.length,"start out of bounds"),R(0<=g&&g<=this.length,"end out of bounds");for(var A=f;A<g;A++)this[A]=c}},y.prototype.inspect=function(){for(var c=[],f=this.length,g=0;g<f;g++)if(c[g]=H(this[g]),g===e.INSPECT_MAX_BYTES){c[g+1]="...";break}return"<Buffer "+c.join(" ")+">"},y.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw new Error("Buffer.toArrayBuffer not supported in this browser");if(y._useTypedArrays)return new y(this).buffer;for(var c=new Uint8Array(this.length),f=0,g=c.length;f<g;f+=1)c[f]=this[f];return c.buffer};var T=y.prototype;function Q(c,f,g){return typeof c!="number"?g:f<=(c=~~c)?f:0<=c||0<=(c+=f)?c:0}function ie(c){return(c=~~Math.ceil(+c))<0?0:c}function W(c){return(Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"})(c)}function H(c){return c<16?"0"+c.toString(16):c.toString(16)}function De(c){for(var f=[],g=0;g<c.length;g++){var A=c.charCodeAt(g);if(A<=127)f.push(c.charCodeAt(g));else for(var C=g,F=(55296<=A&&A<=57343&&g++,encodeURIComponent(c.slice(C,g+1)).substr(1).split("%")),U=0;U<F.length;U++)f.push(parseInt(F[U],16))}return f}function sr(c){return v.toByteArray(c)}function Mt(c,f,g,A){for(var C=0;C<A&&!(C+g>=f.length||C>=c.length);C++)f[C+g]=c[C];return C}function or(c){try{return decodeURIComponent(c)}catch{return String.fromCharCode(65533)}}function ti(c,f){R(typeof c=="number","cannot write a non-number as a number"),R(0<=c,"specified a negative value for writing an unsigned value"),R(c<=f,"value is larger than maximum value for type"),R(Math.floor(c)===c,"value has a fractional component")}function ni(c,f,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=f,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value"),R(Math.floor(c)===c,"value has a fractional component")}function ar(c,f,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=f,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value")}function R(c,f){if(!c)throw new Error(f||"Failed assertion")}y._augment=function(c){return c._isBuffer=!0,c._get=c.get,c._set=c.set,c.get=T.get,c.set=T.set,c.write=T.write,c.toString=T.toString,c.toLocaleString=T.toString,c.toJSON=T.toJSON,c.copy=T.copy,c.slice=T.slice,c.readUInt8=T.readUInt8,c.readUInt16LE=T.readUInt16LE,c.readUInt16BE=T.readUInt16BE,c.readUInt32LE=T.readUInt32LE,c.readUInt32BE=T.readUInt32BE,c.readInt8=T.readInt8,c.readInt16LE=T.readInt16LE,c.readInt16BE=T.readInt16BE,c.readInt32LE=T.readInt32LE,c.readInt32BE=T.readInt32BE,c.readFloatLE=T.readFloatLE,c.readFloatBE=T.readFloatBE,c.readDoubleLE=T.readDoubleLE,c.readDoubleBE=T.readDoubleBE,c.writeUInt8=T.writeUInt8,c.writeUInt16LE=T.writeUInt16LE,c.writeUInt16BE=T.writeUInt16BE,c.writeUInt32LE=T.writeUInt32LE,c.writeUInt32BE=T.writeUInt32BE,c.writeInt8=T.writeInt8,c.writeInt16LE=T.writeInt16LE,c.writeInt16BE=T.writeInt16BE,c.writeInt32LE=T.writeInt32LE,c.writeInt32BE=T.writeInt32BE,c.writeFloatLE=T.writeFloatLE,c.writeFloatBE=T.writeFloatBE,c.writeDoubleLE=T.writeDoubleLE,c.writeDoubleBE=T.writeDoubleBE,c.fill=T.fill,c.inspect=T.inspect,c.toArrayBuffer=T.toArrayBuffer,c}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(i,n,e){(function(t,r,v,o,a,d,h,p,O){var v=i("buffer").Buffer,P=4,y=new v(P);y.fill(0),n.exports={hash:function(I,_,E,D){for(var k=_(function(l,w){l.length%P!=0&&(x=l.length+(P-l.length%P),l=v.concat([l,y],x));for(var x,j=[],B=w?l.readInt32BE:l.readInt32LE,M=0;M<l.length;M+=P)j.push(B.call(l,M));return j}(I=v.isBuffer(I)?I:new v(I),D),8*I.length),_=D,b=new v(E),S=_?b.writeInt32BE:b.writeInt32LE,u=0;u<k.length;u++)S.call(b,k[u],4*u,!0);return b}}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(i,n,e){(function(t,r,v,o,a,d,h,p,O){var v=i("buffer").Buffer,P=i("./sha"),y=i("./sha256"),I=i("./rng"),_={sha1:P,sha256:y,md5:i("./md5")},E=64,D=new v(E);function k(l,w){var x=_[l=l||"sha1"],j=[];return x||b("algorithm:",l,"is not yet supported"),{update:function(B){return v.isBuffer(B)||(B=new v(B)),j.push(B),B.length,this},digest:function(B){var M=v.concat(j),M=w?function(T,Q,ie){v.isBuffer(Q)||(Q=new v(Q)),v.isBuffer(ie)||(ie=new v(ie)),Q.length>E?Q=T(Q):Q.length<E&&(Q=v.concat([Q,D],E));for(var W=new v(E),H=new v(E),De=0;De<E;De++)W[De]=54^Q[De],H[De]=92^Q[De];return ie=T(v.concat([W,ie])),T(v.concat([H,ie]))}(x,w,M):x(M);return j=null,B?M.toString(B):M}}}function b(){var l=[].slice.call(arguments).join(" ");throw new Error([l,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
6
- `))}D.fill(0),e.createHash=function(l){return k(l)},e.createHmac=k,e.randomBytes=function(l,w){if(!w||!w.call)return new v(I(l));try{w.call(this,void 0,new v(I(l)))}catch(x){w(x)}};var S,u=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],m=function(l){e[l]=function(){b("sorry,",l,"is not implemented yet")}};for(S in u)m(u[S],S)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){var v=i("./helpers");function P(b,S){b[S>>5]|=128<<S%32,b[14+(S+64>>>9<<4)]=S;for(var u=1732584193,m=-271733879,l=-1732584194,w=271733878,x=0;x<b.length;x+=16){var j=u,B=m,M=l,T=w,u=I(u,m,l,w,b[x+0],7,-680876936),w=I(w,u,m,l,b[x+1],12,-389564586),l=I(l,w,u,m,b[x+2],17,606105819),m=I(m,l,w,u,b[x+3],22,-1044525330);u=I(u,m,l,w,b[x+4],7,-176418897),w=I(w,u,m,l,b[x+5],12,1200080426),l=I(l,w,u,m,b[x+6],17,-1473231341),m=I(m,l,w,u,b[x+7],22,-45705983),u=I(u,m,l,w,b[x+8],7,1770035416),w=I(w,u,m,l,b[x+9],12,-1958414417),l=I(l,w,u,m,b[x+10],17,-42063),m=I(m,l,w,u,b[x+11],22,-1990404162),u=I(u,m,l,w,b[x+12],7,1804603682),w=I(w,u,m,l,b[x+13],12,-40341101),l=I(l,w,u,m,b[x+14],17,-1502002290),u=_(u,m=I(m,l,w,u,b[x+15],22,1236535329),l,w,b[x+1],5,-165796510),w=_(w,u,m,l,b[x+6],9,-1069501632),l=_(l,w,u,m,b[x+11],14,643717713),m=_(m,l,w,u,b[x+0],20,-373897302),u=_(u,m,l,w,b[x+5],5,-701558691),w=_(w,u,m,l,b[x+10],9,38016083),l=_(l,w,u,m,b[x+15],14,-660478335),m=_(m,l,w,u,b[x+4],20,-405537848),u=_(u,m,l,w,b[x+9],5,568446438),w=_(w,u,m,l,b[x+14],9,-1019803690),l=_(l,w,u,m,b[x+3],14,-187363961),m=_(m,l,w,u,b[x+8],20,1163531501),u=_(u,m,l,w,b[x+13],5,-1444681467),w=_(w,u,m,l,b[x+2],9,-51403784),l=_(l,w,u,m,b[x+7],14,1735328473),u=E(u,m=_(m,l,w,u,b[x+12],20,-1926607734),l,w,b[x+5],4,-378558),w=E(w,u,m,l,b[x+8],11,-2022574463),l=E(l,w,u,m,b[x+11],16,1839030562),m=E(m,l,w,u,b[x+14],23,-35309556),u=E(u,m,l,w,b[x+1],4,-1530992060),w=E(w,u,m,l,b[x+4],11,1272893353),l=E(l,w,u,m,b[x+7],16,-155497632),m=E(m,l,w,u,b[x+10],23,-1094730640),u=E(u,m,l,w,b[x+13],4,681279174),w=E(w,u,m,l,b[x+0],11,-358537222),l=E(l,w,u,m,b[x+3],16,-722521979),m=E(m,l,w,u,b[x+6],23,76029189),u=E(u,m,l,w,b[x+9],4,-640364487),w=E(w,u,m,l,b[x+12],11,-421815835),l=E(l,w,u,m,b[x+15],16,530742520),u=D(u,m=E(m,l,w,u,b[x+2],23,-995338651),l,w,b[x+0],6,-198630844),w=D(w,u,m,l,b[x+7],10,1126891415),l=D(l,w,u,m,b[x+14],15,-1416354905),m=D(m,l,w,u,b[x+5],21,-57434055),u=D(u,m,l,w,b[x+12],6,1700485571),w=D(w,u,m,l,b[x+3],10,-1894986606),l=D(l,w,u,m,b[x+10],15,-1051523),m=D(m,l,w,u,b[x+1],21,-2054922799),u=D(u,m,l,w,b[x+8],6,1873313359),w=D(w,u,m,l,b[x+15],10,-30611744),l=D(l,w,u,m,b[x+6],15,-1560198380),m=D(m,l,w,u,b[x+13],21,1309151649),u=D(u,m,l,w,b[x+4],6,-145523070),w=D(w,u,m,l,b[x+11],10,-1120210379),l=D(l,w,u,m,b[x+2],15,718787259),m=D(m,l,w,u,b[x+9],21,-343485551),u=k(u,j),m=k(m,B),l=k(l,M),w=k(w,T)}return Array(u,m,l,w)}function y(b,S,u,m,l,w){return k((S=k(k(S,b),k(m,w)))<<l|S>>>32-l,u)}function I(b,S,u,m,l,w,x){return y(S&u|~S&m,b,S,l,w,x)}function _(b,S,u,m,l,w,x){return y(S&m|u&~m,b,S,l,w,x)}function E(b,S,u,m,l,w,x){return y(S^u^m,b,S,l,w,x)}function D(b,S,u,m,l,w,x){return y(u^(S|~m),b,S,l,w,x)}function k(b,S){var u=(65535&b)+(65535&S);return(b>>16)+(S>>16)+(u>>16)<<16|65535&u}n.exports=function(b){return v.hash(b,P,16)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){var v;n.exports=v||function(P){for(var y,I=new Array(P),_=0;_<P;_++)!(3&_)&&(y=4294967296*Math.random()),I[_]=y>>>((3&_)<<3)&255;return I}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){var v=i("./helpers");function P(_,E){_[E>>5]|=128<<24-E%32,_[15+(E+64>>9<<4)]=E;for(var D,k,b,S=Array(80),u=1732584193,m=-271733879,l=-1732584194,w=271733878,x=-1009589776,j=0;j<_.length;j+=16){for(var B=u,M=m,T=l,Q=w,ie=x,W=0;W<80;W++){S[W]=W<16?_[j+W]:I(S[W-3]^S[W-8]^S[W-14]^S[W-16],1);var H=y(y(I(u,5),(H=m,k=l,b=w,(D=W)<20?H&k|~H&b:!(D<40)&&D<60?H&k|H&b|k&b:H^k^b)),y(y(x,S[W]),(D=W)<20?1518500249:D<40?1859775393:D<60?-1894007588:-899497514)),x=w,w=l,l=I(m,30),m=u,u=H}u=y(u,B),m=y(m,M),l=y(l,T),w=y(w,Q),x=y(x,ie)}return Array(u,m,l,w,x)}function y(_,E){var D=(65535&_)+(65535&E);return(_>>16)+(E>>16)+(D>>16)<<16|65535&D}function I(_,E){return _<<E|_>>>32-E}n.exports=function(_){return v.hash(_,P,20,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){function v(E,D){var k=(65535&E)+(65535&D);return(E>>16)+(D>>16)+(k>>16)<<16|65535&k}function P(E,D){var k,b=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),S=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),u=new Array(64);E[D>>5]|=128<<24-D%32,E[15+(D+64>>9<<4)]=D;for(var m,l,w=0;w<E.length;w+=16){for(var x=S[0],j=S[1],B=S[2],M=S[3],T=S[4],Q=S[5],ie=S[6],W=S[7],H=0;H<64;H++)u[H]=H<16?E[H+w]:v(v(v((l=u[H-2],I(l,17)^I(l,19)^_(l,10)),u[H-7]),(l=u[H-15],I(l,7)^I(l,18)^_(l,3))),u[H-16]),k=v(v(v(v(W,I(l=T,6)^I(l,11)^I(l,25)),T&Q^~T&ie),b[H]),u[H]),m=v(I(m=x,2)^I(m,13)^I(m,22),x&j^x&B^j&B),W=ie,ie=Q,Q=T,T=v(M,k),M=B,B=j,j=x,x=v(k,m);S[0]=v(x,S[0]),S[1]=v(j,S[1]),S[2]=v(B,S[2]),S[3]=v(M,S[3]),S[4]=v(T,S[4]),S[5]=v(Q,S[5]),S[6]=v(ie,S[6]),S[7]=v(W,S[7])}return S}var y=i("./helpers"),I=function(E,D){return E>>>D|E<<32-D},_=function(E,D){return E>>>D};n.exports=function(E){return y.hash(E,P,32,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){e.read=function(v,P,y,I,w){var E,D,k=8*w-I-1,b=(1<<k)-1,S=b>>1,u=-7,m=y?w-1:0,l=y?-1:1,w=v[P+m];for(m+=l,E=w&(1<<-u)-1,w>>=-u,u+=k;0<u;E=256*E+v[P+m],m+=l,u-=8);for(D=E&(1<<-u)-1,E>>=-u,u+=I;0<u;D=256*D+v[P+m],m+=l,u-=8);if(E===0)E=1-S;else{if(E===b)return D?NaN:1/0*(w?-1:1);D+=Math.pow(2,I),E-=S}return(w?-1:1)*D*Math.pow(2,E-I)},e.write=function(v,P,y,I,_,x){var D,k,b=8*x-_-1,S=(1<<b)-1,u=S>>1,m=_===23?Math.pow(2,-24)-Math.pow(2,-77):0,l=I?0:x-1,w=I?1:-1,x=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(k=isNaN(P)?1:0,D=S):(D=Math.floor(Math.log(P)/Math.LN2),P*(I=Math.pow(2,-D))<1&&(D--,I*=2),2<=(P+=1<=D+u?m/I:m*Math.pow(2,1-u))*I&&(D++,I/=2),S<=D+u?(k=0,D=S):1<=D+u?(k=(P*I-1)*Math.pow(2,_),D+=u):(k=P*Math.pow(2,u-1)*Math.pow(2,_),D=0));8<=_;v[y+l]=255&k,l+=w,k/=256,_-=8);for(D=D<<_|k,b+=_;0<b;v[y+l]=255&D,l+=w,D/=256,b-=8);v[y+l-w]|=128*x}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(i,n,e){(function(t,r,s,o,a,d,h,p,O){var v,P,y;function I(){}(t=n.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,y=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(_){return window.setImmediate(_)}:y?(v=[],window.addEventListener("message",function(_){var E=_.source;E!==window&&E!==null||_.data!=="process-tick"||(_.stopPropagation(),0<v.length&&v.shift()())},!0),function(_){v.push(_),window.postMessage("process-tick","*")}):function(_){setTimeout(_,0)}),t.title="browser",t.browser=!0,t.env={},t.argv=[],t.on=I,t.addListener=I,t.once=I,t.off=I,t.removeListener=I,t.removeAllListeners=I,t.emit=I,t.binding=function(_){throw new Error("process.binding is not supported")},t.cwd=function(){return"/"},t.chdir=function(_){throw new Error("process.chdir is not supported")}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})});var mi=le((Sl,Kr)=>{Kr.exports=function(n,e){var t="000000000"+n;return t.substr(t.length-e)}});var Hr=le((Ol,qr)=>{var Qo=mi(),Wo=typeof window=="object"?window:self,Jo=Object.keys(Wo).length,Go=navigator.mimeTypes?navigator.mimeTypes.length:0,Yo=Qo((Go+navigator.userAgent.length).toString(36)+Jo.toString(36),4);qr.exports=function(){return Yo}});var Gr=le((Il,Jr)=>{var gi,Qr=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;Qr?(Wr=Math.pow(2,32)-1,gi=function(){return Math.abs(Qr.getRandomValues(new Uint32Array(1))[0]/Wr)}):gi=Math.random;var Wr;Jr.exports=gi});var Qe=le((El,es)=>{var Xt=Hr(),Yr=mi(),Xo=Gr(),Dt=0,bi=4,Zt=36,Xr=Math.pow(Zt,bi);function yi(){return Yr((Xo()*Xr<<0).toString(Zt),bi)}function Zr(){return Dt=Dt<Xr?Dt:0,Dt++,Dt-1}function Ct(){var i="c",n=new Date().getTime().toString(Zt),e=Yr(Zr().toString(Zt),bi),t=Xt(),r=yi()+yi();return i+n+e+t+r}Ct.slug=function(){var n=new Date().getTime().toString(36),e=Zr().toString(36).slice(-4),t=Xt().slice(0,1)+Xt().slice(-1),r=yi().slice(-2);return n.slice(-2)+e+t+r};Ct.isCuid=function(n){return typeof n!="string"?!1:!!n.startsWith("c")};Ct.isSlug=function(n){if(typeof n!="string")return!1;var e=n.length;return e>=7&&e<=10};Ct.fingerprint=Xt;es.exports=Ct});var Ge={};lr(Ge,{__addDisposableResource:()=>Ts,__assign:()=>fn,__asyncDelegator:()=>Es,__asyncGenerator:()=>Is,__asyncValues:()=>_s,__await:()=>ct,__awaiter:()=>bs,__classPrivateFieldGet:()=>As,__classPrivateFieldIn:()=>Fs,__classPrivateFieldSet:()=>Rs,__createBinding:()=>pn,__decorate:()=>ms,__disposeResources:()=>ks,__esDecorate:()=>va,__exportStar:()=>ws,__extends:()=>hs,__generator:()=>vs,__importDefault:()=>Ps,__importStar:()=>Cs,__makeTemplateObject:()=>Ds,__metadata:()=>ys,__param:()=>gs,__propKey:()=>xa,__read:()=>Di,__rest:()=>ps,__runInitializers:()=>wa,__setFunctionName:()=>Sa,__spread:()=>xs,__spreadArray:()=>Os,__spreadArrays:()=>Ss,__values:()=>hn,default:()=>Ea});function hs(i,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");_i(i,n);function e(){this.constructor=i}i.prototype=n===null?Object.create(n):(e.prototype=n.prototype,new e)}function ps(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e}function ms(i,n,e,t){var r=arguments.length,s=r<3?n:t===null?t=Object.getOwnPropertyDescriptor(n,e):t,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(i,n,e,t);else for(var a=i.length-1;a>=0;a--)(o=i[a])&&(s=(r<3?o(s):r>3?o(n,e,s):o(n,e))||s);return r>3&&s&&Object.defineProperty(n,e,s),s}function gs(i,n){return function(e,t){n(e,t,i)}}function va(i,n,e,t,r,s){function o(E){if(E!==void 0&&typeof E!="function")throw new TypeError("Function expected");return E}for(var a=t.kind,d=a==="getter"?"get":a==="setter"?"set":"value",h=!n&&i?t.static?i:i.prototype:null,p=n||(h?Object.getOwnPropertyDescriptor(h,t.name):{}),O,v=!1,P=e.length-1;P>=0;P--){var y={};for(var I in t)y[I]=I==="access"?{}:t[I];for(var I in t.access)y.access[I]=t.access[I];y.addInitializer=function(E){if(v)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(E||null))};var _=(0,e[P])(a==="accessor"?{get:p.get,set:p.set}:p[d],y);if(a==="accessor"){if(_===void 0)continue;if(_===null||typeof _!="object")throw new TypeError("Object expected");(O=o(_.get))&&(p.get=O),(O=o(_.set))&&(p.set=O),(O=o(_.init))&&r.unshift(O)}else(O=o(_))&&(a==="field"?r.unshift(O):p[d]=O)}h&&Object.defineProperty(h,t.name,p),v=!0}function wa(i,n,e){for(var t=arguments.length>2,r=0;r<n.length;r++)e=t?n[r].call(i,e):n[r].call(i);return t?e:void 0}function xa(i){return typeof i=="symbol"?i:"".concat(i)}function Sa(i,n,e){return typeof n=="symbol"&&(n=n.description?"[".concat(n.description,"]"):""),Object.defineProperty(i,"name",{configurable:!0,value:e?"".concat(e," ",n):n})}function ys(i,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,n)}function bs(i,n,e,t){function r(s){return s instanceof e?s:new e(function(o){o(s)})}return new(e||(e=Promise))(function(s,o){function a(p){try{h(t.next(p))}catch(O){o(O)}}function d(p){try{h(t.throw(p))}catch(O){o(O)}}function h(p){p.done?s(p.value):r(p.value).then(a,d)}h((t=t.apply(i,n||[])).next())})}function vs(i,n){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},t,r,s,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(h){return function(p){return d([h,p])}}function d(h){if(t)throw new TypeError("Generator is already executing.");for(;o&&(o=0,h[0]&&(e=0)),e;)try{if(t=1,r&&(s=h[0]&2?r.return:h[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,h[1])).done)return s;switch(r=0,s&&(h=[h[0]&2,s.value]),h[0]){case 0:case 1:s=h;break;case 4:return e.label++,{value:h[1],done:!1};case 5:e.label++,r=h[1],h=[0];continue;case 7:h=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(h[0]===6||h[0]===2)){e=0;continue}if(h[0]===3&&(!s||h[1]>s[0]&&h[1]<s[3])){e.label=h[1];break}if(h[0]===6&&e.label<s[1]){e.label=s[1],s=h;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(h);break}s[2]&&e.ops.pop(),e.trys.pop();continue}h=n.call(i,e)}catch(p){h=[6,p],r=0}finally{t=s=0}if(h[0]&5)throw h[1];return{value:h[0]?h[1]:void 0,done:!0}}}function ws(i,n){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(n,e)&&pn(n,i,e)}function hn(i){var n=typeof Symbol=="function"&&Symbol.iterator,e=n&&i[n],t=0;if(e)return e.call(i);if(i&&typeof i.length=="number")return{next:function(){return i&&t>=i.length&&(i=void 0),{value:i&&i[t++],done:!i}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function Di(i,n){var e=typeof Symbol=="function"&&i[Symbol.iterator];if(!e)return i;var t=e.call(i),r,s=[],o;try{for(;(n===void 0||n-- >0)&&!(r=t.next()).done;)s.push(r.value)}catch(a){o={error:a}}finally{try{r&&!r.done&&(e=t.return)&&e.call(t)}finally{if(o)throw o.error}}return s}function xs(){for(var i=[],n=0;n<arguments.length;n++)i=i.concat(Di(arguments[n]));return i}function Ss(){for(var i=0,n=0,e=arguments.length;n<e;n++)i+=arguments[n].length;for(var t=Array(i),r=0,n=0;n<e;n++)for(var s=arguments[n],o=0,a=s.length;o<a;o++,r++)t[r]=s[o];return t}function Os(i,n,e){if(e||arguments.length===2)for(var t=0,r=n.length,s;t<r;t++)(s||!(t in n))&&(s||(s=Array.prototype.slice.call(n,0,t)),s[t]=n[t]);return i.concat(s||Array.prototype.slice.call(n))}function ct(i){return this instanceof ct?(this.v=i,this):new ct(i)}function Is(i,n,e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e.apply(i,n||[]),r,s=[];return r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r;function o(v){t[v]&&(r[v]=function(P){return new Promise(function(y,I){s.push([v,P,y,I])>1||a(v,P)})})}function a(v,P){try{d(t[v](P))}catch(y){O(s[0][3],y)}}function d(v){v.value instanceof ct?Promise.resolve(v.value.v).then(h,p):O(s[0][2],v)}function h(v){a("next",v)}function p(v){a("throw",v)}function O(v,P){v(P),s.shift(),s.length&&a(s[0][0],s[0][1])}}function Es(i){var n,e;return n={},t("next"),t("throw",function(r){throw r}),t("return"),n[Symbol.iterator]=function(){return this},n;function t(r,s){n[r]=i[r]?function(o){return(e=!e)?{value:ct(i[r](o)),done:!1}:s?s(o):o}:s}}function _s(i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=i[Symbol.asyncIterator],e;return n?n.call(i):(i=typeof hn=="function"?hn(i):i[Symbol.iterator](),e={},t("next"),t("throw"),t("return"),e[Symbol.asyncIterator]=function(){return this},e);function t(s){e[s]=i[s]&&function(o){return new Promise(function(a,d){o=i[s](o),r(a,d,o.done,o.value)})}}function r(s,o,a,d){Promise.resolve(d).then(function(h){s({value:h,done:a})},o)}}function Ds(i,n){return Object.defineProperty?Object.defineProperty(i,"raw",{value:n}):i.raw=n,i}function Cs(i){if(i&&i.__esModule)return i;var n={};if(i!=null)for(var e in i)e!=="default"&&Object.prototype.hasOwnProperty.call(i,e)&&pn(n,i,e);return Oa(n,i),n}function Ps(i){return i&&i.__esModule?i:{default:i}}function As(i,n,e,t){if(e==="a"&&!t)throw new TypeError("Private accessor was defined without a getter");if(typeof n=="function"?i!==n||!t:!n.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e==="m"?t:e==="a"?t.call(i):t?t.value:n.get(i)}function Rs(i,n,e,t,r){if(t==="m")throw new TypeError("Private method is not writable");if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a setter");if(typeof n=="function"?i!==n||!r:!n.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t==="a"?r.call(i,e):r?r.value=e:n.set(i,e),e}function Fs(i,n){if(n===null||typeof n!="object"&&typeof n!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof i=="function"?n===i:i.has(n)}function Ts(i,n,e){if(n!=null){if(typeof n!="object"&&typeof n!="function")throw new TypeError("Object expected.");var t;if(e){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");t=n[Symbol.asyncDispose]}if(t===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");t=n[Symbol.dispose]}if(typeof t!="function")throw new TypeError("Object not disposable.");i.stack.push({value:n,dispose:t,async:e})}else e&&i.stack.push({async:!0});return n}function ks(i){function n(t){i.error=i.hasError?new Ia(t,i.error,"An error was suppressed during disposal."):t,i.hasError=!0}function e(){for(;i.stack.length;){var t=i.stack.pop();try{var r=t.dispose&&t.dispose.call(t.value);if(t.async)return Promise.resolve(r).then(e,function(s){return n(s),e()})}catch(s){n(s)}}if(i.hasError)throw i.error}return e()}var _i,fn,pn,Oa,Ia,Ea,Ye=wo(()=>{_i=function(i,n){return _i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},_i(i,n)};fn=function(){return fn=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(n[s]=e[s])}return n},fn.apply(this,arguments)};pn=Object.create?function(i,n,e,t){t===void 0&&(t=e);var r=Object.getOwnPropertyDescriptor(n,e);(!r||("get"in r?!n.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return n[e]}}),Object.defineProperty(i,t,r)}:function(i,n,e,t){t===void 0&&(t=e),i[t]=n[e]};Oa=Object.create?function(i,n){Object.defineProperty(i,"default",{enumerable:!0,value:n})}:function(i,n){i.default=n};Ia=typeof SuppressedError=="function"?SuppressedError:function(i,n,e){var t=new Error(e);return t.name="SuppressedError",t.error=i,t.suppressed=n,t};Ea={__extends:hs,__assign:fn,__rest:ps,__decorate:ms,__param:gs,__metadata:ys,__awaiter:bs,__generator:vs,__createBinding:pn,__exportStar:ws,__values:hn,__read:Di,__spread:xs,__spreadArrays:Ss,__spreadArray:Os,__await:ct,__asyncGenerator:Is,__asyncDelegator:Es,__asyncValues:_s,__makeTemplateObject:Ds,__importStar:Cs,__importDefault:Ps,__classPrivateFieldGet:As,__classPrivateFieldSet:Rs,__classPrivateFieldIn:Fs,__addDisposableResource:Ts,__disposeResources:ks}});var Ls=le(Bs=>{"use strict";Object.defineProperty(Bs,"__esModule",{value:!0})});var Pi=le(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.invokeEventHandlersAsync=_e.invokeEventHandlers=_e.eventHandlerSafeInvokeAsync=_e.eventHandlerSafeInvoke=void 0;var js=(Ye(),tt(Ge));function Ms(i,n,e){try{return i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}}_e.eventHandlerSafeInvoke=Ms;function Ci(i,n,e){return(0,js.__awaiter)(this,void 0,void 0,function*(){try{return yield i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}})}_e.eventHandlerSafeInvokeAsync=Ci;function _a(i,n,e,t){for(let r of i){let{succeeded:s,error:o}=Ms(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}}_e.invokeEventHandlers=_a;function Da(i,n,e,t){return(0,js.__awaiter)(this,void 0,void 0,function*(){if(t?.parallelize===!1)for(let r of i){let{succeeded:s,error:o}=yield Ci(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}else{let r=[];for(let s of i)r.push(Ci(s,n,e).then(({succeeded:o,error:a})=>{if(!o&&t?.swallowExceptions!==!0)throw a}));yield Promise.all(r)}})}_e.invokeEventHandlersAsync=Da});var Ns=le(mn=>{"use strict";Object.defineProperty(mn,"__esModule",{value:!0});mn.TypedEvent=void 0;var Ca=(Ye(),tt(Ge)),Vs=Pi(),Us={swallowExceptions:!1,parallelize:!0},Ai=class{constructor(){this._handlers=[]}attach(n){this._handlers.push(n)}detach(n){this.tryRemoveHandler(n)}invoke(n,e,t=Us){(0,Vs.invokeEventHandlers)(this._handlers,n,e,t)}invokeAsync(n,e,t=Us){return(0,Ca.__awaiter)(this,void 0,void 0,function*(){yield(0,Vs.invokeEventHandlersAsync)(this._handlers,n,e,t)})}tryRemoveHandler(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}};mn.TypedEvent=Ai});var Fi=le(Ri=>{"use strict";Object.defineProperty(Ri,"__esModule",{value:!0});var Pa=(Ye(),tt(Ge));(0,Pa.__exportStar)(Ns(),Ri)});var zs=le(gn=>{"use strict";Object.defineProperty(gn,"__esModule",{value:!0});gn.FinalizationRegistryMissingError=void 0;var Ti=class extends Error{};gn.FinalizationRegistryMissingError=Ti});var Bi=le(yn=>{"use strict";Object.defineProperty(yn,"__esModule",{value:!0});yn.WeakHandlerHolder=void 0;var Aa=zs(),ki=class{constructor(n){this._refs=[];try{this._finalizationRegistry=new FinalizationRegistry(n)}catch(e){throw e.name==="FinalizationRegistry"?new Aa.FinalizationRegistryMissingError("FinalizationRegistry is not defined. Weak Events cannot be used. Please consult 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry' for compatibility information"):e}}getWeakHandler(n,e){let t=new WeakRef(e);return this._finalizationRegistry.register(e,{eventSource:n,handlerRef:t},t),this._refs.push(t),t}releaseWeakHandler(n){let t=this._refs.find(r=>r?.deref()===n)||new WeakRef(n);return this._finalizationRegistry.unregister(t),t}unregisterRef(n){this._finalizationRegistry.unregister(n)}};yn.WeakHandlerHolder=ki});var $s=le(bn=>{"use strict";Object.defineProperty(bn,"__esModule",{value:!0});bn.WeakEvent=void 0;var Li=(Ye(),tt(Ge)),Ra=Fi(),Fa=Bi(),ji=Pi(),Ta={swallowExceptions:!1,parallelize:!0},Mi=class{constructor(){this._handlers=[],this._handlerFinalizedEvent=new Ra.TypedEvent,this.handlerFinalizedEvent=this._handlerFinalizedEvent,this._refHolder=new Fa.WeakHandlerHolder(n=>{this.onHandlerFinalizer(n)})}invoke(n,e,t){for(let r of this._handlers){let s=r?.deref();if(s){let{succeeded:o,error:a}=(0,ji.eventHandlerSafeInvoke)(s,n,e);if(!o&&t?.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}}invokeAsync(n,e,t=Ta){return(0,Li.__awaiter)(this,void 0,void 0,function*(){t?.parallelize===!1?yield this.sequentialInvokeAsync(n,e,t):yield this.parallelInvokeAsync(n,e,t)})}sequentialInvokeAsync(n,e,t){return(0,Li.__awaiter)(this,void 0,void 0,function*(){for(let r of this._handlers){let s=r?.deref();if(s){let{succeeded:o,error:a}=yield(0,ji.eventHandlerSafeInvokeAsync)(s,n,e);if(!o&&t.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}})}parallelInvokeAsync(n,e,t){return(0,Li.__awaiter)(this,void 0,void 0,function*(){let r=[];for(let s of this._handlers){let o=s?.deref();o?r.push((0,ji.eventHandlerSafeInvokeAsync)(o,n,e).then(({succeeded:a,error:d})=>{if(!a&&t.swallowExceptions!==!0)throw d})):this.releaseHandler(s)}yield Promise.all(r)})}attach(n){this._handlers.push(this._refHolder.getWeakHandler(this,n))}detach(n){let e=this._refHolder.releaseWeakHandler(n);this.tryRemoveHandlerRef(e)}onHandlerFinalizer(n){this.tryRemoveHandlerRef(n?.handlerRef),this._handlerFinalizedEvent.invokeAsync(this,n,{swallowExceptions:!0})}tryRemoveHandlerRef(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}releaseHandler(n){this._refHolder.unregisterRef(n),this.tryRemoveHandlerRef(n)}};bn.WeakEvent=Mi});var qs=le(vn=>{"use strict";Object.defineProperty(vn,"__esModule",{value:!0});var Ks=(Ye(),tt(Ge));(0,Ks.__exportStar)(Bi(),vn);(0,Ks.__exportStar)($s(),vn)});var Hs=le(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});var Vi=(Ye(),tt(Ge));(0,Vi.__exportStar)(Ls(),Tt);(0,Vi.__exportStar)(Fi(),Tt);(0,Vi.__exportStar)(qs(),Tt)});var rr={};lr(rr,{Client:()=>mt,ClientDescriptor:()=>ei,Entity:()=>pe,EntityFile:()=>be,IdbPersistence:()=>gt,ServerSync:()=>pt,Storage:()=>mt,StorageDescriptor:()=>ei,UndoHistory:()=>yt,authorization:()=>mc,cliSync:()=>gc,createMigration:()=>hi,getEntityClient:()=>Js,id:()=>yc,schema:()=>Pt});function xo(i){return typeof Buffer<"u"?Buffer.from(i).toString("base64"):btoa(i)}function So(i){return typeof Buffer<"u"?Buffer.from(i,"base64").toString():atob(i)}var $e={onlyUser:i=>xo(`u:${i}:*`),onlyMe:()=>$e.onlyUser(ii),decode:i=>{let e=So(i).split(":");if(e.length!==3)throw new Error("Invalid authz string");return{scope:e[0],subject:e[1],action:e[2]}}},ii="$$_originator_$$";function ur(i,n){let{operations:e,baselines:t}=i;if(e)for(let r of e)r.authz&&$e.decode(r.authz).subject===ii&&(r.authz=$e.onlyUser(n));if(t)for(let r of t)r.authz&&$e.decode(r.authz).subject===ii&&(r.authz=$e.onlyUser(n))}var nt=class{constructor(n){this.flusher=n,this.batches=new Map,this.flush=e=>{let t=this.batches.get(e);if(t)return t.flush()},this.discard=e=>{let t=this.batches.get(e);t&&(t.discard(),this.batches.delete(e))},this.flushAll=()=>[...this.batches.values()].map(e=>e.flush()),this.getSize=e=>{let t=this.batches.get(e);return t?t.items.length:0}}add({key:n,userData:e,items:t,max:r,timeout:s}){let o=this.batches.get(n);return o||(o=new ri({max:r||null,startedAt:Date.now(),userData:e,timeout:s||null,flusher:this.flusher,key:n}),this.batches.set(n,o)),o.update({items:t,max:r,timeout:s,userData:e}),o}},ri=class{constructor({max:n,startedAt:e,timeout:t,userData:r,flusher:s,key:o}){this.items=[],this.update=({items:a,max:d,timeout:h,userData:p})=>{this.items.push(...a),d!==void 0&&(this.max=d),h!==void 0&&(this.timeout=h),p&&(this.userData=p);let O=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():O&&this.timeout!==null&&(this.flushTimeout=setTimeout(this.flush,this.timeout))},this.flush=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0;let a=this.items;return this.items=[],this.flusher(a,this.key,this.userData)},this.discard=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0,this.items=[]},this.max=n,this.startedAt=e,this.timeout=t,this.userData=r,this.flusher=s,this.key=o}};var bt;(function(i){i[i.InvalidRequest=4e3]="InvalidRequest",i[i.BodyRequired=4001]="BodyRequired",i[i.NoToken=4010]="NoToken",i[i.InvalidToken=4011]="InvalidToken",i[i.TokenExpired=4012]="TokenExpired",i[i.Forbidden=4030]="Forbidden",i[i.NotFound=4040]="NotFound",i[i.Unexpected=5e3]="Unexpected",i[i.ConfigurationError=5010]="ConfigurationError",i[i.NoFileStorage=5011]="NoFileStorage",i[i.MigrationPathNotFound=7001]="MigrationPathNotFound",i[i.ImportFailed=7002]="ImportFailed",i[i.Offline=7003]="Offline"})(bt||(bt={}));var q=class extends Error{constructor(n,e,t){super(t??`Verdant error: ${n}`,{cause:e}),this.code=n,this.toResponse=()=>JSON.stringify({code:this.code})}get httpStatus(){let n=Math.floor(this.code/10);return n<600?n:500}};q.Code=bt;function fr(i){return typeof i=="object"&&"code"in i&&typeof i.code=="number"}var Ut,Oo=new Uint8Array(16);function si(){if(!Ut&&(Ut=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!Ut))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ut(Oo)}var hr=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Io(i){return typeof i=="string"&&hr.test(i)}var pr=Io;var te=[];for(Nt=0;Nt<256;++Nt)te.push((Nt+256).toString(16).substr(1));var Nt;function Eo(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(te[i[n+0]]+te[i[n+1]]+te[i[n+2]]+te[i[n+3]]+"-"+te[i[n+4]]+te[i[n+5]]+"-"+te[i[n+6]]+te[i[n+7]]+"-"+te[i[n+8]]+te[i[n+9]]+"-"+te[i[n+10]]+te[i[n+11]]+te[i[n+12]]+te[i[n+13]]+te[i[n+14]]+te[i[n+15]]).toLowerCase();if(!pr(e))throw TypeError("Stringified UUID is invalid");return e}var mr=Eo;function _o(i,n,e){i=i||{};var t=i.random||(i.rng||si)();if(t[6]=t[6]&15|64,t[8]=t[8]&63|128,n){e=e||0;for(var r=0;r<16;++r)n[e+r]=t[r];return n}return mr(t)}var vt=_o;var vr=Te(br(),1);function Do(i,n){return typeof n!="object"||n===null||Array.isArray(n)?n:Object.fromEntries(Object.entries(n).sort(([e],[t])=>e<t?-1:e>t?1:0))}function oi(i){let n=new WeakMap,e=0;return JSON.stringify(i,(t,r)=>{if(typeof r=="object"&&r!==null){if(n.has(r))return{$ref:n.get(r)};n.set(r,`cyclic-ref:${e++}`)}return Do(t,r)})}function de(i,n=!0){if(!n&&typeof structuredClone=="function")return structuredClone(i);if(V(i)||Array.isArray(i)){let e=G(i),t;if(Array.isArray(i))t=i.map(r=>de(r,n));else{t={};for(let[r,s]of Object.entries(i))t[r]=de(s,n)}return n&&e&&z(t,e),t}return i}function Ke(i){return(0,vr.default)(i)}function V(i){return i&&typeof i=="object"}function wr(i){for(var n=[],e=[i],t=0;e.length;){var r=e.pop();if(typeof r=="boolean")t+=4;else if(typeof r=="string")t+=r.length*2;else if(typeof r=="number")t+=8;else if(typeof r=="object"&&n.indexOf(r)===-1){n.push(r);for(var s in r)e.push(r[s])}}return t}function L(i,n="assertion failed"){if(!i)throw new Error(n)}function wt(i=16){return vt().replace("-","").slice(0,i)}function xr(i,n){for(let e=i.length-1;e>=0;e--)if(n(i[e]))return e;return-1}function Sr(i,n){let e;return function(...t){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,t),n)}}function Or(i,n){let e=0,t;return function(...r){let s=this,o=Date.now();o-e>=n?(e=o,i.apply(s,r),clearTimeout(t)):(clearTimeout(t),t=setTimeout(()=>{e=o,i.apply(s,r)},n))}}function Ir(){}function he(i){return i&&i["@@type"]==="file"}function xt(i){return{"@@type":"file",id:i}}function it(i){return typeof File<"u"&&i instanceof File||typeof Blob<"u"&&i instanceof Blob}function zt(i){return i&&V(i)&&typeof i.id=="string"&&typeof i.remote=="boolean"&&typeof i.name=="string"&&typeof i.type=="string"}function $(i){return re(i)||he(i)}function Ce(i,n){return i===n?!0:!(!$(i)||!$(n)||i["@@type"]!==n["@@type"]||i.id!==n.id)}function re(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function qe(i,n,e,t,r=[],s){z(i,n),rt(i,t);let o=Ht(i);for(let a of o.keys()){let d=o.get(a),h={oid:a,timestamp:e(),data:{op:"initialize",value:qt(d)}};r.push(Dr(h,s?.authz))}return r}function _r(i,n,e,t=[],r){let s={oid:n,timestamp:e(),data:{op:"initialize",value:i}};return t.push(Dr(s,r?.authz)),t}function Dr(i,n){return n&&(i.authz=n),i}function St(i){let n={};for(let e of i)e.oid in n?n[e.oid].push(e):n[e.oid]=[e];return n}function Cr(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Pr(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function ke(i){return Array.isArray(i)?!0:(console.error(`Cannot apply list patch; expected array, received ${JSON.stringify(i)}. This suggests your data is changing from a list to an object over time. (OID: ${G(i)})`),!1)}function Be(i,n,e){if(i==null&&n.op!=="initialize")return i;let t=i,r,s;function o(a){e&&$(a)&&e.push(a)}switch(n.op){case"set":o(t[n.name]),t[n.name]=n.value;break;case"remove":o(t[n.name]),delete t[n.name];break;case"list-set":ke(i)&&(o(i[n.index]),i[n.index]=n.value);break;case"list-push":ke(i)&&i.push(n.value);break;case"list-delete":ke(i)&&(o(i[n.index]),i.splice(n.index,n.count));break;case"list-move-by-index":ke(i)&&(s=i.splice(n.from,1),i.splice(n.to,0,s[0]));break;case"list-remove":if(ke(i))do{let a=n.value;n.only==="last"?$(a)?r=xr(i,d=>$(d)&&Ce(d,a)):r=i.lastIndexOf(a):$(a)?r=i.findIndex(d=>$(d)&&Ce(d,a)):r=i.indexOf(a),r!==-1&&(o(i[r]),i.splice(r,1))}while(!n.only&&r!==-1);break;case"list-add":ke(i)&&(i.some(d=>re(d)&&re(n.value)?d.id===n.value.id:d===n.value)||i.push(n.value));break;case"list-move-by-ref":ke(i)&&(r=i.findIndex(a=>Ce(a,n.value)),s=i.splice(r,1),i.splice(n.index,0,s[0]));break;case"list-insert":if(ke(i)){if(!n.value&&!n.values)throw new Error(`Cannot apply list insert patch; expected value or values, received ${JSON.stringify(n)}`);n.value?i.splice(n.index,0,n.value):i.splice(n.index,0,...n.values)}break;case"delete":Array.isArray(i)?i.forEach(o):V(i)&&Object.values(i||{}).forEach(o);return;case"initialize":return de(n.value);case"touch":return i;default:throw new Error(`Unsupported patch operation: ${n.op}`)}return i}function $t(i,n,e=[]){if(Array.isArray(i))for(let t=0;t<i.length;t++){let r=i[t];i[t]=Er(r,n,e),V(i[t])&&$t(i[t],n,e)}else if(!he(i)){if(V(i)){L(G(i),`Object ${JSON.stringify(i)} must have an oid`);for(let t of Object.keys(i))i[t]=Er(i[t],n,e),V(i[t])&&$t(i[t],n,e)}}return e}function Er(i,n,e){if(re(i)){e.push(i.id);let t=n.get(i.id);return L(!!t,`No value was found in object map for ${i.id}`),z(t,i.id)}else return i}function Ar(i){return i.data.op==="set"?i.data.name:!1}function Rr(i,n){return n.has(!0)?!0:i.data.op==="set"||i.data.op==="remove"?n.has(i.data.name):!1}function Kt(i){return{oid:i.oid,timestamp:i.timestamp,data:i.data,authz:i.authz}}var Co="/",Ot=":",ci=new WeakMap;function se(i){let n=G(i);return L(!!n,`Object ${JSON.stringify(i)} does not have an OID assigned to it`),n}function G(i){if(V(i))return ci.get(i)}function z(i,n){return L(V(i),`Only objects can be assigned OIDs, received ${JSON.stringify(i)}`),Br(i)&&qt(i),ci.set(i,n),i}function Br(i){return!!G(i)}function qt(i){return ci.delete(i),i}function Fr(i,n,e){if(Br(i)){let t=se(i);if(Le(t,n))return se(i);{let r=Se(n,e);return z(i,r),r}}else{let t=Se(n,e);return z(i,t),t}}var ai={".":"&dot;","/":"&slash;",":":"&colon;"};function Tr(i){return i.replace(/[/]/g,ai["/"]).replace(/[:]/g,ai[":"]).replace(/[.]/g,ai["."])}function kr(i){return i.replace(/&slash;/g,"/").replace(/&colon;/g,":").replace(/&dot;/g,".")}function ee(i,n,e){let t=Tr(i)+Co+Tr(n);return e&&(t+=Ot+e),t}function Se(i,n=Po){let{collection:e,id:t}=ue(i);return ee(e,t,n())}function ue(i){let[n,e,...t]=i.split("/");t.length&&(console.error(`OID ${i} has more than 3 segments. Attempting to parse it anyway.`),e+="/"+t.join("/"));let[r,s]=e.split(Ot),o;return r.includes(".")?o=r.slice(0,r.indexOf(".")):o=r,{collection:kr(n),id:kr(o),subId:s}}function rt(i,n){let e=se(i);if(Array.isArray(i)){let t;for(let r=0;r<i.length;r++)t=i[r],V(t)&&!$(t)&&(Fr(t,e,n),rt(t,n))}else if(V(i)&&!$(i))for(let t of Object.keys(i))V(i[t])&&!$(i[t])&&(Fr(i[t],e,n),rt(i[t],n))}function Qt(i){if(qt(i),Array.isArray(i))for(let n=0;n<i.length;n++)Qt(i[n]);else if(V(i))for(let n of Object.keys(i))Qt(i[n])}function Po(){return vt().slice(0,8)}function ne(i){return{"@@type":"ref",id:i}}function Ht(i,n=new Map){if(Array.isArray(i)){let e=se(i),t=z([],e);for(let r=0;r<i.length;r++){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(he(s)){t[r]=s;continue}else{let o=se(s);t[r]=ne(o),Ht(s,n)}}else t[r]=s}n.set(e,t)}else if(V(i)&&!$(i)){let e=se(i),t=z({},e);for(let r of Object.keys(i)){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(he(s))t[r]=s;else{let o=se(s);t[r]=ne(o),Ht(s,n)}}else t[r]=s}n.set(e,t)}else $(i);return n}function K(i){return i.split(".")[0].split(Ot)[0]}function Lr(i){let n=K(i),e=Se(n,()=>"\uFFFF");return[`${n}${Ot}`,e]}function Le(i,n){return K(i)===K(n)}function Wt(i){return!i.includes(Ot)}var st="__@@oid_do_not_use",Pe="@@id";function Ao(i){if(V(i))return i[Pe]||i[st]}function Ro(i){return V(i)&&(delete i[st],delete i[Pe]),i}function Fo(i){let n=Ao(i);n&&z(i,n)}function It(i){if(Fo(i),Ro(i),Array.isArray(i))for(let n=0;n<i.length;n++)It(i[n]);else if(V(i))for(let n of Object.keys(i))It(i[n])}function To(i){let{collection:n,id:e,subId:t}=ue(i);return ee(n,e,t)}var ko=/"\w+\/[^"]+?(\.[^"]+)+\:[\S]+?"/g;function Bo(i){return i.replaceAll(ko,n=>{let e=n.slice(1,n.length-1);return`"${To(e)}"`})}function li(i){return JSON.parse(Bo(JSON.stringify(i)))}function jr(i){let n=K(i);return[`${n}.`,`${n}.\uFFFF`]}function di(i){return i===Pe||i===st}var je=class{constructor(n,e){this.getNow=n,this.createSubId=e,this.isPrimitive=t=>!V(t)||$(t),this.createDiff=(t,r,s={})=>Jt(t,r,this.getNow,this.createSubId,[],s),this.createInitialize=(t,r,s,o)=>o?_r(t,r,this.getNow,void 0,s?{authz:s}:void 0):qe(t,r,this.getNow,this.createSubId,void 0,s?{authz:s}:void 0),this.createSet=(t,r,s,o)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:r,value:s},authz:o}];{let a=Se(t,this.createSubId);return[...qe(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"set",value:ne(a),name:r},authz:o}]}},this.createRemove=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:r},authz:s}],this.createListSet=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:s},authz:o}];{let a=Se(t,this.createSubId);return[...qe(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:ne(a)},authz:o}]}},this.createListPush=(t,r,s)=>{if(this.isPrimitive(r))return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:r},authz:s}];{let o=Se(t,this.createSubId);return[...qe(r,o,this.getNow,void 0,void 0,{authz:s}),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:ne(o)},authz:s}]}},this.createListAdd=(t,r,s)=>this.isPrimitive(r)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:r},authz:s}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:ne(r)},authz:s}],this.createListInsert=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:s,index:r},authz:o}];{let a=Se(t,this.createSubId);return[...qe(s,a,this.getNow,this.createSubId,void 0,o?{authz:o}:void 0),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:ne(a),index:r},authz:o}]}},this.createListInsertMany=(t,r,s,o)=>{L(r>=0,"List index must be non-negative");let a=[],d=s.map(h=>{if(this.isPrimitive(h))return h;let p=Se(t,this.createSubId);return a.push(...qe(h,p,this.getNow,this.createSubId,void 0,{authz:o})),ne(p)});return a.push({oid:t,timestamp:this.getNow(),data:{op:"list-insert",values:d,index:r},authz:o}),a},this.createListRemove=(t,r,s,o)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:r,only:s},authz:o}],this.createListDelete=(t,r,s=1,o)=>(L(r>=0,"List index must be non-negative"),L(s>0,"Count must be positive and non-zero"),[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:r,count:s},authz:o}]),this.createListMoveByRef=(t,r,s,o)=>(L(s>=0,"List index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:r,index:s},authz:o}]),this.createListMoveByIndex=(t,r,s,o)=>(L(r>=0,"List move from index must be non-negative"),L(s>=0,"List move to index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:r,to:s},authz:o}]),this.createDelete=(t,r)=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"},authz:r}],this.createDeleteAll=(t,r)=>t.map(s=>({oid:s,timestamp:this.getNow(),data:{op:"delete"},authz:r}))}};function ot(i,n){if(i===n)return!0;if($(i)&&$(n))return Ce(i,n);let e=G(i),t=G(n);return!!(e&&t&&e===t)}function Mr(i,n,e,t){if(!Et(n))return n;let r=G(n);if(!r)t.mergeUnknownObjects&&e&&z(n,e);else if(!Le(i,r))return de(n,!1);return n}function Et(i){return V(i)&&!$(i)}function Jt(i,n,e,t,r,s){var o;let a={patches:[],mergeUnknownObjects:s?.mergeUnknownObjects,merge:(o=s?.merge)!==null&&o!==void 0?o:s?.defaultUndefined,authz:s?.authz,patchCreator:new je(e,t)};return Gt(i,n,a),a.patches}function Gt(i,n,e){if(Array.isArray(i)&&Array.isArray(n))Lo(i,n,e);else{if(Array.isArray(i)||Array.isArray(n))throw new q(q.Code.Unexpected,void 0,"Cannot diff between array and non-array");Et(i)&&Et(n)&&jo(i,n,e)}}function Lo(i,n,e){let t=se(i),r=[],s=new Set;for(let p=0;p<i.length;p++){let O=i[p];r[p]=O;let v=G(O);v&&s.add(v)}for(let p=0;p<n.length;p++){let O=n[p],v=i[p];n[p]=Mr(t,O,G(v),e)}let o=!0,a=new Set,d=new Set;for(let p=0;p<n.length;p++){let O=n[p],v=r[p];O===void 0&&(o=!1);let P=G(O),y=o&&p>=r.length;if(P&&s.has(P))if(ot(O,v))Gt(v,O,e);else{e.patches.push(...e.patchCreator.createListMoveByRef(t,ne(P),p,e.authz));let I=G(v);I&&d.add(I),a.add(P)}else if(y)e.patches.push(...e.patchCreator.createListPush(t,O,e.authz));else if(ot(O,v))Gt(v,O,e);else{let I=p===0||ot(n[p-1],r[p-1]),_=p===n.length-1||ot(n[p+1],r[p]);I&&_?(e.patches.push(...e.patchCreator.createListInsert(t,p,O,e.authz)),r.splice(p,0,void 0)):e.patches.push(...e.patchCreator.createListSet(t,p,O,e.authz))}}if(r.length-n.length>0)for(let p=r.length-1;p>=n.length;p--){let O=r[p],v=G(O);v?a.has(v)||(at(O,e),e.patches.push(...e.patchCreator.createListRemove(t,ne(v),"last",e.authz))):e.patches.push(...e.patchCreator.createListRemove(t,O,"last",e.authz))}for(let p of d){if(a.has(p))continue;let O=i.find(v=>G(v)===p);O&&at(O,e),e.patches.push(...e.patchCreator.createListRemove(t,ne(p),"last",e.authz))}}function jo(i,n,e){let t=new Set(Object.keys(i)),r=se(i);for(let s in n){let o=n[s];if(o===void 0&&e.merge||(t.delete(s),di(s)))continue;let a=i[s];Et(o)?(Mr(r,o,G(a),e),a?ot(o,a)?Gt(a,o,e):(e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz))):ot(o,a)||(o===void 0?e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e))}if(!e.merge)for(let s of t)di(s)||(e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)),at(i[s],e))}function at(i,n){if(!Et(i))return;let e=G(i);if(e){n.patches.push(...n.patchCreator.createDelete(e,n.authz));for(let t in i){let r=i[t];at(r,n)}}}var N=class{constructor(n){this._onAllUnsubscribed=n,this.subscribers={},this.counts={},this._disabled=!1,this.disposed=!1,this.subscriberCount=e=>{var t;return(t=this.counts[e])!==null&&t!==void 0?t:0},this.totalSubscriberCount=()=>Object.values(this.counts).reduce((e,t)=>e+t,0),this.subscribe=(e,t)=>{let r=wt(),s=this.subscribers[e];return s||(s=this.subscribers[e]={}),s[r]=t,this.counts[e]=(this.counts[e]||0)+1,()=>{this.subscribers[e]&&(delete this.subscribers[e][r],this.counts[e]--,this.counts[e]===0&&(delete this.subscribers[e],delete this.counts[e],this._onAllUnsubscribed&&this._onAllUnsubscribed(e)))}},this.emit=(e,...t)=>{this._disabled||this.subscribers[e]&&Object.values(this.subscribers[e]).forEach(r=>r(...t))},this.dispose=()=>{this._disabled=!0,this.disposed=!0;let e=Object.keys(this.subscribers);this.subscribers={},this.counts={},e.forEach(t=>{this._onAllUnsubscribed&&this._onAllUnsubscribed(t)})},this.disable=()=>{this._disabled=!0}}get disabled(){return this._disabled}};var Yt="\uFFFFFE",Mo="\0",Vo="\uFFFFFF";function ge(...i){let n=Uo(i);return n.length===1?n[0]:n}function Ae(...i){return i.join(Yt)+`${Vo}`}function Ee(...i){return i.join(Yt)+`${Yt}${Mo}`}function Uo(i){let n=[[]];for(let e of i)if(Array.isArray(e)){let t=[];for(let r of n)for(let s of e)t.push(r.concat(s));n=t}else for(let t of n)t.push(`${e}`);return Array.from(new Set(n.map(e=>e.join(Yt))))}function Vr(i){return!!i.field}function No(i,n){let e={};for(let[t,r]of Object.entries(i.indexes||{})){let s=r;Vr(s)?e[t]=Oe(n[s.field]):e[t]=Oe(s.compute(n))}return e}function zo(i,n){return Object.entries(i.compounds||{}).reduce((e,[t,r])=>(e[t]=ge(...r.of.map(s=>n[s])),e),{})}function $o(i,n){return Object.entries(i.fields).reduce((e,[t,r])=>("indexed"in r&&(e[t]=Oe(n[t])),e),{})}function ui(i,n){let e=Object.assign(Object.assign({[i.primaryKey]:n[i.primaryKey]},$o(i,n)),No(i,n));return Object.assign(e,zo(i,Object.assign(Object.assign({},n),e))),e}var Ko="null";function Oe(i){if(i===null)return Ko;if(typeof i=="string"||typeof i=="number")return i;if(typeof i=="boolean"||i===null)return`${i}`;if(i===void 0)return"undefined";if(Array.isArray(i))return i.map(Oe);throw new Error(`Unsupported index value: ${i}`)}function Ur(i,n){let e,t;return(...r)=>{let s=n();return e&&e.length===s.length&&e.every((o,a)=>o===s[a])||(e=[...s],t=i(...r)),t}}var qo={version:0,collections:{}};function Nr(i){return i?[...Object.keys(i.indexes||{}).map(n=>{let e=i.indexes[n],t=e.type;!t&&e.field&&(t=i.fields[e.field].type),L(t,`Could not determine type of index ${i}.${n}. Index must have a type. Perhaps your schema is malformed?`);let r=_t(i,n);return{name:n,multiEntry:r,synthetic:!0,compound:!1,type:t?.replace("[]","")}}),...Object.keys(i.compounds||{}).map(n=>({name:n,multiEntry:_t(i,n),synthetic:!1,compound:!0,type:"string"}))]:[]}function hi(i,n,e){let t=typeof n=="function"||n===void 0,r=t?qo:i,s=t?i:n,o=t?n:e;L(r,"Invalid arguments to createMigration"),L(s,"Invalid arguments to createMigration");let{changedCollections:a,addedCollections:d,removedCollections:h,addedIndexes:p,removedIndexes:O,autoMigratedCollections:v,autoMigration:P}=Ho(r,s);return{version:s.version,migrate:async y=>{let I=[];if(await o?.({migrate:async(E,D)=>{let k=P(E),b=async S=>{let u=await D(S);z(u,se(S));let m=k(u),l=$r(s.collections[E].fields,m);return m};await y.migrate(E,b),I.push(E),v.delete(E)},info:{changedCollections:a,addedCollections:d,removedCollections:h},queries:y.queries,mutations:y.mutations}),s.version>1){y.log("debug","auto-migrating collections with new defaults",v);for(let D of v)await y.migrate(D,P(D)),I.push(D);for(let D of h)await y.deleteCollection(D);let E=a.filter(D=>!I.includes(D));E.length>0&&y.log("error",`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,E)}},removedCollections:h,addedIndexes:p,removedIndexes:O,allCollections:Object.keys(s.collections),changedCollections:a,addedCollections:d,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function Ho(i,n){let e=Object.keys(n.collections).filter(p=>i.collections[p]&&oi(i.collections[p])!==oi(n.collections[p])),t=Object.keys(i.collections).filter(p=>!n.collections[p]),r=Object.keys(n.collections).filter(p=>!i.collections[p]),s=new Set;for(let p of e){let O=i.collections[p].fields,v=n.collections[p].fields;Object.keys(v).some(P=>(!O[P]||fi(O[P]))&&!fi(v[P]))&&s.add(p),Object.keys(O).some(P=>!v[P])&&s.add(p)}let o={},a={};for(let p of[...e,...r]){let O=Nr(i.collections[p]),v=Nr(n.collections[p]),P=v.filter(I=>!O.find(_=>_.name===I.name)),y=O.filter(I=>!v.find(_=>_.name===I.name));P.length>0&&(o[p]=P,e.includes(p)&&s.add(p)),y.length>0&&(a[p]=y,e.includes(p)&&s.add(p))}return{changedCollections:e,addedCollections:r,removedCollections:t,addedIndexes:o,removedIndexes:a,autoMigratedCollections:s,withDefaults:(p,O)=>He(n.collections[p],O),autoMigration:p=>O=>{let v=n.collections[p];return He(v,zr(v,O))}}}var pi={};var Me;(function(i){i[i.Realtime=0]="Realtime",i[i.Push=1]="Push",i[i.PassiveRealtime=2]="PassiveRealtime",i[i.PassivePush=3]="PassivePush",i[i.ReadOnlyPull=4]="ReadOnlyPull",i[i.ReadOnlyRealtime=5]="ReadOnlyRealtime"})(Me||(Me={}));var ts=Te(Qe(),1),Zo=function(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e};function ea(i){let{properties:n,fields:e}=i,t=Zo(i,["properties","fields"]),r=n||e;if(!r)throw new Error("objectField must be passed a properties object");return Object.assign(Object.assign({type:"object"},t),{properties:r})}function ta(i,n){return i.properties=n,i}function na(i){return Object.assign({type:"array"},i)}function ia(i,n){return i.items=n,i}var ra=i=>Object.assign({type:"string"},i),sa=i=>Object.assign({type:"number"},i),oa=i=>Object.assign({type:"boolean"},i),aa=i=>Object.assign({type:"any"},i);function ca(i){return Object.assign({type:"map"},i)}function la(i,n){return i.values=n,i}var da=i=>Object.assign({type:"file"},i),ua=()=>({type:"string",default:ts.default}),ns={object:ea,array:na,replaceObjectFields:ta,replaceArrayItems:ia,string:ra,number:sa,boolean:oa,any:aa,map:ca,replaceMapValues:la,file:da,id:ua};var os=Te(Qe(),1);function en(i){return i.equals!==void 0}function tn(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function is(i){return!!i.match}function nn(i){return i.startsWith!==void 0}function wi(i){return!tn(i)&&!en(i)&&!is(i)&&!nn(i)&&i.order}function _t(i,n){var e,t;let r=(e=i.compounds)===null||e===void 0?void 0:e[n];if(r)return r.of.some(a=>_t(i,a));let s=(t=i.indexes)===null||t===void 0?void 0:t[n];if(s){if("type"in s)return vi(s.type);if("field"in s){let a=i.fields[s.field];return a?vi(a.type):!1}}let o=i.fields[n];return o?vi(o.type):!1}function vi(i){return i==="array"||i.endsWith("[]")}function Ie(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Je(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.default!==void 0:!1}function fi(i){return!Ie(i)&&!Je(i)}function He(i,n){for(let[e,t]of Object.entries(i.fields)){let r=Ve(t);(r!==void 0&&n[e]===void 0||!Ie(t)&&n[e]===null)&&(n[e]=r),n[e]&&We(n[e],t)}return n}function We(i,n){if(i==null)return i;if(n.type==="object")for(let[e,t]of Object.entries(n.properties)){if(i[e]===void 0){let r=Ve(t);r!==void 0&&(i[e]=r)}We(i[e],t)}else if(n.type==="array")for(let e of i)We(e,n.items);else if(n.type==="map")for(let[e,t]of Object.entries(i))e===Pe||e===st||We(t,n.values)}function Ve(i){if("default"in i){let n=typeof i.default=="function"?i.default():i.default;if(n===null)return n;let e=structuredClone(n);if(i.type==="object")for(let[t,r]of Object.entries(i.properties))e[t]===void 0&&(e[t]=Ve(r));return e}if(Ie(i))return null;if(i.type==="array")return[];if(i.type==="map")return{}}function zr(i,n){for(let[e,t]of Object.entries(n))e===Pe||e===st||(i.fields[e]?xi(t,i.fields[e]):delete n[e]);return n}function xi(i,n){if(V(i)&&n.type==="object")for(let[e,t]of Object.entries(i))n.properties[e]?xi(t,n.properties[e]):delete i[e];else if(Array.isArray(i)&&n.type==="array")for(let e of i)xi(e,n.items)}function rs(i){return i.type==="string"||i.type==="number"||i.type==="boolean"}function $r(i,n){for(let[e,t]of Object.entries(n))if(e!==Pe){if(!i[e])return{type:"invalid-key",fieldPath:[e],message:`Invalid field "${e}"`};if(t){let r=Re({field:i[e],value:t,fieldPath:[e]});if(r)return r}}}function Re({field:i,value:n,fieldPath:e=[],depth:t,requireDefaults:r,expectRefs:s,hasPassedFirstLevel:o}){let a=s&&o;if(!(t!==void 0&&t<=0)&&!(Ie(i)&&n==null)){if(n==null&&(r||!Je(i)))return{type:"no-default",fieldPath:e,message:`Invalid null value for field ${fe(e)}`};if(i.type==="object")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${ye(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected object ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`};for(let[d,h]of Object.entries(i.properties)){if(d===Pe)continue;let p=Re({field:h,value:n[d],fieldPath:[...e,d],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(p)return p}for(let d of Object.keys(n))if(!i.properties[d])return{type:"invalid-key",fieldPath:[...e,d],message:`Invalid unexpected field "${d}" on value ${fe(e)}`}}else if(i.type==="array")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${ye(n)}`}}else{if(!Array.isArray(n))return n===null&&i.nullable?void 0:{type:"invalid-value",fieldPath:e,message:`Expected array ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`};for(let d of n){let h=Re({field:i.items,value:d,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(h)return h}}else if(i.type==="map")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${ye(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected map for field ${fe(e)}, got ${ye(n)}`};for(let[d,h]of Object.entries(n)){let p=Re({field:i.values,value:h,fieldPath:[...e,d],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(p)return p}}else if(i.type==="string"){if(typeof n!="string")return{type:"invalid-type",fieldPath:e,message:`Expected string ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`};if(i.options&&!i.options.includes(n))return{type:"invalid-value",fieldPath:e,message:`Expected one of ${i.options.join(", ")} for field ${fe(e)}, got ${ye(n)}`}}else if(i.type==="boolean"){if(typeof n!="boolean")return{type:"invalid-type",fieldPath:e,message:`Expected boolean ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`}}else if(i.type==="number"){if(typeof n!="number")return{type:"invalid-type",fieldPath:e,message:`Expected number ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`}}else if(i.type==="file"){if(a){if(!he(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ref for field ${fe(e)}, got ${ye(n)}`}}else if(!it(n)&&!zt(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`}}}}function ye(i){try{return JSON.stringify(i)}catch{return String(i)}}function fe(i){return i.length===0?"root":i.join(".")}function ss(i,n){let e={};for(let[t,r]of Object.entries(n))i[t]&&(e[t]=rn({field:i[t],value:r,fieldPath:[t]}));return e}function rn({field:i,value:n,fieldPath:e=[],depth:t}){let r=Re({field:i,value:n,fieldPath:e,depth:t,requireDefaults:!0});if(r)throw new Error(`Validation error: ${r.message}`);if(i.type==="object"){if(!V(n))return n;let s={};for(let[o,a]of Object.entries(i.properties))s[o]=rn({field:a,value:n[o],fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else{if(i.type==="array")return Array.isArray(n)?n.map(s=>rn({field:i.items,value:s,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0})):n;if(i.type==="map"){if(!V(n))return n;let s={};for(let[o,a]of Object.entries(n))s[o]=rn({field:i.values,value:a,fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else return n}}function Ue(i,n){var e;return i.type==="object"?i.properties[n]:i.type==="array"?i.items:i.type==="map"?i.values:i.type==="any"?i:"type"in i?null:(e=i[n])!==null&&e!==void 0?e:null}var fa=function(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e};function ha(i){var{synthetics:n,indexes:e}=i,t=fa(i,["synthetics","indexes"]);let r=Object.assign(Object.assign({},n),e);for(let[s,o]of Object.entries(t.fields))"indexed"in o&&(r[s]={field:s});return Object.assign(Object.assign({},t),{indexes:r})}function Pt(i){return i}Pt.collection=ha;Pt.fields=ns;Pt.generated={id:os.default};var ds=Te(Qe(),1),dn=4,Rt=36;function as(i){return i.toString(Rt).padStart(dn,"0")}function pa(i){return i.toString().padStart(6,"0")}var sn=class{constructor(){this.latest={time:Date.now(),counter:0,node:ma()},this.zeroCounter=0,this.now=n=>(this.latest=ls(this.latest),this.get(n,this.latest)),this.OLD_now=n=>(this.latest=ls(this.latest),pa(n)+ya(this.latest)),this.timerState=()=>this.latest,this.update=n=>{let e=n.slice(dn);this.latest=ga(this.latest,us(e))},this.get=(n,e)=>as(n)+cs(e),this.zero=n=>as(n)+cs({time:0,counter:this.zeroCounter++,node:this.latest.node}),this.getWallClockTime=Ei}},on=class extends Error{constructor(...n){super(),this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(n).join(" ")}},an=class extends Error{constructor(){super(),this.type="OverflowError",this.message="timestamp counter overflow"}},Si=4,Oi=7,cn=60*1e3,At=9;function ma(){return ds.default.slug().padStart(Oi,"0").slice(0,Oi)}function cs(i){let n=new Date(i.time).getTime().toString(Rt).padStart(At,"0"),e=i.counter.toString(Rt).padStart(Si,"0"),t=i.node.padStart(Oi,"0");return`${n}${e}${t}`}function ls(i){let n=Date.now(),e=Math.max(i.time,n),t=i.time===e?i.counter+1:0;if(e-n>cn)throw new on(e,n,cn);if(t>65535)throw new an;return{time:e,counter:t,node:i.node}}function ga(i,n){let e=Date.now(),t=Math.max(e,Math.max(i.time,n.time)),r=Math.max(i.counter,n.counter),s;if(i.time===t&&n.time===t?s=r+1:i.time===t?s=i.counter+1:n.time===t?s=n.counter+1:s=0,t-e>cn)throw new on(t,e,cn);if(s>65535)throw new an;return{time:t,counter:s,node:i.node}}function us(i){let n=i.slice(0,At),e=i.slice(At,At+Si),t=i.slice(At+Si),r=parseInt(n,Rt),s=parseInt(e,Rt);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:t}}function ya(i){let n=new Date(i.time).toISOString(),e=i.counter.toString(16).toUpperCase().padStart(4,"0"),t=i.node.padStart(16,"0");return`${n}-${e}-${t}`}function ln(i){return parseInt(i.slice(0,dn),36)}function Ii(i,n){return ln(i)-ln(n)}function Ei(i){return us(i.slice(dn)).time}function fs(i,n,e,t,r,s){let o=new je(t,r);if(n==null)return[{oid:i,timestamp:t(),data:{op:"delete"},authz:s}];let a=de(n),d=[];for(let h of e){let p=ba(i,a,h,o,s);d.unshift(...p),Be(a,h.data)}return d}function ba(i,n,e,t,r){var s,o;let a=e.data;switch(a.op){case"set":return n[a.name]===void 0?t.createRemove(i,a.name,r):t.createSet(i,a.name,n[a.name],r);case"remove":return n[a.name]===void 0?[]:t.createSet(i,a.name,n[a.name],r);case"list-insert":return a.value===void 0&&((s=a.values)===null||s===void 0?void 0:s.length)===0?[]:t.createListDelete(i,a.index,a.value?1:((o=a.values)===null||o===void 0?void 0:o.length)||0,r);case"list-delete":return t.createListInsertMany(i,a.index,n.slice(a.index,a.index+a.count),r);case"list-move-by-ref":return t.createListMoveByRef(i,a.value,Ft(n,a.value),r);case"list-move-by-index":return t.createListMoveByIndex(i,a.to,a.from,r);case"delete":return t.createInitialize(n,i,r,!0);case"list-push":return t.createListRemove(i,a.value,"last",r);case"list-remove":if(a.only==="last"){let d=Ft(n,a.value,0,"backward");return d===-1?[]:t.createListInsert(i,d,a.value,r)}else if(a.only==="first"){let d=Ft(n,a.value);return d===-1?[]:t.createListInsert(i,d,a.value,r)}else{let d=[],h=Ft(n,a.value);for(;h!==-1;)d.push(h),h=Ft(n,a.value,h+1);return d.flatMap(p=>t.createListInsert(i,p,a.value,r))}case"list-add":return t.createListRemove(i,a.value,"last",r);case"list-set":return n[a.index]!==void 0?t.createListSet(i,a.index,n[a.index],r):t.createListDelete(i,a.index,1,r);case"initialize":return t.createDelete(i,r);case"touch":return[];default:throw new Error(`Cannot undo operation type: ${a.op}`)}}function Ft(i,n,e=0,t="forward"){let r=t==="forward"?"findIndex":"findLastIndex";return $(n)?i[r]((s,o)=>$(s)&&s.id===n.id&&o>=e):i[r]((s,o)=>s===n&&o>=e)}var un=class{constructor(n,e){this.schema=n;this.entities=e;this.getOid=(n,e)=>{let t=this.schema.collections[n].primaryKey,r=e[t];return L(r,`Document must have a primary key: ${t.toString()} (got: ${JSON.stringify(e)})`),ee(n,r)};this.addDefaults=(n,e)=>{let t=this.schema.collections[n];return He(t,e)};this.validate=(n,e)=>{let t=this.schema.collections[n];return ss(t.fields,e)};this.create=async(n,e,t={})=>{let r=t,s=this.addDefaults(n,e),o=this.validate(n,s),a=this.getOid(n,o);if(t.access){let d=this.schema.collections[n];t.access!=="shared"&&e[d.primaryKey]&&!t.silenceAccessControlWithPrimaryKeyWarning&&console.warn("Using a custom primary key with access control is not supported. This may result in corrupted documents. Read more about why: https://verdant.dev/docs/sync/access#a-warning-about-custom-primaryKey"),r.access=t.access}return this.entities.create(o,a,r)};this.delete=async(n,e,t={})=>{let r=ee(n,e);return this.entities.delete(r,t)};this.deleteAll=async(n,e={})=>this.entities.deleteAll(n.map(([t,r])=>ee(t,r)),e);this.deleteAllFromCollection=async(n,e,t={})=>this.entities.deleteAll(e.map(r=>ee(n,r)),t);this.clone=async(n,e,t={})=>{if(!Wt(e.uid))throw new Error("Cannot clone non-root documents");let r=e.getSnapshot(),s=this.schema.collections[n];if(delete r[s.primaryKey],!s.fields[s.primaryKey].default){if(!t.primaryKey)throw new Error(`Error cloning document from collection ${n}: collection does not have a default on primary key. You must supply a value to options.primaryKey for the clone.`);r[s.primaryKey]=t.primaryKey}return this.create(n,r,t)}}};var In=Te(Hs(),1);var Ui=Te(Qe(),1);function ka(i){return{id:(0,Ui.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function lt(i,n){if(typeof window<"u"&&it(i)){let e=ka(i);return n(e),xt(e.id)}if(zt(i)){let e={...i,id:(0,Ui.default)()};return n(e),xt(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=lt(i[e],n);return i}if(typeof i=="object"){for(let e in i)i[e]=lt(i[e],n);return i}return i}var oe=class{constructor(){this._disposes=[];this.disposed=!1;this.dispose=async()=>{this.disposed=!0,await Promise.all(this._disposes.map(async n=>{try{await n()}catch(e){console.error("Error disposing",e)}})),this._disposes=[]};this.compose=n=>this.addDispose(n.dispose.bind(n));this.addDispose=n=>{this._disposes.push(n)}}};var dt=Symbol("entity-file-update"),wn=Symbol("entity-file-mark-failed"),Ni=Symbol("child-file-changed"),Ba,La,be=class extends N{constructor(e,{downloadRemote:t=!1,ctx:r,parent:s}){super();this.id=e;this._objectUrl=null;this._fileData=null;this._loading=!0;this._failed=!1;this._downloadRemote=!1;this._uploaded=!1;this.unsubscribes=[];this[Ba]=e=>{this.ctx.log("debug","EntityFile updated",this.id,e),this._loading=!1,this._failed=!1,this._fileData=e,e.file&&(this._objectUrl&&"revokeObjectURL"in URL&&URL.revokeObjectURL(this._objectUrl),this.ctx.log("debug","Creating object URL for file",this.id),this._objectUrl=URL.createObjectURL(e.file)),this.emitChange()};this[La]=()=>{this._failed=!0,this._loading=!1,this.emitChange()};this.onUploaded=e=>{this._fileData??=e,this._uploaded=!0,this.ctx.log("debug","File marked uploaded",this.id,this._fileData),this.emitChange()};this.destroy=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this.dispose()};this.ctx=r,this.parent=s,this._downloadRemote=t,this.unsubscribes.push(this.ctx.internalEvents.subscribe(`fileUploaded:${e}`,this.onUploaded))}static{Ba=dt,La=wn}get downloadRemote(){return this._downloadRemote}get isFile(){return!0}get isUploaded(){return this._uploaded||this._fileData?.remote||!1}emitChange(){this.parent[Ni](this),this.emit("change")}get url(){return this.loading?null:this._objectUrl?this._objectUrl:this._fileData?.url??null}get name(){return this._fileData?.name??null}get type(){return this._fileData?.type??null}get loading(){return this._loading}get failed(){return this._failed}getSnapshot(){return{id:this.id,url:this._objectUrl??this._fileData?.url??void 0,name:this.name??"unknown-file",remote:this._fileData?.remote??!1,type:this.type??"",file:this._fileData?.file}}};var xn=class{constructor({initial:n,ctx:e}){this.cache=new Map;this.get=n=>{let e=this.getCached(n.oid);if(e)return e;let t=new pe(n);return this.cache.set(n.oid,this.ctx.weakRef(t)),t};this.has=n=>this.cache.has(n);this.getCached=n=>{if(this.cache.has(n)){let t=this.cache.get(n)?.deref();if(t)return t;this.cache.delete(n)}return null};if(this.ctx=e,n)for(let t of n)this.cache.set(t.oid,e.weakRef(t))}};function Qs(i,n,e){let t={previousValue:i.get(n),isLocal:!1};function r(s){if(i.deleted)return;let o=i.get(n);o!==this.previousValue&&(this.isLocal=s.isLocal,e(o,this),this.previousValue=o)}return i.subscribe("change",r.bind(t))}var Ws=Symbol("private entity context key"),Ma,pe=class i extends N{constructor({oid:e,schema:t,entityFamily:r,parent:s,ctx:o,metadataFamily:a,readonlyKeys:d,files:h,storeEvents:p,deleteSelf:O,fieldPath:v}){super();this.fieldPath=[];this._viewData=void 0;this.validationError=void 0;this.cachedDeepUpdatedAt=null;this.wasDeletedLastChange=!1;this.cachedView=void 0;this.onAdd=(e,t)=>{t.oid===this.oid&&this.addConfirmedData(t)};this.onReplace=(e,t)=>{t.oid===this.oid&&this.replaceAllData(t)};this.onResetAll=()=>{this.resetAllData()};this.childIsNull=e=>{if(e instanceof i){let t=e.view;return t==null}return e==null};this.getFieldSchema=e=>{let t=Ue(this.schema,e);return L(t,`No schema for key ${e}`),t};this.validate=Ur(()=>(this.validationError=Re({field:this.schema,value:this.rawView,fieldPath:this.fieldPath,expectRefs:!0})??void 0,this.validationError),()=>[this.viewData]);this.viewWithMappedChildren=e=>{let t=this.view;if(!t)return null;if(Array.isArray(t)){let r=t.map(s=>s instanceof i||s instanceof be?e(s):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>(a instanceof i||a instanceof be?s[o]=e(a):s[o]=a,s),{});return z(r,this.oid),r}};this.rawViewWithMappedChildren=e=>{let t=this.rawView;if(!t)return null;if(Array.isArray(t)){let r=t.map((s,o)=>$(s)?e(this.getChild(o,s.id)):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>($(a)?s[o]=e(this.getChild(o,a.id)):s[o]=a,s),{});return z(r,this.oid),r}};this.getSnapshot=()=>this.viewWithMappedChildren(e=>e.getSnapshot());this.getUnprunedSnapshot=()=>this.rawViewWithMappedChildren(e=>e instanceof be?e.getSnapshot():e.getUnprunedSnapshot());this.addPendingOperations=e=>{this.ctx.log("debug","Entity: adding pending operations",this.oid,e),this.deepInvalid&&(this.ctx.log("warn","Changes are being applied to a pruned entity. This means that the pruned version is being treated as the new baseline and any pruned invalid data is lost.",this.oid),this.canonizePrunedVersion()),this.applyPendingOperations(e)};this.applyPendingOperations=e=>{if(this.access)for(let r of e)r.authz=this.access;let t=this.metadataFamily.addPendingData(e);for(let r of t)this.change(r)};this.getPruneDiff=()=>{let e=this.getSnapshot(),t=this.getUnprunedSnapshot();return this.patchCreator.createDiff(t,e,{authz:this.access,merge:!1})};this.canonizePrunedVersion=()=>{this.applyPendingOperations(this.getPruneDiff())};this.addConfirmedData=e=>{this.ctx.log("debug","Entity: adding confirmed data",this.oid);let t=this.metadataFamily.addConfirmedData(e);for(let r of t)this.change(r)};this.replaceAllData=e=>{this.ctx.log("debug","Entity: replacing all data",this.oid);let t=this.metadataFamily.replaceAllData(e);for(let r of t)this.change(r)};this.resetAllData=()=>{this.ctx.log("debug","Entity: resetting all data",this.oid),this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this._viewData=void 0;let e=this.metadataFamily.replaceAllData({});for(let t of e)this.change(t)};this.invalidateCachedView=()=>{this._viewData=void 0,this.cachedView=void 0};this.change=e=>{if(e.oid===this.oid)this.invalidateCachedView(),this.parent?this.changeNested(e):this.changeRoot(e);else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.change(e)}};this.changeRoot=e=>{this.deleted?this.wasDeletedLastChange||(this.ctx.log("debug","Entity deleted",this.oid),this.emit("delete",{isLocal:e.isLocal}),this.wasDeletedLastChange=!0):(this.wasDeletedLastChange&&(this.ctx.log("debug","Entity restored",this.oid),this.emit("restore",{isLocal:e.isLocal}),this.wasDeletedLastChange=!1),this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal}))};this.changeNested=e=>{this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal})};this.deepChange=(e,t)=>{this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this.emit("changeDeep",e,t),this.parent?.deepChange(e,t)};this[Ma]=e=>{this.deepChange(this,{isLocal:!1,oid:this.oid})};this.getChild=(e,t)=>{let r=Ue(this.schema,e);if(!r)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);return this.entityFamily.get({oid:t,schema:r,entityFamily:this.entityFamily,metadataFamily:this.metadataFamily,parent:this,ctx:this.ctx,files:this.files,fieldPath:[...this.fieldPath,e],storeEvents:this.storeEvents,deleteSelf:this.delete.bind(this,e)})};this.subscribeToField=(e,t,r)=>Qs(this,e,r);this.get=e=>{zi(e);let t=this.rawView;if(!t)throw new Error(`Cannot access data at key ${e} on deleted entity ${this.oid}`);let r=t[e],s=Ue(this.schema,e);if(!s)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);if($(r))if(he(r)){if(s.type!=="file")throw new Error(`Expected file schema for key ${String(e)}, got ${s.type}`);return this.files.get(r.id,{downloadRemote:!!s.downloadRemote,ctx:this.ctx,parent:this})}else{let o=this.getChild(e,r.id);if(o.deepInvalid){if(s.type==="array"||s.type==="map")return o;if(Ie(s))return null;if(Je(s)){let a=o.getUnprunedSnapshot(),d=this.patchCreator.createDiff(a,Ve(s),{merge:!1,mergeUnknownObjects:!0,authz:this.access});return this.processPrunedChild(e,o,d)}}return o}else{if(this.schema.type==="map"&&r===void 0)return;if(Re({field:s,value:r,fieldPath:[...this.fieldPath,e],depth:1,requireDefaults:!0}))if(Je(s)){if(rs(s))return Ve(s);let o=Ve(s),a=Se(this.oid),d=this.patchCreator.createInitialize(o,a,this.access);d.push(...this.patchCreator.createSet(this.oid,e,ne(a),this.access));let h=this.getChild(e,a);return this.processPrunedChild(e,h,d)}else return;return r}};this.processPrunedChild=(e,t,r)=>{this.ctx.log("warn","Replacing invalid child object field with ephemeral, valid data",this.oid,e);let s=this.metadataFamily.addEphemeralData(r);for(let o of s)this.change(o);return t};this.getOrSet=(e,t)=>{zi(e);let r=this.get(e);return r||(this.set(e,t),this.get(e))};this.processInputValue=(e,t)=>{if(this.readonlyKeys.includes(t))throw new Error(`Cannot set readonly key ${t.toString()}`);it(e)||(e=de(e,!1));let r=Ue(this.schema,t);if(r){We(e,r);let s=Re({field:r,value:e,fieldPath:[...this.fieldPath,t]});if(s)throw new Error(`Validation error: ${s.message}`,{cause:s})}return lt(e,s=>this.files.add(s,this))};this.getDeleteMode=e=>{if(this.readonlyKeys.includes(e))return!1;if(this.schema.type==="any"||this.schema.type==="map")return"delete";if(this.schema.type==="object"){let t=this.schema.properties[e];if(!t||t.type==="any")return"delete";if(t.type==="map")return!1;if(t.nullable)return"null"}return!1};this.getItemRefValue=e=>{if(e instanceof i)return ne(e.oid);if(e instanceof be)return xt(e.id);if(typeof e=="object"){let t=G(e);if(!t||!this.entityFamily.has(t))throw new Error(`Cannot move object ${JSON.stringify(e)} which does not exist in this list`);return ne(t)}else return e};this.set=(e,t,r)=>{zi(e),!(!r?.force&&this.get(e)===t)&&(this.isList?this.addPendingOperations(this.patchCreator.createListSet(this.oid,e,this.processInputValue(t,e))):this.addPendingOperations(this.patchCreator.createSet(this.oid,e,this.processInputValue(t,e))))};this.getAll=()=>this.view;this.delete=e=>{if(this.isList)ja(e),this.addPendingOperations(this.patchCreator.createListDelete(this.oid,e));else{let t=this.getDeleteMode(e);if(!t)throw new Error(`Cannot delete key ${e.toString()} - the property is not marked as optional in the schema.`);t==="delete"?this.addPendingOperations(this.patchCreator.createRemove(this.oid,e)):this.addPendingOperations(this.patchCreator.createSet(this.oid,e,null))}};this.keys=()=>this.view?Object.keys(this.view):[];this.entries=()=>this.view?Object.entries(this.view):[];this.values=()=>this.view?Object.values(this.view):[];this.update=(e,{merge:t=!0,replaceSubObjects:r=!1,preserveUndefined:s=!1,dangerouslyDisableMerge:o=!1}={})=>{if(!t&&!o&&this.schema.type!=="any"&&this.schema.type!=="map")throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');let a={};z(a,this.oid);for(let[d,h]of Object.entries(e)){if(this.readonlyKeys.includes(d))throw new Error(`Cannot set readonly key ${d.toString()}`);if(h===void 0&&!s)continue;let p=Ue(this.schema,d);p&&We(h,p),a[d]=this.processInputValue(h,d)}this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(),a,{mergeUnknownObjects:!r,merge:t}))};this.push=e=>{this.addPendingOperations(this.patchCreator.createListPush(this.oid,this.processInputValue(e,this.view.length)))};this.insert=(e,t)=>{this.addPendingOperations(this.patchCreator.createListInsert(this.oid,e,this.processInputValue(t,e)))};this.move=(e,t)=>{this.addPendingOperations(this.patchCreator.createListMoveByIndex(this.oid,e,t))};this.moveItem=(e,t)=>{let r=this.getItemRefValue(e);if($(r))this.addPendingOperations(this.patchCreator.createListMoveByRef(this.oid,r,t));else{let s=this.view.indexOf(e);if(s===-1)throw new Error(`Cannot move item ${JSON.stringify(e)} which does not exist in this list`);this.move(s,t)}};this.add=e=>{this.addPendingOperations(this.patchCreator.createListAdd(this.oid,this.processInputValue(e,this.view.length)))};this.removeAll=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e)))};this.removeFirst=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"first"))};this.removeLast=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"last"))};this.map=e=>this.view.map(e);this.filter=e=>this.view.filter(e);this.has=e=>{if(!this.isList)throw new Error("has() is only available on list entities");let t=this.getItemRefValue(e);return $(t)?this.view.some(r=>{if($(r))return Ce(r,t)}):this.view.includes(e)};this.forEach=e=>{this.view.forEach(e)};this.reduce=(e,t)=>this.view.reduce(e,t);this.some=e=>this.view.some(e);this.every=e=>this.view.every(e);this.find=e=>this.view.find(e);this.includes=this.has;this.deleteSelf=()=>this._deleteSelf();this.__getViewData__=(e,t)=>this.metadataFamily.get(e).computeView(t==="confirmed");this.__getFamilyOids__=()=>this.metadataFamily.getAllOids();this.__discardPendingOperation__=e=>{this.metadataFamily.discardPendingOperation(e),this.invalidateCachedView()};L(!!e,"oid is required"),this.oid=e,this.readonlyKeys=d||[],this.ctx=o,this.files=h,this.schema=t,this.fieldPath=v||[],this.entityFamily=r||new xn({initial:[this],ctx:o}),this.metadataFamily=a,this.storeEvents=p,this.parent=s,this._deleteSelf=O,this.parent||(p.add.attach(this.onAdd),p.replace.attach(this.onReplace),p.resetAll.attach(this.onResetAll))}get[Ws](){return this.ctx}get metadata(){return this.metadataFamily.get(this.oid)}get patchCreator(){return this.ctx.patchCreator}get viewData(){return this._viewData===void 0&&(this._viewData=this.metadata.computeView(),this.validate()),this._viewData}get rawView(){return this.viewData.view}get view(){if(this.cachedView!==void 0)return this.cachedView;if(this.viewData.deleted)return null;let e=this.rawView;if(!e&&!Ie(this.schema)||this.schema.type==="array"&&!Array.isArray(e)||(this.schema.type==="object"||this.schema.type==="map")&&!V(e))return Je(this.schema)?Ve(this.schema):null;let r=this.isList?[]:{};if(z(r,this.oid),Array.isArray(e)){let s=Ue(this.schema,0);if(!s)this.ctx.log("error","No child field schema for list entity.",this.oid);else for(let o=0;o<e.length;o++){let a=this.get(o);this.childIsNull(a)&&!Ie(s)?this.ctx.log("error","Child missing in non-nullable field",this.oid,"index:",o):r.push(a)}}else if(V(e)){let s=this.schema.type==="object"?Object.keys(this.schema.properties):Object.keys(e);for(let o of s){let a=Ue(this.schema,o);if(!a){this.ctx.log("error","No child field schema for object entity at key",o),this.schema.type==="map"?r={}:r=null;break}let d=this.get(o);if(this.childIsNull(d)&&!Ie(a)){if(this.ctx.log("error","Child entity is missing for non-nullable field",this.oid,"key:",o),this.schema.type!=="map"){r=null;break}}else Ie(a)&&d===void 0?r[o]=null:r[o]=d}}return this.cachedView=r,r}get uid(){return this.oid}get deleted(){return this.viewData.deleted||this.view===null}get invalid(){return!!this.validate()}get deepInvalid(){if(this.invalid)return!0;if(Array.isArray(this.rawView)){for(let e=0;e<this.rawView.length;e++)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}else if(V(this.rawView)){for(let e in this.rawView)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}return!1}get isList(){return this.schema.type==="array"||Array.isArray(this.viewData.view)}get updatedAt(){return this.viewData.updatedAt}get deepUpdatedAt(){if(this.cachedDeepUpdatedAt)return this.cachedDeepUpdatedAt;let e=this.updatedAt;return this.isList?this.forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}):this.values().forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}),this.cachedDeepUpdatedAt=e,e}get isOutdatedVersion(){return this.parent?this.parent.isOutdatedVersion:this.viewData.fromOlderVersion}get namespace(){return this.ctx.namespace}get access(){return this.viewData.authz}get isAuthorized(){return!!this.access}get size(){return this.isList?this.length:this.keys().length}get length(){return this.view.length}[(Ma=Ni,Symbol.iterator)](){let e=0,t=this.view?.length;return{next:()=>e<t?{value:this.get(e++),done:!1}:{value:void 0,done:!0}}}};function zi(i){if(typeof i=="symbol")throw new Error("Symbol keys aren't supported")}function ja(i){if(typeof i!="number")throw new Error("Only number keys are supported in list entities")}function Js(i){return i[Ws].getClient()}var $i=class{constructor({oid:n,ctx:e,confirmedOperations:t,pendingOperations:r,baseline:s}){this.baseline=null;this.confirmedOperations=[];this.ephemeralOperations=[];this.pendingOperations=[];this.computeView=(n=!1)=>{let e=de(this.baseline?.snapshot??void 0),t=this.baseline?.timestamp??null,r=this.baseline?.authz,s=this.applyOperations(e,!e,this.confirmedOperations,t,t);s.futureSeen&&this.ctx.globalEvents.emit("futureSeen",s.futureSeen),s.authz&&(r=s.authz);let o=!this.ephemeralOperations||n?s:this.applyOperations(s.view,s.deleted,this.ephemeralOperations,s.latestTimestamp,null),a=n?s:this.applyOperations(o.view,o.deleted,this.pendingOperations,o.latestTimestamp,null);a.authz&&(r=a.authz),a.view&&z(a.view,this.oid);let d=!!s.latestTimestamp&&Ii(s.latestTimestamp,this.ctx.time.now)<0,h=!this.baseline&&!this.pendingOperations.length&&!this.confirmedOperations.length;h&&this.ctx.log("warn",`Tried to load Entity ${this.oid} with no data`);let p=a.latestTimestamp??s.latestTimestamp??t,O=p?Ei(p):0;return!a.view&&!a.deleted&&!h&&this.ctx.log("warn",`Entity ${this.oid} has no view, no deleted flag, and not empty`),{view:a.view??void 0,deleted:a.deleted,empty:h,fromOlderVersion:d,updatedAt:O,latestTimestamp:p,authz:r}};this.addBaseline=n=>{if(!(this.baseline&&this.baseline.timestamp>=n.timestamp))for(this.baseline=n;this.confirmedOperations[0]?.timestamp<n.timestamp;)this.confirmedOperations.shift()};this.addConfirmedOperations=n=>{let e=0;for(let t of n){let r=this.confirmedOperations.findIndex(o=>o.timestamp>=t.timestamp);r!==-1?this.confirmedOperations[r].timestamp!==t.timestamp&&(this.confirmedOperations.splice(r,0,t),e++):(this.confirmedOperations.push(t),e++);let s=this.pendingOperations.length;this.discardPendingOperation(t),e-=s-this.pendingOperations.length}return e};this.addPendingOperation=n=>{this.pendingOperations.push(n)};this.addEphemeralOperation=n=>{this.ephemeralOperations||(this.ephemeralOperations=[]),this.ephemeralOperations.push(n)};this.clearEphemeralOperations=()=>{let n=this.ephemeralOperations;return this.ephemeralOperations=[],n};this.discardPendingOperation=n=>{this.pendingOperations=this.pendingOperations.filter(e=>e.timestamp!==n.timestamp)};this.applyOperations=(n,e,t,r,s)=>{let o,a,d=this.ctx.time.now;for(let h of t)if(!(s&&h.timestamp<=s)){if(Ii(h.timestamp,d)>0){o=h.timestamp;continue}h.data.op==="delete"?e=!0:(n=Be(n,h.data),h.data.op==="initialize"&&(e=!1,h.authz&&(a=h.authz))),(!r||h.timestamp>r)&&(r=h.timestamp)}return{view:n,latestTimestamp:r??null,deleted:e,futureSeen:o,authz:a}};L(n,"oid is required"),this.ctx=e,this.oid=n,t&&(this.confirmedOperations=t),r&&(this.pendingOperations=r),s&&(this.baseline=s)}},Sn=class{constructor({ctx:n,onPendingOperations:e,rootOid:t}){this.entities=new Map;this.get=n=>(L(n,"oid is required"),this.entities.has(n)||this.entities.set(n,new $i({oid:n,ctx:this.ctx})),this.entities.get(n));this.getAllOids=()=>Array.from(this.entities.keys());this.addConfirmedData=({baselines:n=[],operations:e={},isLocal:t=!1})=>{let r={};for(let s of n){if(!Le(this.rootOid,s.oid))throw new Error(`Invalid baseline for entity ${this.rootOid}: `+JSON.stringify(s));this.get(s.oid).addBaseline(s),r[s.oid]??={oid:s.oid,isLocal:t}}for(let[s,o]of Object.entries(e)){if(!Le(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o)!==0&&(r[s]??={oid:s,isLocal:t})}return Object.values(r)};this.addPendingData=n=>{this.flushAllEphemeral();let e={};for(let t of n)this.get(t.oid).addPendingOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return this.onPendingOperations(n),Object.values(e)};this.ephemeralMemo=new Array;this.flushAllEphemeral=()=>{for(let n of this.entities.values()){let e=n.clearEphemeralOperations();e&&this.ephemeralMemo.push(...e)}if(this.ephemeralMemo.length){let n=this.ephemeralMemo.slice();this.ephemeralMemo.length=0,this.addPendingData(n)}};this.addEphemeralData=n=>{let e={};for(let t of n)this.get(t.oid).addEphemeralOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return Object.values(e)};this.replaceAllData=({operations:n={},baselines:e=[]})=>{let t=Array.from(this.entities.keys());this.entities.clear();let r={};for(let s of t)r[s]={oid:s,isLocal:!1};for(let s of e){if(!Le(this.rootOid,s.oid))throw new Error(`Invalid baseline for entity ${this.rootOid}: `+JSON.stringify(s));this.get(s.oid).addBaseline(s),r[s.oid]??={oid:s.oid,isLocal:!1}}for(let[s,o]of Object.entries(n)){if(!Le(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o),r[s]??={oid:s,isLocal:!1}}return Object.values(r)};this.discardPendingOperation=n=>{this.entities.get(n.oid)?.discardPendingOperation(n)};this.ctx=n,this.rootOid=t,this.onPendingOperations=e}};var kt="@@default",On=class{constructor({batchTimeout:n=200,ctx:e,entities:t}){this.currentBatchKey=kt;this.flushOperations=async(n,e,t)=>{if(!n.length)return;this.ctx.log("debug","Flushing",n.length,"operations from batch",e,"to storage / sync");let r=[],s={};for(let o=n.length-1;o>=0;o--){let a=n[o],d=s[a.oid];if(d&&Rr(a,d)){this.entities.discardPendingOperation(a);continue}let h=Ar(a);h!==!1&&(s[a.oid]||(s[a.oid]=new Set),s[a.oid].add(h)),r.unshift(a)}for(let o of r)o.timestamp=this.ctx.time.now;await this.commitOperations(r,t)};this.commitOperations=async(n,e)=>{if(n.length){if(e.undoable){let t=await this.createUndo({ops:n,source:e.source});t&&this.ctx.undoHistory.addUndo(t)}await this.entities.addData({operations:n,baselines:[],isLocal:!0})}};this.addOperations=n=>{n.length&&(this.batcher.add({key:this.currentBatchKey,items:n}),this.ctx.log("debug","added",n.length,"ops to batch",this.currentBatchKey,", size = ",this.batcher.getSize(this.currentBatchKey)))};this.batch=({undoable:n=!0,batchName:e=wt(),max:t=null,timeout:r=this.defaultBatchTimeout}={})=>{let s=this.batcher.add({key:e,max:t,timeout:r,items:[],userData:{undoable:n}}),o={run:a=>(this.currentBatchKey=e,a(),this.currentBatchKey=kt,o),commit:async()=>(await this.batcher.flush(kt),s.flush()),flush:()=>o.commit(),discard:()=>{this.batcher.discard(e)}};return o};this.flushAll=()=>(this.ctx.log("debug","Flushing all operations"),Promise.all(this.batcher.flushAll()));this.createUndo=async n=>{let e=await this.getInverseOperations(n);return e.length?async()=>{let t=await this.createUndo({ops:e,source:n.source,isRedo:!0});for(let r of e)r.timestamp=this.ctx.time.now;return this.ctx.log("debug",n.isRedo?"Redo":"Undo",e,`
4
+ `)},_domwindow:function(){return m("domwindow")},_bigint:function(d){return m("bigint:"+d.toString())},_process:function(){return m("process")},_timer:function(){return m("timer")},_pipe:function(){return m("pipe")},_tcp:function(){return m("tcp")},_udp:function(){return m("udp")},_tty:function(){return m("tty")},_statwatcher:function(){return m("statwatcher")},_securecontext:function(){return m("securecontext")},_connection:function(){return m("connection")},_zlib:function(){return m("zlib")},_context:function(){return m("context")},_nodescript:function(){return m("nodescript")},_httpparser:function(){return m("httpparser")},_dataview:function(){return m("dataview")},_signal:function(){return m("signal")},_fsevent:function(){return m("fsevent")},_tlswrap:function(){return m("tlswrap")}}}function k(){return{buf:"",write:function(b){this.buf+=b},end:function(b){this.buf+=b},read:function(){return this.buf}}}e.writeToStream=function(b,S,u){return u===void 0&&(u=S,S={}),D(S=_(b,S),u).dispatch(b)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){(function(v){"use strict";var P=typeof Uint8Array<"u"?Uint8Array:Array,y="+".charCodeAt(0),I="/".charCodeAt(0),_="0".charCodeAt(0),E="a".charCodeAt(0),D="A".charCodeAt(0),k="-".charCodeAt(0),b="_".charCodeAt(0);function S(u){return u=u.charCodeAt(0),u===y||u===k?62:u===I||u===b?63:u<_?-1:u<_+10?u-_+26+26:u<D+26?u-D:u<E+26?u-E+26:void 0}v.toByteArray=function(u){var m,d;if(0<u.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var w=u.length,w=u.charAt(w-2)==="="?2:u.charAt(w-1)==="="?1:0,x=new P(3*u.length/4-w),j=0<w?u.length-4:u.length,B=0;function M(T){x[B++]=T}for(m=0;m<j;m+=4,0)M((16711680&(d=S(u.charAt(m))<<18|S(u.charAt(m+1))<<12|S(u.charAt(m+2))<<6|S(u.charAt(m+3))))>>16),M((65280&d)>>8),M(255&d);return w==2?M(255&(d=S(u.charAt(m))<<2|S(u.charAt(m+1))>>4)):w==1&&(M((d=S(u.charAt(m))<<10|S(u.charAt(m+1))<<4|S(u.charAt(m+2))>>2)>>8&255),M(255&d)),x},v.fromByteArray=function(u){var m,d,w,x,j=u.length%3,B="";function M(T){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(T)}for(m=0,w=u.length-j;m<w;m+=3)d=(u[m]<<16)+(u[m+1]<<8)+u[m+2],B+=M((x=d)>>18&63)+M(x>>12&63)+M(x>>6&63)+M(63&x);switch(j){case 1:B=(B+=M((d=u[u.length-1])>>2))+M(d<<4&63)+"==";break;case 2:B=(B=(B+=M((d=(u[u.length-2]<<8)+u[u.length-1])>>10))+M(d>>4&63))+M(d<<2&63)+"="}return B}})(e===void 0?this.base64js={}:e)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(i,n,e){(function(t,r,y,o,a,l,p,h,O){var v=i("base64-js"),P=i("ieee754");function y(c,f,g){if(!(this instanceof y))return new y(c,f,g);var A,C,F,U,J=typeof c;if(f==="base64"&&J=="string")for(c=(U=c).trim?U.trim():U.replace(/^\s+|\s+$/g,"");c.length%4!=0;)c+="=";if(J=="number")A=ie(c);else if(J=="string")A=y.byteLength(c,f);else{if(J!="object")throw new Error("First argument needs to be a number, array or string.");A=ie(c.length)}if(y._useTypedArrays?C=y._augment(new Uint8Array(A)):((C=this).length=A,C._isBuffer=!0),y._useTypedArrays&&typeof c.byteLength=="number")C._set(c);else if(W(U=c)||y.isBuffer(U)||U&&typeof U=="object"&&typeof U.length=="number")for(F=0;F<A;F++)y.isBuffer(c)?C[F]=c.readUInt8(F):C[F]=c[F];else if(J=="string")C.write(c,0,f);else if(J=="number"&&!y._useTypedArrays&&!g)for(F=0;F<A;F++)C[F]=0;return C}function I(c,f,g,A){return y._charsWritten=jt(function(C){for(var F=[],U=0;U<C.length;U++)F.push(255&C.charCodeAt(U));return F}(f),c,g,A)}function _(c,f,g,A){return y._charsWritten=jt(function(C){for(var F,U,J=[],X=0;X<C.length;X++)U=C.charCodeAt(X),F=U>>8,U=U%256,J.push(U),J.push(F);return J}(f),c,g,A)}function E(c,f,g){var A="";g=Math.min(c.length,g);for(var C=f;C<g;C++)A+=String.fromCharCode(c[C]);return A}function D(c,f,g,F){F||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+1<c.length,"Trying to read beyond buffer length"));var C,F=c.length;if(!(F<=f))return g?(C=c[f],f+1<F&&(C|=c[f+1]<<8)):(C=c[f]<<8,f+1<F&&(C|=c[f+1])),C}function k(c,f,g,F){F||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+3<c.length,"Trying to read beyond buffer length"));var C,F=c.length;if(!(F<=f))return g?(f+2<F&&(C=c[f+2]<<16),f+1<F&&(C|=c[f+1]<<8),C|=c[f],f+3<F&&(C+=c[f+3]<<24>>>0)):(f+1<F&&(C=c[f+1]<<16),f+2<F&&(C|=c[f+2]<<8),f+3<F&&(C|=c[f+3]),C+=c[f]<<24>>>0),C}function b(c,f,g,A){if(A||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+1<c.length,"Trying to read beyond buffer length")),!(c.length<=f))return A=D(c,f,g,!0),32768&A?-1*(65535-A+1):A}function S(c,f,g,A){if(A||(R(typeof g=="boolean","missing or invalid endian"),R(f!=null,"missing offset"),R(f+3<c.length,"Trying to read beyond buffer length")),!(c.length<=f))return A=k(c,f,g,!0),2147483648&A?-1*(4294967295-A+1):A}function u(c,f,g,A){return A||(R(typeof g=="boolean","missing or invalid endian"),R(f+3<c.length,"Trying to read beyond buffer length")),P.read(c,f,g,23,4)}function m(c,f,g,A){return A||(R(typeof g=="boolean","missing or invalid endian"),R(f+7<c.length,"Trying to read beyond buffer length")),P.read(c,f,g,52,8)}function d(c,f,g,A,C){if(C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+1<c.length,"trying to write beyond buffer length"),ni(f,65535)),C=c.length,!(C<=g))for(var F=0,U=Math.min(C-g,2);F<U;F++)c[g+F]=(f&255<<8*(A?F:1-F))>>>8*(A?F:1-F)}function w(c,f,g,A,C){if(C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"trying to write beyond buffer length"),ni(f,4294967295)),C=c.length,!(C<=g))for(var F=0,U=Math.min(C-g,4);F<U;F++)c[g+F]=f>>>8*(A?F:3-F)&255}function x(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+1<c.length,"Trying to write beyond buffer length"),ii(f,32767,-32768)),c.length<=g||d(c,0<=f?f:65535+f+1,g,A,C)}function j(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"Trying to write beyond buffer length"),ii(f,2147483647,-2147483648)),c.length<=g||w(c,0<=f?f:4294967295+f+1,g,A,C)}function B(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"Trying to write beyond buffer length"),dr(f,34028234663852886e22,-34028234663852886e22)),c.length<=g||P.write(c,f,g,A,23,4)}function M(c,f,g,A,C){C||(R(f!=null,"missing value"),R(typeof A=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+7<c.length,"Trying to write beyond buffer length"),dr(f,17976931348623157e292,-17976931348623157e292)),c.length<=g||P.write(c,f,g,A,52,8)}e.Buffer=y,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,y.poolSize=8192,y._useTypedArrays=function(){try{var c=new ArrayBuffer(0),f=new Uint8Array(c);return f.foo=function(){return 42},f.foo()===42&&typeof f.subarray=="function"}catch{return!1}}(),y.isEncoding=function(c){switch(String(c).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},y.isBuffer=function(c){return!(c==null||!c._isBuffer)},y.byteLength=function(c,f){var g;switch(c+="",f||"utf8"){case"hex":g=c.length/2;break;case"utf8":case"utf-8":g=De(c).length;break;case"ascii":case"binary":case"raw":g=c.length;break;case"base64":g=cr(c).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":g=2*c.length;break;default:throw new Error("Unknown encoding")}return g},y.concat=function(c,f){if(R(W(c),`Usage: Buffer.concat(list, [totalLength])
5
+ list should be an Array.`),c.length===0)return new y(0);if(c.length===1)return c[0];if(typeof f!="number")for(C=f=0;C<c.length;C++)f+=c[C].length;for(var g=new y(f),A=0,C=0;C<c.length;C++){var F=c[C];F.copy(g,A),A+=F.length}return g},y.prototype.write=function(c,f,g,A){isFinite(f)?isFinite(g)||(A=g,g=void 0):(X=A,A=f,f=g,g=X),f=Number(f)||0;var C,F,U,J,X=this.length-f;switch((!g||X<(g=Number(g)))&&(g=X),A=String(A||"utf8").toLowerCase()){case"hex":C=function(xe,ae,ce,Z){ce=Number(ce)||0;var Y=xe.length-ce;(!Z||Y<(Z=Number(Z)))&&(Z=Y),R((Y=ae.length)%2==0,"Invalid hex string"),Y/2<Z&&(Z=Y/2);for(var et=0;et<Z;et++){var ur=parseInt(ae.substr(2*et,2),16);R(!isNaN(ur),"Invalid hex string"),xe[ce+et]=ur}return y._charsWritten=2*et,et}(this,c,f,g);break;case"utf8":case"utf-8":F=this,U=f,J=g,C=y._charsWritten=jt(De(c),F,U,J);break;case"ascii":case"binary":C=I(this,c,f,g);break;case"base64":F=this,U=f,J=g,C=y._charsWritten=jt(cr(c),F,U,J);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":C=_(this,c,f,g);break;default:throw new Error("Unknown encoding")}return C},y.prototype.toString=function(c,f,g){var A,C,F,U,J=this;if(c=String(c||"utf8").toLowerCase(),f=Number(f)||0,(g=g!==void 0?Number(g):J.length)===f)return"";switch(c){case"hex":A=function(X,xe,ae){var ce=X.length;(!xe||xe<0)&&(xe=0),(!ae||ae<0||ce<ae)&&(ae=ce);for(var Z="",Y=xe;Y<ae;Y++)Z+=H(X[Y]);return Z}(J,f,g);break;case"utf8":case"utf-8":A=function(X,xe,ae){var ce="",Z="";ae=Math.min(X.length,ae);for(var Y=xe;Y<ae;Y++)X[Y]<=127?(ce+=lr(Z)+String.fromCharCode(X[Y]),Z=""):Z+="%"+X[Y].toString(16);return ce+lr(Z)}(J,f,g);break;case"ascii":case"binary":A=E(J,f,g);break;case"base64":C=J,U=g,A=(F=f)===0&&U===C.length?v.fromByteArray(C):v.fromByteArray(C.slice(F,U));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":A=function(X,xe,ae){for(var ce=X.slice(xe,ae),Z="",Y=0;Y<ce.length;Y+=2)Z+=String.fromCharCode(ce[Y]+256*ce[Y+1]);return Z}(J,f,g);break;default:throw new Error("Unknown encoding")}return A},y.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},y.prototype.copy=function(c,f,g,A){if(f=f||0,(A=A||A===0?A:this.length)!==(g=g||0)&&c.length!==0&&this.length!==0){R(g<=A,"sourceEnd < sourceStart"),R(0<=f&&f<c.length,"targetStart out of bounds"),R(0<=g&&g<this.length,"sourceStart out of bounds"),R(0<=A&&A<=this.length,"sourceEnd out of bounds"),A>this.length&&(A=this.length);var C=(A=c.length-f<A-g?c.length-f+g:A)-g;if(C<100||!y._useTypedArrays)for(var F=0;F<C;F++)c[F+f]=this[F+g];else c._set(this.subarray(g,g+C),f)}},y.prototype.slice=function(c,f){var g=this.length;if(c=Q(c,g,0),f=Q(f,g,g),y._useTypedArrays)return y._augment(this.subarray(c,f));for(var A=f-c,C=new y(A,void 0,!0),F=0;F<A;F++)C[F]=this[F+c];return C},y.prototype.get=function(c){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(c)},y.prototype.set=function(c,f){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(c,f)},y.prototype.readUInt8=function(c,f){if(f||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return this[c]},y.prototype.readUInt16LE=function(c,f){return D(this,c,!0,f)},y.prototype.readUInt16BE=function(c,f){return D(this,c,!1,f)},y.prototype.readUInt32LE=function(c,f){return k(this,c,!0,f)},y.prototype.readUInt32BE=function(c,f){return k(this,c,!1,f)},y.prototype.readInt8=function(c,f){if(f||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return 128&this[c]?-1*(255-this[c]+1):this[c]},y.prototype.readInt16LE=function(c,f){return b(this,c,!0,f)},y.prototype.readInt16BE=function(c,f){return b(this,c,!1,f)},y.prototype.readInt32LE=function(c,f){return S(this,c,!0,f)},y.prototype.readInt32BE=function(c,f){return S(this,c,!1,f)},y.prototype.readFloatLE=function(c,f){return u(this,c,!0,f)},y.prototype.readFloatBE=function(c,f){return u(this,c,!1,f)},y.prototype.readDoubleLE=function(c,f){return m(this,c,!0,f)},y.prototype.readDoubleBE=function(c,f){return m(this,c,!1,f)},y.prototype.writeUInt8=function(c,f,g){g||(R(c!=null,"missing value"),R(f!=null,"missing offset"),R(f<this.length,"trying to write beyond buffer length"),ni(c,255)),f>=this.length||(this[f]=c)},y.prototype.writeUInt16LE=function(c,f,g){d(this,c,f,!0,g)},y.prototype.writeUInt16BE=function(c,f,g){d(this,c,f,!1,g)},y.prototype.writeUInt32LE=function(c,f,g){w(this,c,f,!0,g)},y.prototype.writeUInt32BE=function(c,f,g){w(this,c,f,!1,g)},y.prototype.writeInt8=function(c,f,g){g||(R(c!=null,"missing value"),R(f!=null,"missing offset"),R(f<this.length,"Trying to write beyond buffer length"),ii(c,127,-128)),f>=this.length||(0<=c?this.writeUInt8(c,f,g):this.writeUInt8(255+c+1,f,g))},y.prototype.writeInt16LE=function(c,f,g){x(this,c,f,!0,g)},y.prototype.writeInt16BE=function(c,f,g){x(this,c,f,!1,g)},y.prototype.writeInt32LE=function(c,f,g){j(this,c,f,!0,g)},y.prototype.writeInt32BE=function(c,f,g){j(this,c,f,!1,g)},y.prototype.writeFloatLE=function(c,f,g){B(this,c,f,!0,g)},y.prototype.writeFloatBE=function(c,f,g){B(this,c,f,!1,g)},y.prototype.writeDoubleLE=function(c,f,g){M(this,c,f,!0,g)},y.prototype.writeDoubleBE=function(c,f,g){M(this,c,f,!1,g)},y.prototype.fill=function(c,f,g){if(f=f||0,g=g||this.length,R(typeof(c=typeof(c=c||0)=="string"?c.charCodeAt(0):c)=="number"&&!isNaN(c),"value is not a number"),R(f<=g,"end < start"),g!==f&&this.length!==0){R(0<=f&&f<this.length,"start out of bounds"),R(0<=g&&g<=this.length,"end out of bounds");for(var A=f;A<g;A++)this[A]=c}},y.prototype.inspect=function(){for(var c=[],f=this.length,g=0;g<f;g++)if(c[g]=H(this[g]),g===e.INSPECT_MAX_BYTES){c[g+1]="...";break}return"<Buffer "+c.join(" ")+">"},y.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw new Error("Buffer.toArrayBuffer not supported in this browser");if(y._useTypedArrays)return new y(this).buffer;for(var c=new Uint8Array(this.length),f=0,g=c.length;f<g;f+=1)c[f]=this[f];return c.buffer};var T=y.prototype;function Q(c,f,g){return typeof c!="number"?g:f<=(c=~~c)?f:0<=c||0<=(c+=f)?c:0}function ie(c){return(c=~~Math.ceil(+c))<0?0:c}function W(c){return(Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"})(c)}function H(c){return c<16?"0"+c.toString(16):c.toString(16)}function De(c){for(var f=[],g=0;g<c.length;g++){var A=c.charCodeAt(g);if(A<=127)f.push(c.charCodeAt(g));else for(var C=g,F=(55296<=A&&A<=57343&&g++,encodeURIComponent(c.slice(C,g+1)).substr(1).split("%")),U=0;U<F.length;U++)f.push(parseInt(F[U],16))}return f}function cr(c){return v.toByteArray(c)}function jt(c,f,g,A){for(var C=0;C<A&&!(C+g>=f.length||C>=c.length);C++)f[C+g]=c[C];return C}function lr(c){try{return decodeURIComponent(c)}catch{return String.fromCharCode(65533)}}function ni(c,f){R(typeof c=="number","cannot write a non-number as a number"),R(0<=c,"specified a negative value for writing an unsigned value"),R(c<=f,"value is larger than maximum value for type"),R(Math.floor(c)===c,"value has a fractional component")}function ii(c,f,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=f,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value"),R(Math.floor(c)===c,"value has a fractional component")}function dr(c,f,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=f,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value")}function R(c,f){if(!c)throw new Error(f||"Failed assertion")}y._augment=function(c){return c._isBuffer=!0,c._get=c.get,c._set=c.set,c.get=T.get,c.set=T.set,c.write=T.write,c.toString=T.toString,c.toLocaleString=T.toString,c.toJSON=T.toJSON,c.copy=T.copy,c.slice=T.slice,c.readUInt8=T.readUInt8,c.readUInt16LE=T.readUInt16LE,c.readUInt16BE=T.readUInt16BE,c.readUInt32LE=T.readUInt32LE,c.readUInt32BE=T.readUInt32BE,c.readInt8=T.readInt8,c.readInt16LE=T.readInt16LE,c.readInt16BE=T.readInt16BE,c.readInt32LE=T.readInt32LE,c.readInt32BE=T.readInt32BE,c.readFloatLE=T.readFloatLE,c.readFloatBE=T.readFloatBE,c.readDoubleLE=T.readDoubleLE,c.readDoubleBE=T.readDoubleBE,c.writeUInt8=T.writeUInt8,c.writeUInt16LE=T.writeUInt16LE,c.writeUInt16BE=T.writeUInt16BE,c.writeUInt32LE=T.writeUInt32LE,c.writeUInt32BE=T.writeUInt32BE,c.writeInt8=T.writeInt8,c.writeInt16LE=T.writeInt16LE,c.writeInt16BE=T.writeInt16BE,c.writeInt32LE=T.writeInt32LE,c.writeInt32BE=T.writeInt32BE,c.writeFloatLE=T.writeFloatLE,c.writeFloatBE=T.writeFloatBE,c.writeDoubleLE=T.writeDoubleLE,c.writeDoubleBE=T.writeDoubleBE,c.fill=T.fill,c.inspect=T.inspect,c.toArrayBuffer=T.toArrayBuffer,c}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(i,n,e){(function(t,r,v,o,a,l,p,h,O){var v=i("buffer").Buffer,P=4,y=new v(P);y.fill(0),n.exports={hash:function(I,_,E,D){for(var k=_(function(d,w){d.length%P!=0&&(x=d.length+(P-d.length%P),d=v.concat([d,y],x));for(var x,j=[],B=w?d.readInt32BE:d.readInt32LE,M=0;M<d.length;M+=P)j.push(B.call(d,M));return j}(I=v.isBuffer(I)?I:new v(I),D),8*I.length),_=D,b=new v(E),S=_?b.writeInt32BE:b.writeInt32LE,u=0;u<k.length;u++)S.call(b,k[u],4*u,!0);return b}}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(i,n,e){(function(t,r,v,o,a,l,p,h,O){var v=i("buffer").Buffer,P=i("./sha"),y=i("./sha256"),I=i("./rng"),_={sha1:P,sha256:y,md5:i("./md5")},E=64,D=new v(E);function k(d,w){var x=_[d=d||"sha1"],j=[];return x||b("algorithm:",d,"is not yet supported"),{update:function(B){return v.isBuffer(B)||(B=new v(B)),j.push(B),B.length,this},digest:function(B){var M=v.concat(j),M=w?function(T,Q,ie){v.isBuffer(Q)||(Q=new v(Q)),v.isBuffer(ie)||(ie=new v(ie)),Q.length>E?Q=T(Q):Q.length<E&&(Q=v.concat([Q,D],E));for(var W=new v(E),H=new v(E),De=0;De<E;De++)W[De]=54^Q[De],H[De]=92^Q[De];return ie=T(v.concat([W,ie])),T(v.concat([H,ie]))}(x,w,M):x(M);return j=null,B?M.toString(B):M}}}function b(){var d=[].slice.call(arguments).join(" ");throw new Error([d,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
6
+ `))}D.fill(0),e.createHash=function(d){return k(d)},e.createHmac=k,e.randomBytes=function(d,w){if(!w||!w.call)return new v(I(d));try{w.call(this,void 0,new v(I(d)))}catch(x){w(x)}};var S,u=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],m=function(d){e[d]=function(){b("sorry,",d,"is not implemented yet")}};for(S in u)m(u[S],S)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v=i("./helpers");function P(b,S){b[S>>5]|=128<<S%32,b[14+(S+64>>>9<<4)]=S;for(var u=1732584193,m=-271733879,d=-1732584194,w=271733878,x=0;x<b.length;x+=16){var j=u,B=m,M=d,T=w,u=I(u,m,d,w,b[x+0],7,-680876936),w=I(w,u,m,d,b[x+1],12,-389564586),d=I(d,w,u,m,b[x+2],17,606105819),m=I(m,d,w,u,b[x+3],22,-1044525330);u=I(u,m,d,w,b[x+4],7,-176418897),w=I(w,u,m,d,b[x+5],12,1200080426),d=I(d,w,u,m,b[x+6],17,-1473231341),m=I(m,d,w,u,b[x+7],22,-45705983),u=I(u,m,d,w,b[x+8],7,1770035416),w=I(w,u,m,d,b[x+9],12,-1958414417),d=I(d,w,u,m,b[x+10],17,-42063),m=I(m,d,w,u,b[x+11],22,-1990404162),u=I(u,m,d,w,b[x+12],7,1804603682),w=I(w,u,m,d,b[x+13],12,-40341101),d=I(d,w,u,m,b[x+14],17,-1502002290),u=_(u,m=I(m,d,w,u,b[x+15],22,1236535329),d,w,b[x+1],5,-165796510),w=_(w,u,m,d,b[x+6],9,-1069501632),d=_(d,w,u,m,b[x+11],14,643717713),m=_(m,d,w,u,b[x+0],20,-373897302),u=_(u,m,d,w,b[x+5],5,-701558691),w=_(w,u,m,d,b[x+10],9,38016083),d=_(d,w,u,m,b[x+15],14,-660478335),m=_(m,d,w,u,b[x+4],20,-405537848),u=_(u,m,d,w,b[x+9],5,568446438),w=_(w,u,m,d,b[x+14],9,-1019803690),d=_(d,w,u,m,b[x+3],14,-187363961),m=_(m,d,w,u,b[x+8],20,1163531501),u=_(u,m,d,w,b[x+13],5,-1444681467),w=_(w,u,m,d,b[x+2],9,-51403784),d=_(d,w,u,m,b[x+7],14,1735328473),u=E(u,m=_(m,d,w,u,b[x+12],20,-1926607734),d,w,b[x+5],4,-378558),w=E(w,u,m,d,b[x+8],11,-2022574463),d=E(d,w,u,m,b[x+11],16,1839030562),m=E(m,d,w,u,b[x+14],23,-35309556),u=E(u,m,d,w,b[x+1],4,-1530992060),w=E(w,u,m,d,b[x+4],11,1272893353),d=E(d,w,u,m,b[x+7],16,-155497632),m=E(m,d,w,u,b[x+10],23,-1094730640),u=E(u,m,d,w,b[x+13],4,681279174),w=E(w,u,m,d,b[x+0],11,-358537222),d=E(d,w,u,m,b[x+3],16,-722521979),m=E(m,d,w,u,b[x+6],23,76029189),u=E(u,m,d,w,b[x+9],4,-640364487),w=E(w,u,m,d,b[x+12],11,-421815835),d=E(d,w,u,m,b[x+15],16,530742520),u=D(u,m=E(m,d,w,u,b[x+2],23,-995338651),d,w,b[x+0],6,-198630844),w=D(w,u,m,d,b[x+7],10,1126891415),d=D(d,w,u,m,b[x+14],15,-1416354905),m=D(m,d,w,u,b[x+5],21,-57434055),u=D(u,m,d,w,b[x+12],6,1700485571),w=D(w,u,m,d,b[x+3],10,-1894986606),d=D(d,w,u,m,b[x+10],15,-1051523),m=D(m,d,w,u,b[x+1],21,-2054922799),u=D(u,m,d,w,b[x+8],6,1873313359),w=D(w,u,m,d,b[x+15],10,-30611744),d=D(d,w,u,m,b[x+6],15,-1560198380),m=D(m,d,w,u,b[x+13],21,1309151649),u=D(u,m,d,w,b[x+4],6,-145523070),w=D(w,u,m,d,b[x+11],10,-1120210379),d=D(d,w,u,m,b[x+2],15,718787259),m=D(m,d,w,u,b[x+9],21,-343485551),u=k(u,j),m=k(m,B),d=k(d,M),w=k(w,T)}return Array(u,m,d,w)}function y(b,S,u,m,d,w){return k((S=k(k(S,b),k(m,w)))<<d|S>>>32-d,u)}function I(b,S,u,m,d,w,x){return y(S&u|~S&m,b,S,d,w,x)}function _(b,S,u,m,d,w,x){return y(S&m|u&~m,b,S,d,w,x)}function E(b,S,u,m,d,w,x){return y(S^u^m,b,S,d,w,x)}function D(b,S,u,m,d,w,x){return y(u^(S|~m),b,S,d,w,x)}function k(b,S){var u=(65535&b)+(65535&S);return(b>>16)+(S>>16)+(u>>16)<<16|65535&u}n.exports=function(b){return v.hash(b,P,16)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v;n.exports=v||function(P){for(var y,I=new Array(P),_=0;_<P;_++)!(3&_)&&(y=4294967296*Math.random()),I[_]=y>>>((3&_)<<3)&255;return I}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v=i("./helpers");function P(_,E){_[E>>5]|=128<<24-E%32,_[15+(E+64>>9<<4)]=E;for(var D,k,b,S=Array(80),u=1732584193,m=-271733879,d=-1732584194,w=271733878,x=-1009589776,j=0;j<_.length;j+=16){for(var B=u,M=m,T=d,Q=w,ie=x,W=0;W<80;W++){S[W]=W<16?_[j+W]:I(S[W-3]^S[W-8]^S[W-14]^S[W-16],1);var H=y(y(I(u,5),(H=m,k=d,b=w,(D=W)<20?H&k|~H&b:!(D<40)&&D<60?H&k|H&b|k&b:H^k^b)),y(y(x,S[W]),(D=W)<20?1518500249:D<40?1859775393:D<60?-1894007588:-899497514)),x=w,w=d,d=I(m,30),m=u,u=H}u=y(u,B),m=y(m,M),d=y(d,T),w=y(w,Q),x=y(x,ie)}return Array(u,m,d,w,x)}function y(_,E){var D=(65535&_)+(65535&E);return(_>>16)+(E>>16)+(D>>16)<<16|65535&D}function I(_,E){return _<<E|_>>>32-E}n.exports=function(_){return v.hash(_,P,20,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){function v(E,D){var k=(65535&E)+(65535&D);return(E>>16)+(D>>16)+(k>>16)<<16|65535&k}function P(E,D){var k,b=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),S=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),u=new Array(64);E[D>>5]|=128<<24-D%32,E[15+(D+64>>9<<4)]=D;for(var m,d,w=0;w<E.length;w+=16){for(var x=S[0],j=S[1],B=S[2],M=S[3],T=S[4],Q=S[5],ie=S[6],W=S[7],H=0;H<64;H++)u[H]=H<16?E[H+w]:v(v(v((d=u[H-2],I(d,17)^I(d,19)^_(d,10)),u[H-7]),(d=u[H-15],I(d,7)^I(d,18)^_(d,3))),u[H-16]),k=v(v(v(v(W,I(d=T,6)^I(d,11)^I(d,25)),T&Q^~T&ie),b[H]),u[H]),m=v(I(m=x,2)^I(m,13)^I(m,22),x&j^x&B^j&B),W=ie,ie=Q,Q=T,T=v(M,k),M=B,B=j,j=x,x=v(k,m);S[0]=v(x,S[0]),S[1]=v(j,S[1]),S[2]=v(B,S[2]),S[3]=v(M,S[3]),S[4]=v(T,S[4]),S[5]=v(Q,S[5]),S[6]=v(ie,S[6]),S[7]=v(W,S[7])}return S}var y=i("./helpers"),I=function(E,D){return E>>>D|E<<32-D},_=function(E,D){return E>>>D};n.exports=function(E){return y.hash(E,P,32,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){e.read=function(v,P,y,I,w){var E,D,k=8*w-I-1,b=(1<<k)-1,S=b>>1,u=-7,m=y?w-1:0,d=y?-1:1,w=v[P+m];for(m+=d,E=w&(1<<-u)-1,w>>=-u,u+=k;0<u;E=256*E+v[P+m],m+=d,u-=8);for(D=E&(1<<-u)-1,E>>=-u,u+=I;0<u;D=256*D+v[P+m],m+=d,u-=8);if(E===0)E=1-S;else{if(E===b)return D?NaN:1/0*(w?-1:1);D+=Math.pow(2,I),E-=S}return(w?-1:1)*D*Math.pow(2,E-I)},e.write=function(v,P,y,I,_,x){var D,k,b=8*x-_-1,S=(1<<b)-1,u=S>>1,m=_===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=I?0:x-1,w=I?1:-1,x=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(k=isNaN(P)?1:0,D=S):(D=Math.floor(Math.log(P)/Math.LN2),P*(I=Math.pow(2,-D))<1&&(D--,I*=2),2<=(P+=1<=D+u?m/I:m*Math.pow(2,1-u))*I&&(D++,I/=2),S<=D+u?(k=0,D=S):1<=D+u?(k=(P*I-1)*Math.pow(2,_),D+=u):(k=P*Math.pow(2,u-1)*Math.pow(2,_),D=0));8<=_;v[y+d]=255&k,d+=w,k/=256,_-=8);for(D=D<<_|k,b+=_;0<b;v[y+d]=255&D,d+=w,D/=256,b-=8);v[y+d-w]|=128*x}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v,P,y;function I(){}(t=n.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,y=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(_){return window.setImmediate(_)}:y?(v=[],window.addEventListener("message",function(_){var E=_.source;E!==window&&E!==null||_.data!=="process-tick"||(_.stopPropagation(),0<v.length&&v.shift()())},!0),function(_){v.push(_),window.postMessage("process-tick","*")}):function(_){setTimeout(_,0)}),t.title="browser",t.browser=!0,t.env={},t.argv=[],t.on=I,t.addListener=I,t.once=I,t.off=I,t.removeListener=I,t.removeAllListeners=I,t.emit=I,t.binding=function(_){throw new Error("process.binding is not supported")},t.cwd=function(){return"/"},t.chdir=function(_){throw new Error("process.chdir is not supported")}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})});var yi=le((El,Hr)=>{Hr.exports=function(n,e){var t="000000000"+n;return t.substr(t.length-e)}});var Wr=le((_l,Qr)=>{var Go=yi(),Yo=typeof window=="object"?window:self,Xo=Object.keys(Yo).length,Zo=navigator.mimeTypes?navigator.mimeTypes.length:0,ea=Go((Zo+navigator.userAgent.length).toString(36)+Xo.toString(36),4);Qr.exports=function(){return ea}});var Xr=le((Dl,Yr)=>{var bi,Jr=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;Jr?(Gr=Math.pow(2,32)-1,bi=function(){return Math.abs(Jr.getRandomValues(new Uint32Array(1))[0]/Gr)}):bi=Math.random;var Gr;Yr.exports=bi});var Qe=le((Cl,ns)=>{var Xt=Wr(),Zr=yi(),ta=Xr(),_t=0,wi=4,Zt=36,es=Math.pow(Zt,wi);function vi(){return Zr((ta()*es<<0).toString(Zt),wi)}function ts(){return _t=_t<es?_t:0,_t++,_t-1}function Dt(){var i="c",n=new Date().getTime().toString(Zt),e=Zr(ts().toString(Zt),wi),t=Xt(),r=vi()+vi();return i+n+e+t+r}Dt.slug=function(){var n=new Date().getTime().toString(36),e=ts().toString(36).slice(-4),t=Xt().slice(0,1)+Xt().slice(-1),r=vi().slice(-2);return n.slice(-2)+e+t+r};Dt.isCuid=function(n){return typeof n!="string"?!1:!!n.startsWith("c")};Dt.isSlug=function(n){if(typeof n!="string")return!1;var e=n.length;return e>=7&&e<=10};Dt.fingerprint=Xt;ns.exports=Dt});var Ge={};fr(Ge,{__addDisposableResource:()=>Bs,__assign:()=>fn,__asyncDelegator:()=>Ds,__asyncGenerator:()=>_s,__asyncValues:()=>Cs,__await:()=>ct,__awaiter:()=>ws,__classPrivateFieldGet:()=>Fs,__classPrivateFieldIn:()=>ks,__classPrivateFieldSet:()=>Ts,__createBinding:()=>pn,__decorate:()=>ys,__disposeResources:()=>Ls,__esDecorate:()=>Sa,__exportStar:()=>Ss,__extends:()=>ms,__generator:()=>xs,__importDefault:()=>Rs,__importStar:()=>As,__makeTemplateObject:()=>Ps,__metadata:()=>vs,__param:()=>bs,__propKey:()=>Ia,__read:()=>Pi,__rest:()=>gs,__runInitializers:()=>Oa,__setFunctionName:()=>Ea,__spread:()=>Os,__spreadArray:()=>Es,__spreadArrays:()=>Is,__values:()=>hn,default:()=>Ca});function ms(i,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");Ci(i,n);function e(){this.constructor=i}i.prototype=n===null?Object.create(n):(e.prototype=n.prototype,new e)}function gs(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e}function ys(i,n,e,t){var r=arguments.length,s=r<3?n:t===null?t=Object.getOwnPropertyDescriptor(n,e):t,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(i,n,e,t);else for(var a=i.length-1;a>=0;a--)(o=i[a])&&(s=(r<3?o(s):r>3?o(n,e,s):o(n,e))||s);return r>3&&s&&Object.defineProperty(n,e,s),s}function bs(i,n){return function(e,t){n(e,t,i)}}function Sa(i,n,e,t,r,s){function o(E){if(E!==void 0&&typeof E!="function")throw new TypeError("Function expected");return E}for(var a=t.kind,l=a==="getter"?"get":a==="setter"?"set":"value",p=!n&&i?t.static?i:i.prototype:null,h=n||(p?Object.getOwnPropertyDescriptor(p,t.name):{}),O,v=!1,P=e.length-1;P>=0;P--){var y={};for(var I in t)y[I]=I==="access"?{}:t[I];for(var I in t.access)y.access[I]=t.access[I];y.addInitializer=function(E){if(v)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(E||null))};var _=(0,e[P])(a==="accessor"?{get:h.get,set:h.set}:h[l],y);if(a==="accessor"){if(_===void 0)continue;if(_===null||typeof _!="object")throw new TypeError("Object expected");(O=o(_.get))&&(h.get=O),(O=o(_.set))&&(h.set=O),(O=o(_.init))&&r.unshift(O)}else(O=o(_))&&(a==="field"?r.unshift(O):h[l]=O)}p&&Object.defineProperty(p,t.name,h),v=!0}function Oa(i,n,e){for(var t=arguments.length>2,r=0;r<n.length;r++)e=t?n[r].call(i,e):n[r].call(i);return t?e:void 0}function Ia(i){return typeof i=="symbol"?i:"".concat(i)}function Ea(i,n,e){return typeof n=="symbol"&&(n=n.description?"[".concat(n.description,"]"):""),Object.defineProperty(i,"name",{configurable:!0,value:e?"".concat(e," ",n):n})}function vs(i,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,n)}function ws(i,n,e,t){function r(s){return s instanceof e?s:new e(function(o){o(s)})}return new(e||(e=Promise))(function(s,o){function a(h){try{p(t.next(h))}catch(O){o(O)}}function l(h){try{p(t.throw(h))}catch(O){o(O)}}function p(h){h.done?s(h.value):r(h.value).then(a,l)}p((t=t.apply(i,n||[])).next())})}function xs(i,n){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},t,r,s,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(p){return function(h){return l([p,h])}}function l(p){if(t)throw new TypeError("Generator is already executing.");for(;o&&(o=0,p[0]&&(e=0)),e;)try{if(t=1,r&&(s=p[0]&2?r.return:p[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,p[1])).done)return s;switch(r=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return e.label++,{value:p[1],done:!1};case 5:e.label++,r=p[1],p=[0];continue;case 7:p=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){e=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){e.label=p[1];break}if(p[0]===6&&e.label<s[1]){e.label=s[1],s=p;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(p);break}s[2]&&e.ops.pop(),e.trys.pop();continue}p=n.call(i,e)}catch(h){p=[6,h],r=0}finally{t=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}}function Ss(i,n){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(n,e)&&pn(n,i,e)}function hn(i){var n=typeof Symbol=="function"&&Symbol.iterator,e=n&&i[n],t=0;if(e)return e.call(i);if(i&&typeof i.length=="number")return{next:function(){return i&&t>=i.length&&(i=void 0),{value:i&&i[t++],done:!i}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function Pi(i,n){var e=typeof Symbol=="function"&&i[Symbol.iterator];if(!e)return i;var t=e.call(i),r,s=[],o;try{for(;(n===void 0||n-- >0)&&!(r=t.next()).done;)s.push(r.value)}catch(a){o={error:a}}finally{try{r&&!r.done&&(e=t.return)&&e.call(t)}finally{if(o)throw o.error}}return s}function Os(){for(var i=[],n=0;n<arguments.length;n++)i=i.concat(Pi(arguments[n]));return i}function Is(){for(var i=0,n=0,e=arguments.length;n<e;n++)i+=arguments[n].length;for(var t=Array(i),r=0,n=0;n<e;n++)for(var s=arguments[n],o=0,a=s.length;o<a;o++,r++)t[r]=s[o];return t}function Es(i,n,e){if(e||arguments.length===2)for(var t=0,r=n.length,s;t<r;t++)(s||!(t in n))&&(s||(s=Array.prototype.slice.call(n,0,t)),s[t]=n[t]);return i.concat(s||Array.prototype.slice.call(n))}function ct(i){return this instanceof ct?(this.v=i,this):new ct(i)}function _s(i,n,e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e.apply(i,n||[]),r,s=[];return r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r;function o(v){t[v]&&(r[v]=function(P){return new Promise(function(y,I){s.push([v,P,y,I])>1||a(v,P)})})}function a(v,P){try{l(t[v](P))}catch(y){O(s[0][3],y)}}function l(v){v.value instanceof ct?Promise.resolve(v.value.v).then(p,h):O(s[0][2],v)}function p(v){a("next",v)}function h(v){a("throw",v)}function O(v,P){v(P),s.shift(),s.length&&a(s[0][0],s[0][1])}}function Ds(i){var n,e;return n={},t("next"),t("throw",function(r){throw r}),t("return"),n[Symbol.iterator]=function(){return this},n;function t(r,s){n[r]=i[r]?function(o){return(e=!e)?{value:ct(i[r](o)),done:!1}:s?s(o):o}:s}}function Cs(i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=i[Symbol.asyncIterator],e;return n?n.call(i):(i=typeof hn=="function"?hn(i):i[Symbol.iterator](),e={},t("next"),t("throw"),t("return"),e[Symbol.asyncIterator]=function(){return this},e);function t(s){e[s]=i[s]&&function(o){return new Promise(function(a,l){o=i[s](o),r(a,l,o.done,o.value)})}}function r(s,o,a,l){Promise.resolve(l).then(function(p){s({value:p,done:a})},o)}}function Ps(i,n){return Object.defineProperty?Object.defineProperty(i,"raw",{value:n}):i.raw=n,i}function As(i){if(i&&i.__esModule)return i;var n={};if(i!=null)for(var e in i)e!=="default"&&Object.prototype.hasOwnProperty.call(i,e)&&pn(n,i,e);return _a(n,i),n}function Rs(i){return i&&i.__esModule?i:{default:i}}function Fs(i,n,e,t){if(e==="a"&&!t)throw new TypeError("Private accessor was defined without a getter");if(typeof n=="function"?i!==n||!t:!n.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e==="m"?t:e==="a"?t.call(i):t?t.value:n.get(i)}function Ts(i,n,e,t,r){if(t==="m")throw new TypeError("Private method is not writable");if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a setter");if(typeof n=="function"?i!==n||!r:!n.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t==="a"?r.call(i,e):r?r.value=e:n.set(i,e),e}function ks(i,n){if(n===null||typeof n!="object"&&typeof n!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof i=="function"?n===i:i.has(n)}function Bs(i,n,e){if(n!=null){if(typeof n!="object"&&typeof n!="function")throw new TypeError("Object expected.");var t;if(e){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");t=n[Symbol.asyncDispose]}if(t===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");t=n[Symbol.dispose]}if(typeof t!="function")throw new TypeError("Object not disposable.");i.stack.push({value:n,dispose:t,async:e})}else e&&i.stack.push({async:!0});return n}function Ls(i){function n(t){i.error=i.hasError?new Da(t,i.error,"An error was suppressed during disposal."):t,i.hasError=!0}function e(){for(;i.stack.length;){var t=i.stack.pop();try{var r=t.dispose&&t.dispose.call(t.value);if(t.async)return Promise.resolve(r).then(e,function(s){return n(s),e()})}catch(s){n(s)}}if(i.hasError)throw i.error}return e()}var Ci,fn,pn,_a,Da,Ca,Ye=Oo(()=>{Ci=function(i,n){return Ci=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},Ci(i,n)};fn=function(){return fn=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(n[s]=e[s])}return n},fn.apply(this,arguments)};pn=Object.create?function(i,n,e,t){t===void 0&&(t=e);var r=Object.getOwnPropertyDescriptor(n,e);(!r||("get"in r?!n.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return n[e]}}),Object.defineProperty(i,t,r)}:function(i,n,e,t){t===void 0&&(t=e),i[t]=n[e]};_a=Object.create?function(i,n){Object.defineProperty(i,"default",{enumerable:!0,value:n})}:function(i,n){i.default=n};Da=typeof SuppressedError=="function"?SuppressedError:function(i,n,e){var t=new Error(e);return t.name="SuppressedError",t.error=i,t.suppressed=n,t};Ca={__extends:ms,__assign:fn,__rest:gs,__decorate:ys,__param:bs,__metadata:vs,__awaiter:ws,__generator:xs,__createBinding:pn,__exportStar:Ss,__values:hn,__read:Pi,__spread:Os,__spreadArrays:Is,__spreadArray:Es,__await:ct,__asyncGenerator:_s,__asyncDelegator:Ds,__asyncValues:Cs,__makeTemplateObject:Ps,__importStar:As,__importDefault:Rs,__classPrivateFieldGet:Fs,__classPrivateFieldSet:Ts,__classPrivateFieldIn:ks,__addDisposableResource:Bs,__disposeResources:Ls}});var Ms=le(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0})});var Ri=le(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.invokeEventHandlersAsync=_e.invokeEventHandlers=_e.eventHandlerSafeInvokeAsync=_e.eventHandlerSafeInvoke=void 0;var Vs=(Ye(),tt(Ge));function Us(i,n,e){try{return i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}}_e.eventHandlerSafeInvoke=Us;function Ai(i,n,e){return(0,Vs.__awaiter)(this,void 0,void 0,function*(){try{return yield i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}})}_e.eventHandlerSafeInvokeAsync=Ai;function Pa(i,n,e,t){for(let r of i){let{succeeded:s,error:o}=Us(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}}_e.invokeEventHandlers=Pa;function Aa(i,n,e,t){return(0,Vs.__awaiter)(this,void 0,void 0,function*(){if(t?.parallelize===!1)for(let r of i){let{succeeded:s,error:o}=yield Ai(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}else{let r=[];for(let s of i)r.push(Ai(s,n,e).then(({succeeded:o,error:a})=>{if(!o&&t?.swallowExceptions!==!0)throw a}));yield Promise.all(r)}})}_e.invokeEventHandlersAsync=Aa});var $s=le(mn=>{"use strict";Object.defineProperty(mn,"__esModule",{value:!0});mn.TypedEvent=void 0;var Ra=(Ye(),tt(Ge)),Ns=Ri(),zs={swallowExceptions:!1,parallelize:!0},Fi=class{constructor(){this._handlers=[]}attach(n){this._handlers.push(n)}detach(n){this.tryRemoveHandler(n)}invoke(n,e,t=zs){(0,Ns.invokeEventHandlers)(this._handlers,n,e,t)}invokeAsync(n,e,t=zs){return(0,Ra.__awaiter)(this,void 0,void 0,function*(){yield(0,Ns.invokeEventHandlersAsync)(this._handlers,n,e,t)})}tryRemoveHandler(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}};mn.TypedEvent=Fi});var ki=le(Ti=>{"use strict";Object.defineProperty(Ti,"__esModule",{value:!0});var Fa=(Ye(),tt(Ge));(0,Fa.__exportStar)($s(),Ti)});var Ks=le(gn=>{"use strict";Object.defineProperty(gn,"__esModule",{value:!0});gn.FinalizationRegistryMissingError=void 0;var Bi=class extends Error{};gn.FinalizationRegistryMissingError=Bi});var ji=le(yn=>{"use strict";Object.defineProperty(yn,"__esModule",{value:!0});yn.WeakHandlerHolder=void 0;var Ta=Ks(),Li=class{constructor(n){this._refs=[];try{this._finalizationRegistry=new FinalizationRegistry(n)}catch(e){throw e.name==="FinalizationRegistry"?new Ta.FinalizationRegistryMissingError("FinalizationRegistry is not defined. Weak Events cannot be used. Please consult 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry' for compatibility information"):e}}getWeakHandler(n,e){let t=new WeakRef(e);return this._finalizationRegistry.register(e,{eventSource:n,handlerRef:t},t),this._refs.push(t),t}releaseWeakHandler(n){let t=this._refs.find(r=>r?.deref()===n)||new WeakRef(n);return this._finalizationRegistry.unregister(t),t}unregisterRef(n){this._finalizationRegistry.unregister(n)}};yn.WeakHandlerHolder=Li});var qs=le(bn=>{"use strict";Object.defineProperty(bn,"__esModule",{value:!0});bn.WeakEvent=void 0;var Mi=(Ye(),tt(Ge)),ka=ki(),Ba=ji(),Vi=Ri(),La={swallowExceptions:!1,parallelize:!0},Ui=class{constructor(){this._handlers=[],this._handlerFinalizedEvent=new ka.TypedEvent,this.handlerFinalizedEvent=this._handlerFinalizedEvent,this._refHolder=new Ba.WeakHandlerHolder(n=>{this.onHandlerFinalizer(n)})}invoke(n,e,t){for(let r of this._handlers){let s=r?.deref();if(s){let{succeeded:o,error:a}=(0,Vi.eventHandlerSafeInvoke)(s,n,e);if(!o&&t?.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}}invokeAsync(n,e,t=La){return(0,Mi.__awaiter)(this,void 0,void 0,function*(){t?.parallelize===!1?yield this.sequentialInvokeAsync(n,e,t):yield this.parallelInvokeAsync(n,e,t)})}sequentialInvokeAsync(n,e,t){return(0,Mi.__awaiter)(this,void 0,void 0,function*(){for(let r of this._handlers){let s=r?.deref();if(s){let{succeeded:o,error:a}=yield(0,Vi.eventHandlerSafeInvokeAsync)(s,n,e);if(!o&&t.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}})}parallelInvokeAsync(n,e,t){return(0,Mi.__awaiter)(this,void 0,void 0,function*(){let r=[];for(let s of this._handlers){let o=s?.deref();o?r.push((0,Vi.eventHandlerSafeInvokeAsync)(o,n,e).then(({succeeded:a,error:l})=>{if(!a&&t.swallowExceptions!==!0)throw l})):this.releaseHandler(s)}yield Promise.all(r)})}attach(n){this._handlers.push(this._refHolder.getWeakHandler(this,n))}detach(n){let e=this._refHolder.releaseWeakHandler(n);this.tryRemoveHandlerRef(e)}onHandlerFinalizer(n){this.tryRemoveHandlerRef(n?.handlerRef),this._handlerFinalizedEvent.invokeAsync(this,n,{swallowExceptions:!0})}tryRemoveHandlerRef(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}releaseHandler(n){this._refHolder.unregisterRef(n),this.tryRemoveHandlerRef(n)}};bn.WeakEvent=Ui});var Qs=le(vn=>{"use strict";Object.defineProperty(vn,"__esModule",{value:!0});var Hs=(Ye(),tt(Ge));(0,Hs.__exportStar)(ji(),vn);(0,Hs.__exportStar)(qs(),vn)});var Ws=le(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Ni=(Ye(),tt(Ge));(0,Ni.__exportStar)(Ms(),Ft);(0,Ni.__exportStar)(ki(),Ft);(0,Ni.__exportStar)(Qs(),Ft)});var ar={};fr(ar,{Client:()=>mt,ClientDescriptor:()=>ti,Entity:()=>pe,EntityFile:()=>be,IdbPersistence:()=>gt,ServerSync:()=>pt,Storage:()=>mt,StorageDescriptor:()=>ti,UndoHistory:()=>yt,authorization:()=>bc,cliSync:()=>vc,createMigration:()=>mi,debugLogger:()=>er,getEntityClient:()=>Ys,id:()=>wc,makeLogger:()=>mo,noLogger:()=>Yn,schema:()=>Ct});function Io(i){return typeof Buffer<"u"?Buffer.from(i).toString("base64"):btoa(i)}function Eo(i){return typeof Buffer<"u"?Buffer.from(i,"base64").toString():atob(i)}var $e={onlyUser:i=>Io(`u:${i}:*`),onlyMe:()=>$e.onlyUser(ri),decode:i=>{let e=Eo(i).split(":");if(e.length!==3)throw new Error("Invalid authz string");return{scope:e[0],subject:e[1],action:e[2]}}},ri="$$_originator_$$";function pr(i,n){let{operations:e,baselines:t}=i;if(e)for(let r of e)r.authz&&$e.decode(r.authz).subject===ri&&(r.authz=$e.onlyUser(n));if(t)for(let r of t)r.authz&&$e.decode(r.authz).subject===ri&&(r.authz=$e.onlyUser(n))}var nt=class{constructor(n){this.flusher=n,this.batches=new Map,this.flush=e=>{let t=this.batches.get(e);if(t)return t.flush()},this.discard=e=>{let t=this.batches.get(e);t&&(t.discard(),this.batches.delete(e))},this.flushAll=()=>[...this.batches.values()].map(e=>e.flush()),this.getSize=e=>{let t=this.batches.get(e);return t?t.items.length:0}}add({key:n,userData:e,items:t,max:r,timeout:s}){let o=this.batches.get(n);return o||(o=new si({max:r||null,startedAt:Date.now(),userData:e,timeout:s||null,flusher:this.flusher,key:n}),this.batches.set(n,o)),o.update({items:t,max:r,timeout:s,userData:e}),o}},si=class{constructor({max:n,startedAt:e,timeout:t,userData:r,flusher:s,key:o}){this.items=[],this.update=({items:a,max:l,timeout:p,userData:h})=>{this.items.push(...a),l!==void 0&&(this.max=l),p!==void 0&&(this.timeout=p),h&&(this.userData=h);let O=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():O&&this.timeout!==null&&(this.flushTimeout=setTimeout(this.flush,this.timeout))},this.flush=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0;let a=this.items;return this.items=[],this.flusher(a,this.key,this.userData)},this.discard=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0,this.items=[]},this.max=n,this.startedAt=e,this.timeout=t,this.userData=r,this.flusher=s,this.key=o}};var bt;(function(i){i[i.InvalidRequest=4e3]="InvalidRequest",i[i.BodyRequired=4001]="BodyRequired",i[i.NoToken=4010]="NoToken",i[i.InvalidToken=4011]="InvalidToken",i[i.TokenExpired=4012]="TokenExpired",i[i.Forbidden=4030]="Forbidden",i[i.NotFound=4040]="NotFound",i[i.Unexpected=5e3]="Unexpected",i[i.ConfigurationError=5010]="ConfigurationError",i[i.NoFileStorage=5011]="NoFileStorage",i[i.MigrationPathNotFound=7001]="MigrationPathNotFound",i[i.ImportFailed=7002]="ImportFailed",i[i.Offline=7003]="Offline"})(bt||(bt={}));var q=class extends Error{constructor(n,e,t){super(t??`Verdant error: ${n}`,{cause:e}),this.code=n,this.toResponse=()=>JSON.stringify({code:this.code})}get httpStatus(){let n=Math.floor(this.code/10);return n<600?n:500}};q.Code=bt;function mr(i){return typeof i=="object"&&"code"in i&&typeof i.code=="number"}var Vt,_o=new Uint8Array(16);function oi(){if(!Vt&&(Vt=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!Vt))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Vt(_o)}var gr=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Do(i){return typeof i=="string"&&gr.test(i)}var yr=Do;var te=[];for(Ut=0;Ut<256;++Ut)te.push((Ut+256).toString(16).substr(1));var Ut;function Co(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(te[i[n+0]]+te[i[n+1]]+te[i[n+2]]+te[i[n+3]]+"-"+te[i[n+4]]+te[i[n+5]]+"-"+te[i[n+6]]+te[i[n+7]]+"-"+te[i[n+8]]+te[i[n+9]]+"-"+te[i[n+10]]+te[i[n+11]]+te[i[n+12]]+te[i[n+13]]+te[i[n+14]]+te[i[n+15]]).toLowerCase();if(!yr(e))throw TypeError("Stringified UUID is invalid");return e}var br=Co;function Po(i,n,e){i=i||{};var t=i.random||(i.rng||oi)();if(t[6]=t[6]&15|64,t[8]=t[8]&63|128,n){e=e||0;for(var r=0;r<16;++r)n[e+r]=t[r];return n}return br(t)}var vt=Po;var Sr=Te(xr(),1);function Ao(i,n){return typeof n!="object"||n===null||Array.isArray(n)?n:Object.fromEntries(Object.entries(n).sort(([e],[t])=>e<t?-1:e>t?1:0))}function ai(i){let n=new WeakMap,e=0;return JSON.stringify(i,(t,r)=>{if(typeof r=="object"&&r!==null){if(n.has(r))return{$ref:n.get(r)};n.set(r,`cyclic-ref:${e++}`)}return Ao(t,r)})}function de(i,n=!0){if(!n&&typeof structuredClone=="function")return structuredClone(i);if(V(i)||Array.isArray(i)){let e=G(i),t;if(Array.isArray(i))t=i.map(r=>de(r,n));else{t={};for(let[r,s]of Object.entries(i))t[r]=de(s,n)}return n&&e&&z(t,e),t}return i}function Ke(i){return(0,Sr.default)(i)}function V(i){return i&&typeof i=="object"}function Or(i){for(var n=[],e=[i],t=0;e.length;){var r=e.pop();if(typeof r=="boolean")t+=4;else if(typeof r=="string")t+=r.length*2;else if(typeof r=="number")t+=8;else if(typeof r=="object"&&n.indexOf(r)===-1){n.push(r);for(var s in r)e.push(r[s])}}return t}function L(i,n="assertion failed"){if(!i)throw new Error(n)}function wt(i=16){return vt().replace("-","").slice(0,i)}function Ir(i,n){for(let e=i.length-1;e>=0;e--)if(n(i[e]))return e;return-1}function Er(i,n){let e;return function(...t){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,t),n)}}function _r(i,n){let e=0,t;return function(...r){let s=this,o=Date.now();o-e>=n?(e=o,i.apply(s,r),clearTimeout(t)):(clearTimeout(t),t=setTimeout(()=>{e=o,i.apply(s,r)},n))}}function ci(i){try{return JSON.stringify(i)}catch{return`[recursive/invalid:${String(i)}]`}}function he(i){return i&&i["@@type"]==="file"}function xt(i){return{"@@type":"file",id:i}}function it(i){return typeof File<"u"&&i instanceof File||typeof Blob<"u"&&i instanceof Blob}function Nt(i){return i&&V(i)&&typeof i.id=="string"&&typeof i.remote=="boolean"&&typeof i.name=="string"&&typeof i.type=="string"}function $(i){return re(i)||he(i)}function Ce(i,n){return i===n?!0:!(!$(i)||!$(n)||i["@@type"]!==n["@@type"]||i.id!==n.id)}function re(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function qe(i,n,e,t,r=[],s){z(i,n),rt(i,t);let o=Ht(i);for(let a of o.keys()){let l=o.get(a),p={oid:a,timestamp:e(),data:{op:"initialize",value:qt(l)}};r.push(Pr(p,s?.authz))}return r}function Cr(i,n,e,t=[],r){let s={oid:n,timestamp:e(),data:{op:"initialize",value:i}};return t.push(Pr(s,r?.authz)),t}function Pr(i,n){return n&&(i.authz=n),i}function $t(i){let n={};for(let e of i)e.oid in n?n[e.oid].push(e):n[e.oid]=[e];return n}function Ar(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Rr(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function ke(i){return Array.isArray(i)?!0:(console.error(`Cannot apply list patch; expected array, received ${JSON.stringify(i)}. This suggests your data is changing from a list to an object over time. (OID: ${G(i)})`),!1)}function Be(i,n,e){if(i==null&&n.op!=="initialize")return i;let t=i,r,s;function o(a){e&&$(a)&&e.push(a)}switch(n.op){case"set":o(t[n.name]),t[n.name]=n.value;break;case"remove":o(t[n.name]),delete t[n.name];break;case"list-set":ke(i)&&(o(i[n.index]),i[n.index]=n.value);break;case"list-push":ke(i)&&i.push(n.value);break;case"list-delete":ke(i)&&(o(i[n.index]),i.splice(n.index,n.count));break;case"list-move-by-index":ke(i)&&(s=i.splice(n.from,1),i.splice(n.to,0,s[0]));break;case"list-remove":if(ke(i))do{let a=n.value;n.only==="last"?$(a)?r=Ir(i,l=>$(l)&&Ce(l,a)):r=i.lastIndexOf(a):$(a)?r=i.findIndex(l=>$(l)&&Ce(l,a)):r=i.indexOf(a),r!==-1&&(o(i[r]),i.splice(r,1))}while(!n.only&&r!==-1);break;case"list-add":ke(i)&&(i.some(l=>re(l)&&re(n.value)?l.id===n.value.id:l===n.value)||i.push(n.value));break;case"list-move-by-ref":ke(i)&&(r=i.findIndex(a=>Ce(a,n.value)),s=i.splice(r,1),i.splice(n.index,0,s[0]));break;case"list-insert":if(ke(i)){if(!n.value&&!n.values)throw new Error(`Cannot apply list insert patch; expected value or values, received ${JSON.stringify(n)}`);n.value?i.splice(n.index,0,n.value):i.splice(n.index,0,...n.values)}break;case"delete":Array.isArray(i)?i.forEach(o):V(i)&&Object.values(i||{}).forEach(o);return;case"initialize":return de(n.value);case"touch":return i;default:throw new Error(`Unsupported patch operation: ${n.op}`)}return i}function zt(i,n,e=[]){if(Array.isArray(i))for(let t=0;t<i.length;t++){let r=i[t];i[t]=Dr(r,n,e),V(i[t])&&zt(i[t],n,e)}else if(!he(i)){if(V(i)){L(G(i),`Object ${JSON.stringify(i)} must have an oid`);for(let t of Object.keys(i))i[t]=Dr(i[t],n,e),V(i[t])&&zt(i[t],n,e)}}return e}function Dr(i,n,e){if(re(i)){e.push(i.id);let t=n.get(i.id);return L(!!t,`No value was found in object map for ${i.id}`),z(t,i.id)}else return i}function Fr(i){return i.data.op==="set"?i.data.name:!1}function Tr(i,n){return n.has(!0)?!0:i.data.op==="set"||i.data.op==="remove"?n.has(i.data.name):!1}function Kt(i){return{oid:i.oid,timestamp:i.timestamp,data:i.data,authz:i.authz}}var Ro="/",St=":",di=new WeakMap;function se(i){let n=G(i);return L(!!n,`Object ${ci(i)} does not have an OID assigned to it`),n}function G(i){if(V(i))return di.get(i)}function z(i,n){return L(V(i),`Only objects can be assigned OIDs, received ${ci(i)}`),jr(i)&&qt(i),di.set(i,n),i}function jr(i){return!!G(i)}function qt(i){return di.delete(i),i}function kr(i,n,e){if(jr(i)){let t=se(i);if(Le(t,n))return se(i);{let r=Se(n,e);return z(i,r),r}}else{let t=Se(n,e);return z(i,t),t}}var li={".":"&dot;","/":"&slash;",":":"&colon;"};function Br(i){return i.replace(/[/]/g,li["/"]).replace(/[:]/g,li[":"]).replace(/[.]/g,li["."])}function Lr(i){return i.replace(/&slash;/g,"/").replace(/&colon;/g,":").replace(/&dot;/g,".")}function ee(i,n,e){let t=Br(i)+Ro+Br(n);return e&&(t+=St+e),t}function Se(i,n=Fo){let{collection:e,id:t}=ue(i);return ee(e,t,n())}function ue(i){let[n,e,...t]=i.split("/");t.length&&(console.error(`OID ${i} has more than 3 segments. Attempting to parse it anyway.`),e+="/"+t.join("/"));let[r,s]=e.split(St),o;return r.includes(".")?o=r.slice(0,r.indexOf(".")):o=r,{collection:Lr(n),id:Lr(o),subId:s}}function rt(i,n){let e=se(i);if(Array.isArray(i)){let t;for(let r=0;r<i.length;r++)t=i[r],V(t)&&!$(t)&&(kr(t,e,n),rt(t,n))}else if(V(i)&&!$(i))for(let t of Object.keys(i))V(i[t])&&!$(i[t])&&(kr(i[t],e,n),rt(i[t],n))}function Qt(i){if(qt(i),Array.isArray(i))for(let n=0;n<i.length;n++)Qt(i[n]);else if(V(i))for(let n of Object.keys(i))Qt(i[n])}function Fo(){return vt().slice(0,8)}function ne(i){return{"@@type":"ref",id:i}}function Ht(i,n=new Map){if(Array.isArray(i)){let e=se(i),t=z([],e);for(let r=0;r<i.length;r++){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(he(s)){t[r]=s;continue}else{let o=se(s);t[r]=ne(o),Ht(s,n)}}else t[r]=s}n.set(e,t)}else if(V(i)&&!$(i)){let e=se(i),t=z({},e);for(let r of Object.keys(i)){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(he(s))t[r]=s;else{let o=se(s);t[r]=ne(o),Ht(s,n)}}else t[r]=s}n.set(e,t)}else $(i);return n}function K(i){return i.split(".")[0].split(St)[0]}function Mr(i){let n=K(i),e=Se(n,()=>"\uFFFF");return[`${n}${St}`,e]}function Le(i,n){return K(i)===K(n)}function Wt(i){return!i.includes(St)}var st="__@@oid_do_not_use",Pe="@@id";function To(i){if(V(i))return i[Pe]||i[st]}function ko(i){return V(i)&&(delete i[st],delete i[Pe]),i}function Bo(i){let n=To(i);n&&z(i,n)}function Ot(i){if(Bo(i),ko(i),Array.isArray(i))for(let n=0;n<i.length;n++)Ot(i[n]);else if(V(i))for(let n of Object.keys(i))Ot(i[n])}function Lo(i){let{collection:n,id:e,subId:t}=ue(i);return ee(n,e,t)}var jo=/"\w+\/[^"]+?(\.[^"]+)+\:[\S]+?"/g;function Mo(i){return i.replaceAll(jo,n=>{let e=n.slice(1,n.length-1);return`"${Lo(e)}"`})}function ui(i){return JSON.parse(Mo(JSON.stringify(i)))}function Vr(i){let n=K(i);return[`${n}.`,`${n}.\uFFFF`]}function fi(i){return i===Pe||i===st}var je=class{constructor(n,e){this.getNow=n,this.createSubId=e,this.isPrimitive=t=>!V(t)||$(t),this.createDiff=(t,r,s={})=>Jt(t,r,this.getNow,this.createSubId,[],s),this.createInitialize=(t,r,s,o)=>o?Cr(t,r,this.getNow,void 0,s?{authz:s}:void 0):qe(t,r,this.getNow,this.createSubId,void 0,s?{authz:s}:void 0),this.createSet=(t,r,s,o)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:r,value:s},authz:o}];{let a=Se(t,this.createSubId);return[...qe(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"set",value:ne(a),name:r},authz:o}]}},this.createRemove=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:r},authz:s}],this.createListSet=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:s},authz:o}];{let a=Se(t,this.createSubId);return[...qe(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:ne(a)},authz:o}]}},this.createListPush=(t,r,s)=>{if(this.isPrimitive(r))return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:r},authz:s}];{let o=Se(t,this.createSubId);return[...qe(r,o,this.getNow,void 0,void 0,{authz:s}),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:ne(o)},authz:s}]}},this.createListAdd=(t,r,s)=>this.isPrimitive(r)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:r},authz:s}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:ne(r)},authz:s}],this.createListInsert=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:s,index:r},authz:o}];{let a=Se(t,this.createSubId);return[...qe(s,a,this.getNow,this.createSubId,void 0,o?{authz:o}:void 0),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:ne(a),index:r},authz:o}]}},this.createListInsertMany=(t,r,s,o)=>{L(r>=0,"List index must be non-negative");let a=[],l=s.map(p=>{if(this.isPrimitive(p))return p;let h=Se(t,this.createSubId);return a.push(...qe(p,h,this.getNow,this.createSubId,void 0,{authz:o})),ne(h)});return a.push({oid:t,timestamp:this.getNow(),data:{op:"list-insert",values:l,index:r},authz:o}),a},this.createListRemove=(t,r,s,o)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:r,only:s},authz:o}],this.createListDelete=(t,r,s=1,o)=>(L(r>=0,"List index must be non-negative"),L(s>0,"Count must be positive and non-zero"),[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:r,count:s},authz:o}]),this.createListMoveByRef=(t,r,s,o)=>(L(s>=0,"List index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:r,index:s},authz:o}]),this.createListMoveByIndex=(t,r,s,o)=>(L(r>=0,"List move from index must be non-negative"),L(s>=0,"List move to index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:r,to:s},authz:o}]),this.createDelete=(t,r)=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"},authz:r}],this.createDeleteAll=(t,r)=>t.map(s=>({oid:s,timestamp:this.getNow(),data:{op:"delete"},authz:r}))}};function ot(i,n){if(i===n)return!0;if($(i)&&$(n))return Ce(i,n);let e=G(i),t=G(n);return!!(e&&t&&e===t)}function Ur(i,n,e,t){if(!It(n))return n;let r=G(n);if(!r)t.mergeUnknownObjects&&e&&z(n,e);else if(!Le(i,r))return de(n,!1);return n}function It(i){return V(i)&&!$(i)}function Jt(i,n,e,t,r,s){var o;let a={patches:[],mergeUnknownObjects:s?.mergeUnknownObjects,merge:(o=s?.merge)!==null&&o!==void 0?o:s?.defaultUndefined,authz:s?.authz,patchCreator:new je(e,t)};return Gt(i,n,a),a.patches}function Gt(i,n,e){if(Array.isArray(i)&&Array.isArray(n))Vo(i,n,e);else{if(Array.isArray(i)||Array.isArray(n))throw new q(q.Code.Unexpected,void 0,"Cannot diff between array and non-array");It(i)&&It(n)&&Uo(i,n,e)}}function Vo(i,n,e){let t=se(i),r=[],s=new Set;for(let h=0;h<i.length;h++){let O=i[h];r[h]=O;let v=G(O);v&&s.add(v)}for(let h=0;h<n.length;h++){let O=n[h],v=i[h];n[h]=Ur(t,O,G(v),e)}let o=!0,a=new Set,l=new Set;for(let h=0;h<n.length;h++){let O=n[h],v=r[h];O===void 0&&(o=!1);let P=G(O),y=o&&h>=r.length;if(P&&s.has(P))if(ot(O,v))Gt(v,O,e);else{e.patches.push(...e.patchCreator.createListMoveByRef(t,ne(P),h,e.authz));let I=G(v);I&&l.add(I),a.add(P)}else if(y)e.patches.push(...e.patchCreator.createListPush(t,O,e.authz));else if(ot(O,v))Gt(v,O,e);else{let I=h===0||ot(n[h-1],r[h-1]),_=h===n.length-1||ot(n[h+1],r[h]);I&&_?(e.patches.push(...e.patchCreator.createListInsert(t,h,O,e.authz)),r.splice(h,0,void 0)):e.patches.push(...e.patchCreator.createListSet(t,h,O,e.authz))}}if(r.length-n.length>0)for(let h=r.length-1;h>=n.length;h--){let O=r[h],v=G(O);v?a.has(v)||(at(O,e),e.patches.push(...e.patchCreator.createListRemove(t,ne(v),"last",e.authz))):e.patches.push(...e.patchCreator.createListRemove(t,O,"last",e.authz))}for(let h of l){if(a.has(h))continue;let O=i.find(v=>G(v)===h);O&&at(O,e),e.patches.push(...e.patchCreator.createListRemove(t,ne(h),"last",e.authz))}}function Uo(i,n,e){let t=new Set(Object.keys(i)),r=se(i);for(let s in n){let o=n[s];if(o===void 0&&e.merge||(t.delete(s),fi(s)))continue;let a=i[s];It(o)?(Ur(r,o,G(a),e),a?ot(o,a)?Gt(a,o,e):(e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz))):ot(o,a)||(o===void 0?e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e))}if(!e.merge)for(let s of t)fi(s)||(e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)),at(i[s],e))}function at(i,n){if(!It(i))return;let e=G(i);if(e){n.patches.push(...n.patchCreator.createDelete(e,n.authz));for(let t in i){let r=i[t];at(r,n)}}}var N=class{constructor(n){this._onAllUnsubscribed=n,this.subscribers={},this.counts={},this._disabled=!1,this.disposed=!1,this.subscriberCount=e=>{var t;return(t=this.counts[e])!==null&&t!==void 0?t:0},this.totalSubscriberCount=()=>Object.values(this.counts).reduce((e,t)=>e+t,0),this.subscribe=(e,t)=>{let r=wt(),s=this.subscribers[e];return s||(s=this.subscribers[e]={}),s[r]=t,this.counts[e]=(this.counts[e]||0)+1,()=>{this.subscribers[e]&&(delete this.subscribers[e][r],this.counts[e]--,this.counts[e]===0&&(delete this.subscribers[e],delete this.counts[e],this._onAllUnsubscribed&&this._onAllUnsubscribed(e)))}},this.emit=(e,...t)=>{this._disabled||this.subscribers[e]&&Object.values(this.subscribers[e]).forEach(r=>r(...t))},this.dispose=()=>{this._disabled=!0,this.disposed=!0;let e=Object.keys(this.subscribers);this.subscribers={},this.counts={},e.forEach(t=>{this._onAllUnsubscribed&&this._onAllUnsubscribed(t)})},this.disable=()=>{this._disabled=!0}}get disabled(){return this._disabled}};var Yt="\uFFFFFE",No="\0",zo="\uFFFFFF";function ge(...i){let n=$o(i);return n.length===1?n[0]:n}function Ae(...i){return i.join(Yt)+`${zo}`}function Ee(...i){return i.join(Yt)+`${Yt}${No}`}function $o(i){let n=[[]];for(let e of i)if(Array.isArray(e)){let t=[];for(let r of n)for(let s of e)t.push(r.concat(s));n=t}else for(let t of n)t.push(`${e}`);return Array.from(new Set(n.map(e=>e.join(Yt))))}function Nr(i){return!!i.field}function Ko(i,n){let e={};for(let[t,r]of Object.entries(i.indexes||{})){let s=r;Nr(s)?e[t]=Oe(n[s.field]):e[t]=Oe(s.compute(n))}return e}function qo(i,n){return Object.entries(i.compounds||{}).reduce((e,[t,r])=>(e[t]=ge(...r.of.map(s=>n[s])),e),{})}function Ho(i,n){return Object.entries(i.fields).reduce((e,[t,r])=>("indexed"in r&&(e[t]=Oe(n[t])),e),{})}function hi(i,n){let e=Object.assign(Object.assign({[i.primaryKey]:n[i.primaryKey]},Ho(i,n)),Ko(i,n));return Object.assign(e,qo(i,Object.assign(Object.assign({},n),e))),e}var Qo="null";function Oe(i){if(i===null)return Qo;if(typeof i=="string"||typeof i=="number")return i;if(typeof i=="boolean"||i===null)return`${i}`;if(i===void 0)return"undefined";if(Array.isArray(i))return i.map(Oe);throw new Error(`Unsupported index value: ${i}`)}function zr(i,n){let e,t;return(...r)=>{let s=n();return e&&e.length===s.length&&e.every((o,a)=>o===s[a])||(e=[...s],t=i(...r)),t}}var Wo={version:0,collections:{}};function $r(i){return i?[...Object.keys(i.indexes||{}).map(n=>{let e=i.indexes[n],t=e.type;!t&&e.field&&(t=i.fields[e.field].type),L(t,`Could not determine type of index ${i}.${n}. Index must have a type. Perhaps your schema is malformed?`);let r=Et(i,n);return{name:n,multiEntry:r,synthetic:!0,compound:!1,type:t?.replace("[]","")}}),...Object.keys(i.compounds||{}).map(n=>({name:n,multiEntry:Et(i,n),synthetic:!1,compound:!0,type:"string"}))]:[]}function mi(i,n,e){let t=typeof n=="function"||n===void 0,r=t?Wo:i,s=t?i:n,o=t?n:e;L(r,"Invalid arguments to createMigration"),L(s,"Invalid arguments to createMigration");let{changedCollections:a,addedCollections:l,removedCollections:p,addedIndexes:h,removedIndexes:O,autoMigratedCollections:v,autoMigration:P}=Jo(r,s);return{version:s.version,migrate:async y=>{let I=[];if(await o?.({migrate:async(E,D)=>{let k=P(E),b=async S=>{let u=await D(S);z(u,se(S));let m=k(u),d=qr(s.collections[E].fields,m);return m};await y.migrate(E,b),I.push(E),v.delete(E)},info:{changedCollections:a,addedCollections:l,removedCollections:p},queries:y.queries,mutations:y.mutations}),s.version>1){y.log("debug","auto-migrating collections with new defaults",v);for(let D of v)await y.migrate(D,P(D)),I.push(D);for(let D of p)await y.deleteCollection(D);let E=a.filter(D=>!I.includes(D));E.length>0&&y.log("error",`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,E)}},removedCollections:p,addedIndexes:h,removedIndexes:O,allCollections:Object.keys(s.collections),changedCollections:a,addedCollections:l,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function Jo(i,n){let e=Object.keys(n.collections).filter(h=>i.collections[h]&&ai(i.collections[h])!==ai(n.collections[h])),t=Object.keys(i.collections).filter(h=>!n.collections[h]),r=Object.keys(n.collections).filter(h=>!i.collections[h]),s=new Set;for(let h of e){let O=i.collections[h].fields,v=n.collections[h].fields;Object.keys(v).some(P=>(!O[P]||pi(O[P]))&&!pi(v[P]))&&s.add(h),Object.keys(O).some(P=>!v[P])&&s.add(h)}let o={},a={};for(let h of[...e,...r]){let O=$r(i.collections[h]),v=$r(n.collections[h]),P=v.filter(I=>!O.find(_=>_.name===I.name)),y=O.filter(I=>!v.find(_=>_.name===I.name));P.length>0&&(o[h]=P,e.includes(h)&&s.add(h)),y.length>0&&(a[h]=y,e.includes(h)&&s.add(h))}return{changedCollections:e,addedCollections:r,removedCollections:t,addedIndexes:o,removedIndexes:a,autoMigratedCollections:s,withDefaults:(h,O)=>He(n.collections[h],O),autoMigration:h=>O=>{let v=n.collections[h];return He(v,Kr(v,O))}}}var gi={};var Me;(function(i){i[i.Realtime=0]="Realtime",i[i.Push=1]="Push",i[i.PassiveRealtime=2]="PassiveRealtime",i[i.PassivePush=3]="PassivePush",i[i.ReadOnlyPull=4]="ReadOnlyPull",i[i.ReadOnlyRealtime=5]="ReadOnlyRealtime"})(Me||(Me={}));var is=Te(Qe(),1),na=function(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e};function ia(i){let{properties:n,fields:e}=i,t=na(i,["properties","fields"]),r=n||e;if(!r)throw new Error("objectField must be passed a properties object");return Object.assign(Object.assign({type:"object"},t),{properties:r})}function ra(i,n){return i.properties=n,i}function sa(i){return Object.assign({type:"array"},i)}function oa(i,n){return i.items=n,i}var aa=i=>Object.assign({type:"string"},i),ca=i=>Object.assign({type:"number"},i),la=i=>Object.assign({type:"boolean"},i),da=i=>Object.assign({type:"any"},i);function ua(i){return Object.assign({type:"map"},i)}function fa(i,n){return i.values=n,i}var ha=i=>Object.assign({type:"file"},i),pa=()=>({type:"string",default:is.default}),rs={object:ia,array:sa,replaceObjectFields:ra,replaceArrayItems:oa,string:aa,number:ca,boolean:la,any:da,map:ua,replaceMapValues:fa,file:ha,id:pa};var cs=Te(Qe(),1);function en(i){return i.equals!==void 0}function tn(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function ss(i){return!!i.match}function nn(i){return i.startsWith!==void 0}function Si(i){return!tn(i)&&!en(i)&&!ss(i)&&!nn(i)&&i.order}function Et(i,n){var e,t;let r=(e=i.compounds)===null||e===void 0?void 0:e[n];if(r)return r.of.some(a=>Et(i,a));let s=(t=i.indexes)===null||t===void 0?void 0:t[n];if(s){if("type"in s)return xi(s.type);if("field"in s){let a=i.fields[s.field];return a?xi(a.type):!1}}let o=i.fields[n];return o?xi(o.type):!1}function xi(i){return i==="array"||i.endsWith("[]")}function Ie(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Je(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.default!==void 0:!1}function pi(i){return!Ie(i)&&!Je(i)}function He(i,n){for(let[e,t]of Object.entries(i.fields)){let r=Ve(t);(r!==void 0&&n[e]===void 0||!Ie(t)&&n[e]===null)&&(n[e]=r),n[e]&&We(n[e],t)}return n}function We(i,n){if(i==null)return i;if(n.type==="object")for(let[e,t]of Object.entries(n.properties)){if(i[e]===void 0){let r=Ve(t);r!==void 0&&(i[e]=r)}We(i[e],t)}else if(n.type==="array")for(let e of i)We(e,n.items);else if(n.type==="map")for(let[e,t]of Object.entries(i))e===Pe||e===st||We(t,n.values)}function Ve(i){if("default"in i){let n=typeof i.default=="function"?i.default():i.default;if(n===null)return n;let e=structuredClone(n);if(i.type==="object")for(let[t,r]of Object.entries(i.properties))e[t]===void 0&&(e[t]=Ve(r));return e}if(Ie(i))return null;if(i.type==="array")return[];if(i.type==="map")return{}}function Kr(i,n){for(let[e,t]of Object.entries(n))e===Pe||e===st||(i.fields[e]?Oi(t,i.fields[e]):delete n[e]);return n}function Oi(i,n){if(V(i)&&n.type==="object")for(let[e,t]of Object.entries(i))n.properties[e]?Oi(t,n.properties[e]):delete i[e];else if(Array.isArray(i)&&n.type==="array")for(let e of i)Oi(e,n.items)}function os(i){return i.type==="string"||i.type==="number"||i.type==="boolean"}function qr(i,n){for(let[e,t]of Object.entries(n))if(e!==Pe){if(!i[e])return{type:"invalid-key",fieldPath:[e],message:`Invalid field "${e}"`};if(t){let r=Re({field:i[e],value:t,fieldPath:[e]});if(r)return r}}}function Re({field:i,value:n,fieldPath:e=[],depth:t,requireDefaults:r,expectRefs:s,hasPassedFirstLevel:o}){let a=s&&o;if(!(t!==void 0&&t<=0)&&!(Ie(i)&&n==null)){if(n==null&&(r||!Je(i)))return{type:"no-default",fieldPath:e,message:`Invalid null value for field ${fe(e)}`};if(i.type==="object")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${ye(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected object ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`};for(let[l,p]of Object.entries(i.properties)){if(l===Pe)continue;let h=Re({field:p,value:n[l],fieldPath:[...e,l],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(h)return h}for(let l of Object.keys(n))if(!i.properties[l])return{type:"invalid-key",fieldPath:[...e,l],message:`Invalid unexpected field "${l}" on value ${fe(e)}`}}else if(i.type==="array")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${ye(n)}`}}else{if(!Array.isArray(n))return n===null&&i.nullable?void 0:{type:"invalid-value",fieldPath:e,message:`Expected array ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`};for(let l of n){let p=Re({field:i.items,value:l,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(p)return p}}else if(i.type==="map")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${ye(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected map for field ${fe(e)}, got ${ye(n)}`};for(let[l,p]of Object.entries(n)){let h=Re({field:i.values,value:p,fieldPath:[...e,l],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(h)return h}}else if(i.type==="string"){if(typeof n!="string")return{type:"invalid-type",fieldPath:e,message:`Expected string ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`};if(i.options&&!i.options.includes(n))return{type:"invalid-value",fieldPath:e,message:`Expected one of ${i.options.join(", ")} for field ${fe(e)}, got ${ye(n)}`}}else if(i.type==="boolean"){if(typeof n!="boolean")return{type:"invalid-type",fieldPath:e,message:`Expected boolean ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`}}else if(i.type==="number"){if(typeof n!="number")return{type:"invalid-type",fieldPath:e,message:`Expected number ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`}}else if(i.type==="file"){if(a){if(!he(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ref for field ${fe(e)}, got ${ye(n)}`}}else if(!it(n)&&!Nt(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ${i.nullable?"or null ":""}for field ${fe(e)}, got ${ye(n)}`}}}}function ye(i){try{return JSON.stringify(i)}catch{return String(i)}}function fe(i){return i.length===0?"root":i.join(".")}function as(i,n){let e={};for(let[t,r]of Object.entries(n))i[t]&&(e[t]=rn({field:i[t],value:r,fieldPath:[t]}));return e}function rn({field:i,value:n,fieldPath:e=[],depth:t}){let r=Re({field:i,value:n,fieldPath:e,depth:t,requireDefaults:!0});if(r)throw new Error(`Validation error: ${r.message}`);if(i.type==="object"){if(!V(n))return n;let s={};for(let[o,a]of Object.entries(i.properties))s[o]=rn({field:a,value:n[o],fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else{if(i.type==="array")return Array.isArray(n)?n.map(s=>rn({field:i.items,value:s,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0})):n;if(i.type==="map"){if(!V(n))return n;let s={};for(let[o,a]of Object.entries(n))s[o]=rn({field:i.values,value:a,fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else return n}}function Ue(i,n){var e;return i.type==="object"?i.properties[n]:i.type==="array"?i.items:i.type==="map"?i.values:i.type==="any"?i:"type"in i?null:(e=i[n])!==null&&e!==void 0?e:null}var ma=function(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e};function ga(i){var{synthetics:n,indexes:e}=i,t=ma(i,["synthetics","indexes"]);let r=Object.assign(Object.assign({},n),e);for(let[s,o]of Object.entries(t.fields))"indexed"in o&&(r[s]={field:s});return Object.assign(Object.assign({},t),{indexes:r})}function Ct(i){return i}Ct.collection=ga;Ct.fields=rs;Ct.generated={id:cs.default};var fs=Te(Qe(),1),dn=4,At=36;function ls(i){return i.toString(At).padStart(dn,"0")}function ya(i){return i.toString().padStart(6,"0")}var sn=class{constructor(){this.latest={time:Date.now(),counter:0,node:ba()},this.zeroCounter=0,this.now=n=>(this.latest=us(this.latest),this.get(n,this.latest)),this.OLD_now=n=>(this.latest=us(this.latest),ya(n)+wa(this.latest)),this.timerState=()=>this.latest,this.update=n=>{let e=n.slice(dn);this.latest=va(this.latest,hs(e))},this.get=(n,e)=>ls(n)+ds(e),this.zero=n=>ls(n)+ds({time:0,counter:this.zeroCounter++,node:this.latest.node}),this.getWallClockTime=Di}},on=class extends Error{constructor(...n){super(),this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(n).join(" ")}},an=class extends Error{constructor(){super(),this.type="OverflowError",this.message="timestamp counter overflow"}},Ii=4,Ei=7,cn=60*1e3,Pt=9;function ba(){return fs.default.slug().padStart(Ei,"0").slice(0,Ei)}function ds(i){let n=new Date(i.time).getTime().toString(At).padStart(Pt,"0"),e=i.counter.toString(At).padStart(Ii,"0"),t=i.node.padStart(Ei,"0");return`${n}${e}${t}`}function us(i){let n=Date.now(),e=Math.max(i.time,n),t=i.time===e?i.counter+1:0;if(e-n>cn)throw new on(e,n,cn);if(t>65535)throw new an;return{time:e,counter:t,node:i.node}}function va(i,n){let e=Date.now(),t=Math.max(e,Math.max(i.time,n.time)),r=Math.max(i.counter,n.counter),s;if(i.time===t&&n.time===t?s=r+1:i.time===t?s=i.counter+1:n.time===t?s=n.counter+1:s=0,t-e>cn)throw new on(t,e,cn);if(s>65535)throw new an;return{time:t,counter:s,node:i.node}}function hs(i){let n=i.slice(0,Pt),e=i.slice(Pt,Pt+Ii),t=i.slice(Pt+Ii),r=parseInt(n,At),s=parseInt(e,At);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:t}}function wa(i){let n=new Date(i.time).toISOString(),e=i.counter.toString(16).toUpperCase().padStart(4,"0"),t=i.node.padStart(16,"0");return`${n}-${e}-${t}`}function ln(i){return parseInt(i.slice(0,dn),36)}function _i(i,n){return ln(i)-ln(n)}function Di(i){return hs(i.slice(dn)).time}function ps(i,n,e,t,r,s){let o=new je(t,r);if(n==null)return[{oid:i,timestamp:t(),data:{op:"delete"},authz:s}];let a=de(n),l=[];for(let p of e){let h=xa(i,a,p,o,s);l.unshift(...h),Be(a,p.data)}return l}function xa(i,n,e,t,r){var s,o;let a=e.data;switch(a.op){case"set":return n[a.name]===void 0?t.createRemove(i,a.name,r):t.createSet(i,a.name,n[a.name],r);case"remove":return n[a.name]===void 0?[]:t.createSet(i,a.name,n[a.name],r);case"list-insert":return a.value===void 0&&((s=a.values)===null||s===void 0?void 0:s.length)===0?[]:t.createListDelete(i,a.index,a.value?1:((o=a.values)===null||o===void 0?void 0:o.length)||0,r);case"list-delete":return t.createListInsertMany(i,a.index,n.slice(a.index,a.index+a.count),r);case"list-move-by-ref":return t.createListMoveByRef(i,a.value,Rt(n,a.value),r);case"list-move-by-index":return t.createListMoveByIndex(i,a.to,a.from,r);case"delete":return t.createInitialize(n,i,r,!0);case"list-push":return t.createListRemove(i,a.value,"last",r);case"list-remove":if(a.only==="last"){let l=Rt(n,a.value,0,"backward");return l===-1?[]:t.createListInsert(i,l,a.value,r)}else if(a.only==="first"){let l=Rt(n,a.value);return l===-1?[]:t.createListInsert(i,l,a.value,r)}else{let l=[],p=Rt(n,a.value);for(;p!==-1;)l.push(p),p=Rt(n,a.value,p+1);return l.flatMap(h=>t.createListInsert(i,h,a.value,r))}case"list-add":return t.createListRemove(i,a.value,"last",r);case"list-set":return n[a.index]!==void 0?t.createListSet(i,a.index,n[a.index],r):t.createListDelete(i,a.index,1,r);case"initialize":return t.createDelete(i,r);case"touch":return[];default:throw new Error(`Cannot undo operation type: ${a.op}`)}}function Rt(i,n,e=0,t="forward"){let r=t==="forward"?"findIndex":"findLastIndex";return $(n)?i[r]((s,o)=>$(s)&&s.id===n.id&&o>=e):i[r]((s,o)=>s===n&&o>=e)}var un=class{constructor(n,e){this.schema=n;this.entities=e;this.getOid=(n,e)=>{let t=this.schema.collections[n].primaryKey,r=e[t];return L(r,`Document must have a primary key: ${t.toString()} (got: ${JSON.stringify(e)})`),ee(n,r)};this.addDefaults=(n,e)=>{let t=this.schema.collections[n];return He(t,e)};this.validate=(n,e)=>{let t=this.schema.collections[n];return as(t.fields,e)};this.create=async(n,e,t={})=>{let r=t,s=this.addDefaults(n,e),o=this.validate(n,s),a=this.getOid(n,o);if(t.access){let l=this.schema.collections[n];t.access!=="shared"&&e[l.primaryKey]&&!t.silenceAccessControlWithPrimaryKeyWarning&&console.warn("Using a custom primary key with access control is not supported. This may result in corrupted documents. Read more about why: https://verdant.dev/docs/sync/access#a-warning-about-custom-primaryKey"),r.access=t.access}return this.entities.create(o,a,r)};this.delete=async(n,e,t={})=>{let r=ee(n,e);return this.entities.delete(r,t)};this.deleteAll=async(n,e={})=>this.entities.deleteAll(n.map(([t,r])=>ee(t,r)),e);this.deleteAllFromCollection=async(n,e,t={})=>this.entities.deleteAll(e.map(r=>ee(n,r)),t);this.clone=async(n,e,t={})=>{if(!Wt(e.uid))throw new Error("Cannot clone non-root documents");let r=e.getSnapshot(),s=this.schema.collections[n];if(delete r[s.primaryKey],!s.fields[s.primaryKey].default){if(!t.primaryKey)throw new Error(`Error cloning document from collection ${n}: collection does not have a default on primary key. You must supply a value to options.primaryKey for the clone.`);r[s.primaryKey]=t.primaryKey}return this.create(n,r,t)}}};var In=Te(Ws(),1);var zi=Te(Qe(),1);function ja(i){return{id:(0,zi.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function lt(i,n){if(typeof window<"u"&&it(i)){let e=ja(i);return n(e),xt(e.id)}if(Nt(i)){let e={...i,id:(0,zi.default)()};return n(e),xt(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=lt(i[e],n);return i}if(typeof i=="object"){for(let e in i)i[e]=lt(i[e],n);return i}return i}var oe=class{constructor(){this._disposes=[];this.disposed=!1;this.dispose=async()=>{this.disposed=!0,await Promise.all(this._disposes.map(async n=>{try{await n()}catch(e){console.error("Error disposing",e)}})),this._disposes=[]};this.compose=n=>this.addDispose(n.dispose.bind(n));this.addDispose=n=>{this._disposes.push(n)}}};var dt=Symbol("entity-file-update"),wn=Symbol("entity-file-mark-failed"),$i=Symbol("child-file-changed"),Ma,Va,be=class extends N{constructor(e,{downloadRemote:t=!1,ctx:r,parent:s}){super();this.id=e;this._objectUrl=null;this._fileData=null;this._loading=!0;this._failed=!1;this._downloadRemote=!1;this._uploaded=!1;this.unsubscribes=[];this[Ma]=e=>{this.ctx.log("debug","EntityFile updated",this.id,e),this._loading=!1,this._failed=!1,this._fileData=e,e.file&&(this._objectUrl&&"revokeObjectURL"in URL&&URL.revokeObjectURL(this._objectUrl),this.ctx.log("debug","Creating object URL for file",this.id),this._objectUrl=URL.createObjectURL(e.file)),this.emitChange()};this[Va]=()=>{this._failed=!0,this._loading=!1,this.emitChange()};this.onUploaded=e=>{this._fileData??=e,this._uploaded=!0,this.ctx.log("debug","File marked uploaded",this.id,this._fileData),this.emitChange()};this.destroy=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this.dispose()};this.ctx=r,this.parent=s,this._downloadRemote=t,this.unsubscribes.push(this.ctx.internalEvents.subscribe(`fileUploaded:${e}`,this.onUploaded))}static{Ma=dt,Va=wn}get downloadRemote(){return this._downloadRemote}get isFile(){return!0}get isUploaded(){return this._uploaded||this._fileData?.remote||!1}emitChange(){this.parent[$i](this),this.emit("change")}get url(){return this.loading?null:this._objectUrl?this._objectUrl:this._fileData?.url??null}get name(){return this._fileData?.name??null}get type(){return this._fileData?.type??null}get loading(){return this._loading}get failed(){return this._failed}getSnapshot(){return{id:this.id,url:this._objectUrl??this._fileData?.url??void 0,name:this.name??"unknown-file",remote:this._fileData?.remote??!1,type:this.type??"",file:this._fileData?.file}}};var xn=class{constructor({initial:n,ctx:e}){this.cache=new Map;this.get=n=>{let e=this.getCached(n.oid);if(e)return e;let t=new pe(n);return this.cache.set(n.oid,this.ctx.weakRef(t)),t};this.has=n=>this.cache.has(n);this.getCached=n=>{if(this.cache.has(n)){let t=this.cache.get(n)?.deref();if(t)return t;this.cache.delete(n)}return null};if(this.ctx=e,n)for(let t of n)this.cache.set(t.oid,e.weakRef(t))}};function Js(i,n,e){let t={previousValue:i.get(n),isLocal:!1};function r(s){if(i.deleted)return;let o=i.get(n);o!==this.previousValue&&(this.isLocal=s.isLocal,e(o,this),this.previousValue=o)}return i.subscribe("change",r.bind(t))}var Gs=Symbol("private entity context key"),Na,pe=class i extends N{constructor({oid:e,schema:t,entityFamily:r,parent:s,ctx:o,metadataFamily:a,readonlyKeys:l,files:p,storeEvents:h,deleteSelf:O,fieldPath:v}){super();this.fieldPath=[];this._viewData=void 0;this.validationError=void 0;this.cachedDeepUpdatedAt=null;this.wasDeletedLastChange=!1;this.cachedView=void 0;this.onAdd=(e,t)=>{t.oid===this.oid&&this.addConfirmedData(t)};this.onReplace=(e,t)=>{t.oid===this.oid&&this.replaceAllData(t)};this.onResetAll=()=>{this.resetAllData()};this.childIsNull=e=>{if(e instanceof i){let t=e.view;return t==null}return e==null};this.getFieldSchema=e=>{let t=Ue(this.schema,e);return L(t,`No schema for key ${e}`),t};this.validate=zr(()=>(this.validationError=Re({field:this.schema,value:this.rawView,fieldPath:this.fieldPath,expectRefs:!0})??void 0,this.validationError),()=>[this.viewData]);this.viewWithMappedChildren=e=>{let t=this.view;if(!t)return null;if(Array.isArray(t)){let r=t.map(s=>s instanceof i||s instanceof be?e(s):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>(a instanceof i||a instanceof be?s[o]=e(a):s[o]=a,s),{});return z(r,this.oid),r}};this.rawViewWithMappedChildren=e=>{let t=this.rawView;if(!t)return null;if(Array.isArray(t)){let r=t.map((s,o)=>$(s)?e(this.getChild(o,s.id)):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>($(a)?s[o]=e(this.getChild(o,a.id)):s[o]=a,s),{});return z(r,this.oid),r}};this.getSnapshot=()=>this.viewWithMappedChildren(e=>e.getSnapshot());this.getUnprunedSnapshot=()=>this.rawViewWithMappedChildren(e=>e instanceof be?e.getSnapshot():e.getUnprunedSnapshot());this.addPendingOperations=e=>{this.ctx.log("debug","Entity: adding pending operations",this.oid,e),this.deepInvalid&&(this.ctx.log("warn","Changes are being applied to a pruned entity. This means that the pruned version is being treated as the new baseline and any pruned invalid data is lost.",this.oid),this.canonizePrunedVersion()),this.applyPendingOperations(e)};this.applyPendingOperations=e=>{if(this.access)for(let r of e)r.authz=this.access;let t=this.metadataFamily.addPendingData(e);for(let r of t)this.change(r)};this.getPruneDiff=()=>{let e=this.getSnapshot(),t=this.getUnprunedSnapshot();return this.patchCreator.createDiff(t,e,{authz:this.access,merge:!1})};this.canonizePrunedVersion=()=>{this.applyPendingOperations(this.getPruneDiff())};this.addConfirmedData=e=>{this.ctx.log("debug","Entity: adding confirmed data",this.oid);let t=this.metadataFamily.addConfirmedData(e);for(let r of t)this.change(r)};this.replaceAllData=e=>{this.ctx.log("debug","Entity: replacing all data",this.oid);let t=this.metadataFamily.replaceAllData(e);for(let r of t)this.change(r)};this.resetAllData=()=>{this.ctx.log("debug","Entity: resetting all data",this.oid),this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this._viewData=void 0;let e=this.metadataFamily.replaceAllData({});for(let t of e)this.change(t)};this.invalidateCachedView=()=>{this._viewData=void 0,this.cachedView=void 0};this.invalidate=e=>{if(e.oid===this.oid)this.invalidateCachedView();else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.invalidate(e)}};this.change=e=>{if(e.oid===this.oid)this.invalidateCachedView(),this.parent?this.changeNested(e):this.changeRoot(e);else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.change(e)}};this.changeRoot=e=>{this.deleted?this.wasDeletedLastChange?this.ctx.log("debug","Entity already deleted, not emitting delete or change events",this.oid):(this.ctx.log("debug","Entity deleted",this.oid),this.emit("delete",{isLocal:e.isLocal}),this.wasDeletedLastChange=!0):(this.wasDeletedLastChange&&(this.ctx.log("debug","Entity restored",this.oid),this.emit("restore",{isLocal:e.isLocal}),this.wasDeletedLastChange=!1),this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal}))};this.changeNested=e=>{if(this.deleted){this.ctx.log("debug","Entity deleted, not emitting change",this.oid);return}this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal})};this.deepChange=(e,t)=>{if(this.deleted){this.ctx.log("debug","Entity deleted, not emitting deep change",this.oid);return}this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this.emit("changeDeep",e,t),this.parent?.deepChange(e,t)};this[Na]=e=>{this.deepChange(this,{isLocal:!1,oid:this.oid})};this.getChild=(e,t)=>{let r=Ue(this.schema,e);if(!r)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);return this.entityFamily.get({oid:t,schema:r,entityFamily:this.entityFamily,metadataFamily:this.metadataFamily,parent:this,ctx:this.ctx,files:this.files,fieldPath:[...this.fieldPath,e],storeEvents:this.storeEvents,deleteSelf:this.delete.bind(this,e)})};this.subscribeToField=(e,t,r)=>Js(this,e,r);this.get=e=>{Ki(e);let t=this.rawView;if(!t)throw new Error(`Cannot access data at key ${e} on deleted entity ${this.oid}`);let r=t[e],s=Ue(this.schema,e);if(!s)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);if($(r))if(he(r)){if(s.type!=="file")throw new Error(`Expected file schema for key ${String(e)}, got ${s.type}`);return this.files.get(r.id,{downloadRemote:!!s.downloadRemote,ctx:this.ctx,parent:this})}else{let o=this.getChild(e,r.id);if(o.deepInvalid){if(s.type==="array"||s.type==="map")return o;if(Ie(s))return null;if(Je(s)){let a=o.getUnprunedSnapshot(),l=this.patchCreator.createDiff(a,Ve(s),{merge:!1,mergeUnknownObjects:!0,authz:this.access});return this.processPrunedChild(e,o,l)}}return o}else{if(this.schema.type==="map"&&r===void 0)return;if(Re({field:s,value:r,fieldPath:[...this.fieldPath,e],depth:1,requireDefaults:!0}))if(Je(s)){if(os(s))return Ve(s);let o=Ve(s),a=Se(this.oid),l=this.patchCreator.createInitialize(o,a,this.access);l.push(...this.patchCreator.createSet(this.oid,e,ne(a),this.access));let p=this.getChild(e,a);return this.processPrunedChild(e,p,l)}else return;return r}};this.processPrunedChild=(e,t,r)=>{this.ctx.log("warn","Replacing invalid child object field with ephemeral, valid data",this.oid,e);let s=this.metadataFamily.addEphemeralData(r);for(let o of s)this.invalidate(o);return t};this.getOrSet=(e,t)=>{Ki(e);let r=this.get(e);return r||(this.set(e,t),this.get(e))};this.processInputValue=(e,t)=>{if(this.readonlyKeys.includes(t))throw new Error(`Cannot set readonly key ${t.toString()}`);it(e)||(e=de(e,!1));let r=Ue(this.schema,t);if(r){We(e,r);let s=Re({field:r,value:e,fieldPath:[...this.fieldPath,t]});if(s)throw new Error(`Validation error: ${s.message}`,{cause:s})}return lt(e,s=>this.files.add(s,this))};this.getDeleteMode=e=>{if(this.readonlyKeys.includes(e))return!1;if(this.schema.type==="any"||this.schema.type==="map")return"delete";if(this.schema.type==="object"){let t=this.schema.properties[e];if(!t||t.type==="any")return"delete";if(t.type==="map")return!1;if(t.nullable)return"null"}return!1};this.getItemRefValue=e=>{if(e instanceof i)return ne(e.oid);if(e instanceof be)return xt(e.id);if(typeof e=="object"){let t=G(e);if(!t||!this.entityFamily.has(t))throw new Error(`Cannot move object ${JSON.stringify(e)} which does not exist in this list`);return ne(t)}else return e};this.set=(e,t,r)=>{Ki(e),!(!r?.force&&this.get(e)===t)&&(this.isList?this.addPendingOperations(this.patchCreator.createListSet(this.oid,e,this.processInputValue(t,e))):this.addPendingOperations(this.patchCreator.createSet(this.oid,e,this.processInputValue(t,e))))};this.getAll=()=>this.view;this.delete=e=>{if(this.isList)Ua(e),this.addPendingOperations(this.patchCreator.createListDelete(this.oid,e));else{let t=this.getDeleteMode(e);if(!t)throw new Error(`Cannot delete key ${e.toString()} - the property is not marked as optional in the schema.`);t==="delete"?this.addPendingOperations(this.patchCreator.createRemove(this.oid,e)):this.addPendingOperations(this.patchCreator.createSet(this.oid,e,null))}};this.keys=()=>this.view?Object.keys(this.view):[];this.entries=()=>this.view?Object.entries(this.view):[];this.values=()=>this.view?Object.values(this.view):[];this.update=(e,{merge:t=!0,replaceSubObjects:r=!1,preserveUndefined:s=!1,dangerouslyDisableMerge:o=!1}={})=>{if(!t&&!o&&this.schema.type!=="any"&&this.schema.type!=="map")throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');let a={};z(a,this.oid);for(let[l,p]of Object.entries(e)){if(this.readonlyKeys.includes(l))throw new Error(`Cannot set readonly key ${l.toString()}`);if(p===void 0&&!s)continue;let h=Ue(this.schema,l);h&&We(p,h),a[l]=this.processInputValue(p,l)}this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(),a,{mergeUnknownObjects:!r,merge:t}))};this.push=e=>{this.addPendingOperations(this.patchCreator.createListPush(this.oid,this.processInputValue(e,this.view.length)))};this.insert=(e,t)=>{this.addPendingOperations(this.patchCreator.createListInsert(this.oid,e,this.processInputValue(t,e)))};this.move=(e,t)=>{this.addPendingOperations(this.patchCreator.createListMoveByIndex(this.oid,e,t))};this.moveItem=(e,t)=>{let r=this.getItemRefValue(e);if($(r))this.addPendingOperations(this.patchCreator.createListMoveByRef(this.oid,r,t));else{let s=this.view.indexOf(e);if(s===-1)throw new Error(`Cannot move item ${JSON.stringify(e)} which does not exist in this list`);this.move(s,t)}};this.add=e=>{this.addPendingOperations(this.patchCreator.createListAdd(this.oid,this.processInputValue(e,this.view.length)))};this.removeAll=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e)))};this.removeFirst=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"first"))};this.removeLast=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"last"))};this.map=e=>this.view.map(e);this.filter=e=>this.view.filter(e);this.has=e=>{if(!this.isList)throw new Error("has() is only available on list entities");let t=this.getItemRefValue(e);return $(t)?this.view.some(r=>{if($(r))return Ce(r,t)}):this.view.includes(e)};this.forEach=e=>{this.view.forEach(e)};this.reduce=(e,t)=>this.view.reduce(e,t);this.some=e=>this.view.some(e);this.every=e=>this.view.every(e);this.find=e=>this.view.find(e);this.includes=this.has;this.deleteSelf=()=>this._deleteSelf();this.__getViewData__=(e,t)=>this.metadataFamily.get(e).computeView(t==="confirmed");this.__getFamilyOids__=()=>this.metadataFamily.getAllOids();this.__discardPendingOperation__=e=>{this.metadataFamily.discardPendingOperation(e),this.invalidateCachedView()};L(!!e,"oid is required"),this.oid=e,this.readonlyKeys=l||[],this.ctx=o,this.files=p,this.schema=t,this.fieldPath=v||[],this.entityFamily=r||new xn({initial:[this],ctx:o}),this.metadataFamily=a,this.storeEvents=h,this.parent=s,this._deleteSelf=O,this.parent||(h.add.attach(this.onAdd),h.replace.attach(this.onReplace),h.resetAll.attach(this.onResetAll))}get[Gs](){return this.ctx}get metadata(){return this.metadataFamily.get(this.oid)}get patchCreator(){return this.ctx.patchCreator}get viewData(){return this._viewData===void 0&&(this._viewData=this.metadata.computeView(),this.validate()),this._viewData}get rawView(){return this.viewData.view}get view(){if(this.cachedView!==void 0)return this.cachedView;if(this.viewData.deleted)return null;let e=this.rawView;if(!e&&!Ie(this.schema)||this.schema.type==="array"&&!Array.isArray(e)||(this.schema.type==="object"||this.schema.type==="map")&&!V(e))return Je(this.schema)?Ve(this.schema):null;let r=this.isList?[]:{};if(z(r,this.oid),Array.isArray(e)){let s=Ue(this.schema,0);if(!s)this.ctx.log("error","No child field schema for list entity.",this.oid);else for(let o=0;o<e.length;o++){let a=this.get(o);this.childIsNull(a)&&!Ie(s)?this.ctx.log("error","Child missing in non-nullable field",this.oid,"index:",o):r.push(a)}}else if(V(e)){let s=this.schema.type==="object"?Object.keys(this.schema.properties):Object.keys(e);for(let o of s){let a=Ue(this.schema,o);if(!a){this.ctx.log("error","No child field schema for object entity at key",o),this.schema.type==="map"?r={}:r=null;break}let l=this.get(o);if(this.childIsNull(l)&&!Ie(a)){if(this.ctx.log("error","Child entity is missing for non-nullable field",this.oid,"key:",o),this.schema.type!=="map"){r=null;break}}else Ie(a)&&l===void 0?r[o]=null:r[o]=l}}return this.cachedView=r,r}get uid(){return this.oid}get deleted(){return this.viewData.deleted||this.view===null}get quickDeleted(){return this._viewData?.deleted||this.cachedView===null}get invalid(){return!!this.validate()}get deepInvalid(){if(this.invalid)return!0;if(Array.isArray(this.rawView)){for(let e=0;e<this.rawView.length;e++)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}else if(V(this.rawView)){for(let e in this.rawView)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}return!1}get isList(){return this.schema.type==="array"||Array.isArray(this.viewData.view)}get updatedAt(){return this.viewData.updatedAt}get deepUpdatedAt(){if(this.cachedDeepUpdatedAt)return this.cachedDeepUpdatedAt;let e=this.updatedAt;return this.isList?this.forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}):this.values().forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}),this.cachedDeepUpdatedAt=e,e}get isOutdatedVersion(){return this.parent?this.parent.isOutdatedVersion:this.viewData.fromOlderVersion}get namespace(){return this.ctx.namespace}get access(){return this.viewData.authz}get isAuthorized(){return!!this.access}get size(){return this.isList?this.length:this.keys().length}get length(){return this.view.length}[(Na=$i,Symbol.iterator)](){let e=0,t=this.view?.length;return{next:()=>e<t?{value:this.get(e++),done:!1}:{value:void 0,done:!0}}}};function Ki(i){if(typeof i=="symbol")throw new Error("Symbol keys aren't supported")}function Ua(i){if(typeof i!="number")throw new Error("Only number keys are supported in list entities")}function Ys(i){return i[Gs].getClient()}var qi=class{constructor({oid:n,ctx:e,confirmedOperations:t,pendingOperations:r,baseline:s}){this.baseline=null;this.confirmedOperations=[];this.ephemeralOperations=[];this.pendingOperations=[];this.computeView=(n=!1)=>{let e=de(this.baseline?.snapshot??void 0),t=this.baseline?.timestamp??null,r=this.baseline?.authz,s=this.applyOperations(e,!e,this.confirmedOperations,t,t);s.futureSeen&&this.ctx.globalEvents.emit("futureSeen",s.futureSeen),s.authz&&(r=s.authz);let o=!this.ephemeralOperations||n?s:this.applyOperations(s.view,s.deleted,this.ephemeralOperations,s.latestTimestamp,null),a=n?s:this.applyOperations(o.view,o.deleted,this.pendingOperations,o.latestTimestamp,null);a.authz&&(r=a.authz),a.view&&z(a.view,this.oid);let l=!!s.latestTimestamp&&_i(s.latestTimestamp,this.ctx.time.now)<0,p=!this.baseline&&!this.pendingOperations.length&&!this.confirmedOperations.length;p&&this.ctx.log("warn",`Tried to load Entity ${this.oid} with no data`);let h=a.latestTimestamp??s.latestTimestamp??t,O=h?Di(h):0;return!a.view&&!a.deleted&&!p&&this.ctx.log("warn",`Entity ${this.oid} has no view, no deleted flag, and not empty`),{view:a.view??void 0,deleted:a.deleted,empty:p,fromOlderVersion:l,updatedAt:O,latestTimestamp:h,authz:r}};this.addBaseline=n=>{if(!(this.baseline&&this.baseline.timestamp>=n.timestamp))for(this.baseline=n;this.confirmedOperations[0]?.timestamp<n.timestamp;)this.confirmedOperations.shift()};this.addConfirmedOperations=n=>{let e=0;for(let t of n){let r=this.confirmedOperations.findIndex(o=>o.timestamp>=t.timestamp);r!==-1?this.confirmedOperations[r].timestamp!==t.timestamp&&(this.confirmedOperations.splice(r,0,t),e++):(this.confirmedOperations.push(t),e++);let s=this.pendingOperations.length;this.discardPendingOperation(t),e-=s-this.pendingOperations.length}return e};this.addPendingOperation=n=>{this.pendingOperations.push(n)};this.addEphemeralOperation=n=>{this.ephemeralOperations||(this.ephemeralOperations=[]),this.ephemeralOperations.push(n)};this.clearEphemeralOperations=()=>{let n=this.ephemeralOperations;return this.ephemeralOperations=[],n};this.discardPendingOperation=n=>{this.pendingOperations=this.pendingOperations.filter(e=>e.timestamp!==n.timestamp)};this.applyOperations=(n,e,t,r,s)=>{let o,a,l=this.ctx.time.now;for(let p of t)if(!(s&&p.timestamp<=s)){if(_i(p.timestamp,l)>0){o=p.timestamp;continue}p.data.op==="delete"?e=!0:(n=Be(n,p.data),p.data.op==="initialize"&&(e=!1,p.authz&&(a=p.authz))),(!r||p.timestamp>r)&&(r=p.timestamp)}return{view:n,latestTimestamp:r??null,deleted:e,futureSeen:o,authz:a}};L(n,"oid is required"),this.ctx=e,this.oid=n,t&&(this.confirmedOperations=t),r&&(this.pendingOperations=r),s&&(this.baseline=s)}},Sn=class{constructor({ctx:n,onPendingOperations:e,rootOid:t}){this.entities=new Map;this.get=n=>(L(n,"oid is required"),this.entities.has(n)||this.entities.set(n,new qi({oid:n,ctx:this.ctx})),this.entities.get(n));this.getAllOids=()=>Array.from(this.entities.keys());this.addConfirmedData=({baselines:n=[],operations:e={},isLocal:t=!1})=>{let r={};for(let s of n){if(!Le(this.rootOid,s.oid))throw new Error(`Invalid baseline for entity ${this.rootOid}: `+JSON.stringify(s));this.get(s.oid).addBaseline(s),r[s.oid]??={oid:s.oid,isLocal:t}}for(let[s,o]of Object.entries(e)){if(!Le(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o)!==0&&(r[s]??={oid:s,isLocal:t})}return Object.values(r)};this.addPendingData=n=>{this.flushAllEphemeral();let e={};for(let t of n)this.get(t.oid).addPendingOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return this.onPendingOperations(n),Object.values(e)};this.ephemeralMemo=new Array;this.flushAllEphemeral=()=>{for(let n of this.entities.values()){let e=n.clearEphemeralOperations();e&&this.ephemeralMemo.push(...e)}if(this.ephemeralMemo.length){let n=this.ephemeralMemo.slice();this.ephemeralMemo.length=0,this.addPendingData(n)}};this.addEphemeralData=n=>{let e={};for(let t of n)this.get(t.oid).addEphemeralOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return Object.values(e)};this.replaceAllData=({operations:n={},baselines:e=[]})=>{let t=Array.from(this.entities.keys());this.entities.clear();let r={};for(let s of t)r[s]={oid:s,isLocal:!1};for(let s of e){if(!Le(this.rootOid,s.oid))throw new Error(`Invalid baseline for entity ${this.rootOid}: `+JSON.stringify(s));this.get(s.oid).addBaseline(s),r[s.oid]??={oid:s.oid,isLocal:!1}}for(let[s,o]of Object.entries(n)){if(!Le(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o),r[s]??={oid:s,isLocal:!1}}return Object.values(r)};this.discardPendingOperation=n=>{this.entities.get(n.oid)?.discardPendingOperation(n)};this.ctx=n,this.rootOid=t,this.onPendingOperations=e}};var Tt="@@default",On=class{constructor({batchTimeout:n=200,ctx:e,entities:t}){this.currentBatchKey=Tt;this.flushOperations=async(n,e,t)=>{if(!n.length)return;this.ctx.log("debug","Flushing",n.length,"operations from batch",e,"to storage / sync");let r=[],s={};for(let o=n.length-1;o>=0;o--){let a=n[o],l=s[a.oid];if(l&&Tr(a,l)){this.entities.discardPendingOperation(a);continue}let p=Fr(a);p!==!1&&(s[a.oid]||(s[a.oid]=new Set),s[a.oid].add(p)),r.unshift(a)}for(let o of r)o.timestamp=this.ctx.time.now;await this.commitOperations(r,t)};this.commitOperations=async(n,e)=>{if(n.length){if(e.undoable){let t=await this.createUndo({ops:n,source:e.source});t&&this.ctx.undoHistory.addUndo(t)}await this.entities.addData({operations:n,baselines:[],isLocal:!0})}};this.addOperations=n=>{n.length&&(this.batcher.add({key:this.currentBatchKey,items:n}),this.ctx.log("debug","added",n.length,"ops to batch",this.currentBatchKey,", size = ",this.batcher.getSize(this.currentBatchKey)))};this.batch=({undoable:n=!0,batchName:e=wt(),max:t=null,timeout:r=this.defaultBatchTimeout}={})=>{let s=this.batcher.add({key:e,max:t,timeout:r,items:[],userData:{undoable:n}}),o={run:a=>(this.currentBatchKey=e,a(),this.currentBatchKey=Tt,o),commit:async()=>(await this.batcher.flush(Tt),s.flush()),flush:()=>o.commit(),discard:()=>{this.batcher.discard(e)}};return o};this.flushAll=()=>(this.ctx.log("debug","Flushing all operations"),Promise.all(this.batcher.flushAll()));this.createUndo=async n=>{let e=await this.getInverseOperations(n);return e.length?async()=>{let t=await this.createUndo({ops:e,source:n.source,isRedo:!0});for(let r of e)r.timestamp=this.ctx.time.now;return this.ctx.log("debug",n.isRedo?"Redo":"Undo",e,`
7
7
  was
8
- `,n.ops),await this.commitOperations(e,{undoable:!1}),t}:null};this.getInverseOperations=async({ops:n,source:e})=>{let t=St(n),r=[],s=()=>this.ctx.time.now;return await Promise.all(Object.entries(t).map(async([o,a])=>{let h=(e??await this.entities.hydrate(K(o)))?.__getViewData__(o,"confirmed");if(!h){this.ctx.log("warn","could not find entity",o,"for undo operation",n);return}let p=fs(o,h.view,a,s);r.unshift(...p)})),r};this.ctx=e,this.entities=t,this.defaultBatchTimeout=n,this.batcher=new nt(this.flushOperations),this.batcher.add({key:kt,items:[],max:100,timeout:n,userData:{undoable:!0}})}get isDefaultBatch(){return this.currentBatchKey===kt}};var En=class extends oe{constructor({ctx:e,files:t}){super();this.events={add:new In.WeakEvent,replace:new In.WeakEvent,resetAll:new In.WeakEvent};this.cache=new Map;this.pendingEntityPromises=new Map;this.abortDataQueueController=new AbortController;this.ongoingResetPromise=null;this.entityFinalizationRegistry=new FinalizationRegistry(e=>{this.ctx.log("debug","Entity GC",e)});this.addData=async e=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not adding incoming data");return}e.reset&&(this.ctx.log("info","Resetting local store to replicate remote synced data - dropping any current transactions"),this.abortDataQueueController.abort(0),this.abortDataQueueController=new AbortController,this.ongoingResetPromise=this.resetData().finally(()=>{this.ongoingResetPromise=null,this.ctx.globalEvents.emit("resetToServer")})),this.ongoingResetPromise&&(this.ctx.log("debug","Waiting for ongoing reset to complete"),await this.ongoingResetPromise,this.ctx.log("debug","Ongoing reset complete")),await this.processData(e)};this.empty=async()=>{await this.ctx.documents.reset(),this.events.resetAll.invoke(this),this.cache.clear()};this.resetData=async()=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not resetting local data");return}await this.ctx.meta.reset(),await this.ctx.documents.reset(),this.events.resetAll.invoke(this)};this.processData=async e=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not processing incoming data");return}let t=e?.baselines??[],r=e?.operations??[];if(t.length===0&&r.length===0){this.ctx.log("debug","No data to process");return}this.ctx.log("debug","Processing incoming data",{operations:r.length,baselines:t.length,reset:!!e.reset});let s=Array.from(new Set(t.map(p=>K(p.oid)).concat(r.map(p=>K(p.oid))))),o=Pr(t),a=Cr(r);this.ctx.log("debug","Applying data to live entities");for(let p of s){let O=o[p],v=a[p]??[],P=St(v),y=e.reset?this.events.replace:this.events.add,I=this.pendingEntityPromises.get(p);I?(this.ctx.log("debug","Waiting for ongoing entity hydration",p),I.then(()=>{y.invoke(this,{oid:p,baselines:O,operations:P,isLocal:!1})})):(this.ctx.log("debug","Applying data to entity",p),y.invoke(this,{oid:p,baselines:O,operations:P,isLocal:!1}))}let d={abort:this.abortDataQueueController.signal};await this.ctx.meta.insertData(e,d),this.ctx.log("debug","Data processing complete, all data saved to metadata db.");let h=await Promise.all(s.map(async p=>await this.hydrate(p,d)??{oid:p,getSnapshot(){return null}}));try{this.ctx.log("debug","Saving entities to queryable storage"),await this.ctx.documents.saveEntities(h,d)}catch(p){this.disposed?this.ctx.log("warn","Error saving entities to queryable storage - EntityStore is disposed",p):this.ctx.log("error","Error saving entities to queryable storage",p)}};this.hydrate=async(e,t)=>{if(!Wt(e))throw new Error("Cannot hydrate non-root entity");if(this.cache.has(e)){let s=this.cache.get(e);if(s){let o=s.deref();if(o)return o.deleted?(this.ctx.log("debug","Hydrated entity is deleted",e),null):(this.ctx.log("debug","Hydrating entity from cache",e),o);this.ctx.log("debug","Removing GC'd entity from cache",e),this.cache.delete(e)}}let r=this.pendingEntityPromises.get(e);if(r)return this.ctx.log("debug","Waiting for ongoing entity hydration",e),r;{this.ctx.log("debug","Hydrating entity from storage",e);let s=this.constructEntity(e);if(!s)return this.ctx.log("warn","Entity schema not found, cannot construct",e),null;let o=this.loadEntity(s,t);return o.finally(()=>{this.pendingEntityPromises.delete(e)}),this.pendingEntityPromises.set(e,o),o}};this.destroy=async()=>{this.dispose(),await this.batcher.flushAll()};this.create=async(e,t,{undoable:r=!0,access:s}={})=>{this.ctx.log("debug","Creating new entity",t);let{collection:o}=ue(t);Qt(e);let a=[],d=lt(e,a.push.bind(a));z(d,t);let h=this.constructEntity(t);if(!h)throw new Error(`Could not put new document: no schema exists for collection ${o}`);a.forEach(v=>this.files.add(v,h));let p=this.ctx.patchCreator.createInitialize(d,t,s);await this.batcher.commitOperations(p,{undoable:!!r,source:h});let O=St(p);return this.events.add.invoke(this,{operations:O,isLocal:!0,oid:t}),this.cache.set(t,this.ctx.weakRef(h)),h};this.deleteAll=async(e,t)=>{this.ctx.log("info","Deleting documents",e),L(e.every(o=>o===K(o)),"Only root documents may be deleted via client methods");let r=await Promise.all(e.map(o=>this.hydrate(o)));e.forEach(o=>{this.cache.delete(o),this.ctx.log("debug","Deleted document from cache",o)});let s=[];for(let o of r)if(o){let a=o.__getFamilyOids__(),d=this.ctx.patchCreator.createDeleteAll(a);for(let h of d)h.authz=o.access;s.push(...d)}await this.batcher.commitOperations(s,{undoable:t?.undoable===void 0?!0:t.undoable})};this.delete=async(e,t)=>this.deleteAll([e],t);this.getCollectionSchema=e=>{let t=this.ctx.schema.collections[e];return t?{schema:{type:"object",nullable:!1,properties:t.fields},readonlyKeys:[t.primaryKey]}:(this.ctx.log("warn",`Missing schema for collection: ${e}`),{schema:null,readonlyKeys:[]})};this.constructEntity=e=>{L(!!e,"Cannot construct entity without OID");let{collection:t}=ue(e),{schema:r,readonlyKeys:s}=this.getCollectionSchema(t);if(!r)return null;if(this.disposed)throw new Error("Cannot hydrate entity after store has been disposed");let o=new Sn({ctx:this.ctx,onPendingOperations:this.onPendingOperations,rootOid:e});return new pe({ctx:this.ctx,oid:e,schema:r,readonlyKeys:s,files:this.files,metadataFamily:o,storeEvents:this.events,deleteSelf:this.delete.bind(this,e)})};this.onPendingOperations=e=>{this.batcher.addOperations(e)};this.discardPendingOperation=e=>{let t=K(e.oid);this.cache.get(t)?.deref()?.__discardPendingOperation__(e)};this.loadEntity=async(e,t)=>(await this.loadEntityData(e,t),this.cache.set(e.oid,this.ctx.weakRef(e)),this.entityFinalizationRegistry.register(e,e.oid),e);this.loadEntityData=async(e,t)=>{let{operations:r,baselines:s}=await this.ctx.meta.getDocumentData(e.oid,t);return!s.length&&!Object.keys(r).length?(this.ctx.log("debug","No data found for entity",e.oid),null):(this.ctx.log("debug","Loaded entity from storage",e.oid),this.events.replace.invoke(this,{oid:e.oid,baselines:s,operations:r,isLocal:!1}),e)};this.clearCache=()=>{this.ctx.log("debug","Emptying entity cache"),this.cache.clear()};this.ctx=e,this.files=t,this.batcher=new On({ctx:e,entities:this}),this.addDispose(this.ctx.internalEvents.subscribe("persistenceReset",this.clearCache))}get batch(){return this.batcher.batch}get flushAllBatches(){return this.batcher.flushAll}};function Gs({currentVersion:i,targetVersion:n,migrations:e}){let t=Ys({currentVersion:i,targetVersion:n,migrations:e});if(!t)throw new q(q.Code.MigrationPathNotFound,void 0,`No migration path found from ${i} to ${n}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);return t}function Ys({currentVersion:i,targetVersion:n,migrations:e}){if(i===n)return[];let t=e.filter(r=>r.oldSchema.version===i).sort((r,s)=>s.newSchema.version-r.newSchema.version);for(;t.length>0;){let r=t.shift();if(r.newSchema.version>n)return null;if(r.newSchema.version===n)return[r];let s=Ys({currentVersion:r.newSchema.version,targetVersion:n,migrations:e});if(s)return[r,...s]}return null}var _n=class extends oe{constructor({sync:e,context:t}){super();this.cache=new Map;this.add=async(e,t)=>{let r=this.cache.get(e.id);r||(r=new be(e.id,{ctx:this.context,parent:t}),this.cache.set(e.id,r)),e.remote||r[dt](e);let s=await this.context.files.add(e);r[dt](s)};this.get=(e,t)=>{if(this.cache.has(e))return this.cache.get(e);let r=new be(e,t);return this.cache.set(e,r),this.load(r),r};this.load=async e=>{let t=await this.context.files.get(e.id);if(t)e[dt](t);else try{if(this.sync.status!=="active"){this.context.log("info","Sync is not active, waiting for online to load file",e.id,e.name);let s=this.sync.subscribe("onlineChange",o=>{o&&(s(),this.load(e))});return}let r=await this.sync.getFile(e.id);r.success?(await this.context.files.add(r.data),e[dt](r.data)):(this.context.log("error","Failed to load file",r),e[wn]())}catch(r){this.context.log("error","Failed to load file",r),e[wn]()}};this.onFileUploaded=e=>{this.context.log("debug","Marking file as uploaded",e.id),this.context.files.onUploaded(e.id)};this.sync=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("fileUploaded",this.onFileUploaded))}};var Ki=typeof window<"u"?window.indexedDB:void 0;function Xe(i){return i instanceof Error&&i.name==="AbortError"}function ut(i){return new Promise((n,e)=>{i.onsuccess=()=>{n(i.result)},i.onerror=()=>{i.error&&Xe(i.error)?n(i.result):e(i.error)}})}function Ze(i,n){return new Promise((e,t)=>{let r=i.transaction([n],"readonly"),o=r.objectStore(n).openCursor(),a=0,d=0;o.onsuccess=function(h){let p=o.result;p&&(a++,d=d+wr(p.value),p.continue())},o.onerror=function(h){o.error&&Xe(o.error)?e({count:a,size:d}):t(o.error)},r.oncomplete=function(h){e({count:a,size:d})},r.onabort=function(h){t(h)},r.onerror=function(h){t(h)}})}function qi(i,n){let e=i.transaction(n,"readonly"),t=n.map(r=>{let s=e.objectStore(r);return ut(s.getAll())});return Promise.all(t)}async function ve(i){i.close(),await new Promise(n=>{n()}),await new Promise(n=>{n()})}async function Dn(i,n=Ki){let e=n.deleteDatabase([i,"meta"].join("_")),t=n.deleteDatabase([i,"collections"].join("_"));await Promise.all([new Promise((r,s)=>{e.onsuccess=r,e.onerror=s}),new Promise((r,s)=>{t.onsuccess=r,t.onerror=s})]),window.location.reload()}function Cn(i,n=window.indexedDB){return ut(n.deleteDatabase(i))}async function Va(i=window.indexedDB){return i.databases()}function Xs(i,n,e,t,r){let s=i.transaction(n,e);if(t){let o=()=>{r?.("debug","aborting transaction");try{s.abort()}catch(a){r?.("debug","aborting transaction failed",a)}};t.addEventListener("abort",o),s.addEventListener("error",()=>{t.removeEventListener("abort",o)}),s.addEventListener("complete",()=>{t.removeEventListener("abort",o)})}return s}async function Hi(i,n,e,t=window.indexedDB){(await Va(t)).some(a=>a.name===n)&&(await Cn(n,t),e.log("debug","Deleted existing database",n));let s=await new Promise((a,d)=>{e.log("debug","Opening reset database",n,"at",i.version);let h=t.open(n,i.version);h.onupgradeneeded=()=>{e.log("debug","Upgrading database",n,"to version",i.version);let p=i,O=h.transaction;if(!O)throw new Error("No transaction");for(let v of Array.from(p.objectStoreNames)){let P=p.transaction(v).objectStore(v);O.db.createObjectStore(v,{keyPath:P.keyPath,autoIncrement:P.autoIncrement});let y=O.objectStore(v),I=p.transaction(v).objectStore(v);for(let _ of Array.from(I.indexNames)){let E=I.index(_);e.log("debug","Copying index",_),y.createIndex(_,E.keyPath,{unique:E.unique,multiEntry:E.multiEntry})}}},h.onsuccess=()=>{e.log("debug","Opened reset database",n),a(h.result)},h.onerror=()=>d(h.error??new Error("Unknown database upgrade error"))}),o=await qi(i,Array.from(i.objectStoreNames));await new Promise((a,d)=>{let h=s.transaction(Array.from(s.objectStoreNames),"readwrite");for(let p=0;p<o.length;p++){let O=h.objectStore(i.objectStoreNames[p]);for(let v of o[p])O.add(v)}h.oncomplete=()=>a(),h.onerror=p=>{let O=h.error??p.target.transaction?.error??new Error("Unknown error");e.log("critical","Error copying data",O),d(O)}}),await ve(s)}function Zs(i,n,e=window.indexedDB){return new Promise((t,r)=>{let s=e.open(i,n);s.onsuccess=()=>{t(s.result)},s.onerror=()=>{r(s.error)},s.onblocked=()=>{r(new Error("Database blocked"))},s.onupgradeneeded=o=>{let a=s.result;a.version!==n&&(a.close(),r(new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${n}, got ${a.version}`)))}})}function Bt(i){return[i,"meta"].join("_")}function ft(i){return[i,"collections"].join("_")}function eo(i){return i.name?.split("_")[0]}var Fe=class{constructor(n){this.log=n;this.consumed=!1;this.handlers=[];this.reset=()=>{this.consumed=!1}}register(n){this.handlers.push(n)}async shutdown(){this.consumed&&this.log?.("warn","ShutdownHandler already consumed"),this.consumed=!0,await Promise.all(this.handlers.map(n=>n())),this.handlers.length=0}get isShuttingDown(){return this.consumed}};function to(i,n){return`@@wip-${i}-${Ke(n)}`}function no({migration:i,newOids:n,ctx:e}){return i.allCollections.reduce((t,r)=>(t[r]={put:async(s,o)=>{He(i.newSchema.collections[r],s);let a=s[i.newSchema.collections[r].primaryKey],d=ee(r,a);return n.push(d),await e.time.withMigrationTime(i.version,()=>e.meta.insertData({operations:e.patchCreator.createInitialize(s,d,o?.access),isLocal:!0})),s},delete:async s=>{let o=ee(r,s);await e.time.withMigrationTime(i.version,()=>e.meta.deleteDocument(o))}},t),{})}function Ua({migration:i,context:n,documents:e}){return i.oldCollections.reduce((t,r)=>(t[r]={get:async s=>{let o=ee(r,s);return await n.meta.getDocumentSnapshot(o,{to:n.time.nowWithVersion(i.oldSchema.version)})},findOne:async s=>{let o=await e.findOneOid({collection:r,index:s});return o?await n.meta.getDocumentSnapshot(o,{to:n.time.nowWithVersion(i.oldSchema.version)}):null},findAll:async s=>{let{result:o}=await e.findAllOids({collection:r,index:s});return await Promise.all(o.map(d=>n.meta.getDocumentSnapshot(d,{to:n.time.nowWithVersion(i.oldSchema.version)})))}},t),{})}async function io({migration:i,context:n,ns:e}){let t={...n,schema:i.oldSchema};if(i.oldSchema.version===0)return Na({migration:i,context:t});let r=new Array,s=await e.openDocuments(t),o=Ua({migration:i,context:t,documents:s}),a=no({migration:i,newOids:r,ctx:t}),d=async O=>{await n.meta.deleteCollection(O)},h=new Array;return{log:n.log,newOids:r,deleteCollection:d,migrate:async(O,v)=>{let P=await o[O].findAll();n.log("debug",`Migrating ${P.length} documents in ${O}`),await Promise.all(P.filter(Boolean).map(async y=>{let I=se(y);L(!!I,`Document is missing an OID: ${JSON.stringify(y)}`);let _=await n.meta.getDocumentAuthz(I),E=de(y),D=await v(y);if(D){It(E),It(D),rt(D);let k=Jt(E,D,()=>n.time.zeroWithVersion(i.version),void 0,[],{mergeUnknownObjects:!0,defaultUndefined:!1,authz:_});k.length>0&&await n.meta.insertData({operations:k,isLocal:!0})}}))},queries:o,mutations:a,awaitables:h,close:async()=>{await s.close()}}}function Na({migration:i,context:n}){let e=new Array,t=new Proxy({},{get(){throw new Error("Queries are not available in initial migrations; there is no database yet!")}}),r=no({migration:i,newOids:e,ctx:n});return{log:n.log,newOids:e,deleteCollection:()=>{throw new Error("Calling deleteCollection() in initial migrations is not supported! Use initial migrations to seed initial data using mutations.")},migrate:()=>{throw new Error("Calling migrate() in initial migrations is not supported! Use initial migrations to seed initial data using mutations.")},queries:t,mutations:r,awaitables:[],close:()=>Promise.resolve()}}async function ro({ctx:i,documents:n,migration:e,engine:t}){let r=await za({currentVersion:e.oldSchema.version,newVersion:e.newSchema.version,ctx:i});for(let s of e.allCollections){let{result:o}=await n.findAllOids({collection:s});o.push(...t.newOids.filter(h=>ue(h).collection===s),...r.filter(h=>ue(h).collection===s));let d=(await Promise.all(o.map(async h=>{try{let p=await i.meta.getDocumentSnapshot(h);return[h,p]}catch(p){return i.log("error","Could not regenerate snapshot during migration for oid",h,"this document will not be preserved",p),null}}))).filter(h=>!!h);await n.saveEntities(d.map(([h,p])=>({oid:h,getSnapshot(){return p}})),{collections:[s]})}}async function za({currentVersion:i,newVersion:n,ctx:e}){let t=[];return await e.meta.iterateAllOperations(r=>{t.push(r)},{from:e.time.zeroWithVersion(i+1)}),Array.from(new Set(t.map(r=>K(r.oid))))}async function so({context:i,version:n}){let e=await i.persistence.openNamespace(i.namespace,i);await $a(i.namespace,async()=>{let t=await i.persistence.getNamespaceVersion(i.namespace);i.log("debug","Opening index database",i.namespace,"Current database version:",t,"target version:",n,i.schema.wip?"(wip)":"");let r=Gs({currentVersion:t,targetVersion:n,migrations:i.migrations});r.length>0&&(i.log("debug","Migrations to run:",r.map(s=>s.version)),await Ka({context:i,ns:e,toRun:r}))})}async function $a(i,n){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,n):await n()}async function Ka({context:i,toRun:n,ns:e}){i.pauseRebasing=!0;for(let t of n){i.log("info",`\u{1F680} Running migration v${t.oldSchema.version} -> v${t.newSchema.version}`);let r={...i,schema:t.oldSchema,shutdownHandler:new Fe(i.log)},s=await io({migration:t,context:r,ns:e});try{i.log("debug","Migrating data",r.namespace,"from version",t.oldSchema.version,"to version",t.newSchema.version),await t.migrate(s),await Promise.all(s.awaitables)}catch(a){throw i.log("critical",`Migration failed (${t.oldSchema.version} -> ${t.newSchema.version})`,a),a instanceof Error?a:new Error("Unknown error during migration")}await s.close(),r.log("debug","Upgrading database",r.namespace,"from version",r.schema.version,"to version",t.newSchema.version),await e.applyMigration(r,t),r.schema=t.newSchema;let o=await e.openDocuments(r);await ro({ctx:r,migration:t,engine:s,documents:o}),await o.close(),r.log("debug",`Migration of ${r.namespace} complete.`),r.log("info",`
8
+ `,n.ops),await this.commitOperations(e,{undoable:!1}),t}:null};this.getInverseOperations=async({ops:n,source:e})=>{let t=$t(n),r=[],s=()=>this.ctx.time.now;return await Promise.all(Object.entries(t).map(async([o,a])=>{let p=(e??await this.entities.hydrate(K(o)))?.__getViewData__(o,"confirmed");if(!p){this.ctx.log("warn","could not find entity",o,"for undo operation",n);return}let h=ps(o,p.view,a,s);r.unshift(...h)})),r};this.ctx=e,this.entities=t,this.defaultBatchTimeout=n,this.batcher=new nt(this.flushOperations),this.batcher.add({key:Tt,items:[],max:100,timeout:n,userData:{undoable:!0}})}get isDefaultBatch(){return this.currentBatchKey===Tt}};var En=class extends oe{constructor({ctx:e,files:t}){super();this.events={add:new In.WeakEvent,replace:new In.WeakEvent,resetAll:new In.WeakEvent};this.cache=new Map;this.pendingEntityPromises=new Map;this.abortDataQueueController=new AbortController;this.ongoingResetPromise=null;this.entityFinalizationRegistry=new FinalizationRegistry(e=>{this.ctx.log("debug","Entity GC",e)});this.addData=async e=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not adding incoming data");return}e.reset&&(this.ctx.log("info","Resetting local store to replicate remote synced data - dropping any current transactions"),this.abortDataQueueController.abort(0),this.abortDataQueueController=new AbortController,this.ongoingResetPromise=this.resetData().finally(()=>{this.ongoingResetPromise=null,this.ctx.globalEvents.emit("resetToServer")})),this.ongoingResetPromise&&(this.ctx.log("debug","Waiting for ongoing reset to complete"),await this.ongoingResetPromise,this.ctx.log("debug","Ongoing reset complete")),await this.processData(e)};this.empty=async()=>{await this.ctx.documents.reset(),this.events.resetAll.invoke(this),this.cache.clear()};this.resetData=async()=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not resetting local data");return}await this.ctx.meta.reset(),await this.ctx.documents.reset(),this.events.resetAll.invoke(this)};this.processData=async e=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not processing incoming data");return}let t=e?.baselines??[],r=e?.operations??[];if(t.length===0&&r.length===0){this.ctx.log("debug","No data to process");return}this.ctx.log("debug","Processing incoming data",{operations:r.length,baselines:t.length,reset:!!e.reset});let s=Array.from(new Set(t.map(h=>K(h.oid)).concat(r.map(h=>K(h.oid))))),o=Rr(t),a=Ar(r);this.ctx.log("debug","Applying data to live entities");for(let h of s){let O=o[h],v=a[h]??[],P=$t(v),y=e.reset?this.events.replace:this.events.add,I=this.pendingEntityPromises.get(h);I?(this.ctx.log("debug","Waiting for ongoing entity hydration",h),I.then(()=>{y.invoke(this,{oid:h,baselines:O,operations:P,isLocal:!1})})):(this.ctx.log("debug","Applying data to entity",h),y.invoke(this,{oid:h,baselines:O,operations:P,isLocal:!1}))}let l={abort:this.abortDataQueueController.signal};await this.ctx.meta.insertData(e,l),this.ctx.log("debug","Data processing complete, all data saved to metadata db.");let p=await Promise.all(s.map(async h=>await this.hydrate(h,l)??{oid:h,getSnapshot(){return null}}));try{this.ctx.log("debug","Saving entities to queryable storage"),await this.ctx.documents.saveEntities(p,l)}catch(h){this.disposed?this.ctx.log("warn","Error saving entities to queryable storage - EntityStore is disposed",h):this.ctx.log("error","Error saving entities to queryable storage",h)}};this.hydrate=async(e,t)=>{if(!Wt(e))throw new Error("Cannot hydrate non-root entity");if(this.cache.has(e)){let s=this.cache.get(e);if(s){let o=s.deref();if(o)return o.deleted?(this.ctx.log("debug","Cached entity is deleted",e),null):(this.ctx.log("debug","Using cached hydrated entity",e),o);this.ctx.log("debug","Removing GC'd entity from cache",e),this.cache.delete(e)}}let r=this.pendingEntityPromises.get(e);if(r)return this.ctx.log("debug","Waiting for ongoing entity hydration",e),r;{this.ctx.log("debug","Hydrating entity from storage",e);let s=this.constructEntity(e);if(!s)return this.ctx.log("warn","Entity schema not found, cannot construct",e),null;let o=this.loadEntity(s,t);return o.finally(()=>{this.pendingEntityPromises.delete(e),this.ctx.log("debug","Hydration complete",e)}),this.pendingEntityPromises.set(e,o),o}};this.destroy=async()=>{this.dispose(),await this.batcher.flushAll()};this.create=async(e,t,{undoable:r=!0,access:s}={})=>{this.ctx.log("debug","Creating new entity",t);let{collection:o}=ue(t);Qt(e);let a=[],l=lt(e,a.push.bind(a));z(l,t);let{schema:p}=this.getCollectionSchema(o);if(!p)throw new Error(`Collection schema not found for ${o}`);let h=this.ctx.patchCreator.createInitialize(l,t,s);await this.batcher.commitOperations(h,{undoable:!!r});let O=await this.hydrate(t);if(!O)throw this.ctx.log("error","Failed to create entity; hydrated entity is null. Hopefully an error is logged above.",t),new q(q.Code.Unexpected,void 0,`Failed to create document ${t}`);return this.ctx.log("debug","Associating",a.length,"files to new entity",t),a.forEach(v=>this.files.add(v,O)),O};this.deleteAll=async(e,t)=>{this.ctx.log("info","Deleting documents",e),L(e.every(o=>o===K(o)),"Only root documents may be deleted via client methods");let r=await Promise.all(e.map(o=>this.hydrate(o))),s=[];for(let o of r)if(o){let a=o.__getFamilyOids__(),l=this.ctx.patchCreator.createDeleteAll(a);for(let p of l)p.authz=o.access;s.push(...l)}await this.batcher.commitOperations(s,{undoable:t?.undoable===void 0?!0:t.undoable}),e.forEach(o=>{this.cache.delete(o),this.ctx.log("debug","Deleted document from cache",o)})};this.delete=async(e,t)=>this.deleteAll([e],t);this.getCollectionSchema=e=>{let t=this.ctx.schema.collections[e];return t?{schema:{type:"object",nullable:!1,properties:t.fields},readonlyKeys:[t.primaryKey]}:(this.ctx.log("warn",`Missing schema for collection: ${e}`),{schema:null,readonlyKeys:[]})};this.constructEntity=e=>{L(!!e,"Cannot construct entity without OID");let{collection:t}=ue(e),{schema:r,readonlyKeys:s}=this.getCollectionSchema(t);if(!r)return null;if(this.disposed)throw new Error("Cannot hydrate entity after store has been disposed");let o=new Sn({ctx:this.ctx,onPendingOperations:this.onPendingOperations,rootOid:e});return new pe({ctx:this.ctx,oid:e,schema:r,readonlyKeys:s,files:this.files,metadataFamily:o,storeEvents:this.events,deleteSelf:this.delete.bind(this,e)})};this.onPendingOperations=e=>{this.batcher.addOperations(e)};this.discardPendingOperation=e=>{let t=K(e.oid);this.cache.get(t)?.deref()?.__discardPendingOperation__(e)};this.loadEntity=async(e,t)=>(await this.loadEntityData(e,t),this.cache.set(e.oid,this.ctx.weakRef(e)),this.entityFinalizationRegistry.register(e,e.oid),e);this.loadEntityData=async(e,t)=>{let{operations:r,baselines:s}=await this.ctx.meta.getDocumentData(e.oid,t);return!s.length&&!Object.keys(r).length?(this.ctx.log("debug","No data found for entity",e.oid),null):(this.ctx.log("debug","Loaded entity from storage",e.oid),this.events.replace.invoke(this,{oid:e.oid,baselines:s,operations:r,isLocal:!1}),e)};this.clearCache=()=>{this.ctx.log("debug","Emptying entity cache"),this.cache.clear()};this.ctx=e,this.files=t,this.batcher=new On({ctx:e,entities:this}),this.addDispose(this.ctx.internalEvents.subscribe("persistenceReset",this.clearCache))}get batch(){return this.batcher.batch}get flushAllBatches(){return this.batcher.flushAll}};function Xs({currentVersion:i,targetVersion:n,migrations:e}){let t=Zs({currentVersion:i,targetVersion:n,migrations:e});if(!t)throw new q(q.Code.MigrationPathNotFound,void 0,`No migration path found from ${i} to ${n}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);return t}function Zs({currentVersion:i,targetVersion:n,migrations:e}){if(i===n)return[];let t=e.filter(r=>r.oldSchema.version===i).sort((r,s)=>s.newSchema.version-r.newSchema.version);for(;t.length>0;){let r=t.shift();if(r.newSchema.version>n)return null;if(r.newSchema.version===n)return[r];let s=Zs({currentVersion:r.newSchema.version,targetVersion:n,migrations:e});if(s)return[r,...s]}return null}var _n=class extends oe{constructor({sync:e,context:t}){super();this.cache=new Map;this.add=async(e,t)=>{let r=this.cache.get(e.id);r||(r=new be(e.id,{ctx:this.context,parent:t}),this.cache.set(e.id,r)),e.remote||r[dt](e);let s=await this.context.files.add(e);r[dt](s)};this.get=(e,t)=>{if(this.cache.has(e))return this.cache.get(e);let r=new be(e,t);return this.cache.set(e,r),this.load(r),r};this.load=async e=>{let t=await this.context.files.get(e.id);if(t)e[dt](t);else try{if(this.sync.status!=="active"){this.context.log("info","Sync is not active, waiting for online to load file",e.id,e.name);let s=this.sync.subscribe("onlineChange",o=>{o&&(s(),this.load(e))});return}let r=await this.sync.getFile(e.id);r.success?(await this.context.files.add(r.data),e[dt](r.data)):(this.context.log("error","Failed to load file",r),e[wn]())}catch(r){this.context.log("error","Failed to load file",r),e[wn]()}};this.onFileUploaded=e=>{this.context.log("debug","Marking file as uploaded",e.id),this.context.files.onUploaded(e.id)};this.sync=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("fileUploaded",this.onFileUploaded))}};var Hi=typeof window<"u"?window.indexedDB:void 0;function Xe(i){return i instanceof Error&&i.name==="AbortError"}function ut(i){return new Promise((n,e)=>{i.onsuccess=()=>{n(i.result)},i.onerror=()=>{i.error&&Xe(i.error)?n(i.result):e(i.error)}})}function Ze(i,n){return new Promise((e,t)=>{let r=i.transaction([n],"readonly"),o=r.objectStore(n).openCursor(),a=0,l=0;o.onsuccess=function(p){let h=o.result;h&&(a++,l=l+Or(h.value),h.continue())},o.onerror=function(p){o.error&&Xe(o.error)?e({count:a,size:l}):t(o.error)},r.oncomplete=function(p){e({count:a,size:l})},r.onabort=function(p){t(p)},r.onerror=function(p){t(p)}})}function Qi(i,n){let e=i.transaction(n,"readonly"),t=n.map(r=>{let s=e.objectStore(r);return ut(s.getAll())});return Promise.all(t)}async function ve(i){i.close(),await new Promise(n=>{n()}),await new Promise(n=>{n()})}async function Dn(i,n=Hi){let e=n.deleteDatabase([i,"meta"].join("_")),t=n.deleteDatabase([i,"collections"].join("_"));await Promise.all([new Promise((r,s)=>{e.onsuccess=r,e.onerror=s}),new Promise((r,s)=>{t.onsuccess=r,t.onerror=s})]),window.location.reload()}function Cn(i,n=window.indexedDB){return ut(n.deleteDatabase(i))}async function za(i=window.indexedDB){return i.databases()}function eo(i,n,e,t,r){let s=i.transaction(n,e);if(t){let o=()=>{r?.("debug","aborting transaction");try{s.abort()}catch(a){r?.("debug","aborting transaction failed",a)}};t.addEventListener("abort",o),s.addEventListener("error",()=>{t.removeEventListener("abort",o)}),s.addEventListener("complete",()=>{t.removeEventListener("abort",o)})}return s}async function Wi(i,n,e,t=window.indexedDB){(await za(t)).some(a=>a.name===n)&&(await Cn(n,t),e.log("debug","Deleted existing database",n));let s=await new Promise((a,l)=>{e.log("debug","Opening reset database",n,"at",i.version);let p=t.open(n,i.version);p.onupgradeneeded=()=>{e.log("debug","Upgrading database",n,"to version",i.version);let h=i,O=p.transaction;if(!O)throw new Error("No transaction");for(let v of Array.from(h.objectStoreNames)){let P=h.transaction(v).objectStore(v);O.db.createObjectStore(v,{keyPath:P.keyPath,autoIncrement:P.autoIncrement});let y=O.objectStore(v),I=h.transaction(v).objectStore(v);for(let _ of Array.from(I.indexNames)){let E=I.index(_);e.log("debug","Copying index",_),y.createIndex(_,E.keyPath,{unique:E.unique,multiEntry:E.multiEntry})}}},p.onsuccess=()=>{e.log("debug","Opened reset database",n),a(p.result)},p.onerror=()=>l(p.error??new Error("Unknown database upgrade error"))}),o=await Qi(i,Array.from(i.objectStoreNames));await new Promise((a,l)=>{let p=s.transaction(Array.from(s.objectStoreNames),"readwrite");for(let h=0;h<o.length;h++){let O=p.objectStore(i.objectStoreNames[h]);for(let v of o[h])O.add(v)}p.oncomplete=()=>a(),p.onerror=h=>{let O=p.error??h.target.transaction?.error??new Error("Unknown error");e.log("critical","Error copying data",O),l(O)}}),await ve(s)}function to(i,n,e=window.indexedDB){return new Promise((t,r)=>{let s=e.open(i,n);s.onsuccess=()=>{t(s.result)},s.onerror=()=>{r(s.error)},s.onblocked=()=>{r(new Error("Database blocked"))},s.onupgradeneeded=o=>{let a=s.result;a.version!==n&&(a.close(),r(new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${n}, got ${a.version}`)))}})}function kt(i){return[i,"meta"].join("_")}function ft(i){return[i,"collections"].join("_")}function no(i){return i.name?.split("_")[0]}var Fe=class{constructor(n){this.log=n;this.consumed=!1;this.handlers=[];this.reset=()=>{this.consumed=!1}}register(n){this.handlers.push(n)}async shutdown(){this.consumed&&this.log?.("warn","ShutdownHandler already consumed"),this.consumed=!0,await Promise.all(this.handlers.map(n=>n())),this.handlers.length=0}get isShuttingDown(){return this.consumed}};function io(i,n){return`@@wip-${i}-${Ke(n)}`}function ro({migration:i,newOids:n,ctx:e}){return i.allCollections.reduce((t,r)=>(t[r]={put:async(s,o)=>{He(i.newSchema.collections[r],s);let a=s[i.newSchema.collections[r].primaryKey],l=ee(r,a);return n.push(l),await e.time.withMigrationTime(i.version,()=>e.meta.insertData({operations:e.patchCreator.createInitialize(s,l,o?.access),isLocal:!0})),s},delete:async s=>{let o=ee(r,s);await e.time.withMigrationTime(i.version,()=>e.meta.deleteDocument(o))}},t),{})}function $a({migration:i,context:n,documents:e}){return i.oldCollections.reduce((t,r)=>(t[r]={get:async s=>{let o=ee(r,s);return await n.meta.getDocumentSnapshot(o,{to:n.time.nowWithVersion(i.oldSchema.version)})},findOne:async s=>{let o=await e.findOneOid({collection:r,index:s});return o?await n.meta.getDocumentSnapshot(o,{to:n.time.nowWithVersion(i.oldSchema.version)}):null},findAll:async s=>{let{result:o}=await e.findAllOids({collection:r,index:s});return await Promise.all(o.map(l=>n.meta.getDocumentSnapshot(l,{to:n.time.nowWithVersion(i.oldSchema.version)})))}},t),{})}async function so({migration:i,context:n,ns:e}){let t={...n,schema:i.oldSchema};if(i.oldSchema.version===0)return Ka({migration:i,context:t});let r=new Array,s=await e.openDocuments(t),o=$a({migration:i,context:t,documents:s}),a=ro({migration:i,newOids:r,ctx:t}),l=async O=>{await n.meta.deleteCollection(O)},p=new Array;return{log:n.log,newOids:r,deleteCollection:l,migrate:async(O,v)=>{let P=await o[O].findAll();n.log("debug",`Migrating ${P.length} documents in ${O}`),await Promise.all(P.filter(Boolean).map(async y=>{let I=se(y);L(!!I,`Document is missing an OID: ${JSON.stringify(y)}`);let _=await n.meta.getDocumentAuthz(I),E=de(y),D=await v(y);if(D){Ot(E),Ot(D),rt(D);let k=Jt(E,D,()=>n.time.zeroWithVersion(i.version),void 0,[],{mergeUnknownObjects:!0,defaultUndefined:!1,authz:_});k.length>0&&await n.meta.insertData({operations:k,isLocal:!0})}}))},queries:o,mutations:a,awaitables:p,close:async()=>{await s.close()}}}function Ka({migration:i,context:n}){let e=new Array,t=new Proxy({},{get(){throw new Error("Queries are not available in initial migrations; there is no database yet!")}}),r=ro({migration:i,newOids:e,ctx:n});return{log:n.log,newOids:e,deleteCollection:()=>{throw new Error("Calling deleteCollection() in initial migrations is not supported! Use initial migrations to seed initial data using mutations.")},migrate:()=>{throw new Error("Calling migrate() in initial migrations is not supported! Use initial migrations to seed initial data using mutations.")},queries:t,mutations:r,awaitables:[],close:()=>Promise.resolve()}}async function oo({ctx:i,documents:n,migration:e,engine:t}){let r=await qa({currentVersion:e.oldSchema.version,newVersion:e.newSchema.version,ctx:i});for(let s of e.allCollections){let{result:o}=await n.findAllOids({collection:s});o.push(...t.newOids.filter(p=>ue(p).collection===s),...r.filter(p=>ue(p).collection===s));let l=(await Promise.all(o.map(async p=>{try{let h=await i.meta.getDocumentSnapshot(p);return[p,h]}catch(h){return i.log("error","Could not regenerate snapshot during migration for oid",p,"this document will not be preserved",h),null}}))).filter(p=>!!p);await n.saveEntities(l.map(([p,h])=>({oid:p,getSnapshot(){return h}})),{collections:[s]})}}async function qa({currentVersion:i,newVersion:n,ctx:e}){let t=[];return await e.meta.iterateAllOperations(r=>{t.push(r)},{from:e.time.zeroWithVersion(i+1)}),Array.from(new Set(t.map(r=>K(r.oid))))}async function ao({context:i,version:n}){let e=await i.persistence.openNamespace(i.namespace,i);await Ha(i.namespace,async()=>{let t=await i.persistence.getNamespaceVersion(i.namespace);i.log("debug","Opening index database",i.namespace,"Current database version:",t,"target version:",n,i.schema.wip?"(wip)":"");let r=Xs({currentVersion:t,targetVersion:n,migrations:i.migrations});r.length>0&&(i.log("debug","Migrations to run:",r.map(s=>s.version)),await Qa({context:i,ns:e,toRun:r}))})}async function Ha(i,n){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,n):await n()}async function Qa({context:i,toRun:n,ns:e}){i.pauseRebasing=!0;for(let t of n){i.log("info",`\u{1F680} Running migration v${t.oldSchema.version} -> v${t.newSchema.version}`);let r={...i,schema:t.oldSchema,shutdownHandler:new Fe(i.log)},s=await so({migration:t,context:r,ns:e});try{i.log("debug","Migrating data",r.namespace,"from version",t.oldSchema.version,"to version",t.newSchema.version),await t.migrate(s),await Promise.all(s.awaitables)}catch(a){throw i.log("critical",`Migration failed (${t.oldSchema.version} -> ${t.newSchema.version})`,a),a instanceof Error?a:new Error("Unknown error during migration")}await s.close(),r.log("debug","Upgrading database",r.namespace,"from version",r.schema.version,"to version",t.newSchema.version),await e.applyMigration(r,t),r.schema=t.newSchema;let o=await e.openDocuments(r);await oo({ctx:r,migration:t,engine:s,documents:o}),await o.close(),r.log("debug",`Migration of ${r.namespace} complete.`),r.log("info",`
9
9
  \u2B06\uFE0F v${t.newSchema.version} Migration complete. Here's the rundown:
10
10
  - Added collections: ${t.addedCollections.join(", ")}
11
11
  - Removed collections: ${t.removedCollections.join(", ")}
12
12
  - Changed collections: ${t.changedCollections.join(", ")}
13
- - New indexes: ${Object.keys(t.addedIndexes).map(a=>t.addedIndexes[a].map(d=>`${a}.${d.name}`)).flatMap(a=>a).join(", ")}
14
- - Removed indexes: ${Object.keys(t.removedIndexes).map(a=>t.removedIndexes[a].map(d=>`${a}.${d.name}`)).flatMap(a=>a).join(", ")}
15
- `)}i.pauseRebasing=!1}var Pn=class{constructor(n,e){this.db=n;this.context=e;this.onServerReset=n=>this.db.resetSyncedStatusSince(n);this.add=async n=>{if(n.url&&!(n.localPath||n.file)){this.context.log("debug","Remote file added to an entity. This usually means an entity was cloned. Downloading remote file...",n.id);let e=await this.loadFileContents(n,0,3);n.file=new File([e],n.name,{type:n.type}),delete n.url,this.context.log("debug","Downloaded remote file",n.id,n.name,". Cleared its remote URL.")}else!n.url&&!n.file&&!n.localPath&&this.context.log("warn","File added without a file or URL. This file will not be available for use.",n.id);return n.remote=!1,await this.db.add(n),this.context.internalEvents.emit("fileAdded",n),this.context.globalEvents.emit("fileSaved",n),this.context.log("debug","File added",n.id,n.name,n.type,n.file?"with binary file":n.url?"with url":n.localPath?"with local path":"with no data"),n};this.onUploaded=this.db.markUploaded.bind(this.db);this.get=this.db.get.bind(this.db);this.getAll=this.db.getAll.bind(this.db);this.listUnsynced=this.db.listUnsynced.bind(this.db);this.iterateOverPendingDelete=this.db.iterateOverPendingDelete.bind(this.db);this.stats=this.db.stats.bind(this.db);this.getFileExportName=(n,e)=>`${e}___${n}`;this.export=async(n=!0)=>{let e=await this.getAll();if(n)for(let s of e)if(!s.file&&(s.url||s.localPath))try{let o=await this.loadFileContents(s);s.file=o}catch(o){this.context.log("error","Failed to download file to cache it locally. The file will still be available using its URL. Check the file server's CORS configuration.",s,o)}else s.file||this.context.log("warn",`File ${s.id} has no file or URL. It will be missing in the export.`,s);let t=[],r=[];for(let s of e){let o=s.file;if(delete s.file,t.push(s),o){let a=new File([o],this.getFileExportName(s.name,s.id),{type:s.type});r.push(a)}else this.context.log("warn",`File ${s.id} was could not be loaded locally or from the server. It will be missing in the export.`)}return{fileData:t,files:r}};this.import=async({fileData:n,files:e})=>{let t=new Map(e.map(s=>{let{id:o}=this.parseFileExportname(s.name);return[o,s]})),r=n.map(s=>{let o=t.get(s.id);return o?{...s,file:o}:(this.context.log("warn",`File ${s.id} was not found in import`),s)});await Promise.all(r.map(s=>this.add(s)))};this.parseFileExportname=n=>{let[e,t]=n.split("___");return{id:e,originalFileName:t}};this.loadFileContents=async(n,e=0,t=0)=>{try{return await this.db.loadFileContents(n,this.context)}catch(r){if(e<t)return new Promise((s,o)=>{setTimeout(()=>{this.loadFileContents(n,e+1,t).then(s,o)},1e3)});throw this.context.log("error",`Failed to download file after ${t} retries`,r),new Error(`Failed to download file after ${t} retries`,{cause:r})}};this.cleanupDeletedFiles=async()=>{let n=0,e=0,t=[];await this.iterateOverPendingDelete(r=>{this.config.canCleanupDeletedFile(r)?(n++,t.push(r.id)):e++});for(let r of t)await this.db.delete(r);this.context.log("info",`Cleaned up ${n} files, skipped ${e} files`)};this.onFileRefsDeleted=async n=>{await Promise.all(n.map(async e=>{try{await this.db.markPendingDelete(e.id)}catch(t){this.context.log("error","Failed to mark file for deletion",t)}})),this.context.log("info",`Marked ${n.length} files as pending delete`)};e.internalEvents.subscribe("filesDeleted",this.onFileRefsDeleted),this.cleanupDeletedFiles()}get config(){return{canCleanupDeletedFile(n){return n.deletedAt!==null&&n.deletedAt<Date.now()-1e3*60*24*3},...this.context.config.files}}};var An=class{constructor(n,e,t){this.db=n;this.meta=e;this.ctx=t;this.tryAutonomousRebase=async()=>{(await this.meta.getLocalReplica()).lastSyncedLogicalTime||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(this.ctx.log("debug","Running autonomous library rebase"),await this.runRebase(this.ctx.time.now))};this.runRebase=async n=>{this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(await this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async e=>{let t=new Set,r,s=0;if(await this.db.iterateAllOperations(a=>{t.add(a.oid),r=a.timestamp,s++},{before:n,transaction:e}),!t.size||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let o=[];for(let a of t)o.push(await this.rebase(a,r||n,e))}),this.ctx.globalEvents.emit("rebase"))};this.scheduleRebase=async n=>{this.rebaseTimeout&&clearTimeout(this.rebaseTimeout),this.rebaseTimeout=setTimeout(this.runRebase,this.ctx.config.persistence?.rebaseTimeout??1e4,n),this.ctx.log("debug","Scheduled rebase up to global ack",n)};this.rebaseTimeout=null;this.rebase=async(n,e,t)=>{if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let r=await this.db.getBaseline(n,{transaction:t}),s=r?.snapshot||void 0,o=0,a=r?.authz,d=[];if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;await this.db.iterateEntityOperations(n,p=>{(!r||p.timestamp>r.timestamp)&&(s=Be(s,p.data,d),p.data.op==="initialize"&&(a=p.authz)),o++},{to:e,transaction:t}),s&&z(s,n);let h={oid:n,snapshot:s,timestamp:e,authz:a};if(!(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown))return this.ctx.closeLock=(async()=>{if(h.snapshot?await this.db.setBaselines([h],{transaction:t}):await this.db.deleteBaseline(n,{transaction:t}),await this.db.deleteEntityOperations(n,{to:e,transaction:t}),this.ctx.log("debug","rebased",n,"up to",e,":",s,"and deleted",o,"operations"),d.length){let p=d.filter(he);p.length&&this.ctx.internalEvents.emit("filesDeleted",p)}})(),h}}};var Rn=class{constructor(n,e,t){this.db=n;this.meta=e;this.ctx=t;this.createOperation=async n=>{let e=await this.meta.getLocalReplica();return this.ctx.log("debug","Creating operation message",n.operations.length),{type:"op",timestamp:this.ctx.time.now,replicaId:e.id,operations:n.operations.map(Kt)}};this.createSyncStep1=async n=>{let e=await this.meta.getLocalReplica(),t=n===null?null:e.lastSyncedLogicalTime,r=[],s=new Set;return this.db.transaction({mode:"readwrite",storeNames:["operations","baselines"]},async o=>{t?(this.ctx.log("debug","Syncing local operations since",t),await this.db.iterateLocalOperations(d=>{r.push(Kt(d)),s.add(K(d.oid))},{after:t,transaction:o})):(this.ctx.log("debug","Syncing all operations"),await this.db.iterateAllOperations(d=>{r.push(Kt(d)),s.add(K(d.oid))},{transaction:o}));let a=[];return t||await this.db.iterateAllBaselines(d=>{a.push(d)},{transaction:o}),r.length>0&&this.ctx.log("debug",`Syncing ${r.length} operations since ${t}`),{type:"sync",schemaVersion:this.ctx.schema.version,timestamp:this.ctx.time.now,replicaId:e.id,resyncAll:!e.lastSyncedLogicalTime,operations:r,baselines:a,since:t}})};this.createPresenceUpdate=async n=>{let e=await this.meta.getLocalReplica();return{type:"presence-update",presence:n.presence,replicaId:e.id,internal:n.internal}};this.createHeartbeat=async()=>{let n=await this.meta.getLocalReplica();return{type:"heartbeat",timestamp:this.ctx.time.now,replicaId:n.id}};this.createAck=async n=>{let e=await this.meta.getLocalReplica();return{type:"ack",timestamp:this.ctx.time.now,replicaId:e.id,nonce:n}}}};var oo=Te(Qe(),1),Fn=class{constructor(n,e){this.db=n;this.ctx=e;this.events=new N;this.insertOperations=async(n,e)=>{this.ctx.log("debug",`Inserting ${n.length} operations`,n);let t=await this.db.addOperations(n,e);for(let r of n)this.ctx.globalEvents.emit("operation",r);return!this.ctx.config.persistence?.disableRebasing&&!this.ctx.pauseRebasing&&this.rebaser.tryAutonomousRebase(),t};this.insertLocalOperations=async(n,e)=>{if(n.length===0)return;for(let r of n)r.isLocal=!0;await this.insertOperations(n,e),this.ctx.log("debug",`Inserted ${n.length} local operations; sending sync message`);let t=await this.messageCreator.createOperation({operations:n});this.events.emit("syncMessage",t)};this.insertRemoteOperations=async(n,e)=>{if(n.length===0)return[];for(let t of n)t.isLocal=!1;await this.insertOperations(n,e),this.ack(n[n.length-1].timestamp)};this.insertRemoteBaselines=async(n,e)=>{if(n.length===0)return[];this.ctx.log("debug",`Inserting ${n.length} remote baselines`),await this.db.setBaselines(n,e);let t=new Set;return n.forEach(r=>{t.add(K(r.oid))}),Array.from(t)};this.deleteDocument=async n=>{let e=new Set,t=K(n);return L(t===n,"Must be root document OID"),e.add(t),this.db.transaction({storeNames:["baselines","operations"]},async r=>{await Promise.all([this.db.iterateDocumentBaselines(t,a=>{e.add(a.oid)},{transaction:r}),this.db.iterateDocumentOperations(t,a=>{e.add(a.oid)},{transaction:r})]);let s=await this.getDocumentAuthz(t),o=new Array;for(let a of e)o.push({oid:a,timestamp:this.ctx.time.now,data:{op:"delete"},authz:s});return this.insertLocalOperations(o,{transaction:r})})};this.deleteCollection=async n=>{let e=new Set;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await Promise.all([this.db.iterateCollectionBaselines(n,s=>{e.add(s.oid)},{transaction:t}),this.db.iterateCollectionOperations(n,s=>{e.add(s.oid)},{transaction:t})]);let r=new Array;for(let s of e)r.push({oid:s,timestamp:this.ctx.time.now,data:{op:"delete"},authz:void 0});return this.insertLocalOperations(r,{transaction:t})})};this.getDocumentSnapshot=async(n,e={})=>{let t=K(n);return L(t===n,"Must be root document OID"),this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async r=>{let s=[];await this.db.iterateDocumentBaselines(t,d=>{s.push(d)},{transaction:r});let o=new Map;for(let d of s)d.snapshot&&z(d.snapshot,d.oid),o.set(d.oid,d.snapshot);await this.db.iterateDocumentOperations(t,d=>{let h=o.get(d.oid)||void 0,p=Be(h,d.data);p&&z(p,d.oid),o.set(d.oid,p)},{transaction:r,to:e.to||this.ctx.time.now});let a=o.get(t);return a&&$t(a,o),a})};this.getDocumentData=async(n,e)=>this.db.transaction({storeNames:["baselines","operations"],abort:e?.abort},async t=>{let r=[],s={};return await Promise.all([this.db.iterateDocumentBaselines(n,o=>{r.push(o)},{transaction:t}),this.db.iterateDocumentOperations(n,o=>{s[o.oid]??=[],s[o.oid].push(o)},{transaction:t})]),{baselines:r,operations:s}});this.getDocumentAuthz=async n=>{let e;return await this.db.iterateEntityOperations(n,t=>{if(t.data.op==="initialize")return e=t.authz,!0}),e};this.insertData=async(n,e)=>this.db.transaction({storeNames:["baselines","operations"],abort:e?.abort,mode:"readwrite"},async t=>{if(this.ctx.log("debug","Begin insert data transaction"),n.baselines&&await this.insertRemoteBaselines(n.baselines,{transaction:t}),this.ctx.log("debug","Inserted baselines (if any)"),e?.abort?.aborted)throw new Error("Aborted");n.operations&&(n.isLocal?(this.ctx.log("debug","Inserting local operations"),await this.insertLocalOperations(n.operations,{transaction:t})):(this.ctx.log("debug","Inserting remote operations"),await this.insertRemoteOperations(n.operations,{transaction:t}))),this.ctx.log("debug","End insert data transaction")});this.updateLastSynced=async n=>{if(!this.ctx.closing)return this.updateLocalReplica({lastSyncedLogicalTime:n})};this.setGlobalAck=async n=>{this.ctx.closing||(await this.db.setGlobalAck(n),this.ctx.config.persistence?.disableRebasing||await this.rebaser.scheduleRebase(n))};this._cachedLocalReplica=null;this._creatingLocalReplica=void 0;this.getLocalReplica=async n=>{if(this._cachedLocalReplica)return this._cachedLocalReplica;let e=await this.db.getLocalReplica(n);return e?(this.ctx.log("debug","Read local replica",e),this._cachedLocalReplica=e,e):this._creatingLocalReplica?this._creatingLocalReplica:(this._creatingLocalReplica=(async()=>{let r={id:(0,oo.default)(),userId:null,ackedLogicalTime:null,lastSyncedLogicalTime:null};return await this.db.updateLocalReplica(r),this._cachedLocalReplica=r,r})(),this._creatingLocalReplica)};this.updateLocalReplica=async(n,e)=>{let t=await this.getLocalReplica(e);L(!!t,"Local replica must exist"),Object.assign(t,n),this._cachedLocalReplica=t,await this.db.updateLocalReplica(t,e)};this.iterateLocalOperations=this.db.iterateLocalOperations;this.iterateAllOperations=this.db.iterateAllOperations;this.iterateAllBaselines=this.db.iterateAllBaselines;this.reset=async()=>{this.ctx.closing||await this.db.reset()};this.stats=this.db.stats;this.export=async()=>{let n=new Array,e=new Array;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await this.iterateAllOperations(s=>{e.push(s)},{transaction:t}),await this.iterateAllBaselines(s=>{n.push(s)},{transaction:t});let r=await this.getLocalReplica();return{operations:e,baselines:n,localReplica:r,schemaVersion:this.ctx.schema.version}})};this.resetFrom=async n=>{this._cachedLocalReplica=null,await this.db.reset({clearReplica:!0}),n.localReplica&&await this.updateLocalReplica({ackedLogicalTime:n.localReplica.ackedLogicalTime,lastSyncedLogicalTime:n.localReplica.lastSyncedLogicalTime}),this.ctx.log("debug","Resetting metadata from export",n),await this.insertData({operations:n.operations,baselines:n.baselines,isLocal:!0})};this.manualRebase=async()=>{if(this.ctx.closing||this.ctx.config.persistence?.disableRebasing)return;let n=await this.db.getAckInfo();n.globalAckTimestamp&&await this.rebaser.scheduleRebase(n.globalAckTimestamp)};this.ack=async n=>{let e=await this.getLocalReplica();n>this.ctx.time.now||(this.events.emit("syncMessage",{type:"ack",replicaId:e.id,timestamp:n}),!this.ctx.closing&&(!e.ackedLogicalTime||n>e.ackedLogicalTime)&&this.updateLocalReplica({ackedLogicalTime:n}))};this.rebaser=new An(n,this,e),this.messageCreator=new Rn(n,this,e)}};var Tn=class{constructor(n,e){this.db=n;this.ctx=e;this.reset=this.db.reset.bind(this.db);this.close=this.db.close.bind(this.db);this.saveEntities=async(n,e)=>{if(n.length===0)return;let t=new Set(Object.keys(this.ctx.schema.collections)),r=[],s=n.filter(o=>{let{collection:a}=ue(o.oid);return t.has(a)?(r.includes(a)||r.push(a),!0):(this.ctx.log("warn",`Entity ${o.oid} is in a collection that no longer exists in the schema. It will not be saved.`),!1)});if(r.length!==0){this.ctx.log("debug","Saving",s.length,"entities"),await this.db.saveEntities(s,{abort:e?.abort,collections:r}),this.ctx.log("debug","Saved",s.length,"entities"),this.ctx.entityEvents.emit("collectionsChanged",r);for(let o of n)this.ctx.entityEvents.emit("documentChanged",o.oid)}};this.findOneOid=this.db.findOneOid.bind(this.db);this.findAllOids=this.db.findAllOids.bind(this.db);this.stats=this.db.stats.bind(this.db)}};async function Lt(i){let n=i;if(i.schema.wip&&(n.namespace=to(i.originalNamespace,i.schema),n.log("info","Switched to WIP namespace",n.namespace),!(await n.persistence.getNamespaces()).includes(n.namespace))){let r=await n.persistence.getNamespaceVersion(n.originalNamespace);if(r===0)n.log("debug","No existing data to copy to WIP namespace");else{let s=i.oldSchemas?.find(o=>o.version===r);if(!s)throw new q(q.Code.MigrationPathNotFound,void 0,`Trying to open WIP database for version ${i.schema.version}, but the current local data is version ${r} and a historical schema for that version is not available.`);n.log("info",`Copying data from ${n.originalNamespace} to ${n.namespace}`),await n.persistence.copyNamespace(n.originalNamespace,n.namespace,{...n,schema:s})}}let e=await i.persistence.openNamespace(n.namespace,n);if(n.log("info","Opening persistence metadata"),n.meta=new Fn(await e.openMetadata(i),i),n.log("info","Opening persistence files"),n.files=new Pn(await e.openFiles(n),n),n.log("info","Migrating document database"),await so({context:n,version:i.schema.version}),n.log("info","Opening persistence documents"),n.documents=new Tn(await e.openDocuments(n),n),!i.schema.wip){let t=await i.persistence.getNamespaces();for(let r of t)r.startsWith("@@wip_")&&(i.log("debug","Cleaning up old WIP namespace",r),await i.persistence.deleteNamespace(r,i))}return n}async function ao(i,n){i.log("info","Importing data from export");let e=i.oldSchemas?.find(a=>a.version===n.data.schemaVersion);if(!e)throw new Error(`Could not find schema for version ${n.data.schemaVersion}`);let t=`@@import_${Date.now()}`,r=await Lt({...i,schema:e,namespace:t,originalNamespace:t,entityEvents:new N,internalEvents:new N,globalEvents:new N,config:{...i.config,persistence:{...i.config.persistence,disableRebasing:!0}},persistenceShutdownHandler:new Fe(i.log)});await r.meta.resetFrom(n.data);let s=new Set;for(let a of n.data.baselines)s.add(K(a.oid));for(let a of n.data.operations)s.add(K(a.oid));let o=await Promise.all(Array.from(s).map(async a=>{let d=await r.meta.getDocumentSnapshot(a);return{oid:a,getSnapshot:()=>d}}));if(await r.documents.saveEntities(o),await r.files.import(n),i.log("debug","Imported data into temporary namespace",t),await r.persistenceShutdownHandler.shutdown(),e.version!==i.schema.version){let a=i.schema,d=await Lt({...r,persistenceShutdownHandler:new Fe(i.log),schema:a});i.log("debug","Upgraded imported data to current schema"),await d.persistenceShutdownHandler.shutdown(),i.log("debug","Shut down upgraded databases")}if(await i.persistenceShutdownHandler.shutdown(),await i.persistence.copyNamespace(t,i.namespace,i),await Lt(i),n.data.schemaVersion===i.schema.version){let a=await i.meta.stats();if(a.operationsSize.count!==n.data.operations.length)throw i.log("critical","Imported operations count mismatch","expected",n.data.operations.length,"actual",a.operationsSize.count),new q(q.Code.ImportFailed,void 0,"Imported operations count mismatch");if(a.baselinesSize.count!==n.data.baselines.length)throw i.log("critical","Imported documents count mismatch","expected",n.data.baselines.length,"actual",a.baselinesSize.count),new q(q.Code.ImportFailed,void 0,"Imported documents count mismatch")}i.log("debug","Data copied to primary namespace"),await i.persistence.deleteNamespace(t,i),i.log("debug","Deleted temporary namespace"),i.internalEvents.emit("persistenceReset"),i.log("info","Data imported successfully"),i.persistenceShutdownHandler.reset()}function qa(i){return i!==null}function Qi(i){return Array.isArray(i)?i.map(Qi).filter(qa):i instanceof pe&&i.deleted?null:i}function Ne(i,n){return!i&&!n||i&&n&&Ke(i)===Ke(n)}var Wi=Symbol("ON_ALL_UNSUBSCRIBED"),me=Symbol("UPDATE"),Ha,we=class extends oe{constructor({initial:e,context:t,collection:r,key:s,shouldUpdate:o}){super();this._internalUnsubscribes=[];this._status="initial";this._executionPromise=null;this.setValue=e=>{this._rawValue=e,this.subscribeToDeleteAndRestore(this._rawValue);let t=Qi(e),r=!0;this.status==="initializing"||this.status==="initial"?r=!0:this.isListQuery?this._value.length===t.length&&this._value.every((s,o)=>s===t[o])&&(r=!1):this._value===t&&(r=!1),this._value=t,r&&(this.context.log("debug","Query value changed",this.key),this._events.emit("change",this._value)),this.status="ready"};this.refreshValue=()=>{this.setValue(this._rawValue)};this.subscribeToDeleteAndRestore=e=>{for(;this._internalUnsubscribes.length;)this._internalUnsubscribes.pop()?.();Array.isArray(e)?e.forEach(t=>{t instanceof pe&&(this._internalUnsubscribes.push(t.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(t.subscribe("restore",this.refreshValue)))}):e instanceof pe&&(this._internalUnsubscribes.push(e.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(e.subscribe("restore",()=>{this.refreshValue()})))};this.execute=()=>(this.context.log("debug","Executing query",this.key),this.status==="initial"?this.status="initializing":this.status==="ready"&&(this.status="revalidating"),this._executionPromise=this.run().then(()=>this._value).catch(e=>{if(e instanceof Error){if(e.name==="InvalidStateError"||e.name==="InvalidAccessError")return this._value;throw e}else throw new Error("Unknown error executing query")}),this._executionPromise);this[Ha]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this.isListQuery=Array.isArray(e),this._events=new N(d=>{d==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=t,this.key=s,this.collection=r;let a=o||(d=>d.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",d=>{a(d)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{Ha=Wi}get current(){return this._value}get resolved(){return this.status==="ready"?Promise.resolve(this._value):this._executionPromise??this.execute()}get subscribed(){return this._events.totalSubscriberCount()>0}get status(){return this._status}set status(e){this._status!==e&&(this._status=e,this._events.emit("statusChange",this._status))}get hasDeleted(){return this.isListQuery?this._rawValue.length!==this._value.length:!!this._rawValue&&!this._value}subscribe(e,t){if(t===void 0&&typeof e=="function")return this.resolved,this._events.subscribe("change",e);if(e==="change"&&t!==void 0)return this.resolved,this._events.subscribe("change",t);if(e==="statusChange"&&typeof t=="function")return this._events.subscribe(e,t);throw new Error("Invalid invocation of Query.subscribe")}get __rawValue(){return this._rawValue}};var kn=class extends we{constructor({id:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.hydrate(this.oid);this.setValue(e)};this.oid=ee(r.collection,e),this.hydrate=t}};var Qa,Bn=class extends we{constructor({index:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.context.documents.findOneOid({collection:this.collection,index:this.index});this.setValue(e?await this.hydrate(e):null)};this[Qa]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Qa=me}};var Wa,Ln=class extends we{constructor({index:e,hydrate:t,pageSize:r,page:s,...o}){super({initial:[],...o});this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:t}=await this.context.documents.findAllOids({collection:this.collection,index:this.index,limit:this._pageSize,offset:this._page*this._pageSize});this._hasNextPage=t,this.setValue(await Promise.all(e.map(this.hydrate)))};this.nextPage=async()=>{this.hasNextPage&&(this._page++,await this.run())};this.previousPage=async()=>{this._page!==0&&(this._page--,await this.run())};this.setPage=async e=>{this._page=e,await this.run()};this[Wa]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t,this._pageSize=r,this._page=s}static{Wa=me}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var Ja,jn=class extends we{constructor({hydrate:e,pageSize:t,index:r,...s}){super({initial:[],...s});this._upToPage=1;this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:t}=await this.context.documents.findAllOids({collection:this.collection,limit:this._pageSize*this._upToPage,offset:0,index:this.index});this._hasNextPage=t,this.setValue(await Promise.all(e.map(this.hydrate)))};this.loadMore=async()=>{let{result:e,hasNextPage:t}=await this.context.documents.findAllOids({collection:this.collection,limit:this._pageSize,offset:this._pageSize*this._upToPage,index:this.index});this._hasNextPage=t,this._upToPage++,this.setValue([...this.current,...await Promise.all(e.map(this.hydrate))])};this[Ja]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=t}static{Ja=me}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var Ga,Mn=class extends we{constructor({index:e,hydrate:t,...r}){super({initial:[],...r});this.run=async()=>{let{result:e}=await this.context.documents.findAllOids({collection:this.collection,index:this.index});this.context.log("debug",`FindAllQuery: ${e.length} oids found: ${e}`),this.setValue(await Promise.all(e.map(this.hydrate)))};this[Ga]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Ga=me}};var Vn=class{constructor({collection:n,cache:e,entities:t,context:r,documentManager:s}){this.serializeIndex=n=>n?Ke(n):"";this.get=n=>{let e=`get:${this.collection}:${n}`;return this.cache.getOrSet(e,()=>new kn({id:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:e}))};this.findOne=({index:n,key:e}={})=>{let t=e||`findOne:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new Bn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[me](n)})};this.findAll=({index:n,key:e}={})=>{let t=e||`findAll:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new Mn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[me](n)})};this.findPage=({index:n,pageSize:e,page:t,key:r})=>{let s=r||`findPage:${this.collection}:${this.serializeIndex(n)}:${e}`;return this.cache.getOrSet(s,()=>new Ln({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:t}),o=>{o[me](n)})};this.findAllInfinite=({index:n,pageSize:e,key:t})=>{let r=t||`findAllInfinite:${this.collection}:${this.serializeIndex(n)}:${e}`;return this.cache.getOrSet(r,()=>new jn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[me](n)})};this.cache=e,this.collection=n,this.hydrate=t.hydrate,this.context=r,this.documentManager=s,this.put=this.documentManager.create.bind(this.documentManager,this.collection),this.delete=this.documentManager.delete.bind(this.documentManager,this.collection),this.deleteAll=this.documentManager.deleteAllFromCollection.bind(this.documentManager,this.collection),this.clone=this.documentManager.clone.bind(this.documentManager,this.collection)}};var Un=class extends oe{constructor({evictionTime:e=5*1e3,context:t}){super();this._cache=new Map;this._holds=new Set;this.enqueueQueryEviction=e=>{setTimeout(()=>{if(!e.subscribed){if(this._holds.has(e.key)){this.context.log("debug","QueryCache: keepAlive hold on query preserves after unsubscribe",e.key);return}this._cache.get(e.key)===e&&(this._cache.delete(e.key),this.context.log("debug","QueryCache: evicted query",e.key))}},this._evictionTime)};this.dropAll=()=>{this.context.log("debug","QueryCache: drop all",this._cache.size,"queries"),this._cache.forEach(e=>e.dispose()),this._cache.clear()};this.forceRefreshAll=()=>{this.context.log("debug","QueryCache: force refresh all",this._cache.size,"queries"),this._cache.forEach(e=>e.execute())};this._evictionTime=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("persistenceReset",this.forceRefreshAll))}get activeKeys(){return Array.from(this._cache.keys())}get(e){return this._cache.get(e)||null}set(e){return this._cache.set(e.key,e),e[Wi](this.enqueueQueryEviction),this.enqueueQueryEviction(e),e}getOrSet(e,t,r){let s=this.get(e);return s?(r?.(s),s):(this.context.log("debug","QueryCache: creating new query",e),this.set(t()))}keepAlive(e){this._holds.add(e),this.context.log("debug","QueryCache: keepAlive",e)}dropKeepAlive(e){this._holds.delete(e);let t=this.get(e);t&&(t.subscribed||(this.context.log("debug","QueryCache: dropKeepAlive on unsubscribed query; queuing eviction",e),this.enqueueQueryEviction(t)))}get keepAlives(){return this._holds}};var Ji=Symbol("handleMessage"),Ya,jt=class extends N{constructor({initialPresence:e,updateBatchTimeout:t=200,defaultProfile:r,ctx:s}){super();this._peers={};this._self={profile:{}};this._selfReplicaIds=new Set;this._peerIds=new Array;this.isSelf=(e,t)=>e.id===t.replicaId||this._selfReplicaIds.has(t.replicaId)||this._self.id===t.id;this[Ya]=async(e,t)=>{let r=!1,s=!1,o=new Set(this.peerIds);if(t.type==="presence-changed")this.isSelf(e,t.userInfo)?(this._self=t.userInfo,this._selfReplicaIds.add(t.userInfo.replicaId),s=!0,this.emit("selfChanged",t.userInfo)):(o.add(t.userInfo.id),this._peers[t.userInfo.id]=t.userInfo,r=!0,this.emit("peerChanged",t.userInfo.id,t.userInfo));else if(t.type==="sync-resp"){this._peers={},o.clear();for(let[a,d]of Object.entries(t.peerPresence))this.isSelf(e,d)?(this._self=d,this._selfReplicaIds.add(d.replicaId),s=!0,this.emit("selfChanged",d)):(r=!0,o.add(a),this._peers[a]=d,this.emit("peerChanged",a,d))}else if(t.type==="presence-offline"){o.delete(t.userId),this._selfReplicaIds.delete(t.replicaId);let a=this._peers[t.userId];delete this._peers[t.userId],r=!0,this.emit("peerLeft",t.userId,a)}r&&(this._peerIds=Array.from(o).sort(),this.emit("peersChanged",this._peers)),(r||s)&&this.emit("change")};this.update=async e=>{this._updateBatch.update({items:[{presence:e}]}),this.self.presence={...this.self.presence,...e},this.emit("selfChanged",this.self),this.emit("change")};this.flushPresenceUpdates=e=>{let t={presence:this.self.presence,internal:this.self.internal};for(let r of e)r.presence&&Object.assign(t.presence,r.presence),r.internal&&Object.assign(t.internal,r.internal);this.emit("update",t)};this.setViewId=e=>{this._updateBatch.update({items:[{internal:{viewId:e}}]}),this.self.internal.viewId=e,this.emit("selfChanged",this.self),this.emit("change")};this.setFieldId=(e,t=Date.now())=>{this._updateBatch.update({items:[{internal:{lastFieldId:e,lastFieldTimestamp:t}}]}),this.self.internal.lastFieldId=e,this.emit("selfChanged",this.self),this.emit("change")};this.getViewPeers=()=>this._peerIds.map(e=>this._peers[e]).filter(e=>this.self.internal.viewId===void 0||e.internal.viewId===this.self.internal.viewId);this.getFieldPeers=(e,t=60*1e3)=>this._peerIds.map(r=>this._peers[r]).filter(r=>r.internal.lastFieldId===e&&Date.now()-r.internal.lastFieldTimestamp<t);this.self.presence=e,this.self.profile=r,this.self.internal=pi,this.self.id="",this.self.replicaId="",s.meta.getLocalReplica().then(o=>{this.self.replicaId=o.id}),this._updateBatcher=new nt(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:t,items:[],key:"default"})}static{Ya=Ji}get self(){return this._self}get peers(){return this._peers}get peerIds(){return this._peerIds}get everyone(){let e={...this._peers};return e[this.self.id]=this.self,e}get selfReplicaIds(){return this._selfReplicaIds}};var Nn=class extends oe{constructor({endpointProvider:e,ctx:t}){super();this.onFileAdded=async e=>{if(!e.remote){this.ctx.log("debug","Uploading file",e.id,e.name);try{await this.uploadFile(e)}catch(t){this.ctx.log("error","File upload failed",t)}}};this.uploadFile=async(e,t={current:0,max:3})=>{let r=e.file;if(!r)throw new Error("Cannot upload a non-local file");let{files:s,token:o}=await this.endpointProvider.getEndpoints(),a=new FormData;a.append("file",r);try{let d=await this.ctx.environment.fetch(s+`/${e.id}`,{method:"POST",body:a,credentials:"include",headers:{Authorization:`Bearer ${o}`}});if(d.ok)return this.ctx.internalEvents.emit(`fileUploaded:${e.id}`,e),this.ctx.internalEvents.emit("fileUploaded",e),this.ctx.log("info","File upload successful"),{success:!0};{let h=await d.text();return this.ctx.log("error","File upload failed",d.status,h),d.status<500||t.current>=t.max?{success:!1,error:`Failed to upload file: ${d.status} ${h}`}:(await new Promise(p=>setTimeout(p,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}}catch(d){return this.ctx.log("error","File upload failed",d),t.current>=t.max?{success:!1,error:d.message}:(await new Promise(h=>setTimeout(h,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}};this.getFile=async(e,t={current:0,max:3})=>{let{files:r,token:s}=await this.endpointProvider.getEndpoints();try{let o=await this.ctx.environment.fetch(r+`/${e}`,{method:"GET",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}});return o.ok?{success:!0,data:await o.json()}:(this.ctx.log("error","File information fetch failed",o.status,await o.text()),o.status<500&&o.status!==404||t.current>=t.max?{success:!1,error:`Failed to fetch file: ${o.status}`}:(await new Promise(a=>setTimeout(a,1e3)),this.getFile(e,{current:t.current+1,max:t.max})))}catch(o){return this.ctx.log("error","File information fetch failed",o),t.current>=t.max?{success:!1,error:o.message}:(await new Promise(a=>setTimeout(a,1e3)),this.getFile(e,{current:t.current+1,max:t.max}))}};this.endpointProvider=e,this.ctx=t,this.addDispose(t.internalEvents.subscribe("fileAdded",this.onFileAdded))}};var ht=class extends N{constructor({interval:e=15*1e3,deadlineLength:t=3*1e3,restartOnTabFocus:r=!0}={}){super();this.nextBeat=null;this.deadline=null;this.keepAlive=()=>{this.deadline&&(clearTimeout(this.deadline),this.deadline=null,this.start())};this.start=(e=!1)=>{this.stop(),e?this.beat():this.nextBeat=setTimeout(this.beat,this._interval)};this.stop=()=>{this.nextBeat&&clearTimeout(this.nextBeat),this.deadline&&clearTimeout(this.deadline)};this.beat=async()=>{this.emit("beat"),this.deadline=setTimeout(this.onDeadline,this.deadlineLength)};this.onDeadline=()=>{this.deadline=null,this.emit("missed")};this.setInterval=e=>{this._interval=e};this._interval=e,this.deadlineLength=t,typeof window<"u"&&r&&(window.addEventListener("pageshow",()=>this.start(!0)),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&this.start(!0)}))}get interval(){return this._interval}};var zn=class extends N{constructor({endpointProvider:e,presence:t,interval:r=15*1e3,ctx:s}){super();this.mode="pull";this._isConnected=!1;this._status="paused";this._hasSynced=!1;this.setInterval=e=>{this.heartbeat.setInterval(e)};this.sendRequest=async e=>{this.ctx.log("debug","Sending sync request",e);try{let{http:t,token:r}=await this.endpointProvider.getEndpoints(),s=await this.fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({messages:e}),credentials:"include"});if(s.ok){this.heartbeat.keepAlive();let o=await s.json(),a=Promise.all(o.messages.map(this.handleServerMessage));this._isConnected||(this._isConnected=!0,this.emit("onlineChange",!0)),await a}else{this.ctx.log("error","Sync request failed",s.status,await s.text()),this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1));let o=await s.json();fr(o)&&o.code===bt.TokenExpired&&(this.endpointProvider.clearCache(),this.heartbeat.keepAlive()),s.status>=500&&this.heartbeat.keepAlive()}}catch(t){this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),this.ctx.log("error",t),this.heartbeat.keepAlive()}};this.handleServerMessage=async e=>{e.type==="sync-resp"&&(this._hasSynced=!0,e.ackThisNonce&&(this.ctx.log("debug","Sending sync ack",e.ackThisNonce),await this.sendRequest([await this.ctx.meta.messageCreator.createAck(e.ackThisNonce)]))),this.emit("message",e)};this.throttledPresenceUpdate=Or(e=>{this.sendRequest([e])},3e3);this.send=e=>{switch(e.type){case"presence-update":return this.throttledPresenceUpdate(e);case"sync":case"heartbeat":return this.sendRequest([e]);case"op":if(this._hasSynced)return this.sendRequest([e]);break}};this.start=async()=>{this.status!=="active"&&(await this.endpointProvider.getEndpoints(),this.heartbeat.start(!0),this._status="active")};this.destroy=()=>{this.dispose(),this.stop()};this.onHeartbeat=async()=>{this.sendRequest([await this.ctx.meta.messageCreator.createPresenceUpdate(this.presence.self),await this.ctx.meta.messageCreator.createSyncStep1()])};this.onHeartbeatMissed=async()=>{this.emit("onlineChange",!1),this.ctx.log("warn","Missed heartbeat"),this._isConnected=!1};this.syncOnce=async()=>{await this.sendRequest([await this.ctx.meta.messageCreator.createSyncStep1()])};this.ctx=s,this.presence=t,this.endpointProvider=e,this.heartbeat=new ht({interval:r}),this.heartbeat.subscribe("beat",this.onHeartbeat),this.heartbeat.subscribe("missed",this.onHeartbeatMissed)}get fetch(){return this.ctx.environment.fetch}get interval(){return this.heartbeat.interval}get hasSynced(){return this._hasSynced}stop(){this.heartbeat.stop(),this._status="paused"}reconnect(){this.heartbeat.start(!0)}ignoreIncoming(){this.stop()}get isConnected(){return this._isConnected}get status(){return this._status}};function Gi(i){this.message=i}Gi.prototype=new Error,Gi.prototype.name="InvalidCharacterError";var co=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(i){var n=String(i).replace(/=+$/,"");if(n.length%4==1)throw new Gi("'atob' failed: The string to be decoded is not correctly encoded.");for(var e,t,r=0,s=0,o="";t=n.charAt(s++);~t&&(e=r%4?64*e+t:t,r++%4)?o+=String.fromCharCode(255&e>>(-2*r&6)):0)t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(t);return o};function Xa(i){var n=i.replace(/-/g,"+").replace(/_/g,"/");switch(n.length%4){case 0:break;case 2:n+="==";break;case 3:n+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(co(e).replace(/(.)/g,function(t,r){var s=r.charCodeAt(0).toString(16).toUpperCase();return s.length<2&&(s="0"+s),"%"+s}))}(n)}catch{return co(n)}}function $n(i){this.message=i}function Za(i,n){if(typeof i!="string")throw new $n("Invalid token specified");var e=(n=n||{}).header===!0?0:1;try{return JSON.parse(Xa(i.split(".")[e]))}catch(t){throw new $n("Invalid token specified: "+t.message)}}$n.prototype=new Error,$n.prototype.name="InvalidTokenError";var lo=Za;var Kn=class{constructor(n,e){this.config=n;this.ctx=e;this.cached=null;this.tokenInfo=null;this.getEndpoints=async()=>{if(this.cached)return this.cached;let n;if(this.config.fetchAuth)n=await this.config.fetchAuth();else{let a=this.ctx.environment.fetch;n=await a(this.config.authEndpoint,{credentials:"include"}).then(d=>{if(d.ok)return d.json();throw new Error(`Auth endpoint returned non-200 response: ${d.status}`)})}L(n.accessToken,"No access token provided from auth endpoint");let e=lo(n.accessToken);L(e.url,"No sync endpoint provided from auth endpoint"),L(e.type!==void 0,"No replica type provided from auth endpoint"),this.tokenInfo={userId:e.sub,libraryId:e.lib,url:e.url,fileUrl:e.file,role:e.role,type:parseInt(e.type+"")};let t=new URL(e.url);t.protocol=t.protocol.replace("ws","http");let r=t.toString();t.protocol=t.protocol.replace("http","ws");let s=t.toString(),o=e.file;if(!o){let a=new URL(r);a.pathname=a.pathname+"/files",o=a.toString()}return this.cached={http:r,websocket:s,files:o,token:n.accessToken},this.cached};this.clearCache=()=>{this.cached=null};if(!n.authEndpoint&&!n.fetchAuth)throw new Error("Either authEndpoint or fetchAuth must be provided to ServerSyncEndpointProvider")}get type(){return this.tokenInfo?.type??Me.Realtime}};var qn=class extends N{constructor(e){super();this.timer=null;this.isScheduled=!1;this.next=()=>{this.isScheduled||(this.isScheduled=!0,this.timer=setTimeout(()=>{this.emit("trigger"),this.isScheduled=!1,this.backoff.next()},this.backoff.current))};this.reset=()=>{this.backoff.reset(),this.timer&&(clearTimeout(this.timer),this.timer=null)};this.backoff=e}},Hn=class{constructor(n,e){this.current=0;this.next=()=>{this.current=Math.min(this.max,this.current*this.factor)};this.reset=()=>{this.current=0};this.max=n,this.factor=e}};var Qn=class extends N{constructor({endpointProvider:e,ctx:t,presence:r}){super();this.socket=null;this.connectQueue=[];this.syncQueue=[];this.incomingQueue=[];this._status="paused";this.synced=!1;this.hasStartedSync=!1;this._ignoreIncoming=!1;this.mode="realtime";this.heartbeat=new ht;this.reconnectScheduler=new qn(new Hn(60*1e3,1.5));this.onOpen=()=>{if(!this.socket)throw new Error("Invalid sync state: online but socket is null");if(this.synced=!1,this.connectQueue.length){for(let e of this.connectQueue)this.ctx.log("debug","Sending queued message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e));this.connectQueue=[]}this.ctx.log("debug","Sync connected"),this.onOnlineChange(!0),this.reconnectScheduler.reset()};this.onOnlineChange=async e=>{this.ctx.log("info","Socket online change",e),!this.disposed&&(this.ctx.closing||(e?(this.ctx.log("debug","Starting sync"),this.hasStartedSync=!0,this.synced=!1,this.send(await this.ctx.meta.messageCreator.createPresenceUpdate(this.presence.self)),this.send(await this.ctx.meta.messageCreator.createSyncStep1()),this.heartbeat.start()):(this.hasStartedSync=!1,this.synced=!1,this.heartbeat.stop()),this.emit("onlineChange",e)))};this.onMessage=async e=>{if(this._ignoreIncoming){this.ctx.log("warn","Ignoring incoming message (ignore incoming flag set)",e.data);return}let t=JSON.parse(e.data);switch(t.type){case"sync-resp":if(t.ackThisNonce&&this.send(await this.ctx.meta.messageCreator.createAck(t.ackThisNonce)),this.hasStartedSync=!0,this.synced=!0,this.syncQueue.length)if(t.overwriteLocalData)this.ctx.log("warn","Overwriting local data - dropping outgoing message queue"),this.syncQueue=[];else{for(let r of this.syncQueue)this.send(r);this.syncQueue=[]}if(this.emit("message",t),this.incomingQueue.length){for(let r of this.incomingQueue)this.emit("message",r);this.incomingQueue=[]}break;case"need-since":case"presence-changed":case"presence-offline":this.emit("message",t);break;case"op-re":if(!this.synced){this.ctx.log("debug","Enqueueing op-re message because sync hasn't finished yet",t),this.incomingQueue.push(t);break}this.emit("message",t);break;case"heartbeat-response":this.heartbeat.keepAlive(),this.emit("message",t);break;default:this.synced&&this.emit("message",t);break}};this.onError=e=>{this.ctx.log("error",e),this.reconnectScheduler.next(),this.ctx.log("info","Attempting reconnect to websocket sync")};this.onClose=e=>{this.ctx.log("info","Sync disconnected"),this.onOnlineChange(!1),this.onError(e)};this.initializeSocket=async()=>{let e=await this.endpointProvider.getEndpoints();return this.socket=new this.ctx.environment.WebSocket(e.websocket,["Bearer",e.token]),this.socket.addEventListener("message",this.onMessage),this.socket.addEventListener("open",this.onOpen),this.socket.addEventListener("error",this.onError),this.socket.addEventListener("close",this.onClose),this.socket};this.sendHeartbeat=async()=>{this.send(await this.ctx.meta.messageCreator.createHeartbeat())};this.reconnect=()=>{this.stop(),this.start()};this.canSkipSyncWait=e=>e.type==="sync"||e.type==="presence-update"||e.type==="sync-ack"||e.type==="heartbeat";this.send=e=>{this.status==="active"&&(!this.hasStartedSync&&!this.canSkipSyncWait(e)||(this.canSkipSyncWait(e)?this.socket?.readyState===Yi?(this.ctx.log("debug","Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):(this.ctx.log("debug","Enqueueing message until socket is open",JSON.stringify(e,null,2)),this.connectQueue.push(e)):this.synced?this.socket?.readyState===Yi&&(this.ctx.log("debug","Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):this.hasStartedSync&&(this.ctx.log("debug","Enqueueing message until synced",JSON.stringify(e,null,2)),this.syncQueue.push(e))))};this.destroy=()=>{this.dispose(),this.stop()};this.start=async()=>{this.socket||(await this.initializeSocket(),this._status="active")};this.stop=()=>{this.socket?.removeEventListener("message",this.onMessage),this.socket?.removeEventListener("close",this.onClose),this.socket?.close(),this.socket=null,this._status="paused"};this.ctx=t,this.endpointProvider=e,this.presence=r,this.reconnectScheduler.subscribe("trigger",this.initializeSocket),this.heartbeat.subscribe("beat",this.sendHeartbeat)}get hasSynced(){return this.synced}ignoreIncoming(){this.incomingQueue=[],this._ignoreIncoming=!0}get isConnected(){return this.socket?.readyState===Yi}get status(){return this._status}},Yi=1;async function uo(){try{let i=await navigator.permissions.query({name:"periodic-background-sync"});if(i.state==="granted"){let n=await navigator.serviceWorker.ready;if("periodicSync"in n)try{await n.periodicSync.register("verdant-sync",{minInterval:24*60*60*1e3})}catch(e){console.warn("Failed to register background sync:",e)}}else console.debug("Background sync permission is not granted:",i)}catch(i){console.error("Failed to initiate background sync:",i)}}var Wn=class extends N{constructor(e){super();this.mode="pull";this.hasSynced=!1;this.destroy=()=>{};this.isConnected=!1;this.status="paused";this.pullInterval=0;this.uploadFile=async()=>({success:!1,retry:!1});this.getFile=async()=>({success:!1,error:"Sync is not active"});this.syncOnce=async()=>{};this.presence=new jt({initialPresence:null,defaultProfile:null,ctx:e})}send(){}async start(){}stop(){}ignoreIncoming(){}reconnect(){}setMode(){}setPullInterval(){}},pt=class extends N{constructor({authEndpoint:e,fetchAuth:t,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:a,pullInterval:d,presenceUpdateBatchTimeout:h,defaultProfile:p,useBroadcastChannel:O,onOutgoingMessage:v,EXPERIMENTAL_backgroundSync:P},{ctx:y,onData:I}){super();this.broadcastChannel=null;this._activelySyncing=!1;this._hasSynced=!1;this.handleBroadcastChannelMessage=e=>{e.data.type==="sync"&&this.handleMessage(e.data.message,{source:"broadcastChannel"})};this.handleMessage=async(e,{source:t}={source:"network"})=>{if(!this.ctx.closing){if(e.type==="op-re"||e.type==="sync-resp")for(let r of e.operations)this.ctx.time.update(r.timestamp);switch(this.ctx.log("debug","sync message",JSON.stringify(e,null,2)),e.type){case"op-re":await this.onData({operations:e.operations,baselines:e.baselines}),e.globalAckTimestamp&&await this.ctx.meta.setGlobalAck(e.globalAckTimestamp);break;case"global-ack":await this.ctx.meta.setGlobalAck(e.timestamp);break;case"sync-resp":this._activelySyncing=!0,this.emit("syncingChange",!0),await this.onData({operations:e.operations,baselines:e.baselines,reset:e.overwriteLocalData}),e.globalAckTimestamp&&await this.ctx.meta.setGlobalAck(e.globalAckTimestamp),await this.ctx.meta.updateLastSynced(e.ackedTimestamp),this._activelySyncing=!1,this.emit("syncingChange",!1),this._hasSynced=!0,this.emit("synced");break;case"need-since":this.emit("serverReset",e.since),this.ctx.files.onServerReset(e.since),this.activeSync.send(await this.ctx.meta.messageCreator.createSyncStep1(e.since));break;case"server-ack":await this.ctx.meta.updateLastSynced(e.timestamp)}t==="network"&&this.broadcastChannel?.postMessage({type:"sync",message:e}),this.presence[Ji](await this.ctx.meta.getLocalReplica(),e)}};this.handleOnlineChange=async e=>{if(this.emit("onlineChange",e),e){let t=await this.ctx.files.listUnsynced(),r=await Promise.allSettled(t.map(s=>this.fileSync.uploadFile(s)));r.some(s=>s.status==="rejected")&&this.ctx.log("error","Failed to upload unsynced files",r.filter(s=>s.status==="rejected").map(s=>s.reason))}};this.handlePresenceUpdate=async e=>{this.send(await this.ctx.meta.messageCreator.createPresenceUpdate(e))};this.setMode=e=>{if(e==="realtime"&&!this.canDoRealtime)throw new Error("Cannot switch to realtime mode, because the current auth token does not allow it");let t;e==="realtime"?t=this.webSocketSync:t=this.pushPullSync,t!==this.activeSync&&(this.ctx.log("debug","switching to",e,"mode"),this.activeSync.status==="active"&&t.start(),this.activeSync.stop(),this.activeSync=t)};this.setPullInterval=e=>{this.pushPullSync.setInterval(e)};this.send=async e=>{if(this.activeSync.status==="active"){let t=this.endpointProvider.tokenInfo?.userId;if(!t)throw new q(q.Code.Unexpected,void 0,"Active sync has invalid token info");(e.type==="sync"||e.type==="op")&&ur(e,t),await this.activeSync.send(e),this.onOutgoingMessage?.(e)}};this.uploadFile=async e=>(this.ctx.log("info","Uploading file",{name:e.name,type:e.type,id:e.id,size:e.file?.size}),this.activeSync.status==="active"?this.fileSync.uploadFile(e):{success:!1,retry:!1,error:"Sync is not active"});this.getFile=async e=>{if(this.activeSync.status==="active")return this.fileSync.getFile(e);if(await this.getSyncStartPromise(),this.activeSync.status==="paused")throw new q(q.Code.Offline,void 0,"Sync is not active");return this.fileSync.getFile(e)};this.getSyncStartPromise=(e=5e3)=>new Promise((t,r)=>{let s=setTimeout(()=>{r(new Error("Sync did not start in time")),o()},e),o=this.subscribe("onlineChange",a=>{a&&(clearTimeout(s),o(),t())})});this.start=()=>this.activeSync.start();this.stop=()=>this.activeSync.stop();this.destroy=()=>{this.dispose(),this.webSocketSync.destroy(),this.pushPullSync.destroy()};this.reconnect=()=>this.activeSync.reconnect();this.syncOnce=()=>this.pushPullSync.syncOnce();if(this.onData=I,this.ctx=y,this.onOutgoingMessage=v,this.presence=new jt({initialPresence:r,defaultProfile:p,updateBatchTimeout:h,ctx:y}),this.endpointProvider=new Kn({authEndpoint:e,fetchAuth:t},y),this.webSocketSync=new Qn({endpointProvider:this.endpointProvider,presence:this.presence,ctx:y}),this.pushPullSync=new zn({endpointProvider:this.endpointProvider,presence:this.presence,interval:d,ctx:y}),this.fileSync=new Nn({endpointProvider:this.endpointProvider,ctx:y}),O&&"BroadcastChannel"in window&&(this.broadcastChannel=new BroadcastChannel(`verdant-${y.namespace}`),this.broadcastChannel.addEventListener("message",this.handleBroadcastChannelMessage)),a==="realtime"?this.activeSync=this.webSocketSync:this.activeSync=this.pushPullSync,this.presence.subscribe("update",this.handlePresenceUpdate),y.meta.events.subscribe("syncMessage",this.send),this.webSocketSync.subscribe("message",this.handleMessage),this.webSocketSync.subscribe("onlineChange",this.handleOnlineChange),this.pushPullSync.subscribe("message",this.handleMessage),this.pushPullSync.subscribe("onlineChange",this.handleOnlineChange),s&&this.canDoRealtime){let _=()=>{E&&clearTimeout(E);let k=this.presence.getViewPeers().length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;k&&this.mode==="pull"?this.setMode("realtime"):!k&&this.mode==="realtime"&&(E=setTimeout(()=>{this.presence.getViewPeers().length===0&&this.setMode("pull")},1e3))},E;this.presence.subscribe("peersChanged",_),s!=="peers-only"&&this.presence.subscribe("selfChanged",_)}o&&this.start(),P&&uo()}get canDoRealtime(){return this.endpointProvider.type===Me.Realtime||this.endpointProvider.type===Me.PassiveRealtime||this.endpointProvider.type===Me.ReadOnlyRealtime}get syncing(){return this._activelySyncing}get hasSynced(){return this._hasSynced}get pullInterval(){return this.pushPullSync.interval}ignoreIncoming(){this.activeSync.ignoreIncoming()}get isConnected(){return this.activeSync.isConnected}get status(){return this.activeSync.status}get mode(){return this.activeSync.mode}};function fo(i){return i.operations.map(t=>t.timestamp).concat(i.baselines?.map(t=>t.timestamp)??[]).reduce((t,r)=>{let s=ln(r);return s>t?s:t},1)}var mt=class extends N{constructor(e){super();this.context=e;this.importingPromise=Promise.resolve();this.addData=async e=>{await this.importingPromise;try{let t=e.reset?fo(e):this.schema.version;return t<this.schema.version?(this.context.log("warn","Incoming reset sync data is from an old schema version",t,`(current ${this.schema.version})`),await this.import({data:{operations:e.operations,baselines:e.baselines??[],localReplica:void 0,schemaVersion:t},fileData:[],files:[]})):await this._entities.addData(e)}catch(t){throw this.context.log("critical","Sync failed. To avoid data corruption, the client will now shut down.",t),this.emit("developerError",new q(q.Code.Unexpected,t,"Sync failed. To avoid data corruption, the client will now shut down.")),await this.close(),t}};this.stats=async()=>{if(this.disposed)return{};let e=await this.context.documents.stats(),t=await this.context.meta.stats(),r=typeof navigator<"u"&&typeof navigator.storage<"u"&&"estimate"in navigator.storage?await navigator.storage.estimate():void 0,s=await this.context.files.stats(),o=Object.values(e).reduce((h,{size:p})=>h+p,0),a=t.baselinesSize.size+t.operationsSize.size,d=a/o;return{collections:e,meta:t,storage:r,totalMetaSize:a,totalCollectionsSize:o,metaToDataRatio:d,files:s,quotaUsage:r?.usage&&r?.quota?r.usage/r.quota:void 0}};this.close=async()=>{this.sync.ignoreIncoming(),await this._entities.flushAllBatches(),this.context.closing=!0,this.context.closeLock&&await this.context.closeLock,this.sync.stop(),this.sync.destroy(),await this._entities.destroy(),this.context.persistenceShutdownHandler.shutdown(),this.context.internalEvents.disable(),this.context.entityEvents.disable(),await new Promise(e=>{e()}),this.context.log?.("info","Client closed")};this.__dangerous__resetLocal=async()=>{this.sync.stop(),await Dn(this.namespace,indexedDB)};this.export=async({downloadRemoteFiles:e}={downloadRemoteFiles:!0})=>{this.context.log("info","Exporting data...");let t=await this.context.meta.export(),{fileData:r,files:s}=await this.context.files.export(e);return{data:t,fileData:r,files:s}};this.import=async({data:e,fileData:t,files:r})=>{let s=()=>{};this.importingPromise=new Promise(o=>{s=o}),this.context.log("info","Importing data..."),await ao(this.context,{data:e,files:r,fileData:t}),s()};this.__dangerous__hardReset=async()=>{let e=await this.export();await this.import(e)};this.__cleanupFilesImmediately=()=>this.context.files.cleanupDeletedFiles();this.__manualRebase=()=>(this.context.meta.manualRebase(),new Promise(e=>{let t=this.subscribe("rebase",()=>{t(),e()})}));e.getClient=()=>this,this.collectionNames=Object.keys(e.schema.collections),this._sync=this.context.config.sync&&!e.schema.wip?new pt(this.context.config.sync,{onData:this.addData,ctx:this.context}):new Wn(this.context),e.schema.wip&&this.context.config.sync&&e.log("warn","\u26A0\uFE0F\u26A0\uFE0F Sync is disabled for WIP schemas. Commit your schema changes to start syncing again. \u26A0\uFE0F\u26A0\uFE0F"),this._fileManager=new _n({sync:this.sync,context:this.context}),this._entities=new En({ctx:this.context,files:this._fileManager}),this._queryCache=new Un({context:e,evictionTime:e.config.queries?.evictionTime}),this._documentManager=new un(this.schema,this._entities);let t=Sr(()=>{this.emit("futureSeen")},300);this.context.globalEvents.subscribe("futureSeen",t),this.context.globalEvents.subscribe("resetToServer",()=>{this.emit("resetToServer")}),this.context.globalEvents.subscribe("operation",r=>{this.emit("operation",r)}),this.context.globalEvents.subscribe("rebase",()=>{this.emit("rebase")}),this.context.globalEvents.subscribe("fileSaved",r=>{this.emit("fileSaved",r)});for(let[r,s]of Object.entries(e.schema.collections)){let o=r;this[o]=new Vn({collection:o,cache:this._queryCache,context:this.context,entities:this.entities,documentManager:this.documentManager})}}get sync(){return this._sync}get entities(){return this._entities}get documentManager(){return this._documentManager}get schema(){return this.context.schema}get namespace(){return this.context.namespace}get undoHistory(){return this.context.undoHistory}get queries(){return this._queryCache}get batch(){return this.entities.batch}get __persistence(){return{meta:this.context.meta,queries:this.context.documents,files:this.context.files}}};var Jn=class{constructor(n,e){this.base=n;this.version=e;this.withMigrationTime=async(n,e)=>{this.overrideNow=()=>this.base.zero(n),await e(),this.overrideNow=void 0};this.update=this.base.update.bind(this.base);this.nowWithVersion=n=>this.base.now(n);this.zeroWithVersion=n=>this.base.zero(n)}get now(){return this.overrideNow?this.overrideNow():this.base.now(this.version)}get zero(){return this.base.zero(this.version)}};var Gn=class{constructor(n){this.value=n}deref(){return this.value}};var ze=class extends oe{constructor(e,{log:t}={}){super();this.db=e;this.createTransaction=(e,t)=>{try{if(this.globalAbortController.signal.aborted)throw new Error("Global abort signal is already aborted");let r=Xs(this.db,e,t?.mode||"readonly",t?.abort,this.log);return this.globalAbortController.signal.addEventListener("abort",r.abort),r.addEventListener("complete",()=>{this.globalAbortController.signal.removeEventListener("abort",r.abort)}),r.addEventListener("error",()=>{this.globalAbortController.signal.removeEventListener("abort",r.abort)}),r}catch(r){throw this.log?.("error","Failed to create abortable transaction for store names",e,r),r}};this.run=async(e,t,r)=>{if(this.disposed||r?.transaction?.error)return Promise.resolve(void 0);let o=(r?.transaction||this.createTransaction([e],r)).objectStore(e),a=t(o);return ut(a)};this.runAll=async(e,t,r)=>{if(this.disposed||r?.transaction?.error)return Promise.resolve([]);let o=(r?.transaction||this.createTransaction([e],r)).objectStore(e),a=t(o);return Promise.all(a.map(ut))};this.iterate=async(e,t,r,s)=>{let a=(s?.transaction||this.createTransaction([e],s)).objectStore(e),d=t(a);return Array.isArray(d)?Promise.all(d.map(h=>new Promise((p,O)=>{h.onsuccess=()=>{let v=h.result;v?r(v.value,a,v)?p():v.continue():p()},h.onerror=()=>{h.error&&Xe(h.error)?p():O(h.error)}}))).then(()=>{}):new Promise((h,p)=>{d.onsuccess=()=>{let O=d.result;O?r(O.value,a,O)?h():O.continue():h()},d.onerror=()=>{d.error&&Xe(d.error)?h():p(d.error)}})};this.clear=(e,t)=>this.run(e,r=>r.clear(),{mode:"readwrite",transaction:t});this.onVersionChange=e=>{if(this.log?.("warn",`Another tab has requested a version change for ${this.db.name}`),this.db.close(),typeof window<"u")try{window.location.reload()}catch(t){this.log?.("error","Failed to reload the page",t)}};this.log=t;let r=new AbortController,s=r.abort.bind(r);this.globalAbortController=r,this.db.addEventListener("versionchange",this.onVersionChange),this.addDispose(()=>{this.db.removeEventListener("versionchange",this.onVersionChange)})}};var Yn=class extends ze{constructor(){super(...arguments);this.add=async e=>{let t=e.file?await tc(e.file):void 0;await this.run("files",r=>r.put({id:e.id,remote:e.remote?"true":"false",deletedAt:null,name:e.name,type:e.type,url:e.url,buffer:t,timestamp:e.timestamp}),{mode:"readwrite"})};this.markUploaded=async e=>{if(this.disposed)return;let t=await this.getFileRaw(e);if(!t)throw new Error("File is not in local database");await this.run("files",r=>r.put({...t,remote:"true"}),{mode:"readwrite"})};this.get=async e=>{let t=await this.getFileRaw(e);return t?this.hydrateFileData(t):null};this.delete=e=>this.run("files",t=>t.delete(e),{mode:"readwrite"});this.markPendingDelete=async e=>{let t=await this.getFileRaw(e);if(!t)throw new Error("File is not in local database");await this.run("files",r=>r.put({...t,deletedAt:Date.now()}),{mode:"readwrite"})};this.listUnsynced=async()=>(await this.run("files",t=>t.index("remote").getAll("false"),{mode:"readonly"})).map(this.hydrateFileData);this.resetSyncedStatusSince=async e=>{let t=this.createTransaction(["files"],{mode:"readwrite"}),s=(await this.run("files",o=>o.index("remote").getAll("true"),{transaction:t})).filter(o=>!o.timestamp||!e||o.timestamp>e);await Promise.all(s.map(o=>this.run("files",a=>a.put({...o,remote:"false"}),{transaction:t})))};this.iterateOverPendingDelete=e=>this.iterate("files",t=>t.index("deletedAt").openCursor(IDBKeyRange.lowerBound(0,!0)),(t,r)=>{e(this.hydrateFileData(t),r)},{mode:"readwrite"});this.getAll=async e=>{let[t]=await qi(this.db,["files"]);return t.map(this.hydrateFileData)};this.stats=async()=>({size:await Ze(this.db,"files")});this.loadFileContents=async(e,t)=>{if(e.file)return e.file;if(e.localPath)throw new Error("Local file paths are not supported in browser");if(e.url){let r=await t.environment.fetch(e.url);if(!r.ok)throw new Error(`Failed to download file ${e.url}: ${r.statusText}`);return r.blob()}throw new Error("File is missing url, file, and localPath")};this.hydrateFileData=e=>{e.remote=e.remote==="true";let t=e.buffer;return delete e.buffer,e.file=t?ec(t,e.type,e.name):void 0,e};this.getFileRaw=async(e,{transaction:t}={})=>{if(this.disposed)return;let r=await this.run("files",s=>s.get(e),{mode:"readonly",transaction:t});if(r)return r}}};function ec(i,n,e){return new File([new Blob([i],{type:n})],e??"blob",{type:n})}function tc(i){return"__testReadBuffer"in i?Promise.resolve(i.__testReadBuffer):new Promise((n,e)=>{let t=new FileReader;t.onload=()=>{n(t.result)},t.onerror=e,t.readAsArrayBuffer(i)})}var Xn=class extends ze{constructor(e,t){super(e,t);this.ctx=t;this.transaction=async(e,t)=>{let r=this.createTransaction(e.storeNames,{mode:e.mode,abort:e.abort});return await t(r)};this.getAckInfo=async()=>{let e=await this.run("info",t=>t.get("ack"));return e||{globalAckTimestamp:null}};this.setGlobalAck=async e=>{await this.run("info",t=>t.put({type:"ack",globalAckTimestamp:e}),{mode:"readwrite"})};this.getLocalReplica=async e=>this.run("info",t=>t.get("localReplicaInfo"),e);this.updateLocalReplica=async(e,t)=>{try{await this.run("info",r=>r.put({...e,type:"localReplicaInfo"}),{mode:"readwrite",transaction:t?.transaction})}catch(r){throw this.ctx.log("critical","Error updating local replica",e,r),r}};this.iterateDocumentBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>{let o=K(e),[a,d]=Lr(e),[h,p]=jr(e);return[s.openCursor(IDBKeyRange.only(o)),s.openCursor(IDBKeyRange.bound(a,d,!1,!1)),s.openCursor(IDBKeyRange.bound(h,p,!1,!1))]},t,r)};this.iterateCollectionBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>[s.openCursor(IDBKeyRange.bound(e,e+"\uFFFF",!1,!1))],t,r)};this.iterateAllBaselines=async(e,t)=>{await this.iterate("baselines",r=>r.index("timestamp").openCursor(),e,t)};this.getBaseline=(e,t)=>this.run("baselines",r=>r.get(e),t);this.setBaselines=async(e,t=Xi)=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),t)};this.deleteBaseline=async(e,t=Xi)=>{await this.run("baselines",r=>r.delete(e),t)};this.iterateDocumentOperations=(e,t,r)=>this.iterate("operations",s=>{let o=s.index("d_t"),a=Ee(e),d=r?.to?ge(e,r.to):Ae(e),h=IDBKeyRange.bound(a,d,!1,!1);return o.openCursor(h)},t,r);this.iterateEntityOperations=(e,t,r)=>this.iterate("operations",s=>{let o=Ee(e),a=r?.to?ge(e,r.to):Ae(e),d=IDBKeyRange.bound(o,a,!1,!1);return s.openCursor(d)},t,r);this.deleteEntityOperations=(e,t)=>this.iterate("operations",r=>{let s=Ee(e),o=t?.to?ge(e,t.to):Ae(e),a=IDBKeyRange.bound(s,o,!1,!1);return r.openCursor(a)},(r,s)=>{s.delete(r.oid_timestamp)},t);this.iterateCollectionOperations=(e,t,r)=>this.iterate("operations",s=>s.openCursor(IDBKeyRange.bound(e,e+"\uFFFF",!1,!1),"next"),t,r);this.iterateLocalOperations=(e,t)=>this.iterate("operations",r=>{let s=t?.after?ge(!0,t.after):Ee(!0),o=Ae(!0);return r.index("l_t").openCursor(IDBKeyRange.bound(s,o,!!t?.after,!1),"next")},e);this.iterateAllOperations=(e,t)=>this.iterate("operations",r=>{let s=t?.from?Ee(t.from):void 0,o=t?.before?Ae(t.before):Ee(!0),a=s&&o?IDBKeyRange.bound(s,o,!1,!0):s?IDBKeyRange.lowerBound(s,!1):o?IDBKeyRange.upperBound(o,!0):void 0;return r.index("timestamp").openCursor(a,"next")},e,t);this.addOperations=async(e,t=Xi)=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(K(o.oid)),s.put(this.addOperationIndexes(o)))),t),Array.from(r)};this.reset=async({clearReplica:e,transaction:t}={})=>{let r=t||this.createTransaction(["info","operations","baselines"],{mode:"readwrite"});await Promise.all([this.resetLocalReplica(r,e),this.resetBaselines(r),this.resetOperations(r)])};this.stats=async()=>{let e=await Ze(this.db,"operations"),t=await Ze(this.db,"baselines");return{operationsSize:e,baselinesSize:t}};this.resetLocalReplica=async(e,t=!1)=>{if(t)return this.run("info",r=>r.delete("localReplicaInfo"),{mode:"readwrite",transaction:e});{let r=await this.getLocalReplica({transaction:e});r&&(r.ackedLogicalTime=null,r.lastSyncedLogicalTime=null,await this.run("info",s=>s.put({...r,type:"localReplicaInfo"}),{mode:"readwrite",transaction:e}))}};this.resetBaselines=async e=>this.clear("baselines",e);this.resetOperations=async e=>this.clear("operations",e);this.addOperationIndexes=e=>({...e,oid_timestamp:ge(e.oid,e.timestamp),l_t:ge(e.isLocal,e.timestamp),d_t:ge(K(e.oid),e.timestamp)});this.addDispose(()=>(this.ctx.log("info","Closing metadata DB for",this.ctx.namespace),ve(e)))}},Xi={mode:"readwrite"};var ho=[ic,rc,sc,oc,ac,cc],nc=ho.length;function Zi({indexedDB:i=window.indexedDB,namespace:n,log:e}){return new Promise((t,r)=>{let s=i.open(Bt(n),nc),o=!1;s.onupgradeneeded=async a=>{let d=s.result,h=s.transaction,p=ho.slice(a.oldVersion);for(let O of p)await O(d,h);await new Promise((O,v)=>{h.addEventListener("complete",O),h.addEventListener("error",v)}),a.oldVersion||(o=!0)},s.onerror=()=>{console.error("Error opening database",s.error),r(s.error)},s.onsuccess=()=>{t({db:s.result,wasInitialized:o})}})}async function ic(i,n){let e=i.createObjectStore("baselines",{keyPath:"oid"}),t=i.createObjectStore("operations",{keyPath:"oid_timestamp"}),r=i.createObjectStore("info",{keyPath:"type"});e.createIndex("timestamp","timestamp"),t.createIndex("isLocal_timestamp","isLocal_timestamp"),t.createIndex("documentOid_timestamp","documentOid_timestamp")}async function rc(i,n){let e=n.objectStore("operations");await new Promise((t,r)=>{let s=e.openCursor();s.onsuccess=()=>{let o=s.result;if(o){let{isLocal_timestamp:a,documentOid_timestamp:d,...h}=o.value;o.update({...h,l_t:a,d_t:d}),o.continue()}else t()},s.onerror=o=>{r(s.error)}}),e.deleteIndex("isLocal_timestamp"),e.deleteIndex("documentOid_timestamp"),e.createIndex("l_t","l_t",{unique:!1}),e.createIndex("o_t","o_t",{unique:!1}),e.createIndex("d_t","d_t",{unique:!1})}async function sc(i,n){n.objectStore("operations").createIndex("timestamp","timestamp")}async function oc(i,n){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function ac(i,n){let e=n.objectStore("operations");await new Promise((r,s)=>{let o=e.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let d=li(a.value);d.oid_timestamp!==a.primaryKey?(a.delete(),e.put(d)):a.update(d),a.continue()}else r()},o.onerror=a=>{s(o.error)}});let t=n.objectStore("baselines");await new Promise((r,s)=>{let o=t.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let d=li(a.value);d.oid!==a.primaryKey?(a.delete(),t.put(d)):a.update(d),a.continue()}else r()},o.onerror=a=>{s(o.error)}})}async function cc(i,n){n.objectStore("files").createIndex("timestamp","timestamp")}var lc=i=>IDBKeyRange.only(Oe(i.equals)),dc=i=>{},uc=i=>{let n=i.gte||i.gt,e=i.lte||i.lt;return n===e?IDBKeyRange.only(Oe(n)):n?e?IDBKeyRange.bound(Oe(n),Oe(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(Oe(n),!!i.gt):IDBKeyRange.upperBound(Oe(e),!!i.lt)},fc=(i,n,e)=>{let t=i.collections[n].compounds[e.where];L(t,`Index ${e.where} does not exist on collection ${n}`);let r=Object.keys(e.match).sort((d,h)=>t.of.indexOf(d)-t.of.indexOf(h));for(let d of r)if(t.of.indexOf(d)!==r.indexOf(d))throw new Error(`Compound index ${e.where} does not have ${d} at the start of its order`);let s=r.map(d=>e.match[d]);if(r.length===t.of.length)return IDBKeyRange.only(ge(...s));let o=Ee(...s),a=Ae(...s);return IDBKeyRange.bound(o,a)};function hc(i){let n=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(n,e)}function er(i,n,e){if(e)return tn(e)?uc(e):en(e)?lc(e):wi(e)?dc(e):nn(e)?hc(e):fc(i,n,e)}var Zn=class extends ze{constructor(e,t){super(e,{log:t.log});this.close=async()=>{await this.dispose()};this.stats=async()=>{let e=Object.keys(this.ctx.schema.collections),t={};return await Promise.all(e.map(async r=>{let s=await Ze(this.db,r);t[r]=s})),t};this.findOneOid=async e=>{let t=await this.run(e.collection,r=>{let s=e.index?.where?r.index(e.index.where):r,o=e.index?.order==="desc"?"prev":"next",a=er(this.ctx.schema,e.collection,e.index);return s.openCursor(a,o)},{mode:"readonly"});return t?ee(e.collection,t.primaryKey.toString()):null};this.findAllOids=async({collection:e,index:t,offset:r,limit:s})=>{let a=this.createTransaction([e],{mode:"readonly"}).objectStore(e),d=t?.where?a.index(t.where):a,h=t?.order==="desc"?"prev":"next",p=er(this.ctx.schema,e,t),O=d.openCursor(p,h),v=!1;return{result:await new Promise((y,I)=>{let _=!r,E=0,D=new Set;O.onsuccess=()=>{E++;let k=O.result;if(!k){y(Array.from(D));return}r&&!_?(k.advance(r),_=!0):((!s||D.size<s)&&D.add(ee(e,k.primaryKey.toString())),s&&E>s?(v=!0,y(Array.from(D))):k.continue())},O.onerror=()=>{O.error?.name==="InvalidStateError"?(this.ctx.log("error","find query failed with InvalidStateError",O.error),y([])):O.error&&Xe(O.error)?y([]):I(O.error)}}),hasNextPage:v}};this.saveEntities=async(e,t)=>{let r={transaction:this.createTransaction(t.collections,{mode:"readwrite",abort:t.abort})},s=await Promise.allSettled(e.map(async a=>{let d=a.getSnapshot();try{await this.saveDocument(a.oid,d,r)}catch(h){throw this.ctx.log("error",`Error saving document ${a.oid} (${JSON.stringify(d)})`,h),h instanceof Error?h:new Error("Unknown error saving document")}})),o=s.filter(a=>a.status==="rejected");if(o.length){if(o.length===s.length)throw new Error("Failed to save any documents. Something must be quite wrong.");this.ctx.log("error","Failed to save documents:",o,". See logs above. This only affects querying these documents. Let's hope a future attempt will correct them...")}r.transaction.commit()};this.reset=async()=>{let e=Object.keys(this.ctx.schema.collections),t=this.createTransaction(e,{mode:"readwrite"});await Promise.all(e.map(r=>this.run(r,s=>s.clear(),{transaction:t}))),this.ctx.entityEvents.emit("collectionsChanged",e),this.ctx.log("info","\u{1F4A8} Reset queryable storage")};this.saveDocument=async(e,t,{transaction:r})=>{this.ctx.log("debug",`Saving document indexes for querying ${e}`);let{collection:s,id:o}=ue(e);try{if(!t)await this.run(s,a=>a.delete(o),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Deleted document indexes for querying ${e}`);else{let a=this.ctx.schema.collections[s],d=ui(a,t);d["@@@snapshot"]=JSON.stringify(t),await this.run(s,h=>h.put(d),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Save complete for ${e}`,d)}}catch(a){throw this.ctx.log("error",`Error saving document ${e}`,a),a}};this.ctx=t,this.addDispose(()=>(this.ctx.log("info","Closing document database for",this.ctx.namespace),ve(this.db)))}};async function po(i,n,e,t,r){r?.("debug","Upgrading database",n,"to version",e);function s(o,a){let d=i.open(ft(n),e),h=!1;d.onupgradeneeded=p=>{let O=d.transaction;t(O,d.result,p),h=!0},d.onsuccess=async p=>{h?(await ve(d.result),o(d.result)):a(new Error("Database was not upgraded when a version change was expected"))},d.onerror=p=>{a(d.error||new Error("Unknown error"))},d.onblocked=p=>{r?.("Database upgrade blocked!")}}return new Promise(s)}async function tr({indexedDB:i=Ki,namespace:n,version:e,log:t}){t?.("debug","Opening database",n,"at version",e);let r=await Zs(ft(n),e,i);return r.addEventListener("versionchange",s=>{r.close()}),r.addEventListener("close",()=>{t?.("warn","Database closed",n)}),r}var gt=class{constructor(n=window.indexedDB){this.indexedDB=n;this.name="IdbPersistence";this.getNamespaces=async()=>{let n=await this.indexedDB.databases();return Array.from(new Set(n.map(eo).filter(e=>!!e)))};this.getNamespaceVersion=async n=>{let e=ft(n),r=(await this.indexedDB.databases()).find(s=>s.name===e);return r?r.version??0:0};this.deleteNamespace=async(n,e)=>{await Promise.all([Cn(Bt(n),this.indexedDB),Cn([n,"collections"].join("_"),this.indexedDB)])};this.openNamespace=async n=>new nr(this.indexedDB,n);this.copyNamespace=async(n,e,t)=>{let r={...t,namespace:n},s={...t,namespace:e},{db:o}=await Zi({indexedDB:this.indexedDB,log:r.log,namespace:r.namespace}),a=await tr({indexedDB:this.indexedDB,namespace:r.namespace,version:r.schema.version,log:r.log});r.log("info",`Copying data from ${r.namespace} to ${s.namespace}`),await Hi(o,Bt(s.namespace),s,this.indexedDB),await Hi(a,ft(s.namespace),s,this.indexedDB),await ve(o),await ve(a)}}},nr=class{constructor(n,e){this.indexedDB=n;this.namespace=e;this.openMetadata=async n=>{let{db:e}=await Zi({indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return this.metadataDb=e,n.persistenceShutdownHandler.register(()=>ve(e)),new Xn(e,n)};this.openDocuments=async n=>{let e=await tr({version:n.schema.version,indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return n.persistenceShutdownHandler.register(()=>ve(e)),new Zn(e,n)};this.applyMigration=async(n,e)=>{n.log("debug","Applying migration",e.newSchema.version,e),await po(this.indexedDB,this.namespace,e.newSchema.version,(t,r)=>{for(let s of e.addedCollections)r.createObjectStore(s,{keyPath:e.newSchema.collections[s].primaryKey,autoIncrement:!1});for(let s of e.allCollections){let o=t.objectStore(s);for(let a of e.addedIndexes[s]||[])o.createIndex(a.name,a.name,{multiEntry:a.multiEntry});for(let a of e.removedIndexes[s]||[])o.deleteIndex(a.name)}for(let s of e.removedCollections)t.objectStore(s).clear()},n.log)}}openFiles(n){if(!this.metadataDb)throw new Error("Metadata database must be opened first. This is a bug in Verdant.");return Promise.resolve(new Yn(this.metadataDb,n))}};var yt=class extends N{constructor(){super(...arguments);this._undoable=[];this._undone=[];this.undo=async()=>{let e=this._undoable.pop();if(e){let t=await e();return t&&this._undone.push(t),this.emit("change"),!0}return!1};this.redo=async()=>{let e=this._undone.pop();if(e){let t=await e();return t&&this._undoable.push(t),this.emit("change"),!0}return!1};this.addUndo=e=>{this._undoable.push(e),this._undone=[],this.emit("change")};this.addRedo=e=>{this._undone.push(e),this.emit("change")};this.clear=()=>{this._undoable=[],this._undone=[],this.emit("change")}}get canUndo(){return this._undoable.length>0}get canRedo(){return this._undone.length>0}get undoLength(){return this._undoable.length}get redoLength(){return this._undone.length}};var ei=class{constructor(n){this.init=n;this._initializing=!1;this.initialize=async n=>{if(typeof window>"u"&&!n.environment)throw new Error("A Verdant client was initialized in an environment without a global Window or `environment` configuration. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of the environment to the ClientDescriptor options.");if(this._initializing||this._resolvedValue)return this._readyPromise;this._initializing=!0;try{let e=new Jn(new sn,n.schema.version),t=n.environment||pc,r={closing:!1,entityEvents:new N,globalEvents:new N,internalEvents:new N,log:n.log||Ir,migrations:n.migrations,namespace:n.namespace,originalNamespace:n.namespace,schema:n.schema,oldSchemas:n.oldSchemas,time:e,undoHistory:n.undoHistory||new yt,weakRef:a=>n.EXPERIMENTAL_weakRefs?new WeakRef(a):new Gn(a),patchCreator:new je(()=>e.now),config:{files:n.files,sync:n.sync,persistence:{disableRebasing:n.disableRebasing,rebaseTimeout:n.rebaseTimeout},queries:n.queries},persistence:n.persistence||new gt(t.indexedDB),environment:t,persistenceShutdownHandler:new Fe(n.log),pauseRebasing:!1,getClient(){throw new q(q.Code.Unexpected,void 0,"Client not yet initialized. This is a Verdant bug, please report it.")}};r.log("info","Initializing client",{namespace:r.namespace,version:n.schema.version,persistence:r.persistence.name});let s=await Lt(r),o=new mt(s);return this.resolveReady(o),this._resolvedValue=o,o}catch(e){throw e instanceof Error?(this.rejectReady(e),e):new Error("Unknown error initializing storage")}finally{this._initializing=!1}};this.open=()=>this.initialize(this.init);this.close=async()=>{this._resolvedValue&&this._resolvedValue.close(),this._initializing&&(await this._readyPromise).close()};this.__dangerous__resetLocal=async()=>{await Dn(this.namespace)};this._readyPromise=new Promise((e,t)=>{this.resolveReady=e,this.rejectReady=t}),this._namespace=n.namespace}get namespace(){return this._namespace}get current(){return this._resolvedValue}get readyPromise(){return this._readyPromise}get schema(){return this.init.schema}},pc={WebSocket:typeof WebSocket<"u"?WebSocket:void 0,fetch:typeof window<"u"?window.fetch.bind(window):fetch,indexedDB:typeof indexedDB<"u"?indexedDB:void 0};var mc={private:$e.onlyMe(),public:void 0};function gc(i,{port:n=3242,initialPresence:e={}}={}){let t=localStorage.getItem("verdant-userId");return t||(t=`user-${Math.random().toString(36).slice(2)}`,localStorage.setItem("verdant-userId",t)),{defaultProfile:{id:t},initialPresence:e,authEndpoint:`http://localhost:${n}/auth/${i}?userId=${t}`}}var ir=Te(Qe(),1);function yc(i){return i?ir.default.slug():(0,ir.default)()}window.Verdant=rr;
13
+ - New indexes: ${Object.keys(t.addedIndexes).map(a=>t.addedIndexes[a].map(l=>`${a}.${l.name}`)).flatMap(a=>a).join(", ")}
14
+ - Removed indexes: ${Object.keys(t.removedIndexes).map(a=>t.removedIndexes[a].map(l=>`${a}.${l.name}`)).flatMap(a=>a).join(", ")}
15
+ `)}i.pauseRebasing=!1}var Pn=class{constructor(n,e){this.db=n;this.context=e;this.onServerReset=n=>this.db.resetSyncedStatusSince(n);this.add=async n=>{if(n.url&&!(n.localPath||n.file)){this.context.log("debug","Remote file added to an entity. This usually means an entity was cloned. Downloading remote file...",n.id);let e=await this.loadFileContents(n,0,3);n.file=new File([e],n.name,{type:n.type}),delete n.url,this.context.log("debug","Downloaded remote file",n.id,n.name,". Cleared its remote URL.")}else!n.url&&!n.file&&!n.localPath&&this.context.log("warn","File added without a file or URL. This file will not be available for use.",n.id);return n.remote=!1,await this.db.add(n),this.context.internalEvents.emit("fileAdded",n),this.context.globalEvents.emit("fileSaved",n),this.context.log("debug","File added",n.id,n.name,n.type,n.file?"with binary file":n.url?"with url":n.localPath?"with local path":"with no data"),n};this.onUploaded=this.db.markUploaded.bind(this.db);this.get=this.db.get.bind(this.db);this.getAll=this.db.getAll.bind(this.db);this.listUnsynced=this.db.listUnsynced.bind(this.db);this.iterateOverPendingDelete=this.db.iterateOverPendingDelete.bind(this.db);this.stats=this.db.stats.bind(this.db);this.getFileExportName=(n,e)=>`${e}___${n}`;this.export=async(n=!0)=>{let e=await this.getAll();if(n)for(let s of e)if(!s.file&&(s.url||s.localPath))try{let o=await this.loadFileContents(s);s.file=o}catch(o){this.context.log("error","Failed to download file to cache it locally. The file will still be available using its URL. Check the file server's CORS configuration.",s,o)}else s.file||this.context.log("warn",`File ${s.id} has no file or URL. It will be missing in the export.`,s);let t=[],r=[];for(let s of e){let o=s.file;if(delete s.file,t.push(s),o){let a=new File([o],this.getFileExportName(s.name,s.id),{type:s.type});r.push(a)}else this.context.log("warn",`File ${s.id} was could not be loaded locally or from the server. It will be missing in the export.`)}return{fileData:t,files:r}};this.import=async({fileData:n,files:e})=>{let t=new Map(e.map(s=>{let{id:o}=this.parseFileExportname(s.name);return[o,s]})),r=n.map(s=>{let o=t.get(s.id);return o?{...s,file:o}:(this.context.log("warn",`File ${s.id} was not found in import`),s)});await Promise.all(r.map(s=>this.add(s)))};this.parseFileExportname=n=>{let[e,t]=n.split("___");return{id:e,originalFileName:t}};this.loadFileContents=async(n,e=0,t=0)=>{try{return await this.db.loadFileContents(n,this.context)}catch(r){if(e<t)return new Promise((s,o)=>{setTimeout(()=>{this.loadFileContents(n,e+1,t).then(s,o)},1e3)});throw this.context.log("error",`Failed to download file after ${t} retries`,r),new Error(`Failed to download file after ${t} retries`,{cause:r})}};this.cleanupDeletedFiles=async()=>{let n=0,e=0,t=[];await this.iterateOverPendingDelete(r=>{this.config.canCleanupDeletedFile(r)?(n++,t.push(r.id)):e++});for(let r of t)await this.db.delete(r);this.context.log("info",`Cleaned up ${n} files, skipped ${e} files`)};this.onFileRefsDeleted=async n=>{await Promise.all(n.map(async e=>{try{await this.db.markPendingDelete(e.id)}catch(t){this.context.log("error","Failed to mark file for deletion",t)}})),this.context.log("info",`Marked ${n.length} files as pending delete`)};e.internalEvents.subscribe("filesDeleted",this.onFileRefsDeleted),this.cleanupDeletedFiles()}get config(){return{canCleanupDeletedFile(n){return n.deletedAt!==null&&n.deletedAt<Date.now()-1e3*60*24*3},...this.context.config.files}}};var An=class{constructor(n,e,t){this.db=n;this.meta=e;this.ctx=t;this.tryAutonomousRebase=async()=>{(await this.meta.getLocalReplica()).lastSyncedLogicalTime||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(this.ctx.log("debug","Running autonomous library rebase"),await this.runRebase(this.ctx.time.now))};this.runRebase=async n=>{this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(await this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async e=>{let t=new Set,r,s=0;if(await this.db.iterateAllOperations(a=>{t.add(a.oid),r=a.timestamp,s++},{before:n,transaction:e}),!t.size||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let o=[];for(let a of t)o.push(await this.rebase(a,r||n,e))}),this.ctx.globalEvents.emit("rebase"))};this.scheduleRebase=async n=>{this.rebaseTimeout&&clearTimeout(this.rebaseTimeout),this.rebaseTimeout=setTimeout(this.runRebase,this.ctx.config.persistence?.rebaseTimeout??1e4,n),this.ctx.log("debug","Scheduled rebase up to global ack",n)};this.rebaseTimeout=null;this.rebase=async(n,e,t)=>{if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let r=await this.db.getBaseline(n,{transaction:t}),s=r?.snapshot||void 0,o=0,a=r?.authz,l=[];if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;await this.db.iterateEntityOperations(n,h=>{(!r||h.timestamp>r.timestamp)&&(s=Be(s,h.data,l),h.data.op==="initialize"&&(a=h.authz)),o++},{to:e,transaction:t}),s&&z(s,n);let p={oid:n,snapshot:s,timestamp:e,authz:a};if(!(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown))return this.ctx.closeLock=(async()=>{if(p.snapshot?await this.db.setBaselines([p],{transaction:t}):await this.db.deleteBaseline(n,{transaction:t}),await this.db.deleteEntityOperations(n,{to:e,transaction:t}),this.ctx.log("debug","rebased",n,"up to",e,":",s,"and deleted",o,"operations"),l.length){let h=l.filter(he);h.length&&this.ctx.internalEvents.emit("filesDeleted",h)}})(),p}}};var Rn=class{constructor(n,e,t){this.db=n;this.meta=e;this.ctx=t;this.createOperation=async n=>{let e=await this.meta.getLocalReplica();return this.ctx.log("debug","Creating operation message",n.operations.length),{type:"op",timestamp:this.ctx.time.now,replicaId:e.id,operations:n.operations.map(Kt)}};this.createSyncStep1=async n=>{let e=await this.meta.getLocalReplica(),t=n===null?null:e.lastSyncedLogicalTime,r=[],s=new Set;return this.db.transaction({mode:"readwrite",storeNames:["operations","baselines"]},async o=>{t?(this.ctx.log("debug","Syncing local operations since",t),await this.db.iterateLocalOperations(l=>{r.push(Kt(l)),s.add(K(l.oid))},{after:t,transaction:o})):(this.ctx.log("debug","Syncing all operations"),await this.db.iterateAllOperations(l=>{r.push(Kt(l)),s.add(K(l.oid))},{transaction:o}));let a=[];return t||await this.db.iterateAllBaselines(l=>{a.push(l)},{transaction:o}),r.length>0&&this.ctx.log("debug",`Syncing ${r.length} operations since ${t}`),{type:"sync",schemaVersion:this.ctx.schema.version,timestamp:this.ctx.time.now,replicaId:e.id,resyncAll:!e.lastSyncedLogicalTime,operations:r,baselines:a,since:t}})};this.createPresenceUpdate=async n=>{let e=await this.meta.getLocalReplica();return{type:"presence-update",presence:n.presence,replicaId:e.id,internal:n.internal}};this.createHeartbeat=async()=>{let n=await this.meta.getLocalReplica();return{type:"heartbeat",timestamp:this.ctx.time.now,replicaId:n.id}};this.createAck=async n=>{let e=await this.meta.getLocalReplica();return{type:"ack",timestamp:this.ctx.time.now,replicaId:e.id,nonce:n}}}};var co=Te(Qe(),1),Fn=class{constructor(n,e){this.db=n;this.ctx=e;this.events=new N;this.insertOperations=async(n,e)=>{this.ctx.log("debug",`Inserting ${n.length} operations`,n);let t=await this.db.addOperations(n,e);for(let r of n)this.ctx.globalEvents.emit("operation",r);return!this.ctx.config.persistence?.disableRebasing&&!this.ctx.pauseRebasing&&this.rebaser.tryAutonomousRebase(),t};this.insertLocalOperations=async(n,e)=>{if(n.length===0)return;for(let r of n)r.isLocal=!0;await this.insertOperations(n,e),this.ctx.log("debug",`Inserted ${n.length} local operations; sending sync message`);let t=await this.messageCreator.createOperation({operations:n});this.events.emit("syncMessage",t)};this.insertRemoteOperations=async(n,e)=>{if(n.length===0)return[];for(let t of n)t.isLocal=!1;await this.insertOperations(n,e),this.ack(n[n.length-1].timestamp)};this.insertRemoteBaselines=async(n,e)=>{if(n.length===0)return[];this.ctx.log("debug",`Inserting ${n.length} remote baselines`),await this.db.setBaselines(n,e);let t=new Set;return n.forEach(r=>{t.add(K(r.oid))}),Array.from(t)};this.deleteDocument=async n=>{let e=new Set,t=K(n);return L(t===n,"Must be root document OID"),e.add(t),this.db.transaction({storeNames:["baselines","operations"]},async r=>{await Promise.all([this.db.iterateDocumentBaselines(t,a=>{e.add(a.oid)},{transaction:r}),this.db.iterateDocumentOperations(t,a=>{e.add(a.oid)},{transaction:r})]);let s=await this.getDocumentAuthz(t),o=new Array;for(let a of e)o.push({oid:a,timestamp:this.ctx.time.now,data:{op:"delete"},authz:s});return this.insertLocalOperations(o,{transaction:r})})};this.deleteCollection=async n=>{let e=new Set;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await Promise.all([this.db.iterateCollectionBaselines(n,s=>{e.add(s.oid)},{transaction:t}),this.db.iterateCollectionOperations(n,s=>{e.add(s.oid)},{transaction:t})]);let r=new Array;for(let s of e)r.push({oid:s,timestamp:this.ctx.time.now,data:{op:"delete"},authz:void 0});return this.insertLocalOperations(r,{transaction:t})})};this.getDocumentSnapshot=async(n,e={})=>{let t=K(n);return L(t===n,"Must be root document OID"),this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async r=>{let s=[];await this.db.iterateDocumentBaselines(t,l=>{s.push(l)},{transaction:r});let o=new Map;for(let l of s)l.snapshot&&z(l.snapshot,l.oid),o.set(l.oid,l.snapshot);await this.db.iterateDocumentOperations(t,l=>{let p=o.get(l.oid)||void 0,h=Be(p,l.data);h&&z(h,l.oid),o.set(l.oid,h)},{transaction:r,to:e.to||this.ctx.time.now});let a=o.get(t);return a&&zt(a,o),a})};this.getDocumentData=async(n,e)=>this.db.transaction({storeNames:["baselines","operations"],abort:e?.abort},async t=>{let r=[],s={};return await Promise.all([this.db.iterateDocumentBaselines(n,o=>{r.push(o)},{transaction:t}),this.db.iterateDocumentOperations(n,o=>{s[o.oid]??=[],s[o.oid].push(o)},{transaction:t})]),{baselines:r,operations:s}});this.getDocumentAuthz=async n=>{let e;return await this.db.iterateEntityOperations(n,t=>{if(t.data.op==="initialize")return e=t.authz,!0}),e};this.insertData=async(n,e)=>this.db.transaction({storeNames:["baselines","operations"],abort:e?.abort,mode:"readwrite"},async t=>{if(this.ctx.log("debug","Begin insert data transaction"),n.baselines&&await this.insertRemoteBaselines(n.baselines,{transaction:t}),this.ctx.log("debug","Inserted baselines (if any)"),e?.abort?.aborted)throw new Error("Aborted");n.operations&&(n.isLocal?(this.ctx.log("debug","Inserting local operations"),await this.insertLocalOperations(n.operations,{transaction:t})):(this.ctx.log("debug","Inserting remote operations"),await this.insertRemoteOperations(n.operations,{transaction:t}))),this.ctx.log("debug","End insert data transaction")});this.updateLastSynced=async n=>{if(!this.ctx.closing)return this.updateLocalReplica({lastSyncedLogicalTime:n})};this.setGlobalAck=async n=>{this.ctx.closing||(await this.db.setGlobalAck(n),this.ctx.config.persistence?.disableRebasing||await this.rebaser.scheduleRebase(n))};this._cachedLocalReplica=null;this._creatingLocalReplica=void 0;this.getLocalReplica=async n=>{if(this._cachedLocalReplica)return this._cachedLocalReplica;let e=await this.db.getLocalReplica(n);return e?(this.ctx.log("debug","Read local replica",e),this._cachedLocalReplica=e,e):this._creatingLocalReplica?this._creatingLocalReplica:(this._creatingLocalReplica=(async()=>{let r={id:(0,co.default)(),userId:null,ackedLogicalTime:null,lastSyncedLogicalTime:null};return await this.db.updateLocalReplica(r),this._cachedLocalReplica=r,r})(),this._creatingLocalReplica)};this.updateLocalReplica=async(n,e)=>{let t=await this.getLocalReplica(e);L(!!t,"Local replica must exist"),Object.assign(t,n),this._cachedLocalReplica=t,await this.db.updateLocalReplica(t,e)};this.iterateLocalOperations=this.db.iterateLocalOperations;this.iterateAllOperations=this.db.iterateAllOperations;this.iterateAllBaselines=this.db.iterateAllBaselines;this.reset=async()=>{this.ctx.closing||await this.db.reset()};this.stats=this.db.stats;this.export=async()=>{let n=new Array,e=new Array;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await this.iterateAllOperations(s=>{e.push(s)},{transaction:t}),await this.iterateAllBaselines(s=>{n.push(s)},{transaction:t});let r=await this.getLocalReplica();return{operations:e,baselines:n,localReplica:r,schemaVersion:this.ctx.schema.version}})};this.resetFrom=async n=>{this._cachedLocalReplica=null,await this.db.reset({clearReplica:!0}),n.localReplica&&await this.updateLocalReplica({ackedLogicalTime:n.localReplica.ackedLogicalTime,lastSyncedLogicalTime:n.localReplica.lastSyncedLogicalTime}),this.ctx.log("debug","Resetting metadata from export",n),await this.insertData({operations:n.operations,baselines:n.baselines,isLocal:!0})};this.manualRebase=async()=>{if(this.ctx.closing||this.ctx.config.persistence?.disableRebasing)return;let n=await this.db.getAckInfo();n.globalAckTimestamp&&await this.rebaser.scheduleRebase(n.globalAckTimestamp)};this.ack=async n=>{let e=await this.getLocalReplica();n>this.ctx.time.now||(this.events.emit("syncMessage",{type:"ack",replicaId:e.id,timestamp:n}),!this.ctx.closing&&(!e.ackedLogicalTime||n>e.ackedLogicalTime)&&this.updateLocalReplica({ackedLogicalTime:n}))};this.rebaser=new An(n,this,e),this.messageCreator=new Rn(n,this,e)}};var Tn=class{constructor(n,e){this.db=n;this.ctx=e;this.reset=this.db.reset.bind(this.db);this.close=this.db.close.bind(this.db);this.saveEntities=async(n,e)=>{if(n.length===0)return;let t=new Set(Object.keys(this.ctx.schema.collections)),r=[],s=n.filter(o=>{let{collection:a}=ue(o.oid);return t.has(a)?(r.includes(a)||r.push(a),!0):(this.ctx.log("warn",`Entity ${o.oid} is in a collection that no longer exists in the schema. It will not be saved.`),!1)});if(r.length!==0){this.ctx.log("debug","Saving",s.length,"entities"),await this.db.saveEntities(s,{abort:e?.abort,collections:r}),this.ctx.log("debug","Saved",s.length,"entities"),this.ctx.entityEvents.emit("collectionsChanged",r);for(let o of n)this.ctx.entityEvents.emit("documentChanged",o.oid)}};this.findOneOid=this.db.findOneOid.bind(this.db);this.findAllOids=this.db.findAllOids.bind(this.db);this.stats=this.db.stats.bind(this.db)}};async function Bt(i){let n=i;if(i.schema.wip&&(n.namespace=io(i.originalNamespace,i.schema),n.log("info","Switched to WIP namespace",n.namespace),!(await n.persistence.getNamespaces()).includes(n.namespace))){let r=await n.persistence.getNamespaceVersion(n.originalNamespace);if(r===0)n.log("debug","No existing data to copy to WIP namespace");else{let s=i.oldSchemas?.find(o=>o.version===r);if(!s)throw new q(q.Code.MigrationPathNotFound,void 0,`Trying to open WIP database for version ${i.schema.version}, but the current local data is version ${r} and a historical schema for that version is not available.`);n.log("info",`Copying data from ${n.originalNamespace} to ${n.namespace}`),await n.persistence.copyNamespace(n.originalNamespace,n.namespace,{...n,schema:s})}}let e=await i.persistence.openNamespace(n.namespace,n);if(n.log("info","Opening persistence metadata"),n.meta=new Fn(await e.openMetadata(i),i),n.log("info","Opening persistence files"),n.files=new Pn(await e.openFiles(n),n),n.log("info","Migrating document database"),await ao({context:n,version:i.schema.version}),n.log("info","Opening persistence documents"),n.documents=new Tn(await e.openDocuments(n),n),!i.schema.wip){let t=await i.persistence.getNamespaces();for(let r of t)r.startsWith("@@wip_")&&(i.log("debug","Cleaning up old WIP namespace",r),await i.persistence.deleteNamespace(r,i))}return n}async function lo(i,n){i.log("info","Importing data from export");let e=i.oldSchemas?.find(a=>a.version===n.data.schemaVersion);if(!e)throw new Error(`Could not find schema for version ${n.data.schemaVersion}`);let t=`@@import_${Date.now()}`,r=await Bt({...i,schema:e,namespace:t,originalNamespace:t,entityEvents:new N,internalEvents:new N,globalEvents:new N,config:{...i.config,persistence:{...i.config.persistence,disableRebasing:!0}},persistenceShutdownHandler:new Fe(i.log)});await r.meta.resetFrom(n.data);let s=new Set;for(let a of n.data.baselines)s.add(K(a.oid));for(let a of n.data.operations)s.add(K(a.oid));let o=await Promise.all(Array.from(s).map(async a=>{let l=await r.meta.getDocumentSnapshot(a);return{oid:a,getSnapshot:()=>l}}));if(await r.documents.saveEntities(o),await r.files.import(n),i.log("debug","Imported data into temporary namespace",t),await r.persistenceShutdownHandler.shutdown(),e.version!==i.schema.version){let a=i.schema,l=await Bt({...r,persistenceShutdownHandler:new Fe(i.log),schema:a});i.log("debug","Upgraded imported data to current schema"),await l.persistenceShutdownHandler.shutdown(),i.log("debug","Shut down upgraded databases")}if(await i.persistenceShutdownHandler.shutdown(),await i.persistence.copyNamespace(t,i.namespace,i),await Bt(i),n.data.schemaVersion===i.schema.version){let a=await i.meta.stats();if(a.operationsSize.count!==n.data.operations.length)throw i.log("critical","Imported operations count mismatch","expected",n.data.operations.length,"actual",a.operationsSize.count),new q(q.Code.ImportFailed,void 0,"Imported operations count mismatch");if(a.baselinesSize.count!==n.data.baselines.length)throw i.log("critical","Imported documents count mismatch","expected",n.data.baselines.length,"actual",a.baselinesSize.count),new q(q.Code.ImportFailed,void 0,"Imported documents count mismatch")}i.log("debug","Data copied to primary namespace"),await i.persistence.deleteNamespace(t,i),i.log("debug","Deleted temporary namespace"),i.internalEvents.emit("persistenceReset"),i.log("info","Data imported successfully"),i.persistenceShutdownHandler.reset()}function Wa(i){return i!==null}function Ji(i){return Array.isArray(i)?i.map(Ji).filter(Wa):i instanceof pe&&i.deleted?null:i}function Ne(i,n){return!i&&!n||i&&n&&Ke(i)===Ke(n)}var Gi=Symbol("ON_ALL_UNSUBSCRIBED"),me=Symbol("UPDATE"),Ja,we=class extends oe{constructor({initial:e,context:t,collection:r,key:s,shouldUpdate:o}){super();this._internalUnsubscribes=[];this._status="initial";this._executionPromise=null;this.setValue=e=>{this._rawValue=e,this.subscribeToDeleteAndRestore(this._rawValue);let t=Ji(e),r=!0;this.status==="initializing"||this.status==="initial"?r=!0:this.isListQuery?this._value.length===t.length&&this._value.every((s,o)=>s===t[o])&&(r=!1):this._value===t&&(r=!1),this._value=t,r&&(this.context.log("debug","Query value changed",this.key),this._events.emit("change",this._value)),this.status="ready"};this.refreshValue=()=>{this.setValue(this._rawValue)};this.subscribeToDeleteAndRestore=e=>{for(;this._internalUnsubscribes.length;)this._internalUnsubscribes.pop()?.();Array.isArray(e)?e.forEach(t=>{t instanceof pe&&(this._internalUnsubscribes.push(t.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(t.subscribe("restore",this.refreshValue)))}):e instanceof pe&&(this._internalUnsubscribes.push(e.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(e.subscribe("restore",()=>{this.refreshValue()})))};this.execute=()=>(this.context.log("debug","Executing query",this.key),this.status==="initial"?this.status="initializing":this.status==="ready"&&(this.status="revalidating"),this._executionPromise=this.run().then(()=>this._value).catch(e=>{if(e instanceof Error){if(e.name==="InvalidStateError"||e.name==="InvalidAccessError")return this._value;throw e}else throw new Error("Unknown error executing query")}),this._executionPromise);this[Ja]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this.isListQuery=Array.isArray(e),this._events=new N(l=>{l==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=t,this.key=s,this.collection=r;let a=o||(l=>l.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",l=>{a(l)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{Ja=Gi}get current(){return this._value}get resolved(){return this.status==="ready"?Promise.resolve(this._value):this._executionPromise??this.execute()}get subscribed(){return this._events.totalSubscriberCount()>0}get status(){return this._status}set status(e){this._status!==e&&(this._status=e,this._events.emit("statusChange",this._status))}get hasDeleted(){return this.isListQuery?this._rawValue.length!==this._value.length:!!this._rawValue&&!this._value}subscribe(e,t){if(t===void 0&&typeof e=="function")return this.resolved,this._events.subscribe("change",e);if(e==="change"&&t!==void 0)return this.resolved,this._events.subscribe("change",t);if(e==="statusChange"&&typeof t=="function")return this._events.subscribe(e,t);throw new Error("Invalid invocation of Query.subscribe")}get __rawValue(){return this._rawValue}};var kn=class extends we{constructor({id:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.hydrate(this.oid);this.setValue(e)};this.oid=ee(r.collection,e),this.hydrate=t}};var Ga,Bn=class extends we{constructor({index:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.context.documents.findOneOid({collection:this.collection,index:this.index});this.setValue(e?await this.hydrate(e):null)};this[Ga]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Ga=me}};var Ya,Ln=class extends we{constructor({index:e,hydrate:t,pageSize:r,page:s,...o}){super({initial:[],...o});this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:t}=await this.context.documents.findAllOids({collection:this.collection,index:this.index,limit:this._pageSize,offset:this._page*this._pageSize});this._hasNextPage=t,this.setValue(await Promise.all(e.map(this.hydrate)))};this.nextPage=async()=>{this.hasNextPage&&(this._page++,await this.run())};this.previousPage=async()=>{this._page!==0&&(this._page--,await this.run())};this.setPage=async e=>{this._page=e,await this.run()};this[Ya]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t,this._pageSize=r,this._page=s}static{Ya=me}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var Xa,jn=class extends we{constructor({hydrate:e,pageSize:t,index:r,...s}){super({initial:[],...s});this._upToPage=1;this._hasNextPage=!1;this.run=async()=>{let{result:e,hasNextPage:t}=await this.context.documents.findAllOids({collection:this.collection,limit:this._pageSize*this._upToPage,offset:0,index:this.index});this._hasNextPage=t,this.setValue(await Promise.all(e.map(this.hydrate)))};this.loadMore=async()=>{let{result:e,hasNextPage:t}=await this.context.documents.findAllOids({collection:this.collection,limit:this._pageSize,offset:this._pageSize*this._upToPage,index:this.index});this._hasNextPage=t,this._upToPage++,this.setValue([...this.current,...await Promise.all(e.map(this.hydrate))])};this[Xa]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=t}static{Xa=me}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var Za,Mn=class extends we{constructor({index:e,hydrate:t,...r}){super({initial:[],...r});this.run=async()=>{let{result:e}=await this.context.documents.findAllOids({collection:this.collection,index:this.index});this.context.log("debug",`FindAllQuery: ${e.length} oids found: ${e}`),this.setValue(await Promise.all(e.map(this.hydrate)))};this[Za]=e=>{Ne(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Za=me}};var Vn=class{constructor({collection:n,cache:e,entities:t,context:r,documentManager:s}){this.serializeIndex=n=>n?Ke(n):"";this.get=n=>{let e=`get:${this.collection}:${n}`;return this.cache.getOrSet(e,()=>new kn({id:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:e}))};this.findOne=({index:n,key:e}={})=>{let t=e||`findOne:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new Bn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[me](n)})};this.findAll=({index:n,key:e}={})=>{let t=e||`findAll:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new Mn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[me](n)})};this.findPage=({index:n,pageSize:e,page:t,key:r})=>{let s=r||`findPage:${this.collection}:${this.serializeIndex(n)}:${e}`;return this.cache.getOrSet(s,()=>new Ln({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:t}),o=>{o[me](n)})};this.findAllInfinite=({index:n,pageSize:e,key:t})=>{let r=t||`findAllInfinite:${this.collection}:${this.serializeIndex(n)}:${e}`;return this.cache.getOrSet(r,()=>new jn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[me](n)})};this.cache=e,this.collection=n,this.hydrate=t.hydrate,this.context=r,this.documentManager=s,this.put=this.documentManager.create.bind(this.documentManager,this.collection),this.delete=this.documentManager.delete.bind(this.documentManager,this.collection),this.deleteAll=this.documentManager.deleteAllFromCollection.bind(this.documentManager,this.collection),this.clone=this.documentManager.clone.bind(this.documentManager,this.collection)}};var Un=class extends oe{constructor({evictionTime:e=5*1e3,context:t}){super();this._cache=new Map;this._holds=new Set;this.enqueueQueryEviction=e=>{setTimeout(()=>{if(!e.subscribed){if(this._holds.has(e.key)){this.context.log("debug","QueryCache: keepAlive hold on query preserves after unsubscribe",e.key);return}this._cache.get(e.key)===e&&(this._cache.delete(e.key),this.context.log("debug","QueryCache: evicted query",e.key))}},this._evictionTime)};this.dropAll=()=>{this.context.log("debug","QueryCache: drop all",this._cache.size,"queries"),this._cache.forEach(e=>e.dispose()),this._cache.clear()};this.forceRefreshAll=()=>{this.context.log("debug","QueryCache: force refresh all",this._cache.size,"queries"),this._cache.forEach(e=>e.execute())};this._evictionTime=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("persistenceReset",this.forceRefreshAll))}get activeKeys(){return Array.from(this._cache.keys())}get(e){return this._cache.get(e)||null}set(e){return this._cache.set(e.key,e),e[Gi](this.enqueueQueryEviction),this.enqueueQueryEviction(e),e}getOrSet(e,t,r){let s=this.get(e);return s?(r?.(s),s):(this.context.log("debug","QueryCache: creating new query",e),this.set(t()))}keepAlive(e){this._holds.add(e),this.context.log("debug","QueryCache: keepAlive",e)}dropKeepAlive(e){this._holds.delete(e);let t=this.get(e);t&&(t.subscribed||(this.context.log("debug","QueryCache: dropKeepAlive on unsubscribed query; queuing eviction",e),this.enqueueQueryEviction(t)))}get keepAlives(){return this._holds}};var Yi=Symbol("handleMessage"),ec,Lt=class extends N{constructor({initialPresence:e,updateBatchTimeout:t=200,defaultProfile:r,ctx:s}){super();this._peers={};this._self={profile:{}};this._selfReplicaIds=new Set;this._peerIds=new Array;this.isSelf=(e,t)=>e.id===t.replicaId||this._selfReplicaIds.has(t.replicaId)||this._self.id===t.id;this[ec]=async(e,t)=>{let r=!1,s=!1,o=new Set(this.peerIds);if(t.type==="presence-changed")this.isSelf(e,t.userInfo)?(this._self=t.userInfo,this._selfReplicaIds.add(t.userInfo.replicaId),s=!0,this.emit("selfChanged",t.userInfo)):(o.add(t.userInfo.id),this._peers[t.userInfo.id]=t.userInfo,r=!0,this.emit("peerChanged",t.userInfo.id,t.userInfo));else if(t.type==="sync-resp"){this._peers={},o.clear();for(let[a,l]of Object.entries(t.peerPresence))this.isSelf(e,l)?(this._self=l,this._selfReplicaIds.add(l.replicaId),s=!0,this.emit("selfChanged",l)):(r=!0,o.add(a),this._peers[a]=l,this.emit("peerChanged",a,l))}else if(t.type==="presence-offline"){o.delete(t.userId),this._selfReplicaIds.delete(t.replicaId);let a=this._peers[t.userId];delete this._peers[t.userId],r=!0,this.emit("peerLeft",t.userId,a)}r&&(this._peerIds=Array.from(o).sort(),this.emit("peersChanged",this._peers)),(r||s)&&this.emit("change")};this.update=async e=>{this._updateBatch.update({items:[{presence:e}]}),this.self.presence={...this.self.presence,...e},this.emit("selfChanged",this.self),this.emit("change")};this.flushPresenceUpdates=e=>{let t={presence:this.self.presence,internal:this.self.internal};for(let r of e)r.presence&&Object.assign(t.presence,r.presence),r.internal&&Object.assign(t.internal,r.internal);this.emit("update",t)};this.setViewId=e=>{this._updateBatch.update({items:[{internal:{viewId:e}}]}),this.self.internal.viewId=e,this.emit("selfChanged",this.self),this.emit("change")};this.setFieldId=(e,t=Date.now())=>{this._updateBatch.update({items:[{internal:{lastFieldId:e,lastFieldTimestamp:t}}]}),this.self.internal.lastFieldId=e,this.emit("selfChanged",this.self),this.emit("change")};this.getViewPeers=()=>this._peerIds.map(e=>this._peers[e]).filter(e=>this.self.internal.viewId===void 0||e.internal.viewId===this.self.internal.viewId);this.getFieldPeers=(e,t=60*1e3)=>this._peerIds.map(r=>this._peers[r]).filter(r=>r.internal.lastFieldId===e&&Date.now()-r.internal.lastFieldTimestamp<t);this.self.presence=e,this.self.profile=r,this.self.internal=gi,this.self.id="",this.self.replicaId="",s.meta.getLocalReplica().then(o=>{this.self.replicaId=o.id}),this._updateBatcher=new nt(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:t,items:[],key:"default"})}static{ec=Yi}get self(){return this._self}get peers(){return this._peers}get peerIds(){return this._peerIds}get everyone(){let e={...this._peers};return e[this.self.id]=this.self,e}get selfReplicaIds(){return this._selfReplicaIds}};var Nn=class extends oe{constructor({endpointProvider:e,ctx:t}){super();this.onFileAdded=async e=>{if(!e.remote){this.ctx.log("debug","Uploading file",e.id,e.name);try{await this.uploadFile(e)}catch(t){this.ctx.log("error","File upload failed",t)}}};this.uploadFile=async(e,t={current:0,max:3})=>{let r=e.file;if(!r)throw new Error("Cannot upload a non-local file");let{files:s,token:o}=await this.endpointProvider.getEndpoints(),a=new FormData;a.append("file",r);try{let l=await this.ctx.environment.fetch(s+`/${e.id}`,{method:"POST",body:a,credentials:"include",headers:{Authorization:`Bearer ${o}`}});if(l.ok)return this.ctx.internalEvents.emit(`fileUploaded:${e.id}`,e),this.ctx.internalEvents.emit("fileUploaded",e),this.ctx.log("info","File upload successful"),{success:!0};{let p=await l.text();return this.ctx.log("error","File upload failed",l.status,p),l.status<500||t.current>=t.max?{success:!1,error:`Failed to upload file: ${l.status} ${p}`}:(await new Promise(h=>setTimeout(h,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}}catch(l){return this.ctx.log("error","File upload failed",l),t.current>=t.max?{success:!1,error:l.message}:(await new Promise(p=>setTimeout(p,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}};this.getFile=async(e,t={current:0,max:3})=>{let{files:r,token:s}=await this.endpointProvider.getEndpoints();try{let o=await this.ctx.environment.fetch(r+`/${e}`,{method:"GET",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}});return o.ok?{success:!0,data:await o.json()}:(this.ctx.log("error","File information fetch failed",o.status,await o.text()),o.status<500&&o.status!==404||t.current>=t.max?{success:!1,error:`Failed to fetch file: ${o.status}`}:(await new Promise(a=>setTimeout(a,1e3)),this.getFile(e,{current:t.current+1,max:t.max})))}catch(o){return this.ctx.log("error","File information fetch failed",o),t.current>=t.max?{success:!1,error:o.message}:(await new Promise(a=>setTimeout(a,1e3)),this.getFile(e,{current:t.current+1,max:t.max}))}};this.endpointProvider=e,this.ctx=t,this.addDispose(t.internalEvents.subscribe("fileAdded",this.onFileAdded))}};var ht=class extends N{constructor({interval:e=15*1e3,deadlineLength:t=3*1e3,restartOnTabFocus:r=!0}={}){super();this.nextBeat=null;this.deadline=null;this.keepAlive=()=>{this.deadline&&(clearTimeout(this.deadline),this.deadline=null,this.start())};this.start=(e=!1)=>{this.stop(),e?this.beat():this.nextBeat=setTimeout(this.beat,this._interval)};this.stop=()=>{this.nextBeat&&clearTimeout(this.nextBeat),this.deadline&&clearTimeout(this.deadline)};this.beat=async()=>{this.emit("beat"),this.deadline=setTimeout(this.onDeadline,this.deadlineLength)};this.onDeadline=()=>{this.deadline=null,this.emit("missed")};this.setInterval=e=>{this._interval=e};this._interval=e,this.deadlineLength=t,typeof window<"u"&&r&&(window.addEventListener("pageshow",()=>this.start(!0)),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&this.start(!0)}))}get interval(){return this._interval}};var zn=class extends N{constructor({endpointProvider:e,presence:t,interval:r=15*1e3,ctx:s}){super();this.mode="pull";this._isConnected=!1;this._status="paused";this._hasSynced=!1;this.setInterval=e=>{this.heartbeat.setInterval(e)};this.sendRequest=async e=>{this.ctx.log("debug","Sending sync request",e);try{let{http:t,token:r}=await this.endpointProvider.getEndpoints(),s=await this.fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({messages:e}),credentials:"include"});if(s.ok){this.heartbeat.keepAlive();let o=await s.json(),a=Promise.all(o.messages.map(this.handleServerMessage));this._isConnected||(this._isConnected=!0,this.emit("onlineChange",!0)),await a}else{this.ctx.log("error","Sync request failed",s.status,await s.text()),this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1));let o=await s.json();mr(o)&&o.code===bt.TokenExpired&&(this.endpointProvider.clearCache(),this.heartbeat.keepAlive()),s.status>=500&&this.heartbeat.keepAlive()}}catch(t){this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),this.ctx.log("error",t),this.heartbeat.keepAlive()}};this.handleServerMessage=async e=>{e.type==="sync-resp"&&(this._hasSynced=!0,e.ackThisNonce&&(this.ctx.log("debug","Sending sync ack",e.ackThisNonce),await this.sendRequest([await this.ctx.meta.messageCreator.createAck(e.ackThisNonce)]))),this.emit("message",e)};this.throttledPresenceUpdate=_r(e=>{this.sendRequest([e])},3e3);this.send=e=>{switch(e.type){case"presence-update":return this.throttledPresenceUpdate(e);case"sync":case"heartbeat":return this.sendRequest([e]);case"op":if(this._hasSynced)return this.sendRequest([e]);break}};this.start=async()=>{this.status!=="active"&&(await this.endpointProvider.getEndpoints(),this.heartbeat.start(!0),this._status="active")};this.destroy=()=>{this.dispose(),this.stop()};this.onHeartbeat=async()=>{this.sendRequest([await this.ctx.meta.messageCreator.createPresenceUpdate(this.presence.self),await this.ctx.meta.messageCreator.createSyncStep1()])};this.onHeartbeatMissed=async()=>{this.emit("onlineChange",!1),this.ctx.log("warn","Missed heartbeat"),this._isConnected=!1};this.syncOnce=async()=>{await this.sendRequest([await this.ctx.meta.messageCreator.createSyncStep1()])};this.ctx=s,this.presence=t,this.endpointProvider=e,this.heartbeat=new ht({interval:r}),this.heartbeat.subscribe("beat",this.onHeartbeat),this.heartbeat.subscribe("missed",this.onHeartbeatMissed)}get fetch(){return this.ctx.environment.fetch}get interval(){return this.heartbeat.interval}get hasSynced(){return this._hasSynced}stop(){this.heartbeat.stop(),this._status="paused"}reconnect(){this.heartbeat.start(!0)}ignoreIncoming(){this.stop()}get isConnected(){return this._isConnected}get status(){return this._status}};function Xi(i){this.message=i}Xi.prototype=new Error,Xi.prototype.name="InvalidCharacterError";var uo=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(i){var n=String(i).replace(/=+$/,"");if(n.length%4==1)throw new Xi("'atob' failed: The string to be decoded is not correctly encoded.");for(var e,t,r=0,s=0,o="";t=n.charAt(s++);~t&&(e=r%4?64*e+t:t,r++%4)?o+=String.fromCharCode(255&e>>(-2*r&6)):0)t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(t);return o};function tc(i){var n=i.replace(/-/g,"+").replace(/_/g,"/");switch(n.length%4){case 0:break;case 2:n+="==";break;case 3:n+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(uo(e).replace(/(.)/g,function(t,r){var s=r.charCodeAt(0).toString(16).toUpperCase();return s.length<2&&(s="0"+s),"%"+s}))}(n)}catch{return uo(n)}}function $n(i){this.message=i}function nc(i,n){if(typeof i!="string")throw new $n("Invalid token specified");var e=(n=n||{}).header===!0?0:1;try{return JSON.parse(tc(i.split(".")[e]))}catch(t){throw new $n("Invalid token specified: "+t.message)}}$n.prototype=new Error,$n.prototype.name="InvalidTokenError";var fo=nc;var Kn=class{constructor(n,e){this.config=n;this.ctx=e;this.cached=null;this.tokenInfo=null;this.getEndpoints=async()=>{if(this.cached)return this.cached;let n;if(this.config.fetchAuth)n=await this.config.fetchAuth();else{let a=this.ctx.environment.fetch;n=await a(this.config.authEndpoint,{credentials:"include"}).then(l=>{if(l.ok)return l.json();throw new Error(`Auth endpoint returned non-200 response: ${l.status}`)})}L(n.accessToken,"No access token provided from auth endpoint");let e=fo(n.accessToken);L(e.url,"No sync endpoint provided from auth endpoint"),L(e.type!==void 0,"No replica type provided from auth endpoint"),this.tokenInfo={userId:e.sub,libraryId:e.lib,url:e.url,fileUrl:e.file,role:e.role,type:parseInt(e.type+"")};let t=new URL(e.url);t.protocol=t.protocol.replace("ws","http");let r=t.toString();t.protocol=t.protocol.replace("http","ws");let s=t.toString(),o=e.file;if(!o){let a=new URL(r);a.pathname=a.pathname+"/files",o=a.toString()}return this.cached={http:r,websocket:s,files:o,token:n.accessToken},this.cached};this.clearCache=()=>{this.cached=null};if(!n.authEndpoint&&!n.fetchAuth)throw new Error("Either authEndpoint or fetchAuth must be provided to ServerSyncEndpointProvider")}get type(){return this.tokenInfo?.type??Me.Realtime}};var qn=class extends N{constructor(e){super();this.timer=null;this.isScheduled=!1;this.next=()=>{this.isScheduled||(this.isScheduled=!0,this.timer=setTimeout(()=>{this.emit("trigger"),this.isScheduled=!1,this.backoff.next()},this.backoff.current))};this.reset=()=>{this.backoff.reset(),this.timer&&(clearTimeout(this.timer),this.timer=null)};this.backoff=e}},Hn=class{constructor(n,e){this.current=0;this.next=()=>{this.current=Math.min(this.max,this.current*this.factor)};this.reset=()=>{this.current=0};this.max=n,this.factor=e}};var Qn=class extends N{constructor({endpointProvider:e,ctx:t,presence:r}){super();this.socket=null;this.connectQueue=[];this.syncQueue=[];this.incomingQueue=[];this._status="paused";this.synced=!1;this.hasStartedSync=!1;this._ignoreIncoming=!1;this.mode="realtime";this.heartbeat=new ht;this.reconnectScheduler=new qn(new Hn(60*1e3,1.5));this.onOpen=()=>{if(!this.socket)throw new Error("Invalid sync state: online but socket is null");if(this.synced=!1,this.connectQueue.length){for(let e of this.connectQueue)this.ctx.log("debug","Sending queued message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e));this.connectQueue=[]}this.ctx.log("debug","Sync connected"),this.onOnlineChange(!0),this.reconnectScheduler.reset()};this.onOnlineChange=async e=>{this.ctx.log("info","Socket online change",e),!this.disposed&&(this.ctx.closing||(e?(this.ctx.log("debug","Starting sync"),this.hasStartedSync=!0,this.synced=!1,this.send(await this.ctx.meta.messageCreator.createPresenceUpdate(this.presence.self)),this.send(await this.ctx.meta.messageCreator.createSyncStep1()),this.heartbeat.start()):(this.hasStartedSync=!1,this.synced=!1,this.heartbeat.stop()),this.emit("onlineChange",e)))};this.onMessage=async e=>{if(this._ignoreIncoming){this.ctx.log("warn","Ignoring incoming message (ignore incoming flag set)",e.data);return}let t=JSON.parse(e.data);switch(t.type){case"sync-resp":if(t.ackThisNonce&&this.send(await this.ctx.meta.messageCreator.createAck(t.ackThisNonce)),this.hasStartedSync=!0,this.synced=!0,this.syncQueue.length)if(t.overwriteLocalData)this.ctx.log("warn","Overwriting local data - dropping outgoing message queue"),this.syncQueue=[];else{for(let r of this.syncQueue)this.send(r);this.syncQueue=[]}if(this.emit("message",t),this.incomingQueue.length){for(let r of this.incomingQueue)this.emit("message",r);this.incomingQueue=[]}break;case"need-since":case"presence-changed":case"presence-offline":this.emit("message",t);break;case"op-re":if(!this.synced){this.ctx.log("debug","Enqueueing op-re message because sync hasn't finished yet",t),this.incomingQueue.push(t);break}this.emit("message",t);break;case"heartbeat-response":this.heartbeat.keepAlive(),this.emit("message",t);break;default:this.synced&&this.emit("message",t);break}};this.onError=e=>{this.ctx.log("error",e),this.reconnectScheduler.next(),this.ctx.log("info","Attempting reconnect to websocket sync")};this.onClose=e=>{this.ctx.log("info","Sync disconnected"),this.onOnlineChange(!1),this.onError(e)};this.initializeSocket=async()=>{let e=await this.endpointProvider.getEndpoints();return this.socket=new this.ctx.environment.WebSocket(e.websocket,["Bearer",e.token]),this.socket.addEventListener("message",this.onMessage),this.socket.addEventListener("open",this.onOpen),this.socket.addEventListener("error",this.onError),this.socket.addEventListener("close",this.onClose),this.socket};this.sendHeartbeat=async()=>{this.send(await this.ctx.meta.messageCreator.createHeartbeat())};this.reconnect=()=>{this.stop(),this.start()};this.canSkipSyncWait=e=>e.type==="sync"||e.type==="presence-update"||e.type==="sync-ack"||e.type==="heartbeat";this.send=e=>{this.status==="active"&&(!this.hasStartedSync&&!this.canSkipSyncWait(e)||(this.canSkipSyncWait(e)?this.socket?.readyState===Zi?(this.ctx.log("debug","Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):(this.ctx.log("debug","Enqueueing message until socket is open",JSON.stringify(e,null,2)),this.connectQueue.push(e)):this.synced?this.socket?.readyState===Zi&&(this.ctx.log("debug","Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):this.hasStartedSync&&(this.ctx.log("debug","Enqueueing message until synced",JSON.stringify(e,null,2)),this.syncQueue.push(e))))};this.destroy=()=>{this.dispose(),this.stop()};this.start=async()=>{this.socket||(await this.initializeSocket(),this._status="active")};this.stop=()=>{this.socket?.removeEventListener("message",this.onMessage),this.socket?.removeEventListener("close",this.onClose),this.socket?.close(),this.socket=null,this._status="paused"};this.ctx=t,this.endpointProvider=e,this.presence=r,this.reconnectScheduler.subscribe("trigger",this.initializeSocket),this.heartbeat.subscribe("beat",this.sendHeartbeat)}get hasSynced(){return this.synced}ignoreIncoming(){this.incomingQueue=[],this._ignoreIncoming=!0}get isConnected(){return this.socket?.readyState===Zi}get status(){return this._status}},Zi=1;async function ho(){try{let i=await navigator.permissions.query({name:"periodic-background-sync"});if(i.state==="granted"){let n=await navigator.serviceWorker.ready;if("periodicSync"in n)try{await n.periodicSync.register("verdant-sync",{minInterval:24*60*60*1e3})}catch(e){console.warn("Failed to register background sync:",e)}}else console.debug("Background sync permission is not granted:",i)}catch(i){console.error("Failed to initiate background sync:",i)}}var Wn=class extends N{constructor(e){super();this.mode="pull";this.hasSynced=!1;this.destroy=()=>{};this.isConnected=!1;this.status="paused";this.pullInterval=0;this.uploadFile=async()=>({success:!1,retry:!1});this.getFile=async()=>({success:!1,error:"Sync is not active"});this.syncOnce=async()=>{};this.presence=new Lt({initialPresence:null,defaultProfile:null,ctx:e})}send(){}async start(){}stop(){}ignoreIncoming(){}reconnect(){}setMode(){}setPullInterval(){}},pt=class extends N{constructor({authEndpoint:e,fetchAuth:t,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:a,pullInterval:l,presenceUpdateBatchTimeout:p,defaultProfile:h,useBroadcastChannel:O,onOutgoingMessage:v,EXPERIMENTAL_backgroundSync:P},{ctx:y,onData:I}){super();this.broadcastChannel=null;this._activelySyncing=!1;this._hasSynced=!1;this.handleBroadcastChannelMessage=e=>{e.data.type==="sync"&&this.handleMessage(e.data.message,{source:"broadcastChannel"})};this.handleMessage=async(e,{source:t}={source:"network"})=>{if(!this.ctx.closing){if(e.type==="op-re"||e.type==="sync-resp")for(let r of e.operations)this.ctx.time.update(r.timestamp);switch(this.ctx.log("debug","sync message",JSON.stringify(e,null,2)),e.type){case"op-re":await this.onData({operations:e.operations,baselines:e.baselines}),e.globalAckTimestamp&&await this.ctx.meta.setGlobalAck(e.globalAckTimestamp);break;case"global-ack":await this.ctx.meta.setGlobalAck(e.timestamp);break;case"sync-resp":this._activelySyncing=!0,this.emit("syncingChange",!0),await this.onData({operations:e.operations,baselines:e.baselines,reset:e.overwriteLocalData}),e.globalAckTimestamp&&await this.ctx.meta.setGlobalAck(e.globalAckTimestamp),await this.ctx.meta.updateLastSynced(e.ackedTimestamp),this._activelySyncing=!1,this.emit("syncingChange",!1),this._hasSynced=!0,this.emit("synced");break;case"need-since":this.emit("serverReset",e.since),this.ctx.files.onServerReset(e.since),this.activeSync.send(await this.ctx.meta.messageCreator.createSyncStep1(e.since));break;case"server-ack":await this.ctx.meta.updateLastSynced(e.timestamp)}t==="network"&&this.broadcastChannel?.postMessage({type:"sync",message:e}),this.presence[Yi](await this.ctx.meta.getLocalReplica(),e)}};this.handleOnlineChange=async e=>{if(this.emit("onlineChange",e),e){let t=await this.ctx.files.listUnsynced(),r=await Promise.allSettled(t.map(s=>this.fileSync.uploadFile(s)));r.some(s=>s.status==="rejected")&&this.ctx.log("error","Failed to upload unsynced files",r.filter(s=>s.status==="rejected").map(s=>s.reason))}};this.handlePresenceUpdate=async e=>{this.send(await this.ctx.meta.messageCreator.createPresenceUpdate(e))};this.setMode=e=>{if(e==="realtime"&&!this.canDoRealtime)throw new Error("Cannot switch to realtime mode, because the current auth token does not allow it");let t;e==="realtime"?t=this.webSocketSync:t=this.pushPullSync,t!==this.activeSync&&(this.ctx.log("debug","switching to",e,"mode"),this.activeSync.status==="active"&&t.start(),this.activeSync.stop(),this.activeSync=t)};this.setPullInterval=e=>{this.pushPullSync.setInterval(e)};this.send=async e=>{if(this.activeSync.status==="active"){let t=this.endpointProvider.tokenInfo?.userId;if(!t)throw new q(q.Code.Unexpected,void 0,"Active sync has invalid token info");(e.type==="sync"||e.type==="op")&&pr(e,t),await this.activeSync.send(e),this.onOutgoingMessage?.(e)}};this.uploadFile=async e=>(this.ctx.log("info","Uploading file",{name:e.name,type:e.type,id:e.id,size:e.file?.size}),this.activeSync.status==="active"?this.fileSync.uploadFile(e):{success:!1,retry:!1,error:"Sync is not active"});this.getFile=async e=>{if(this.activeSync.status==="active")return this.fileSync.getFile(e);if(await this.getSyncStartPromise(),this.activeSync.status==="paused")throw new q(q.Code.Offline,void 0,"Sync is not active");return this.fileSync.getFile(e)};this.getSyncStartPromise=(e=5e3)=>new Promise((t,r)=>{let s=setTimeout(()=>{r(new Error("Sync did not start in time")),o()},e),o=this.subscribe("onlineChange",a=>{a&&(clearTimeout(s),o(),t())})});this.start=()=>this.activeSync.start();this.stop=()=>this.activeSync.stop();this.destroy=()=>{this.dispose(),this.webSocketSync.destroy(),this.pushPullSync.destroy()};this.reconnect=()=>this.activeSync.reconnect();this.syncOnce=()=>this.pushPullSync.syncOnce();if(this.onData=I,this.ctx=y,this.onOutgoingMessage=v,this.presence=new Lt({initialPresence:r,defaultProfile:h,updateBatchTimeout:p,ctx:y}),this.endpointProvider=new Kn({authEndpoint:e,fetchAuth:t},y),this.webSocketSync=new Qn({endpointProvider:this.endpointProvider,presence:this.presence,ctx:y}),this.pushPullSync=new zn({endpointProvider:this.endpointProvider,presence:this.presence,interval:l,ctx:y}),this.fileSync=new Nn({endpointProvider:this.endpointProvider,ctx:y}),O&&"BroadcastChannel"in window&&(this.broadcastChannel=new BroadcastChannel(`verdant-${y.namespace}`),this.broadcastChannel.addEventListener("message",this.handleBroadcastChannelMessage)),a==="realtime"?this.activeSync=this.webSocketSync:this.activeSync=this.pushPullSync,this.presence.subscribe("update",this.handlePresenceUpdate),y.meta.events.subscribe("syncMessage",this.send),this.webSocketSync.subscribe("message",this.handleMessage),this.webSocketSync.subscribe("onlineChange",this.handleOnlineChange),this.pushPullSync.subscribe("message",this.handleMessage),this.pushPullSync.subscribe("onlineChange",this.handleOnlineChange),s&&this.canDoRealtime){let _=()=>{E&&clearTimeout(E);let k=this.presence.getViewPeers().length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;k&&this.mode==="pull"?this.setMode("realtime"):!k&&this.mode==="realtime"&&(E=setTimeout(()=>{this.presence.getViewPeers().length===0&&this.setMode("pull")},1e3))},E;this.presence.subscribe("peersChanged",_),s!=="peers-only"&&this.presence.subscribe("selfChanged",_)}o&&this.start(),P&&ho()}get canDoRealtime(){return this.endpointProvider.type===Me.Realtime||this.endpointProvider.type===Me.PassiveRealtime||this.endpointProvider.type===Me.ReadOnlyRealtime}get syncing(){return this._activelySyncing}get hasSynced(){return this._hasSynced}get pullInterval(){return this.pushPullSync.interval}ignoreIncoming(){this.activeSync.ignoreIncoming()}get isConnected(){return this.activeSync.isConnected}get status(){return this.activeSync.status}get mode(){return this.activeSync.mode}};function po(i){return i.operations.map(t=>t.timestamp).concat(i.baselines?.map(t=>t.timestamp)??[]).reduce((t,r)=>{let s=ln(r);return s>t?s:t},1)}var mt=class extends N{constructor(e){super();this.context=e;this.importingPromise=Promise.resolve();this.addData=async e=>{await this.importingPromise;try{let t=e.reset?po(e):this.schema.version;return t<this.schema.version?(this.context.log("warn","Incoming reset sync data is from an old schema version",t,`(current ${this.schema.version})`),await this.import({data:{operations:e.operations,baselines:e.baselines??[],localReplica:void 0,schemaVersion:t},fileData:[],files:[]})):await this._entities.addData(e)}catch(t){throw this.context.log("critical","Sync failed. To avoid data corruption, the client will now shut down.",t),this.emit("developerError",new q(q.Code.Unexpected,t,"Sync failed. To avoid data corruption, the client will now shut down.")),await this.close(),t}};this.stats=async()=>{if(this.disposed)return{};let e=await this.context.documents.stats(),t=await this.context.meta.stats(),r=typeof navigator<"u"&&typeof navigator.storage<"u"&&"estimate"in navigator.storage?await navigator.storage.estimate():void 0,s=await this.context.files.stats(),o=Object.values(e).reduce((p,{size:h})=>p+h,0),a=t.baselinesSize.size+t.operationsSize.size,l=a/o;return{collections:e,meta:t,storage:r,totalMetaSize:a,totalCollectionsSize:o,metaToDataRatio:l,files:s,quotaUsage:r?.usage&&r?.quota?r.usage/r.quota:void 0}};this.close=async()=>{this.sync.ignoreIncoming(),await this._entities.flushAllBatches(),this.context.closing=!0,this.context.closeLock&&await this.context.closeLock,this.sync.stop(),this.sync.destroy(),await this._entities.destroy(),this.context.persistenceShutdownHandler.shutdown(),this.context.internalEvents.disable(),this.context.entityEvents.disable(),await new Promise(e=>{e()}),this.context.log?.("info","Client closed")};this.__dangerous__resetLocal=async()=>{this.sync.stop(),await Dn(this.namespace,indexedDB)};this.export=async({downloadRemoteFiles:e}={downloadRemoteFiles:!0})=>{this.context.log("info","Exporting data...");let t=await this.context.meta.export(),{fileData:r,files:s}=await this.context.files.export(e);return{data:t,fileData:r,files:s}};this.import=async({data:e,fileData:t,files:r})=>{let s=()=>{};this.importingPromise=new Promise(o=>{s=o}),this.context.log("info","Importing data..."),await lo(this.context,{data:e,files:r,fileData:t}),s()};this.__dangerous__hardReset=async()=>{let e=await this.export();await this.import(e)};this.__cleanupFilesImmediately=()=>this.context.files.cleanupDeletedFiles();this.__manualRebase=()=>(this.context.meta.manualRebase(),new Promise(e=>{let t=this.subscribe("rebase",()=>{t(),e()})}));e.getClient=()=>this,this.collectionNames=Object.keys(e.schema.collections),this._sync=this.context.config.sync&&!e.schema.wip?new pt(this.context.config.sync,{onData:this.addData,ctx:this.context}):new Wn(this.context),e.schema.wip&&this.context.config.sync&&e.log("warn","\u26A0\uFE0F\u26A0\uFE0F Sync is disabled for WIP schemas. Commit your schema changes to start syncing again. \u26A0\uFE0F\u26A0\uFE0F"),this._fileManager=new _n({sync:this.sync,context:this.context}),this._entities=new En({ctx:this.context,files:this._fileManager}),this._queryCache=new Un({context:e,evictionTime:e.config.queries?.evictionTime}),this._documentManager=new un(this.schema,this._entities);let t=Er(()=>{this.emit("futureSeen")},300);this.context.globalEvents.subscribe("futureSeen",t),this.context.globalEvents.subscribe("resetToServer",()=>{this.emit("resetToServer")}),this.context.globalEvents.subscribe("operation",r=>{this.emit("operation",r)}),this.context.globalEvents.subscribe("rebase",()=>{this.emit("rebase")}),this.context.globalEvents.subscribe("fileSaved",r=>{this.emit("fileSaved",r)});for(let[r,s]of Object.entries(e.schema.collections)){let o=r;this[o]=new Vn({collection:o,cache:this._queryCache,context:this.context,entities:this.entities,documentManager:this.documentManager})}}get sync(){return this._sync}get entities(){return this._entities}get documentManager(){return this._documentManager}get schema(){return this.context.schema}get namespace(){return this.context.namespace}get undoHistory(){return this.context.undoHistory}get queries(){return this._queryCache}get batch(){return this.entities.batch}get __persistence(){return{meta:this.context.meta,queries:this.context.documents,files:this.context.files}}};var Jn=class{constructor(n,e){this.base=n;this.version=e;this.withMigrationTime=async(n,e)=>{this.overrideNow=()=>this.base.zero(n),await e(),this.overrideNow=void 0};this.update=this.base.update.bind(this.base);this.nowWithVersion=n=>this.base.now(n);this.zeroWithVersion=n=>this.base.zero(n)}get now(){return this.overrideNow?this.overrideNow():this.base.now(this.version)}get zero(){return this.base.zero(this.version)}};var Gn=class{constructor(n){this.value=n}deref(){return this.value}};var Yn=()=>{},mo=i=>(n,...e)=>{n==="critical"&&e.unshift("[CRITICAL]"),i&&e.unshift(`[${i}]`),n==="critical"?console.error(...e):console[n](...e)};function er(i){return localStorage.getItem("DEBUG")?mo(i):Yn}var ze=class extends oe{constructor(e,{log:t}={}){super();this.db=e;this.createTransaction=(e,t)=>{try{if(this.globalAbortController.signal.aborted)throw new Error("Global abort signal is already aborted");let r=eo(this.db,e,t?.mode||"readonly",t?.abort,this.log);return this.globalAbortController.signal.addEventListener("abort",r.abort),r.addEventListener("complete",()=>{this.globalAbortController.signal.removeEventListener("abort",r.abort)}),r.addEventListener("error",()=>{this.globalAbortController.signal.removeEventListener("abort",r.abort)}),r}catch(r){throw this.log?.("error","Failed to create abortable transaction for store names",e,r),r}};this.run=async(e,t,r)=>{if(this.disposed||r?.transaction?.error)return Promise.resolve(void 0);let o=(r?.transaction||this.createTransaction([e],r)).objectStore(e),a=t(o);return ut(a)};this.runAll=async(e,t,r)=>{if(this.disposed||r?.transaction?.error)return Promise.resolve([]);let o=(r?.transaction||this.createTransaction([e],r)).objectStore(e),a=t(o);return Promise.all(a.map(ut))};this.iterate=async(e,t,r,s)=>{let a=(s?.transaction||this.createTransaction([e],s)).objectStore(e),l=t(a);return Array.isArray(l)?Promise.all(l.map(p=>new Promise((h,O)=>{p.onsuccess=()=>{let v=p.result;v?r(v.value,a,v)?h():v.continue():h()},p.onerror=()=>{p.error&&Xe(p.error)?h():O(p.error)}}))).then(()=>{}):new Promise((p,h)=>{l.onsuccess=()=>{let O=l.result;O?r(O.value,a,O)?p():O.continue():p()},l.onerror=()=>{l.error&&Xe(l.error)?p():h(l.error)}})};this.clear=(e,t)=>this.run(e,r=>r.clear(),{mode:"readwrite",transaction:t});this.onVersionChange=e=>{if(this.log?.("warn",`Another tab has requested a version change for ${this.db.name}`),this.db.close(),typeof window<"u")try{window.location.reload()}catch(t){this.log?.("error","Failed to reload the page",t)}};this.log=t;let r=new AbortController,s=r.abort.bind(r);this.globalAbortController=r,this.db.addEventListener("versionchange",this.onVersionChange),this.addDispose(()=>{this.db.removeEventListener("versionchange",this.onVersionChange)})}};var Xn=class extends ze{constructor(){super(...arguments);this.add=async e=>{let t=e.file?await rc(e.file):void 0;await this.run("files",r=>r.put({id:e.id,remote:e.remote?"true":"false",deletedAt:null,name:e.name,type:e.type,url:e.url,buffer:t,timestamp:e.timestamp}),{mode:"readwrite"})};this.markUploaded=async e=>{if(this.disposed)return;let t=await this.getFileRaw(e);if(!t)throw new Error("File is not in local database");await this.run("files",r=>r.put({...t,remote:"true"}),{mode:"readwrite"})};this.get=async e=>{let t=await this.getFileRaw(e);return t?this.hydrateFileData(t):null};this.delete=e=>this.run("files",t=>t.delete(e),{mode:"readwrite"});this.markPendingDelete=async e=>{let t=await this.getFileRaw(e);if(!t)throw new Error("File is not in local database");await this.run("files",r=>r.put({...t,deletedAt:Date.now()}),{mode:"readwrite"})};this.listUnsynced=async()=>(await this.run("files",t=>t.index("remote").getAll("false"),{mode:"readonly"})).map(this.hydrateFileData);this.resetSyncedStatusSince=async e=>{let t=this.createTransaction(["files"],{mode:"readwrite"}),s=(await this.run("files",o=>o.index("remote").getAll("true"),{transaction:t})).filter(o=>!o.timestamp||!e||o.timestamp>e);await Promise.all(s.map(o=>this.run("files",a=>a.put({...o,remote:"false"}),{transaction:t})))};this.iterateOverPendingDelete=e=>this.iterate("files",t=>t.index("deletedAt").openCursor(IDBKeyRange.lowerBound(0,!0)),(t,r)=>{e(this.hydrateFileData(t),r)},{mode:"readwrite"});this.getAll=async e=>{let[t]=await Qi(this.db,["files"]);return t.map(this.hydrateFileData)};this.stats=async()=>({size:await Ze(this.db,"files")});this.loadFileContents=async(e,t)=>{if(e.file)return e.file;if(e.localPath)throw new Error("Local file paths are not supported in browser");if(e.url){let r=await t.environment.fetch(e.url);if(!r.ok)throw new Error(`Failed to download file ${e.url}: ${r.statusText}`);return r.blob()}throw new Error("File is missing url, file, and localPath")};this.hydrateFileData=e=>{e.remote=e.remote==="true";let t=e.buffer;return delete e.buffer,e.file=t?ic(t,e.type,e.name):void 0,e};this.getFileRaw=async(e,{transaction:t}={})=>{if(this.disposed)return;let r=await this.run("files",s=>s.get(e),{mode:"readonly",transaction:t});if(r)return r}}};function ic(i,n,e){return new File([new Blob([i],{type:n})],e??"blob",{type:n})}function rc(i){return"__testReadBuffer"in i?Promise.resolve(i.__testReadBuffer):new Promise((n,e)=>{let t=new FileReader;t.onload=()=>{n(t.result)},t.onerror=e,t.readAsArrayBuffer(i)})}var Zn=class extends ze{constructor(e,t){super(e,t);this.ctx=t;this.transaction=async(e,t)=>{let r=this.createTransaction(e.storeNames,{mode:e.mode,abort:e.abort});return await t(r)};this.getAckInfo=async()=>{let e=await this.run("info",t=>t.get("ack"));return e||{globalAckTimestamp:null}};this.setGlobalAck=async e=>{await this.run("info",t=>t.put({type:"ack",globalAckTimestamp:e}),{mode:"readwrite"})};this.getLocalReplica=async e=>this.run("info",t=>t.get("localReplicaInfo"),e);this.updateLocalReplica=async(e,t)=>{try{await this.run("info",r=>r.put({...e,type:"localReplicaInfo"}),{mode:"readwrite",transaction:t?.transaction})}catch(r){throw this.ctx.log("critical","Error updating local replica",e,r),r}};this.iterateDocumentBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>{let o=K(e),[a,l]=Mr(e),[p,h]=Vr(e);return[s.openCursor(IDBKeyRange.only(o)),s.openCursor(IDBKeyRange.bound(a,l,!1,!1)),s.openCursor(IDBKeyRange.bound(p,h,!1,!1))]},t,r)};this.iterateCollectionBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>[s.openCursor(IDBKeyRange.bound(e,e+"\uFFFF",!1,!1))],t,r)};this.iterateAllBaselines=async(e,t)=>{await this.iterate("baselines",r=>r.index("timestamp").openCursor(),e,t)};this.getBaseline=(e,t)=>this.run("baselines",r=>r.get(e),t);this.setBaselines=async(e,t=tr)=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),t)};this.deleteBaseline=async(e,t=tr)=>{await this.run("baselines",r=>r.delete(e),t)};this.iterateDocumentOperations=(e,t,r)=>this.iterate("operations",s=>{let o=s.index("d_t"),a=Ee(e),l=r?.to?ge(e,r.to):Ae(e),p=IDBKeyRange.bound(a,l,!1,!1);return o.openCursor(p)},t,r);this.iterateEntityOperations=(e,t,r)=>this.iterate("operations",s=>{let o=Ee(e),a=r?.to?ge(e,r.to):Ae(e),l=IDBKeyRange.bound(o,a,!1,!1);return s.openCursor(l)},t,r);this.deleteEntityOperations=(e,t)=>this.iterate("operations",r=>{let s=Ee(e),o=t?.to?ge(e,t.to):Ae(e),a=IDBKeyRange.bound(s,o,!1,!1);return r.openCursor(a)},(r,s)=>{s.delete(r.oid_timestamp)},t);this.iterateCollectionOperations=(e,t,r)=>this.iterate("operations",s=>s.openCursor(IDBKeyRange.bound(e,e+"\uFFFF",!1,!1),"next"),t,r);this.iterateLocalOperations=(e,t)=>this.iterate("operations",r=>{let s=t?.after?ge(!0,t.after):Ee(!0),o=Ae(!0);return r.index("l_t").openCursor(IDBKeyRange.bound(s,o,!!t?.after,!1),"next")},e);this.iterateAllOperations=(e,t)=>this.iterate("operations",r=>{let s=t?.from?Ee(t.from):void 0,o=t?.before?Ae(t.before):Ee(!0),a=s&&o?IDBKeyRange.bound(s,o,!1,!0):s?IDBKeyRange.lowerBound(s,!1):o?IDBKeyRange.upperBound(o,!0):void 0;return r.index("timestamp").openCursor(a,"next")},e,t);this.addOperations=async(e,t=tr)=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(K(o.oid)),s.put(this.addOperationIndexes(o)))),t),Array.from(r)};this.reset=async({clearReplica:e,transaction:t}={})=>{let r=t||this.createTransaction(["info","operations","baselines"],{mode:"readwrite"});await Promise.all([this.resetLocalReplica(r,e),this.resetBaselines(r),this.resetOperations(r)])};this.stats=async()=>{let e=await Ze(this.db,"operations"),t=await Ze(this.db,"baselines");return{operationsSize:e,baselinesSize:t}};this.resetLocalReplica=async(e,t=!1)=>{if(t)return this.run("info",r=>r.delete("localReplicaInfo"),{mode:"readwrite",transaction:e});{let r=await this.getLocalReplica({transaction:e});r&&(r.ackedLogicalTime=null,r.lastSyncedLogicalTime=null,await this.run("info",s=>s.put({...r,type:"localReplicaInfo"}),{mode:"readwrite",transaction:e}))}};this.resetBaselines=async e=>this.clear("baselines",e);this.resetOperations=async e=>this.clear("operations",e);this.addOperationIndexes=e=>({...e,oid_timestamp:ge(e.oid,e.timestamp),l_t:ge(e.isLocal,e.timestamp),d_t:ge(K(e.oid),e.timestamp)});this.addDispose(()=>(this.ctx.log("info","Closing metadata DB for",this.ctx.namespace),ve(e)))}},tr={mode:"readwrite"};var go=[oc,ac,cc,lc,dc,uc],sc=go.length;function nr({indexedDB:i=window.indexedDB,namespace:n,log:e}){return new Promise((t,r)=>{let s=i.open(kt(n),sc),o=!1;s.onupgradeneeded=async a=>{let l=s.result,p=s.transaction,h=go.slice(a.oldVersion);for(let O of h)await O(l,p);await new Promise((O,v)=>{p.addEventListener("complete",O),p.addEventListener("error",v)}),a.oldVersion||(o=!0)},s.onerror=()=>{console.error("Error opening database",s.error),r(s.error)},s.onsuccess=()=>{t({db:s.result,wasInitialized:o})}})}async function oc(i,n){let e=i.createObjectStore("baselines",{keyPath:"oid"}),t=i.createObjectStore("operations",{keyPath:"oid_timestamp"}),r=i.createObjectStore("info",{keyPath:"type"});e.createIndex("timestamp","timestamp"),t.createIndex("isLocal_timestamp","isLocal_timestamp"),t.createIndex("documentOid_timestamp","documentOid_timestamp")}async function ac(i,n){let e=n.objectStore("operations");await new Promise((t,r)=>{let s=e.openCursor();s.onsuccess=()=>{let o=s.result;if(o){let{isLocal_timestamp:a,documentOid_timestamp:l,...p}=o.value;o.update({...p,l_t:a,d_t:l}),o.continue()}else t()},s.onerror=o=>{r(s.error)}}),e.deleteIndex("isLocal_timestamp"),e.deleteIndex("documentOid_timestamp"),e.createIndex("l_t","l_t",{unique:!1}),e.createIndex("o_t","o_t",{unique:!1}),e.createIndex("d_t","d_t",{unique:!1})}async function cc(i,n){n.objectStore("operations").createIndex("timestamp","timestamp")}async function lc(i,n){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function dc(i,n){let e=n.objectStore("operations");await new Promise((r,s)=>{let o=e.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let l=ui(a.value);l.oid_timestamp!==a.primaryKey?(a.delete(),e.put(l)):a.update(l),a.continue()}else r()},o.onerror=a=>{s(o.error)}});let t=n.objectStore("baselines");await new Promise((r,s)=>{let o=t.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let l=ui(a.value);l.oid!==a.primaryKey?(a.delete(),t.put(l)):a.update(l),a.continue()}else r()},o.onerror=a=>{s(o.error)}})}async function uc(i,n){n.objectStore("files").createIndex("timestamp","timestamp")}var fc=i=>IDBKeyRange.only(Oe(i.equals)),hc=i=>{},pc=i=>{let n=i.gte||i.gt,e=i.lte||i.lt;return n===e?IDBKeyRange.only(Oe(n)):n?e?IDBKeyRange.bound(Oe(n),Oe(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(Oe(n),!!i.gt):IDBKeyRange.upperBound(Oe(e),!!i.lt)},mc=(i,n,e)=>{let t=i.collections[n].compounds[e.where];L(t,`Index ${e.where} does not exist on collection ${n}`);let r=Object.keys(e.match).sort((l,p)=>t.of.indexOf(l)-t.of.indexOf(p));for(let l of r)if(t.of.indexOf(l)!==r.indexOf(l))throw new Error(`Compound index ${e.where} does not have ${l} at the start of its order`);let s=r.map(l=>e.match[l]);if(r.length===t.of.length)return IDBKeyRange.only(ge(...s));let o=Ee(...s),a=Ae(...s);return IDBKeyRange.bound(o,a)};function gc(i){let n=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(n,e)}function ir(i,n,e){if(e)return tn(e)?pc(e):en(e)?fc(e):Si(e)?hc(e):nn(e)?gc(e):mc(i,n,e)}var ei=class extends ze{constructor(e,t){super(e,{log:t.log});this.close=async()=>{await this.dispose()};this.stats=async()=>{let e=Object.keys(this.ctx.schema.collections),t={};return await Promise.all(e.map(async r=>{let s=await Ze(this.db,r);t[r]=s})),t};this.findOneOid=async e=>{let t=await this.run(e.collection,r=>{let s=e.index?.where?r.index(e.index.where):r,o=e.index?.order==="desc"?"prev":"next",a=ir(this.ctx.schema,e.collection,e.index);return s.openCursor(a,o)},{mode:"readonly"});return t?ee(e.collection,t.primaryKey.toString()):null};this.findAllOids=async({collection:e,index:t,offset:r,limit:s})=>{let a=this.createTransaction([e],{mode:"readonly"}).objectStore(e),l=t?.where?a.index(t.where):a,p=t?.order==="desc"?"prev":"next",h=ir(this.ctx.schema,e,t),O=l.openCursor(h,p),v=!1;return{result:await new Promise((y,I)=>{let _=!r,E=0,D=new Set;O.onsuccess=()=>{E++;let k=O.result;if(!k){y(Array.from(D));return}r&&!_?(k.advance(r),_=!0):((!s||D.size<s)&&D.add(ee(e,k.primaryKey.toString())),s&&E>s?(v=!0,y(Array.from(D))):k.continue())},O.onerror=()=>{O.error?.name==="InvalidStateError"?(this.ctx.log("error","find query failed with InvalidStateError",O.error),y([])):O.error&&Xe(O.error)?y([]):I(O.error)}}),hasNextPage:v}};this.saveEntities=async(e,t)=>{let r={transaction:this.createTransaction(t.collections,{mode:"readwrite",abort:t.abort})},s=await Promise.allSettled(e.map(async a=>{let l=a.getSnapshot();try{await this.saveDocument(a.oid,l,r)}catch(p){throw this.ctx.log("error",`Error saving document ${a.oid} (${JSON.stringify(l)})`,p),p instanceof Error?p:new Error("Unknown error saving document")}})),o=s.filter(a=>a.status==="rejected");if(o.length){if(o.length===s.length)throw new Error("Failed to save any documents. Something must be quite wrong.");this.ctx.log("error","Failed to save documents:",o,". See logs above. This only affects querying these documents. Let's hope a future attempt will correct them...")}r.transaction.commit()};this.reset=async()=>{let e=Object.keys(this.ctx.schema.collections),t=this.createTransaction(e,{mode:"readwrite"});await Promise.all(e.map(r=>this.run(r,s=>s.clear(),{transaction:t}))),this.ctx.entityEvents.emit("collectionsChanged",e),this.ctx.log("info","\u{1F4A8} Reset queryable storage")};this.saveDocument=async(e,t,{transaction:r})=>{this.ctx.log("debug",`Saving document indexes for querying ${e}`);let{collection:s,id:o}=ue(e);try{if(!t)await this.run(s,a=>a.delete(o),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Deleted document indexes for querying ${e}`);else{let a=this.ctx.schema.collections[s],l=hi(a,t);l["@@@snapshot"]=JSON.stringify(t),await this.run(s,p=>p.put(l),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Save complete for ${e}`,l)}}catch(a){throw this.ctx.log("error",`Error saving document ${e}`,a),a}};this.ctx=t,this.addDispose(()=>(this.ctx.log("info","Closing document database for",this.ctx.namespace),ve(this.db)))}};async function yo(i,n,e,t,r){r?.("debug","Upgrading database",n,"to version",e);function s(o,a){let l=i.open(ft(n),e),p=!1;l.onupgradeneeded=h=>{let O=l.transaction;t(O,l.result,h),p=!0},l.onsuccess=async h=>{p?(await ve(l.result),o(l.result)):a(new Error("Database was not upgraded when a version change was expected"))},l.onerror=h=>{a(l.error||new Error("Unknown error"))},l.onblocked=h=>{r?.("Database upgrade blocked!")}}return new Promise(s)}async function rr({indexedDB:i=Hi,namespace:n,version:e,log:t}){t?.("debug","Opening database",n,"at version",e);let r=await to(ft(n),e,i);return r.addEventListener("versionchange",s=>{r.close()}),r.addEventListener("close",()=>{t?.("warn","Database closed",n)}),r}var gt=class{constructor(n=window.indexedDB){this.indexedDB=n;this.name="IdbPersistence";this.getNamespaces=async()=>{let n=await this.indexedDB.databases();return Array.from(new Set(n.map(no).filter(e=>!!e)))};this.getNamespaceVersion=async n=>{let e=ft(n),r=(await this.indexedDB.databases()).find(s=>s.name===e);return r?r.version??0:0};this.deleteNamespace=async(n,e)=>{await Promise.all([Cn(kt(n),this.indexedDB),Cn([n,"collections"].join("_"),this.indexedDB)])};this.openNamespace=async n=>new sr(this.indexedDB,n);this.copyNamespace=async(n,e,t)=>{let r={...t,namespace:n},s={...t,namespace:e},{db:o}=await nr({indexedDB:this.indexedDB,log:r.log,namespace:r.namespace}),a=await rr({indexedDB:this.indexedDB,namespace:r.namespace,version:r.schema.version,log:r.log});r.log("info",`Copying data from ${r.namespace} to ${s.namespace}`),await Wi(o,kt(s.namespace),s,this.indexedDB),await Wi(a,ft(s.namespace),s,this.indexedDB),await ve(o),await ve(a)}}},sr=class{constructor(n,e){this.indexedDB=n;this.namespace=e;this.openMetadata=async n=>{let{db:e}=await nr({indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return this.metadataDb=e,n.persistenceShutdownHandler.register(()=>ve(e)),new Zn(e,n)};this.openDocuments=async n=>{let e=await rr({version:n.schema.version,indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return n.persistenceShutdownHandler.register(()=>ve(e)),new ei(e,n)};this.applyMigration=async(n,e)=>{n.log("debug","Applying migration",e.newSchema.version,e),await yo(this.indexedDB,this.namespace,e.newSchema.version,(t,r)=>{for(let s of e.addedCollections)r.createObjectStore(s,{keyPath:e.newSchema.collections[s].primaryKey,autoIncrement:!1});for(let s of e.allCollections){let o=t.objectStore(s);for(let a of e.addedIndexes[s]||[])o.createIndex(a.name,a.name,{multiEntry:a.multiEntry});for(let a of e.removedIndexes[s]||[])o.deleteIndex(a.name)}for(let s of e.removedCollections)t.objectStore(s).clear()},n.log)}}openFiles(n){if(!this.metadataDb)throw new Error("Metadata database must be opened first. This is a bug in Verdant.");return Promise.resolve(new Xn(this.metadataDb,n))}};var yt=class extends N{constructor(){super(...arguments);this._undoable=[];this._undone=[];this.undo=async()=>{let e=this._undoable.pop();if(e){let t=await e();return t&&this._undone.push(t),this.emit("change"),!0}return!1};this.redo=async()=>{let e=this._undone.pop();if(e){let t=await e();return t&&this._undoable.push(t),this.emit("change"),!0}return!1};this.addUndo=e=>{this._undoable.push(e),this._undone=[],this.emit("change")};this.addRedo=e=>{this._undone.push(e),this.emit("change")};this.clear=()=>{this._undoable=[],this._undone=[],this.emit("change")}}get canUndo(){return this._undoable.length>0}get canRedo(){return this._undone.length>0}get undoLength(){return this._undoable.length}get redoLength(){return this._undone.length}};var ti=class{constructor(n){this.init=n;this._initializing=!1;this.initialize=async n=>{if(typeof window>"u"&&!n.environment)throw new Error("A Verdant client was initialized in an environment without a global Window or `environment` configuration. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of the environment to the ClientDescriptor options.");if(this._initializing||this._resolvedValue)return this._readyPromise;this._initializing=!0;try{let e=new Jn(new sn,n.schema.version),t=n.environment||yc,r=n.log===!1?Yn:n.log||er("\u{1F33F}"),s={closing:!1,entityEvents:new N,globalEvents:new N,internalEvents:new N,log:r,migrations:n.migrations,namespace:n.namespace,originalNamespace:n.namespace,schema:n.schema,oldSchemas:n.oldSchemas,time:e,undoHistory:n.undoHistory||new yt,weakRef:l=>n.EXPERIMENTAL_weakRefs?new WeakRef(l):new Gn(l),patchCreator:new je(()=>e.now),config:{files:n.files,sync:n.sync,persistence:{disableRebasing:n.disableRebasing,rebaseTimeout:n.rebaseTimeout},queries:n.queries},persistence:n.persistence||new gt(t.indexedDB),environment:t,persistenceShutdownHandler:new Fe(r),pauseRebasing:!1,getClient(){throw new q(q.Code.Unexpected,void 0,"Client not yet initialized. This is a Verdant bug, please report it.")}};s.log("info","Initializing client",{namespace:s.namespace,version:n.schema.version,persistence:s.persistence.name});let o=await Bt(s),a=new mt(o);return this.resolveReady(a),this._resolvedValue=a,a}catch(e){throw e instanceof Error?(this.rejectReady(e),e):new Error("Unknown error initializing storage")}finally{this._initializing=!1}};this.open=()=>this.initialize(this.init);this.close=async()=>{this._resolvedValue&&this._resolvedValue.close(),this._initializing&&(await this._readyPromise).close()};this.__dangerous__resetLocal=async()=>{await Dn(this.namespace)};this._readyPromise=new Promise((e,t)=>{this.resolveReady=e,this.rejectReady=t}),this._namespace=n.namespace}get namespace(){return this._namespace}get current(){return this._resolvedValue}get readyPromise(){return this._readyPromise}get schema(){return this.init.schema}},yc={WebSocket:typeof WebSocket<"u"?WebSocket:void 0,fetch:typeof window<"u"?window.fetch.bind(window):fetch,indexedDB:typeof indexedDB<"u"?indexedDB:void 0};var bc={private:$e.onlyMe(),public:void 0};function vc(i,{port:n=3242,initialPresence:e={}}={}){let t=localStorage.getItem("verdant-userId");return t||(t=`user-${Math.random().toString(36).slice(2)}`,localStorage.setItem("verdant-userId",t)),{defaultProfile:{id:t},initialPresence:e,authEndpoint:`http://localhost:${n}/auth/${i}?userId=${t}`}}var or=Te(Qe(),1);function wc(i){return i?or.default.slug():(0,or.default)()}window.Verdant=ar;
16
16
  //# sourceMappingURL=index.js.map