@verdant-web/store 4.1.4 → 4.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/index.js +5 -5
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/client/ClientDescriptor.js +1 -1
- package/dist/esm/client/ClientDescriptor.js.map +1 -1
- package/dist/esm/context/ShutdownHandler.d.ts +2 -0
- package/dist/esm/context/ShutdownHandler.js +4 -2
- package/dist/esm/context/ShutdownHandler.js.map +1 -1
- package/dist/esm/entities/Entity.d.ts +2 -1
- package/dist/esm/entities/Entity.js +12 -15
- package/dist/esm/entities/Entity.js.map +1 -1
- package/dist/esm/entities/types.d.ts +7 -0
- package/dist/esm/persistence/migration/migrate.d.ts +1 -1
- package/dist/esm/persistence/migration/migrate.js +3 -3
- package/dist/esm/persistence/migration/migrate.js.map +1 -1
- package/dist/esm/persistence/persistence.js +2 -2
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/package.json +2 -2
- package/src/client/ClientDescriptor.ts +1 -1
- package/src/context/ShutdownHandler.ts +7 -1
- package/src/entities/Entity.ts +15 -14
- package/src/entities/types.ts +7 -0
- package/src/persistence/migration/migrate.ts +5 -5
- package/src/persistence/persistence.ts +2 -2
package/dist/bundle/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var ro=Object.create;var
|
|
1
|
+
"use strict";var ro=Object.create;var kt=Object.defineProperty;var so=Object.getOwnPropertyDescriptor;var oo=Object.getOwnPropertyNames;var ao=Object.getPrototypeOf,co=Object.prototype.hasOwnProperty;var lo=(i,n)=>()=>(i&&(n=i(i=0)),n);var se=(i,n)=>()=>(n||i((n={exports:{}}).exports,n),n.exports),or=(i,n)=>{for(var e in n)kt(i,e,{get:n[e],enumerable:!0})},ar=(i,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of oo(n))!co.call(i,r)&&r!==e&&kt(i,r,{get:()=>n[r],enumerable:!(t=so(n,r))||t.enumerable});return i};var Re=(i,n,e)=>(e=i!=null?ro(ao(i)):{},ar(n||!i||!i.__esModule?kt(e,"default",{value:i,enumerable:!0}):e,i)),Ye=i=>ar(kt({},"__esModule",{value:!0}),i);var Xn=se((ac,cr)=>{cr.exports=function(n,e){var t="000000000"+n;return t.substr(t.length-e)}});var dr=se((cc,lr)=>{var uo=Xn(),fo=typeof window=="object"?window:self,ho=Object.keys(fo).length,po=navigator.mimeTypes?navigator.mimeTypes.length:0,mo=uo((po+navigator.userAgent.length).toString(36)+ho.toString(36),4);lr.exports=function(){return mo}});var pr=se((lc,hr)=>{var Zn,ur=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;ur?(fr=Math.pow(2,32)-1,Zn=function(){return Math.abs(ur.getRandomValues(new Uint32Array(1))[0]/fr)}):Zn=Math.random;var fr;hr.exports=Zn});var Ve=se((dc,br)=>{var jt=dr(),mr=Xn(),go=pr(),pt=0,ti=4,Lt=36,gr=Math.pow(Lt,ti);function ei(){return mr((go()*gr<<0).toString(Lt),ti)}function yr(){return pt=pt<gr?pt:0,pt++,pt-1}function mt(){var i="c",n=new Date().getTime().toString(Lt),e=mr(yr().toString(Lt),ti),t=jt(),r=ei()+ei();return i+n+e+t+r}mt.slug=function(){var n=new Date().getTime().toString(36),e=yr().toString(36).slice(-4),t=jt().slice(0,1)+jt().slice(-1),r=ei().slice(-2);return n.slice(-2)+e+t+r};mt.isCuid=function(n){return typeof n!="string"?!1:!!n.startsWith("c")};mt.isSlug=function(n){if(typeof n!="string")return!1;var e=n.length;return e>=7&&e<=10};mt.fingerprint=jt;br.exports=mt});var Tr=se((Fr,Rr)=>{(function(i){var n;typeof Fr=="object"?Rr.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,f){if(!e[a]){if(!n[a]){var p=typeof require=="function"&&require;if(!f&&p)return p(a,!0);if(s)return s(a,!0);throw new Error("Cannot find module '"+a+"'")}f=e[a]={exports:{}},n[a][0].call(f.exports,function(m){var I=n[a][1][m];return r(I||m)},f,f.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,f,p,m,I){"use strict";var w=i("crypto");function P(b,S){S=D(b,S);var d;return(d=S.algorithm!=="passthrough"?w.createHash(S.algorithm):new B).write===void 0&&(d.write=d.update,d.end=d.update),E(S,d).dispatch(b),d.update||d.end(""),d.digest?d.digest(S.encoding==="buffer"?void 0:S.encoding):(b=d.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=w.getHashes?w.getHashes().slice():["sha1","md5"],_=(y.push("passthrough"),["buffer","hex","binary","base64"]);function D(b,S){var d={};if(d.algorithm=(S=S||{}).algorithm||"sha1",d.encoding=S.encoding||"hex",d.excludeValues=!!S.excludeValues,d.algorithm=d.algorithm.toLowerCase(),d.encoding=d.encoding.toLowerCase(),d.ignoreUnknown=S.ignoreUnknown===!0,d.respectType=S.respectType!==!1,d.respectFunctionNames=S.respectFunctionNames!==!1,d.respectFunctionProperties=S.respectFunctionProperties!==!1,d.unorderedArrays=S.unorderedArrays===!0,d.unorderedSets=S.unorderedSets!==!1,d.unorderedObjects=S.unorderedObjects!==!1,d.replacer=S.replacer||void 0,d.excludeKeys=S.excludeKeys||void 0,b===void 0)throw new Error("Object argument required.");for(var h=0;h<y.length;++h)y[h].toLowerCase()===d.algorithm.toLowerCase()&&(d.algorithm=y[h]);if(y.indexOf(d.algorithm)===-1)throw new Error('Algorithm "'+d.algorithm+'" not supported. supported values: '+y.join(", "));if(_.indexOf(d.encoding)===-1&&d.algorithm!=="passthrough")throw new Error('Encoding "'+d.encoding+'" not supported. supported values: '+_.join(", "));return d}function O(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 E(b,S,d){d=d||[];function h(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 v,x=Object.prototype.toString.call(l),j=/\[object (.*)\]/i.exec(x);if(j=(j=j?j[1]:"unknown:["+x+"]").toLowerCase(),0<=(x=d.indexOf(l)))return this.dispatch("[CIRCULAR:"+x+"]");if(d.push(l),s!==void 0&&s.isBuffer&&s.isBuffer(l))return h("buffer:"),h(l);if(j==="object"||j==="function"||j==="asyncfunction")return x=Object.keys(l),b.unorderedObjects&&(x=x.sort()),b.respectType===!1||O(l)||x.splice(0,0,"prototype","__proto__","constructor"),b.excludeKeys&&(x=x.filter(function(k){return!b.excludeKeys(k)})),h("object:"+x.length+":"),v=this,x.forEach(function(k){v.dispatch(k),h(":"),b.excludeValues||v.dispatch(l[k]),h(",")});if(!this["_"+j]){if(b.ignoreUnknown)return h("["+j+"]");throw new Error('Unknown object type "'+j+'"')}this["_"+j](l)},_array:function(l,k){k=k!==void 0?k:b.unorderedArrays!==!1;var x=this;if(h("array:"+l.length+":"),!k||l.length<=1)return l.forEach(function(L){return x.dispatch(L)});var j=[],k=l.map(function(L){var T=new B,q=d.slice();return E(b,T,q).dispatch(L),j=j.concat(q.slice(d.length)),T.read().toString()});return d=d.concat(j),k.sort(),this._array(k,!1)},_date:function(l){return h("date:"+l.toJSON())},_symbol:function(l){return h("symbol:"+l.toString())},_error:function(l){return h("error:"+l.toString())},_boolean:function(l){return h("bool:"+l.toString())},_string:function(l){h("string:"+l.length+":"),h(l.toString())},_function:function(l){h("fn:"),O(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 h("number:"+l.toString())},_xml:function(l){return h("xml:"+l.toString())},_null:function(){return h("Null")},_undefined:function(){return h("Undefined")},_regexp:function(l){return h("regex:"+l.toString())},_uint8array:function(l){return h("uint8array:"),this.dispatch(Array.prototype.slice.call(l))},_uint8clampedarray:function(l){return h("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(l))},_int8array:function(l){return h("int8array:"),this.dispatch(Array.prototype.slice.call(l))},_uint16array:function(l){return h("uint16array:"),this.dispatch(Array.prototype.slice.call(l))},_int16array:function(l){return h("int16array:"),this.dispatch(Array.prototype.slice.call(l))},_uint32array:function(l){return h("uint32array:"),this.dispatch(Array.prototype.slice.call(l))},_int32array:function(l){return h("int32array:"),this.dispatch(Array.prototype.slice.call(l))},_float32array:function(l){return h("float32array:"),this.dispatch(Array.prototype.slice.call(l))},_float64array:function(l){return h("float64array:"),this.dispatch(Array.prototype.slice.call(l))},_arraybuffer:function(l){return h("arraybuffer:"),this.dispatch(new Uint8Array(l))},_url:function(l){return h("url:"+l.toString())},_map:function(l){return h("map:"),l=Array.from(l),this._array(l,b.unorderedSets!==!1)},_set:function(l){return h("set:"),l=Array.from(l),this._array(l,b.unorderedSets!==!1)},_file:function(l){return h("file:"),this.dispatch([l.name,l.size,l.type,l.lastModfied])},_blob:function(){if(b.ignoreUnknown)return h("[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 h("domwindow")},_bigint:function(l){return h("bigint:"+l.toString())},_process:function(){return h("process")},_timer:function(){return h("timer")},_pipe:function(){return h("pipe")},_tcp:function(){return h("tcp")},_udp:function(){return h("udp")},_tty:function(){return h("tty")},_statwatcher:function(){return h("statwatcher")},_securecontext:function(){return h("securecontext")},_connection:function(){return h("connection")},_zlib:function(){return h("zlib")},_context:function(){return h("context")},_nodescript:function(){return h("nodescript")},_httpparser:function(){return h("httpparser")},_dataview:function(){return h("dataview")},_signal:function(){return h("signal")},_fsevent:function(){return h("fsevent")},_tlswrap:function(){return h("tlswrap")}}}function B(){return{buf:"",write:function(b){this.buf+=b},end:function(b){this.buf+=b},read:function(){return this.buf}}}e.writeToStream=function(b,S,d){return d===void 0&&(d=S,S={}),E(S=D(b,S),d).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,f,p,m,
|
|
5
|
-
list should be an Array.`),c.length===0)return new y(0);if(c.length===1)return c[0];if(typeof u!="number")for(C=u=0;C<c.length;C++)u+=c[C].length;for(var g=new y(u),A=0,C=0;C<c.length;C++){var R=c[C];R.copy(g,A),A+=R.length}return g},y.prototype.write=function(c,u,g,A){isFinite(u)?isFinite(g)||(A=g,g=void 0):(G=A,A=u,u=g,g=G),u=Number(u)||0;var C,R,U,Q,G=this.length-u;switch((!g||G<(g=Number(g)))&&(g=G),A=String(A||"utf8").toLowerCase()){case"hex":C=function(ge,ie,re,Y){re=Number(re)||0;var J=ge.length-re;(!Y||J<(Y=Number(Y)))&&(Y=J),F((J=ie.length)%2==0,"Invalid hex string"),J/2<Y&&(Y=J/2);for(var Ye=0;Ye<Y;Ye++){var sr=parseInt(ie.substr(2*Ye,2),16);F(!isNaN(sr),"Invalid hex string"),ge[re+Ye]=sr}return y._charsWritten=2*Ye,Ye}(this,c,u,g);break;case"utf8":case"utf-8":R=this,U=u,Q=g,C=y._charsWritten=Tt(Ee(c),R,U,Q);break;case"ascii":case"binary":C=I(this,c,u,g);break;case"base64":R=this,U=u,Q=g,C=y._charsWritten=Tt(nr(c),R,U,Q);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":C=D(this,c,u,g);break;default:throw new Error("Unknown encoding")}return C},y.prototype.toString=function(c,u,g){var A,C,R,U,Q=this;if(c=String(c||"utf8").toLowerCase(),u=Number(u)||0,(g=g!==void 0?Number(g):Q.length)===u)return"";switch(c){case"hex":A=function(G,ge,ie){var re=G.length;(!ge||ge<0)&&(ge=0),(!ie||ie<0||re<ie)&&(ie=re);for(var Y="",J=ge;J<ie;J++)Y+=K(G[J]);return Y}(Q,u,g);break;case"utf8":case"utf-8":A=function(G,ge,ie){var re="",Y="";ie=Math.min(G.length,ie);for(var J=ge;J<ie;J++)G[J]<=127?(re+=ir(Y)+String.fromCharCode(G[J]),Y=""):Y+="%"+G[J].toString(16);return re+ir(Y)}(Q,u,g);break;case"ascii":case"binary":A=O(Q,u,g);break;case"base64":C=Q,U=g,A=(R=u)===0&&U===C.length?w.fromByteArray(C):w.fromByteArray(C.slice(R,U));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":A=function(G,ge,ie){for(var re=G.slice(ge,ie),Y="",J=0;J<re.length;J+=2)Y+=String.fromCharCode(re[J]+256*re[J+1]);return Y}(Q,u,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,u,g,A){if(u=u||0,(A=A||A===0?A:this.length)!==(g=g||0)&&c.length!==0&&this.length!==0){F(g<=A,"sourceEnd < sourceStart"),F(0<=u&&u<c.length,"targetStart out of bounds"),F(0<=g&&g<this.length,"sourceStart out of bounds"),F(0<=A&&A<=this.length,"sourceEnd out of bounds"),A>this.length&&(A=this.length);var C=(A=c.length-u<A-g?c.length-u+g:A)-g;if(C<100||!y._useTypedArrays)for(var R=0;R<C;R++)c[R+u]=this[R+g];else c._set(this.subarray(g,g+C),u)}},y.prototype.slice=function(c,u){var g=this.length;if(c=q(c,g,0),u=q(u,g,g),y._useTypedArrays)return y._augment(this.subarray(c,u));for(var A=u-c,C=new y(A,void 0,!0),R=0;R<A;R++)C[R]=this[R+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,u){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(c,u)},y.prototype.readUInt8=function(c,u){if(u||(F(c!=null,"missing offset"),F(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return this[c]},y.prototype.readUInt16LE=function(c,u){return E(this,c,!0,u)},y.prototype.readUInt16BE=function(c,u){return E(this,c,!1,u)},y.prototype.readUInt32LE=function(c,u){return B(this,c,!0,u)},y.prototype.readUInt32BE=function(c,u){return B(this,c,!1,u)},y.prototype.readInt8=function(c,u){if(u||(F(c!=null,"missing offset"),F(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,u){return b(this,c,!0,u)},y.prototype.readInt16BE=function(c,u){return b(this,c,!1,u)},y.prototype.readInt32LE=function(c,u){return S(this,c,!0,u)},y.prototype.readInt32BE=function(c,u){return S(this,c,!1,u)},y.prototype.readFloatLE=function(c,u){return d(this,c,!0,u)},y.prototype.readFloatBE=function(c,u){return d(this,c,!1,u)},y.prototype.readDoubleLE=function(c,u){return h(this,c,!0,u)},y.prototype.readDoubleBE=function(c,u){return h(this,c,!1,u)},y.prototype.writeUInt8=function(c,u,g){g||(F(c!=null,"missing value"),F(u!=null,"missing offset"),F(u<this.length,"trying to write beyond buffer length"),Jn(c,255)),u>=this.length||(this[u]=c)},y.prototype.writeUInt16LE=function(c,u,g){l(this,c,u,!0,g)},y.prototype.writeUInt16BE=function(c,u,g){l(this,c,u,!1,g)},y.prototype.writeUInt32LE=function(c,u,g){v(this,c,u,!0,g)},y.prototype.writeUInt32BE=function(c,u,g){v(this,c,u,!1,g)},y.prototype.writeInt8=function(c,u,g){g||(F(c!=null,"missing value"),F(u!=null,"missing offset"),F(u<this.length,"Trying to write beyond buffer length"),Gn(c,127,-128)),u>=this.length||(0<=c?this.writeUInt8(c,u,g):this.writeUInt8(255+c+1,u,g))},y.prototype.writeInt16LE=function(c,u,g){x(this,c,u,!0,g)},y.prototype.writeInt16BE=function(c,u,g){x(this,c,u,!1,g)},y.prototype.writeInt32LE=function(c,u,g){j(this,c,u,!0,g)},y.prototype.writeInt32BE=function(c,u,g){j(this,c,u,!1,g)},y.prototype.writeFloatLE=function(c,u,g){k(this,c,u,!0,g)},y.prototype.writeFloatBE=function(c,u,g){k(this,c,u,!1,g)},y.prototype.writeDoubleLE=function(c,u,g){L(this,c,u,!0,g)},y.prototype.writeDoubleBE=function(c,u,g){L(this,c,u,!1,g)},y.prototype.fill=function(c,u,g){if(u=u||0,g=g||this.length,F(typeof(c=typeof(c=c||0)=="string"?c.charCodeAt(0):c)=="number"&&!isNaN(c),"value is not a number"),F(u<=g,"end < start"),g!==u&&this.length!==0){F(0<=u&&u<this.length,"start out of bounds"),F(0<=g&&g<=this.length,"end out of bounds");for(var A=u;A<g;A++)this[A]=c}},y.prototype.inspect=function(){for(var c=[],u=this.length,g=0;g<u;g++)if(c[g]=K(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),u=0,g=c.length;u<g;u+=1)c[u]=this[u];return c.buffer};var T=y.prototype;function q(c,u,g){return typeof c!="number"?g:u<=(c=~~c)?u:0<=c||0<=(c+=u)?c:0}function te(c){return(c=~~Math.ceil(+c))<0?0:c}function H(c){return(Array.isArray||function(u){return Object.prototype.toString.call(u)==="[object Array]"})(c)}function K(c){return c<16?"0"+c.toString(16):c.toString(16)}function Ee(c){for(var u=[],g=0;g<c.length;g++){var A=c.charCodeAt(g);if(A<=127)u.push(c.charCodeAt(g));else for(var C=g,R=(55296<=A&&A<=57343&&g++,encodeURIComponent(c.slice(C,g+1)).substr(1).split("%")),U=0;U<R.length;U++)u.push(parseInt(R[U],16))}return u}function nr(c){return w.toByteArray(c)}function Tt(c,u,g,A){for(var C=0;C<A&&!(C+g>=u.length||C>=c.length);C++)u[C+g]=c[C];return C}function ir(c){try{return decodeURIComponent(c)}catch{return String.fromCharCode(65533)}}function Jn(c,u){F(typeof c=="number","cannot write a non-number as a number"),F(0<=c,"specified a negative value for writing an unsigned value"),F(c<=u,"value is larger than maximum value for type"),F(Math.floor(c)===c,"value has a fractional component")}function Gn(c,u,g){F(typeof c=="number","cannot write a non-number as a number"),F(c<=u,"value larger than maximum allowed value"),F(g<=c,"value smaller than minimum allowed value"),F(Math.floor(c)===c,"value has a fractional component")}function rr(c,u,g){F(typeof c=="number","cannot write a non-number as a number"),F(c<=u,"value larger than maximum allowed value"),F(g<=c,"value smaller than minimum allowed value")}function F(c,u){if(!c)throw new Error(u||"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,w,o,a,f,p,m,_){var w=i("buffer").Buffer,P=4,y=new w(P);y.fill(0),n.exports={hash:function(I,D,O,E){for(var B=D(function(l,v){l.length%P!=0&&(x=l.length+(P-l.length%P),l=w.concat([l,y],x));for(var x,j=[],k=v?l.readInt32BE:l.readInt32LE,L=0;L<l.length;L+=P)j.push(k.call(l,L));return j}(I=w.isBuffer(I)?I:new w(I),E),8*I.length),D=E,b=new w(O),S=D?b.writeInt32BE:b.writeInt32LE,d=0;d<B.length;d++)S.call(b,B[d],4*d,!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,w,o,a,f,p,m,_){var w=i("buffer").Buffer,P=i("./sha"),y=i("./sha256"),I=i("./rng"),D={sha1:P,sha256:y,md5:i("./md5")},O=64,E=new w(O);function B(l,v){var x=D[l=l||"sha1"],j=[];return x||b("algorithm:",l,"is not yet supported"),{update:function(k){return w.isBuffer(k)||(k=new w(k)),j.push(k),k.length,this},digest:function(k){var L=w.concat(j),L=v?function(T,q,te){w.isBuffer(q)||(q=new w(q)),w.isBuffer(te)||(te=new w(te)),q.length>O?q=T(q):q.length<O&&(q=w.concat([q,E],O));for(var H=new w(O),K=new w(O),Ee=0;Ee<O;Ee++)H[Ee]=54^q[Ee],K[Ee]=92^q[Ee];return te=T(w.concat([H,te])),T(w.concat([K,te]))}(x,v,L):x(L);return j=null,k?L.toString(k):L}}}function b(){var l=[].slice.call(arguments).join(" ");throw new Error([l,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
|
|
6
|
-
`))}E.fill(0),e.createHash=function(l){return B(l)},e.createHmac=B,e.randomBytes=function(l,v){if(!v||!v.call)return new w(I(l));try{v.call(this,void 0,new w(I(l)))}catch(x){v(x)}};var S,d=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],h=function(l){e[l]=function(){b("sorry,",l,"is not implemented yet")}};for(S in d)h(d[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,f,p,m,_){var w=i("./helpers");function P(b,S){b[S>>5]|=128<<S%32,b[14+(S+64>>>9<<4)]=S;for(var d=1732584193,h=-271733879,l=-1732584194,v=271733878,x=0;x<b.length;x+=16){var j=d,k=h,L=l,T=v,d=I(d,h,l,v,b[x+0],7,-680876936),v=I(v,d,h,l,b[x+1],12,-389564586),l=I(l,v,d,h,b[x+2],17,606105819),h=I(h,l,v,d,b[x+3],22,-1044525330);d=I(d,h,l,v,b[x+4],7,-176418897),v=I(v,d,h,l,b[x+5],12,1200080426),l=I(l,v,d,h,b[x+6],17,-1473231341),h=I(h,l,v,d,b[x+7],22,-45705983),d=I(d,h,l,v,b[x+8],7,1770035416),v=I(v,d,h,l,b[x+9],12,-1958414417),l=I(l,v,d,h,b[x+10],17,-42063),h=I(h,l,v,d,b[x+11],22,-1990404162),d=I(d,h,l,v,b[x+12],7,1804603682),v=I(v,d,h,l,b[x+13],12,-40341101),l=I(l,v,d,h,b[x+14],17,-1502002290),d=D(d,h=I(h,l,v,d,b[x+15],22,1236535329),l,v,b[x+1],5,-165796510),v=D(v,d,h,l,b[x+6],9,-1069501632),l=D(l,v,d,h,b[x+11],14,643717713),h=D(h,l,v,d,b[x+0],20,-373897302),d=D(d,h,l,v,b[x+5],5,-701558691),v=D(v,d,h,l,b[x+10],9,38016083),l=D(l,v,d,h,b[x+15],14,-660478335),h=D(h,l,v,d,b[x+4],20,-405537848),d=D(d,h,l,v,b[x+9],5,568446438),v=D(v,d,h,l,b[x+14],9,-1019803690),l=D(l,v,d,h,b[x+3],14,-187363961),h=D(h,l,v,d,b[x+8],20,1163531501),d=D(d,h,l,v,b[x+13],5,-1444681467),v=D(v,d,h,l,b[x+2],9,-51403784),l=D(l,v,d,h,b[x+7],14,1735328473),d=O(d,h=D(h,l,v,d,b[x+12],20,-1926607734),l,v,b[x+5],4,-378558),v=O(v,d,h,l,b[x+8],11,-2022574463),l=O(l,v,d,h,b[x+11],16,1839030562),h=O(h,l,v,d,b[x+14],23,-35309556),d=O(d,h,l,v,b[x+1],4,-1530992060),v=O(v,d,h,l,b[x+4],11,1272893353),l=O(l,v,d,h,b[x+7],16,-155497632),h=O(h,l,v,d,b[x+10],23,-1094730640),d=O(d,h,l,v,b[x+13],4,681279174),v=O(v,d,h,l,b[x+0],11,-358537222),l=O(l,v,d,h,b[x+3],16,-722521979),h=O(h,l,v,d,b[x+6],23,76029189),d=O(d,h,l,v,b[x+9],4,-640364487),v=O(v,d,h,l,b[x+12],11,-421815835),l=O(l,v,d,h,b[x+15],16,530742520),d=E(d,h=O(h,l,v,d,b[x+2],23,-995338651),l,v,b[x+0],6,-198630844),v=E(v,d,h,l,b[x+7],10,1126891415),l=E(l,v,d,h,b[x+14],15,-1416354905),h=E(h,l,v,d,b[x+5],21,-57434055),d=E(d,h,l,v,b[x+12],6,1700485571),v=E(v,d,h,l,b[x+3],10,-1894986606),l=E(l,v,d,h,b[x+10],15,-1051523),h=E(h,l,v,d,b[x+1],21,-2054922799),d=E(d,h,l,v,b[x+8],6,1873313359),v=E(v,d,h,l,b[x+15],10,-30611744),l=E(l,v,d,h,b[x+6],15,-1560198380),h=E(h,l,v,d,b[x+13],21,1309151649),d=E(d,h,l,v,b[x+4],6,-145523070),v=E(v,d,h,l,b[x+11],10,-1120210379),l=E(l,v,d,h,b[x+2],15,718787259),h=E(h,l,v,d,b[x+9],21,-343485551),d=B(d,j),h=B(h,k),l=B(l,L),v=B(v,T)}return Array(d,h,l,v)}function y(b,S,d,h,l,v){return B((S=B(B(S,b),B(h,v)))<<l|S>>>32-l,d)}function I(b,S,d,h,l,v,x){return y(S&d|~S&h,b,S,l,v,x)}function D(b,S,d,h,l,v,x){return y(S&h|d&~h,b,S,l,v,x)}function O(b,S,d,h,l,v,x){return y(S^d^h,b,S,l,v,x)}function E(b,S,d,h,l,v,x){return y(d^(S|~h),b,S,l,v,x)}function B(b,S){var d=(65535&b)+(65535&S);return(b>>16)+(S>>16)+(d>>16)<<16|65535&d}n.exports=function(b){return w.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,f,p,m,_){var w;n.exports=w||function(P){for(var y,I=new Array(P),D=0;D<P;D++)!(3&D)&&(y=4294967296*Math.random()),I[D]=y>>>((3&D)<<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,f,p,m,_){var w=i("./helpers");function P(D,O){D[O>>5]|=128<<24-O%32,D[15+(O+64>>9<<4)]=O;for(var E,B,b,S=Array(80),d=1732584193,h=-271733879,l=-1732584194,v=271733878,x=-1009589776,j=0;j<D.length;j+=16){for(var k=d,L=h,T=l,q=v,te=x,H=0;H<80;H++){S[H]=H<16?D[j+H]:I(S[H-3]^S[H-8]^S[H-14]^S[H-16],1);var K=y(y(I(d,5),(K=h,B=l,b=v,(E=H)<20?K&B|~K&b:!(E<40)&&E<60?K&B|K&b|B&b:K^B^b)),y(y(x,S[H]),(E=H)<20?1518500249:E<40?1859775393:E<60?-1894007588:-899497514)),x=v,v=l,l=I(h,30),h=d,d=K}d=y(d,k),h=y(h,L),l=y(l,T),v=y(v,q),x=y(x,te)}return Array(d,h,l,v,x)}function y(D,O){var E=(65535&D)+(65535&O);return(D>>16)+(O>>16)+(E>>16)<<16|65535&E}function I(D,O){return D<<O|D>>>32-O}n.exports=function(D){return w.hash(D,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,f,p,m,_){function w(O,E){var B=(65535&O)+(65535&E);return(O>>16)+(E>>16)+(B>>16)<<16|65535&B}function P(O,E){var B,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),d=new Array(64);O[E>>5]|=128<<24-E%32,O[15+(E+64>>9<<4)]=E;for(var h,l,v=0;v<O.length;v+=16){for(var x=S[0],j=S[1],k=S[2],L=S[3],T=S[4],q=S[5],te=S[6],H=S[7],K=0;K<64;K++)d[K]=K<16?O[K+v]:w(w(w((l=d[K-2],I(l,17)^I(l,19)^D(l,10)),d[K-7]),(l=d[K-15],I(l,7)^I(l,18)^D(l,3))),d[K-16]),B=w(w(w(w(H,I(l=T,6)^I(l,11)^I(l,25)),T&q^~T&te),b[K]),d[K]),h=w(I(h=x,2)^I(h,13)^I(h,22),x&j^x&k^j&k),H=te,te=q,q=T,T=w(L,B),L=k,k=j,j=x,x=w(B,h);S[0]=w(x,S[0]),S[1]=w(j,S[1]),S[2]=w(k,S[2]),S[3]=w(L,S[3]),S[4]=w(T,S[4]),S[5]=w(q,S[5]),S[6]=w(te,S[6]),S[7]=w(H,S[7])}return S}var y=i("./helpers"),I=function(O,E){return O>>>E|O<<32-E},D=function(O,E){return O>>>E};n.exports=function(O){return y.hash(O,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,f,p,m,_){e.read=function(w,P,y,I,v){var O,E,B=8*v-I-1,b=(1<<B)-1,S=b>>1,d=-7,h=y?v-1:0,l=y?-1:1,v=w[P+h];for(h+=l,O=v&(1<<-d)-1,v>>=-d,d+=B;0<d;O=256*O+w[P+h],h+=l,d-=8);for(E=O&(1<<-d)-1,O>>=-d,d+=I;0<d;E=256*E+w[P+h],h+=l,d-=8);if(O===0)O=1-S;else{if(O===b)return E?NaN:1/0*(v?-1:1);E+=Math.pow(2,I),O-=S}return(v?-1:1)*E*Math.pow(2,O-I)},e.write=function(w,P,y,I,D,x){var E,B,b=8*x-D-1,S=(1<<b)-1,d=S>>1,h=D===23?Math.pow(2,-24)-Math.pow(2,-77):0,l=I?0:x-1,v=I?1:-1,x=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(B=isNaN(P)?1:0,E=S):(E=Math.floor(Math.log(P)/Math.LN2),P*(I=Math.pow(2,-E))<1&&(E--,I*=2),2<=(P+=1<=E+d?h/I:h*Math.pow(2,1-d))*I&&(E++,I/=2),S<=E+d?(B=0,E=S):1<=E+d?(B=(P*I-1)*Math.pow(2,D),E+=d):(B=P*Math.pow(2,d-1)*Math.pow(2,D),E=0));8<=D;w[y+l]=255&B,l+=v,B/=256,D-=8);for(E=E<<D|B,b+=D;0<b;w[y+l]=255&E,l+=v,E/=256,b-=8);w[y+l-v]|=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,f,p,m,_){var w,P,y;function I(){}(t=n.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,y=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(D){return window.setImmediate(D)}:y?(w=[],window.addEventListener("message",function(D){var O=D.source;O!==window&&O!==null||D.data!=="process-tick"||(D.stopPropagation(),0<w.length&&w.shift()())},!0),function(D){w.push(D),window.postMessage("process-tick","*")}):function(D){setTimeout(D,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(D){throw new Error("process.binding is not supported")},t.cwd=function(){return"/"},t.chdir=function(D){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 Je={};or(Je,{__addDisposableResource:()=>Vs,__assign:()=>xn,__asyncDelegator:()=>Rs,__asyncGenerator:()=>Fs,__asyncValues:()=>Ts,__await:()=>lt,__awaiter:()=>_s,__classPrivateFieldGet:()=>Ls,__classPrivateFieldIn:()=>Us,__classPrivateFieldSet:()=>Ms,__createBinding:()=>On,__decorate:()=>Ss,__disposeResources:()=>Ns,__esDecorate:()=>Aa,__exportStar:()=>Ds,__extends:()=>ws,__generator:()=>Es,__importDefault:()=>js,__importStar:()=>ks,__makeTemplateObject:()=>Bs,__metadata:()=>Is,__param:()=>Os,__propKey:()=>Ra,__read:()=>ji,__rest:()=>xs,__runInitializers:()=>Fa,__setFunctionName:()=>Ta,__spread:()=>Ps,__spreadArray:()=>As,__spreadArrays:()=>Cs,__values:()=>Sn,default:()=>ja});function ws(i,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");ki(i,n);function e(){this.constructor=i}i.prototype=n===null?Object.create(n):(e.prototype=n.prototype,new e)}function xs(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 Ss(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 Os(i,n){return function(e,t){n(e,t,i)}}function Aa(i,n,e,t,r,s){function o(O){if(O!==void 0&&typeof O!="function")throw new TypeError("Function expected");return O}for(var a=t.kind,f=a==="getter"?"get":a==="setter"?"set":"value",p=!n&&i?t.static?i:i.prototype:null,m=n||(p?Object.getOwnPropertyDescriptor(p,t.name):{}),_,w=!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(O){if(w)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(O||null))};var D=(0,e[P])(a==="accessor"?{get:m.get,set:m.set}:m[f],y);if(a==="accessor"){if(D===void 0)continue;if(D===null||typeof D!="object")throw new TypeError("Object expected");(_=o(D.get))&&(m.get=_),(_=o(D.set))&&(m.set=_),(_=o(D.init))&&r.unshift(_)}else(_=o(D))&&(a==="field"?r.unshift(_):m[f]=_)}p&&Object.defineProperty(p,t.name,m),w=!0}function Fa(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 Ra(i){return typeof i=="symbol"?i:"".concat(i)}function Ta(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 Is(i,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,n)}function _s(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(m){try{p(t.next(m))}catch(_){o(_)}}function f(m){try{p(t.throw(m))}catch(_){o(_)}}function p(m){m.done?s(m.value):r(m.value).then(a,f)}p((t=t.apply(i,n||[])).next())})}function Es(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(m){return f([p,m])}}function f(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(m){p=[6,m],r=0}finally{t=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}}function Ds(i,n){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(n,e)&&On(n,i,e)}function Sn(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 ji(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 Ps(){for(var i=[],n=0;n<arguments.length;n++)i=i.concat(ji(arguments[n]));return i}function Cs(){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 As(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 lt(i){return this instanceof lt?(this.v=i,this):new lt(i)}function Fs(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(w){t[w]&&(r[w]=function(P){return new Promise(function(y,I){s.push([w,P,y,I])>1||a(w,P)})})}function a(w,P){try{f(t[w](P))}catch(y){_(s[0][3],y)}}function f(w){w.value instanceof lt?Promise.resolve(w.value.v).then(p,m):_(s[0][2],w)}function p(w){a("next",w)}function m(w){a("throw",w)}function _(w,P){w(P),s.shift(),s.length&&a(s[0][0],s[0][1])}}function Rs(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:lt(i[r](o)),done:!1}:s?s(o):o}:s}}function Ts(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 Sn=="function"?Sn(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,f){o=i[s](o),r(a,f,o.done,o.value)})}}function r(s,o,a,f){Promise.resolve(f).then(function(p){s({value:p,done:a})},o)}}function Bs(i,n){return Object.defineProperty?Object.defineProperty(i,"raw",{value:n}):i.raw=n,i}function ks(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)&&On(n,i,e);return Ba(n,i),n}function js(i){return i&&i.__esModule?i:{default:i}}function Ls(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 Ms(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 Us(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 Vs(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 Ns(i){function n(t){i.error=i.hasError?new ka(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 ki,xn,On,Ba,ka,ja,Ge=lo(()=>{ki=function(i,n){return ki=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])},ki(i,n)};xn=function(){return xn=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},xn.apply(this,arguments)};On=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]};Ba=Object.create?function(i,n){Object.defineProperty(i,"default",{enumerable:!0,value:n})}:function(i,n){i.default=n};ka=typeof SuppressedError=="function"?SuppressedError:function(i,n,e){var t=new Error(e);return t.name="SuppressedError",t.error=i,t.suppressed=n,t};ja={__extends:ws,__assign:xn,__rest:xs,__decorate:Ss,__param:Os,__metadata:Is,__awaiter:_s,__generator:Es,__createBinding:On,__exportStar:Ds,__values:Sn,__read:ji,__spread:Ps,__spreadArrays:Cs,__spreadArray:As,__await:lt,__asyncGenerator:Fs,__asyncDelegator:Rs,__asyncValues:Ts,__makeTemplateObject:Bs,__importStar:ks,__importDefault:js,__classPrivateFieldGet:Ls,__classPrivateFieldSet:Ms,__classPrivateFieldIn:Us,__addDisposableResource:Vs,__disposeResources:Ns}});var $s=se(zs=>{"use strict";Object.defineProperty(zs,"__esModule",{value:!0})});var Mi=se(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.invokeEventHandlersAsync=_e.invokeEventHandlers=_e.eventHandlerSafeInvokeAsync=_e.eventHandlerSafeInvoke=void 0;var Ks=(Ge(),Xe(Je));function qs(i,n,e){try{return i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}}_e.eventHandlerSafeInvoke=qs;function Li(i,n,e){return(0,Ks.__awaiter)(this,void 0,void 0,function*(){try{return yield i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}})}_e.eventHandlerSafeInvokeAsync=Li;function La(i,n,e,t){for(let r of i){let{succeeded:s,error:o}=qs(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}}_e.invokeEventHandlers=La;function Ma(i,n,e,t){return(0,Ks.__awaiter)(this,void 0,void 0,function*(){if(t?.parallelize===!1)for(let r of i){let{succeeded:s,error:o}=yield Li(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}else{let r=[];for(let s of i)r.push(Li(s,n,e).then(({succeeded:o,error:a})=>{if(!o&&t?.swallowExceptions!==!0)throw a}));yield Promise.all(r)}})}_e.invokeEventHandlersAsync=Ma});var Ws=se(In=>{"use strict";Object.defineProperty(In,"__esModule",{value:!0});In.TypedEvent=void 0;var Ua=(Ge(),Xe(Je)),Hs=Mi(),Qs={swallowExceptions:!1,parallelize:!0},Ui=class{constructor(){this._handlers=[]}attach(n){this._handlers.push(n)}detach(n){this.tryRemoveHandler(n)}invoke(n,e,t=Qs){(0,Hs.invokeEventHandlers)(this._handlers,n,e,t)}invokeAsync(n,e,t=Qs){return(0,Ua.__awaiter)(this,void 0,void 0,function*(){yield(0,Hs.invokeEventHandlersAsync)(this._handlers,n,e,t)})}tryRemoveHandler(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}};In.TypedEvent=Ui});var Ni=se(Vi=>{"use strict";Object.defineProperty(Vi,"__esModule",{value:!0});var Va=(Ge(),Xe(Je));(0,Va.__exportStar)(Ws(),Vi)});var Js=se(_n=>{"use strict";Object.defineProperty(_n,"__esModule",{value:!0});_n.FinalizationRegistryMissingError=void 0;var zi=class extends Error{};_n.FinalizationRegistryMissingError=zi});var Ki=se(En=>{"use strict";Object.defineProperty(En,"__esModule",{value:!0});En.WeakHandlerHolder=void 0;var Na=Js(),$i=class{constructor(n){this._refs=[];try{this._finalizationRegistry=new FinalizationRegistry(n)}catch(e){throw e.name==="FinalizationRegistry"?new Na.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)}};En.WeakHandlerHolder=$i});var Gs=se(Dn=>{"use strict";Object.defineProperty(Dn,"__esModule",{value:!0});Dn.WeakEvent=void 0;var qi=(Ge(),Xe(Je)),za=Ni(),$a=Ki(),Hi=Mi(),Ka={swallowExceptions:!1,parallelize:!0},Qi=class{constructor(){this._handlers=[],this._handlerFinalizedEvent=new za.TypedEvent,this.handlerFinalizedEvent=this._handlerFinalizedEvent,this._refHolder=new $a.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,Hi.eventHandlerSafeInvoke)(s,n,e);if(!o&&t?.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}}invokeAsync(n,e,t=Ka){return(0,qi.__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,qi.__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,Hi.eventHandlerSafeInvokeAsync)(s,n,e);if(!o&&t.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}})}parallelInvokeAsync(n,e,t){return(0,qi.__awaiter)(this,void 0,void 0,function*(){let r=[];for(let s of this._handlers){let o=s?.deref();o?r.push((0,Hi.eventHandlerSafeInvokeAsync)(o,n,e).then(({succeeded:a,error:f})=>{if(!a&&t.swallowExceptions!==!0)throw f})):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)}};Dn.WeakEvent=Qi});var Xs=se(Pn=>{"use strict";Object.defineProperty(Pn,"__esModule",{value:!0});var Ys=(Ge(),Xe(Je));(0,Ys.__exportStar)(Ki(),Pn);(0,Ys.__exportStar)(Gs(),Pn)});var Zs=se(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Wi=(Ge(),Xe(Je));(0,Wi.__exportStar)($s(),Ft);(0,Wi.__exportStar)(Ni(),Ft);(0,Wi.__exportStar)(Xs(),Ft)});var tr={};or(tr,{Client:()=>ht,ClientDescriptor:()=>Wn,Entity:()=>de,EntityFile:()=>xe,IdbPersistence:()=>ot,ServerSync:()=>ft,Storage:()=>ht,StorageDescriptor:()=>Wn,UndoHistory:()=>at,authorization:()=>rc,cliSync:()=>sc,createMigration:()=>wi,id:()=>ic,schema:()=>Et});var Sr=Te(Ne(),1),zt=4,yt=36;function vr(i){return i.toString(yt).padStart(zt,"0")}function yo(i){return i.toString().padStart(6,"0")}var Lt=class{constructor(){this.latest={time:Date.now(),counter:0,node:bo()},this.zeroCounter=0,this.now=n=>(this.latest=xr(this.latest),this.get(n,this.latest)),this.OLD_now=n=>(this.latest=xr(this.latest),yo(n)+wo(this.latest)),this.timerState=()=>this.latest,this.update=n=>{let e=n.slice(zt);this.latest=vo(this.latest,Or(e))},this.get=(n,e)=>vr(n)+wr(e),this.zero=n=>vr(n)+wr({time:0,counter:this.zeroCounter++,node:this.latest.node}),this.getWallClockTime=ri}},Mt=class extends Error{constructor(...n){super(),this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(n).join(" ")}},Ut=class extends Error{constructor(){super(),this.type="OverflowError",this.message="timestamp counter overflow"}},ti=4,ni=7,Vt=60*1e3,gt=9;function bo(){return Sr.default.slug().padStart(ni,"0").slice(0,ni)}function wr(i){let n=new Date(i.time).getTime().toString(yt).padStart(gt,"0"),e=i.counter.toString(yt).padStart(ti,"0"),t=i.node.padStart(ni,"0");return`${n}${e}${t}`}function xr(i){let n=Date.now(),e=Math.max(i.time,n),t=i.time===e?i.counter+1:0;if(e-n>Vt)throw new Mt(e,n,Vt);if(t>65535)throw new Ut;return{time:e,counter:t,node:i.node}}function vo(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>Vt)throw new Mt(t,e,Vt);if(s>65535)throw new Ut;return{time:t,counter:s,node:i.node}}function Or(i){let n=i.slice(0,gt),e=i.slice(gt,gt+ti),t=i.slice(gt+ti),r=parseInt(n,yt),s=parseInt(e,yt);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:t}}function wo(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 Nt(i){return parseInt(i.slice(0,zt),36)}function ii(i,n){return Nt(i)-Nt(n)}function ri(i){return Or(i.slice(zt)).time}var $t,xo=new Uint8Array(16);function si(){if(!$t&&($t=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!$t))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $t(xo)}var Ir=/^(?:[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 So(i){return typeof i=="string"&&Ir.test(i)}var _r=So;var ee=[];for(Kt=0;Kt<256;++Kt)ee.push((Kt+256).toString(16).substr(1));var Kt;function Oo(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(ee[i[n+0]]+ee[i[n+1]]+ee[i[n+2]]+ee[i[n+3]]+"-"+ee[i[n+4]]+ee[i[n+5]]+"-"+ee[i[n+6]]+ee[i[n+7]]+"-"+ee[i[n+8]]+ee[i[n+9]]+"-"+ee[i[n+10]]+ee[i[n+11]]+ee[i[n+12]]+ee[i[n+13]]+ee[i[n+14]]+ee[i[n+15]]).toLowerCase();if(!_r(e))throw TypeError("Stringified UUID is invalid");return e}var Er=Oo;function Io(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 Er(t)}var bt=Io;function W(i){return Se(i)||ye(i)}function Ze(i,n){return i===n?!0:!(!W(i)||!W(n)||i["@@type"]!==n["@@type"]||i.id!==n.id)}var _o="/",vt=":",ai=new WeakMap;function oe(i){let n=fe(i);return M(!!n,`Object ${JSON.stringify(i)} does not have an OID assigned to it`),n}function fe(i){if(V(i))return ai.get(i)}function $(i,n){return M(V(i),`Only objects can be assigned OIDs, received ${JSON.stringify(i)}`),ci(i)&&Qt(i),ai.set(i,n),i}function ci(i){return!!fe(i)}function Qt(i){return ai.delete(i),i}function li(i,n,e){if(ci(i))return oe(i);{let t=be(n,e);return $(i,t),t}}function Dr(i,n,e){if(ci(i)){let t=oe(i);if(De(t,n))return oe(i);{let r=be(n,e);return $(i,r),r}}else{let t=be(n,e);return $(i,t),t}}var oi={".":"˙","/":"&slash;",":":":"};function Pr(i){return i.replace(/[/]/g,oi["/"]).replace(/[:]/g,oi[":"]).replace(/[.]/g,oi["."])}function Cr(i){return i.replace(/&slash;/g,"/").replace(/:/g,":").replace(/˙/g,".")}function X(i,n,e){let t=Pr(i)+_o+Pr(n);return e&&(t+=vt+e),t}function be(i,n=Eo){let{collection:e,id:t}=ae(i);return X(e,t,n())}function ae(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(vt),o;return r.includes(".")?o=r.slice(0,r.indexOf(".")):o=r,{collection:Cr(n),id:Cr(o),subId:s}}function et(i,n){let e=oe(i);if(Array.isArray(i)){let t;for(let r=0;r<i.length;r++)t=i[r],V(t)&&!W(t)&&(Dr(t,e,n),et(t,n))}else if(V(i)&&!W(i))for(let t of Object.keys(i))V(i[t])&&!W(i[t])&&(Dr(i[t],e,n),et(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 Eo(){return bt().slice(0,8)}function ce(i){return{"@@type":"ref",id:i}}function Ht(i,n=new Map){if(Array.isArray(i)){let e=oe(i),t=$([],e);for(let r=0;r<i.length;r++){let s=i[r];if(V(s)){if(Se(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(ye(s)){t[r]=s;continue}else{let o=oe(s);t[r]=ce(o),Ht(s,n)}}else t[r]=s}n.set(e,t)}else if(V(i)&&!W(i)){let e=oe(i),t=$({},e);for(let r of Object.keys(i)){let s=i[r];if(V(s)){if(Se(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(ye(s))t[r]=s;else{let o=oe(s);t[r]=ce(o),Ht(s,n)}}else t[r]=s}n.set(e,t)}else W(i);return n}function z(i){return i.split(".")[0].split(vt)[0]}function Ar(i){let n=z(i),e=be(n,()=>"\uFFFF");return[`${n}${vt}`,e]}function De(i,n){return z(i)===z(n)}function Wt(i){return!i.includes(vt)}var Br=Te(Tr(),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 di(i){return JSON.stringify(i,Do)}function le(i,n=!0){if(!n&&typeof structuredClone=="function")return structuredClone(i);if(V(i)||Array.isArray(i)){let e=fe(i),t;if(Array.isArray(i))t=i.map(r=>le(r,n));else{t={};for(let[r,s]of Object.entries(i))t[r]=le(s,n)}return n&&e&&$(t,e),t}return i}function ze(i){return(0,Br.default)(i)}function V(i){return i&&typeof i=="object"}function kr(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 M(i,n="assertion failed"){if(!i)throw new Error(n)}function wt(i=16){return bt().replace("-","").slice(0,i)}function jr(i,n){for(let e=i.length-1;e>=0;e--)if(n(i[e]))return e;return-1}function Lr(i,n){let e;return function(...t){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,t),n)}}function Mr(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 Ur(){}function ye(i){return i&&i["@@type"]==="file"}function xt(i){return{"@@type":"file",id:i}}function tt(i){return typeof File<"u"&&i instanceof File||typeof Blob<"u"&&i instanceof Blob}function Jt(i){return i&&V(i)&&typeof i.id=="string"&&typeof i.remote=="boolean"&&typeof i.name=="string"&&typeof i.type=="string"}var nt="__@@oid_do_not_use",Pe="@@id";function Po(i){if(V(i))return i[Pe]||i[nt]}function Co(i){return V(i)&&(delete i[nt],delete i[Pe]),i}function Ao(i){let n=Po(i);n&&$(i,n)}function St(i){if(Ao(i),Co(i),Array.isArray(i))for(let n=0;n<i.length;n++)St(i[n]);else if(V(i))for(let n of Object.keys(i))St(i[n])}function Fo(i){let{collection:n,id:e,subId:t}=ae(i);return X(n,e,t)}var Ro=/"\w+\/[^"]+?(\.[^"]+)+\:[\S]+?"/g;function To(i){return i.replaceAll(Ro,n=>{let e=n.slice(1,n.length-1);return`"${Fo(e)}"`})}function ui(i){return JSON.parse(To(JSON.stringify(i)))}function Vr(i){let n=z(i);return[`${n}.`,`${n}.\uFFFF`]}function fi(i){return i===Pe||i===nt}function Se(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function hi(i){return V(i)&&!W(i)}function Bo(i,n){return i===n?!0:W(i)&&W(n)?Ze(i,n):!1}function Ot(i,n,e,t,r=[],s){let o=s?.authz,a=oe(i);function f(p,m,_,w){if(!hi(m))Bo(m,_)||(w?r.push(ke({oid:a,timestamp:e(),data:{op:"list-set",index:p,value:m}},o)):r.push(ke({oid:a,timestamp:e(),data:{op:"set",name:p,value:m}},o)));else{let P=fe(_),y=fe(m);y&&!De(a,y)?(m=le(m,!1),y=be(a,t),$(m,y)):s?.mergeUnknownObjects?!y&&P?($(m,P),y=P):y=li(m,a,t):y=li(m,a,t),M(!!y,"Error: no value OID was resolved during diff. This is a bug in Verdant."),M(De(a,y),`Error: value OID ${y} is not related to parent OID ${a}. This is a bug in Verdant.`),_===void 0||y!==P?($e(m,y,e,t,r),r.push(ke({oid:a,timestamp:e(),data:{op:"set",name:p,value:ce(y)}},o)),P!==void 0&&r.push(ke({oid:P,timestamp:e(),data:{op:"delete"}},o))):Ot(_,m,e,t,r,s)}}if(Array.isArray(i)&&Array.isArray(n)){for(let m=0;m<n.length;m++){let _=n[m],w=i[m];f(m,_,w,!0)}let p=i.length-n.length;if(p>0){for(let m=n.length;m<i.length;m++){let _=i[m],w=fe(_);w&&r.push(ke({oid:w,timestamp:e(),data:{op:"delete"}},o))}r.push(ke({oid:a,timestamp:e(),data:{op:"list-delete",index:n.length,count:p}},o))}}else{if(Array.isArray(i)||Array.isArray(n))throw new Error("Cannot diff an array with an object");if(hi(i)&&hi(n)){let p=new Set(Object.keys(i));for(let[m,_]of Object.entries(n)){if(_===void 0&&s?.defaultUndefined||(p.delete(m),fi(m)))continue;let w=i[m];f(m,_,w,!1)}if(!s?.defaultUndefined)for(let m of p)fi(m)||r.push(ke({oid:a,timestamp:e(),data:{op:"remove",name:m}},o))}}return r}function $e(i,n,e,t,r=[],s){$(i,n),et(i,t);let o=Ht(i);for(let a of o.keys()){let f=o.get(a),p={oid:a,timestamp:e(),data:{op:"initialize",value:Qt(f)}};r.push(ke(p,s?.authz))}return r}function ke(i,n){return n&&(i.authz=n),i}function It(i){let n={};for(let e of i)e.oid in n?n[e.oid].push(e):n[e.oid]=[e];return n}function zr(i){let n={};for(let e of i){let t=z(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function $r(i){let n={};for(let e of i){let t=z(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Be(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: ${fe(i)})`),!1)}function je(i,n,e){if(i==null&&n.op!=="initialize")return i;let t=i,r,s;function o(a){e&&W(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":Be(i)&&(o(i[n.index]),i[n.index]=n.value);break;case"list-push":Be(i)&&i.push(n.value);break;case"list-delete":Be(i)&&(o(i[n.index]),i.splice(n.index,n.count));break;case"list-move-by-index":Be(i)&&(s=i.splice(n.from,1),i.splice(n.to,0,s[0]));break;case"list-remove":if(Be(i))do{let a=n.value;n.only==="last"?Se(a)?r=jr(i,f=>f.id===a.id):r=i.lastIndexOf(a):Se(a)?r=i.findIndex(f=>f.id===a.id):r=i.indexOf(a),r!==-1&&(o(i[r]),i.splice(r,1))}while(!n.only&&r!==-1);break;case"list-add":Be(i)&&(i.some(f=>Se(f)&&Se(n.value)?f.id===n.value.id:f===n.value)||i.push(n.value));break;case"list-move-by-ref":Be(i)&&(r=i.findIndex(a=>Ze(a,n.value)),s=i.splice(r,1),i.splice(n.index,0,s[0]));break;case"list-insert":if(Be(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 le(n.value);case"touch":return i;default:throw new Error(`Unsupported patch operation: ${n.op}`)}return i}function Gt(i,n,e=[]){if(Array.isArray(i))for(let t=0;t<i.length;t++){let r=i[t];i[t]=Nr(r,n,e),V(i[t])&&Gt(i[t],n,e)}else if(!ye(i)){if(V(i)){M(fe(i),`Object ${JSON.stringify(i)} must have an oid`);for(let t of Object.keys(i))i[t]=Nr(i[t],n,e),V(i[t])&&Gt(i[t],n,e)}}return e}function Nr(i,n,e){if(Se(i)){e.push(i.id);let t=n.get(i.id);return M(!!t,`No value was found in object map for ${i.id}`),$(t,i.id)}else return i}function Kr(i){return i.data.op==="set"?i.data.name:!1}function qr(i,n){return n.has(!0)?!0:i.data.op==="set"||i.data.op==="remove"?n.has(i.data.name):!1}function Yt(i){return{oid:i.oid,timestamp:i.timestamp,data:i.data,authz:i.authz}}var Le;(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"})(Le||(Le={}));var Hr=Te(Ne(),1),ko=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 jo(i){let{properties:n,fields:e}=i,t=ko(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 Lo(i,n){return i.properties=n,i}function Mo(i){return Object.assign({type:"array"},i)}function Uo(i,n){return i.items=n,i}var Vo=i=>Object.assign({type:"string"},i),No=i=>Object.assign({type:"number"},i),zo=i=>Object.assign({type:"boolean"},i),$o=i=>Object.assign({type:"any"},i);function Ko(i){return Object.assign({type:"map"},i)}function qo(i,n){return i.values=n,i}var Ho=i=>Object.assign({type:"file"},i),Qo=()=>({type:"string",default:Hr.default}),Qr={object:jo,array:Mo,replaceObjectFields:Lo,replaceArrayItems:Uo,string:Vo,number:No,boolean:zo,any:$o,map:Ko,replaceMapValues:qo,file:Ho,id:Qo};var Xr=Te(Ne(),1);function Xt(i){return i.equals!==void 0}function Zt(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function Wr(i){return!!i.match}function en(i){return i.startsWith!==void 0}function mi(i){return!Zt(i)&&!Xt(i)&&!Wr(i)&&!en(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 pi(s.type);if("field"in s){let a=i.fields[s.field];return a?pi(a.type):!1}}let o=i.fields[n];return o?pi(o.type):!1}function pi(i){return i==="array"||i.endsWith("[]")}function ve(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Ce(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.default!==void 0:!1}function yi(i){if(!(!i||!Ce(i)))return i.type==="file"?ve(i)?null:void 0:i.type==="map"?{}:i.type==="array"?ve(i)?null:[]:i.type==="object"?ve(i)?null:void 0:typeof i.default=="function"?i.default():i.default}function qe(i,n){for(let[e,t]of Object.entries(i.fields)){let r=bi(t);(r!==void 0&&n[e]===void 0||!ve(t)&&n[e]===null)&&(n[e]=r),n[e]&&Ke(n[e],t)}return n}function Ke(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=bi(t);r!==void 0&&(i[e]=r)}Ke(i[e],t)}else if(n.type==="array")for(let e of i)Ke(e,n.items);else if(n.type==="map")for(let[e,t]of Object.entries(i))e===Pe||e===nt||Ke(t,n.values)}function bi(i){if(i.type==="string"||i.type==="number"||i.type==="boolean"||i.type==="any"){if(i.default&&typeof i.default=="function")return i.default();if(i.default!==void 0)return JSON.parse(JSON.stringify(i.default))}if(i.type==="array")return[];if(i.type==="map")return{};if(i.type!=="any"&&i.nullable)return null;if(i.type==="object"&&i.default){let n=typeof i.default=="function"?i.default():JSON.parse(JSON.stringify(i.default));for(let[e,t]of Object.entries(i.properties))n[e]===void 0&&(n[e]=bi(t));return n}}function Jr(i,n){for(let[e,t]of Object.entries(n))e===Pe||e===nt||(i.fields[e]?gi(t,i.fields[e]):delete n[e]);return n}function gi(i,n){if(V(i)&&n.type==="object")for(let[e,t]of Object.entries(i))n.properties[e]?gi(t,n.properties[e]):delete i[e];else if(Array.isArray(i)&&n.type==="array")for(let e of i)gi(e,n.items)}function Gr(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=Ae({field:i[e],value:t,fieldPath:[e]});if(r)return r}}}function Ae({field:i,value:n,fieldPath:e=[],depth:t,requireDefaults:r}){if(!(t!==void 0&&t<=0)&&!(ve(i)&&n===null)){if(n===null&&(r||!Ce(i)))return{type:"no-default",fieldPath:e,message:`Invalid null value for field ${Oe(e)}`};if(i.type==="object"){if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected object ${i.nullable?"or null ":""}for field ${Oe(e)}, got ${n}`};for(let[s,o]of Object.entries(i.properties))s!==Pe&&n[s]&&Ae({field:o,value:n[s],fieldPath:[...e,s],depth:t!==void 0?t-1:void 0});for(let s of Object.keys(n))if(!i.properties[s])return{type:"invalid-key",fieldPath:[...e,s],message:`Invalid unexpected field "${s}" on value ${Oe(e)}`}}else if(i.type==="array"){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 ${Oe(e)}, got ${n}`};for(let s of n)Ae({field:i.items,value:s,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0})}else if(i.type==="map"){if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected map for field ${Oe(e)}, got ${n}`};for(let[s,o]of Object.entries(n))Ae({field:i.values,value:o,fieldPath:[...e,s],depth:t!==void 0?t-1:void 0})}else if(i.type==="string"){if(typeof n!="string")return{type:"invalid-type",fieldPath:e,message:`Expected string ${i.nullable?"or null ":""}for field ${Oe(e)}, got ${n}`};if(i.options&&!i.options.includes(n))return{type:"invalid-value",fieldPath:e,message:`Expected one of ${i.options.join(", ")} for field ${Oe(e)}, got ${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 ${Oe(e)}, got ${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 ${Oe(e)}, got ${n}`}}else if(i.type==="file"&&!tt(n)&&!Jt(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ${i.nullable?"or null ":""}for field ${Oe(e)}, got ${n}`}}}function Oe(i){return i.length===0?"root":i.join(".")}function Yr(i,n){let e={};for(let[t,r]of Object.entries(n))i[t]&&(e[t]=tn({field:i[t],value:r,fieldPath:[t]}));return e}function tn({field:i,value:n,fieldPath:e=[],depth:t}){let r=Ae({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]=tn({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=>tn({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]=tn({field:i.values,value:a,fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else return n}}function Me(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 Wo=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 Jo(i){var{synthetics:n,indexes:e}=i,t=Wo(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 Et(i){return i}Et.collection=Jo;Et.fields=Qr;Et.generated={id:Xr.default};var nn="\uFFFFFE",Go="\0",Yo="\uFFFFFF";function he(...i){let n=Xo(i);return n.length===1?n[0]:n}function Fe(...i){return i.join(nn)+`${Yo}`}function Ie(...i){return i.join(nn)+`${nn}${Go}`}function Xo(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(nn))))}function Zr(i){return!!i.field}function Zo(i,n){let e={};for(let[t,r]of Object.entries(i.indexes||{})){let s=r;Zr(s)?e[t]=we(n[s.field]):e[t]=we(s.compute(n))}return e}function ea(i,n){return Object.entries(i.compounds||{}).reduce((e,[t,r])=>(e[t]=he(...r.of.map(s=>n[s])),e),{})}function ta(i,n){return Object.entries(i.fields).reduce((e,[t,r])=>("indexed"in r&&(e[t]=we(n[t])),e),{})}function vi(i,n){let e=Object.assign(Object.assign({[i.primaryKey]:n[i.primaryKey]},ta(i,n)),Zo(i,n));return Object.assign(e,ea(i,Object.assign(Object.assign({},n),e))),e}var na="null";function we(i){if(i===null)return na;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(we);throw new Error(`Unsupported index value: ${i}`)}var ia={version:0,collections:{}};function es(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),M(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 wi(i,n,e){let t=typeof n=="function"||n===void 0,r=t?ia:i,s=t?i:n,o=t?n:e;M(r,"Invalid arguments to createMigration"),M(s,"Invalid arguments to createMigration");let{changedCollections:a,addedCollections:f,removedCollections:p,addedIndexes:m,removedIndexes:_,autoMigratedCollections:w,autoMigration:P}=ra(r,s);return{version:s.version,migrate:async y=>{let I=[];if(await o?.({migrate:async(O,E)=>{let B=P(O),b=async S=>{let d=await E(S);$(d,oe(S));let h=B(d),l=Gr(s.collections[O].fields,h);return h};await y.migrate(O,b),I.push(O),w.delete(O)},info:{changedCollections:a,addedCollections:f,removedCollections:p},queries:y.queries,mutations:y.mutations}),s.version>1){y.log("debug","auto-migrating collections with new defaults",w);for(let E of w)await y.migrate(E,P(E)),I.push(E);for(let E of p)await y.deleteCollection(E);let O=a.filter(E=>!I.includes(E));O.length>0&&console.error(`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,O)}},removedCollections:p,addedIndexes:m,removedIndexes:_,allCollections:Object.keys(s.collections),changedCollections:a,addedCollections:f,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function ra(i,n){let e=Object.keys(n.collections).filter(m=>i.collections[m]&&di(i.collections[m])!==di(n.collections[m])),t=Object.keys(i.collections).filter(m=>!n.collections[m]),r=Object.keys(n.collections).filter(m=>!i.collections[m]),s=new Set;for(let m of e){let _=i.collections[m].fields,w=n.collections[m].fields;Object.keys(w).some(P=>!Ce(_[P])&&Ce(w[P]))&&s.add(m),Object.keys(_).some(P=>!w[P])&&s.add(m)}let o={},a={};for(let m of[...e,...r]){let _=es(i.collections[m]),w=es(n.collections[m]),P=w.filter(I=>!_.find(D=>D.name===I.name)),y=_.filter(I=>!w.find(D=>D.name===I.name));P.length>0&&(o[m]=P,e.includes(m)&&s.add(m)),y.length>0&&(a[m]=y,e.includes(m)&&s.add(m))}return{changedCollections:e,addedCollections:r,removedCollections:t,addedIndexes:o,removedIndexes:a,autoMigratedCollections:s,withDefaults:(m,_)=>qe(n.collections[m],_),autoMigration:m=>_=>{let w=n.collections[m];return qe(w,Jr(w,_))}}}var xi={};var rn=class{constructor(n,e){this.getNow=n,this.createSubId=e,this.isPrimitive=t=>!V(t)||W(t),this.createDiff=(t,r,s={})=>Ot(t,r,this.getNow,this.createSubId,[],s),this.createInitialize=(t,r,s)=>$e(t,r,this.getNow,this.createSubId,void 0,s?{authz:s}:void 0),this.createSet=(t,r,s)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:r,value:s}}];{let o=be(t,this.createSubId);return[...$e(s,o,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"set",value:ce(o),name:r}}]}},this.createRemove=(t,r)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:r}}],this.createListSet=(t,r,s)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:s}}];{let o=be(t,this.createSubId);return[...$e(s,o,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:ce(o)}}]}},this.createListPush=(t,r)=>{if(this.isPrimitive(r))return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:r}}];{let s=be(t,this.createSubId);return[...$e(r,s,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:ce(s)}}]}},this.createListAdd=(t,r)=>this.isPrimitive(r)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:r}}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:ce(r)}}],this.createListInsert=(t,r,s)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:s,index:r}}];{let o=be(t,this.createSubId);return[...$e(s,o,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:ce(o),index:r}}]}},this.createListRemove=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:r,only:s}}],this.createListDelete=(t,r,s=1)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:r,count:s}}],this.createListMoveByRef=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:r,index:s}}],this.createListMoveByIndex=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:r,to:s}}],this.createDelete=t=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"}}],this.createDeleteAll=(t,r)=>t.map(s=>({oid:s,timestamp:this.getNow(),data:{op:"delete"},authz:r}))}};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}};function ts(i,n,e,t){if(n==null)return[{oid:i,timestamp:t(),data:{op:"delete"}}];let r=le(n),s=[];for(let o of e){let a=sa(i,r,o,t);s.unshift(...a),je(r,o.data)}return s}function sa(i,n,e,t){let r=e.data;switch(r.op){case"set":case"remove":return[{oid:i,timestamp:t(),data:{op:"set",name:r.name,value:n[r.name]}}];case"list-insert":return[{oid:i,timestamp:t(),data:{op:"list-delete",index:r.index,count:1}}];case"list-delete":return[{oid:i,timestamp:t(),data:{op:"list-insert",index:r.index,values:n.slice(r.index,r.count)}}];case"list-move-by-ref":return[{oid:i,timestamp:t(),data:{op:"list-move-by-ref",value:r.value,index:n.indexOf(r.value)}}];case"list-move-by-index":return[{oid:i,timestamp:t(),data:{op:"list-move-by-index",from:r.to,to:r.from}}];case"delete":return[{oid:i,timestamp:t(),data:{op:"initialize",value:n}}];case"list-push":return[{oid:i,timestamp:t(),data:{op:"list-remove",value:r.value,only:"last"}}];case"list-remove":if(r.only==="last"){let s=n.lastIndexOf(r.value);return[{oid:i,timestamp:t(),data:{op:"list-insert",index:s,values:[r.value]}}]}else if(r.only==="first"){let s=n.indexOf(r.value);return[{oid:i,timestamp:t(),data:{op:"list-insert",index:s,values:[r.value]}}]}else{let s=[],o=n.indexOf(r.value);for(;o!==-1;)s.push(o),o=n.indexOf(r.value,o+1);return s.map(a=>({oid:i,timestamp:t(),data:{op:"list-insert",index:a,value:r.value}}))}case"list-add":return[{oid:i,timestamp:t(),data:{op:"list-remove",value:r.value,only:"last"}}];case"list-set":return[{oid:i,timestamp:t(),data:{op:"list-set",index:r.index,value:n[r.index]}}];case"initialize":return[{oid:i,timestamp:t(),data:{op:"delete"}}];case"touch":return[];default:throw new Error(`Cannot undo operation type: ${r.op}`)}}var it=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:f,timeout:p,userData:m})=>{this.items.push(...a),f!==void 0&&(this.max=f),p!==void 0&&(this.timeout=p),m&&(this.userData=m);let _=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():_&&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}};function ns(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 Dt;(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"})(Dt||(Dt={}));var Z=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}};Z.Code=Dt;function is(i){return typeof i=="object"&&"code"in i&&typeof i.code=="number"}function oa(i){return typeof Buffer<"u"?Buffer.from(i).toString("base64"):btoa(i)}function aa(i){return typeof Buffer<"u"?Buffer.from(i,"base64").toString():atob(i)}var He={onlyUser:i=>oa(`u:${i}:*`),onlyMe:()=>He.onlyUser(Oi),decode:i=>{let e=aa(i).split(":");if(e.length!==3)throw new Error("Invalid authz string");return{scope:e[0],subject:e[1],action:e[2]}}},Oi="$$_originator_$$";function rs(i,n){let{operations:e,baselines:t}=i;if(e)for(let r of e)r.authz&&He.decode(r.authz).subject===Oi&&(r.authz=He.onlyUser(n));if(t)for(let r of t)r.authz&&He.decode(r.authz).subject===Oi&&(r.authz=He.onlyUser(n))}var Re=class{constructor(){this.consumed=!1;this.handlers=[];this.reset=()=>{this.consumed=!1}}register(n){this.handlers.push(n)}async shutdown(){this.consumed&&console.warn("ShutdownHandler already consumed"),this.consumed=!0,await Promise.all(this.handlers.map(n=>n())),this.handlers.length=0}get isShuttingDown(){return this.consumed}};var sn=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 on=class{constructor(n){this.value=n}deref(){return this.value}};var ne=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 Ii=typeof window<"u"?window.indexedDB:void 0;function Qe(i){return i instanceof Error&&i.name==="AbortError"}function rt(i){return new Promise((n,e)=>{i.onsuccess=()=>{n(i.result)},i.onerror=()=>{i.error&&Qe(i.error)?n(i.result):e(i.error)}})}function We(i,n){return new Promise((e,t)=>{let r=i.transaction([n],"readonly"),o=r.objectStore(n).openCursor(),a=0,f=0;o.onsuccess=function(p){let m=o.result;m&&(a++,f=f+kr(m.value),m.continue())},o.onerror=function(p){o.error&&Qe(o.error)?e({count:a,size:f}):t(o.error)},r.oncomplete=function(p){e({count:a,size:f})},r.onabort=function(p){t(p)},r.onerror=function(p){t(p)}})}function _i(i,n){let e=i.transaction(n,"readonly"),t=n.map(r=>{let s=e.objectStore(r);return rt(s.getAll())});return Promise.all(t)}async function pe(i){i.close(),await new Promise(n=>{n()}),await new Promise(n=>{n()})}async function an(i,n=Ii){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 rt(n.deleteDatabase(i))}async function ca(i=window.indexedDB){return i.databases()}function ss(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 Ei(i,n,e,t=window.indexedDB){(await ca(t)).some(a=>a.name===n)&&(await cn(n,t),e.log("debug","Deleted existing database",n));let s=await new Promise((a,f)=>{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 m=i,_=p.transaction;if(!_)throw new Error("No transaction");for(let w of Array.from(m.objectStoreNames)){let P=m.transaction(w).objectStore(w);_.db.createObjectStore(w,{keyPath:P.keyPath,autoIncrement:P.autoIncrement});let y=_.objectStore(w),I=m.transaction(w).objectStore(w);for(let D of Array.from(I.indexNames)){let O=I.index(D);e.log("debug","Copying index",D),y.createIndex(D,O.keyPath,{unique:O.unique,multiEntry:O.multiEntry})}}},p.onsuccess=()=>{e.log("debug","Opened reset database",n),a(p.result)},p.onerror=()=>f(p.error??new Error("Unknown database upgrade error"))}),o=await _i(i,Array.from(i.objectStoreNames));await new Promise((a,f)=>{let p=s.transaction(Array.from(s.objectStoreNames),"readwrite");for(let m=0;m<o.length;m++){let _=p.objectStore(i.objectStoreNames[m]);for(let w of o[m])_.add(w)}p.oncomplete=()=>a(),p.onerror=m=>{let _=p.error??m.target.transaction?.error??new Error("Unknown error");e.log("critical","Error copying data",_),f(_)}}),await pe(s)}function os(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 Pt(i){return[i,"meta"].join("_")}function st(i){return[i,"collections"].join("_")}function as(i){return i.name?.split("_")[0]}var Ue=class extends ne{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=ss(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 rt(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(rt))};this.iterate=async(e,t,r,s)=>{let a=(s?.transaction||this.createTransaction([e],s)).objectStore(e),f=t(a);return Array.isArray(f)?Promise.all(f.map(p=>new Promise((m,_)=>{p.onsuccess=()=>{let w=p.result;w?r(w.value,a,w)?m():w.continue():m()},p.onerror=()=>{p.error&&Qe(p.error)?m():_(p.error)}}))).then(()=>{}):new Promise((p,m)=>{f.onsuccess=()=>{let _=f.result;_?r(_.value,a,_)?p():_.continue():p()},f.onerror=()=>{f.error&&Qe(f.error)?p():m(f.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 ln=class extends Ue{constructor(){super(...arguments);this.add=async e=>{let t=e.file?await da(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 _i(this.db,["files"]);return t.map(this.hydrateFileData)};this.stats=async()=>({size:await We(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?la(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 la(i,n,e){return new File([new Blob([i],{type:n})],e??"blob",{type:n})}function da(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 dn=class extends Ue{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=z(e),[a,f]=Ar(e),[p,m]=Vr(e);return[s.openCursor(IDBKeyRange.only(o)),s.openCursor(IDBKeyRange.bound(a,f,!1,!1)),s.openCursor(IDBKeyRange.bound(p,m,!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=Di)=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),t)};this.deleteBaseline=async(e,t=Di)=>{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=Ie(e),f=r?.to?he(e,r.to):Fe(e),p=IDBKeyRange.bound(a,f,!1,!1);return o.openCursor(p)},t,r);this.iterateEntityOperations=(e,t,r)=>this.iterate("operations",s=>{let o=Ie(e),a=r?.to?he(e,r.to):Fe(e),f=IDBKeyRange.bound(o,a,!1,!1);return s.openCursor(f)},t,r);this.deleteEntityOperations=(e,t)=>this.iterate("operations",r=>{let s=Ie(e),o=t?.to?he(e,t.to):Fe(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?he(!0,t.after):Ie(!0),o=Fe(!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?Ie(t.from):void 0,o=t?.before?Fe(t.before):Ie(!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=Di)=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(z(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 We(this.db,"operations"),t=await We(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:he(e.oid,e.timestamp),l_t:he(e.isLocal,e.timestamp),d_t:he(z(e.oid),e.timestamp)});this.addDispose(()=>(this.ctx.log("info","Closing metadata DB for",this.ctx.namespace),pe(e)))}},Di={mode:"readwrite"};var cs=[fa,ha,pa,ma,ga,ya],ua=cs.length;function Pi({indexedDB:i=window.indexedDB,namespace:n,log:e}){return new Promise((t,r)=>{let s=i.open(Pt(n),ua),o=!1;s.onupgradeneeded=async a=>{let f=s.result,p=s.transaction,m=cs.slice(a.oldVersion);for(let _ of m)await _(f,p);await new Promise((_,w)=>{p.addEventListener("complete",_),p.addEventListener("error",w)}),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 fa(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 ha(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:f,...p}=o.value;o.update({...p,l_t:a,d_t:f}),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 pa(i,n){n.objectStore("operations").createIndex("timestamp","timestamp")}async function ma(i,n){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function ga(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 f=ui(a.value);f.oid_timestamp!==a.primaryKey?(a.delete(),e.put(f)):a.update(f),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 f=ui(a.value);f.oid!==a.primaryKey?(a.delete(),t.put(f)):a.update(f),a.continue()}else r()},o.onerror=a=>{s(o.error)}})}async function ya(i,n){n.objectStore("files").createIndex("timestamp","timestamp")}var ba=i=>IDBKeyRange.only(we(i.equals)),va=i=>{},wa=i=>{let n=i.gte||i.gt,e=i.lte||i.lt;return n===e?IDBKeyRange.only(we(n)):n?e?IDBKeyRange.bound(we(n),we(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(we(n),!!i.gt):IDBKeyRange.upperBound(we(e),!!i.lt)},xa=(i,n,e)=>{let t=i.collections[n].compounds[e.where];M(t,`Index ${e.where} does not exist on collection ${n}`);let r=Object.keys(e.match).sort((f,p)=>t.of.indexOf(f)-t.of.indexOf(p));for(let f of r)if(t.of.indexOf(f)!==r.indexOf(f))throw new Error(`Compound index ${e.where} does not have ${f} at the start of its order`);let s=r.map(f=>e.match[f]);if(r.length===t.of.length)return IDBKeyRange.only(he(...s));let o=Ie(...s),a=Fe(...s);return IDBKeyRange.bound(o,a)};function Sa(i){let n=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(n,e)}function Ci(i,n,e){if(e)return Zt(e)?wa(e):Xt(e)?ba(e):mi(e)?va(e):en(e)?Sa(e):xa(i,n,e)}var un=class extends Ue{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 We(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=Ci(this.ctx.schema,e.collection,e.index);return s.openCursor(a,o)},{mode:"readonly"});return t?X(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),f=t?.where?a.index(t.where):a,p=t?.order==="desc"?"prev":"next",m=Ci(this.ctx.schema,e,t),_=f.openCursor(m,p),w=!1;return{result:await new Promise((y,I)=>{let D=!r,O=0,E=new Set;_.onsuccess=()=>{O++;let B=_.result;if(!B){y(Array.from(E));return}r&&!D?(B.advance(r),D=!0):((!s||E.size<s)&&E.add(X(e,B.primaryKey.toString())),s&&O>s?(w=!0,y(Array.from(E))):B.continue())},_.onerror=()=>{_.error?.name==="InvalidStateError"?(this.ctx.log("error","find query failed with InvalidStateError",_.error),y([])):_.error&&Qe(_.error)?y([]):I(_.error)}}),hasNextPage:w}};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 f=a.getSnapshot();try{await this.saveDocument(a.oid,f,r)}catch(p){throw this.ctx.log("error",`Error saving document ${a.oid} (${JSON.stringify(f)})`,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}=ae(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],f=vi(a,t);f["@@@snapshot"]=JSON.stringify(t),await this.run(s,p=>p.put(f),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Save complete for ${e}`,f)}}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),pe(this.db)))}};async function ls(i,n,e,t,r){r?.("debug","Upgrading database",n,"to version",e);function s(o,a){let f=i.open(st(n),e),p=!1;f.onupgradeneeded=m=>{let _=f.transaction;t(_,f.result,m),p=!0},f.onsuccess=async m=>{p?(await pe(f.result),o(f.result)):a(new Error("Database was not upgraded when a version change was expected"))},f.onerror=m=>{a(f.error||new Error("Unknown error"))},f.onblocked=m=>{r?.("Database upgrade blocked!")}}return new Promise(s)}async function Ai({indexedDB:i=Ii,namespace:n,version:e,log:t}){t?.("debug","Opening database",n,"at version",e);let r=await os(st(n),e,i);return r.addEventListener("versionchange",s=>{r.close()}),r.addEventListener("close",()=>{t?.("warn","Database closed",n)}),r}var ot=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(as).filter(e=>!!e)))};this.getNamespaceVersion=async n=>{let e=st(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(Pt(n),this.indexedDB),cn([n,"collections"].join("_"),this.indexedDB)])};this.openNamespace=async n=>new Fi(this.indexedDB,n);this.copyNamespace=async(n,e,t)=>{let r={...t,namespace:n},s={...t,namespace:e},{db:o}=await Pi({indexedDB:this.indexedDB,log:r.log,namespace:r.namespace}),a=await Ai({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 Ei(o,Pt(s.namespace),s,this.indexedDB),await Ei(a,st(s.namespace),s,this.indexedDB),await pe(o),await pe(a)}}},Fi=class{constructor(n,e){this.indexedDB=n;this.namespace=e;this.openMetadata=async n=>{let{db:e}=await Pi({indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return this.metadataDb=e,n.persistenceShutdownHandler.register(()=>pe(e)),new dn(e,n)};this.openDocuments=async n=>{let e=await Ai({version:n.schema.version,indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return n.persistenceShutdownHandler.register(()=>pe(e)),new un(e,n)};this.applyMigration=async(n,e)=>{n.log("debug","Applying migration",e.newSchema.version,e),await ls(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 ln(this.metadataDb,n))}};function ds(i,n){return`@@wip-${i}-${ze(n)}`}function us({currentVersion:i,targetVersion:n,migrations:e}){let t=fs({currentVersion:i,targetVersion:n,migrations:e});if(!t)throw new Z(Z.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 fs({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=fs({currentVersion:r.newSchema.version,targetVersion:n,migrations:e});if(s)return[r,...s]}return null}function hs({migration:i,newOids:n,ctx:e}){return i.allCollections.reduce((t,r)=>(t[r]={put:async(s,o)=>{qe(i.newSchema.collections[r],s);let a=s[i.newSchema.collections[r].primaryKey],f=X(r,a);return n.push(f),await e.time.withMigrationTime(i.version,()=>e.meta.insertData({operations:e.patchCreator.createInitialize(s,f,o?.access),isLocal:!0})),s},delete:async s=>{let o=X(r,s);await e.time.withMigrationTime(i.version,()=>e.meta.deleteDocument(o))}},t),{})}function Oa({migration:i,context:n,documents:e}){return i.oldCollections.reduce((t,r)=>(t[r]={get:async s=>{let o=X(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(f=>n.meta.getDocumentSnapshot(f,{to:n.time.nowWithVersion(i.oldSchema.version)})))}},t),{})}async function ps({migration:i,context:n,ns:e}){let t={...n,schema:i.oldSchema};if(i.oldSchema.version===0)return Ia({migration:i,context:t});let r=new Array,s=await e.openDocuments(t),o=Oa({migration:i,context:t,documents:s}),a=hs({migration:i,newOids:r,ctx:t}),f=async _=>{await n.meta.deleteCollection(_)},p=new Array;return{log:n.log,newOids:r,deleteCollection:f,migrate:async(_,w)=>{let P=await o[_].findAll();n.log("debug",`Migrating ${P.length} documents in ${_}`),await Promise.all(P.filter(Boolean).map(async y=>{let I=oe(y);M(!!I,`Document is missing an OID: ${JSON.stringify(y)}`);let D=await n.meta.getDocumentAuthz(I),O=le(y),E=await w(y);if(E){St(O),St(E),et(E);let B=Ot(O,E,()=>n.time.zeroWithVersion(i.version),void 0,[],{mergeUnknownObjects:!0,authz:D});B.length>0&&await n.meta.insertData({operations:B,isLocal:!0})}}))},queries:o,mutations:a,awaitables:p,close:async()=>{await s.close()}}}function Ia({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=hs({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 ms({ctx:i,documents:n,migration:e,engine:t}){let r=await _a({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=>ae(p).collection===s),...r.filter(p=>ae(p).collection===s));let f=(await Promise.all(o.map(async p=>{try{let m=await i.meta.getDocumentSnapshot(p);return[p,m]}catch(m){return i.log("error","Could not regenerate snapshot during migration for oid",p,"this document will not be preserved",m),null}}))).filter(p=>!!p);await n.saveEntities(f.map(([p,m])=>({oid:p,getSnapshot(){return m}})),{collections:[s]})}}async function _a({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=>z(r.oid))))}async function gs({context:i,version:n}){let e=await i.persistence.openNamespace(i.namespace,i);await Ea(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=us({currentVersion:t,targetVersion:n,migrations:i.migrations});r.length>0&&(i.log("debug","Migrations to run:",r.map(s=>s.version)),await Da({context:i,ns:e,toRun:r}))})}async function Ea(i,n){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,n):await n()}async function Da({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 Re},s=await ps({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 ms({ctx:r,migration:t,engine:s,documents:o}),await o.close(),r.log("debug",`Migration of ${r.namespace} complete.`),r.log("info",`
|
|
4
|
+
`)},_domwindow:function(){return h("domwindow")},_bigint:function(l){return h("bigint:"+l.toString())},_process:function(){return h("process")},_timer:function(){return h("timer")},_pipe:function(){return h("pipe")},_tcp:function(){return h("tcp")},_udp:function(){return h("udp")},_tty:function(){return h("tty")},_statwatcher:function(){return h("statwatcher")},_securecontext:function(){return h("securecontext")},_connection:function(){return h("connection")},_zlib:function(){return h("zlib")},_context:function(){return h("context")},_nodescript:function(){return h("nodescript")},_httpparser:function(){return h("httpparser")},_dataview:function(){return h("dataview")},_signal:function(){return h("signal")},_fsevent:function(){return h("fsevent")},_tlswrap:function(){return h("tlswrap")}}}function B(){return{buf:"",write:function(b){this.buf+=b},end:function(b){this.buf+=b},read:function(){return this.buf}}}e.writeToStream=function(b,S,d){return d===void 0&&(d=S,S={}),E(S=D(b,S),d).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,f,p,m,I){(function(w){"use strict";var P=typeof Uint8Array<"u"?Uint8Array:Array,y="+".charCodeAt(0),_="/".charCodeAt(0),D="0".charCodeAt(0),O="a".charCodeAt(0),E="A".charCodeAt(0),B="-".charCodeAt(0),b="_".charCodeAt(0);function S(d){return d=d.charCodeAt(0),d===y||d===B?62:d===_||d===b?63:d<D?-1:d<D+10?d-D+26+26:d<E+26?d-E:d<O+26?d-O+26:void 0}w.toByteArray=function(d){var h,l;if(0<d.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var v=d.length,v=d.charAt(v-2)==="="?2:d.charAt(v-1)==="="?1:0,x=new P(3*d.length/4-v),j=0<v?d.length-4:d.length,k=0;function L(T){x[k++]=T}for(h=0;h<j;h+=4,0)L((16711680&(l=S(d.charAt(h))<<18|S(d.charAt(h+1))<<12|S(d.charAt(h+2))<<6|S(d.charAt(h+3))))>>16),L((65280&l)>>8),L(255&l);return v==2?L(255&(l=S(d.charAt(h))<<2|S(d.charAt(h+1))>>4)):v==1&&(L((l=S(d.charAt(h))<<10|S(d.charAt(h+1))<<4|S(d.charAt(h+2))>>2)>>8&255),L(255&l)),x},w.fromByteArray=function(d){var h,l,v,x,j=d.length%3,k="";function L(T){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(T)}for(h=0,v=d.length-j;h<v;h+=3)l=(d[h]<<16)+(d[h+1]<<8)+d[h+2],k+=L((x=l)>>18&63)+L(x>>12&63)+L(x>>6&63)+L(63&x);switch(j){case 1:k=(k+=L((l=d[d.length-1])>>2))+L(l<<4&63)+"==";break;case 2:k=(k=(k+=L((l=(d[d.length-2]<<8)+d[d.length-1])>>10))+L(l>>4&63))+L(l<<2&63)+"="}return k}})(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,f,p,m,I){var w=i("base64-js"),P=i("ieee754");function y(c,u,g){if(!(this instanceof y))return new y(c,u,g);var A,C,R,U,Q=typeof c;if(u==="base64"&&Q=="string")for(c=(U=c).trim?U.trim():U.replace(/^\s+|\s+$/g,"");c.length%4!=0;)c+="=";if(Q=="number")A=te(c);else if(Q=="string")A=y.byteLength(c,u);else{if(Q!="object")throw new Error("First argument needs to be a number, array or string.");A=te(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(H(U=c)||y.isBuffer(U)||U&&typeof U=="object"&&typeof U.length=="number")for(R=0;R<A;R++)y.isBuffer(c)?C[R]=c.readUInt8(R):C[R]=c[R];else if(Q=="string")C.write(c,0,u);else if(Q=="number"&&!y._useTypedArrays&&!g)for(R=0;R<A;R++)C[R]=0;return C}function _(c,u,g,A){return y._charsWritten=Bt(function(C){for(var R=[],U=0;U<C.length;U++)R.push(255&C.charCodeAt(U));return R}(u),c,g,A)}function D(c,u,g,A){return y._charsWritten=Bt(function(C){for(var R,U,Q=[],G=0;G<C.length;G++)U=C.charCodeAt(G),R=U>>8,U=U%256,Q.push(U),Q.push(R);return Q}(u),c,g,A)}function O(c,u,g){var A="";g=Math.min(c.length,g);for(var C=u;C<g;C++)A+=String.fromCharCode(c[C]);return A}function E(c,u,g,R){R||(F(typeof g=="boolean","missing or invalid endian"),F(u!=null,"missing offset"),F(u+1<c.length,"Trying to read beyond buffer length"));var C,R=c.length;if(!(R<=u))return g?(C=c[u],u+1<R&&(C|=c[u+1]<<8)):(C=c[u]<<8,u+1<R&&(C|=c[u+1])),C}function B(c,u,g,R){R||(F(typeof g=="boolean","missing or invalid endian"),F(u!=null,"missing offset"),F(u+3<c.length,"Trying to read beyond buffer length"));var C,R=c.length;if(!(R<=u))return g?(u+2<R&&(C=c[u+2]<<16),u+1<R&&(C|=c[u+1]<<8),C|=c[u],u+3<R&&(C+=c[u+3]<<24>>>0)):(u+1<R&&(C=c[u+1]<<16),u+2<R&&(C|=c[u+2]<<8),u+3<R&&(C|=c[u+3]),C+=c[u]<<24>>>0),C}function b(c,u,g,A){if(A||(F(typeof g=="boolean","missing or invalid endian"),F(u!=null,"missing offset"),F(u+1<c.length,"Trying to read beyond buffer length")),!(c.length<=u))return A=E(c,u,g,!0),32768&A?-1*(65535-A+1):A}function S(c,u,g,A){if(A||(F(typeof g=="boolean","missing or invalid endian"),F(u!=null,"missing offset"),F(u+3<c.length,"Trying to read beyond buffer length")),!(c.length<=u))return A=B(c,u,g,!0),2147483648&A?-1*(4294967295-A+1):A}function d(c,u,g,A){return A||(F(typeof g=="boolean","missing or invalid endian"),F(u+3<c.length,"Trying to read beyond buffer length")),P.read(c,u,g,23,4)}function h(c,u,g,A){return A||(F(typeof g=="boolean","missing or invalid endian"),F(u+7<c.length,"Trying to read beyond buffer length")),P.read(c,u,g,52,8)}function l(c,u,g,A,C){if(C||(F(u!=null,"missing value"),F(typeof A=="boolean","missing or invalid endian"),F(g!=null,"missing offset"),F(g+1<c.length,"trying to write beyond buffer length"),Gn(u,65535)),C=c.length,!(C<=g))for(var R=0,U=Math.min(C-g,2);R<U;R++)c[g+R]=(u&255<<8*(A?R:1-R))>>>8*(A?R:1-R)}function v(c,u,g,A,C){if(C||(F(u!=null,"missing value"),F(typeof A=="boolean","missing or invalid endian"),F(g!=null,"missing offset"),F(g+3<c.length,"trying to write beyond buffer length"),Gn(u,4294967295)),C=c.length,!(C<=g))for(var R=0,U=Math.min(C-g,4);R<U;R++)c[g+R]=u>>>8*(A?R:3-R)&255}function x(c,u,g,A,C){C||(F(u!=null,"missing value"),F(typeof A=="boolean","missing or invalid endian"),F(g!=null,"missing offset"),F(g+1<c.length,"Trying to write beyond buffer length"),Yn(u,32767,-32768)),c.length<=g||l(c,0<=u?u:65535+u+1,g,A,C)}function j(c,u,g,A,C){C||(F(u!=null,"missing value"),F(typeof A=="boolean","missing or invalid endian"),F(g!=null,"missing offset"),F(g+3<c.length,"Trying to write beyond buffer length"),Yn(u,2147483647,-2147483648)),c.length<=g||v(c,0<=u?u:4294967295+u+1,g,A,C)}function k(c,u,g,A,C){C||(F(u!=null,"missing value"),F(typeof A=="boolean","missing or invalid endian"),F(g!=null,"missing offset"),F(g+3<c.length,"Trying to write beyond buffer length"),rr(u,34028234663852886e22,-34028234663852886e22)),c.length<=g||P.write(c,u,g,A,23,4)}function L(c,u,g,A,C){C||(F(u!=null,"missing value"),F(typeof A=="boolean","missing or invalid endian"),F(g!=null,"missing offset"),F(g+7<c.length,"Trying to write beyond buffer length"),rr(u,17976931348623157e292,-17976931348623157e292)),c.length<=g||P.write(c,u,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),u=new Uint8Array(c);return u.foo=function(){return 42},u.foo()===42&&typeof u.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,u){var g;switch(c+="",u||"utf8"){case"hex":g=c.length/2;break;case"utf8":case"utf-8":g=_e(c).length;break;case"ascii":case"binary":case"raw":g=c.length;break;case"base64":g=nr(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,u){if(F(H(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 u!="number")for(C=u=0;C<c.length;C++)u+=c[C].length;for(var g=new y(u),A=0,C=0;C<c.length;C++){var R=c[C];R.copy(g,A),A+=R.length}return g},y.prototype.write=function(c,u,g,A){isFinite(u)?isFinite(g)||(A=g,g=void 0):(G=A,A=u,u=g,g=G),u=Number(u)||0;var C,R,U,Q,G=this.length-u;switch((!g||G<(g=Number(g)))&&(g=G),A=String(A||"utf8").toLowerCase()){case"hex":C=function(ge,ie,re,Y){re=Number(re)||0;var J=ge.length-re;(!Y||J<(Y=Number(Y)))&&(Y=J),F((J=ie.length)%2==0,"Invalid hex string"),J/2<Y&&(Y=J/2);for(var Ge=0;Ge<Y;Ge++){var sr=parseInt(ie.substr(2*Ge,2),16);F(!isNaN(sr),"Invalid hex string"),ge[re+Ge]=sr}return y._charsWritten=2*Ge,Ge}(this,c,u,g);break;case"utf8":case"utf-8":R=this,U=u,Q=g,C=y._charsWritten=Bt(_e(c),R,U,Q);break;case"ascii":case"binary":C=_(this,c,u,g);break;case"base64":R=this,U=u,Q=g,C=y._charsWritten=Bt(nr(c),R,U,Q);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":C=D(this,c,u,g);break;default:throw new Error("Unknown encoding")}return C},y.prototype.toString=function(c,u,g){var A,C,R,U,Q=this;if(c=String(c||"utf8").toLowerCase(),u=Number(u)||0,(g=g!==void 0?Number(g):Q.length)===u)return"";switch(c){case"hex":A=function(G,ge,ie){var re=G.length;(!ge||ge<0)&&(ge=0),(!ie||ie<0||re<ie)&&(ie=re);for(var Y="",J=ge;J<ie;J++)Y+=K(G[J]);return Y}(Q,u,g);break;case"utf8":case"utf-8":A=function(G,ge,ie){var re="",Y="";ie=Math.min(G.length,ie);for(var J=ge;J<ie;J++)G[J]<=127?(re+=ir(Y)+String.fromCharCode(G[J]),Y=""):Y+="%"+G[J].toString(16);return re+ir(Y)}(Q,u,g);break;case"ascii":case"binary":A=O(Q,u,g);break;case"base64":C=Q,U=g,A=(R=u)===0&&U===C.length?w.fromByteArray(C):w.fromByteArray(C.slice(R,U));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":A=function(G,ge,ie){for(var re=G.slice(ge,ie),Y="",J=0;J<re.length;J+=2)Y+=String.fromCharCode(re[J]+256*re[J+1]);return Y}(Q,u,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,u,g,A){if(u=u||0,(A=A||A===0?A:this.length)!==(g=g||0)&&c.length!==0&&this.length!==0){F(g<=A,"sourceEnd < sourceStart"),F(0<=u&&u<c.length,"targetStart out of bounds"),F(0<=g&&g<this.length,"sourceStart out of bounds"),F(0<=A&&A<=this.length,"sourceEnd out of bounds"),A>this.length&&(A=this.length);var C=(A=c.length-u<A-g?c.length-u+g:A)-g;if(C<100||!y._useTypedArrays)for(var R=0;R<C;R++)c[R+u]=this[R+g];else c._set(this.subarray(g,g+C),u)}},y.prototype.slice=function(c,u){var g=this.length;if(c=q(c,g,0),u=q(u,g,g),y._useTypedArrays)return y._augment(this.subarray(c,u));for(var A=u-c,C=new y(A,void 0,!0),R=0;R<A;R++)C[R]=this[R+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,u){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(c,u)},y.prototype.readUInt8=function(c,u){if(u||(F(c!=null,"missing offset"),F(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return this[c]},y.prototype.readUInt16LE=function(c,u){return E(this,c,!0,u)},y.prototype.readUInt16BE=function(c,u){return E(this,c,!1,u)},y.prototype.readUInt32LE=function(c,u){return B(this,c,!0,u)},y.prototype.readUInt32BE=function(c,u){return B(this,c,!1,u)},y.prototype.readInt8=function(c,u){if(u||(F(c!=null,"missing offset"),F(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,u){return b(this,c,!0,u)},y.prototype.readInt16BE=function(c,u){return b(this,c,!1,u)},y.prototype.readInt32LE=function(c,u){return S(this,c,!0,u)},y.prototype.readInt32BE=function(c,u){return S(this,c,!1,u)},y.prototype.readFloatLE=function(c,u){return d(this,c,!0,u)},y.prototype.readFloatBE=function(c,u){return d(this,c,!1,u)},y.prototype.readDoubleLE=function(c,u){return h(this,c,!0,u)},y.prototype.readDoubleBE=function(c,u){return h(this,c,!1,u)},y.prototype.writeUInt8=function(c,u,g){g||(F(c!=null,"missing value"),F(u!=null,"missing offset"),F(u<this.length,"trying to write beyond buffer length"),Gn(c,255)),u>=this.length||(this[u]=c)},y.prototype.writeUInt16LE=function(c,u,g){l(this,c,u,!0,g)},y.prototype.writeUInt16BE=function(c,u,g){l(this,c,u,!1,g)},y.prototype.writeUInt32LE=function(c,u,g){v(this,c,u,!0,g)},y.prototype.writeUInt32BE=function(c,u,g){v(this,c,u,!1,g)},y.prototype.writeInt8=function(c,u,g){g||(F(c!=null,"missing value"),F(u!=null,"missing offset"),F(u<this.length,"Trying to write beyond buffer length"),Yn(c,127,-128)),u>=this.length||(0<=c?this.writeUInt8(c,u,g):this.writeUInt8(255+c+1,u,g))},y.prototype.writeInt16LE=function(c,u,g){x(this,c,u,!0,g)},y.prototype.writeInt16BE=function(c,u,g){x(this,c,u,!1,g)},y.prototype.writeInt32LE=function(c,u,g){j(this,c,u,!0,g)},y.prototype.writeInt32BE=function(c,u,g){j(this,c,u,!1,g)},y.prototype.writeFloatLE=function(c,u,g){k(this,c,u,!0,g)},y.prototype.writeFloatBE=function(c,u,g){k(this,c,u,!1,g)},y.prototype.writeDoubleLE=function(c,u,g){L(this,c,u,!0,g)},y.prototype.writeDoubleBE=function(c,u,g){L(this,c,u,!1,g)},y.prototype.fill=function(c,u,g){if(u=u||0,g=g||this.length,F(typeof(c=typeof(c=c||0)=="string"?c.charCodeAt(0):c)=="number"&&!isNaN(c),"value is not a number"),F(u<=g,"end < start"),g!==u&&this.length!==0){F(0<=u&&u<this.length,"start out of bounds"),F(0<=g&&g<=this.length,"end out of bounds");for(var A=u;A<g;A++)this[A]=c}},y.prototype.inspect=function(){for(var c=[],u=this.length,g=0;g<u;g++)if(c[g]=K(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),u=0,g=c.length;u<g;u+=1)c[u]=this[u];return c.buffer};var T=y.prototype;function q(c,u,g){return typeof c!="number"?g:u<=(c=~~c)?u:0<=c||0<=(c+=u)?c:0}function te(c){return(c=~~Math.ceil(+c))<0?0:c}function H(c){return(Array.isArray||function(u){return Object.prototype.toString.call(u)==="[object Array]"})(c)}function K(c){return c<16?"0"+c.toString(16):c.toString(16)}function _e(c){for(var u=[],g=0;g<c.length;g++){var A=c.charCodeAt(g);if(A<=127)u.push(c.charCodeAt(g));else for(var C=g,R=(55296<=A&&A<=57343&&g++,encodeURIComponent(c.slice(C,g+1)).substr(1).split("%")),U=0;U<R.length;U++)u.push(parseInt(R[U],16))}return u}function nr(c){return w.toByteArray(c)}function Bt(c,u,g,A){for(var C=0;C<A&&!(C+g>=u.length||C>=c.length);C++)u[C+g]=c[C];return C}function ir(c){try{return decodeURIComponent(c)}catch{return String.fromCharCode(65533)}}function Gn(c,u){F(typeof c=="number","cannot write a non-number as a number"),F(0<=c,"specified a negative value for writing an unsigned value"),F(c<=u,"value is larger than maximum value for type"),F(Math.floor(c)===c,"value has a fractional component")}function Yn(c,u,g){F(typeof c=="number","cannot write a non-number as a number"),F(c<=u,"value larger than maximum allowed value"),F(g<=c,"value smaller than minimum allowed value"),F(Math.floor(c)===c,"value has a fractional component")}function rr(c,u,g){F(typeof c=="number","cannot write a non-number as a number"),F(c<=u,"value larger than maximum allowed value"),F(g<=c,"value smaller than minimum allowed value")}function F(c,u){if(!c)throw new Error(u||"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,w,o,a,f,p,m,I){var w=i("buffer").Buffer,P=4,y=new w(P);y.fill(0),n.exports={hash:function(_,D,O,E){for(var B=D(function(l,v){l.length%P!=0&&(x=l.length+(P-l.length%P),l=w.concat([l,y],x));for(var x,j=[],k=v?l.readInt32BE:l.readInt32LE,L=0;L<l.length;L+=P)j.push(k.call(l,L));return j}(_=w.isBuffer(_)?_:new w(_),E),8*_.length),D=E,b=new w(O),S=D?b.writeInt32BE:b.writeInt32LE,d=0;d<B.length;d++)S.call(b,B[d],4*d,!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,w,o,a,f,p,m,I){var w=i("buffer").Buffer,P=i("./sha"),y=i("./sha256"),_=i("./rng"),D={sha1:P,sha256:y,md5:i("./md5")},O=64,E=new w(O);function B(l,v){var x=D[l=l||"sha1"],j=[];return x||b("algorithm:",l,"is not yet supported"),{update:function(k){return w.isBuffer(k)||(k=new w(k)),j.push(k),k.length,this},digest:function(k){var L=w.concat(j),L=v?function(T,q,te){w.isBuffer(q)||(q=new w(q)),w.isBuffer(te)||(te=new w(te)),q.length>O?q=T(q):q.length<O&&(q=w.concat([q,E],O));for(var H=new w(O),K=new w(O),_e=0;_e<O;_e++)H[_e]=54^q[_e],K[_e]=92^q[_e];return te=T(w.concat([H,te])),T(w.concat([K,te]))}(x,v,L):x(L);return j=null,k?L.toString(k):L}}}function b(){var l=[].slice.call(arguments).join(" ");throw new Error([l,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
|
|
6
|
+
`))}E.fill(0),e.createHash=function(l){return B(l)},e.createHmac=B,e.randomBytes=function(l,v){if(!v||!v.call)return new w(_(l));try{v.call(this,void 0,new w(_(l)))}catch(x){v(x)}};var S,d=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],h=function(l){e[l]=function(){b("sorry,",l,"is not implemented yet")}};for(S in d)h(d[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,f,p,m,I){var w=i("./helpers");function P(b,S){b[S>>5]|=128<<S%32,b[14+(S+64>>>9<<4)]=S;for(var d=1732584193,h=-271733879,l=-1732584194,v=271733878,x=0;x<b.length;x+=16){var j=d,k=h,L=l,T=v,d=_(d,h,l,v,b[x+0],7,-680876936),v=_(v,d,h,l,b[x+1],12,-389564586),l=_(l,v,d,h,b[x+2],17,606105819),h=_(h,l,v,d,b[x+3],22,-1044525330);d=_(d,h,l,v,b[x+4],7,-176418897),v=_(v,d,h,l,b[x+5],12,1200080426),l=_(l,v,d,h,b[x+6],17,-1473231341),h=_(h,l,v,d,b[x+7],22,-45705983),d=_(d,h,l,v,b[x+8],7,1770035416),v=_(v,d,h,l,b[x+9],12,-1958414417),l=_(l,v,d,h,b[x+10],17,-42063),h=_(h,l,v,d,b[x+11],22,-1990404162),d=_(d,h,l,v,b[x+12],7,1804603682),v=_(v,d,h,l,b[x+13],12,-40341101),l=_(l,v,d,h,b[x+14],17,-1502002290),d=D(d,h=_(h,l,v,d,b[x+15],22,1236535329),l,v,b[x+1],5,-165796510),v=D(v,d,h,l,b[x+6],9,-1069501632),l=D(l,v,d,h,b[x+11],14,643717713),h=D(h,l,v,d,b[x+0],20,-373897302),d=D(d,h,l,v,b[x+5],5,-701558691),v=D(v,d,h,l,b[x+10],9,38016083),l=D(l,v,d,h,b[x+15],14,-660478335),h=D(h,l,v,d,b[x+4],20,-405537848),d=D(d,h,l,v,b[x+9],5,568446438),v=D(v,d,h,l,b[x+14],9,-1019803690),l=D(l,v,d,h,b[x+3],14,-187363961),h=D(h,l,v,d,b[x+8],20,1163531501),d=D(d,h,l,v,b[x+13],5,-1444681467),v=D(v,d,h,l,b[x+2],9,-51403784),l=D(l,v,d,h,b[x+7],14,1735328473),d=O(d,h=D(h,l,v,d,b[x+12],20,-1926607734),l,v,b[x+5],4,-378558),v=O(v,d,h,l,b[x+8],11,-2022574463),l=O(l,v,d,h,b[x+11],16,1839030562),h=O(h,l,v,d,b[x+14],23,-35309556),d=O(d,h,l,v,b[x+1],4,-1530992060),v=O(v,d,h,l,b[x+4],11,1272893353),l=O(l,v,d,h,b[x+7],16,-155497632),h=O(h,l,v,d,b[x+10],23,-1094730640),d=O(d,h,l,v,b[x+13],4,681279174),v=O(v,d,h,l,b[x+0],11,-358537222),l=O(l,v,d,h,b[x+3],16,-722521979),h=O(h,l,v,d,b[x+6],23,76029189),d=O(d,h,l,v,b[x+9],4,-640364487),v=O(v,d,h,l,b[x+12],11,-421815835),l=O(l,v,d,h,b[x+15],16,530742520),d=E(d,h=O(h,l,v,d,b[x+2],23,-995338651),l,v,b[x+0],6,-198630844),v=E(v,d,h,l,b[x+7],10,1126891415),l=E(l,v,d,h,b[x+14],15,-1416354905),h=E(h,l,v,d,b[x+5],21,-57434055),d=E(d,h,l,v,b[x+12],6,1700485571),v=E(v,d,h,l,b[x+3],10,-1894986606),l=E(l,v,d,h,b[x+10],15,-1051523),h=E(h,l,v,d,b[x+1],21,-2054922799),d=E(d,h,l,v,b[x+8],6,1873313359),v=E(v,d,h,l,b[x+15],10,-30611744),l=E(l,v,d,h,b[x+6],15,-1560198380),h=E(h,l,v,d,b[x+13],21,1309151649),d=E(d,h,l,v,b[x+4],6,-145523070),v=E(v,d,h,l,b[x+11],10,-1120210379),l=E(l,v,d,h,b[x+2],15,718787259),h=E(h,l,v,d,b[x+9],21,-343485551),d=B(d,j),h=B(h,k),l=B(l,L),v=B(v,T)}return Array(d,h,l,v)}function y(b,S,d,h,l,v){return B((S=B(B(S,b),B(h,v)))<<l|S>>>32-l,d)}function _(b,S,d,h,l,v,x){return y(S&d|~S&h,b,S,l,v,x)}function D(b,S,d,h,l,v,x){return y(S&h|d&~h,b,S,l,v,x)}function O(b,S,d,h,l,v,x){return y(S^d^h,b,S,l,v,x)}function E(b,S,d,h,l,v,x){return y(d^(S|~h),b,S,l,v,x)}function B(b,S){var d=(65535&b)+(65535&S);return(b>>16)+(S>>16)+(d>>16)<<16|65535&d}n.exports=function(b){return w.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,f,p,m,I){var w;n.exports=w||function(P){for(var y,_=new Array(P),D=0;D<P;D++)!(3&D)&&(y=4294967296*Math.random()),_[D]=y>>>((3&D)<<3)&255;return _}}).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,f,p,m,I){var w=i("./helpers");function P(D,O){D[O>>5]|=128<<24-O%32,D[15+(O+64>>9<<4)]=O;for(var E,B,b,S=Array(80),d=1732584193,h=-271733879,l=-1732584194,v=271733878,x=-1009589776,j=0;j<D.length;j+=16){for(var k=d,L=h,T=l,q=v,te=x,H=0;H<80;H++){S[H]=H<16?D[j+H]:_(S[H-3]^S[H-8]^S[H-14]^S[H-16],1);var K=y(y(_(d,5),(K=h,B=l,b=v,(E=H)<20?K&B|~K&b:!(E<40)&&E<60?K&B|K&b|B&b:K^B^b)),y(y(x,S[H]),(E=H)<20?1518500249:E<40?1859775393:E<60?-1894007588:-899497514)),x=v,v=l,l=_(h,30),h=d,d=K}d=y(d,k),h=y(h,L),l=y(l,T),v=y(v,q),x=y(x,te)}return Array(d,h,l,v,x)}function y(D,O){var E=(65535&D)+(65535&O);return(D>>16)+(O>>16)+(E>>16)<<16|65535&E}function _(D,O){return D<<O|D>>>32-O}n.exports=function(D){return w.hash(D,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,f,p,m,I){function w(O,E){var B=(65535&O)+(65535&E);return(O>>16)+(E>>16)+(B>>16)<<16|65535&B}function P(O,E){var B,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),d=new Array(64);O[E>>5]|=128<<24-E%32,O[15+(E+64>>9<<4)]=E;for(var h,l,v=0;v<O.length;v+=16){for(var x=S[0],j=S[1],k=S[2],L=S[3],T=S[4],q=S[5],te=S[6],H=S[7],K=0;K<64;K++)d[K]=K<16?O[K+v]:w(w(w((l=d[K-2],_(l,17)^_(l,19)^D(l,10)),d[K-7]),(l=d[K-15],_(l,7)^_(l,18)^D(l,3))),d[K-16]),B=w(w(w(w(H,_(l=T,6)^_(l,11)^_(l,25)),T&q^~T&te),b[K]),d[K]),h=w(_(h=x,2)^_(h,13)^_(h,22),x&j^x&k^j&k),H=te,te=q,q=T,T=w(L,B),L=k,k=j,j=x,x=w(B,h);S[0]=w(x,S[0]),S[1]=w(j,S[1]),S[2]=w(k,S[2]),S[3]=w(L,S[3]),S[4]=w(T,S[4]),S[5]=w(q,S[5]),S[6]=w(te,S[6]),S[7]=w(H,S[7])}return S}var y=i("./helpers"),_=function(O,E){return O>>>E|O<<32-E},D=function(O,E){return O>>>E};n.exports=function(O){return y.hash(O,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,f,p,m,I){e.read=function(w,P,y,_,v){var O,E,B=8*v-_-1,b=(1<<B)-1,S=b>>1,d=-7,h=y?v-1:0,l=y?-1:1,v=w[P+h];for(h+=l,O=v&(1<<-d)-1,v>>=-d,d+=B;0<d;O=256*O+w[P+h],h+=l,d-=8);for(E=O&(1<<-d)-1,O>>=-d,d+=_;0<d;E=256*E+w[P+h],h+=l,d-=8);if(O===0)O=1-S;else{if(O===b)return E?NaN:1/0*(v?-1:1);E+=Math.pow(2,_),O-=S}return(v?-1:1)*E*Math.pow(2,O-_)},e.write=function(w,P,y,_,D,x){var E,B,b=8*x-D-1,S=(1<<b)-1,d=S>>1,h=D===23?Math.pow(2,-24)-Math.pow(2,-77):0,l=_?0:x-1,v=_?1:-1,x=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(B=isNaN(P)?1:0,E=S):(E=Math.floor(Math.log(P)/Math.LN2),P*(_=Math.pow(2,-E))<1&&(E--,_*=2),2<=(P+=1<=E+d?h/_:h*Math.pow(2,1-d))*_&&(E++,_/=2),S<=E+d?(B=0,E=S):1<=E+d?(B=(P*_-1)*Math.pow(2,D),E+=d):(B=P*Math.pow(2,d-1)*Math.pow(2,D),E=0));8<=D;w[y+l]=255&B,l+=v,B/=256,D-=8);for(E=E<<D|B,b+=D;0<b;w[y+l]=255&E,l+=v,E/=256,b-=8);w[y+l-v]|=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,f,p,m,I){var w,P,y;function _(){}(t=n.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,y=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(D){return window.setImmediate(D)}:y?(w=[],window.addEventListener("message",function(D){var O=D.source;O!==window&&O!==null||D.data!=="process-tick"||(D.stopPropagation(),0<w.length&&w.shift()())},!0),function(D){w.push(D),window.postMessage("process-tick","*")}):function(D){setTimeout(D,0)}),t.title="browser",t.browser=!0,t.env={},t.argv=[],t.on=_,t.addListener=_,t.once=_,t.off=_,t.removeListener=_,t.removeAllListeners=_,t.emit=_,t.binding=function(D){throw new Error("process.binding is not supported")},t.cwd=function(){return"/"},t.chdir=function(D){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 We={};or(We,{__addDisposableResource:()=>Vs,__assign:()=>Sn,__asyncDelegator:()=>Rs,__asyncGenerator:()=>Fs,__asyncValues:()=>Ts,__await:()=>lt,__awaiter:()=>_s,__classPrivateFieldGet:()=>Ls,__classPrivateFieldIn:()=>Us,__classPrivateFieldSet:()=>Ms,__createBinding:()=>In,__decorate:()=>Ss,__disposeResources:()=>Ns,__esDecorate:()=>Aa,__exportStar:()=>Ds,__extends:()=>ws,__generator:()=>Es,__importDefault:()=>js,__importStar:()=>ks,__makeTemplateObject:()=>Bs,__metadata:()=>Is,__param:()=>Os,__propKey:()=>Ra,__read:()=>ji,__rest:()=>xs,__runInitializers:()=>Fa,__setFunctionName:()=>Ta,__spread:()=>Ps,__spreadArray:()=>As,__spreadArrays:()=>Cs,__values:()=>On,default:()=>ja});function ws(i,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");ki(i,n);function e(){this.constructor=i}i.prototype=n===null?Object.create(n):(e.prototype=n.prototype,new e)}function xs(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 Ss(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 Os(i,n){return function(e,t){n(e,t,i)}}function Aa(i,n,e,t,r,s){function o(O){if(O!==void 0&&typeof O!="function")throw new TypeError("Function expected");return O}for(var a=t.kind,f=a==="getter"?"get":a==="setter"?"set":"value",p=!n&&i?t.static?i:i.prototype:null,m=n||(p?Object.getOwnPropertyDescriptor(p,t.name):{}),I,w=!1,P=e.length-1;P>=0;P--){var y={};for(var _ in t)y[_]=_==="access"?{}:t[_];for(var _ in t.access)y.access[_]=t.access[_];y.addInitializer=function(O){if(w)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(O||null))};var D=(0,e[P])(a==="accessor"?{get:m.get,set:m.set}:m[f],y);if(a==="accessor"){if(D===void 0)continue;if(D===null||typeof D!="object")throw new TypeError("Object expected");(I=o(D.get))&&(m.get=I),(I=o(D.set))&&(m.set=I),(I=o(D.init))&&r.unshift(I)}else(I=o(D))&&(a==="field"?r.unshift(I):m[f]=I)}p&&Object.defineProperty(p,t.name,m),w=!0}function Fa(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 Ra(i){return typeof i=="symbol"?i:"".concat(i)}function Ta(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 Is(i,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,n)}function _s(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(m){try{p(t.next(m))}catch(I){o(I)}}function f(m){try{p(t.throw(m))}catch(I){o(I)}}function p(m){m.done?s(m.value):r(m.value).then(a,f)}p((t=t.apply(i,n||[])).next())})}function Es(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(m){return f([p,m])}}function f(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(m){p=[6,m],r=0}finally{t=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}}function Ds(i,n){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(n,e)&&In(n,i,e)}function On(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 ji(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 Ps(){for(var i=[],n=0;n<arguments.length;n++)i=i.concat(ji(arguments[n]));return i}function Cs(){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 As(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 lt(i){return this instanceof lt?(this.v=i,this):new lt(i)}function Fs(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(w){t[w]&&(r[w]=function(P){return new Promise(function(y,_){s.push([w,P,y,_])>1||a(w,P)})})}function a(w,P){try{f(t[w](P))}catch(y){I(s[0][3],y)}}function f(w){w.value instanceof lt?Promise.resolve(w.value.v).then(p,m):I(s[0][2],w)}function p(w){a("next",w)}function m(w){a("throw",w)}function I(w,P){w(P),s.shift(),s.length&&a(s[0][0],s[0][1])}}function Rs(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:lt(i[r](o)),done:!1}:s?s(o):o}:s}}function Ts(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 On=="function"?On(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,f){o=i[s](o),r(a,f,o.done,o.value)})}}function r(s,o,a,f){Promise.resolve(f).then(function(p){s({value:p,done:a})},o)}}function Bs(i,n){return Object.defineProperty?Object.defineProperty(i,"raw",{value:n}):i.raw=n,i}function ks(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)&&In(n,i,e);return Ba(n,i),n}function js(i){return i&&i.__esModule?i:{default:i}}function Ls(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 Ms(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 Us(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 Vs(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 Ns(i){function n(t){i.error=i.hasError?new ka(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 ki,Sn,In,Ba,ka,ja,Je=lo(()=>{ki=function(i,n){return ki=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])},ki(i,n)};Sn=function(){return Sn=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},Sn.apply(this,arguments)};In=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]};Ba=Object.create?function(i,n){Object.defineProperty(i,"default",{enumerable:!0,value:n})}:function(i,n){i.default=n};ka=typeof SuppressedError=="function"?SuppressedError:function(i,n,e){var t=new Error(e);return t.name="SuppressedError",t.error=i,t.suppressed=n,t};ja={__extends:ws,__assign:Sn,__rest:xs,__decorate:Ss,__param:Os,__metadata:Is,__awaiter:_s,__generator:Es,__createBinding:In,__exportStar:Ds,__values:On,__read:ji,__spread:Ps,__spreadArrays:Cs,__spreadArray:As,__await:lt,__asyncGenerator:Fs,__asyncDelegator:Rs,__asyncValues:Ts,__makeTemplateObject:Bs,__importStar:ks,__importDefault:js,__classPrivateFieldGet:Ls,__classPrivateFieldSet:Ms,__classPrivateFieldIn:Us,__addDisposableResource:Vs,__disposeResources:Ns}});var $s=se(zs=>{"use strict";Object.defineProperty(zs,"__esModule",{value:!0})});var Mi=se(Ie=>{"use strict";Object.defineProperty(Ie,"__esModule",{value:!0});Ie.invokeEventHandlersAsync=Ie.invokeEventHandlers=Ie.eventHandlerSafeInvokeAsync=Ie.eventHandlerSafeInvoke=void 0;var Ks=(Je(),Ye(We));function qs(i,n,e){try{return i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}}Ie.eventHandlerSafeInvoke=qs;function Li(i,n,e){return(0,Ks.__awaiter)(this,void 0,void 0,function*(){try{return yield i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}})}Ie.eventHandlerSafeInvokeAsync=Li;function La(i,n,e,t){for(let r of i){let{succeeded:s,error:o}=qs(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}}Ie.invokeEventHandlers=La;function Ma(i,n,e,t){return(0,Ks.__awaiter)(this,void 0,void 0,function*(){if(t?.parallelize===!1)for(let r of i){let{succeeded:s,error:o}=yield Li(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}else{let r=[];for(let s of i)r.push(Li(s,n,e).then(({succeeded:o,error:a})=>{if(!o&&t?.swallowExceptions!==!0)throw a}));yield Promise.all(r)}})}Ie.invokeEventHandlersAsync=Ma});var Ws=se(_n=>{"use strict";Object.defineProperty(_n,"__esModule",{value:!0});_n.TypedEvent=void 0;var Ua=(Je(),Ye(We)),Hs=Mi(),Qs={swallowExceptions:!1,parallelize:!0},Ui=class{constructor(){this._handlers=[]}attach(n){this._handlers.push(n)}detach(n){this.tryRemoveHandler(n)}invoke(n,e,t=Qs){(0,Hs.invokeEventHandlers)(this._handlers,n,e,t)}invokeAsync(n,e,t=Qs){return(0,Ua.__awaiter)(this,void 0,void 0,function*(){yield(0,Hs.invokeEventHandlersAsync)(this._handlers,n,e,t)})}tryRemoveHandler(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}};_n.TypedEvent=Ui});var Ni=se(Vi=>{"use strict";Object.defineProperty(Vi,"__esModule",{value:!0});var Va=(Je(),Ye(We));(0,Va.__exportStar)(Ws(),Vi)});var Js=se(En=>{"use strict";Object.defineProperty(En,"__esModule",{value:!0});En.FinalizationRegistryMissingError=void 0;var zi=class extends Error{};En.FinalizationRegistryMissingError=zi});var Ki=se(Dn=>{"use strict";Object.defineProperty(Dn,"__esModule",{value:!0});Dn.WeakHandlerHolder=void 0;var Na=Js(),$i=class{constructor(n){this._refs=[];try{this._finalizationRegistry=new FinalizationRegistry(n)}catch(e){throw e.name==="FinalizationRegistry"?new Na.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)}};Dn.WeakHandlerHolder=$i});var Gs=se(Pn=>{"use strict";Object.defineProperty(Pn,"__esModule",{value:!0});Pn.WeakEvent=void 0;var qi=(Je(),Ye(We)),za=Ni(),$a=Ki(),Hi=Mi(),Ka={swallowExceptions:!1,parallelize:!0},Qi=class{constructor(){this._handlers=[],this._handlerFinalizedEvent=new za.TypedEvent,this.handlerFinalizedEvent=this._handlerFinalizedEvent,this._refHolder=new $a.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,Hi.eventHandlerSafeInvoke)(s,n,e);if(!o&&t?.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}}invokeAsync(n,e,t=Ka){return(0,qi.__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,qi.__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,Hi.eventHandlerSafeInvokeAsync)(s,n,e);if(!o&&t.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}})}parallelInvokeAsync(n,e,t){return(0,qi.__awaiter)(this,void 0,void 0,function*(){let r=[];for(let s of this._handlers){let o=s?.deref();o?r.push((0,Hi.eventHandlerSafeInvokeAsync)(o,n,e).then(({succeeded:a,error:f})=>{if(!a&&t.swallowExceptions!==!0)throw f})):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)}};Pn.WeakEvent=Qi});var Xs=se(Cn=>{"use strict";Object.defineProperty(Cn,"__esModule",{value:!0});var Ys=(Je(),Ye(We));(0,Ys.__exportStar)(Ki(),Cn);(0,Ys.__exportStar)(Gs(),Cn)});var Zs=se(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});var Wi=(Je(),Ye(We));(0,Wi.__exportStar)($s(),Rt);(0,Wi.__exportStar)(Ni(),Rt);(0,Wi.__exportStar)(Xs(),Rt)});var tr={};or(tr,{Client:()=>ht,ClientDescriptor:()=>Jn,Entity:()=>de,EntityFile:()=>we,IdbPersistence:()=>ot,ServerSync:()=>ft,Storage:()=>ht,StorageDescriptor:()=>Jn,UndoHistory:()=>at,authorization:()=>rc,cliSync:()=>sc,createMigration:()=>wi,id:()=>ic,schema:()=>Dt});var Sr=Re(Ve(),1),$t=4,yt=36;function vr(i){return i.toString(yt).padStart($t,"0")}function yo(i){return i.toString().padStart(6,"0")}var Mt=class{constructor(){this.latest={time:Date.now(),counter:0,node:bo()},this.zeroCounter=0,this.now=n=>(this.latest=xr(this.latest),this.get(n,this.latest)),this.OLD_now=n=>(this.latest=xr(this.latest),yo(n)+wo(this.latest)),this.timerState=()=>this.latest,this.update=n=>{let e=n.slice($t);this.latest=vo(this.latest,Or(e))},this.get=(n,e)=>vr(n)+wr(e),this.zero=n=>vr(n)+wr({time:0,counter:this.zeroCounter++,node:this.latest.node}),this.getWallClockTime=si}},Ut=class extends Error{constructor(...n){super(),this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(n).join(" ")}},Vt=class extends Error{constructor(){super(),this.type="OverflowError",this.message="timestamp counter overflow"}},ni=4,ii=7,Nt=60*1e3,gt=9;function bo(){return Sr.default.slug().padStart(ii,"0").slice(0,ii)}function wr(i){let n=new Date(i.time).getTime().toString(yt).padStart(gt,"0"),e=i.counter.toString(yt).padStart(ni,"0"),t=i.node.padStart(ii,"0");return`${n}${e}${t}`}function xr(i){let n=Date.now(),e=Math.max(i.time,n),t=i.time===e?i.counter+1:0;if(e-n>Nt)throw new Ut(e,n,Nt);if(t>65535)throw new Vt;return{time:e,counter:t,node:i.node}}function vo(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>Nt)throw new Ut(t,e,Nt);if(s>65535)throw new Vt;return{time:t,counter:s,node:i.node}}function Or(i){let n=i.slice(0,gt),e=i.slice(gt,gt+ni),t=i.slice(gt+ni),r=parseInt(n,yt),s=parseInt(e,yt);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:t}}function wo(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 zt(i){return parseInt(i.slice(0,$t),36)}function ri(i,n){return zt(i)-zt(n)}function si(i){return Or(i.slice($t)).time}var Kt,xo=new Uint8Array(16);function oi(){if(!Kt&&(Kt=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!Kt))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Kt(xo)}var Ir=/^(?:[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 So(i){return typeof i=="string"&&Ir.test(i)}var _r=So;var ee=[];for(qt=0;qt<256;++qt)ee.push((qt+256).toString(16).substr(1));var qt;function Oo(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(ee[i[n+0]]+ee[i[n+1]]+ee[i[n+2]]+ee[i[n+3]]+"-"+ee[i[n+4]]+ee[i[n+5]]+"-"+ee[i[n+6]]+ee[i[n+7]]+"-"+ee[i[n+8]]+ee[i[n+9]]+"-"+ee[i[n+10]]+ee[i[n+11]]+ee[i[n+12]]+ee[i[n+13]]+ee[i[n+14]]+ee[i[n+15]]).toLowerCase();if(!_r(e))throw TypeError("Stringified UUID is invalid");return e}var Er=Oo;function Io(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 Er(t)}var bt=Io;function W(i){return xe(i)||ye(i)}function Xe(i,n){return i===n?!0:!(!W(i)||!W(n)||i["@@type"]!==n["@@type"]||i.id!==n.id)}var _o="/",vt=":",ci=new WeakMap;function oe(i){let n=fe(i);return M(!!n,`Object ${JSON.stringify(i)} does not have an OID assigned to it`),n}function fe(i){if(V(i))return ci.get(i)}function $(i,n){return M(V(i),`Only objects can be assigned OIDs, received ${JSON.stringify(i)}`),li(i)&&Wt(i),ci.set(i,n),i}function li(i){return!!fe(i)}function Wt(i){return ci.delete(i),i}function di(i,n,e){if(li(i))return oe(i);{let t=be(n,e);return $(i,t),t}}function Dr(i,n,e){if(li(i)){let t=oe(i);if(Ee(t,n))return oe(i);{let r=be(n,e);return $(i,r),r}}else{let t=be(n,e);return $(i,t),t}}var ai={".":"˙","/":"&slash;",":":":"};function Pr(i){return i.replace(/[/]/g,ai["/"]).replace(/[:]/g,ai[":"]).replace(/[.]/g,ai["."])}function Cr(i){return i.replace(/&slash;/g,"/").replace(/:/g,":").replace(/˙/g,".")}function X(i,n,e){let t=Pr(i)+_o+Pr(n);return e&&(t+=vt+e),t}function be(i,n=Eo){let{collection:e,id:t}=ae(i);return X(e,t,n())}function ae(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(vt),o;return r.includes(".")?o=r.slice(0,r.indexOf(".")):o=r,{collection:Cr(n),id:Cr(o),subId:s}}function Ze(i,n){let e=oe(i);if(Array.isArray(i)){let t;for(let r=0;r<i.length;r++)t=i[r],V(t)&&!W(t)&&(Dr(t,e,n),Ze(t,n))}else if(V(i)&&!W(i))for(let t of Object.keys(i))V(i[t])&&!W(i[t])&&(Dr(i[t],e,n),Ze(i[t],n))}function Ht(i){if(Wt(i),Array.isArray(i))for(let n=0;n<i.length;n++)Ht(i[n]);else if(V(i))for(let n of Object.keys(i))Ht(i[n])}function Eo(){return bt().slice(0,8)}function ce(i){return{"@@type":"ref",id:i}}function Qt(i,n=new Map){if(Array.isArray(i)){let e=oe(i),t=$([],e);for(let r=0;r<i.length;r++){let s=i[r];if(V(s)){if(xe(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(ye(s)){t[r]=s;continue}else{let o=oe(s);t[r]=ce(o),Qt(s,n)}}else t[r]=s}n.set(e,t)}else if(V(i)&&!W(i)){let e=oe(i),t=$({},e);for(let r of Object.keys(i)){let s=i[r];if(V(s)){if(xe(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(ye(s))t[r]=s;else{let o=oe(s);t[r]=ce(o),Qt(s,n)}}else t[r]=s}n.set(e,t)}else W(i);return n}function z(i){return i.split(".")[0].split(vt)[0]}function Ar(i){let n=z(i),e=be(n,()=>"\uFFFF");return[`${n}${vt}`,e]}function Ee(i,n){return z(i)===z(n)}function Jt(i){return!i.includes(vt)}var Br=Re(Tr(),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 ui(i){return JSON.stringify(i,Do)}function le(i,n=!0){if(!n&&typeof structuredClone=="function")return structuredClone(i);if(V(i)||Array.isArray(i)){let e=fe(i),t;if(Array.isArray(i))t=i.map(r=>le(r,n));else{t={};for(let[r,s]of Object.entries(i))t[r]=le(s,n)}return n&&e&&$(t,e),t}return i}function Ne(i){return(0,Br.default)(i)}function V(i){return i&&typeof i=="object"}function kr(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 M(i,n="assertion failed"){if(!i)throw new Error(n)}function wt(i=16){return bt().replace("-","").slice(0,i)}function jr(i,n){for(let e=i.length-1;e>=0;e--)if(n(i[e]))return e;return-1}function Lr(i,n){let e;return function(...t){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,t),n)}}function Mr(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 Ur(){}function ye(i){return i&&i["@@type"]==="file"}function xt(i){return{"@@type":"file",id:i}}function et(i){return typeof File<"u"&&i instanceof File||typeof Blob<"u"&&i instanceof Blob}function Gt(i){return i&&V(i)&&typeof i.id=="string"&&typeof i.remote=="boolean"&&typeof i.name=="string"&&typeof i.type=="string"}var tt="__@@oid_do_not_use",De="@@id";function Po(i){if(V(i))return i[De]||i[tt]}function Co(i){return V(i)&&(delete i[tt],delete i[De]),i}function Ao(i){let n=Po(i);n&&$(i,n)}function St(i){if(Ao(i),Co(i),Array.isArray(i))for(let n=0;n<i.length;n++)St(i[n]);else if(V(i))for(let n of Object.keys(i))St(i[n])}function Fo(i){let{collection:n,id:e,subId:t}=ae(i);return X(n,e,t)}var Ro=/"\w+\/[^"]+?(\.[^"]+)+\:[\S]+?"/g;function To(i){return i.replaceAll(Ro,n=>{let e=n.slice(1,n.length-1);return`"${Fo(e)}"`})}function fi(i){return JSON.parse(To(JSON.stringify(i)))}function Vr(i){let n=z(i);return[`${n}.`,`${n}.\uFFFF`]}function hi(i){return i===De||i===tt}function xe(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function pi(i){return V(i)&&!W(i)}function Bo(i,n){return i===n?!0:W(i)&&W(n)?Xe(i,n):!1}function Ot(i,n,e,t,r=[],s){let o=s?.authz,a=oe(i);function f(p,m,I,w){if(!pi(m))Bo(m,I)||(w?r.push(Be({oid:a,timestamp:e(),data:{op:"list-set",index:p,value:m}},o)):r.push(Be({oid:a,timestamp:e(),data:{op:"set",name:p,value:m}},o)));else{let P=fe(I),y=fe(m);y&&!Ee(a,y)?(m=le(m,!1),y=be(a,t),$(m,y)):s?.mergeUnknownObjects?!y&&P?($(m,P),y=P):y=di(m,a,t):y=di(m,a,t),M(!!y,"Error: no value OID was resolved during diff. This is a bug in Verdant."),M(Ee(a,y),`Error: value OID ${y} is not related to parent OID ${a}. This is a bug in Verdant.`),I===void 0||y!==P?(ze(m,y,e,t,r),r.push(Be({oid:a,timestamp:e(),data:{op:"set",name:p,value:ce(y)}},o)),P!==void 0&&r.push(Be({oid:P,timestamp:e(),data:{op:"delete"}},o))):Ot(I,m,e,t,r,s)}}if(Array.isArray(i)&&Array.isArray(n)){for(let m=0;m<n.length;m++){let I=n[m],w=i[m];f(m,I,w,!0)}let p=i.length-n.length;if(p>0){for(let m=n.length;m<i.length;m++){let I=i[m],w=fe(I);w&&r.push(Be({oid:w,timestamp:e(),data:{op:"delete"}},o))}r.push(Be({oid:a,timestamp:e(),data:{op:"list-delete",index:n.length,count:p}},o))}}else{if(Array.isArray(i)||Array.isArray(n))throw new Error("Cannot diff an array with an object");if(pi(i)&&pi(n)){let p=new Set(Object.keys(i));for(let[m,I]of Object.entries(n)){if(I===void 0&&s?.defaultUndefined||(p.delete(m),hi(m)))continue;let w=i[m];f(m,I,w,!1)}if(!s?.defaultUndefined)for(let m of p)hi(m)||r.push(Be({oid:a,timestamp:e(),data:{op:"remove",name:m}},o))}}return r}function ze(i,n,e,t,r=[],s){$(i,n),Ze(i,t);let o=Qt(i);for(let a of o.keys()){let f=o.get(a),p={oid:a,timestamp:e(),data:{op:"initialize",value:Wt(f)}};r.push(Be(p,s?.authz))}return r}function Be(i,n){return n&&(i.authz=n),i}function It(i){let n={};for(let e of i)e.oid in n?n[e.oid].push(e):n[e.oid]=[e];return n}function zr(i){let n={};for(let e of i){let t=z(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function $r(i){let n={};for(let e of i){let t=z(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Te(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: ${fe(i)})`),!1)}function ke(i,n,e){if(i==null&&n.op!=="initialize")return i;let t=i,r,s;function o(a){e&&W(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":Te(i)&&(o(i[n.index]),i[n.index]=n.value);break;case"list-push":Te(i)&&i.push(n.value);break;case"list-delete":Te(i)&&(o(i[n.index]),i.splice(n.index,n.count));break;case"list-move-by-index":Te(i)&&(s=i.splice(n.from,1),i.splice(n.to,0,s[0]));break;case"list-remove":if(Te(i))do{let a=n.value;n.only==="last"?xe(a)?r=jr(i,f=>f.id===a.id):r=i.lastIndexOf(a):xe(a)?r=i.findIndex(f=>f.id===a.id):r=i.indexOf(a),r!==-1&&(o(i[r]),i.splice(r,1))}while(!n.only&&r!==-1);break;case"list-add":Te(i)&&(i.some(f=>xe(f)&&xe(n.value)?f.id===n.value.id:f===n.value)||i.push(n.value));break;case"list-move-by-ref":Te(i)&&(r=i.findIndex(a=>Xe(a,n.value)),s=i.splice(r,1),i.splice(n.index,0,s[0]));break;case"list-insert":if(Te(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 le(n.value);case"touch":return i;default:throw new Error(`Unsupported patch operation: ${n.op}`)}return i}function Yt(i,n,e=[]){if(Array.isArray(i))for(let t=0;t<i.length;t++){let r=i[t];i[t]=Nr(r,n,e),V(i[t])&&Yt(i[t],n,e)}else if(!ye(i)){if(V(i)){M(fe(i),`Object ${JSON.stringify(i)} must have an oid`);for(let t of Object.keys(i))i[t]=Nr(i[t],n,e),V(i[t])&&Yt(i[t],n,e)}}return e}function Nr(i,n,e){if(xe(i)){e.push(i.id);let t=n.get(i.id);return M(!!t,`No value was found in object map for ${i.id}`),$(t,i.id)}else return i}function Kr(i){return i.data.op==="set"?i.data.name:!1}function qr(i,n){return n.has(!0)?!0:i.data.op==="set"||i.data.op==="remove"?n.has(i.data.name):!1}function Xt(i){return{oid:i.oid,timestamp:i.timestamp,data:i.data,authz:i.authz}}var je;(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"})(je||(je={}));var Hr=Re(Ve(),1),ko=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 jo(i){let{properties:n,fields:e}=i,t=ko(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 Lo(i,n){return i.properties=n,i}function Mo(i){return Object.assign({type:"array"},i)}function Uo(i,n){return i.items=n,i}var Vo=i=>Object.assign({type:"string"},i),No=i=>Object.assign({type:"number"},i),zo=i=>Object.assign({type:"boolean"},i),$o=i=>Object.assign({type:"any"},i);function Ko(i){return Object.assign({type:"map"},i)}function qo(i,n){return i.values=n,i}var Ho=i=>Object.assign({type:"file"},i),Qo=()=>({type:"string",default:Hr.default}),Qr={object:jo,array:Mo,replaceObjectFields:Lo,replaceArrayItems:Uo,string:Vo,number:No,boolean:zo,any:$o,map:Ko,replaceMapValues:qo,file:Ho,id:Qo};var Xr=Re(Ve(),1);function Zt(i){return i.equals!==void 0}function en(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function Wr(i){return!!i.match}function tn(i){return i.startsWith!==void 0}function gi(i){return!en(i)&&!Zt(i)&&!Wr(i)&&!tn(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 mi(s.type);if("field"in s){let a=i.fields[s.field];return a?mi(a.type):!1}}let o=i.fields[n];return o?mi(o.type):!1}function mi(i){return i==="array"||i.endsWith("[]")}function Pe(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Et(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.default!==void 0:!1}function bi(i){return!Pe(i)&&!Et(i)}function Ke(i,n){for(let[e,t]of Object.entries(i.fields)){let r=nt(t);(r!==void 0&&n[e]===void 0||!Pe(t)&&n[e]===null)&&(n[e]=r),n[e]&&$e(n[e],t)}return n}function $e(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=nt(t);r!==void 0&&(i[e]=r)}$e(i[e],t)}else if(n.type==="array")for(let e of i)$e(e,n.items);else if(n.type==="map")for(let[e,t]of Object.entries(i))e===De||e===tt||$e(t,n.values)}function nt(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]=nt(r));return e}if(Pe(i))return null;if(i.type==="array")return[];if(i.type==="map")return{}}function Jr(i,n){for(let[e,t]of Object.entries(n))e===De||e===tt||(i.fields[e]?yi(t,i.fields[e]):delete n[e]);return n}function yi(i,n){if(V(i)&&n.type==="object")for(let[e,t]of Object.entries(i))n.properties[e]?yi(t,n.properties[e]):delete i[e];else if(Array.isArray(i)&&n.type==="array")for(let e of i)yi(e,n.items)}function Gr(i,n){for(let[e,t]of Object.entries(n))if(e!==De){if(!i[e])return{type:"invalid-key",fieldPath:[e],message:`Invalid field "${e}"`};if(t){let r=Ce({field:i[e],value:t,fieldPath:[e]});if(r)return r}}}function Ce({field:i,value:n,fieldPath:e=[],depth:t,requireDefaults:r}){if(!(t!==void 0&&t<=0)&&!(Pe(i)&&n===null)){if(n===null&&(r||!Et(i)))return{type:"no-default",fieldPath:e,message:`Invalid null value for field ${Se(e)}`};if(i.type==="object"){if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected object ${i.nullable?"or null ":""}for field ${Se(e)}, got ${n}`};for(let[s,o]of Object.entries(i.properties))s!==De&&n[s]&&Ce({field:o,value:n[s],fieldPath:[...e,s],depth:t!==void 0?t-1:void 0});for(let s of Object.keys(n))if(!i.properties[s])return{type:"invalid-key",fieldPath:[...e,s],message:`Invalid unexpected field "${s}" on value ${Se(e)}`}}else if(i.type==="array"){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 ${Se(e)}, got ${n}`};for(let s of n)Ce({field:i.items,value:s,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0})}else if(i.type==="map"){if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected map for field ${Se(e)}, got ${n}`};for(let[s,o]of Object.entries(n))Ce({field:i.values,value:o,fieldPath:[...e,s],depth:t!==void 0?t-1:void 0})}else if(i.type==="string"){if(typeof n!="string")return{type:"invalid-type",fieldPath:e,message:`Expected string ${i.nullable?"or null ":""}for field ${Se(e)}, got ${n}`};if(i.options&&!i.options.includes(n))return{type:"invalid-value",fieldPath:e,message:`Expected one of ${i.options.join(", ")} for field ${Se(e)}, got ${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 ${Se(e)}, got ${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 ${Se(e)}, got ${n}`}}else if(i.type==="file"&&!et(n)&&!Gt(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ${i.nullable?"or null ":""}for field ${Se(e)}, got ${n}`}}}function Se(i){return i.length===0?"root":i.join(".")}function Yr(i,n){let e={};for(let[t,r]of Object.entries(n))i[t]&&(e[t]=nn({field:i[t],value:r,fieldPath:[t]}));return e}function nn({field:i,value:n,fieldPath:e=[],depth:t}){let r=Ce({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]=nn({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=>nn({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]=nn({field:i.values,value:a,fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else return n}}function Le(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 Wo=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 Jo(i){var{synthetics:n,indexes:e}=i,t=Wo(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 Dt(i){return i}Dt.collection=Jo;Dt.fields=Qr;Dt.generated={id:Xr.default};var rn="\uFFFFFE",Go="\0",Yo="\uFFFFFF";function he(...i){let n=Xo(i);return n.length===1?n[0]:n}function Ae(...i){return i.join(rn)+`${Yo}`}function Oe(...i){return i.join(rn)+`${rn}${Go}`}function Xo(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(rn))))}function Zr(i){return!!i.field}function Zo(i,n){let e={};for(let[t,r]of Object.entries(i.indexes||{})){let s=r;Zr(s)?e[t]=ve(n[s.field]):e[t]=ve(s.compute(n))}return e}function ea(i,n){return Object.entries(i.compounds||{}).reduce((e,[t,r])=>(e[t]=he(...r.of.map(s=>n[s])),e),{})}function ta(i,n){return Object.entries(i.fields).reduce((e,[t,r])=>("indexed"in r&&(e[t]=ve(n[t])),e),{})}function vi(i,n){let e=Object.assign(Object.assign({[i.primaryKey]:n[i.primaryKey]},ta(i,n)),Zo(i,n));return Object.assign(e,ea(i,Object.assign(Object.assign({},n),e))),e}var na="null";function ve(i){if(i===null)return na;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(ve);throw new Error(`Unsupported index value: ${i}`)}var ia={version:0,collections:{}};function es(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),M(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 wi(i,n,e){let t=typeof n=="function"||n===void 0,r=t?ia:i,s=t?i:n,o=t?n:e;M(r,"Invalid arguments to createMigration"),M(s,"Invalid arguments to createMigration");let{changedCollections:a,addedCollections:f,removedCollections:p,addedIndexes:m,removedIndexes:I,autoMigratedCollections:w,autoMigration:P}=ra(r,s);return{version:s.version,migrate:async y=>{let _=[];if(await o?.({migrate:async(O,E)=>{let B=P(O),b=async S=>{let d=await E(S);$(d,oe(S));let h=B(d),l=Gr(s.collections[O].fields,h);return h};await y.migrate(O,b),_.push(O),w.delete(O)},info:{changedCollections:a,addedCollections:f,removedCollections:p},queries:y.queries,mutations:y.mutations}),s.version>1){y.log("debug","auto-migrating collections with new defaults",w);for(let E of w)await y.migrate(E,P(E)),_.push(E);for(let E of p)await y.deleteCollection(E);let O=a.filter(E=>!_.includes(E));O.length>0&&console.error(`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,O)}},removedCollections:p,addedIndexes:m,removedIndexes:I,allCollections:Object.keys(s.collections),changedCollections:a,addedCollections:f,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function ra(i,n){let e=Object.keys(n.collections).filter(m=>i.collections[m]&&ui(i.collections[m])!==ui(n.collections[m])),t=Object.keys(i.collections).filter(m=>!n.collections[m]),r=Object.keys(n.collections).filter(m=>!i.collections[m]),s=new Set;for(let m of e){let I=i.collections[m].fields,w=n.collections[m].fields;Object.keys(w).some(P=>(!I[P]||bi(I[P]))&&!bi(w[P]))&&s.add(m),Object.keys(I).some(P=>!w[P])&&s.add(m)}let o={},a={};for(let m of[...e,...r]){let I=es(i.collections[m]),w=es(n.collections[m]),P=w.filter(_=>!I.find(D=>D.name===_.name)),y=I.filter(_=>!w.find(D=>D.name===_.name));P.length>0&&(o[m]=P,e.includes(m)&&s.add(m)),y.length>0&&(a[m]=y,e.includes(m)&&s.add(m))}return{changedCollections:e,addedCollections:r,removedCollections:t,addedIndexes:o,removedIndexes:a,autoMigratedCollections:s,withDefaults:(m,I)=>Ke(n.collections[m],I),autoMigration:m=>I=>{let w=n.collections[m];return Ke(w,Jr(w,I))}}}var xi={};var sn=class{constructor(n,e){this.getNow=n,this.createSubId=e,this.isPrimitive=t=>!V(t)||W(t),this.createDiff=(t,r,s={})=>Ot(t,r,this.getNow,this.createSubId,[],s),this.createInitialize=(t,r,s)=>ze(t,r,this.getNow,this.createSubId,void 0,s?{authz:s}:void 0),this.createSet=(t,r,s)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:r,value:s}}];{let o=be(t,this.createSubId);return[...ze(s,o,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"set",value:ce(o),name:r}}]}},this.createRemove=(t,r)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:r}}],this.createListSet=(t,r,s)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:s}}];{let o=be(t,this.createSubId);return[...ze(s,o,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:ce(o)}}]}},this.createListPush=(t,r)=>{if(this.isPrimitive(r))return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:r}}];{let s=be(t,this.createSubId);return[...ze(r,s,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:ce(s)}}]}},this.createListAdd=(t,r)=>this.isPrimitive(r)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:r}}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:ce(r)}}],this.createListInsert=(t,r,s)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:s,index:r}}];{let o=be(t,this.createSubId);return[...ze(s,o,this.getNow),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:ce(o),index:r}}]}},this.createListRemove=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:r,only:s}}],this.createListDelete=(t,r,s=1)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:r,count:s}}],this.createListMoveByRef=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:r,index:s}}],this.createListMoveByIndex=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:r,to:s}}],this.createDelete=t=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"}}],this.createDeleteAll=(t,r)=>t.map(s=>({oid:s,timestamp:this.getNow(),data:{op:"delete"},authz:r}))}};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}};function ts(i,n,e,t){if(n==null)return[{oid:i,timestamp:t(),data:{op:"delete"}}];let r=le(n),s=[];for(let o of e){let a=sa(i,r,o,t);s.unshift(...a),ke(r,o.data)}return s}function sa(i,n,e,t){let r=e.data;switch(r.op){case"set":case"remove":return[{oid:i,timestamp:t(),data:{op:"set",name:r.name,value:n[r.name]}}];case"list-insert":return[{oid:i,timestamp:t(),data:{op:"list-delete",index:r.index,count:1}}];case"list-delete":return[{oid:i,timestamp:t(),data:{op:"list-insert",index:r.index,values:n.slice(r.index,r.count)}}];case"list-move-by-ref":return[{oid:i,timestamp:t(),data:{op:"list-move-by-ref",value:r.value,index:n.indexOf(r.value)}}];case"list-move-by-index":return[{oid:i,timestamp:t(),data:{op:"list-move-by-index",from:r.to,to:r.from}}];case"delete":return[{oid:i,timestamp:t(),data:{op:"initialize",value:n}}];case"list-push":return[{oid:i,timestamp:t(),data:{op:"list-remove",value:r.value,only:"last"}}];case"list-remove":if(r.only==="last"){let s=n.lastIndexOf(r.value);return[{oid:i,timestamp:t(),data:{op:"list-insert",index:s,values:[r.value]}}]}else if(r.only==="first"){let s=n.indexOf(r.value);return[{oid:i,timestamp:t(),data:{op:"list-insert",index:s,values:[r.value]}}]}else{let s=[],o=n.indexOf(r.value);for(;o!==-1;)s.push(o),o=n.indexOf(r.value,o+1);return s.map(a=>({oid:i,timestamp:t(),data:{op:"list-insert",index:a,value:r.value}}))}case"list-add":return[{oid:i,timestamp:t(),data:{op:"list-remove",value:r.value,only:"last"}}];case"list-set":return[{oid:i,timestamp:t(),data:{op:"list-set",index:r.index,value:n[r.index]}}];case"initialize":return[{oid:i,timestamp:t(),data:{op:"delete"}}];case"touch":return[];default:throw new Error(`Cannot undo operation type: ${r.op}`)}}var it=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:f,timeout:p,userData:m})=>{this.items.push(...a),f!==void 0&&(this.max=f),p!==void 0&&(this.timeout=p),m&&(this.userData=m);let I=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():I&&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}};function ns(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 Pt;(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"})(Pt||(Pt={}));var Z=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}};Z.Code=Pt;function is(i){return typeof i=="object"&&"code"in i&&typeof i.code=="number"}function oa(i){return typeof Buffer<"u"?Buffer.from(i).toString("base64"):btoa(i)}function aa(i){return typeof Buffer<"u"?Buffer.from(i,"base64").toString():atob(i)}var qe={onlyUser:i=>oa(`u:${i}:*`),onlyMe:()=>qe.onlyUser(Oi),decode:i=>{let e=aa(i).split(":");if(e.length!==3)throw new Error("Invalid authz string");return{scope:e[0],subject:e[1],action:e[2]}}},Oi="$$_originator_$$";function rs(i,n){let{operations:e,baselines:t}=i;if(e)for(let r of e)r.authz&&qe.decode(r.authz).subject===Oi&&(r.authz=qe.onlyUser(n));if(t)for(let r of t)r.authz&&qe.decode(r.authz).subject===Oi&&(r.authz=qe.onlyUser(n))}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}};var on=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 an=class{constructor(n){this.value=n}deref(){return this.value}};var ne=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 Ii=typeof window<"u"?window.indexedDB:void 0;function He(i){return i instanceof Error&&i.name==="AbortError"}function rt(i){return new Promise((n,e)=>{i.onsuccess=()=>{n(i.result)},i.onerror=()=>{i.error&&He(i.error)?n(i.result):e(i.error)}})}function Qe(i,n){return new Promise((e,t)=>{let r=i.transaction([n],"readonly"),o=r.objectStore(n).openCursor(),a=0,f=0;o.onsuccess=function(p){let m=o.result;m&&(a++,f=f+kr(m.value),m.continue())},o.onerror=function(p){o.error&&He(o.error)?e({count:a,size:f}):t(o.error)},r.oncomplete=function(p){e({count:a,size:f})},r.onabort=function(p){t(p)},r.onerror=function(p){t(p)}})}function _i(i,n){let e=i.transaction(n,"readonly"),t=n.map(r=>{let s=e.objectStore(r);return rt(s.getAll())});return Promise.all(t)}async function pe(i){i.close(),await new Promise(n=>{n()}),await new Promise(n=>{n()})}async function cn(i,n=Ii){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 ln(i,n=window.indexedDB){return rt(n.deleteDatabase(i))}async function ca(i=window.indexedDB){return i.databases()}function ss(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 Ei(i,n,e,t=window.indexedDB){(await ca(t)).some(a=>a.name===n)&&(await ln(n,t),e.log("debug","Deleted existing database",n));let s=await new Promise((a,f)=>{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 m=i,I=p.transaction;if(!I)throw new Error("No transaction");for(let w of Array.from(m.objectStoreNames)){let P=m.transaction(w).objectStore(w);I.db.createObjectStore(w,{keyPath:P.keyPath,autoIncrement:P.autoIncrement});let y=I.objectStore(w),_=m.transaction(w).objectStore(w);for(let D of Array.from(_.indexNames)){let O=_.index(D);e.log("debug","Copying index",D),y.createIndex(D,O.keyPath,{unique:O.unique,multiEntry:O.multiEntry})}}},p.onsuccess=()=>{e.log("debug","Opened reset database",n),a(p.result)},p.onerror=()=>f(p.error??new Error("Unknown database upgrade error"))}),o=await _i(i,Array.from(i.objectStoreNames));await new Promise((a,f)=>{let p=s.transaction(Array.from(s.objectStoreNames),"readwrite");for(let m=0;m<o.length;m++){let I=p.objectStore(i.objectStoreNames[m]);for(let w of o[m])I.add(w)}p.oncomplete=()=>a(),p.onerror=m=>{let I=p.error??m.target.transaction?.error??new Error("Unknown error");e.log("critical","Error copying data",I),f(I)}}),await pe(s)}function os(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 Ct(i){return[i,"meta"].join("_")}function st(i){return[i,"collections"].join("_")}function as(i){return i.name?.split("_")[0]}var Me=class extends ne{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=ss(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 rt(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(rt))};this.iterate=async(e,t,r,s)=>{let a=(s?.transaction||this.createTransaction([e],s)).objectStore(e),f=t(a);return Array.isArray(f)?Promise.all(f.map(p=>new Promise((m,I)=>{p.onsuccess=()=>{let w=p.result;w?r(w.value,a,w)?m():w.continue():m()},p.onerror=()=>{p.error&&He(p.error)?m():I(p.error)}}))).then(()=>{}):new Promise((p,m)=>{f.onsuccess=()=>{let I=f.result;I?r(I.value,a,I)?p():I.continue():p()},f.onerror=()=>{f.error&&He(f.error)?p():m(f.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 dn=class extends Me{constructor(){super(...arguments);this.add=async e=>{let t=e.file?await da(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 _i(this.db,["files"]);return t.map(this.hydrateFileData)};this.stats=async()=>({size:await Qe(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?la(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 la(i,n,e){return new File([new Blob([i],{type:n})],e??"blob",{type:n})}function da(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 un=class extends Me{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=z(e),[a,f]=Ar(e),[p,m]=Vr(e);return[s.openCursor(IDBKeyRange.only(o)),s.openCursor(IDBKeyRange.bound(a,f,!1,!1)),s.openCursor(IDBKeyRange.bound(p,m,!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=Di)=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),t)};this.deleteBaseline=async(e,t=Di)=>{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=Oe(e),f=r?.to?he(e,r.to):Ae(e),p=IDBKeyRange.bound(a,f,!1,!1);return o.openCursor(p)},t,r);this.iterateEntityOperations=(e,t,r)=>this.iterate("operations",s=>{let o=Oe(e),a=r?.to?he(e,r.to):Ae(e),f=IDBKeyRange.bound(o,a,!1,!1);return s.openCursor(f)},t,r);this.deleteEntityOperations=(e,t)=>this.iterate("operations",r=>{let s=Oe(e),o=t?.to?he(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?he(!0,t.after):Oe(!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?Oe(t.from):void 0,o=t?.before?Ae(t.before):Oe(!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=Di)=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(z(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 Qe(this.db,"operations"),t=await Qe(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:he(e.oid,e.timestamp),l_t:he(e.isLocal,e.timestamp),d_t:he(z(e.oid),e.timestamp)});this.addDispose(()=>(this.ctx.log("info","Closing metadata DB for",this.ctx.namespace),pe(e)))}},Di={mode:"readwrite"};var cs=[fa,ha,pa,ma,ga,ya],ua=cs.length;function Pi({indexedDB:i=window.indexedDB,namespace:n,log:e}){return new Promise((t,r)=>{let s=i.open(Ct(n),ua),o=!1;s.onupgradeneeded=async a=>{let f=s.result,p=s.transaction,m=cs.slice(a.oldVersion);for(let I of m)await I(f,p);await new Promise((I,w)=>{p.addEventListener("complete",I),p.addEventListener("error",w)}),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 fa(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 ha(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:f,...p}=o.value;o.update({...p,l_t:a,d_t:f}),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 pa(i,n){n.objectStore("operations").createIndex("timestamp","timestamp")}async function ma(i,n){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function ga(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 f=fi(a.value);f.oid_timestamp!==a.primaryKey?(a.delete(),e.put(f)):a.update(f),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 f=fi(a.value);f.oid!==a.primaryKey?(a.delete(),t.put(f)):a.update(f),a.continue()}else r()},o.onerror=a=>{s(o.error)}})}async function ya(i,n){n.objectStore("files").createIndex("timestamp","timestamp")}var ba=i=>IDBKeyRange.only(ve(i.equals)),va=i=>{},wa=i=>{let n=i.gte||i.gt,e=i.lte||i.lt;return n===e?IDBKeyRange.only(ve(n)):n?e?IDBKeyRange.bound(ve(n),ve(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(ve(n),!!i.gt):IDBKeyRange.upperBound(ve(e),!!i.lt)},xa=(i,n,e)=>{let t=i.collections[n].compounds[e.where];M(t,`Index ${e.where} does not exist on collection ${n}`);let r=Object.keys(e.match).sort((f,p)=>t.of.indexOf(f)-t.of.indexOf(p));for(let f of r)if(t.of.indexOf(f)!==r.indexOf(f))throw new Error(`Compound index ${e.where} does not have ${f} at the start of its order`);let s=r.map(f=>e.match[f]);if(r.length===t.of.length)return IDBKeyRange.only(he(...s));let o=Oe(...s),a=Ae(...s);return IDBKeyRange.bound(o,a)};function Sa(i){let n=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(n,e)}function Ci(i,n,e){if(e)return en(e)?wa(e):Zt(e)?ba(e):gi(e)?va(e):tn(e)?Sa(e):xa(i,n,e)}var fn=class extends Me{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 Qe(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=Ci(this.ctx.schema,e.collection,e.index);return s.openCursor(a,o)},{mode:"readonly"});return t?X(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),f=t?.where?a.index(t.where):a,p=t?.order==="desc"?"prev":"next",m=Ci(this.ctx.schema,e,t),I=f.openCursor(m,p),w=!1;return{result:await new Promise((y,_)=>{let D=!r,O=0,E=new Set;I.onsuccess=()=>{O++;let B=I.result;if(!B){y(Array.from(E));return}r&&!D?(B.advance(r),D=!0):((!s||E.size<s)&&E.add(X(e,B.primaryKey.toString())),s&&O>s?(w=!0,y(Array.from(E))):B.continue())},I.onerror=()=>{I.error?.name==="InvalidStateError"?(this.ctx.log("error","find query failed with InvalidStateError",I.error),y([])):I.error&&He(I.error)?y([]):_(I.error)}}),hasNextPage:w}};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 f=a.getSnapshot();try{await this.saveDocument(a.oid,f,r)}catch(p){throw this.ctx.log("error",`Error saving document ${a.oid} (${JSON.stringify(f)})`,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}=ae(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],f=vi(a,t);f["@@@snapshot"]=JSON.stringify(t),await this.run(s,p=>p.put(f),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Save complete for ${e}`,f)}}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),pe(this.db)))}};async function ls(i,n,e,t,r){r?.("debug","Upgrading database",n,"to version",e);function s(o,a){let f=i.open(st(n),e),p=!1;f.onupgradeneeded=m=>{let I=f.transaction;t(I,f.result,m),p=!0},f.onsuccess=async m=>{p?(await pe(f.result),o(f.result)):a(new Error("Database was not upgraded when a version change was expected"))},f.onerror=m=>{a(f.error||new Error("Unknown error"))},f.onblocked=m=>{r?.("Database upgrade blocked!")}}return new Promise(s)}async function Ai({indexedDB:i=Ii,namespace:n,version:e,log:t}){t?.("debug","Opening database",n,"at version",e);let r=await os(st(n),e,i);return r.addEventListener("versionchange",s=>{r.close()}),r.addEventListener("close",()=>{t?.("warn","Database closed",n)}),r}var ot=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(as).filter(e=>!!e)))};this.getNamespaceVersion=async n=>{let e=st(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([ln(Ct(n),this.indexedDB),ln([n,"collections"].join("_"),this.indexedDB)])};this.openNamespace=async n=>new Fi(this.indexedDB,n);this.copyNamespace=async(n,e,t)=>{let r={...t,namespace:n},s={...t,namespace:e},{db:o}=await Pi({indexedDB:this.indexedDB,log:r.log,namespace:r.namespace}),a=await Ai({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 Ei(o,Ct(s.namespace),s,this.indexedDB),await Ei(a,st(s.namespace),s,this.indexedDB),await pe(o),await pe(a)}}},Fi=class{constructor(n,e){this.indexedDB=n;this.namespace=e;this.openMetadata=async n=>{let{db:e}=await Pi({indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return this.metadataDb=e,n.persistenceShutdownHandler.register(()=>pe(e)),new un(e,n)};this.openDocuments=async n=>{let e=await Ai({version:n.schema.version,indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return n.persistenceShutdownHandler.register(()=>pe(e)),new fn(e,n)};this.applyMigration=async(n,e)=>{n.log("debug","Applying migration",e.newSchema.version,e),await ls(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 dn(this.metadataDb,n))}};function ds(i,n){return`@@wip-${i}-${Ne(n)}`}function us({migration:i,newOids:n,ctx:e}){return i.allCollections.reduce((t,r)=>(t[r]={put:async(s,o)=>{Ke(i.newSchema.collections[r],s);let a=s[i.newSchema.collections[r].primaryKey],f=X(r,a);return n.push(f),await e.time.withMigrationTime(i.version,()=>e.meta.insertData({operations:e.patchCreator.createInitialize(s,f,o?.access),isLocal:!0})),s},delete:async s=>{let o=X(r,s);await e.time.withMigrationTime(i.version,()=>e.meta.deleteDocument(o))}},t),{})}function Oa({migration:i,context:n,documents:e}){return i.oldCollections.reduce((t,r)=>(t[r]={get:async s=>{let o=X(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(f=>n.meta.getDocumentSnapshot(f,{to:n.time.nowWithVersion(i.oldSchema.version)})))}},t),{})}async function fs({migration:i,context:n,ns:e}){let t={...n,schema:i.oldSchema};if(i.oldSchema.version===0)return Ia({migration:i,context:t});let r=new Array,s=await e.openDocuments(t),o=Oa({migration:i,context:t,documents:s}),a=us({migration:i,newOids:r,ctx:t}),f=async I=>{await n.meta.deleteCollection(I)},p=new Array;return{log:n.log,newOids:r,deleteCollection:f,migrate:async(I,w)=>{let P=await o[I].findAll();n.log("debug",`Migrating ${P.length} documents in ${I}`),await Promise.all(P.filter(Boolean).map(async y=>{let _=oe(y);M(!!_,`Document is missing an OID: ${JSON.stringify(y)}`);let D=await n.meta.getDocumentAuthz(_),O=le(y),E=await w(y);if(E){St(O),St(E),Ze(E);let B=Ot(O,E,()=>n.time.zeroWithVersion(i.version),void 0,[],{mergeUnknownObjects:!0,authz:D});B.length>0&&await n.meta.insertData({operations:B,isLocal:!0})}}))},queries:o,mutations:a,awaitables:p,close:async()=>{await s.close()}}}function Ia({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=us({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 hs({ctx:i,documents:n,migration:e,engine:t}){let r=await _a({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=>ae(p).collection===s),...r.filter(p=>ae(p).collection===s));let f=(await Promise.all(o.map(async p=>{try{let m=await i.meta.getDocumentSnapshot(p);return[p,m]}catch(m){return i.log("error","Could not regenerate snapshot during migration for oid",p,"this document will not be preserved",m),null}}))).filter(p=>!!p);await n.saveEntities(f.map(([p,m])=>({oid:p,getSnapshot(){return m}})),{collections:[s]})}}async function _a({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=>z(r.oid))))}function ps({currentVersion:i,targetVersion:n,migrations:e}){let t=ms({currentVersion:i,targetVersion:n,migrations:e});if(!t)throw new Z(Z.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 ms({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=ms({currentVersion:r.newSchema.version,targetVersion:n,migrations:e});if(s)return[r,...s]}return null}async function gs({context:i,version:n}){let e=await i.persistence.openNamespace(i.namespace,i);await Ea(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=ps({currentVersion:t,targetVersion:n,migrations:i.migrations});r.length>0&&(i.log("debug","Migrations to run:",r.map(s=>s.version)),await Da({context:i,ns:e,toRun:r}))})}async function Ea(i,n){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,n):await n()}async function Da({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 fs({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 hs({ctx:r,migration:t,engine:s,documents:o}),await o.close(),r.log("debug",`Migration of ${r.namespace} complete.`),r.log("info",`
|
|
7
7
|
\u2B06\uFE0F v${t.newSchema.version} Migration complete. Here's the rundown:
|
|
8
8
|
- Added collections: ${t.addedCollections.join(", ")}
|
|
9
9
|
- Removed collections: ${t.removedCollections.join(", ")}
|
|
10
10
|
- Changed collections: ${t.changedCollections.join(", ")}
|
|
11
11
|
- New indexes: ${Object.keys(t.addedIndexes).map(a=>t.addedIndexes[a].map(f=>`${a}.${f.name}`)).flatMap(a=>a).join(", ")}
|
|
12
12
|
- Removed indexes: ${Object.keys(t.removedIndexes).map(a=>t.removedIndexes[a].map(f=>`${a}.${f.name}`)).flatMap(a=>a).join(", ")}
|
|
13
|
-
`)}i.pauseRebasing=!1}var fn=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 hn=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,f=[];if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;await this.db.iterateEntityOperations(n,m=>{(!r||m.timestamp>r.timestamp)&&(s=je(s,m.data,f),m.data.op==="initialize"&&(a=m.authz)),o++},{to:e,transaction:t}),s&&$(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"),f.length){let m=f.filter(ye);m.length&&this.ctx.internalEvents.emit("filesDeleted",m)}})(),p}}};var pn=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(Yt)}};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(f=>{r.push(Yt(f)),s.add(z(f.oid))},{after:t,transaction:o})):(this.ctx.log("debug","Syncing all operations"),await this.db.iterateAllOperations(f=>{r.push(Yt(f)),s.add(z(f.oid))},{transaction:o}));let a=[];return t||await this.db.iterateAllBaselines(f=>{a.push(f)},{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 ys=Te(Ne(),1),mn=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(z(r.oid))}),Array.from(t)};this.deleteDocument=async n=>{let e=new Set,t=z(n);return M(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=z(n);return M(t===n,"Must be root document OID"),this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async r=>{let s=[];await this.db.iterateDocumentBaselines(t,f=>{s.push(f)},{transaction:r});let o=new Map;for(let f of s)f.snapshot&&$(f.snapshot,f.oid),o.set(f.oid,f.snapshot);await this.db.iterateDocumentOperations(t,f=>{let p=o.get(f.oid)||void 0,m=je(p,f.data);m&&$(m,f.oid),o.set(f.oid,m)},{transaction:r,to:e.to||this.ctx.time.now});let a=o.get(t);return a&&Gt(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,ys.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);M(!!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 hn(n,this,e),this.messageCreator=new pn(n,this,e)}};var gn=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}=ae(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 Ct(i){let n=i;if(i.schema.wip&&(n.namespace=ds(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 Z(Z.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 mn(await e.openMetadata(i),i),n.log("info","Opening persistence files"),n.files=new fn(await e.openFiles(n),n),n.log("info","Migrating document database"),await gs({context:n,version:i.schema.version}),n.log("info","Opening persistence documents"),n.documents=new gn(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 bs(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 Ct({...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 Re});await r.meta.resetFrom(n.data);let s=new Set;for(let a of n.data.baselines)s.add(z(a.oid));for(let a of n.data.operations)s.add(z(a.oid));let o=await Promise.all(Array.from(s).map(async a=>{let f=await r.meta.getDocumentSnapshot(a);return{oid:a,getSnapshot:()=>f}}));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,f=await Ct({...r,persistenceShutdownHandler:new Re,schema:a});i.log("debug","Upgraded imported data to current schema"),await f.persistenceShutdownHandler.shutdown(),i.log("debug","Shut down upgraded databases")}if(await i.persistenceShutdownHandler.shutdown(),await i.persistence.copyNamespace(t,i.namespace,i),await Ct(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 Z(Z.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 Z(Z.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()}var at=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}};var yn=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 M(r,`Document must have a primary key: ${t.toString()} (got: ${JSON.stringify(e)})`),X(n,r)};this.addDefaults=(n,e)=>{let t=this.schema.collections[n];return qe(t,e)};this.validate=(n,e)=>{let t=this.schema.collections[n];return Yr(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 f=this.schema.collections[n];t.access!=="shared"&&e[f.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=X(n,e);return this.entities.delete(r,t)};this.deleteAll=async(n,e={})=>this.entities.deleteAll(n.map(([t,r])=>X(t,r)),e);this.deleteAllFromCollection=async(n,e,t={})=>this.entities.deleteAll(e.map(r=>X(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 Ri=Te(Ne(),1);function Pa(i){return{id:(0,Ri.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function ct(i,n){if(typeof window<"u"&&tt(i)){let e=Pa(i);return n(e),xt(e.id)}if(Jt(i)){let e={...i,id:(0,Ri.default)()};return n(e),xt(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=ct(i[e],n);return i}if(typeof i=="object"){for(let e in i)i[e]=ct(i[e],n);return i}return i}var bn=class{constructor({initial:n}={}){this.cache=new Map;this.get=n=>{if(this.cache.has(n.oid))return this.cache.get(n.oid);let e=new de(n);return this.cache.set(n.oid,e),e};this.has=n=>this.cache.has(n);this.getCached=n=>this.cache.get(n);if(n)for(let e of n)this.cache.set(e.oid,e)}};function vs(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 de=class i extends N{constructor({oid:e,schema:t,entityFamily:r,parent:s,ctx:o,metadataFamily:a,readonlyKeys:f,files:p,storeEvents:m,deleteSelf:_}){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=Me(this.schema,e);return M(t,`No schema for key ${e}`),t};this.validate=ns(()=>(this.validationError=Ae({field:this.schema,value:this.rawView,fieldPath:this.fieldPath,depth:1})??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 xe?e(s):s);return $(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>(a instanceof i||a instanceof xe?s[o]=e(a):s[o]=a,s),{});return $(r,this.oid),r}};this.getSnapshot=()=>this.viewWithMappedChildren(e=>e.getSnapshot());this.addPendingOperations=e=>{if(this.ctx.log("debug","Entity: adding pending operations",this.oid),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.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.getChild=(e,t)=>{let r=Me(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)=>vs(this,e,r);this.get=e=>{Ti(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=Me(this.schema,e);if(!s)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);if(W(r))if(ye(r)){if(s.type!=="file")throw new Error(`Expected file schema for key ${String(e)}, got ${s.type}`);let o=this.files.get(r.id,{downloadRemote:!!s.downloadRemote,ctx:this.ctx});return o.subscribe("change",()=>{this.deepChange(this,{isLocal:!1,oid:this.oid})}),o}else return this.getChild(e,r.id);else return this.schema.type==="map"&&r===void 0?void 0:Ae({field:s,value:r,fieldPath:[...this.fieldPath,e],depth:1,requireDefaults:!0})?Ce(s)?yi(s):ve(s)?null:void 0:r};this.getOrSet=(e,t)=>{Ti(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()}`);tt(e)||(e=le(e,!1));let r=Me(this.schema,t);if(r){Ke(e,r);let s=Ae({field:r,value:e,fieldPath:[...this.fieldPath,t]});if(s)throw new Error(`Validation error: ${s.message}`,{cause:s})}return ct(e,this.files.add)};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 ce(e.oid);if(e instanceof xe)return xt(e.id);if(typeof e=="object"){let t=fe(e);if(!t||!this.entityFamily.has(t))throw new Error(`Cannot move object ${JSON.stringify(e)} which does not exist in this list`);return ce(t)}else return e};this.set=(e,t,r)=>{Ti(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)Ca(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}={})=>{if(!t&&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 o={};$(o,this.oid);for(let[a,f]of Object.entries(e)){if(this.readonlyKeys.includes(a))throw new Error(`Cannot set readonly key ${a.toString()}`);if(f===void 0&&!s)continue;let p=Me(this.schema,a);p&&Ke(f,p),o[a]=this.processInputValue(f,a)}this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(),o,{mergeUnknownObjects:!r,defaultUndefined: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(W(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 W(t)?this.view.some(r=>{if(W(r))return Ze(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()};M(!!e,"oid is required"),this.oid=e,this.readonlyKeys=f||[],this.ctx=o,this.files=p,this.schema=t,this.entityFamily=r||new bn({initial:[this]}),this.metadataFamily=a,this.storeEvents=m,this.parent=s,this._deleteSelf=_,this.parent||(m.add.attach(this.onAdd),m.replace.attach(this.onReplace),m.resetAll.attach(this.onResetAll))}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&&!ve(this.schema)||this.schema.type==="array"&&!Array.isArray(e)||(this.schema.type==="object"||this.schema.type==="map")&&!V(e))return Ce(this.schema)?yi(this.schema):null;if(this.cachedView=this.isList?[]:{},$(this.cachedView,this.oid),Array.isArray(e)){let r=Me(this.schema,0);if(!r)this.ctx.log("error","No child field schema for list entity.",this.oid);else for(let s=0;s<e.length;s++){let o=this.get(s);this.childIsNull(o)&&!ve(r)?this.ctx.log("error","Child missing in non-nullable field",this.oid,"index:",s):this.cachedView.push(o)}}else if(V(e)){let r=this.schema.type==="object"?Object.keys(this.schema.properties):Object.keys(e);for(let s of r){let o=Me(this.schema,s);if(!o){this.ctx.log("error","No child field schema for object entity at key",s),this.schema.type==="map"?this.cachedView={}:this.cachedView=null;break}let a=this.get(s);if(this.childIsNull(a)&&!ve(o)){if(this.ctx.log("error","Child entity is missing for non-nullable field",this.oid,"key:",s),this.schema.type!=="map"){this.cachedView=null;break}}else this.cachedView[s]=a}}return this.cachedView}get uid(){return this.oid}get deleted(){return this.viewData.deleted||this.view===null}get invalid(){return!!this.validate()}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}[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 Ti(i){if(typeof i=="symbol")throw new Error("Symbol keys aren't supported")}function Ca(i){if(typeof i!="number")throw new Error("Only number keys are supported in list entities")}var Bi=class{constructor({oid:n,ctx:e,confirmedOperations:t,pendingOperations:r,baseline:s}){this.baseline=null;this.confirmedOperations=[];this.pendingOperations=[];this.computeView=(n=!1)=>{let e=le(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=n?s:this.applyOperations(s.view,s.deleted,this.pendingOperations,s.latestTimestamp,null);o.authz&&(r=o.authz),o.view&&$(o.view,this.oid);let a=!!s.latestTimestamp&&ii(s.latestTimestamp,this.ctx.time.now)<0,f=!this.baseline&&!this.pendingOperations.length&&!this.confirmedOperations.length;f&&this.ctx.log("warn",`Tried to load Entity ${this.oid} with no data`);let p=o.latestTimestamp??s.latestTimestamp??t,m=p?ri(p):0;return!o.view&&!o.deleted&&!f&&this.ctx.log("warn",`Entity ${this.oid} has no view, no deleted flag, and not empty`),{view:o.view??void 0,deleted:o.deleted,empty:f,fromOlderVersion:a,updatedAt:m,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.discardPendingOperation=n=>{this.pendingOperations=this.pendingOperations.filter(e=>e.timestamp!==n.timestamp)};this.applyOperations=(n,e,t,r,s)=>{let o,a,f=this.ctx.time.now;for(let p of t)if(!(s&&p.timestamp<=s)){if(ii(p.timestamp,f)>0){o=p.timestamp;continue}p.data.op==="delete"?e=!0:(n=je(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}};M(n,"oid is required"),this.ctx=e,this.oid=n,t&&(this.confirmedOperations=t),r&&(this.pendingOperations=r),s&&(this.baseline=s)}},vn=class{constructor({ctx:n,onPendingOperations:e,rootOid:t}){this.entities=new Map;this.get=n=>(M(n,"oid is required"),this.entities.has(n)||this.entities.set(n,new Bi({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(!De(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(!De(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=>{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.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(!De(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(!De(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 At="@@default",wn=class{constructor({batchTimeout:n=200,ctx:e,entities:t}){this.currentBatchKey=At;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],f=s[a.oid];if(f&&qr(a,f)){this.entities.discardPendingOperation(a);continue}let p=Kr(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=At,o),commit:async()=>(await this.batcher.flush(At),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});for(let r of e)r.timestamp=this.ctx.time.now;return await this.commitOperations(e,{undoable:!1}),t}:null};this.getInverseOperations=async({ops:n,source:e})=>{let t=It(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(z(o)))?.__getViewData__(o,"confirmed");if(!p){this.ctx.log("warn","could not find entity",o,"for undo operation",n);return}let m=ts(o,p.view,a,s);r.unshift(...m)})),r};this.ctx=e,this.entities=t,this.defaultBatchTimeout=n,this.batcher=new it(this.flushOperations),this.batcher.add({key:At,items:[],max:100,timeout:n,userData:{undoable:!0}})}get isDefaultBatch(){return this.currentBatchKey===At}};var Cn=Te(Zs(),1);var An=class extends ne{constructor({ctx:e,files:t}){super();this.events={add:new Cn.WeakEvent,replace:new Cn.WeakEvent,resetAll:new Cn.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(m=>z(m.oid)).concat(r.map(m=>z(m.oid))))),o=$r(t),a=zr(r);this.ctx.log("debug","Applying data to live entities");for(let m of s){let _=o[m],w=a[m]??[],P=It(w),y=e.reset?this.events.replace:this.events.add,I=this.pendingEntityPromises.get(m);I?(this.ctx.log("debug","Waiting for ongoing entity hydration",m),I.then(()=>{y.invoke(this,{oid:m,baselines:_,operations:P,isLocal:!1})})):(this.ctx.log("debug","Applying data to entity",m),y.invoke(this,{oid:m,baselines:_,operations:P,isLocal:!1}))}let f={abort:this.abortDataQueueController.signal};await this.ctx.meta.insertData(e,f),this.ctx.log("debug","Data processing complete, all data saved to metadata db.");let p=await Promise.all(s.map(async m=>await this.hydrate(m,f)??{oid:m,getSnapshot(){return null}}));try{this.ctx.log("debug","Saving entities to queryable storage"),await this.ctx.documents.saveEntities(p,f)}catch(m){this.disposed?this.ctx.log("warn","Error saving entities to queryable storage - EntityStore is disposed",m):this.ctx.log("error","Error saving entities to queryable storage",m)}};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}=ae(t);qt(e);let a=ct(e,this.files.add);$(a,t);let f=this.constructEntity(t);if(!f)throw new Error(`Could not put new document: no schema exists for collection ${o}`);let p=this.ctx.patchCreator.createInitialize(a,t);s&&p.forEach(_=>{_.authz=s}),await this.batcher.commitOperations(p,{undoable:!!r,source:f});let m=It(p);return this.events.add.invoke(this,{operations:m,isLocal:!0,oid:t}),this.cache.set(t,this.ctx.weakRef(f)),f};this.deleteAll=async(e,t)=>{this.ctx.log("info","Deleting documents",e),M(e.every(o=>o===z(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__(),f=this.ctx.patchCreator.createDeleteAll(a);for(let p of f)p.authz=o.access;s.push(...f)}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=>{M(!!e,"Cannot construct entity without OID");let{collection:t}=ae(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 vn({ctx:this.ctx,onPendingOperations:this.onPendingOperations,rootOid:e});return new de({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=z(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 wn({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}};var dt=Symbol("entity-file-update"),Fn=Symbol("entity-file-mark-failed"),qa,Ha,xe=class extends N{constructor(e,{downloadRemote:t=!1,ctx:r}){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[qa]=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.emit("change")};this[Ha]=()=>{this._failed=!0,this._loading=!1,this.emit("change")};this.onUploaded=e=>{this._fileData??=e,this._uploaded=!0,this.ctx.log("debug","File marked uploaded",this.id,this._fileData),this.emit("change")};this.destroy=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this.dispose()};this.ctx=r,this._downloadRemote=t,this.unsubscribes.push(this.ctx.internalEvents.subscribe(`fileUploaded:${e}`,this.onUploaded))}static{qa=dt,Ha=Fn}get downloadRemote(){return this._downloadRemote}get isFile(){return!0}get isUploaded(){return this._uploaded||this._fileData?.remote||!1}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 Rn=class extends ne{constructor({sync:e,context:t}){super();this.cache=new Map;this.add=async e=>{let t=this.cache.get(e.id);t||(t=new xe(e.id,{ctx:this.context}),this.cache.set(e.id,t)),e.remote||t[dt](e);let r=await this.context.files.add(e);t[dt](r)};this.get=(e,t)=>{if(this.cache.has(e))return this.cache.get(e);let r=new xe(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[Fn]())}catch(r){this.context.log("error","Failed to load file",r),e[Fn]()}};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))}};function Qa(i){return i!==null}function Ji(i){return Array.isArray(i)?i.map(Ji).filter(Qa):i instanceof de&&i.deleted?null:i}function Ve(i,n){return!i&&!n||i&&n&&ze(i)===ze(n)}var Gi=Symbol("ON_ALL_UNSUBSCRIBED"),ue=Symbol("UPDATE"),Wa,me=class extends ne{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 de&&(this._internalUnsubscribes.push(t.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(t.subscribe("restore",this.refreshValue)))}):e instanceof de&&(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[Wa]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this.isListQuery=Array.isArray(e),this._events=new N(f=>{f==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=t,this.key=s,this.collection=r;let a=o||(f=>f.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",f=>{a(f)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{Wa=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 Tn=class extends me{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=X(r.collection,e),this.hydrate=t}};var Ja,Bn=class extends me{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[Ja]=e=>{Ve(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Ja=ue}};var Ga,kn=class extends me{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[Ga]=e=>{Ve(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t,this._pageSize=r,this._page=s}static{Ga=ue}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var Ya,jn=class extends me{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[Ya]=e=>{Ve(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=t}static{Ya=ue}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var Xa,Ln=class extends me{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[Xa]=e=>{Ve(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Xa=ue}};var Mn=class{constructor({collection:n,cache:e,entities:t,context:r,documentManager:s}){this.serializeIndex=n=>n?ze(n):"";this.get=n=>{let e=`get:${this.collection}:${n}`;return this.cache.getOrSet(e,()=>new Tn({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[ue](n)})};this.findAll=({index:n,key:e}={})=>{let t=e||`findAll:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new Ln({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[ue](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 kn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:t}),o=>{o[ue](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[ue](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 ne{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"),Za,Rt=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[Za]=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,f]of Object.entries(t.peerPresence))this.isSelf(e,f)?(this._self=f,this._selfReplicaIds.add(f.replicaId),s=!0,this.emit("selfChanged",f)):(r=!0,o.add(a),this._peers[a]=f,this.emit("peerChanged",a,f))}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=xi,this.self.id="",this.self.replicaId="",s.meta.getLocalReplica().then(o=>{this.self.replicaId=o.id}),this._updateBatcher=new it(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:t,items:[],key:"default"})}static{Za=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 Vn=class extends ne{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 f=await this.ctx.environment.fetch(s+`/${e.id}`,{method:"POST",body:a,credentials:"include",headers:{Authorization:`Bearer ${o}`}});if(f.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 f.text();return this.ctx.log("error","File upload failed",f.status,p),f.status<500||t.current>=t.max?{success:!1,error:`Failed to upload file: ${f.status} ${p}`}:(await new Promise(m=>setTimeout(m,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}}catch(f){return this.ctx.log("error","File upload failed",f),t.current>=t.max?{success:!1,error:f.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 ut=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 Nn=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();is(o)&&o.code===Dt.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=Mr(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 ut({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 eo=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 ec(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(eo(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 eo(n)}}function zn(i){this.message=i}function tc(i,n){if(typeof i!="string")throw new zn("Invalid token specified");var e=(n=n||{}).header===!0?0:1;try{return JSON.parse(ec(i.split(".")[e]))}catch(t){throw new zn("Invalid token specified: "+t.message)}}zn.prototype=new Error,zn.prototype.name="InvalidTokenError";var to=tc;var $n=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(f=>{if(f.ok)return f.json();throw new Error(`Auth endpoint returned non-200 response: ${f.status}`)})}M(n.accessToken,"No access token provided from auth endpoint");let e=to(n.accessToken);M(e.url,"No sync endpoint provided from auth endpoint"),M(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??Le.Realtime}};var Kn=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}},qn=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 Hn=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 ut;this.reconnectScheduler=new Kn(new qn(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 no(){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 Qn=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 Rt({initialPresence:null,defaultProfile:null,ctx:e})}send(){}async start(){}stop(){}ignoreIncoming(){}reconnect(){}setMode(){}setPullInterval(){}},ft=class extends N{constructor({authEndpoint:e,fetchAuth:t,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:a,pullInterval:f,presenceUpdateBatchTimeout:p,defaultProfile:m,useBroadcastChannel:_,onOutgoingMessage:w,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 Z(Z.Code.Unexpected,void 0,"Active sync has invalid token info");(e.type==="sync"||e.type==="op")&&rs(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 Z(Z.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=w,this.presence=new Rt({initialPresence:r,defaultProfile:m,updateBatchTimeout:p,ctx:y}),this.endpointProvider=new $n({authEndpoint:e,fetchAuth:t},y),this.webSocketSync=new Hn({endpointProvider:this.endpointProvider,presence:this.presence,ctx:y}),this.pushPullSync=new Nn({endpointProvider:this.endpointProvider,presence:this.presence,interval:f,ctx:y}),this.fileSync=new Vn({endpointProvider:this.endpointProvider,ctx:y}),_&&"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 D=()=>{O&&clearTimeout(O);let B=this.presence.getViewPeers().length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;B&&this.mode==="pull"?this.setMode("realtime"):!B&&this.mode==="realtime"&&(O=setTimeout(()=>{this.presence.getViewPeers().length===0&&this.setMode("pull")},1e3))},O;this.presence.subscribe("peersChanged",D),s!=="peers-only"&&this.presence.subscribe("selfChanged",D)}o&&this.start(),P&&no()}get canDoRealtime(){return this.endpointProvider.type===Le.Realtime||this.endpointProvider.type===Le.PassiveRealtime||this.endpointProvider.type===Le.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 io(i){return i.operations.map(t=>t.timestamp).concat(i.baselines?.map(t=>t.timestamp)??[]).reduce((t,r)=>{let s=Nt(r);return s>t?s:t},0)}var ht=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?io(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",t),this.emit("developerError",new Error("Sync failed, see logs or cause",{cause:t})),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:m})=>p+m,0),a=t.baselinesSize.size+t.operationsSize.size,f=a/o;return{collections:e,meta:t,storage:r,totalMetaSize:a,totalCollectionsSize:o,metaToDataRatio:f,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 an(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 bs(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()})}));this.collectionNames=Object.keys(e.schema.collections),this._sync=this.context.config.sync&&!e.schema.wip?new ft(this.context.config.sync,{onData:this.addData,ctx:this.context}):new Qn(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 Rn({sync:this.sync,context:this.context}),this._entities=new An({ctx:this.context,files:this._fileManager}),this._queryCache=new Un({context:e,evictionTime:e.config.queries?.evictionTime}),this._documentManager=new yn(this.schema,this._entities);let t=Lr(()=>{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 Mn({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 Wn=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 sn(new Lt,n.schema.version),t=n.environment||nc,r={closing:!1,entityEvents:new N,globalEvents:new N,internalEvents:new N,log:n.log||Ur,migrations:n.migrations,namespace:n.namespace,originalNamespace:n.namespace,schema:n.schema,oldSchemas:n.oldSchemas,time:e,undoHistory:n.undoHistory||new at,weakRef:a=>n.EXPERIMENTAL_weakRefs?new WeakRef(a):new on(a),patchCreator:new rn(()=>e.now),config:{files:n.files,sync:n.sync,persistence:{disableRebasing:n.disableRebasing,rebaseTimeout:n.rebaseTimeout},queries:n.queries},persistence:n.persistence||new ot(t.indexedDB),environment:t,persistenceShutdownHandler:new Re,pauseRebasing:!1};r.log("info","Initializing client",{namespace:r.namespace,version:n.schema.version,persistence:r.persistence.name});let s=await Ct(r),o=new ht(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 an(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}},nc={WebSocket:typeof WebSocket<"u"?WebSocket:void 0,fetch:typeof window<"u"?window.fetch.bind(window):fetch,indexedDB:typeof indexedDB<"u"?indexedDB:void 0};var er=Te(Ne(),1);function ic(i){return i?er.default.slug():(0,er.default)()}var rc={private:He.onlyMe(),public:void 0};function sc(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}`}}window.Verdant=tr;
|
|
13
|
+
`)}i.pauseRebasing=!1}var hn=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 pn=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,f=[];if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;await this.db.iterateEntityOperations(n,m=>{(!r||m.timestamp>r.timestamp)&&(s=ke(s,m.data,f),m.data.op==="initialize"&&(a=m.authz)),o++},{to:e,transaction:t}),s&&$(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"),f.length){let m=f.filter(ye);m.length&&this.ctx.internalEvents.emit("filesDeleted",m)}})(),p}}};var mn=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(Xt)}};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(f=>{r.push(Xt(f)),s.add(z(f.oid))},{after:t,transaction:o})):(this.ctx.log("debug","Syncing all operations"),await this.db.iterateAllOperations(f=>{r.push(Xt(f)),s.add(z(f.oid))},{transaction:o}));let a=[];return t||await this.db.iterateAllBaselines(f=>{a.push(f)},{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 ys=Re(Ve(),1),gn=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(z(r.oid))}),Array.from(t)};this.deleteDocument=async n=>{let e=new Set,t=z(n);return M(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=z(n);return M(t===n,"Must be root document OID"),this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async r=>{let s=[];await this.db.iterateDocumentBaselines(t,f=>{s.push(f)},{transaction:r});let o=new Map;for(let f of s)f.snapshot&&$(f.snapshot,f.oid),o.set(f.oid,f.snapshot);await this.db.iterateDocumentOperations(t,f=>{let p=o.get(f.oid)||void 0,m=ke(p,f.data);m&&$(m,f.oid),o.set(f.oid,m)},{transaction:r,to:e.to||this.ctx.time.now});let a=o.get(t);return a&&Yt(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,ys.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);M(!!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 pn(n,this,e),this.messageCreator=new mn(n,this,e)}};var yn=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}=ae(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 At(i){let n=i;if(i.schema.wip&&(n.namespace=ds(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 Z(Z.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 gn(await e.openMetadata(i),i),n.log("info","Opening persistence files"),n.files=new hn(await e.openFiles(n),n),n.log("info","Migrating document database"),await gs({context:n,version:i.schema.version}),n.log("info","Opening persistence documents"),n.documents=new yn(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 bs(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 At({...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(z(a.oid));for(let a of n.data.operations)s.add(z(a.oid));let o=await Promise.all(Array.from(s).map(async a=>{let f=await r.meta.getDocumentSnapshot(a);return{oid:a,getSnapshot:()=>f}}));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,f=await At({...r,persistenceShutdownHandler:new Fe(i.log),schema:a});i.log("debug","Upgraded imported data to current schema"),await f.persistenceShutdownHandler.shutdown(),i.log("debug","Shut down upgraded databases")}if(await i.persistenceShutdownHandler.shutdown(),await i.persistence.copyNamespace(t,i.namespace,i),await At(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 Z(Z.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 Z(Z.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()}var at=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}};var bn=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 M(r,`Document must have a primary key: ${t.toString()} (got: ${JSON.stringify(e)})`),X(n,r)};this.addDefaults=(n,e)=>{let t=this.schema.collections[n];return Ke(t,e)};this.validate=(n,e)=>{let t=this.schema.collections[n];return Yr(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 f=this.schema.collections[n];t.access!=="shared"&&e[f.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=X(n,e);return this.entities.delete(r,t)};this.deleteAll=async(n,e={})=>this.entities.deleteAll(n.map(([t,r])=>X(t,r)),e);this.deleteAllFromCollection=async(n,e,t={})=>this.entities.deleteAll(e.map(r=>X(n,r)),t);this.clone=async(n,e,t={})=>{if(!Jt(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 Ri=Re(Ve(),1);function Pa(i){return{id:(0,Ri.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function ct(i,n){if(typeof window<"u"&&et(i)){let e=Pa(i);return n(e),xt(e.id)}if(Gt(i)){let e={...i,id:(0,Ri.default)()};return n(e),xt(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=ct(i[e],n);return i}if(typeof i=="object"){for(let e in i)i[e]=ct(i[e],n);return i}return i}var vn=class{constructor({initial:n}={}){this.cache=new Map;this.get=n=>{if(this.cache.has(n.oid))return this.cache.get(n.oid);let e=new de(n);return this.cache.set(n.oid,e),e};this.has=n=>this.cache.has(n);this.getCached=n=>this.cache.get(n);if(n)for(let e of n)this.cache.set(e.oid,e)}};function vs(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 de=class i extends N{constructor({oid:e,schema:t,entityFamily:r,parent:s,ctx:o,metadataFamily:a,readonlyKeys:f,files:p,storeEvents:m,deleteSelf:I}){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=Le(this.schema,e);return M(t,`No schema for key ${e}`),t};this.validate=ns(()=>(this.validationError=Ce({field:this.schema,value:this.rawView,fieldPath:this.fieldPath,depth:1})??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 we?e(s):s);return $(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>(a instanceof i||a instanceof we?s[o]=e(a):s[o]=a,s),{});return $(r,this.oid),r}};this.getSnapshot=()=>this.viewWithMappedChildren(e=>e.getSnapshot());this.addPendingOperations=e=>{if(this.ctx.log("debug","Entity: adding pending operations",this.oid),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.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.getChild=(e,t)=>{let r=Le(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)=>vs(this,e,r);this.get=e=>{Ti(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=Le(this.schema,e);if(!s)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);if(W(r))if(ye(r)){if(s.type!=="file")throw new Error(`Expected file schema for key ${String(e)}, got ${s.type}`);let o=this.files.get(r.id,{downloadRemote:!!s.downloadRemote,ctx:this.ctx});return o.subscribe("change",()=>{this.deepChange(this,{isLocal:!1,oid:this.oid})}),o}else return this.getChild(e,r.id);else return this.schema.type==="map"&&r===void 0?void 0:Ce({field:s,value:r,fieldPath:[...this.fieldPath,e],depth:1,requireDefaults:!0})?nt(s):r};this.getOrSet=(e,t)=>{Ti(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()}`);et(e)||(e=le(e,!1));let r=Le(this.schema,t);if(r){$e(e,r);let s=Ce({field:r,value:e,fieldPath:[...this.fieldPath,t]});if(s)throw new Error(`Validation error: ${s.message}`,{cause:s})}return ct(e,this.files.add)};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 ce(e.oid);if(e instanceof we)return xt(e.id);if(typeof e=="object"){let t=fe(e);if(!t||!this.entityFamily.has(t))throw new Error(`Cannot move object ${JSON.stringify(e)} which does not exist in this list`);return ce(t)}else return e};this.set=(e,t,r)=>{Ti(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)Ca(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={};$(a,this.oid);for(let[f,p]of Object.entries(e)){if(this.readonlyKeys.includes(f))throw new Error(`Cannot set readonly key ${f.toString()}`);if(p===void 0&&!s)continue;let m=Le(this.schema,f);m&&$e(p,m),a[f]=this.processInputValue(p,f)}this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(),a,{mergeUnknownObjects:!r,defaultUndefined: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(W(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 W(t)?this.view.some(r=>{if(W(r))return Xe(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()};M(!!e,"oid is required"),this.oid=e,this.readonlyKeys=f||[],this.ctx=o,this.files=p,this.schema=t,this.entityFamily=r||new vn({initial:[this]}),this.metadataFamily=a,this.storeEvents=m,this.parent=s,this._deleteSelf=I,this.parent||(m.add.attach(this.onAdd),m.replace.attach(this.onReplace),m.resetAll.attach(this.onResetAll))}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&&!Pe(this.schema)||this.schema.type==="array"&&!Array.isArray(e)||(this.schema.type==="object"||this.schema.type==="map")&&!V(e))return Et(this.schema)?nt(this.schema):null;if(this.cachedView=this.isList?[]:{},$(this.cachedView,this.oid),Array.isArray(e)){let r=Le(this.schema,0);if(!r)this.ctx.log("error","No child field schema for list entity.",this.oid);else for(let s=0;s<e.length;s++){let o=this.get(s);this.childIsNull(o)&&!Pe(r)?this.ctx.log("error","Child missing in non-nullable field",this.oid,"index:",s):this.cachedView.push(o)}}else if(V(e)){let r=this.schema.type==="object"?Object.keys(this.schema.properties):Object.keys(e);for(let s of r){let o=Le(this.schema,s);if(!o){this.ctx.log("error","No child field schema for object entity at key",s),this.schema.type==="map"?this.cachedView={}:this.cachedView=null;break}let a=this.get(s);if(this.childIsNull(a)&&!Pe(o)){if(this.ctx.log("error","Child entity is missing for non-nullable field",this.oid,"key:",s),this.schema.type!=="map"){this.cachedView=null;break}}else this.cachedView[s]=a}}return this.cachedView}get uid(){return this.oid}get deleted(){return this.viewData.deleted||this.view===null}get invalid(){return!!this.validate()}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}[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 Ti(i){if(typeof i=="symbol")throw new Error("Symbol keys aren't supported")}function Ca(i){if(typeof i!="number")throw new Error("Only number keys are supported in list entities")}var Bi=class{constructor({oid:n,ctx:e,confirmedOperations:t,pendingOperations:r,baseline:s}){this.baseline=null;this.confirmedOperations=[];this.pendingOperations=[];this.computeView=(n=!1)=>{let e=le(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=n?s:this.applyOperations(s.view,s.deleted,this.pendingOperations,s.latestTimestamp,null);o.authz&&(r=o.authz),o.view&&$(o.view,this.oid);let a=!!s.latestTimestamp&&ri(s.latestTimestamp,this.ctx.time.now)<0,f=!this.baseline&&!this.pendingOperations.length&&!this.confirmedOperations.length;f&&this.ctx.log("warn",`Tried to load Entity ${this.oid} with no data`);let p=o.latestTimestamp??s.latestTimestamp??t,m=p?si(p):0;return!o.view&&!o.deleted&&!f&&this.ctx.log("warn",`Entity ${this.oid} has no view, no deleted flag, and not empty`),{view:o.view??void 0,deleted:o.deleted,empty:f,fromOlderVersion:a,updatedAt:m,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.discardPendingOperation=n=>{this.pendingOperations=this.pendingOperations.filter(e=>e.timestamp!==n.timestamp)};this.applyOperations=(n,e,t,r,s)=>{let o,a,f=this.ctx.time.now;for(let p of t)if(!(s&&p.timestamp<=s)){if(ri(p.timestamp,f)>0){o=p.timestamp;continue}p.data.op==="delete"?e=!0:(n=ke(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}};M(n,"oid is required"),this.ctx=e,this.oid=n,t&&(this.confirmedOperations=t),r&&(this.pendingOperations=r),s&&(this.baseline=s)}},wn=class{constructor({ctx:n,onPendingOperations:e,rootOid:t}){this.entities=new Map;this.get=n=>(M(n,"oid is required"),this.entities.has(n)||this.entities.set(n,new Bi({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(!Ee(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(!Ee(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=>{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.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(!Ee(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(!Ee(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 Ft="@@default",xn=class{constructor({batchTimeout:n=200,ctx:e,entities:t}){this.currentBatchKey=Ft;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],f=s[a.oid];if(f&&qr(a,f)){this.entities.discardPendingOperation(a);continue}let p=Kr(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=Ft,o),commit:async()=>(await this.batcher.flush(Ft),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});for(let r of e)r.timestamp=this.ctx.time.now;return await this.commitOperations(e,{undoable:!1}),t}:null};this.getInverseOperations=async({ops:n,source:e})=>{let t=It(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(z(o)))?.__getViewData__(o,"confirmed");if(!p){this.ctx.log("warn","could not find entity",o,"for undo operation",n);return}let m=ts(o,p.view,a,s);r.unshift(...m)})),r};this.ctx=e,this.entities=t,this.defaultBatchTimeout=n,this.batcher=new it(this.flushOperations),this.batcher.add({key:Ft,items:[],max:100,timeout:n,userData:{undoable:!0}})}get isDefaultBatch(){return this.currentBatchKey===Ft}};var An=Re(Zs(),1);var Fn=class extends ne{constructor({ctx:e,files:t}){super();this.events={add:new An.WeakEvent,replace:new An.WeakEvent,resetAll:new An.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(m=>z(m.oid)).concat(r.map(m=>z(m.oid))))),o=$r(t),a=zr(r);this.ctx.log("debug","Applying data to live entities");for(let m of s){let I=o[m],w=a[m]??[],P=It(w),y=e.reset?this.events.replace:this.events.add,_=this.pendingEntityPromises.get(m);_?(this.ctx.log("debug","Waiting for ongoing entity hydration",m),_.then(()=>{y.invoke(this,{oid:m,baselines:I,operations:P,isLocal:!1})})):(this.ctx.log("debug","Applying data to entity",m),y.invoke(this,{oid:m,baselines:I,operations:P,isLocal:!1}))}let f={abort:this.abortDataQueueController.signal};await this.ctx.meta.insertData(e,f),this.ctx.log("debug","Data processing complete, all data saved to metadata db.");let p=await Promise.all(s.map(async m=>await this.hydrate(m,f)??{oid:m,getSnapshot(){return null}}));try{this.ctx.log("debug","Saving entities to queryable storage"),await this.ctx.documents.saveEntities(p,f)}catch(m){this.disposed?this.ctx.log("warn","Error saving entities to queryable storage - EntityStore is disposed",m):this.ctx.log("error","Error saving entities to queryable storage",m)}};this.hydrate=async(e,t)=>{if(!Jt(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}=ae(t);Ht(e);let a=ct(e,this.files.add);$(a,t);let f=this.constructEntity(t);if(!f)throw new Error(`Could not put new document: no schema exists for collection ${o}`);let p=this.ctx.patchCreator.createInitialize(a,t);s&&p.forEach(I=>{I.authz=s}),await this.batcher.commitOperations(p,{undoable:!!r,source:f});let m=It(p);return this.events.add.invoke(this,{operations:m,isLocal:!0,oid:t}),this.cache.set(t,this.ctx.weakRef(f)),f};this.deleteAll=async(e,t)=>{this.ctx.log("info","Deleting documents",e),M(e.every(o=>o===z(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__(),f=this.ctx.patchCreator.createDeleteAll(a);for(let p of f)p.authz=o.access;s.push(...f)}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=>{M(!!e,"Cannot construct entity without OID");let{collection:t}=ae(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 wn({ctx:this.ctx,onPendingOperations:this.onPendingOperations,rootOid:e});return new de({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=z(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 xn({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}};var dt=Symbol("entity-file-update"),Rn=Symbol("entity-file-mark-failed"),qa,Ha,we=class extends N{constructor(e,{downloadRemote:t=!1,ctx:r}){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[qa]=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.emit("change")};this[Ha]=()=>{this._failed=!0,this._loading=!1,this.emit("change")};this.onUploaded=e=>{this._fileData??=e,this._uploaded=!0,this.ctx.log("debug","File marked uploaded",this.id,this._fileData),this.emit("change")};this.destroy=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this.dispose()};this.ctx=r,this._downloadRemote=t,this.unsubscribes.push(this.ctx.internalEvents.subscribe(`fileUploaded:${e}`,this.onUploaded))}static{qa=dt,Ha=Rn}get downloadRemote(){return this._downloadRemote}get isFile(){return!0}get isUploaded(){return this._uploaded||this._fileData?.remote||!1}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 Tn=class extends ne{constructor({sync:e,context:t}){super();this.cache=new Map;this.add=async e=>{let t=this.cache.get(e.id);t||(t=new we(e.id,{ctx:this.context}),this.cache.set(e.id,t)),e.remote||t[dt](e);let r=await this.context.files.add(e);t[dt](r)};this.get=(e,t)=>{if(this.cache.has(e))return this.cache.get(e);let r=new we(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[Rn]())}catch(r){this.context.log("error","Failed to load file",r),e[Rn]()}};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))}};function Qa(i){return i!==null}function Ji(i){return Array.isArray(i)?i.map(Ji).filter(Qa):i instanceof de&&i.deleted?null:i}function Ue(i,n){return!i&&!n||i&&n&&Ne(i)===Ne(n)}var Gi=Symbol("ON_ALL_UNSUBSCRIBED"),ue=Symbol("UPDATE"),Wa,me=class extends ne{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 de&&(this._internalUnsubscribes.push(t.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(t.subscribe("restore",this.refreshValue)))}):e instanceof de&&(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[Wa]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this.isListQuery=Array.isArray(e),this._events=new N(f=>{f==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=t,this.key=s,this.collection=r;let a=o||(f=>f.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",f=>{a(f)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{Wa=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 Bn=class extends me{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=X(r.collection,e),this.hydrate=t}};var Ja,kn=class extends me{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[Ja]=e=>{Ue(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Ja=ue}};var Ga,jn=class extends me{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[Ga]=e=>{Ue(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t,this._pageSize=r,this._page=s}static{Ga=ue}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var Ya,Ln=class extends me{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[Ya]=e=>{Ue(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=t}static{Ya=ue}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var Xa,Mn=class extends me{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[Xa]=e=>{Ue(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Xa=ue}};var Un=class{constructor({collection:n,cache:e,entities:t,context:r,documentManager:s}){this.serializeIndex=n=>n?Ne(n):"";this.get=n=>{let e=`get:${this.collection}:${n}`;return this.cache.getOrSet(e,()=>new Bn({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 kn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[ue](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[ue](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 jn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:t}),o=>{o[ue](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 Ln({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[ue](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 Vn=class extends ne{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"),Za,Tt=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[Za]=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,f]of Object.entries(t.peerPresence))this.isSelf(e,f)?(this._self=f,this._selfReplicaIds.add(f.replicaId),s=!0,this.emit("selfChanged",f)):(r=!0,o.add(a),this._peers[a]=f,this.emit("peerChanged",a,f))}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=xi,this.self.id="",this.self.replicaId="",s.meta.getLocalReplica().then(o=>{this.self.replicaId=o.id}),this._updateBatcher=new it(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:t,items:[],key:"default"})}static{Za=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 ne{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 f=await this.ctx.environment.fetch(s+`/${e.id}`,{method:"POST",body:a,credentials:"include",headers:{Authorization:`Bearer ${o}`}});if(f.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 f.text();return this.ctx.log("error","File upload failed",f.status,p),f.status<500||t.current>=t.max?{success:!1,error:`Failed to upload file: ${f.status} ${p}`}:(await new Promise(m=>setTimeout(m,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}}catch(f){return this.ctx.log("error","File upload failed",f),t.current>=t.max?{success:!1,error:f.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 ut=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();is(o)&&o.code===Pt.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=Mr(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 ut({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 eo=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 ec(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(eo(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 eo(n)}}function $n(i){this.message=i}function tc(i,n){if(typeof i!="string")throw new $n("Invalid token specified");var e=(n=n||{}).header===!0?0:1;try{return JSON.parse(ec(i.split(".")[e]))}catch(t){throw new $n("Invalid token specified: "+t.message)}}$n.prototype=new Error,$n.prototype.name="InvalidTokenError";var to=tc;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(f=>{if(f.ok)return f.json();throw new Error(`Auth endpoint returned non-200 response: ${f.status}`)})}M(n.accessToken,"No access token provided from auth endpoint");let e=to(n.accessToken);M(e.url,"No sync endpoint provided from auth endpoint"),M(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??je.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 ut;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 no(){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 Tt({initialPresence:null,defaultProfile:null,ctx:e})}send(){}async start(){}stop(){}ignoreIncoming(){}reconnect(){}setMode(){}setPullInterval(){}},ft=class extends N{constructor({authEndpoint:e,fetchAuth:t,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:a,pullInterval:f,presenceUpdateBatchTimeout:p,defaultProfile:m,useBroadcastChannel:I,onOutgoingMessage:w,EXPERIMENTAL_backgroundSync:P},{ctx:y,onData:_}){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 Z(Z.Code.Unexpected,void 0,"Active sync has invalid token info");(e.type==="sync"||e.type==="op")&&rs(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 Z(Z.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=_,this.ctx=y,this.onOutgoingMessage=w,this.presence=new Tt({initialPresence:r,defaultProfile:m,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:f,ctx:y}),this.fileSync=new Nn({endpointProvider:this.endpointProvider,ctx:y}),I&&"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 D=()=>{O&&clearTimeout(O);let B=this.presence.getViewPeers().length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;B&&this.mode==="pull"?this.setMode("realtime"):!B&&this.mode==="realtime"&&(O=setTimeout(()=>{this.presence.getViewPeers().length===0&&this.setMode("pull")},1e3))},O;this.presence.subscribe("peersChanged",D),s!=="peers-only"&&this.presence.subscribe("selfChanged",D)}o&&this.start(),P&&no()}get canDoRealtime(){return this.endpointProvider.type===je.Realtime||this.endpointProvider.type===je.PassiveRealtime||this.endpointProvider.type===je.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 io(i){return i.operations.map(t=>t.timestamp).concat(i.baselines?.map(t=>t.timestamp)??[]).reduce((t,r)=>{let s=zt(r);return s>t?s:t},0)}var ht=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?io(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",t),this.emit("developerError",new Error("Sync failed, see logs or cause",{cause:t})),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:m})=>p+m,0),a=t.baselinesSize.size+t.operationsSize.size,f=a/o;return{collections:e,meta:t,storage:r,totalMetaSize:a,totalCollectionsSize:o,metaToDataRatio:f,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 cn(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 bs(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()})}));this.collectionNames=Object.keys(e.schema.collections),this._sync=this.context.config.sync&&!e.schema.wip?new ft(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 Tn({sync:this.sync,context:this.context}),this._entities=new Fn({ctx:this.context,files:this._fileManager}),this._queryCache=new Vn({context:e,evictionTime:e.config.queries?.evictionTime}),this._documentManager=new bn(this.schema,this._entities);let t=Lr(()=>{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 Un({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){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 on(new Mt,n.schema.version),t=n.environment||nc,r={closing:!1,entityEvents:new N,globalEvents:new N,internalEvents:new N,log:n.log||Ur,migrations:n.migrations,namespace:n.namespace,originalNamespace:n.namespace,schema:n.schema,oldSchemas:n.oldSchemas,time:e,undoHistory:n.undoHistory||new at,weakRef:a=>n.EXPERIMENTAL_weakRefs?new WeakRef(a):new an(a),patchCreator:new sn(()=>e.now),config:{files:n.files,sync:n.sync,persistence:{disableRebasing:n.disableRebasing,rebaseTimeout:n.rebaseTimeout},queries:n.queries},persistence:n.persistence||new ot(t.indexedDB),environment:t,persistenceShutdownHandler:new Fe(n.log),pauseRebasing:!1};r.log("info","Initializing client",{namespace:r.namespace,version:n.schema.version,persistence:r.persistence.name});let s=await At(r),o=new ht(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 cn(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}},nc={WebSocket:typeof WebSocket<"u"?WebSocket:void 0,fetch:typeof window<"u"?window.fetch.bind(window):fetch,indexedDB:typeof indexedDB<"u"?indexedDB:void 0};var er=Re(Ve(),1);function ic(i){return i?er.default.slug():(0,er.default)()}var rc={private:qe.onlyMe(),public:void 0};function sc(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}`}}window.Verdant=tr;
|
|
14
14
|
//# sourceMappingURL=index.js.map
|