@verdant-web/store 4.6.1 → 5.0.1
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 +14 -12
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -1
- package/dist/esm/__tests__/fixtures/testStorage.js +3 -3
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/__tests__/queries.test.js +3 -3
- package/dist/esm/__tests__/queries.test.js.map +1 -1
- package/dist/esm/__tests__/schema.test.js +3 -3
- package/dist/esm/__tests__/schema.test.js.map +1 -1
- package/dist/esm/client/Client.d.ts +12 -10
- package/dist/esm/client/Client.js +40 -30
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/context/Time.d.ts +1 -1
- package/dist/esm/context/Time.js +1 -1
- package/dist/esm/context/Time.js.map +1 -1
- package/dist/esm/context/context.d.ts +84 -15
- package/dist/esm/context/context.js +98 -1
- package/dist/esm/context/context.js.map +1 -1
- package/dist/esm/entities/Entity.test.js +0 -1
- package/dist/esm/entities/Entity.test.js.map +1 -1
- package/dist/esm/entities/EntityMetadata.js +11 -5
- package/dist/esm/entities/EntityMetadata.js.map +1 -1
- package/dist/esm/entities/EntityStore.js +9 -7
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/files/EntityFile.js +1 -1
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.js +5 -5
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/index.d.ts +6 -4
- package/dist/esm/index.js +2 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.d.ts +3 -4
- package/dist/esm/internal.js +1 -2
- package/dist/esm/internal.js.map +1 -1
- package/dist/esm/persistence/PersistenceMetadata.d.ts +3 -6
- package/dist/esm/persistence/PersistenceMetadata.js +5 -6
- package/dist/esm/persistence/PersistenceMetadata.js.map +1 -1
- package/dist/esm/persistence/idb/IdbService.d.ts +3 -3
- package/dist/esm/persistence/idb/IdbService.js +0 -1
- package/dist/esm/persistence/idb/IdbService.js.map +1 -1
- package/dist/esm/persistence/idb/idbPersistence.d.ts +9 -10
- package/dist/esm/persistence/idb/idbPersistence.js +11 -4
- package/dist/esm/persistence/idb/idbPersistence.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +2 -2
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +1 -1
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -1
- package/dist/esm/persistence/idb/queries/IdbDocumentDb.d.ts +3 -2
- package/dist/esm/persistence/idb/queries/IdbDocumentDb.js +16 -15
- package/dist/esm/persistence/idb/queries/IdbDocumentDb.js.map +1 -1
- package/dist/esm/persistence/idb/queries/migration/db.js +7 -0
- package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -1
- package/dist/esm/persistence/idb/util.js +27 -17
- package/dist/esm/persistence/idb/util.js.map +1 -1
- package/dist/esm/persistence/interfaces.d.ts +8 -8
- package/dist/esm/persistence/migration/engine.d.ts +5 -3
- package/dist/esm/persistence/migration/engine.js +23 -14
- package/dist/esm/persistence/migration/engine.js.map +1 -1
- package/dist/esm/persistence/migration/finalize.d.ts +5 -3
- package/dist/esm/persistence/migration/finalize.js +5 -4
- package/dist/esm/persistence/migration/finalize.js.map +1 -1
- package/dist/esm/persistence/migration/migrate.d.ts +8 -5
- package/dist/esm/persistence/migration/migrate.js +10 -4
- package/dist/esm/persistence/migration/migrate.js.map +1 -1
- package/dist/esm/persistence/persistence.d.ts +9 -2
- package/dist/esm/persistence/persistence.js +65 -32
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/dist/esm/queries/FindAllQuery.js +1 -1
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/FindInfiniteQuery.js +2 -2
- package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
- package/dist/esm/queries/FindOneQuery.js +1 -1
- package/dist/esm/queries/FindOneQuery.js.map +1 -1
- package/dist/esm/queries/FindPageQuery.js +1 -1
- package/dist/esm/queries/FindPageQuery.js.map +1 -1
- package/dist/esm/sync/PresenceManager.d.ts +2 -2
- package/dist/esm/sync/PresenceManager.js +5 -2
- package/dist/esm/sync/PresenceManager.js.map +1 -1
- package/dist/esm/sync/PushPullSync.js +4 -4
- package/dist/esm/sync/PushPullSync.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +2 -2
- package/dist/esm/sync/Sync.js +17 -14
- package/dist/esm/sync/Sync.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.js +12 -7
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/dist/esm/sync/serviceWorker.d.ts +2 -2
- package/dist/esm/sync/serviceWorker.js +3 -4
- package/dist/esm/sync/serviceWorker.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/fixtures/testStorage.ts +4 -8
- package/src/__tests__/queries.test.ts +3 -5
- package/src/__tests__/schema.test.ts +3 -3
- package/src/client/Client.ts +50 -34
- package/src/context/Time.ts +2 -2
- package/src/context/context.ts +189 -17
- package/src/entities/Entity.test.ts +0 -1
- package/src/entities/EntityMetadata.ts +16 -5
- package/src/entities/EntityStore.ts +14 -10
- package/src/files/EntityFile.ts +1 -1
- package/src/files/FileManager.ts +5 -5
- package/src/index.ts +6 -10
- package/src/internal.ts +10 -11
- package/src/persistence/PersistenceMetadata.ts +9 -11
- package/src/persistence/idb/IdbService.ts +2 -3
- package/src/persistence/idb/idbPersistence.ts +25 -19
- package/src/persistence/idb/metadata/IdbMetadataDb.ts +3 -3
- package/src/persistence/idb/queries/IdbDocumentDb.ts +31 -17
- package/src/persistence/idb/queries/migration/db.ts +10 -0
- package/src/persistence/idb/util.ts +46 -24
- package/src/persistence/interfaces.ts +21 -12
- package/src/persistence/migration/engine.ts +33 -18
- package/src/persistence/migration/finalize.ts +11 -5
- package/src/persistence/migration/migrate.ts +15 -8
- package/src/persistence/persistence.ts +78 -67
- package/src/queries/FindAllQuery.ts +3 -1
- package/src/queries/FindInfiniteQuery.ts +6 -2
- package/src/queries/FindOneQuery.ts +3 -1
- package/src/queries/FindPageQuery.ts +3 -1
- package/src/sync/PresenceManager.ts +10 -7
- package/src/sync/PushPullSync.ts +8 -6
- package/src/sync/Sync.ts +26 -16
- package/src/sync/WebSocketSync.ts +25 -9
- package/src/sync/serviceWorker.ts +4 -6
- package/dist/esm/client/ClientDescriptor.d.ts +0 -87
- package/dist/esm/client/ClientDescriptor.js +0 -133
- package/dist/esm/client/ClientDescriptor.js.map +0 -1
- package/dist/esm/persistence/migration/types.d.ts +0 -3
- package/dist/esm/persistence/migration/types.js +0 -2
- package/dist/esm/persistence/migration/types.js.map +0 -1
- package/src/client/ClientDescriptor.ts +0 -246
- package/src/persistence/migration/types.ts +0 -4
package/dist/bundle/index.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
"use strict";var wo=Object.create;var
|
|
1
|
+
"use strict";var wo=Object.create;var Mt=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames;var So=Object.getPrototypeOf,Oo=Object.prototype.hasOwnProperty;var Io=(i,n)=>()=>(i&&(n=i(i=0)),n);var le=(i,n)=>()=>(n||i((n={exports:{}}).exports,n),n.exports),ur=(i,n)=>{for(var e in n)Mt(i,e,{get:n[e],enumerable:!0})},hr=(i,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of xo(n))!Oo.call(i,r)&&r!==e&&Mt(i,r,{get:()=>n[r],enumerable:!(t=vo(n,r))||t.enumerable});return i};var Be=(i,n,e)=>(e=i!=null?wo(So(i)):{},hr(n||!i||!i.__esModule?Mt(e,"default",{value:i,enumerable:!0}):e,i)),tt=i=>hr(Mt({},"__esModule",{value:!0}),i);var vr=le((br,wr)=>{(function(i){var n;typeof br=="object"?wr.exports=i():typeof define=="function"&&define.amd?define(i):(typeof window<"u"?n=window:typeof global<"u"?n=global:typeof self<"u"&&(n=self),n.objectHash=i())})(function(){return function i(n,e,t){function r(a,l){if(!e[a]){if(!n[a]){var p=typeof require=="function"&&require;if(!l&&p)return p(a,!0);if(s)return s(a,!0);throw new Error("Cannot find module '"+a+"'")}l=e[a]={exports:{}},n[a][0].call(l.exports,function(f){var S=n[a][1][f];return r(S||f)},l,l.exports,i,n,e,t)}return e[a].exports}for(var s=typeof require=="function"&&require,o=0;o<t.length;o++)r(t[o]);return r}({1:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){"use strict";var w=i("crypto");function A(b,O){O=E(b,O);var u;return(u=O.algorithm!=="passthrough"?w.createHash(O.algorithm):new T).write===void 0&&(u.write=u.update,u.end=u.update),_(O,u).dispatch(b),u.update||u.end(""),u.digest?u.digest(O.encoding==="buffer"?void 0:O.encoding):(b=u.read(),O.encoding!=="buffer"?b.toString(O.encoding):b)}(e=n.exports=A).sha1=function(b){return A(b)},e.keys=function(b){return A(b,{excludeValues:!0,algorithm:"sha1",encoding:"hex"})},e.MD5=function(b){return A(b,{algorithm:"md5",encoding:"hex"})},e.keysMD5=function(b){return A(b,{algorithm:"md5",encoding:"hex",excludeValues:!0})};var y=w.getHashes?w.getHashes().slice():["sha1","md5"],I=(y.push("passthrough"),["buffer","hex","binary","base64"]);function E(b,O){var u={};if(u.algorithm=(O=O||{}).algorithm||"sha1",u.encoding=O.encoding||"hex",u.excludeValues=!!O.excludeValues,u.algorithm=u.algorithm.toLowerCase(),u.encoding=u.encoding.toLowerCase(),u.ignoreUnknown=O.ignoreUnknown===!0,u.respectType=O.respectType!==!1,u.respectFunctionNames=O.respectFunctionNames!==!1,u.respectFunctionProperties=O.respectFunctionProperties!==!1,u.unorderedArrays=O.unorderedArrays===!0,u.unorderedSets=O.unorderedSets!==!1,u.unorderedObjects=O.unorderedObjects!==!1,u.replacer=O.replacer||void 0,u.excludeKeys=O.excludeKeys||void 0,b===void 0)throw new Error("Object argument required.");for(var m=0;m<y.length;++m)y[m].toLowerCase()===u.algorithm.toLowerCase()&&(u.algorithm=y[m]);if(y.indexOf(u.algorithm)===-1)throw new Error('Algorithm "'+u.algorithm+'" not supported. supported values: '+y.join(", "));if(I.indexOf(u.encoding)===-1&&u.algorithm!=="passthrough")throw new Error('Encoding "'+u.encoding+'" not supported. supported values: '+I.join(", "));return u}function P(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 _(b,O,u){u=u||[];function m(d){return O.update?O.update(d,"utf8"):O.write(d,"utf8")}return{dispatch:function(d){return this["_"+((d=b.replacer?b.replacer(d):d)===null?"null":typeof d)](d)},_object:function(d){var v,x=Object.prototype.toString.call(d),M=/\[object (.*)\]/i.exec(x);if(M=(M=M?M[1]:"unknown:["+x+"]").toLowerCase(),0<=(x=u.indexOf(d)))return this.dispatch("[CIRCULAR:"+x+"]");if(u.push(d),s!==void 0&&s.isBuffer&&s.isBuffer(d))return m("buffer:"),m(d);if(M==="object"||M==="function"||M==="asyncfunction")return x=Object.keys(d),b.unorderedObjects&&(x=x.sort()),b.respectType===!1||P(d)||x.splice(0,0,"prototype","__proto__","constructor"),b.excludeKeys&&(x=x.filter(function(B){return!b.excludeKeys(B)})),m("object:"+x.length+":"),v=this,x.forEach(function(B){v.dispatch(B),m(":"),b.excludeValues||v.dispatch(d[B]),m(",")});if(!this["_"+M]){if(b.ignoreUnknown)return m("["+M+"]");throw new Error('Unknown object type "'+M+'"')}this["_"+M](d)},_array:function(d,B){B=B!==void 0?B:b.unorderedArrays!==!1;var x=this;if(m("array:"+d.length+":"),!B||d.length<=1)return d.forEach(function(j){return x.dispatch(j)});var M=[],B=d.map(function(j){var k=new T,q=u.slice();return _(b,k,q).dispatch(j),M=M.concat(q.slice(u.length)),k.read().toString()});return u=u.concat(M),B.sort(),this._array(B,!1)},_date:function(d){return m("date:"+d.toJSON())},_symbol:function(d){return m("symbol:"+d.toString())},_error:function(d){return m("error:"+d.toString())},_boolean:function(d){return m("bool:"+d.toString())},_string:function(d){m("string:"+d.length+":"),m(d.toString())},_function:function(d){m("fn:"),P(d)?this.dispatch("[native]"):this.dispatch(d.toString()),b.respectFunctionNames!==!1&&this.dispatch("function-name:"+String(d.name)),b.respectFunctionProperties&&this._object(d)},_number:function(d){return m("number:"+d.toString())},_xml:function(d){return m("xml:"+d.toString())},_null:function(){return m("Null")},_undefined:function(){return m("Undefined")},_regexp:function(d){return m("regex:"+d.toString())},_uint8array:function(d){return m("uint8array:"),this.dispatch(Array.prototype.slice.call(d))},_uint8clampedarray:function(d){return m("uint8clampedarray:"),this.dispatch(Array.prototype.slice.call(d))},_int8array:function(d){return m("int8array:"),this.dispatch(Array.prototype.slice.call(d))},_uint16array:function(d){return m("uint16array:"),this.dispatch(Array.prototype.slice.call(d))},_int16array:function(d){return m("int16array:"),this.dispatch(Array.prototype.slice.call(d))},_uint32array:function(d){return m("uint32array:"),this.dispatch(Array.prototype.slice.call(d))},_int32array:function(d){return m("int32array:"),this.dispatch(Array.prototype.slice.call(d))},_float32array:function(d){return m("float32array:"),this.dispatch(Array.prototype.slice.call(d))},_float64array:function(d){return m("float64array:"),this.dispatch(Array.prototype.slice.call(d))},_arraybuffer:function(d){return m("arraybuffer:"),this.dispatch(new Uint8Array(d))},_url:function(d){return m("url:"+d.toString())},_map:function(d){return m("map:"),d=Array.from(d),this._array(d,b.unorderedSets!==!1)},_set:function(d){return m("set:"),d=Array.from(d),this._array(d,b.unorderedSets!==!1)},_file:function(d){return m("file:"),this.dispatch([d.name,d.size,d.type,d.lastModfied])},_blob:function(){if(b.ignoreUnknown)return m("[blob]");throw Error(`Hashing Blob objects is currently not supported
|
|
2
2
|
(see https://github.com/puleos/object-hash/issues/26)
|
|
3
3
|
Use "options.replacer" or "options.ignoreUnknown"
|
|
4
|
-
`)},_domwindow:function(){return m("domwindow")},_bigint:function(d){return m("bigint:"+d.toString())},_process:function(){return m("process")},_timer:function(){return m("timer")},_pipe:function(){return m("pipe")},_tcp:function(){return m("tcp")},_udp:function(){return m("udp")},_tty:function(){return m("tty")},_statwatcher:function(){return m("statwatcher")},_securecontext:function(){return m("securecontext")},_connection:function(){return m("connection")},_zlib:function(){return m("zlib")},_context:function(){return m("context")},_nodescript:function(){return m("nodescript")},_httpparser:function(){return m("httpparser")},_dataview:function(){return m("dataview")},_signal:function(){return m("signal")},_fsevent:function(){return m("fsevent")},_tlswrap:function(){return m("tlswrap")}}}function
|
|
5
|
-
list should be an Array.`),c.length===0)return new y(0);if(c.length===1)return c[0];if(typeof f!="number")for(C=f=0;C<c.length;C++)f+=c[C].length;for(var g=new y(f),A=0,C=0;C<c.length;C++){var F=c[C];F.copy(g,A),A+=F.length}return g},y.prototype.write=function(c,f,g,A){isFinite(f)?isFinite(g)||(A=g,g=void 0):(X=A,A=f,f=g,g=X),f=Number(f)||0;var C,F,U,J,X=this.length-f;switch((!g||X<(g=Number(g)))&&(g=X),A=String(A||"utf8").toLowerCase()){case"hex":C=function(Se,ae,ce,Z){ce=Number(ce)||0;var Y=Se.length-ce;(!Z||Y<(Z=Number(Z)))&&(Z=Y),R((Y=ae.length)%2==0,"Invalid hex string"),Y/2<Z&&(Z=Y/2);for(var et=0;et<Z;et++){var ur=parseInt(ae.substr(2*et,2),16);R(!isNaN(ur),"Invalid hex string"),Se[ce+et]=ur}return y._charsWritten=2*et,et}(this,c,f,g);break;case"utf8":case"utf-8":F=this,U=f,J=g,C=y._charsWritten=Mt(Ce(c),F,U,J);break;case"ascii":case"binary":C=I(this,c,f,g);break;case"base64":F=this,U=f,J=g,C=y._charsWritten=Mt(cr(c),F,U,J);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":C=_(this,c,f,g);break;default:throw new Error("Unknown encoding")}return C},y.prototype.toString=function(c,f,g){var A,C,F,U,J=this;if(c=String(c||"utf8").toLowerCase(),f=Number(f)||0,(g=g!==void 0?Number(g):J.length)===f)return"";switch(c){case"hex":A=function(X,Se,ae){var ce=X.length;(!Se||Se<0)&&(Se=0),(!ae||ae<0||ce<ae)&&(ae=ce);for(var Z="",Y=Se;Y<ae;Y++)Z+=H(X[Y]);return Z}(J,f,g);break;case"utf8":case"utf-8":A=function(X,Se,ae){var ce="",Z="";ae=Math.min(X.length,ae);for(var Y=Se;Y<ae;Y++)X[Y]<=127?(ce+=lr(Z)+String.fromCharCode(X[Y]),Z=""):Z+="%"+X[Y].toString(16);return ce+lr(Z)}(J,f,g);break;case"ascii":case"binary":A=E(J,f,g);break;case"base64":C=J,U=g,A=(F=f)===0&&U===C.length?v.fromByteArray(C):v.fromByteArray(C.slice(F,U));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":A=function(X,Se,ae){for(var ce=X.slice(Se,ae),Z="",Y=0;Y<ce.length;Y+=2)Z+=String.fromCharCode(ce[Y]+256*ce[Y+1]);return Z}(J,f,g);break;default:throw new Error("Unknown encoding")}return A},y.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},y.prototype.copy=function(c,f,g,A){if(f=f||0,(A=A||A===0?A:this.length)!==(g=g||0)&&c.length!==0&&this.length!==0){R(g<=A,"sourceEnd < sourceStart"),R(0<=f&&f<c.length,"targetStart out of bounds"),R(0<=g&&g<this.length,"sourceStart out of bounds"),R(0<=A&&A<=this.length,"sourceEnd out of bounds"),A>this.length&&(A=this.length);var C=(A=c.length-f<A-g?c.length-f+g:A)-g;if(C<100||!y._useTypedArrays)for(var F=0;F<C;F++)c[F+f]=this[F+g];else c._set(this.subarray(g,g+C),f)}},y.prototype.slice=function(c,f){var g=this.length;if(c=Q(c,g,0),f=Q(f,g,g),y._useTypedArrays)return y._augment(this.subarray(c,f));for(var A=f-c,C=new y(A,void 0,!0),F=0;F<A;F++)C[F]=this[F+c];return C},y.prototype.get=function(c){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(c)},y.prototype.set=function(c,f){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(c,f)},y.prototype.readUInt8=function(c,f){if(f||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return this[c]},y.prototype.readUInt16LE=function(c,f){return D(this,c,!0,f)},y.prototype.readUInt16BE=function(c,f){return D(this,c,!1,f)},y.prototype.readUInt32LE=function(c,f){return k(this,c,!0,f)},y.prototype.readUInt32BE=function(c,f){return k(this,c,!1,f)},y.prototype.readInt8=function(c,f){if(f||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return 128&this[c]?-1*(255-this[c]+1):this[c]},y.prototype.readInt16LE=function(c,f){return b(this,c,!0,f)},y.prototype.readInt16BE=function(c,f){return b(this,c,!1,f)},y.prototype.readInt32LE=function(c,f){return S(this,c,!0,f)},y.prototype.readInt32BE=function(c,f){return S(this,c,!1,f)},y.prototype.readFloatLE=function(c,f){return u(this,c,!0,f)},y.prototype.readFloatBE=function(c,f){return u(this,c,!1,f)},y.prototype.readDoubleLE=function(c,f){return m(this,c,!0,f)},y.prototype.readDoubleBE=function(c,f){return m(this,c,!1,f)},y.prototype.writeUInt8=function(c,f,g){g||(R(c!=null,"missing value"),R(f!=null,"missing offset"),R(f<this.length,"trying to write beyond buffer length"),ri(c,255)),f>=this.length||(this[f]=c)},y.prototype.writeUInt16LE=function(c,f,g){d(this,c,f,!0,g)},y.prototype.writeUInt16BE=function(c,f,g){d(this,c,f,!1,g)},y.prototype.writeUInt32LE=function(c,f,g){w(this,c,f,!0,g)},y.prototype.writeUInt32BE=function(c,f,g){w(this,c,f,!1,g)},y.prototype.writeInt8=function(c,f,g){g||(R(c!=null,"missing value"),R(f!=null,"missing offset"),R(f<this.length,"Trying to write beyond buffer length"),si(c,127,-128)),f>=this.length||(0<=c?this.writeUInt8(c,f,g):this.writeUInt8(255+c+1,f,g))},y.prototype.writeInt16LE=function(c,f,g){x(this,c,f,!0,g)},y.prototype.writeInt16BE=function(c,f,g){x(this,c,f,!1,g)},y.prototype.writeInt32LE=function(c,f,g){j(this,c,f,!0,g)},y.prototype.writeInt32BE=function(c,f,g){j(this,c,f,!1,g)},y.prototype.writeFloatLE=function(c,f,g){B(this,c,f,!0,g)},y.prototype.writeFloatBE=function(c,f,g){B(this,c,f,!1,g)},y.prototype.writeDoubleLE=function(c,f,g){M(this,c,f,!0,g)},y.prototype.writeDoubleBE=function(c,f,g){M(this,c,f,!1,g)},y.prototype.fill=function(c,f,g){if(f=f||0,g=g||this.length,R(typeof(c=typeof(c=c||0)=="string"?c.charCodeAt(0):c)=="number"&&!isNaN(c),"value is not a number"),R(f<=g,"end < start"),g!==f&&this.length!==0){R(0<=f&&f<this.length,"start out of bounds"),R(0<=g&&g<=this.length,"end out of bounds");for(var A=f;A<g;A++)this[A]=c}},y.prototype.inspect=function(){for(var c=[],f=this.length,g=0;g<f;g++)if(c[g]=H(this[g]),g===e.INSPECT_MAX_BYTES){c[g+1]="...";break}return"<Buffer "+c.join(" ")+">"},y.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw new Error("Buffer.toArrayBuffer not supported in this browser");if(y._useTypedArrays)return new y(this).buffer;for(var c=new Uint8Array(this.length),f=0,g=c.length;f<g;f+=1)c[f]=this[f];return c.buffer};var T=y.prototype;function Q(c,f,g){return typeof c!="number"?g:f<=(c=~~c)?f:0<=c||0<=(c+=f)?c:0}function ie(c){return(c=~~Math.ceil(+c))<0?0:c}function W(c){return(Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"})(c)}function H(c){return c<16?"0"+c.toString(16):c.toString(16)}function Ce(c){for(var f=[],g=0;g<c.length;g++){var A=c.charCodeAt(g);if(A<=127)f.push(c.charCodeAt(g));else for(var C=g,F=(55296<=A&&A<=57343&&g++,encodeURIComponent(c.slice(C,g+1)).substr(1).split("%")),U=0;U<F.length;U++)f.push(parseInt(F[U],16))}return f}function cr(c){return v.toByteArray(c)}function Mt(c,f,g,A){for(var C=0;C<A&&!(C+g>=f.length||C>=c.length);C++)f[C+g]=c[C];return C}function lr(c){try{return decodeURIComponent(c)}catch{return String.fromCharCode(65533)}}function ri(c,f){R(typeof c=="number","cannot write a non-number as a number"),R(0<=c,"specified a negative value for writing an unsigned value"),R(c<=f,"value is larger than maximum value for type"),R(Math.floor(c)===c,"value has a fractional component")}function si(c,f,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=f,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value"),R(Math.floor(c)===c,"value has a fractional component")}function dr(c,f,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=f,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value")}function R(c,f){if(!c)throw new Error(f||"Failed assertion")}y._augment=function(c){return c._isBuffer=!0,c._get=c.get,c._set=c.set,c.get=T.get,c.set=T.set,c.write=T.write,c.toString=T.toString,c.toLocaleString=T.toString,c.toJSON=T.toJSON,c.copy=T.copy,c.slice=T.slice,c.readUInt8=T.readUInt8,c.readUInt16LE=T.readUInt16LE,c.readUInt16BE=T.readUInt16BE,c.readUInt32LE=T.readUInt32LE,c.readUInt32BE=T.readUInt32BE,c.readInt8=T.readInt8,c.readInt16LE=T.readInt16LE,c.readInt16BE=T.readInt16BE,c.readInt32LE=T.readInt32LE,c.readInt32BE=T.readInt32BE,c.readFloatLE=T.readFloatLE,c.readFloatBE=T.readFloatBE,c.readDoubleLE=T.readDoubleLE,c.readDoubleBE=T.readDoubleBE,c.writeUInt8=T.writeUInt8,c.writeUInt16LE=T.writeUInt16LE,c.writeUInt16BE=T.writeUInt16BE,c.writeUInt32LE=T.writeUInt32LE,c.writeUInt32BE=T.writeUInt32BE,c.writeInt8=T.writeInt8,c.writeInt16LE=T.writeInt16LE,c.writeInt16BE=T.writeInt16BE,c.writeInt32LE=T.writeInt32LE,c.writeInt32BE=T.writeInt32BE,c.writeFloatLE=T.writeFloatLE,c.writeFloatBE=T.writeFloatBE,c.writeDoubleLE=T.writeDoubleLE,c.writeDoubleBE=T.writeDoubleBE,c.fill=T.fill,c.inspect=T.inspect,c.toArrayBuffer=T.toArrayBuffer,c}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(i,n,e){(function(t,r,v,o,a,l,p,h,O){var v=i("buffer").Buffer,P=4,y=new v(P);y.fill(0),n.exports={hash:function(I,_,E,D){for(var k=_(function(d,w){d.length%P!=0&&(x=d.length+(P-d.length%P),d=v.concat([d,y],x));for(var x,j=[],B=w?d.readInt32BE:d.readInt32LE,M=0;M<d.length;M+=P)j.push(B.call(d,M));return j}(I=v.isBuffer(I)?I:new v(I),D),8*I.length),_=D,b=new v(E),S=_?b.writeInt32BE:b.writeInt32LE,u=0;u<k.length;u++)S.call(b,k[u],4*u,!0);return b}}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(i,n,e){(function(t,r,v,o,a,l,p,h,O){var v=i("buffer").Buffer,P=i("./sha"),y=i("./sha256"),I=i("./rng"),_={sha1:P,sha256:y,md5:i("./md5")},E=64,D=new v(E);function k(d,w){var x=_[d=d||"sha1"],j=[];return x||b("algorithm:",d,"is not yet supported"),{update:function(B){return v.isBuffer(B)||(B=new v(B)),j.push(B),B.length,this},digest:function(B){var M=v.concat(j),M=w?function(T,Q,ie){v.isBuffer(Q)||(Q=new v(Q)),v.isBuffer(ie)||(ie=new v(ie)),Q.length>E?Q=T(Q):Q.length<E&&(Q=v.concat([Q,D],E));for(var W=new v(E),H=new v(E),Ce=0;Ce<E;Ce++)W[Ce]=54^Q[Ce],H[Ce]=92^Q[Ce];return ie=T(v.concat([W,ie])),T(v.concat([H,ie]))}(x,w,M):x(M);return j=null,B?M.toString(B):M}}}function b(){var d=[].slice.call(arguments).join(" ");throw new Error([d,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
|
|
6
|
-
`))}D.fill(0),e.createHash=function(d){return k(d)},e.createHmac=k,e.randomBytes=function(d,w){if(!w||!w.call)return new v(I(d));try{w.call(this,void 0,new v(I(d)))}catch(x){w(x)}};var S,u=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],m=function(d){e[d]=function(){b("sorry,",d,"is not implemented yet")}};for(S in u)m(u[S],S)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v=i("./helpers");function P(b,S){b[S>>5]|=128<<S%32,b[14+(S+64>>>9<<4)]=S;for(var u=1732584193,m=-271733879,d=-1732584194,w=271733878,x=0;x<b.length;x+=16){var j=u,B=m,M=d,T=w,u=I(u,m,d,w,b[x+0],7,-680876936),w=I(w,u,m,d,b[x+1],12,-389564586),d=I(d,w,u,m,b[x+2],17,606105819),m=I(m,d,w,u,b[x+3],22,-1044525330);u=I(u,m,d,w,b[x+4],7,-176418897),w=I(w,u,m,d,b[x+5],12,1200080426),d=I(d,w,u,m,b[x+6],17,-1473231341),m=I(m,d,w,u,b[x+7],22,-45705983),u=I(u,m,d,w,b[x+8],7,1770035416),w=I(w,u,m,d,b[x+9],12,-1958414417),d=I(d,w,u,m,b[x+10],17,-42063),m=I(m,d,w,u,b[x+11],22,-1990404162),u=I(u,m,d,w,b[x+12],7,1804603682),w=I(w,u,m,d,b[x+13],12,-40341101),d=I(d,w,u,m,b[x+14],17,-1502002290),u=_(u,m=I(m,d,w,u,b[x+15],22,1236535329),d,w,b[x+1],5,-165796510),w=_(w,u,m,d,b[x+6],9,-1069501632),d=_(d,w,u,m,b[x+11],14,643717713),m=_(m,d,w,u,b[x+0],20,-373897302),u=_(u,m,d,w,b[x+5],5,-701558691),w=_(w,u,m,d,b[x+10],9,38016083),d=_(d,w,u,m,b[x+15],14,-660478335),m=_(m,d,w,u,b[x+4],20,-405537848),u=_(u,m,d,w,b[x+9],5,568446438),w=_(w,u,m,d,b[x+14],9,-1019803690),d=_(d,w,u,m,b[x+3],14,-187363961),m=_(m,d,w,u,b[x+8],20,1163531501),u=_(u,m,d,w,b[x+13],5,-1444681467),w=_(w,u,m,d,b[x+2],9,-51403784),d=_(d,w,u,m,b[x+7],14,1735328473),u=E(u,m=_(m,d,w,u,b[x+12],20,-1926607734),d,w,b[x+5],4,-378558),w=E(w,u,m,d,b[x+8],11,-2022574463),d=E(d,w,u,m,b[x+11],16,1839030562),m=E(m,d,w,u,b[x+14],23,-35309556),u=E(u,m,d,w,b[x+1],4,-1530992060),w=E(w,u,m,d,b[x+4],11,1272893353),d=E(d,w,u,m,b[x+7],16,-155497632),m=E(m,d,w,u,b[x+10],23,-1094730640),u=E(u,m,d,w,b[x+13],4,681279174),w=E(w,u,m,d,b[x+0],11,-358537222),d=E(d,w,u,m,b[x+3],16,-722521979),m=E(m,d,w,u,b[x+6],23,76029189),u=E(u,m,d,w,b[x+9],4,-640364487),w=E(w,u,m,d,b[x+12],11,-421815835),d=E(d,w,u,m,b[x+15],16,530742520),u=D(u,m=E(m,d,w,u,b[x+2],23,-995338651),d,w,b[x+0],6,-198630844),w=D(w,u,m,d,b[x+7],10,1126891415),d=D(d,w,u,m,b[x+14],15,-1416354905),m=D(m,d,w,u,b[x+5],21,-57434055),u=D(u,m,d,w,b[x+12],6,1700485571),w=D(w,u,m,d,b[x+3],10,-1894986606),d=D(d,w,u,m,b[x+10],15,-1051523),m=D(m,d,w,u,b[x+1],21,-2054922799),u=D(u,m,d,w,b[x+8],6,1873313359),w=D(w,u,m,d,b[x+15],10,-30611744),d=D(d,w,u,m,b[x+6],15,-1560198380),m=D(m,d,w,u,b[x+13],21,1309151649),u=D(u,m,d,w,b[x+4],6,-145523070),w=D(w,u,m,d,b[x+11],10,-1120210379),d=D(d,w,u,m,b[x+2],15,718787259),m=D(m,d,w,u,b[x+9],21,-343485551),u=k(u,j),m=k(m,B),d=k(d,M),w=k(w,T)}return Array(u,m,d,w)}function y(b,S,u,m,d,w){return k((S=k(k(S,b),k(m,w)))<<d|S>>>32-d,u)}function I(b,S,u,m,d,w,x){return y(S&u|~S&m,b,S,d,w,x)}function _(b,S,u,m,d,w,x){return y(S&m|u&~m,b,S,d,w,x)}function E(b,S,u,m,d,w,x){return y(S^u^m,b,S,d,w,x)}function D(b,S,u,m,d,w,x){return y(u^(S|~m),b,S,d,w,x)}function k(b,S){var u=(65535&b)+(65535&S);return(b>>16)+(S>>16)+(u>>16)<<16|65535&u}n.exports=function(b){return v.hash(b,P,16)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v;n.exports=v||function(P){for(var y,I=new Array(P),_=0;_<P;_++)!(3&_)&&(y=4294967296*Math.random()),I[_]=y>>>((3&_)<<3)&255;return I}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v=i("./helpers");function P(_,E){_[E>>5]|=128<<24-E%32,_[15+(E+64>>9<<4)]=E;for(var D,k,b,S=Array(80),u=1732584193,m=-271733879,d=-1732584194,w=271733878,x=-1009589776,j=0;j<_.length;j+=16){for(var B=u,M=m,T=d,Q=w,ie=x,W=0;W<80;W++){S[W]=W<16?_[j+W]:I(S[W-3]^S[W-8]^S[W-14]^S[W-16],1);var H=y(y(I(u,5),(H=m,k=d,b=w,(D=W)<20?H&k|~H&b:!(D<40)&&D<60?H&k|H&b|k&b:H^k^b)),y(y(x,S[W]),(D=W)<20?1518500249:D<40?1859775393:D<60?-1894007588:-899497514)),x=w,w=d,d=I(m,30),m=u,u=H}u=y(u,B),m=y(m,M),d=y(d,T),w=y(w,Q),x=y(x,ie)}return Array(u,m,d,w,x)}function y(_,E){var D=(65535&_)+(65535&E);return(_>>16)+(E>>16)+(D>>16)<<16|65535&D}function I(_,E){return _<<E|_>>>32-E}n.exports=function(_){return v.hash(_,P,20,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){function v(E,D){var k=(65535&E)+(65535&D);return(E>>16)+(D>>16)+(k>>16)<<16|65535&k}function P(E,D){var k,b=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),S=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),u=new Array(64);E[D>>5]|=128<<24-D%32,E[15+(D+64>>9<<4)]=D;for(var m,d,w=0;w<E.length;w+=16){for(var x=S[0],j=S[1],B=S[2],M=S[3],T=S[4],Q=S[5],ie=S[6],W=S[7],H=0;H<64;H++)u[H]=H<16?E[H+w]:v(v(v((d=u[H-2],I(d,17)^I(d,19)^_(d,10)),u[H-7]),(d=u[H-15],I(d,7)^I(d,18)^_(d,3))),u[H-16]),k=v(v(v(v(W,I(d=T,6)^I(d,11)^I(d,25)),T&Q^~T&ie),b[H]),u[H]),m=v(I(m=x,2)^I(m,13)^I(m,22),x&j^x&B^j&B),W=ie,ie=Q,Q=T,T=v(M,k),M=B,B=j,j=x,x=v(k,m);S[0]=v(x,S[0]),S[1]=v(j,S[1]),S[2]=v(B,S[2]),S[3]=v(M,S[3]),S[4]=v(T,S[4]),S[5]=v(Q,S[5]),S[6]=v(ie,S[6]),S[7]=v(W,S[7])}return S}var y=i("./helpers"),I=function(E,D){return E>>>D|E<<32-D},_=function(E,D){return E>>>D};n.exports=function(E){return y.hash(E,P,32,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){e.read=function(v,P,y,I,w){var E,D,k=8*w-I-1,b=(1<<k)-1,S=b>>1,u=-7,m=y?w-1:0,d=y?-1:1,w=v[P+m];for(m+=d,E=w&(1<<-u)-1,w>>=-u,u+=k;0<u;E=256*E+v[P+m],m+=d,u-=8);for(D=E&(1<<-u)-1,E>>=-u,u+=I;0<u;D=256*D+v[P+m],m+=d,u-=8);if(E===0)E=1-S;else{if(E===b)return D?NaN:1/0*(w?-1:1);D+=Math.pow(2,I),E-=S}return(w?-1:1)*D*Math.pow(2,E-I)},e.write=function(v,P,y,I,_,x){var D,k,b=8*x-_-1,S=(1<<b)-1,u=S>>1,m=_===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=I?0:x-1,w=I?1:-1,x=P<0||P===0&&1/P<0?1:0;for(P=Math.abs(P),isNaN(P)||P===1/0?(k=isNaN(P)?1:0,D=S):(D=Math.floor(Math.log(P)/Math.LN2),P*(I=Math.pow(2,-D))<1&&(D--,I*=2),2<=(P+=1<=D+u?m/I:m*Math.pow(2,1-u))*I&&(D++,I/=2),S<=D+u?(k=0,D=S):1<=D+u?(k=(P*I-1)*Math.pow(2,_),D+=u):(k=P*Math.pow(2,u-1)*Math.pow(2,_),D=0));8<=_;v[y+d]=255&k,d+=w,k/=256,_-=8);for(D=D<<_|k,b+=_;0<b;v[y+d]=255&D,d+=w,D/=256,b-=8);v[y+d-w]|=128*x}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/ieee754/index.js","/node_modules/gulp-browserify/node_modules/ieee754")},{buffer:3,lYpoI2:11}],11:[function(i,n,e){(function(t,r,s,o,a,l,p,h,O){var v,P,y;function I(){}(t=n.exports={}).nextTick=(P=typeof window<"u"&&window.setImmediate,y=typeof window<"u"&&window.postMessage&&window.addEventListener,P?function(_){return window.setImmediate(_)}:y?(v=[],window.addEventListener("message",function(_){var E=_.source;E!==window&&E!==null||_.data!=="process-tick"||(_.stopPropagation(),0<v.length&&v.shift()())},!0),function(_){v.push(_),window.postMessage("process-tick","*")}):function(_){setTimeout(_,0)}),t.title="browser",t.browser=!0,t.env={},t.argv=[],t.on=I,t.addListener=I,t.once=I,t.off=I,t.removeListener=I,t.removeAllListeners=I,t.emit=I,t.binding=function(_){throw new Error("process.binding is not supported")},t.cwd=function(){return"/"},t.chdir=function(_){throw new Error("process.chdir is not supported")}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/process/browser.js","/node_modules/gulp-browserify/node_modules/process")},{buffer:3,lYpoI2:11}]},{},[1])(1)})});var vi=le((_l,Hr)=>{Hr.exports=function(n,e){var t="000000000"+n;return t.substr(t.length-e)}});var Wr=le((Dl,Qr)=>{var Xo=vi(),Zo=typeof window=="object"?window:self,ea=Object.keys(Zo).length,ta=navigator.mimeTypes?navigator.mimeTypes.length:0,na=Xo((ta+navigator.userAgent.length).toString(36)+ea.toString(36),4);Qr.exports=function(){return na}});var Xr=le((Cl,Yr)=>{var wi,Jr=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;Jr?(Gr=Math.pow(2,32)-1,wi=function(){return Math.abs(Jr.getRandomValues(new Uint32Array(1))[0]/Gr)}):wi=Math.random;var Gr;Yr.exports=wi});var We=le((Pl,ns)=>{var Zt=Wr(),Zr=vi(),ia=Xr(),Dt=0,Si=4,en=36,es=Math.pow(en,Si);function xi(){return Zr((ia()*es<<0).toString(en),Si)}function ts(){return Dt=Dt<es?Dt:0,Dt++,Dt-1}function Ct(){var i="c",n=new Date().getTime().toString(en),e=Zr(ts().toString(en),Si),t=Zt(),r=xi()+xi();return i+n+e+t+r}Ct.slug=function(){var n=new Date().getTime().toString(36),e=ts().toString(36).slice(-4),t=Zt().slice(0,1)+Zt().slice(-1),r=xi().slice(-2);return n.slice(-2)+e+t+r};Ct.isCuid=function(n){return typeof n!="string"?!1:!!n.startsWith("c")};Ct.isSlug=function(n){if(typeof n!="string")return!1;var e=n.length;return e>=7&&e<=10};Ct.fingerprint=Zt;ns.exports=Ct});var Ge={};fr(Ge,{__addDisposableResource:()=>Bs,__assign:()=>hn,__asyncDelegator:()=>Ds,__asyncGenerator:()=>_s,__asyncValues:()=>Cs,__await:()=>ct,__awaiter:()=>ws,__classPrivateFieldGet:()=>Fs,__classPrivateFieldIn:()=>ks,__classPrivateFieldSet:()=>Ts,__createBinding:()=>mn,__decorate:()=>ys,__disposeResources:()=>Ls,__esDecorate:()=>Ia,__exportStar:()=>Ss,__extends:()=>ms,__generator:()=>xs,__importDefault:()=>Rs,__importStar:()=>As,__makeTemplateObject:()=>Ps,__metadata:()=>vs,__param:()=>bs,__propKey:()=>_a,__read:()=>Ri,__rest:()=>gs,__runInitializers:()=>Ea,__setFunctionName:()=>Da,__spread:()=>Os,__spreadArray:()=>Es,__spreadArrays:()=>Is,__values:()=>pn,default:()=>Aa});function ms(i,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");Ai(i,n);function e(){this.constructor=i}i.prototype=n===null?Object.create(n):(e.prototype=n.prototype,new e)}function gs(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e}function ys(i,n,e,t){var r=arguments.length,s=r<3?n:t===null?t=Object.getOwnPropertyDescriptor(n,e):t,o;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(i,n,e,t);else for(var a=i.length-1;a>=0;a--)(o=i[a])&&(s=(r<3?o(s):r>3?o(n,e,s):o(n,e))||s);return r>3&&s&&Object.defineProperty(n,e,s),s}function bs(i,n){return function(e,t){n(e,t,i)}}function Ia(i,n,e,t,r,s){function o(E){if(E!==void 0&&typeof E!="function")throw new TypeError("Function expected");return E}for(var a=t.kind,l=a==="getter"?"get":a==="setter"?"set":"value",p=!n&&i?t.static?i:i.prototype:null,h=n||(p?Object.getOwnPropertyDescriptor(p,t.name):{}),O,v=!1,P=e.length-1;P>=0;P--){var y={};for(var I in t)y[I]=I==="access"?{}:t[I];for(var I in t.access)y.access[I]=t.access[I];y.addInitializer=function(E){if(v)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(E||null))};var _=(0,e[P])(a==="accessor"?{get:h.get,set:h.set}:h[l],y);if(a==="accessor"){if(_===void 0)continue;if(_===null||typeof _!="object")throw new TypeError("Object expected");(O=o(_.get))&&(h.get=O),(O=o(_.set))&&(h.set=O),(O=o(_.init))&&r.unshift(O)}else(O=o(_))&&(a==="field"?r.unshift(O):h[l]=O)}p&&Object.defineProperty(p,t.name,h),v=!0}function Ea(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 _a(i){return typeof i=="symbol"?i:"".concat(i)}function Da(i,n,e){return typeof n=="symbol"&&(n=n.description?"[".concat(n.description,"]"):""),Object.defineProperty(i,"name",{configurable:!0,value:e?"".concat(e," ",n):n})}function vs(i,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,n)}function ws(i,n,e,t){function r(s){return s instanceof e?s:new e(function(o){o(s)})}return new(e||(e=Promise))(function(s,o){function a(h){try{p(t.next(h))}catch(O){o(O)}}function l(h){try{p(t.throw(h))}catch(O){o(O)}}function p(h){h.done?s(h.value):r(h.value).then(a,l)}p((t=t.apply(i,n||[])).next())})}function xs(i,n){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},t,r,s,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(p){return function(h){return l([p,h])}}function l(p){if(t)throw new TypeError("Generator is already executing.");for(;o&&(o=0,p[0]&&(e=0)),e;)try{if(t=1,r&&(s=p[0]&2?r.return:p[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,p[1])).done)return s;switch(r=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return e.label++,{value:p[1],done:!1};case 5:e.label++,r=p[1],p=[0];continue;case 7:p=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){e=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){e.label=p[1];break}if(p[0]===6&&e.label<s[1]){e.label=s[1],s=p;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(p);break}s[2]&&e.ops.pop(),e.trys.pop();continue}p=n.call(i,e)}catch(h){p=[6,h],r=0}finally{t=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}}function Ss(i,n){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(n,e)&&mn(n,i,e)}function pn(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 Ri(i,n){var e=typeof Symbol=="function"&&i[Symbol.iterator];if(!e)return i;var t=e.call(i),r,s=[],o;try{for(;(n===void 0||n-- >0)&&!(r=t.next()).done;)s.push(r.value)}catch(a){o={error:a}}finally{try{r&&!r.done&&(e=t.return)&&e.call(t)}finally{if(o)throw o.error}}return s}function Os(){for(var i=[],n=0;n<arguments.length;n++)i=i.concat(Ri(arguments[n]));return i}function Is(){for(var i=0,n=0,e=arguments.length;n<e;n++)i+=arguments[n].length;for(var t=Array(i),r=0,n=0;n<e;n++)for(var s=arguments[n],o=0,a=s.length;o<a;o++,r++)t[r]=s[o];return t}function Es(i,n,e){if(e||arguments.length===2)for(var t=0,r=n.length,s;t<r;t++)(s||!(t in n))&&(s||(s=Array.prototype.slice.call(n,0,t)),s[t]=n[t]);return i.concat(s||Array.prototype.slice.call(n))}function ct(i){return this instanceof ct?(this.v=i,this):new ct(i)}function _s(i,n,e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e.apply(i,n||[]),r,s=[];return r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r;function o(v){t[v]&&(r[v]=function(P){return new Promise(function(y,I){s.push([v,P,y,I])>1||a(v,P)})})}function a(v,P){try{l(t[v](P))}catch(y){O(s[0][3],y)}}function l(v){v.value instanceof ct?Promise.resolve(v.value.v).then(p,h):O(s[0][2],v)}function p(v){a("next",v)}function h(v){a("throw",v)}function O(v,P){v(P),s.shift(),s.length&&a(s[0][0],s[0][1])}}function Ds(i){var n,e;return n={},t("next"),t("throw",function(r){throw r}),t("return"),n[Symbol.iterator]=function(){return this},n;function t(r,s){n[r]=i[r]?function(o){return(e=!e)?{value:ct(i[r](o)),done:!1}:s?s(o):o}:s}}function Cs(i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=i[Symbol.asyncIterator],e;return n?n.call(i):(i=typeof pn=="function"?pn(i):i[Symbol.iterator](),e={},t("next"),t("throw"),t("return"),e[Symbol.asyncIterator]=function(){return this},e);function t(s){e[s]=i[s]&&function(o){return new Promise(function(a,l){o=i[s](o),r(a,l,o.done,o.value)})}}function r(s,o,a,l){Promise.resolve(l).then(function(p){s({value:p,done:a})},o)}}function Ps(i,n){return Object.defineProperty?Object.defineProperty(i,"raw",{value:n}):i.raw=n,i}function As(i){if(i&&i.__esModule)return i;var n={};if(i!=null)for(var e in i)e!=="default"&&Object.prototype.hasOwnProperty.call(i,e)&&mn(n,i,e);return Ca(n,i),n}function Rs(i){return i&&i.__esModule?i:{default:i}}function Fs(i,n,e,t){if(e==="a"&&!t)throw new TypeError("Private accessor was defined without a getter");if(typeof n=="function"?i!==n||!t:!n.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e==="m"?t:e==="a"?t.call(i):t?t.value:n.get(i)}function Ts(i,n,e,t,r){if(t==="m")throw new TypeError("Private method is not writable");if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a setter");if(typeof n=="function"?i!==n||!r:!n.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t==="a"?r.call(i,e):r?r.value=e:n.set(i,e),e}function ks(i,n){if(n===null||typeof n!="object"&&typeof n!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof i=="function"?n===i:i.has(n)}function Bs(i,n,e){if(n!=null){if(typeof n!="object"&&typeof n!="function")throw new TypeError("Object expected.");var t;if(e){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");t=n[Symbol.asyncDispose]}if(t===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");t=n[Symbol.dispose]}if(typeof t!="function")throw new TypeError("Object not disposable.");i.stack.push({value:n,dispose:t,async:e})}else e&&i.stack.push({async:!0});return n}function Ls(i){function n(t){i.error=i.hasError?new Pa(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 Ai,hn,mn,Ca,Pa,Aa,Ye=Eo(()=>{Ai=function(i,n){return Ai=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])},Ai(i,n)};hn=function(){return hn=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},hn.apply(this,arguments)};mn=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]};Ca=Object.create?function(i,n){Object.defineProperty(i,"default",{enumerable:!0,value:n})}:function(i,n){i.default=n};Pa=typeof SuppressedError=="function"?SuppressedError:function(i,n,e){var t=new Error(e);return t.name="SuppressedError",t.error=i,t.suppressed=n,t};Aa={__extends:ms,__assign:hn,__rest:gs,__decorate:ys,__param:bs,__metadata:vs,__awaiter:ws,__generator:xs,__createBinding:mn,__exportStar:Ss,__values:pn,__read:Ri,__spread:Os,__spreadArrays:Is,__spreadArray:Es,__await:ct,__asyncGenerator:_s,__asyncDelegator:Ds,__asyncValues:Cs,__makeTemplateObject:Ps,__importStar:As,__importDefault:Rs,__classPrivateFieldGet:Fs,__classPrivateFieldSet:Ts,__classPrivateFieldIn:ks,__addDisposableResource:Bs,__disposeResources:Ls}});var Ms=le(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0})});var Ti=le(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});De.invokeEventHandlersAsync=De.invokeEventHandlers=De.eventHandlerSafeInvokeAsync=De.eventHandlerSafeInvoke=void 0;var Vs=(Ye(),tt(Ge));function Us(i,n,e){try{return i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}}De.eventHandlerSafeInvoke=Us;function Fi(i,n,e){return(0,Vs.__awaiter)(this,void 0,void 0,function*(){try{return yield i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}})}De.eventHandlerSafeInvokeAsync=Fi;function Ra(i,n,e,t){for(let r of i){let{succeeded:s,error:o}=Us(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}}De.invokeEventHandlers=Ra;function Fa(i,n,e,t){return(0,Vs.__awaiter)(this,void 0,void 0,function*(){if(t?.parallelize===!1)for(let r of i){let{succeeded:s,error:o}=yield Fi(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}else{let r=[];for(let s of i)r.push(Fi(s,n,e).then(({succeeded:o,error:a})=>{if(!o&&t?.swallowExceptions!==!0)throw a}));yield Promise.all(r)}})}De.invokeEventHandlersAsync=Fa});var $s=le(gn=>{"use strict";Object.defineProperty(gn,"__esModule",{value:!0});gn.TypedEvent=void 0;var Ta=(Ye(),tt(Ge)),Ns=Ti(),zs={swallowExceptions:!1,parallelize:!0},ki=class{constructor(){this._handlers=[]}attach(n){this._handlers.push(n)}detach(n){this.tryRemoveHandler(n)}invoke(n,e,t=zs){(0,Ns.invokeEventHandlers)(this._handlers,n,e,t)}invokeAsync(n,e,t=zs){return(0,Ta.__awaiter)(this,void 0,void 0,function*(){yield(0,Ns.invokeEventHandlersAsync)(this._handlers,n,e,t)})}tryRemoveHandler(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}};gn.TypedEvent=ki});var Li=le(Bi=>{"use strict";Object.defineProperty(Bi,"__esModule",{value:!0});var ka=(Ye(),tt(Ge));(0,ka.__exportStar)($s(),Bi)});var Ks=le(yn=>{"use strict";Object.defineProperty(yn,"__esModule",{value:!0});yn.FinalizationRegistryMissingError=void 0;var ji=class extends Error{};yn.FinalizationRegistryMissingError=ji});var Vi=le(bn=>{"use strict";Object.defineProperty(bn,"__esModule",{value:!0});bn.WeakHandlerHolder=void 0;var Ba=Ks(),Mi=class{constructor(n){this._refs=[];try{this._finalizationRegistry=new FinalizationRegistry(n)}catch(e){throw e.name==="FinalizationRegistry"?new Ba.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)}};bn.WeakHandlerHolder=Mi});var qs=le(vn=>{"use strict";Object.defineProperty(vn,"__esModule",{value:!0});vn.WeakEvent=void 0;var Ui=(Ye(),tt(Ge)),La=Li(),ja=Vi(),Ni=Ti(),Ma={swallowExceptions:!1,parallelize:!0},zi=class{constructor(){this._handlers=[],this._handlerFinalizedEvent=new La.TypedEvent,this.handlerFinalizedEvent=this._handlerFinalizedEvent,this._refHolder=new ja.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,Ni.eventHandlerSafeInvoke)(s,n,e);if(!o&&t?.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}}invokeAsync(n,e,t=Ma){return(0,Ui.__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,Ui.__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,Ni.eventHandlerSafeInvokeAsync)(s,n,e);if(!o&&t.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}})}parallelInvokeAsync(n,e,t){return(0,Ui.__awaiter)(this,void 0,void 0,function*(){let r=[];for(let s of this._handlers){let o=s?.deref();o?r.push((0,Ni.eventHandlerSafeInvokeAsync)(o,n,e).then(({succeeded:a,error:l})=>{if(!a&&t.swallowExceptions!==!0)throw l})):this.releaseHandler(s)}yield Promise.all(r)})}attach(n){this._handlers.push(this._refHolder.getWeakHandler(this,n))}detach(n){let e=this._refHolder.releaseWeakHandler(n);this.tryRemoveHandlerRef(e)}onHandlerFinalizer(n){this.tryRemoveHandlerRef(n?.handlerRef),this._handlerFinalizedEvent.invokeAsync(this,n,{swallowExceptions:!0})}tryRemoveHandlerRef(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}releaseHandler(n){this._refHolder.unregisterRef(n),this.tryRemoveHandlerRef(n)}};vn.WeakEvent=zi});var Qs=le(wn=>{"use strict";Object.defineProperty(wn,"__esModule",{value:!0});var Hs=(Ye(),tt(Ge));(0,Hs.__exportStar)(Vi(),wn);(0,Hs.__exportStar)(qs(),wn)});var Ws=le(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});var $i=(Ye(),tt(Ge));(0,$i.__exportStar)(Ms(),Tt);(0,$i.__exportStar)(Li(),Tt);(0,$i.__exportStar)(Qs(),Tt)});var ar={};fr(ar,{Client:()=>gt,ClientDescriptor:()=>ii,Entity:()=>me,EntityFile:()=>ve,IdbPersistence:()=>yt,ServerSync:()=>mt,Storage:()=>gt,StorageDescriptor:()=>ii,UndoHistory:()=>bt,authorization:()=>vc,cliSync:()=>wc,createMigration:()=>yi,debugLogger:()=>er,getEntityClient:()=>Ys,id:()=>xc,makeLogger:()=>go,noLogger:()=>Zn,schema:()=>Pt});function _o(i){return typeof Buffer<"u"?Buffer.from(i).toString("base64"):btoa(i)}function Do(i){return typeof Buffer<"u"?Buffer.from(i,"base64").toString():atob(i)}var Ke={onlyUser:i=>_o(`u:${i}:*`),onlyMe:()=>Ke.onlyUser(oi),decode:i=>{let e=Do(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 pr(i,n){let{operations:e,baselines:t}=i;if(e)for(let r of e)r.authz&&Ke.decode(r.authz).subject===oi&&(r.authz=Ke.onlyUser(n));if(t)for(let r of t)r.authz&&Ke.decode(r.authz).subject===oi&&(r.authz=Ke.onlyUser(n))}var nt=class{constructor(n){this.flusher=n,this.batches=new Map,this.flush=e=>{let t=this.batches.get(e);if(t)return t.flush()},this.discard=e=>{let t=this.batches.get(e);t&&(t.discard(),this.batches.delete(e))},this.flushAll=()=>[...this.batches.values()].map(e=>e.flush()),this.getSize=e=>{let t=this.batches.get(e);return t?t.items.length:0}}add({key:n,userData:e,items:t,max:r,timeout:s}){let o=this.batches.get(n);return o||(o=new ai({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}},ai=class{constructor({max:n,startedAt:e,timeout:t,userData:r,flusher:s,key:o}){this.items=[],this.update=({items:a,max:l,timeout:p,userData:h})=>{this.items.push(...a),l!==void 0&&(this.max=l),p!==void 0&&(this.timeout=p),h&&(this.userData=h);let O=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():O&&this.timeout!==null&&(this.flushTimeout=setTimeout(this.flush,this.timeout))},this.flush=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0;let a=this.items;return this.items=[],this.flusher(a,this.key,this.userData)},this.discard=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0,this.items=[]},this.max=n,this.startedAt=e,this.timeout=t,this.userData=r,this.flusher=s,this.key=o}};var vt;(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"})(vt||(vt={}));var q=class extends Error{constructor(n,e,t){super(t??`Verdant error: ${n}`,{cause:e}),this.code=n,this.toResponse=()=>JSON.stringify({code:this.code})}get httpStatus(){let n=Math.floor(this.code/10);return n<600?n:500}};q.Code=vt;function mr(i){return typeof i=="object"&&"code"in i&&typeof i.code=="number"}var Ut,Co=new Uint8Array(16);function ci(){if(!Ut&&(Ut=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!Ut))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ut(Co)}var gr=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Po(i){return typeof i=="string"&&gr.test(i)}var yr=Po;var te=[];for(Nt=0;Nt<256;++Nt)te.push((Nt+256).toString(16).substr(1));var Nt;function Ao(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(te[i[n+0]]+te[i[n+1]]+te[i[n+2]]+te[i[n+3]]+"-"+te[i[n+4]]+te[i[n+5]]+"-"+te[i[n+6]]+te[i[n+7]]+"-"+te[i[n+8]]+te[i[n+9]]+"-"+te[i[n+10]]+te[i[n+11]]+te[i[n+12]]+te[i[n+13]]+te[i[n+14]]+te[i[n+15]]).toLowerCase();if(!yr(e))throw TypeError("Stringified UUID is invalid");return e}var br=Ao;function Ro(i,n,e){i=i||{};var t=i.random||(i.rng||ci)();if(t[6]=t[6]&15|64,t[8]=t[8]&63|128,n){e=e||0;for(var r=0;r<16;++r)n[e+r]=t[r];return n}return br(t)}var wt=Ro;var Sr=Be(xr(),1);function Fo(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 li(i){let n=new WeakMap,e=0;return JSON.stringify(i,(t,r)=>{if(typeof r=="object"&&r!==null){if(n.has(r))return{$ref:n.get(r)};n.set(r,`cyclic-ref:${e++}`)}return Fo(t,r)})}function de(i,n=!0){if(!n&&typeof structuredClone=="function")return structuredClone(i);if(V(i)||Array.isArray(i)){let e=G(i),t;if(Array.isArray(i))t=i.map(r=>de(r,n));else{t={};for(let[r,s]of Object.entries(i))t[r]=de(s,n)}return n&&e&&z(t,e),t}return i}function qe(i){return(0,Sr.default)(i)}function V(i){return i&&typeof i=="object"}function Or(i){for(var n=[],e=[i],t=0;e.length;){var r=e.pop();if(typeof r=="boolean")t+=4;else if(typeof r=="string")t+=r.length*2;else if(typeof r=="number")t+=8;else if(typeof r=="object"&&n.indexOf(r)===-1){n.push(r);for(var s in r)e.push(r[s])}}return t}function L(i,n="assertion failed"){if(!i)throw new Error(n)}function xt(i=16){return wt().replace("-","").slice(0,i)}function Ir(i,n){for(let e=i.length-1;e>=0;e--)if(n(i[e]))return e;return-1}function Er(i,n){let e;return function(...t){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,t),n)}}function _r(i,n){let e=0,t;return function(...r){let s=this,o=Date.now();o-e>=n?(e=o,i.apply(s,r),clearTimeout(t)):(clearTimeout(t),t=setTimeout(()=>{e=o,i.apply(s,r)},n))}}function di(i){try{return JSON.stringify(i)}catch{return`[recursive/invalid:${String(i)}]`}}function he(i){return i&&i["@@type"]==="file"}function St(i){return{"@@type":"file",id:i}}function it(i){return typeof File<"u"&&i instanceof File||typeof Blob<"u"&&i instanceof Blob}function zt(i){return i&&V(i)&&typeof i.id=="string"&&typeof i.remote=="boolean"&&typeof i.name=="string"&&typeof i.type=="string"}function $(i){return re(i)||he(i)}function Pe(i,n){return i===n?!0:!(!$(i)||!$(n)||i["@@type"]!==n["@@type"]||i.id!==n.id)}function re(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function He(i,n,e,t,r=[],s){z(i,n),rt(i,t);let o=Qt(i);for(let a of o.keys()){let l=o.get(a),p={oid:a,timestamp:e(),data:{op:"initialize",value:Ht(l)}};r.push(Pr(p,s?.authz))}return r}function Cr(i,n,e,t=[],r){let s={oid:n,timestamp:e(),data:{op:"initialize",value:i}};return t.push(Pr(s,r?.authz)),t}function Pr(i,n){return n&&(i.authz=n),i}function Kt(i){let n={};for(let e of i)e.oid in n?n[e.oid].push(e):n[e.oid]=[e];return n}function Ar(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Rr(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Le(i){return Array.isArray(i)?!0:(console.error(`Cannot apply list patch; expected array, received ${JSON.stringify(i)}. This suggests your data is changing from a list to an object over time. (OID: ${G(i)})`),!1)}function je(i,n,e){if(i==null&&n.op!=="initialize")return i;let t=i,r,s;function o(a){e&&$(a)&&e.push(a)}switch(n.op){case"set":o(t[n.name]),t[n.name]=n.value;break;case"remove":o(t[n.name]),delete t[n.name];break;case"list-set":Le(i)&&(o(i[n.index]),i[n.index]=n.value);break;case"list-push":Le(i)&&i.push(n.value);break;case"list-delete":Le(i)&&(o(i[n.index]),i.splice(n.index,n.count));break;case"list-move-by-index":Le(i)&&(s=i.splice(n.from,1),i.splice(n.to,0,s[0]));break;case"list-remove":if(Le(i))do{let a=n.value;n.only==="last"?$(a)?r=Ir(i,l=>$(l)&&Pe(l,a)):r=i.lastIndexOf(a):$(a)?r=i.findIndex(l=>$(l)&&Pe(l,a)):r=i.indexOf(a),r!==-1&&(o(i[r]),i.splice(r,1))}while(!n.only&&r!==-1);break;case"list-add":Le(i)&&(i.some(l=>re(l)&&re(n.value)?l.id===n.value.id:l===n.value)||i.push(n.value));break;case"list-move-by-ref":Le(i)&&(r=i.findIndex(a=>Pe(a,n.value)),s=i.splice(r,1),i.splice(n.index,0,s[0]));break;case"list-insert":if(Le(i)){if(!n.value&&!n.values)throw new Error(`Cannot apply list insert patch; expected value or values, received ${JSON.stringify(n)}`);n.value?i.splice(n.index,0,n.value):i.splice(n.index,0,...n.values)}break;case"delete":Array.isArray(i)?i.forEach(o):V(i)&&Object.values(i||{}).forEach(o);return;case"initialize":return de(n.value);case"touch":return i;default:throw new Error(`Unsupported patch operation: ${n.op}`)}return i}function $t(i,n,e=[]){if(Array.isArray(i))for(let t=0;t<i.length;t++){let r=i[t];i[t]=Dr(r,n,e),V(i[t])&&$t(i[t],n,e)}else if(!he(i)){if(V(i)){L(G(i),`Object ${JSON.stringify(i)} must have an oid`);for(let t of Object.keys(i))i[t]=Dr(i[t],n,e),V(i[t])&&$t(i[t],n,e)}}return e}function Dr(i,n,e){if(re(i)){e.push(i.id);let t=n.get(i.id);return L(!!t,`No value was found in object map for ${i.id}`),z(t,i.id)}else return i}function Fr(i){return i.data.op==="set"?i.data.name:!1}function Tr(i,n){return n.has(!0)?!0:i.data.op==="set"||i.data.op==="remove"?n.has(i.data.name):!1}function qt(i){return{oid:i.oid,timestamp:i.timestamp,data:i.data,authz:i.authz}}var To="/",Ot=":",fi=new WeakMap;function se(i){let n=G(i);return L(!!n,`Object ${di(i)} does not have an OID assigned to it`),n}function G(i){if(V(i))return fi.get(i)}function z(i,n){return L(V(i),`Only objects can be assigned OIDs, received ${di(i)}`),jr(i)&&Ht(i),fi.set(i,n),i}function jr(i){return!!G(i)}function Ht(i){return fi.delete(i),i}function kr(i,n,e){if(jr(i)){let t=se(i);if(Me(t,n))return se(i);{let r=Oe(n,e);return z(i,r),r}}else{let t=Oe(n,e);return z(i,t),t}}var ui={".":"˙","/":"&slash;",":":":"};function Br(i){return i.replace(/[/]/g,ui["/"]).replace(/[:]/g,ui[":"]).replace(/[.]/g,ui["."])}function Lr(i){return i.replace(/&slash;/g,"/").replace(/:/g,":").replace(/˙/g,".")}function ee(i,n,e){let t=Br(i)+To+Br(n);return e&&(t+=Ot+e),t}function Oe(i,n=ko){let{collection:e,id:t}=ue(i);return ee(e,t,n())}function ue(i){let[n,e,...t]=i.split("/");t.length&&(console.error(`OID ${i} has more than 3 segments. Attempting to parse it anyway.`),e+="/"+t.join("/"));let[r,s]=e.split(Ot),o;return r.includes(".")?o=r.slice(0,r.indexOf(".")):o=r,{collection:Lr(n),id:Lr(o),subId:s}}function rt(i,n){let e=se(i);if(Array.isArray(i)){let t;for(let r=0;r<i.length;r++)t=i[r],V(t)&&!$(t)&&(kr(t,e,n),rt(t,n))}else if(V(i)&&!$(i))for(let t of Object.keys(i))V(i[t])&&!$(i[t])&&(kr(i[t],e,n),rt(i[t],n))}function Wt(i){if(Ht(i),Array.isArray(i))for(let n=0;n<i.length;n++)Wt(i[n]);else if(V(i))for(let n of Object.keys(i))Wt(i[n])}function ko(){return wt().slice(0,8)}function ne(i){return{"@@type":"ref",id:i}}function Qt(i,n=new Map){if(Array.isArray(i)){let e=se(i),t=z([],e);for(let r=0;r<i.length;r++){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(he(s)){t[r]=s;continue}else{let o=se(s);t[r]=ne(o),Qt(s,n)}}else t[r]=s}n.set(e,t)}else if(V(i)&&!$(i)){let e=se(i),t=z({},e);for(let r of Object.keys(i)){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(he(s))t[r]=s;else{let o=se(s);t[r]=ne(o),Qt(s,n)}}else t[r]=s}n.set(e,t)}else $(i);return n}function K(i){return i.split(".")[0].split(Ot)[0]}function Mr(i){let n=K(i),e=Oe(n,()=>"\uFFFF");return[`${n}${Ot}`,e]}function Me(i,n){return K(i)===K(n)}function Jt(i){return!i.includes(Ot)}var st="__@@oid_do_not_use",Ae="@@id";function Bo(i){if(V(i))return i[Ae]||i[st]}function Lo(i){return V(i)&&(delete i[st],delete i[Ae]),i}function jo(i){let n=Bo(i);n&&z(i,n)}function It(i){if(jo(i),Lo(i),Array.isArray(i))for(let n=0;n<i.length;n++)It(i[n]);else if(V(i))for(let n of Object.keys(i))It(i[n])}function Mo(i){let{collection:n,id:e,subId:t}=ue(i);return ee(n,e,t)}var Vo=/"\w+\/[^"]+?(\.[^"]+)+\:[\S]+?"/g;function Uo(i){return i.replaceAll(Vo,n=>{let e=n.slice(1,n.length-1);return`"${Mo(e)}"`})}function hi(i){return JSON.parse(Uo(JSON.stringify(i)))}function Vr(i){let n=K(i);return[`${n}.`,`${n}.\uFFFF`]}function pi(i){return i===Ae||i===st}var Ve=class{constructor(n,e){this.getNow=n,this.createSubId=e,this.isPrimitive=t=>!V(t)||$(t),this.createDiff=(t,r,s={})=>Gt(t,r,this.getNow,this.createSubId,[],s),this.createInitialize=(t,r,s,o)=>o?Cr(t,r,this.getNow,void 0,s?{authz:s}:void 0):He(t,r,this.getNow,this.createSubId,void 0,s?{authz:s}:void 0),this.createSet=(t,r,s,o)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:r,value:s},authz:o}];{let a=Oe(t,this.createSubId);return[...He(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"set",value:ne(a),name:r},authz:o}]}},this.createRemove=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:r},authz:s}],this.createListSet=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:s},authz:o}];{let a=Oe(t,this.createSubId);return[...He(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:ne(a)},authz:o}]}},this.createListPush=(t,r,s)=>{if(this.isPrimitive(r))return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:r},authz:s}];{let o=Oe(t,this.createSubId);return[...He(r,o,this.getNow,void 0,void 0,{authz:s}),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:ne(o)},authz:s}]}},this.createListAdd=(t,r,s)=>this.isPrimitive(r)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:r},authz:s}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:ne(r)},authz:s}],this.createListInsert=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:s,index:r},authz:o}];{let a=Oe(t,this.createSubId);return[...He(s,a,this.getNow,this.createSubId,void 0,o?{authz:o}:void 0),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:ne(a),index:r},authz:o}]}},this.createListInsertMany=(t,r,s,o)=>{L(r>=0,"List index must be non-negative");let a=[],l=s.map(p=>{if(this.isPrimitive(p))return p;let h=Oe(t,this.createSubId);return a.push(...He(p,h,this.getNow,this.createSubId,void 0,{authz:o})),ne(h)});return a.push({oid:t,timestamp:this.getNow(),data:{op:"list-insert",values:l,index:r},authz:o}),a},this.createListRemove=(t,r,s,o)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:r,only:s},authz:o}],this.createListDelete=(t,r,s=1,o)=>(L(r>=0,"List index must be non-negative"),L(s>0,"Count must be positive and non-zero"),[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:r,count:s},authz:o}]),this.createListMoveByRef=(t,r,s,o)=>(L(s>=0,"List index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:r,index:s},authz:o}]),this.createListMoveByIndex=(t,r,s,o)=>(L(r>=0,"List move from index must be non-negative"),L(s>=0,"List move to index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:r,to:s},authz:o}]),this.createDelete=(t,r)=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"},authz:r}],this.createDeleteAll=(t,r)=>t.map(s=>({oid:s,timestamp:this.getNow(),data:{op:"delete"},authz:r}))}};function ot(i,n){if(i===n)return!0;if($(i)&&$(n))return Pe(i,n);let e=G(i),t=G(n);return!!(e&&t&&e===t)}function Ur(i,n,e,t){if(!Et(n))return n;let r=G(n);if(!r)t.mergeUnknownObjects&&e&&z(n,e);else if(!Me(i,r))return de(n,!1);return n}function Et(i){return V(i)&&!$(i)}function Gt(i,n,e,t,r,s){var o;let a={patches:[],mergeUnknownObjects:s?.mergeUnknownObjects,merge:(o=s?.merge)!==null&&o!==void 0?o:s?.defaultUndefined,authz:s?.authz,patchCreator:new Ve(e,t)};return Yt(i,n,a),a.patches}function Yt(i,n,e){if(Array.isArray(i)&&Array.isArray(n))No(i,n,e);else{if(Array.isArray(i)||Array.isArray(n))throw new q(q.Code.Unexpected,void 0,"Cannot diff between array and non-array");Et(i)&&Et(n)&&zo(i,n,e)}}function No(i,n,e){let t=se(i),r=[],s=new Set;for(let h=0;h<i.length;h++){let O=i[h];r[h]=O;let v=G(O);v&&s.add(v)}for(let h=0;h<n.length;h++){let O=n[h],v=i[h];n[h]=Ur(t,O,G(v),e)}let o=!0,a=new Set,l=new Set;for(let h=0;h<n.length;h++){let O=n[h],v=r[h];O===void 0&&(o=!1);let P=G(O),y=o&&h>=r.length;if(P&&s.has(P))if(ot(O,v))Yt(v,O,e);else{e.patches.push(...e.patchCreator.createListMoveByRef(t,ne(P),h,e.authz));let I=G(v);I&&l.add(I),a.add(P)}else if(y)e.patches.push(...e.patchCreator.createListPush(t,O,e.authz));else if(ot(O,v))Yt(v,O,e);else{let I=h===0||ot(n[h-1],r[h-1]),_=h===n.length-1||ot(n[h+1],r[h]);I&&_?(e.patches.push(...e.patchCreator.createListInsert(t,h,O,e.authz)),r.splice(h,0,void 0)):e.patches.push(...e.patchCreator.createListSet(t,h,O,e.authz))}}if(r.length-n.length>0)for(let h=r.length-1;h>=n.length;h--){let O=r[h],v=G(O);v?a.has(v)||(at(O,e),e.patches.push(...e.patchCreator.createListRemove(t,ne(v),"last",e.authz))):e.patches.push(...e.patchCreator.createListRemove(t,O,"last",e.authz))}for(let h of l){if(a.has(h))continue;let O=i.find(v=>G(v)===h);O&&at(O,e),e.patches.push(...e.patchCreator.createListRemove(t,ne(h),"last",e.authz))}}function zo(i,n,e){let t=new Set(Object.keys(i)),r=se(i);for(let s in n){let o=n[s];if(o===void 0&&e.merge||(t.delete(s),pi(s)))continue;let a=i[s];Et(o)?(Ur(r,o,G(a),e),a?ot(o,a)?Yt(a,o,e):(e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz))):ot(o,a)||(o===void 0?e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e))}if(!e.merge)for(let s of t)pi(s)||(e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)),at(i[s],e))}function at(i,n){if(!Et(i))return;let e=G(i);if(e){n.patches.push(...n.patchCreator.createDelete(e,n.authz));for(let t in i){let r=i[t];at(r,n)}}}var N=class{constructor(n){this._onAllUnsubscribed=n,this.subscribers={},this.counts={},this._disabled=!1,this.disposed=!1,this.subscriberCount=e=>{var t;return(t=this.counts[e])!==null&&t!==void 0?t:0},this.totalSubscriberCount=()=>Object.values(this.counts).reduce((e,t)=>e+t,0),this.subscribe=(e,t)=>{let r=xt(),s=this.subscribers[e];return s||(s=this.subscribers[e]={}),s[r]=t,this.counts[e]=(this.counts[e]||0)+1,()=>{this.subscribers[e]&&(delete this.subscribers[e][r],this.counts[e]--,this.counts[e]===0&&(delete this.subscribers[e],delete this.counts[e],this._onAllUnsubscribed&&this._onAllUnsubscribed(e)))}},this.emit=(e,...t)=>{this._disabled||this.subscribers[e]&&Object.values(this.subscribers[e]).forEach(r=>r(...t))},this.dispose=()=>{this._disabled=!0,this.disposed=!0;let e=Object.keys(this.subscribers);this.subscribers={},this.counts={},e.forEach(t=>{this._onAllUnsubscribed&&this._onAllUnsubscribed(t)})},this.disable=()=>{this._disabled=!0}}get disabled(){return this._disabled}};var Xt="\uFFFFFE",$o="\0",Ko="\uFFFFFF";function ye(...i){let n=qo(i);return n.length===1?n[0]:n}function Re(...i){return i.join(Xt)+`${Ko}`}function Ee(...i){return i.join(Xt)+`${Xt}${$o}`}function qo(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(Xt))))}function Nr(i){return!!i.field}function Ho(i,n){let e={};for(let[t,r]of Object.entries(i.indexes||{})){let s=r;Nr(s)?e[t]=Ie(n[s.field]):e[t]=Ie(s.compute(n))}return e}function Qo(i,n){return Object.entries(i.compounds||{}).reduce((e,[t,r])=>(e[t]=ye(...r.of.map(s=>n[s])),e),{})}function Wo(i,n){return Object.entries(i.fields).reduce((e,[t,r])=>("indexed"in r&&(e[t]=Ie(n[t])),e),{})}function mi(i,n){let e=Object.assign(Object.assign({[i.primaryKey]:n[i.primaryKey]},Wo(i,n)),Ho(i,n));return Object.assign(e,Qo(i,Object.assign(Object.assign({},n),e))),e}var Jo="null";function Ie(i){if(i===null)return Jo;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(Ie);throw new Error(`Unsupported index value: ${i}`)}function zr(i,n){let e,t;return(...r)=>{let s=n();return e&&e.length===s.length&&e.every((o,a)=>o===s[a])||(e=[...s],t=i(...r)),t}}var Go={version:0,collections:{}};function $r(i){return i?[...Object.keys(i.indexes||{}).map(n=>{let e=i.indexes[n],t=e.type;!t&&e.field&&(t=i.fields[e.field].type),L(t,`Could not determine type of index ${i}.${n}. Index must have a type. Perhaps your schema is malformed?`);let r=_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 yi(i,n,e){let t=typeof n=="function"||n===void 0,r=t?Go:i,s=t?i:n,o=t?n:e;L(r,"Invalid arguments to createMigration"),L(s,"Invalid arguments to createMigration");let{changedCollections:a,addedCollections:l,removedCollections:p,addedIndexes:h,removedIndexes:O,autoMigratedCollections:v,autoMigration:P}=Yo(r,s);return{version:s.version,migrate:async y=>{let I=[];if(await o?.({migrate:async(E,D)=>{let k=P(E),b=async S=>{let u=await D(S);z(u,se(S));let m=k(u),d=qr(s.collections[E].fields,m);return m};await y.migrate(E,b),I.push(E),v.delete(E)},info:{changedCollections:a,addedCollections:l,removedCollections:p},queries:y.queries,mutations:y.mutations}),s.version>1){y.log("debug","auto-migrating collections with new defaults",v);for(let D of v)await y.migrate(D,P(D)),I.push(D);for(let D of p)await y.deleteCollection(D);let E=a.filter(D=>!I.includes(D));E.length>0&&y.log("error",`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,E)}},removedCollections:p,addedIndexes:h,removedIndexes:O,allCollections:Object.keys(s.collections),changedCollections:a,addedCollections:l,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function Yo(i,n){let e=Object.keys(n.collections).filter(h=>i.collections[h]&&li(i.collections[h])!==li(n.collections[h])),t=Object.keys(i.collections).filter(h=>!n.collections[h]),r=Object.keys(n.collections).filter(h=>!i.collections[h]),s=new Set;for(let h of e){let O=i.collections[h].fields,v=n.collections[h].fields;Object.keys(v).some(P=>(!O[P]||gi(O[P]))&&!gi(v[P]))&&s.add(h),Object.keys(O).some(P=>!v[P])&&s.add(h)}let o={},a={};for(let h of[...e,...r]){let O=$r(i.collections[h]),v=$r(n.collections[h]),P=v.filter(I=>!O.find(_=>_.name===I.name)),y=O.filter(I=>!v.find(_=>_.name===I.name));P.length>0&&(o[h]=P,e.includes(h)&&s.add(h)),y.length>0&&(a[h]=y,e.includes(h)&&s.add(h))}return{changedCollections:e,addedCollections:r,removedCollections:t,addedIndexes:o,removedIndexes:a,autoMigratedCollections:s,withDefaults:(h,O)=>Qe(n.collections[h],O),autoMigration:h=>O=>{let v=n.collections[h];return Qe(v,Kr(v,O))}}}var bi={};var Ue;(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"})(Ue||(Ue={}));var is=Be(We(),1),ra=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 sa(i){let{properties:n,fields:e}=i,t=ra(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 oa(i,n){return i.properties=n,i}function aa(i){return Object.assign({type:"array"},i)}function ca(i,n){return i.items=n,i}var la=i=>Object.assign({type:"string"},i),da=i=>Object.assign({type:"number"},i),ua=i=>Object.assign({type:"boolean"},i),fa=i=>Object.assign({type:"any"},i);function ha(i){return Object.assign({type:"map"},i)}function pa(i,n){return i.values=n,i}var ma=i=>Object.assign({type:"file"},i),ga=()=>({type:"string",default:is.default}),rs={object:sa,array:aa,replaceObjectFields:oa,replaceArrayItems:ca,string:la,number:da,boolean:ua,any:fa,map:ha,replaceMapValues:pa,file:ma,id:ga};var cs=Be(We(),1);function tn(i){return i.equals!==void 0}function nn(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function ss(i){return!!i.match}function rn(i){return i.startsWith!==void 0}function Ii(i){return!nn(i)&&!tn(i)&&!ss(i)&&!rn(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 Oi(s.type);if("field"in s){let a=i.fields[s.field];return a?Oi(a.type):!1}}let o=i.fields[n];return o?Oi(o.type):!1}function Oi(i){return i==="array"||i.endsWith("[]")}function pe(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Fe(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.default!==void 0:!1}function gi(i){return!pe(i)&&!Fe(i)}function Qe(i,n){for(let[e,t]of Object.entries(i.fields)){let r=_e(t);(r!==void 0&&n[e]===void 0||!pe(t)&&n[e]===null)&&(n[e]=r),n[e]&&Je(n[e],t)}return n}function Je(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=_e(t);r!==void 0&&(i[e]=r)}Je(i[e],t)}else if(n.type==="array")for(let e of i)Je(e,n.items);else if(n.type==="map")for(let[e,t]of Object.entries(i))e===Ae||e===st||Je(t,n.values)}function _e(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]=_e(r));return e}if(pe(i))return null;if(i.type==="array")return[];if(i.type==="map")return{}}function Kr(i,n){for(let[e,t]of Object.entries(n))e===Ae||e===st||(i.fields[e]?Ei(t,i.fields[e]):delete n[e]);return n}function Ei(i,n){if(V(i)&&n.type==="object")for(let[e,t]of Object.entries(i))n.properties[e]?Ei(t,n.properties[e]):delete i[e];else if(Array.isArray(i)&&n.type==="array")for(let e of i)Ei(e,n.items)}function os(i){return i.type==="string"||i.type==="number"||i.type==="boolean"}function qr(i,n){for(let[e,t]of Object.entries(n))if(e!==Ae){if(!i[e])return{type:"invalid-key",fieldPath:[e],message:`Invalid field "${e}"`};if(t){let r=Te({field:i[e],value:t,fieldPath:[e]});if(r)return r}}}function Te({field:i,value:n,fieldPath:e=[],depth:t,requireDefaults:r,expectRefs:s,hasPassedFirstLevel:o}){let a=s&&o;if(!(t!==void 0&&t<=0)&&!(pe(i)&&n==null)){if(n==null&&(r||!Fe(i)))return{type:"no-default",fieldPath:e,message:`Invalid null value for field ${fe(e)}`};if(i.type==="object")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${be(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected object ${i.nullable?"or null ":""}for field ${fe(e)}, got ${be(n)}`};for(let[l,p]of Object.entries(i.properties)){if(l===Ae)continue;let h=Te({field:p,value:n[l],fieldPath:[...e,l],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(h)return h}for(let l of Object.keys(n))if(!i.properties[l])return{type:"invalid-key",fieldPath:[...e,l],message:`Invalid unexpected field "${l}" on value ${fe(e)}`}}else if(i.type==="array")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${be(n)}`}}else{if(!Array.isArray(n))return n===null&&i.nullable?void 0:{type:"invalid-value",fieldPath:e,message:`Expected array ${i.nullable?"or null ":""}for field ${fe(e)}, got ${be(n)}`};for(let l of n){let p=Te({field:i.items,value:l,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(p)return p}}else if(i.type==="map")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${fe(e)}, got ${be(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected map for field ${fe(e)}, got ${be(n)}`};for(let[l,p]of Object.entries(n)){let h=Te({field:i.values,value:p,fieldPath:[...e,l],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(h)return h}}else if(i.type==="string"){if(typeof n!="string")return{type:"invalid-type",fieldPath:e,message:`Expected string ${i.nullable?"or null ":""}for field ${fe(e)}, got ${be(n)}`};if(i.options&&!i.options.includes(n))return{type:"invalid-value",fieldPath:e,message:`Expected one of ${i.options.join(", ")} for field ${fe(e)}, got ${be(n)}`}}else if(i.type==="boolean"){if(typeof n!="boolean")return{type:"invalid-type",fieldPath:e,message:`Expected boolean ${i.nullable?"or null ":""}for field ${fe(e)}, got ${be(n)}`}}else if(i.type==="number"){if(typeof n!="number")return{type:"invalid-type",fieldPath:e,message:`Expected number ${i.nullable?"or null ":""}for field ${fe(e)}, got ${be(n)}`}}else if(i.type==="file"){if(a){if(!he(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ref for field ${fe(e)}, got ${be(n)}`}}else if(!it(n)&&!zt(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ${i.nullable?"or null ":""}for field ${fe(e)}, got ${be(n)}`}}}}function be(i){try{return JSON.stringify(i)}catch{return String(i)}}function fe(i){return i.length===0?"root":i.join(".")}function as(i,n){let e={};for(let[t,r]of Object.entries(n))i[t]&&(e[t]=sn({field:i[t],value:r,fieldPath:[t]}));return e}function sn({field:i,value:n,fieldPath:e=[],depth:t}){let r=Te({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]=sn({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=>sn({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]=sn({field:i.values,value:a,fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else return n}}function Ne(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 ya=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 ba(i){var{synthetics:n,indexes:e}=i,t=ya(i,["synthetics","indexes"]);let r=Object.assign(Object.assign({},n),e);for(let[s,o]of Object.entries(t.fields))"indexed"in o&&(r[s]={field:s});return Object.assign(Object.assign({},t),{indexes:r})}function Pt(i){return i}Pt.collection=ba;Pt.fields=rs;Pt.generated={id:cs.default};var fs=Be(We(),1),un=4,Rt=36;function ls(i){return i.toString(Rt).padStart(un,"0")}function va(i){return i.toString().padStart(6,"0")}var on=class{constructor(){this.latest={time:Date.now(),counter:0,node:wa()},this.zeroCounter=0,this.now=n=>(this.latest=us(this.latest),this.get(n,this.latest)),this.OLD_now=n=>(this.latest=us(this.latest),va(n)+Sa(this.latest)),this.timerState=()=>this.latest,this.update=n=>{let e=n.slice(un);this.latest=xa(this.latest,hs(e))},this.get=(n,e)=>ls(n)+ds(e),this.zero=n=>ls(n)+ds({time:0,counter:this.zeroCounter++,node:this.latest.node}),this.getWallClockTime=Pi}},an=class extends Error{constructor(...n){super(),this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(n).join(" ")}},cn=class extends Error{constructor(){super(),this.type="OverflowError",this.message="timestamp counter overflow"}},_i=4,Di=7,ln=60*1e3,At=9;function wa(){return fs.default.slug().padStart(Di,"0").slice(0,Di)}function ds(i){let n=new Date(i.time).getTime().toString(Rt).padStart(At,"0"),e=i.counter.toString(Rt).padStart(_i,"0"),t=i.node.padStart(Di,"0");return`${n}${e}${t}`}function us(i){let n=Date.now(),e=Math.max(i.time,n),t=i.time===e?i.counter+1:0;if(e-n>ln)throw new an(e,n,ln);if(t>65535)throw new cn;return{time:e,counter:t,node:i.node}}function xa(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>ln)throw new an(t,e,ln);if(s>65535)throw new cn;return{time:t,counter:s,node:i.node}}function hs(i){let n=i.slice(0,At),e=i.slice(At,At+_i),t=i.slice(At+_i),r=parseInt(n,Rt),s=parseInt(e,Rt);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:t}}function Sa(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 dn(i){return parseInt(i.slice(0,un),36)}function Ci(i,n){return dn(i)-dn(n)}function Pi(i){return hs(i.slice(un)).time}function ps(i,n,e,t,r,s){let o=new Ve(t,r);if(n==null)return[{oid:i,timestamp:t(),data:{op:"delete"},authz:s}];let a=de(n),l=[];for(let p of e){let h=Oa(i,a,p,o,s);l.unshift(...h),je(a,p.data)}return l}function Oa(i,n,e,t,r){var s,o;let a=e.data;switch(a.op){case"set":return n[a.name]===void 0?t.createRemove(i,a.name,r):t.createSet(i,a.name,n[a.name],r);case"remove":return n[a.name]===void 0?[]:t.createSet(i,a.name,n[a.name],r);case"list-insert":return a.value===void 0&&((s=a.values)===null||s===void 0?void 0:s.length)===0?[]:t.createListDelete(i,a.index,a.value?1:((o=a.values)===null||o===void 0?void 0:o.length)||0,r);case"list-delete":return t.createListInsertMany(i,a.index,n.slice(a.index,a.index+a.count),r);case"list-move-by-ref":return t.createListMoveByRef(i,a.value,Ft(n,a.value),r);case"list-move-by-index":return t.createListMoveByIndex(i,a.to,a.from,r);case"delete":return t.createInitialize(n,i,r,!0);case"list-push":return t.createListRemove(i,a.value,"last",r);case"list-remove":if(a.only==="last"){let l=Ft(n,a.value,0,"backward");return l===-1?[]:t.createListInsert(i,l,a.value,r)}else if(a.only==="first"){let l=Ft(n,a.value);return l===-1?[]:t.createListInsert(i,l,a.value,r)}else{let l=[],p=Ft(n,a.value);for(;p!==-1;)l.push(p),p=Ft(n,a.value,p+1);return l.flatMap(h=>t.createListInsert(i,h,a.value,r))}case"list-add":return t.createListRemove(i,a.value,"last",r);case"list-set":return n[a.index]!==void 0?t.createListSet(i,a.index,n[a.index],r):t.createListDelete(i,a.index,1,r);case"initialize":return t.createDelete(i,r);case"touch":return[];default:throw new Error(`Cannot undo operation type: ${a.op}`)}}function Ft(i,n,e=0,t="forward"){let r=t==="forward"?"findIndex":"findLastIndex";return $(n)?i[r]((s,o)=>$(s)&&s.id===n.id&&o>=e):i[r]((s,o)=>s===n&&o>=e)}var fn=class{constructor(n,e){this.schema=n;this.entities=e;this.getOid=(n,e)=>{let t=this.schema.collections[n].primaryKey,r=e[t];return L(r,`Document must have a primary key: ${t.toString()} (got: ${JSON.stringify(e)})`),ee(n,r)};this.addDefaults=(n,e)=>{let t=this.schema.collections[n];return Qe(t,e)};this.validate=(n,e)=>{let t=this.schema.collections[n];return as(t.fields,e)};this.create=async(n,e,t={})=>{let r=t,s=this.addDefaults(n,e),o=this.validate(n,s),a=this.getOid(n,o);if(t.access){let l=this.schema.collections[n];t.access!=="shared"&&e[l.primaryKey]&&!t.silenceAccessControlWithPrimaryKeyWarning&&console.warn("Using a custom primary key with access control is not supported. This may result in corrupted documents. Read more about why: https://verdant.dev/docs/sync/access#a-warning-about-custom-primaryKey"),r.access=t.access}return this.entities.create(o,a,r)};this.delete=async(n,e,t={})=>{let r=ee(n,e);return this.entities.delete(r,t)};this.deleteAll=async(n,e={})=>this.entities.deleteAll(n.map(([t,r])=>ee(t,r)),e);this.deleteAllFromCollection=async(n,e,t={})=>this.entities.deleteAll(e.map(r=>ee(n,r)),t);this.clone=async(n,e,t={})=>{if(!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 En=Be(Ws(),1);var Ki=Be(We(),1);function Va(i){return{id:(0,Ki.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function lt(i,n){if(typeof window<"u"&&it(i)){let e=Va(i);return n(e),St(e.id)}if(zt(i)){let e={...i,id:(0,Ki.default)()};return n(e),St(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=lt(i[e],n);return i}if(typeof i=="object"){for(let e in i)i[e]=lt(i[e],n);return i}return i}var oe=class{constructor(){this._disposes=[];this.disposed=!1;this.dispose=async()=>{this.disposed=!0,await Promise.all(this._disposes.map(async n=>{try{await n()}catch(e){console.error("Error disposing",e)}})),this._disposes=[]};this.compose=n=>this.addDispose(n.dispose.bind(n));this.addDispose=n=>{this._disposes.push(n)}}};var dt=Symbol("entity-file-update"),xn=Symbol("entity-file-mark-failed"),qi=Symbol("child-file-changed"),Ua,Na,ve=class extends N{constructor(e,{downloadRemote:t=!1,ctx:r,parent:s}){super();this.id=e;this._objectUrl=null;this._fileData=null;this._loading=!0;this._failed=!1;this._downloadRemote=!1;this._uploaded=!1;this.unsubscribes=[];this[Ua]=e=>{this.ctx.log("debug","EntityFile updated",this.id,e),this._loading=!1,this._failed=!1,this._fileData=e,e.file&&(this._objectUrl&&"revokeObjectURL"in URL&&URL.revokeObjectURL(this._objectUrl),this.ctx.log("debug","Creating object URL for file",this.id),this._objectUrl=URL.createObjectURL(e.file)),this.emitChange()};this[Na]=e=>{this._failed=!0,this._failedReason=e,this._loading=!1,this.emitChange()};this.onUploaded=e=>{this._fileData??=e,this._uploaded=!0,this.ctx.log("debug","File marked uploaded",this.id,this._fileData),this.emitChange()};this.destroy=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this.dispose()};this.ctx=r,this.parent=s,this._downloadRemote=t,this.unsubscribes.push(this.ctx.internalEvents.subscribe(`fileUploaded:${e}`,this.onUploaded))}static{Ua=dt,Na=xn}get downloadRemote(){return this._downloadRemote}get isFile(){return!0}get isUploaded(){return this._uploaded||this._fileData?.remote||!1}get error(){return this._failedReason||null}emitChange(){this.parent[qi](this),this.emit("change")}get url(){return this.loading?null:this._objectUrl?this._objectUrl:this._fileData?.url??null}get name(){return this._fileData?.name??null}get type(){return this._fileData?.type??null}get loading(){return this._loading}get failed(){return this._failed}getSnapshot(){return{id:this.id,url:this._objectUrl??this._fileData?.url??void 0,name:this.name??"unknown-file",remote:this._fileData?.remote??!1,type:this.type??"",file:this._fileData?.file}}};var Sn=class{constructor({initial:n,ctx:e}){this.cache=new Map;this.get=n=>{let e=this.getCached(n.oid);if(e)return e;let t=new me(n);return this.cache.set(n.oid,this.ctx.weakRef(t)),t};this.has=n=>this.cache.has(n);this.getCached=n=>{if(this.cache.has(n)){let t=this.cache.get(n)?.deref();if(t)return t;this.cache.delete(n)}return null};if(this.ctx=e,n)for(let t of n)this.cache.set(t.oid,e.weakRef(t))}};function Js(i,n,e){let t={previousValue:i.get(n),isLocal:!1};function r(s){if(i.deleted)return;let o=i.get(n);o!==this.previousValue&&(this.isLocal=s.isLocal,e(o,this),this.previousValue=o)}return i.subscribe("change",r.bind(t))}var Gs=Symbol("private entity context key"),$a,me=class i extends N{constructor({oid:e,schema:t,entityFamily:r,parent:s,ctx:o,metadataFamily:a,readonlyKeys:l,files:p,storeEvents:h,deleteSelf:O,fieldPath:v}){super();this.fieldPath=[];this._viewData=void 0;this.validationError=void 0;this.cachedDeepUpdatedAt=null;this.wasDeletedLastChange=!1;this.cachedView=void 0;this.onAdd=(e,t)=>{t.oid===this.oid&&this.addConfirmedData(t)};this.onReplace=(e,t)=>{t.oid===this.oid&&this.replaceAllData(t)};this.onResetAll=()=>{this.resetAllData()};this.childIsNull=e=>{if(e instanceof i){let t=e.view;return t==null}return e==null};this.getFieldSchema=e=>{let t=Ne(this.schema,e);return L(t,`No schema for key ${e}`),t};this.validate=zr(()=>(this.validationError=Te({field:this.schema,value:this.rawView,fieldPath:this.fieldPath,expectRefs:!0})??void 0,this.validationError),()=>[this.viewData]);this.viewWithMappedChildren=e=>{let t=this.view;if(!t)return null;if(Array.isArray(t)){let r=t.map(s=>s instanceof i||s instanceof ve?e(s):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>(a instanceof i||a instanceof ve?s[o]=e(a):s[o]=a,s),{});return z(r,this.oid),r}};this.rawViewWithMappedChildren=e=>{let t=this.rawView;if(!t)return null;if(Array.isArray(t)){let r=t.map((s,o)=>$(s)?e(this.getChild(o,s.id)):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>($(a)?s[o]=e(this.getChild(o,a.id)):s[o]=a,s),{});return z(r,this.oid),r}};this.getSnapshot=()=>this.viewWithMappedChildren(e=>e.getSnapshot());this.getUnprunedSnapshot=()=>this.rawViewWithMappedChildren(e=>e instanceof ve?e.getSnapshot():e.getUnprunedSnapshot());this.addPendingOperations=e=>{this.ctx.log("debug","Entity: adding pending operations",this.oid,e),this.deepInvalid&&(this.ctx.log("warn","Changes are being applied to a pruned entity. This means that the pruned version is being treated as the new baseline and any pruned invalid data is lost.",this.oid),this.canonizePrunedVersion()),this.applyPendingOperations(e)};this.applyPendingOperations=e=>{if(this.access)for(let r of e)r.authz=this.access;let t=this.metadataFamily.addPendingData(e);for(let r of t)this.change(r)};this.getPruneDiff=()=>{let e=this.getSnapshot(),t=this.getUnprunedSnapshot();return this.patchCreator.createDiff(t,e,{authz:this.access,merge:!1})};this.canonizePrunedVersion=()=>{this.applyPendingOperations(this.getPruneDiff())};this.addConfirmedData=e=>{this.ctx.log("debug","Entity: adding confirmed data",this.oid);let t=this.metadataFamily.addConfirmedData(e);for(let r of t)this.change(r)};this.replaceAllData=e=>{this.ctx.log("debug","Entity: replacing all data",this.oid);let t=this.metadataFamily.replaceAllData(e);for(let r of t)this.change(r)};this.resetAllData=()=>{this.ctx.log("debug","Entity: resetting all data",this.oid),this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this._viewData=void 0;let e=this.metadataFamily.replaceAllData({});for(let t of e)this.change(t)};this.invalidateCachedView=()=>{this._viewData=void 0,this.cachedView=void 0};this.invalidate=e=>{if(e.oid===this.oid)this.invalidateCachedView();else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.invalidate(e)}};this.change=e=>{if(e.oid===this.oid)this.invalidateCachedView(),this.parent?this.changeNested(e):this.changeRoot(e);else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.change(e)}};this.changeRoot=e=>{this.deleted?this.wasDeletedLastChange?this.ctx.log("debug","Entity already deleted, not emitting delete or change events",this.oid):(this.ctx.log("debug","Entity deleted",this.oid),this.emit("delete",{isLocal:e.isLocal}),this.wasDeletedLastChange=!0):(this.wasDeletedLastChange&&(this.ctx.log("debug","Entity restored",this.oid),this.emit("restore",{isLocal:e.isLocal}),this.wasDeletedLastChange=!1),this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal}))};this.changeNested=e=>{if(this.deleted){this.ctx.log("debug","Entity deleted, not emitting change",this.oid);return}this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal})};this.deepChange=(e,t)=>{if(this.deleted){this.ctx.log("debug","Entity deleted, not emitting deep change",this.oid);return}this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this.emit("changeDeep",e,t),this.parent?.deepChange(e,t)};this[$a]=e=>{this.deepChange(this,{isLocal:!1,oid:this.oid})};this.getChild=(e,t)=>{let r=Ne(this.schema,e);if(!r)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);return this.entityFamily.get({oid:t,schema:r,entityFamily:this.entityFamily,metadataFamily:this.metadataFamily,parent:this,ctx:this.ctx,files:this.files,fieldPath:[...this.fieldPath,e],storeEvents:this.storeEvents,deleteSelf:this.delete.bind(this,e)})};this.subscribeToField=(e,t,r)=>Js(this,e,r);this.get=e=>{Hi(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=Ne(this.schema,e);if(!s)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);if($(r))if(he(r)){if(s.type!=="file"){if(pe(s))return null;if(Fe(s))return _e(s);throw new Error(`Expected file schema for key ${String(e)}, got ${s.type}`)}return this.files.get(r.id,{downloadRemote:!!s.downloadRemote,ctx:this.ctx,parent:this})}else{if(s.type==="file"){if(console.error(`Expected file ref for key ${String(e)}, got ${r}`),pe(s))return null;if(Fe(s))return _e(s);throw new Error(`No valid value for key ${String(e)} in ${JSON.stringify(this.schema)}`)}let o=this.getChild(e,r.id);if(o.deepInvalid){if(s.type==="array"||s.type==="map")return o;if(pe(s))return null;if(Fe(s)){let a=o.getUnprunedSnapshot(),l=this.patchCreator.createDiff(a,_e(s),{merge:!1,mergeUnknownObjects:!0,authz:this.access});return this.processPrunedChild(e,o,l)}}return o}else{if(this.schema.type==="map"&&r===void 0)return;if(Te({field:s,value:r,fieldPath:[...this.fieldPath,e],depth:1,requireDefaults:!0}))if(Fe(s)){if(os(s))return _e(s);let o=_e(s),a=Oe(this.oid),l=this.patchCreator.createInitialize(o,a,this.access);l.push(...this.patchCreator.createSet(this.oid,e,ne(a),this.access));let p=this.getChild(e,a);return this.processPrunedChild(e,p,l)}else return;return r}};this.processPrunedChild=(e,t,r)=>{this.ctx.log("warn","Replacing invalid child object field with ephemeral, valid data",this.oid,e);let s=this.metadataFamily.addEphemeralData(r);for(let o of s)this.invalidate(o);return t};this.getOrSet=(e,t)=>{Hi(e);let r=this.get(e);return r||(this.set(e,t),this.get(e))};this.processInputValue=(e,t)=>{if(this.readonlyKeys.includes(t))throw new Error(`Cannot set readonly key ${t.toString()}`);it(e)||(e=de(e,!1));let r=Ne(this.schema,t);if(r){Je(e,r);let s=Te({field:r,value:e,fieldPath:[...this.fieldPath,t]});if(s)throw new Error(`Validation error: ${s.message}`,{cause:s})}return lt(e,s=>this.files.add(s,this))};this.getDeleteMode=e=>{if(this.readonlyKeys.includes(e))return!1;if(this.schema.type==="any"||this.schema.type==="map")return"delete";if(this.schema.type==="object"){let t=this.schema.properties[e];if(!t||t.type==="any")return"delete";if(t.type==="map")return!1;if(t.nullable)return"null"}return!1};this.getItemRefValue=e=>{if(e instanceof i)return ne(e.oid);if(e instanceof ve)return St(e.id);if(typeof e=="object"){let t=G(e);if(!t||!this.entityFamily.has(t))throw new Error(`Cannot move object ${JSON.stringify(e)} which does not exist in this list`);return ne(t)}else return e};this.set=(e,t,r)=>{Hi(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)za(e),this.addPendingOperations(this.patchCreator.createListDelete(this.oid,e));else{let t=this.getDeleteMode(e);if(!t)throw new Error(`Cannot delete key ${e.toString()} - the property is not marked as optional in the schema.`);t==="delete"?this.addPendingOperations(this.patchCreator.createRemove(this.oid,e)):this.addPendingOperations(this.patchCreator.createSet(this.oid,e,null))}};this.keys=()=>this.view?Object.keys(this.view):[];this.entries=()=>this.view?Object.entries(this.view):[];this.values=()=>this.view?Object.values(this.view):[];this.update=(e,{merge:t=!0,replaceSubObjects:r=!1,preserveUndefined:s=!1,dangerouslyDisableMerge:o=!1}={})=>{if(!t&&!o&&this.schema.type!=="any"&&this.schema.type!=="map")throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');let a={};z(a,this.oid);for(let[l,p]of Object.entries(e)){if(this.readonlyKeys.includes(l))throw new Error(`Cannot set readonly key ${l.toString()}`);if(p===void 0&&!s)continue;let h=Ne(this.schema,l);h&&Je(p,h),a[l]=this.processInputValue(p,l)}this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(),a,{mergeUnknownObjects:!r,merge:t}))};this.push=e=>{this.addPendingOperations(this.patchCreator.createListPush(this.oid,this.processInputValue(e,this.view.length)))};this.insert=(e,t)=>{this.addPendingOperations(this.patchCreator.createListInsert(this.oid,e,this.processInputValue(t,e)))};this.move=(e,t)=>{this.addPendingOperations(this.patchCreator.createListMoveByIndex(this.oid,e,t))};this.moveItem=(e,t)=>{let r=this.getItemRefValue(e);if($(r))this.addPendingOperations(this.patchCreator.createListMoveByRef(this.oid,r,t));else{let s=this.view.indexOf(e);if(s===-1)throw new Error(`Cannot move item ${JSON.stringify(e)} which does not exist in this list`);this.move(s,t)}};this.add=e=>{this.addPendingOperations(this.patchCreator.createListAdd(this.oid,this.processInputValue(e,this.view.length)))};this.removeAll=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e)))};this.removeFirst=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"first"))};this.removeLast=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"last"))};this.map=e=>this.view.map(e);this.filter=e=>this.view.filter(e);this.has=e=>{if(!this.isList)throw new Error("has() is only available on list entities");let t=this.getItemRefValue(e);return $(t)?this.view.some(r=>{if($(r))return Pe(r,t)}):this.view.includes(e)};this.forEach=e=>{this.view.forEach(e)};this.reduce=(e,t)=>this.view.reduce(e,t);this.some=e=>this.view.some(e);this.every=e=>this.view.every(e);this.find=e=>this.view.find(e);this.includes=this.has;this.deleteSelf=()=>this._deleteSelf();this.__getViewData__=(e,t)=>this.metadataFamily.get(e).computeView(t==="confirmed");this.__getFamilyOids__=()=>this.metadataFamily.getAllOids();this.__discardPendingOperation__=e=>{this.metadataFamily.discardPendingOperation(e),this.invalidateCachedView()};L(!!e,"oid is required"),this.oid=e,this.readonlyKeys=l||[],this.ctx=o,this.files=p,this.schema=t,this.fieldPath=v||[],this.entityFamily=r||new Sn({initial:[this],ctx:o}),this.metadataFamily=a,this.storeEvents=h,this.parent=s,this._deleteSelf=O,this.parent||(h.add.attach(this.onAdd),h.replace.attach(this.onReplace),h.resetAll.attach(this.onResetAll))}get[Gs](){return this.ctx}get metadata(){return this.metadataFamily.get(this.oid)}get patchCreator(){return this.ctx.patchCreator}get viewData(){return this._viewData===void 0&&(this._viewData=this.metadata.computeView(),this.validate()),this._viewData}get rawView(){return this.viewData.view}get view(){if(this.cachedView!==void 0)return this.cachedView;if(this.viewData.deleted)return null;let e=this.rawView;if(!e&&!pe(this.schema)||this.schema.type==="array"&&!Array.isArray(e)||(this.schema.type==="object"||this.schema.type==="map")&&!V(e))return Fe(this.schema)?_e(this.schema):null;let r=this.isList?[]:{};if(z(r,this.oid),Array.isArray(e)){let s=Ne(this.schema,0);if(!s)this.ctx.log("error","No child field schema for list entity.",this.oid);else for(let o=0;o<e.length;o++){let a=this.get(o);this.childIsNull(a)&&!pe(s)?this.ctx.log("error","Child missing in non-nullable field",this.oid,"index:",o):r.push(a)}}else if(V(e)){let s=this.schema.type==="object"?Object.keys(this.schema.properties):Object.keys(e);for(let o of s){let a=Ne(this.schema,o);if(!a){this.ctx.log("error","No child field schema for object entity at key",o),this.schema.type==="map"?r={}:r=null;break}let l=this.get(o);if(this.childIsNull(l)&&!pe(a)){if(this.ctx.log("error","Child entity is missing for non-nullable field",this.oid,"key:",o),this.schema.type!=="map"){r=null;break}}else pe(a)&&l===void 0?r[o]=null:r[o]=l}}return this.cachedView=r,r}get uid(){return this.oid}get deleted(){return this.viewData.deleted||this.view===null}get quickDeleted(){return this._viewData?.deleted||this.cachedView===null}get invalid(){return!!this.validate()}get deepInvalid(){if(this.invalid)return!0;if(Array.isArray(this.rawView)){for(let e=0;e<this.rawView.length;e++)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}else if(V(this.rawView)){for(let e in this.rawView)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}return!1}get isList(){return this.schema.type==="array"||Array.isArray(this.viewData.view)}get updatedAt(){return this.viewData.updatedAt}get deepUpdatedAt(){if(this.cachedDeepUpdatedAt)return this.cachedDeepUpdatedAt;let e=this.updatedAt;return this.isList?this.forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}):this.values().forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}),this.cachedDeepUpdatedAt=e,e}get isOutdatedVersion(){return this.parent?this.parent.isOutdatedVersion:this.viewData.fromOlderVersion}get namespace(){return this.ctx.namespace}get access(){return this.viewData.authz}get isAuthorized(){return!!this.access}get size(){return this.isList?this.length:this.keys().length}get length(){return this.view.length}[($a=qi,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 Hi(i){if(typeof i=="symbol")throw new Error("Symbol keys aren't supported")}function za(i){if(typeof i!="number")throw new Error("Only number keys are supported in list entities")}function Ys(i){return i[Gs].getClient()}var Qi=class{constructor({oid:n,ctx:e,confirmedOperations:t,pendingOperations:r,baseline:s}){this.baseline=null;this.confirmedOperations=[];this.ephemeralOperations=[];this.pendingOperations=[];this.computeView=(n=!1)=>{let e=de(this.baseline?.snapshot??void 0),t=this.baseline?.timestamp??null,r=this.baseline?.authz,s=this.applyOperations(e,!e,this.confirmedOperations,t,t);s.futureSeen&&this.ctx.globalEvents.emit("futureSeen",s.futureSeen),s.authz&&(r=s.authz);let o=!this.ephemeralOperations||n?s:this.applyOperations(s.view,s.deleted,this.ephemeralOperations,s.latestTimestamp,null),a=n?s:this.applyOperations(o.view,o.deleted,this.pendingOperations,o.latestTimestamp,null);a.authz&&(r=a.authz),a.view&&z(a.view,this.oid);let l=!!s.latestTimestamp&&Ci(s.latestTimestamp,this.ctx.time.now)<0,p=!this.baseline&&!this.pendingOperations.length&&!this.confirmedOperations.length;p&&this.ctx.log("warn",`Tried to load Entity ${this.oid} with no data`);let h=a.latestTimestamp??s.latestTimestamp??t,O=h?Pi(h):0;return!a.view&&!a.deleted&&!p&&this.ctx.log("warn",`Entity ${this.oid} has no view, no deleted flag, and not empty`),{view:a.view??void 0,deleted:a.deleted,empty:p,fromOlderVersion:l,updatedAt:O,latestTimestamp:h,authz:r}};this.addBaseline=n=>{if(!(this.baseline&&this.baseline.timestamp>=n.timestamp))for(this.baseline=n;this.confirmedOperations[0]?.timestamp<n.timestamp;)this.confirmedOperations.shift()};this.addConfirmedOperations=n=>{let e=0;for(let t of n){let r=this.confirmedOperations.findIndex(o=>o.timestamp>=t.timestamp);r!==-1?this.confirmedOperations[r].timestamp!==t.timestamp&&(this.confirmedOperations.splice(r,0,t),e++):(this.confirmedOperations.push(t),e++);let s=this.pendingOperations.length;this.discardPendingOperation(t),e-=s-this.pendingOperations.length}return e};this.addPendingOperation=n=>{this.pendingOperations.push(n)};this.addEphemeralOperation=n=>{this.ephemeralOperations||(this.ephemeralOperations=[]),this.ephemeralOperations.push(n)};this.clearEphemeralOperations=()=>{let n=this.ephemeralOperations;return this.ephemeralOperations=[],n};this.discardPendingOperation=n=>{this.pendingOperations=this.pendingOperations.filter(e=>e.timestamp!==n.timestamp)};this.applyOperations=(n,e,t,r,s)=>{let o,a,l=this.ctx.time.now;for(let p of t)if(!(s&&p.timestamp<=s)){if(Ci(p.timestamp,l)>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}};L(n,"oid is required"),this.ctx=e,this.oid=n,t&&(this.confirmedOperations=t),r&&(this.pendingOperations=r),s&&(this.baseline=s)}},On=class{constructor({ctx:n,onPendingOperations:e,rootOid:t}){this.entities=new Map;this.get=n=>(L(n,"oid is required"),this.entities.has(n)||this.entities.set(n,new Qi({oid:n,ctx:this.ctx})),this.entities.get(n));this.getAllOids=()=>Array.from(this.entities.keys());this.addConfirmedData=({baselines:n=[],operations:e={},isLocal:t=!1})=>{let r={};for(let s of n){if(!Me(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(!Me(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o)!==0&&(r[s]??={oid:s,isLocal:t})}return Object.values(r)};this.addPendingData=n=>{this.flushAllEphemeral();let e={};for(let t of n)this.get(t.oid).addPendingOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return this.onPendingOperations(n),Object.values(e)};this.ephemeralMemo=new Array;this.flushAllEphemeral=()=>{for(let n of this.entities.values()){let e=n.clearEphemeralOperations();e&&this.ephemeralMemo.push(...e)}if(this.ephemeralMemo.length){let n=this.ephemeralMemo.slice();this.ephemeralMemo.length=0,this.addPendingData(n)}};this.addEphemeralData=n=>{let e={};for(let t of n)this.get(t.oid).addEphemeralOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return Object.values(e)};this.replaceAllData=({operations:n={},baselines:e=[]})=>{let t=Array.from(this.entities.keys());this.entities.clear();let r={};for(let s of t)r[s]={oid:s,isLocal:!1};for(let s of e){if(!Me(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(!Me(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o),r[s]??={oid:s,isLocal:!1}}return Object.values(r)};this.discardPendingOperation=n=>{this.entities.get(n.oid)?.discardPendingOperation(n)};this.ctx=n,this.rootOid=t,this.onPendingOperations=e}};var kt="@@default",In=class{constructor({batchTimeout:n=200,ctx:e,entities:t}){this.currentBatchKey=kt;this.flushOperations=async(n,e,t)=>{if(!n.length)return;this.ctx.log("debug","Flushing",n.length,"operations from batch",e,"to storage / sync");let r=[],s={};for(let o=n.length-1;o>=0;o--){let a=n[o],l=s[a.oid];if(l&&Tr(a,l)){this.entities.discardPendingOperation(a);continue}let p=Fr(a);p!==!1&&(s[a.oid]||(s[a.oid]=new Set),s[a.oid].add(p)),r.unshift(a)}for(let o of r)o.timestamp=this.ctx.time.now;await this.commitOperations(r,t)};this.commitOperations=async(n,e)=>{if(n.length){if(e.undoable){let t=await this.createUndo({ops:n,source:e.source});t&&this.ctx.undoHistory.addUndo(t)}await this.entities.addData({operations:n,baselines:[],isLocal:!0})}};this.addOperations=n=>{n.length&&(this.batcher.add({key:this.currentBatchKey,items:n}),this.ctx.log("debug","added",n.length,"ops to batch",this.currentBatchKey,", size = ",this.batcher.getSize(this.currentBatchKey)))};this.batch=({undoable:n=!0,batchName:e=xt(),max:t=null,timeout:r=this.defaultBatchTimeout}={})=>{let s=this.batcher.add({key:e,max:t,timeout:r,items:[],userData:{undoable:n}}),o={run:a=>(this.currentBatchKey=e,a(),this.currentBatchKey=kt,o),commit:async()=>(await this.batcher.flush(kt),s.flush()),flush:()=>o.commit(),discard:()=>{this.batcher.discard(e)}};return o};this.flushAll=()=>(this.ctx.log("debug","Flushing all operations"),Promise.all(this.batcher.flushAll()));this.createUndo=async n=>{let e=await this.getInverseOperations(n);return e.length?async()=>{let t=await this.createUndo({ops:e,source:n.source,isRedo:!0});for(let r of e)r.timestamp=this.ctx.time.now;return this.ctx.log("debug",n.isRedo?"Redo":"Undo",e,`
|
|
4
|
+
`)},_domwindow:function(){return m("domwindow")},_bigint:function(d){return m("bigint:"+d.toString())},_process:function(){return m("process")},_timer:function(){return m("timer")},_pipe:function(){return m("pipe")},_tcp:function(){return m("tcp")},_udp:function(){return m("udp")},_tty:function(){return m("tty")},_statwatcher:function(){return m("statwatcher")},_securecontext:function(){return m("securecontext")},_connection:function(){return m("connection")},_zlib:function(){return m("zlib")},_context:function(){return m("context")},_nodescript:function(){return m("nodescript")},_httpparser:function(){return m("httpparser")},_dataview:function(){return m("dataview")},_signal:function(){return m("signal")},_fsevent:function(){return m("fsevent")},_tlswrap:function(){return m("tlswrap")}}}function T(){return{buf:"",write:function(b){this.buf+=b},end:function(b){this.buf+=b},read:function(){return this.buf}}}e.writeToStream=function(b,O,u){return u===void 0&&(u=O,O={}),_(O=E(b,O),u).dispatch(b)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_9a5aa49d.js","/")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){(function(w){"use strict";var A=typeof Uint8Array<"u"?Uint8Array:Array,y="+".charCodeAt(0),I="/".charCodeAt(0),E="0".charCodeAt(0),P="a".charCodeAt(0),_="A".charCodeAt(0),T="-".charCodeAt(0),b="_".charCodeAt(0);function O(u){return u=u.charCodeAt(0),u===y||u===T?62:u===I||u===b?63:u<E?-1:u<E+10?u-E+26+26:u<_+26?u-_:u<P+26?u-P+26:void 0}w.toByteArray=function(u){var m,d;if(0<u.length%4)throw new Error("Invalid string. Length must be a multiple of 4");var v=u.length,v=u.charAt(v-2)==="="?2:u.charAt(v-1)==="="?1:0,x=new A(3*u.length/4-v),M=0<v?u.length-4:u.length,B=0;function j(k){x[B++]=k}for(m=0;m<M;m+=4,0)j((16711680&(d=O(u.charAt(m))<<18|O(u.charAt(m+1))<<12|O(u.charAt(m+2))<<6|O(u.charAt(m+3))))>>16),j((65280&d)>>8),j(255&d);return v==2?j(255&(d=O(u.charAt(m))<<2|O(u.charAt(m+1))>>4)):v==1&&(j((d=O(u.charAt(m))<<10|O(u.charAt(m+1))<<4|O(u.charAt(m+2))>>2)>>8&255),j(255&d)),x},w.fromByteArray=function(u){var m,d,v,x,M=u.length%3,B="";function j(k){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(k)}for(m=0,v=u.length-M;m<v;m+=3)d=(u[m]<<16)+(u[m+1]<<8)+u[m+2],B+=j((x=d)>>18&63)+j(x>>12&63)+j(x>>6&63)+j(63&x);switch(M){case 1:B=(B+=j((d=u[u.length-1])>>2))+j(d<<4&63)+"==";break;case 2:B=(B=(B+=j((d=(u[u.length-2]<<8)+u[u.length-1])>>10))+j(d>>4&63))+j(d<<2&63)+"="}return B}})(e===void 0?this.base64js={}:e)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(i,n,e){(function(t,r,y,o,a,l,p,f,S){var w=i("base64-js"),A=i("ieee754");function y(c,h,g){if(!(this instanceof y))return new y(c,h,g);var D,C,F,U,J=typeof c;if(h==="base64"&&J=="string")for(c=(U=c).trim?U.trim():U.replace(/^\s+|\s+$/g,"");c.length%4!=0;)c+="=";if(J=="number")D=ne(c);else if(J=="string")D=y.byteLength(c,h);else{if(J!="object")throw new Error("First argument needs to be a number, array or string.");D=ne(c.length)}if(y._useTypedArrays?C=y._augment(new Uint8Array(D)):((C=this).length=D,C._isBuffer=!0),y._useTypedArrays&&typeof c.byteLength=="number")C._set(c);else if(Q(U=c)||y.isBuffer(U)||U&&typeof U=="object"&&typeof U.length=="number")for(F=0;F<D;F++)y.isBuffer(c)?C[F]=c.readUInt8(F):C[F]=c[F];else if(J=="string")C.write(c,0,h);else if(J=="number"&&!y._useTypedArrays&&!g)for(F=0;F<D;F++)C[F]=0;return C}function I(c,h,g,D){return y._charsWritten=Lt(function(C){for(var F=[],U=0;U<C.length;U++)F.push(255&C.charCodeAt(U));return F}(h),c,g,D)}function E(c,h,g,D){return y._charsWritten=Lt(function(C){for(var F,U,J=[],X=0;X<C.length;X++)U=C.charCodeAt(X),F=U>>8,U=U%256,J.push(U),J.push(F);return J}(h),c,g,D)}function P(c,h,g){var D="";g=Math.min(c.length,g);for(var C=h;C<g;C++)D+=String.fromCharCode(c[C]);return D}function _(c,h,g,F){F||(R(typeof g=="boolean","missing or invalid endian"),R(h!=null,"missing offset"),R(h+1<c.length,"Trying to read beyond buffer length"));var C,F=c.length;if(!(F<=h))return g?(C=c[h],h+1<F&&(C|=c[h+1]<<8)):(C=c[h]<<8,h+1<F&&(C|=c[h+1])),C}function T(c,h,g,F){F||(R(typeof g=="boolean","missing or invalid endian"),R(h!=null,"missing offset"),R(h+3<c.length,"Trying to read beyond buffer length"));var C,F=c.length;if(!(F<=h))return g?(h+2<F&&(C=c[h+2]<<16),h+1<F&&(C|=c[h+1]<<8),C|=c[h],h+3<F&&(C+=c[h+3]<<24>>>0)):(h+1<F&&(C=c[h+1]<<16),h+2<F&&(C|=c[h+2]<<8),h+3<F&&(C|=c[h+3]),C+=c[h]<<24>>>0),C}function b(c,h,g,D){if(D||(R(typeof g=="boolean","missing or invalid endian"),R(h!=null,"missing offset"),R(h+1<c.length,"Trying to read beyond buffer length")),!(c.length<=h))return D=_(c,h,g,!0),32768&D?-1*(65535-D+1):D}function O(c,h,g,D){if(D||(R(typeof g=="boolean","missing or invalid endian"),R(h!=null,"missing offset"),R(h+3<c.length,"Trying to read beyond buffer length")),!(c.length<=h))return D=T(c,h,g,!0),2147483648&D?-1*(4294967295-D+1):D}function u(c,h,g,D){return D||(R(typeof g=="boolean","missing or invalid endian"),R(h+3<c.length,"Trying to read beyond buffer length")),A.read(c,h,g,23,4)}function m(c,h,g,D){return D||(R(typeof g=="boolean","missing or invalid endian"),R(h+7<c.length,"Trying to read beyond buffer length")),A.read(c,h,g,52,8)}function d(c,h,g,D,C){if(C||(R(h!=null,"missing value"),R(typeof D=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+1<c.length,"trying to write beyond buffer length"),tn(h,65535)),C=c.length,!(C<=g))for(var F=0,U=Math.min(C-g,2);F<U;F++)c[g+F]=(h&255<<8*(D?F:1-F))>>>8*(D?F:1-F)}function v(c,h,g,D,C){if(C||(R(h!=null,"missing value"),R(typeof D=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"trying to write beyond buffer length"),tn(h,4294967295)),C=c.length,!(C<=g))for(var F=0,U=Math.min(C-g,4);F<U;F++)c[g+F]=h>>>8*(D?F:3-F)&255}function x(c,h,g,D,C){C||(R(h!=null,"missing value"),R(typeof D=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+1<c.length,"Trying to write beyond buffer length"),nn(h,32767,-32768)),c.length<=g||d(c,0<=h?h:65535+h+1,g,D,C)}function M(c,h,g,D,C){C||(R(h!=null,"missing value"),R(typeof D=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"Trying to write beyond buffer length"),nn(h,2147483647,-2147483648)),c.length<=g||v(c,0<=h?h:4294967295+h+1,g,D,C)}function B(c,h,g,D,C){C||(R(h!=null,"missing value"),R(typeof D=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+3<c.length,"Trying to write beyond buffer length"),lr(h,34028234663852886e22,-34028234663852886e22)),c.length<=g||A.write(c,h,g,D,23,4)}function j(c,h,g,D,C){C||(R(h!=null,"missing value"),R(typeof D=="boolean","missing or invalid endian"),R(g!=null,"missing offset"),R(g+7<c.length,"Trying to write beyond buffer length"),lr(h,17976931348623157e292,-17976931348623157e292)),c.length<=g||A.write(c,h,g,D,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),h=new Uint8Array(c);return h.foo=function(){return 42},h.foo()===42&&typeof h.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,h){var g;switch(c+="",h||"utf8"){case"hex":g=c.length/2;break;case"utf8":case"utf-8":g=Ce(c).length;break;case"ascii":case"binary":case"raw":g=c.length;break;case"base64":g=ar(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,h){if(R(Q(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 h!="number")for(C=h=0;C<c.length;C++)h+=c[C].length;for(var g=new y(h),D=0,C=0;C<c.length;C++){var F=c[C];F.copy(g,D),D+=F.length}return g},y.prototype.write=function(c,h,g,D){isFinite(h)?isFinite(g)||(D=g,g=void 0):(X=D,D=h,h=g,g=X),h=Number(h)||0;var C,F,U,J,X=this.length-h;switch((!g||X<(g=Number(g)))&&(g=X),D=String(D||"utf8").toLowerCase()){case"hex":C=function(Se,ae,ce,Z){ce=Number(ce)||0;var Y=Se.length-ce;(!Z||Y<(Z=Number(Z)))&&(Z=Y),R((Y=ae.length)%2==0,"Invalid hex string"),Y/2<Z&&(Z=Y/2);for(var et=0;et<Z;et++){var dr=parseInt(ae.substr(2*et,2),16);R(!isNaN(dr),"Invalid hex string"),Se[ce+et]=dr}return y._charsWritten=2*et,et}(this,c,h,g);break;case"utf8":case"utf-8":F=this,U=h,J=g,C=y._charsWritten=Lt(Ce(c),F,U,J);break;case"ascii":case"binary":C=I(this,c,h,g);break;case"base64":F=this,U=h,J=g,C=y._charsWritten=Lt(ar(c),F,U,J);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":C=E(this,c,h,g);break;default:throw new Error("Unknown encoding")}return C},y.prototype.toString=function(c,h,g){var D,C,F,U,J=this;if(c=String(c||"utf8").toLowerCase(),h=Number(h)||0,(g=g!==void 0?Number(g):J.length)===h)return"";switch(c){case"hex":D=function(X,Se,ae){var ce=X.length;(!Se||Se<0)&&(Se=0),(!ae||ae<0||ce<ae)&&(ae=ce);for(var Z="",Y=Se;Y<ae;Y++)Z+=H(X[Y]);return Z}(J,h,g);break;case"utf8":case"utf-8":D=function(X,Se,ae){var ce="",Z="";ae=Math.min(X.length,ae);for(var Y=Se;Y<ae;Y++)X[Y]<=127?(ce+=cr(Z)+String.fromCharCode(X[Y]),Z=""):Z+="%"+X[Y].toString(16);return ce+cr(Z)}(J,h,g);break;case"ascii":case"binary":D=P(J,h,g);break;case"base64":C=J,U=g,D=(F=h)===0&&U===C.length?w.fromByteArray(C):w.fromByteArray(C.slice(F,U));break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":D=function(X,Se,ae){for(var ce=X.slice(Se,ae),Z="",Y=0;Y<ce.length;Y+=2)Z+=String.fromCharCode(ce[Y]+256*ce[Y+1]);return Z}(J,h,g);break;default:throw new Error("Unknown encoding")}return D},y.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},y.prototype.copy=function(c,h,g,D){if(h=h||0,(D=D||D===0?D:this.length)!==(g=g||0)&&c.length!==0&&this.length!==0){R(g<=D,"sourceEnd < sourceStart"),R(0<=h&&h<c.length,"targetStart out of bounds"),R(0<=g&&g<this.length,"sourceStart out of bounds"),R(0<=D&&D<=this.length,"sourceEnd out of bounds"),D>this.length&&(D=this.length);var C=(D=c.length-h<D-g?c.length-h+g:D)-g;if(C<100||!y._useTypedArrays)for(var F=0;F<C;F++)c[F+h]=this[F+g];else c._set(this.subarray(g,g+C),h)}},y.prototype.slice=function(c,h){var g=this.length;if(c=q(c,g,0),h=q(h,g,g),y._useTypedArrays)return y._augment(this.subarray(c,h));for(var D=h-c,C=new y(D,void 0,!0),F=0;F<D;F++)C[F]=this[F+c];return C},y.prototype.get=function(c){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(c)},y.prototype.set=function(c,h){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(c,h)},y.prototype.readUInt8=function(c,h){if(h||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return this[c]},y.prototype.readUInt16LE=function(c,h){return _(this,c,!0,h)},y.prototype.readUInt16BE=function(c,h){return _(this,c,!1,h)},y.prototype.readUInt32LE=function(c,h){return T(this,c,!0,h)},y.prototype.readUInt32BE=function(c,h){return T(this,c,!1,h)},y.prototype.readInt8=function(c,h){if(h||(R(c!=null,"missing offset"),R(c<this.length,"Trying to read beyond buffer length")),!(c>=this.length))return 128&this[c]?-1*(255-this[c]+1):this[c]},y.prototype.readInt16LE=function(c,h){return b(this,c,!0,h)},y.prototype.readInt16BE=function(c,h){return b(this,c,!1,h)},y.prototype.readInt32LE=function(c,h){return O(this,c,!0,h)},y.prototype.readInt32BE=function(c,h){return O(this,c,!1,h)},y.prototype.readFloatLE=function(c,h){return u(this,c,!0,h)},y.prototype.readFloatBE=function(c,h){return u(this,c,!1,h)},y.prototype.readDoubleLE=function(c,h){return m(this,c,!0,h)},y.prototype.readDoubleBE=function(c,h){return m(this,c,!1,h)},y.prototype.writeUInt8=function(c,h,g){g||(R(c!=null,"missing value"),R(h!=null,"missing offset"),R(h<this.length,"trying to write beyond buffer length"),tn(c,255)),h>=this.length||(this[h]=c)},y.prototype.writeUInt16LE=function(c,h,g){d(this,c,h,!0,g)},y.prototype.writeUInt16BE=function(c,h,g){d(this,c,h,!1,g)},y.prototype.writeUInt32LE=function(c,h,g){v(this,c,h,!0,g)},y.prototype.writeUInt32BE=function(c,h,g){v(this,c,h,!1,g)},y.prototype.writeInt8=function(c,h,g){g||(R(c!=null,"missing value"),R(h!=null,"missing offset"),R(h<this.length,"Trying to write beyond buffer length"),nn(c,127,-128)),h>=this.length||(0<=c?this.writeUInt8(c,h,g):this.writeUInt8(255+c+1,h,g))},y.prototype.writeInt16LE=function(c,h,g){x(this,c,h,!0,g)},y.prototype.writeInt16BE=function(c,h,g){x(this,c,h,!1,g)},y.prototype.writeInt32LE=function(c,h,g){M(this,c,h,!0,g)},y.prototype.writeInt32BE=function(c,h,g){M(this,c,h,!1,g)},y.prototype.writeFloatLE=function(c,h,g){B(this,c,h,!0,g)},y.prototype.writeFloatBE=function(c,h,g){B(this,c,h,!1,g)},y.prototype.writeDoubleLE=function(c,h,g){j(this,c,h,!0,g)},y.prototype.writeDoubleBE=function(c,h,g){j(this,c,h,!1,g)},y.prototype.fill=function(c,h,g){if(h=h||0,g=g||this.length,R(typeof(c=typeof(c=c||0)=="string"?c.charCodeAt(0):c)=="number"&&!isNaN(c),"value is not a number"),R(h<=g,"end < start"),g!==h&&this.length!==0){R(0<=h&&h<this.length,"start out of bounds"),R(0<=g&&g<=this.length,"end out of bounds");for(var D=h;D<g;D++)this[D]=c}},y.prototype.inspect=function(){for(var c=[],h=this.length,g=0;g<h;g++)if(c[g]=H(this[g]),g===e.INSPECT_MAX_BYTES){c[g+1]="...";break}return"<Buffer "+c.join(" ")+">"},y.prototype.toArrayBuffer=function(){if(typeof Uint8Array>"u")throw new Error("Buffer.toArrayBuffer not supported in this browser");if(y._useTypedArrays)return new y(this).buffer;for(var c=new Uint8Array(this.length),h=0,g=c.length;h<g;h+=1)c[h]=this[h];return c.buffer};var k=y.prototype;function q(c,h,g){return typeof c!="number"?g:h<=(c=~~c)?h:0<=c||0<=(c+=h)?c:0}function ne(c){return(c=~~Math.ceil(+c))<0?0:c}function Q(c){return(Array.isArray||function(h){return Object.prototype.toString.call(h)==="[object Array]"})(c)}function H(c){return c<16?"0"+c.toString(16):c.toString(16)}function Ce(c){for(var h=[],g=0;g<c.length;g++){var D=c.charCodeAt(g);if(D<=127)h.push(c.charCodeAt(g));else for(var C=g,F=(55296<=D&&D<=57343&&g++,encodeURIComponent(c.slice(C,g+1)).substr(1).split("%")),U=0;U<F.length;U++)h.push(parseInt(F[U],16))}return h}function ar(c){return w.toByteArray(c)}function Lt(c,h,g,D){for(var C=0;C<D&&!(C+g>=h.length||C>=c.length);C++)h[C+g]=c[C];return C}function cr(c){try{return decodeURIComponent(c)}catch{return String.fromCharCode(65533)}}function tn(c,h){R(typeof c=="number","cannot write a non-number as a number"),R(0<=c,"specified a negative value for writing an unsigned value"),R(c<=h,"value is larger than maximum value for type"),R(Math.floor(c)===c,"value has a fractional component")}function nn(c,h,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=h,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value"),R(Math.floor(c)===c,"value has a fractional component")}function lr(c,h,g){R(typeof c=="number","cannot write a non-number as a number"),R(c<=h,"value larger than maximum allowed value"),R(g<=c,"value smaller than minimum allowed value")}function R(c,h){if(!c)throw new Error(h||"Failed assertion")}y._augment=function(c){return c._isBuffer=!0,c._get=c.get,c._set=c.set,c.get=k.get,c.set=k.set,c.write=k.write,c.toString=k.toString,c.toLocaleString=k.toString,c.toJSON=k.toJSON,c.copy=k.copy,c.slice=k.slice,c.readUInt8=k.readUInt8,c.readUInt16LE=k.readUInt16LE,c.readUInt16BE=k.readUInt16BE,c.readUInt32LE=k.readUInt32LE,c.readUInt32BE=k.readUInt32BE,c.readInt8=k.readInt8,c.readInt16LE=k.readInt16LE,c.readInt16BE=k.readInt16BE,c.readInt32LE=k.readInt32LE,c.readInt32BE=k.readInt32BE,c.readFloatLE=k.readFloatLE,c.readFloatBE=k.readFloatBE,c.readDoubleLE=k.readDoubleLE,c.readDoubleBE=k.readDoubleBE,c.writeUInt8=k.writeUInt8,c.writeUInt16LE=k.writeUInt16LE,c.writeUInt16BE=k.writeUInt16BE,c.writeUInt32LE=k.writeUInt32LE,c.writeUInt32BE=k.writeUInt32BE,c.writeInt8=k.writeInt8,c.writeInt16LE=k.writeInt16LE,c.writeInt16BE=k.writeInt16BE,c.writeInt32LE=k.writeInt32LE,c.writeInt32BE=k.writeInt32BE,c.writeFloatLE=k.writeFloatLE,c.writeFloatBE=k.writeFloatBE,c.writeDoubleLE=k.writeDoubleLE,c.writeDoubleBE=k.writeDoubleBE,c.fill=k.fill,c.inspect=k.inspect,c.toArrayBuffer=k.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,l,p,f,S){var w=i("buffer").Buffer,A=4,y=new w(A);y.fill(0),n.exports={hash:function(I,E,P,_){for(var T=E(function(d,v){d.length%A!=0&&(x=d.length+(A-d.length%A),d=w.concat([d,y],x));for(var x,M=[],B=v?d.readInt32BE:d.readInt32LE,j=0;j<d.length;j+=A)M.push(B.call(d,j));return M}(I=w.isBuffer(I)?I:new w(I),_),8*I.length),E=_,b=new w(P),O=E?b.writeInt32BE:b.writeInt32LE,u=0;u<T.length;u++)O.call(b,T[u],4*u,!0);return b}}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],5:[function(i,n,e){(function(t,r,w,o,a,l,p,f,S){var w=i("buffer").Buffer,A=i("./sha"),y=i("./sha256"),I=i("./rng"),E={sha1:A,sha256:y,md5:i("./md5")},P=64,_=new w(P);function T(d,v){var x=E[d=d||"sha1"],M=[];return x||b("algorithm:",d,"is not yet supported"),{update:function(B){return w.isBuffer(B)||(B=new w(B)),M.push(B),B.length,this},digest:function(B){var j=w.concat(M),j=v?function(k,q,ne){w.isBuffer(q)||(q=new w(q)),w.isBuffer(ne)||(ne=new w(ne)),q.length>P?q=k(q):q.length<P&&(q=w.concat([q,_],P));for(var Q=new w(P),H=new w(P),Ce=0;Ce<P;Ce++)Q[Ce]=54^q[Ce],H[Ce]=92^q[Ce];return ne=k(w.concat([Q,ne])),k(w.concat([H,ne]))}(x,v,j):x(j);return M=null,B?j.toString(B):j}}}function b(){var d=[].slice.call(arguments).join(" ");throw new Error([d,"we accept pull requests","http://github.com/dominictarr/crypto-browserify"].join(`
|
|
6
|
+
`))}_.fill(0),e.createHash=function(d){return T(d)},e.createHmac=T,e.randomBytes=function(d,v){if(!v||!v.call)return new w(I(d));try{v.call(this,void 0,new w(I(d)))}catch(x){v(x)}};var O,u=["createCredentials","createCipher","createCipheriv","createDecipher","createDecipheriv","createSign","createVerify","createDiffieHellman","pbkdf2"],m=function(d){e[d]=function(){b("sorry,",d,"is not implemented yet")}};for(O in u)m(u[O],O)}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./md5":6,"./rng":7,"./sha":8,"./sha256":9,buffer:3,lYpoI2:11}],6:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){var w=i("./helpers");function A(b,O){b[O>>5]|=128<<O%32,b[14+(O+64>>>9<<4)]=O;for(var u=1732584193,m=-271733879,d=-1732584194,v=271733878,x=0;x<b.length;x+=16){var M=u,B=m,j=d,k=v,u=I(u,m,d,v,b[x+0],7,-680876936),v=I(v,u,m,d,b[x+1],12,-389564586),d=I(d,v,u,m,b[x+2],17,606105819),m=I(m,d,v,u,b[x+3],22,-1044525330);u=I(u,m,d,v,b[x+4],7,-176418897),v=I(v,u,m,d,b[x+5],12,1200080426),d=I(d,v,u,m,b[x+6],17,-1473231341),m=I(m,d,v,u,b[x+7],22,-45705983),u=I(u,m,d,v,b[x+8],7,1770035416),v=I(v,u,m,d,b[x+9],12,-1958414417),d=I(d,v,u,m,b[x+10],17,-42063),m=I(m,d,v,u,b[x+11],22,-1990404162),u=I(u,m,d,v,b[x+12],7,1804603682),v=I(v,u,m,d,b[x+13],12,-40341101),d=I(d,v,u,m,b[x+14],17,-1502002290),u=E(u,m=I(m,d,v,u,b[x+15],22,1236535329),d,v,b[x+1],5,-165796510),v=E(v,u,m,d,b[x+6],9,-1069501632),d=E(d,v,u,m,b[x+11],14,643717713),m=E(m,d,v,u,b[x+0],20,-373897302),u=E(u,m,d,v,b[x+5],5,-701558691),v=E(v,u,m,d,b[x+10],9,38016083),d=E(d,v,u,m,b[x+15],14,-660478335),m=E(m,d,v,u,b[x+4],20,-405537848),u=E(u,m,d,v,b[x+9],5,568446438),v=E(v,u,m,d,b[x+14],9,-1019803690),d=E(d,v,u,m,b[x+3],14,-187363961),m=E(m,d,v,u,b[x+8],20,1163531501),u=E(u,m,d,v,b[x+13],5,-1444681467),v=E(v,u,m,d,b[x+2],9,-51403784),d=E(d,v,u,m,b[x+7],14,1735328473),u=P(u,m=E(m,d,v,u,b[x+12],20,-1926607734),d,v,b[x+5],4,-378558),v=P(v,u,m,d,b[x+8],11,-2022574463),d=P(d,v,u,m,b[x+11],16,1839030562),m=P(m,d,v,u,b[x+14],23,-35309556),u=P(u,m,d,v,b[x+1],4,-1530992060),v=P(v,u,m,d,b[x+4],11,1272893353),d=P(d,v,u,m,b[x+7],16,-155497632),m=P(m,d,v,u,b[x+10],23,-1094730640),u=P(u,m,d,v,b[x+13],4,681279174),v=P(v,u,m,d,b[x+0],11,-358537222),d=P(d,v,u,m,b[x+3],16,-722521979),m=P(m,d,v,u,b[x+6],23,76029189),u=P(u,m,d,v,b[x+9],4,-640364487),v=P(v,u,m,d,b[x+12],11,-421815835),d=P(d,v,u,m,b[x+15],16,530742520),u=_(u,m=P(m,d,v,u,b[x+2],23,-995338651),d,v,b[x+0],6,-198630844),v=_(v,u,m,d,b[x+7],10,1126891415),d=_(d,v,u,m,b[x+14],15,-1416354905),m=_(m,d,v,u,b[x+5],21,-57434055),u=_(u,m,d,v,b[x+12],6,1700485571),v=_(v,u,m,d,b[x+3],10,-1894986606),d=_(d,v,u,m,b[x+10],15,-1051523),m=_(m,d,v,u,b[x+1],21,-2054922799),u=_(u,m,d,v,b[x+8],6,1873313359),v=_(v,u,m,d,b[x+15],10,-30611744),d=_(d,v,u,m,b[x+6],15,-1560198380),m=_(m,d,v,u,b[x+13],21,1309151649),u=_(u,m,d,v,b[x+4],6,-145523070),v=_(v,u,m,d,b[x+11],10,-1120210379),d=_(d,v,u,m,b[x+2],15,718787259),m=_(m,d,v,u,b[x+9],21,-343485551),u=T(u,M),m=T(m,B),d=T(d,j),v=T(v,k)}return Array(u,m,d,v)}function y(b,O,u,m,d,v){return T((O=T(T(O,b),T(m,v)))<<d|O>>>32-d,u)}function I(b,O,u,m,d,v,x){return y(O&u|~O&m,b,O,d,v,x)}function E(b,O,u,m,d,v,x){return y(O&m|u&~m,b,O,d,v,x)}function P(b,O,u,m,d,v,x){return y(O^u^m,b,O,d,v,x)}function _(b,O,u,m,d,v,x){return y(u^(O|~m),b,O,d,v,x)}function T(b,O){var u=(65535&b)+(65535&O);return(b>>16)+(O>>16)+(u>>16)<<16|65535&u}n.exports=function(b){return w.hash(b,A,16)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){var w;n.exports=w||function(A){for(var y,I=new Array(A),E=0;E<A;E++)!(3&E)&&(y=4294967296*Math.random()),I[E]=y>>>((3&E)<<3)&255;return I}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){var w=i("./helpers");function A(E,P){E[P>>5]|=128<<24-P%32,E[15+(P+64>>9<<4)]=P;for(var _,T,b,O=Array(80),u=1732584193,m=-271733879,d=-1732584194,v=271733878,x=-1009589776,M=0;M<E.length;M+=16){for(var B=u,j=m,k=d,q=v,ne=x,Q=0;Q<80;Q++){O[Q]=Q<16?E[M+Q]:I(O[Q-3]^O[Q-8]^O[Q-14]^O[Q-16],1);var H=y(y(I(u,5),(H=m,T=d,b=v,(_=Q)<20?H&T|~H&b:!(_<40)&&_<60?H&T|H&b|T&b:H^T^b)),y(y(x,O[Q]),(_=Q)<20?1518500249:_<40?1859775393:_<60?-1894007588:-899497514)),x=v,v=d,d=I(m,30),m=u,u=H}u=y(u,B),m=y(m,j),d=y(d,k),v=y(v,q),x=y(x,ne)}return Array(u,m,d,v,x)}function y(E,P){var _=(65535&E)+(65535&P);return(E>>16)+(P>>16)+(_>>16)<<16|65535&_}function I(E,P){return E<<P|E>>>32-P}n.exports=function(E){return w.hash(E,A,20,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){function w(P,_){var T=(65535&P)+(65535&_);return(P>>16)+(_>>16)+(T>>16)<<16|65535&T}function A(P,_){var T,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),O=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),u=new Array(64);P[_>>5]|=128<<24-_%32,P[15+(_+64>>9<<4)]=_;for(var m,d,v=0;v<P.length;v+=16){for(var x=O[0],M=O[1],B=O[2],j=O[3],k=O[4],q=O[5],ne=O[6],Q=O[7],H=0;H<64;H++)u[H]=H<16?P[H+v]:w(w(w((d=u[H-2],I(d,17)^I(d,19)^E(d,10)),u[H-7]),(d=u[H-15],I(d,7)^I(d,18)^E(d,3))),u[H-16]),T=w(w(w(w(Q,I(d=k,6)^I(d,11)^I(d,25)),k&q^~k&ne),b[H]),u[H]),m=w(I(m=x,2)^I(m,13)^I(m,22),x&M^x&B^M&B),Q=ne,ne=q,q=k,k=w(j,T),j=B,B=M,M=x,x=w(T,m);O[0]=w(x,O[0]),O[1]=w(M,O[1]),O[2]=w(B,O[2]),O[3]=w(j,O[3]),O[4]=w(k,O[4]),O[5]=w(q,O[5]),O[6]=w(ne,O[6]),O[7]=w(Q,O[7])}return O}var y=i("./helpers"),I=function(P,_){return P>>>_|P<<32-_},E=function(P,_){return P>>>_};n.exports=function(P){return y.hash(P,A,32,!0)}}).call(this,i("lYpoI2"),typeof self<"u"?self:typeof window<"u"?window:{},i("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(i,n,e){(function(t,r,s,o,a,l,p,f,S){e.read=function(w,A,y,I,v){var P,_,T=8*v-I-1,b=(1<<T)-1,O=b>>1,u=-7,m=y?v-1:0,d=y?-1:1,v=w[A+m];for(m+=d,P=v&(1<<-u)-1,v>>=-u,u+=T;0<u;P=256*P+w[A+m],m+=d,u-=8);for(_=P&(1<<-u)-1,P>>=-u,u+=I;0<u;_=256*_+w[A+m],m+=d,u-=8);if(P===0)P=1-O;else{if(P===b)return _?NaN:1/0*(v?-1:1);_+=Math.pow(2,I),P-=O}return(v?-1:1)*_*Math.pow(2,P-I)},e.write=function(w,A,y,I,E,x){var _,T,b=8*x-E-1,O=(1<<b)-1,u=O>>1,m=E===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=I?0:x-1,v=I?1:-1,x=A<0||A===0&&1/A<0?1:0;for(A=Math.abs(A),isNaN(A)||A===1/0?(T=isNaN(A)?1:0,_=O):(_=Math.floor(Math.log(A)/Math.LN2),A*(I=Math.pow(2,-_))<1&&(_--,I*=2),2<=(A+=1<=_+u?m/I:m*Math.pow(2,1-u))*I&&(_++,I/=2),O<=_+u?(T=0,_=O):1<=_+u?(T=(A*I-1)*Math.pow(2,E),_+=u):(T=A*Math.pow(2,u-1)*Math.pow(2,E),_=0));8<=E;w[y+d]=255&T,d+=v,T/=256,E-=8);for(_=_<<E|T,b+=E;0<b;w[y+d]=255&_,d+=v,_/=256,b-=8);w[y+d-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,l,p,f,S){var w,A,y;function I(){}(t=n.exports={}).nextTick=(A=typeof window<"u"&&window.setImmediate,y=typeof window<"u"&&window.postMessage&&window.addEventListener,A?function(E){return window.setImmediate(E)}:y?(w=[],window.addEventListener("message",function(E){var P=E.source;P!==window&&P!==null||E.data!=="process-tick"||(E.stopPropagation(),0<w.length&&w.shift()())},!0),function(E){w.push(E),window.postMessage("process-tick","*")}):function(E){setTimeout(E,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(E){throw new Error("process.binding is not supported")},t.cwd=function(){return"/"},t.chdir=function(E){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 yn=le((Pl,Wr)=>{Wr.exports=function(n,e){var t="000000000"+n;return t.substr(t.length-e)}});var qr=le((_l,Hr)=>{var Yo=yn(),Xo=typeof window=="object"?window:self,Zo=Object.keys(Xo).length,ea=navigator.mimeTypes?navigator.mimeTypes.length:0,ta=Yo((ea+navigator.userAgent.length).toString(36)+Zo.toString(36),4);Hr.exports=function(){return ta}});var Yr=le((Cl,Gr)=>{var bn,Qr=typeof window<"u"&&(window.crypto||window.msCrypto)||typeof self<"u"&&self.crypto;Qr?(Jr=Math.pow(2,32)-1,bn=function(){return Math.abs(Qr.getRandomValues(new Uint32Array(1))[0]/Jr)}):bn=Math.random;var Jr;Gr.exports=bn});var Qe=le((Dl,ts)=>{var Yt=qr(),Xr=yn(),ia=Yr(),Pt=0,vn=4,Xt=36,Zr=Math.pow(Xt,vn);function wn(){return Xr((ia()*Zr<<0).toString(Xt),vn)}function es(){return Pt=Pt<Zr?Pt:0,Pt++,Pt-1}function _t(){var i="c",n=new Date().getTime().toString(Xt),e=Xr(es().toString(Xt),vn),t=Yt(),r=wn()+wn();return i+n+e+t+r}_t.slug=function(){var n=new Date().getTime().toString(36),e=es().toString(36).slice(-4),t=Yt().slice(0,1)+Yt().slice(-1),r=wn().slice(-2);return n.slice(-2)+e+t+r};_t.isCuid=function(n){return typeof n!="string"?!1:!!n.startsWith("c")};_t.isSlug=function(n){if(typeof n!="string")return!1;var e=n.length;return e>=7&&e<=10};_t.fingerprint=Yt;ts.exports=_t});var Xe={};ur(Xe,{__addDisposableResource:()=>Ys,__assign:()=>Oi,__asyncDelegator:()=>$s,__asyncGenerator:()=>zs,__asyncValues:()=>Ks,__await:()=>ft,__awaiter:()=>Ls,__classPrivateFieldGet:()=>Qs,__classPrivateFieldIn:()=>Gs,__classPrivateFieldSet:()=>Js,__createBinding:()=>Ei,__decorate:()=>Ts,__disposeResources:()=>Xs,__esDecorate:()=>Ka,__exportStar:()=>js,__extends:()=>Rs,__generator:()=>Ms,__importDefault:()=>qs,__importStar:()=>Hs,__makeTemplateObject:()=>Ws,__metadata:()=>Bs,__param:()=>ks,__propKey:()=>Ha,__read:()=>jn,__rest:()=>Fs,__runInitializers:()=>Wa,__setFunctionName:()=>qa,__spread:()=>Vs,__spreadArray:()=>Ns,__spreadArrays:()=>Us,__values:()=>Ii,default:()=>Ga});function Rs(i,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");Mn(i,n);function e(){this.constructor=i}i.prototype=n===null?Object.create(n):(e.prototype=n.prototype,new e)}function Fs(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 Ts(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 ks(i,n){return function(e,t){n(e,t,i)}}function Ka(i,n,e,t,r,s){function o(P){if(P!==void 0&&typeof P!="function")throw new TypeError("Function expected");return P}for(var a=t.kind,l=a==="getter"?"get":a==="setter"?"set":"value",p=!n&&i?t.static?i:i.prototype:null,f=n||(p?Object.getOwnPropertyDescriptor(p,t.name):{}),S,w=!1,A=e.length-1;A>=0;A--){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(P){if(w)throw new TypeError("Cannot add initializers after decoration has completed");s.push(o(P||null))};var E=(0,e[A])(a==="accessor"?{get:f.get,set:f.set}:f[l],y);if(a==="accessor"){if(E===void 0)continue;if(E===null||typeof E!="object")throw new TypeError("Object expected");(S=o(E.get))&&(f.get=S),(S=o(E.set))&&(f.set=S),(S=o(E.init))&&r.unshift(S)}else(S=o(E))&&(a==="field"?r.unshift(S):f[l]=S)}p&&Object.defineProperty(p,t.name,f),w=!0}function Wa(i,n,e){for(var t=arguments.length>2,r=0;r<n.length;r++)e=t?n[r].call(i,e):n[r].call(i);return t?e:void 0}function Ha(i){return typeof i=="symbol"?i:"".concat(i)}function qa(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 Bs(i,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,n)}function Ls(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(f){try{p(t.next(f))}catch(S){o(S)}}function l(f){try{p(t.throw(f))}catch(S){o(S)}}function p(f){f.done?s(f.value):r(f.value).then(a,l)}p((t=t.apply(i,n||[])).next())})}function Ms(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(f){return l([p,f])}}function l(p){if(t)throw new TypeError("Generator is already executing.");for(;o&&(o=0,p[0]&&(e=0)),e;)try{if(t=1,r&&(s=p[0]&2?r.return:p[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,p[1])).done)return s;switch(r=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return e.label++,{value:p[1],done:!1};case 5:e.label++,r=p[1],p=[0];continue;case 7:p=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){e=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){e.label=p[1];break}if(p[0]===6&&e.label<s[1]){e.label=s[1],s=p;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(p);break}s[2]&&e.ops.pop(),e.trys.pop();continue}p=n.call(i,e)}catch(f){p=[6,f],r=0}finally{t=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}}function js(i,n){for(var e in i)e!=="default"&&!Object.prototype.hasOwnProperty.call(n,e)&&Ei(n,i,e)}function Ii(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 jn(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 Vs(){for(var i=[],n=0;n<arguments.length;n++)i=i.concat(jn(arguments[n]));return i}function Us(){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 Ns(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 ft(i){return this instanceof ft?(this.v=i,this):new ft(i)}function zs(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(A){return new Promise(function(y,I){s.push([w,A,y,I])>1||a(w,A)})})}function a(w,A){try{l(t[w](A))}catch(y){S(s[0][3],y)}}function l(w){w.value instanceof ft?Promise.resolve(w.value.v).then(p,f):S(s[0][2],w)}function p(w){a("next",w)}function f(w){a("throw",w)}function S(w,A){w(A),s.shift(),s.length&&a(s[0][0],s[0][1])}}function $s(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:ft(i[r](o)),done:!1}:s?s(o):o}:s}}function Ks(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 Ii=="function"?Ii(i):i[Symbol.iterator](),e={},t("next"),t("throw"),t("return"),e[Symbol.asyncIterator]=function(){return this},e);function t(s){e[s]=i[s]&&function(o){return new Promise(function(a,l){o=i[s](o),r(a,l,o.done,o.value)})}}function r(s,o,a,l){Promise.resolve(l).then(function(p){s({value:p,done:a})},o)}}function Ws(i,n){return Object.defineProperty?Object.defineProperty(i,"raw",{value:n}):i.raw=n,i}function Hs(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)&&Ei(n,i,e);return Qa(n,i),n}function qs(i){return i&&i.__esModule?i:{default:i}}function Qs(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 Js(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 Gs(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 Ys(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 Xs(i){function n(t){i.error=i.hasError?new Ja(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 Mn,Oi,Ei,Qa,Ja,Ga,Ze=Io(()=>{Mn=function(i,n){return Mn=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])},Mn(i,n)};Oi=function(){return Oi=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},Oi.apply(this,arguments)};Ei=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]};Qa=Object.create?function(i,n){Object.defineProperty(i,"default",{enumerable:!0,value:n})}:function(i,n){i.default=n};Ja=typeof SuppressedError=="function"?SuppressedError:function(i,n,e){var t=new Error(e);return t.name="SuppressedError",t.error=i,t.suppressed=n,t};Ga={__extends:Rs,__assign:Oi,__rest:Fs,__decorate:Ts,__param:ks,__metadata:Bs,__awaiter:Ls,__generator:Ms,__createBinding:Ei,__exportStar:js,__values:Ii,__read:jn,__spread:Vs,__spreadArrays:Us,__spreadArray:Ns,__await:ft,__asyncGenerator:zs,__asyncDelegator:$s,__asyncValues:Ks,__makeTemplateObject:Ws,__importStar:Hs,__importDefault:qs,__classPrivateFieldGet:Qs,__classPrivateFieldSet:Js,__classPrivateFieldIn:Gs,__addDisposableResource:Ys,__disposeResources:Xs}});var eo=le(Zs=>{"use strict";Object.defineProperty(Zs,"__esModule",{value:!0})});var Un=le(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.invokeEventHandlersAsync=_e.invokeEventHandlers=_e.eventHandlerSafeInvokeAsync=_e.eventHandlerSafeInvoke=void 0;var to=(Ze(),tt(Xe));function io(i,n,e){try{return i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}}_e.eventHandlerSafeInvoke=io;function Vn(i,n,e){return(0,to.__awaiter)(this,void 0,void 0,function*(){try{return yield i(n,e),{succeeded:!0}}catch(t){return{error:t,succeeded:!1}}})}_e.eventHandlerSafeInvokeAsync=Vn;function Ya(i,n,e,t){for(let r of i){let{succeeded:s,error:o}=io(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}}_e.invokeEventHandlers=Ya;function Xa(i,n,e,t){return(0,to.__awaiter)(this,void 0,void 0,function*(){if(t?.parallelize===!1)for(let r of i){let{succeeded:s,error:o}=yield Vn(r,n,e);if(!s&&t?.swallowExceptions!==!0)throw o}else{let r=[];for(let s of i)r.push(Vn(s,n,e).then(({succeeded:o,error:a})=>{if(!o&&t?.swallowExceptions!==!0)throw a}));yield Promise.all(r)}})}_e.invokeEventHandlersAsync=Xa});var so=le(Pi=>{"use strict";Object.defineProperty(Pi,"__esModule",{value:!0});Pi.TypedEvent=void 0;var Za=(Ze(),tt(Xe)),no=Un(),ro={swallowExceptions:!1,parallelize:!0},Nn=class{constructor(){this._handlers=[]}attach(n){this._handlers.push(n)}detach(n){this.tryRemoveHandler(n)}invoke(n,e,t=ro){(0,no.invokeEventHandlers)(this._handlers,n,e,t)}invokeAsync(n,e,t=ro){return(0,Za.__awaiter)(this,void 0,void 0,function*(){yield(0,no.invokeEventHandlersAsync)(this._handlers,n,e,t)})}tryRemoveHandler(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}};Pi.TypedEvent=Nn});var $n=le(zn=>{"use strict";Object.defineProperty(zn,"__esModule",{value:!0});var ec=(Ze(),tt(Xe));(0,ec.__exportStar)(so(),zn)});var oo=le(_i=>{"use strict";Object.defineProperty(_i,"__esModule",{value:!0});_i.FinalizationRegistryMissingError=void 0;var Kn=class extends Error{};_i.FinalizationRegistryMissingError=Kn});var Hn=le(Ci=>{"use strict";Object.defineProperty(Ci,"__esModule",{value:!0});Ci.WeakHandlerHolder=void 0;var tc=oo(),Wn=class{constructor(n){this._refs=[];try{this._finalizationRegistry=new FinalizationRegistry(n)}catch(e){throw e.name==="FinalizationRegistry"?new tc.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)}};Ci.WeakHandlerHolder=Wn});var ao=le(Di=>{"use strict";Object.defineProperty(Di,"__esModule",{value:!0});Di.WeakEvent=void 0;var qn=(Ze(),tt(Xe)),ic=$n(),nc=Hn(),Qn=Un(),rc={swallowExceptions:!1,parallelize:!0},Jn=class{constructor(){this._handlers=[],this._handlerFinalizedEvent=new ic.TypedEvent,this.handlerFinalizedEvent=this._handlerFinalizedEvent,this._refHolder=new nc.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,Qn.eventHandlerSafeInvoke)(s,n,e);if(!o&&t?.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}}invokeAsync(n,e,t=rc){return(0,qn.__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,qn.__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,Qn.eventHandlerSafeInvokeAsync)(s,n,e);if(!o&&t.swallowExceptions!==!0)throw a}else this.releaseHandler(r)}})}parallelInvokeAsync(n,e,t){return(0,qn.__awaiter)(this,void 0,void 0,function*(){let r=[];for(let s of this._handlers){let o=s?.deref();o?r.push((0,Qn.eventHandlerSafeInvokeAsync)(o,n,e).then(({succeeded:a,error:l})=>{if(!a&&t.swallowExceptions!==!0)throw l})):this.releaseHandler(s)}yield Promise.all(r)})}attach(n){this._handlers.push(this._refHolder.getWeakHandler(this,n))}detach(n){let e=this._refHolder.releaseWeakHandler(n);this.tryRemoveHandlerRef(e)}onHandlerFinalizer(n){this.tryRemoveHandlerRef(n?.handlerRef),this._handlerFinalizedEvent.invokeAsync(this,n,{swallowExceptions:!0})}tryRemoveHandlerRef(n){let e=this._handlers.findIndex(t=>t===n);e>=0&&this._handlers.splice(e,1)}releaseHandler(n){this._refHolder.unregisterRef(n),this.tryRemoveHandlerRef(n)}};Di.WeakEvent=Jn});var lo=le(Ai=>{"use strict";Object.defineProperty(Ai,"__esModule",{value:!0});var co=(Ze(),tt(Xe));(0,co.__exportStar)(Hn(),Ai);(0,co.__exportStar)(ao(),Ai)});var uo=le(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});var Gn=(Ze(),tt(Xe));(0,Gn.__exportStar)(eo(),Tt);(0,Gn.__exportStar)($n(),Tt);(0,Gn.__exportStar)(lo(),Tt)});var or={};ur(or,{Client:()=>en,Entity:()=>me,EntityFile:()=>ve,IdbPersistence:()=>ht,ServerSync:()=>yt,Storage:()=>en,UndoHistory:()=>ct,authorization:()=>wc,cliSync:()=>vc,createMigration:()=>mn,debugLogger:()=>Cn,getEntityClient:()=>po,id:()=>xc,makeLogger:()=>ps,noLogger:()=>di,schema:()=>Ct});function Eo(i){return typeof Buffer<"u"?Buffer.from(i).toString("base64"):btoa(i)}function Po(i){return typeof Buffer<"u"?Buffer.from(i,"base64").toString():atob(i)}var Ke={onlyUser:i=>Eo(`u:${i}:*`),onlyMe:()=>Ke.onlyUser(rn),decode:i=>{let e=Po(i).split(":");if(e.length!==3)throw new Error("Invalid authz string");return{scope:e[0],subject:e[1],action:e[2]}}},rn="$$_originator_$$";function fr(i,n){let{operations:e,baselines:t}=i;if(e)for(let r of e)r.authz&&Ke.decode(r.authz).subject===rn&&(r.authz=Ke.onlyUser(n));if(t)for(let r of t)r.authz&&Ke.decode(r.authz).subject===rn&&(r.authz=Ke.onlyUser(n))}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 sn({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}},sn=class{constructor({max:n,startedAt:e,timeout:t,userData:r,flusher:s,key:o}){this.items=[],this.update=({items:a,max:l,timeout:p,userData:f})=>{this.items.push(...a),l!==void 0&&(this.max=l),p!==void 0&&(this.timeout=p),f&&(this.userData=f);let S=this.items.length!==0&&this.timeout!==null&&!this.flushTimeout;this.max!==null&&this.items.length>=this.max?this.flush():S&&this.timeout!==null&&(this.flushTimeout=setTimeout(this.flush,this.timeout))},this.flush=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0;let a=this.items;return this.items=[],this.flusher(a,this.key,this.userData)},this.discard=()=>{this.flushTimeout&&clearTimeout(this.flushTimeout),this.flushTimeout=void 0,this.items=[]},this.max=n,this.startedAt=e,this.timeout=t,this.userData=r,this.flusher=s,this.key=o}};var bt;(function(i){i[i.InvalidRequest=4e3]="InvalidRequest",i[i.BodyRequired=4001]="BodyRequired",i[i.NoToken=4010]="NoToken",i[i.InvalidToken=4011]="InvalidToken",i[i.TokenExpired=4012]="TokenExpired",i[i.Forbidden=4030]="Forbidden",i[i.NotFound=4040]="NotFound",i[i.Unexpected=5e3]="Unexpected",i[i.ConfigurationError=5010]="ConfigurationError",i[i.NoFileStorage=5011]="NoFileStorage",i[i.MigrationPathNotFound=7001]="MigrationPathNotFound",i[i.ImportFailed=7002]="ImportFailed",i[i.Offline=7003]="Offline"})(bt||(bt={}));var N=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}};N.Code=bt;function pr(i){return typeof i=="object"&&"code"in i&&typeof i.code=="number"}var jt,_o=new Uint8Array(16);function on(){if(!jt&&(jt=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!jt))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return jt(_o)}var mr=/^(?:[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 Co(i){return typeof i=="string"&&mr.test(i)}var gr=Co;var te=[];for(Vt=0;Vt<256;++Vt)te.push((Vt+256).toString(16).substr(1));var Vt;function Do(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,e=(te[i[n+0]]+te[i[n+1]]+te[i[n+2]]+te[i[n+3]]+"-"+te[i[n+4]]+te[i[n+5]]+"-"+te[i[n+6]]+te[i[n+7]]+"-"+te[i[n+8]]+te[i[n+9]]+"-"+te[i[n+10]]+te[i[n+11]]+te[i[n+12]]+te[i[n+13]]+te[i[n+14]]+te[i[n+15]]).toLowerCase();if(!gr(e))throw TypeError("Stringified UUID is invalid");return e}var yr=Do;function Ao(i,n,e){i=i||{};var t=i.random||(i.rng||on)();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 yr(t)}var wt=Ao;var xr=Be(vr(),1);function Ro(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 an(i){let n=new WeakMap,e=0;return JSON.stringify(i,(t,r)=>{if(typeof r=="object"&&r!==null){if(n.has(r))return{$ref:n.get(r)};n.set(r,`cyclic-ref:${e++}`)}return Ro(t,r)})}function de(i,n=!0){if(!n&&typeof structuredClone=="function")return structuredClone(i);if(V(i)||Array.isArray(i)){let e=G(i),t;if(Array.isArray(i))t=i.map(r=>de(r,n));else{t={};for(let[r,s]of Object.entries(i))t[r]=de(s,n)}return n&&e&&z(t,e),t}return i}function We(i){return(0,xr.default)(i)}function V(i){return i&&typeof i=="object"}function Sr(i){for(var n=[],e=[i],t=0;e.length;){var r=e.pop();if(typeof r=="boolean")t+=4;else if(typeof r=="string")t+=r.length*2;else if(typeof r=="number")t+=8;else if(typeof r=="object"&&n.indexOf(r)===-1){n.push(r);for(var s in r)e.push(r[s])}}return t}function L(i,n="assertion failed"){if(!i)throw new Error(n)}function vt(i=16){return wt().replace("-","").slice(0,i)}function Or(i,n){for(let e=i.length-1;e>=0;e--)if(n(i[e]))return e;return-1}function Ir(i,n){let e;return function(...t){let r=this;clearTimeout(e),e=setTimeout(()=>i.apply(r,t),n)}}function Er(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 cn(i){try{return JSON.stringify(i)}catch{return`[recursive/invalid:${String(i)}]`}}function fe(i){return i&&i["@@type"]==="file"}function xt(i){return{"@@type":"file",id:i}}function nt(i){return typeof File<"u"&&i instanceof File||typeof Blob<"u"&&i instanceof Blob}function Ut(i){return i&&V(i)&&typeof i.id=="string"&&typeof i.remote=="boolean"&&typeof i.name=="string"&&typeof i.type=="string"}function $(i){return re(i)||fe(i)}function De(i,n){return i===n?!0:!(!$(i)||!$(n)||i["@@type"]!==n["@@type"]||i.id!==n.id)}function re(i){return i&&typeof i=="object"&&i["@@type"]==="ref"}function He(i,n,e,t,r=[],s){z(i,n),rt(i,t);let o=Wt(i);for(let a of o.keys()){let l=o.get(a),p={oid:a,timestamp:e(),data:{op:"initialize",value:Kt(l)}};r.push(Cr(p,s?.authz))}return r}function _r(i,n,e,t=[],r){let s={oid:n,timestamp:e(),data:{op:"initialize",value:i}};return t.push(Cr(s,r?.authz)),t}function Cr(i,n){return n&&(i.authz=n),i}function zt(i){let n={};for(let e of i)e.oid in n?n[e.oid].push(e):n[e.oid]=[e];return n}function Dr(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Ar(i){let n={};for(let e of i){let t=K(e.oid);t in n?n[t].push(e):n[t]=[e]}return n}function Le(i,n){return Array.isArray(i)?!0:(i===void 0&&console.error(`Cannot apply list patch; expected array, received ${JSON.stringify(i)}. This suggests your data is changing from a list to an object over time. (OID: ${G(i)})
|
|
7
|
+
Patch that was not applied: ${JSON.stringify(n)}`),!1)}function Me(i,n,e){if(i==null&&n.op!=="initialize")return i;let t=i,r,s;function o(a){e&&$(a)&&e.push(a)}switch(n.op){case"set":o(t[n.name]),t[n.name]=n.value;break;case"remove":o(t[n.name]),delete t[n.name];break;case"list-set":Le(i,n)&&(o(i[n.index]),i[n.index]=n.value);break;case"list-push":Le(i,n)&&i.push(n.value);break;case"list-delete":Le(i,n)&&(o(i[n.index]),i.splice(n.index,n.count));break;case"list-move-by-index":Le(i,n)&&(s=i.splice(n.from,1),i.splice(n.to,0,s[0]));break;case"list-remove":if(Le(i,n))do{let a=n.value;n.only==="last"?$(a)?r=Or(i,l=>$(l)&&De(l,a)):r=i.lastIndexOf(a):$(a)?r=i.findIndex(l=>$(l)&&De(l,a)):r=i.indexOf(a),r!==-1&&(o(i[r]),i.splice(r,1))}while(!n.only&&r!==-1);break;case"list-add":Le(i,n)&&(i.some(l=>re(l)&&re(n.value)?l.id===n.value.id:l===n.value)||i.push(n.value));break;case"list-move-by-ref":Le(i,n)&&(r=i.findIndex(a=>De(a,n.value)),s=i.splice(r,1),i.splice(n.index,0,s[0]));break;case"list-insert":if(Le(i,n)){if(!n.value&&!n.values)throw new Error(`Cannot apply list insert patch; expected value or values, received ${JSON.stringify(n)}`);n.value?i.splice(n.index,0,n.value):i.splice(n.index,0,...n.values)}break;case"delete":Array.isArray(i)?i.forEach(o):V(i)&&Object.values(i||{}).forEach(o);return;case"initialize":return de(n.value);case"touch":return i;default:throw new Error(`Unsupported patch operation: ${n.op}`)}return i}function Nt(i,n,e=[]){if(Array.isArray(i))for(let t=0;t<i.length;t++){let r=i[t];i[t]=Pr(r,n,e),V(i[t])&&Nt(i[t],n,e)}else if(!fe(i)){if(V(i)){L(G(i),`Object ${JSON.stringify(i)} must have an oid`);for(let t of Object.keys(i))i[t]=Pr(i[t],n,e),V(i[t])&&Nt(i[t],n,e)}}return e}function Pr(i,n,e){if(re(i)){e.push(i.id);let t=n.get(i.id);return L(!!t,`No value was found in object map for ${i.id}`),z(t,i.id)}else return i}function Rr(i){return i.data.op==="set"?i.data.name:!1}function Fr(i,n){return n.has(!0)?!0:i.data.op==="set"||i.data.op==="remove"?n.has(i.data.name):!1}function $t(i){return{oid:i.oid,timestamp:i.timestamp,data:i.data,authz:i.authz}}var Fo="/",St=":",dn=new WeakMap;function se(i){let n=G(i);return L(!!n,`Object ${cn(i)} does not have an OID assigned to it`),n}function G(i){if(V(i))return dn.get(i)}function z(i,n){return L(V(i),`Only objects can be assigned OIDs, received ${cn(i)}`),Lr(i)&&Kt(i),dn.set(i,n),i}function Lr(i){return!!G(i)}function Kt(i){return dn.delete(i),i}function Tr(i,n,e){if(Lr(i)){let t=se(i);if(je(t,n))return se(i);{let r=Oe(n,e);return z(i,r),r}}else{let t=Oe(n,e);return z(i,t),t}}var ln={".":"˙","/":"&slash;",":":":"};function kr(i){return i.replace(/[/]/g,ln["/"]).replace(/[:]/g,ln[":"]).replace(/[.]/g,ln["."])}function Br(i){return i.replace(/&slash;/g,"/").replace(/:/g,":").replace(/˙/g,".")}function ee(i,n,e){let t=kr(i)+Fo+kr(n);return e&&(t+=St+e),t}function Oe(i,n=To){let{collection:e,id:t}=ue(i);return ee(e,t,n())}function ue(i){let[n,e,...t]=i.split("/");t.length&&(console.error(`OID ${i} has more than 3 segments. Attempting to parse it anyway.`),e+="/"+t.join("/"));let[r,s]=e.split(St),o;return r.includes(".")?o=r.slice(0,r.indexOf(".")):o=r,{collection:Br(n),id:Br(o),subId:s}}function rt(i,n){let e=se(i);if(Array.isArray(i)){let t;for(let r=0;r<i.length;r++)t=i[r],V(t)&&!$(t)&&(Tr(t,e,n),rt(t,n))}else if(V(i)&&!$(i))for(let t of Object.keys(i))V(i[t])&&!$(i[t])&&(Tr(i[t],e,n),rt(i[t],n))}function Ht(i){if(Kt(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 To(){return wt().slice(0,8)}function ie(i){return{"@@type":"ref",id:i}}function Wt(i,n=new Map){if(Array.isArray(i)){let e=se(i),t=z([],e);for(let r=0;r<i.length;r++){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(fe(s)){t[r]=s;continue}else{let o=se(s);t[r]=ie(o),Wt(s,n)}}else t[r]=s}n.set(e,t)}else if(V(i)&&!$(i)){let e=se(i),t=z({},e);for(let r of Object.keys(i)){let s=i[r];if(V(s)){if(re(s))throw new Error("An attempt was made to normalize an already normalized object! This is an error in verdant itself.");if(fe(s))t[r]=s;else{let o=se(s);t[r]=ie(o),Wt(s,n)}}else t[r]=s}n.set(e,t)}else $(i);return n}function K(i){return i.split(".")[0].split(St)[0]}function Mr(i){let n=K(i),e=Oe(n,()=>"\uFFFF");return[`${n}${St}`,e]}function je(i,n){return K(i)===K(n)}function qt(i){return!i.includes(St)}var st="__@@oid_do_not_use",Ae="@@id";function ko(i){if(V(i))return i[Ae]||i[st]}function Bo(i){return V(i)&&(delete i[st],delete i[Ae]),i}function Lo(i){let n=ko(i);n&&z(i,n)}function Ot(i){if(Lo(i),Bo(i),Array.isArray(i))for(let n=0;n<i.length;n++)Ot(i[n]);else if(V(i))for(let n of Object.keys(i))Ot(i[n])}function Mo(i){let{collection:n,id:e,subId:t}=ue(i);return ee(n,e,t)}var jo=/"\w+\/[^"]+?(\.[^"]+)+\:[\S]+?"/g;function Vo(i){return i.replaceAll(jo,n=>{let e=n.slice(1,n.length-1);return`"${Mo(e)}"`})}function un(i){return JSON.parse(Vo(JSON.stringify(i)))}function jr(i){let n=K(i);return[`${n}.`,`${n}.\uFFFF`]}function hn(i){return i===Ae||i===st}var Ve=class{constructor(n,e){this.getNow=n,this.createSubId=e,this.isPrimitive=t=>!V(t)||$(t),this.createDiff=(t,r,s={})=>Qt(t,r,this.getNow,this.createSubId,[],s),this.createInitialize=(t,r,s,o)=>o?_r(t,r,this.getNow,void 0,s?{authz:s}:void 0):He(t,r,this.getNow,this.createSubId,void 0,s?{authz:s}:void 0),this.createSet=(t,r,s,o)=>{if(this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"set",name:r,value:s},authz:o}];{let a=Oe(t,this.createSubId);return[...He(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"set",value:ie(a),name:r},authz:o}]}},this.createRemove=(t,r,s)=>[{oid:t,timestamp:this.getNow(),data:{op:"remove",name:r},authz:s}],this.createListSet=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:s},authz:o}];{let a=Oe(t,this.createSubId);return[...He(s,a,this.getNow,this.createSubId,void 0,{authz:o}),{oid:t,timestamp:this.getNow(),data:{op:"list-set",index:r,value:ie(a)},authz:o}]}},this.createListPush=(t,r,s)=>{if(this.isPrimitive(r))return[{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:r},authz:s}];{let o=Oe(t,this.createSubId);return[...He(r,o,this.getNow,void 0,void 0,{authz:s}),{oid:t,timestamp:this.getNow(),data:{op:"list-push",value:ie(o)},authz:s}]}},this.createListAdd=(t,r,s)=>this.isPrimitive(r)?[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:r},authz:s}]:[{oid:t,timestamp:this.getNow(),data:{op:"list-add",value:ie(r)},authz:s}],this.createListInsert=(t,r,s,o)=>{if(L(r>=0,"List index must be non-negative"),this.isPrimitive(s))return[{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:s,index:r},authz:o}];{let a=Oe(t,this.createSubId);return[...He(s,a,this.getNow,this.createSubId,void 0,o?{authz:o}:void 0),{oid:t,timestamp:this.getNow(),data:{op:"list-insert",value:ie(a),index:r},authz:o}]}},this.createListInsertMany=(t,r,s,o)=>{L(r>=0,"List index must be non-negative");let a=[],l=s.map(p=>{if(this.isPrimitive(p))return p;let f=Oe(t,this.createSubId);return a.push(...He(p,f,this.getNow,this.createSubId,void 0,{authz:o})),ie(f)});return a.push({oid:t,timestamp:this.getNow(),data:{op:"list-insert",values:l,index:r},authz:o}),a},this.createListRemove=(t,r,s,o)=>[{oid:t,timestamp:this.getNow(),data:{op:"list-remove",value:r,only:s},authz:o}],this.createListDelete=(t,r,s=1,o)=>(L(r>=0,"List index must be non-negative"),L(s>0,"Count must be positive and non-zero"),[{oid:t,timestamp:this.getNow(),data:{op:"list-delete",index:r,count:s},authz:o}]),this.createListMoveByRef=(t,r,s,o)=>(L(s>=0,"List index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-ref",value:r,index:s},authz:o}]),this.createListMoveByIndex=(t,r,s,o)=>(L(r>=0,"List move from index must be non-negative"),L(s>=0,"List move to index must be non-negative"),[{oid:t,timestamp:this.getNow(),data:{op:"list-move-by-index",from:r,to:s},authz:o}]),this.createDelete=(t,r)=>[{oid:t,timestamp:this.getNow(),data:{op:"delete"},authz:r}],this.createDeleteAll=(t,r)=>t.map(s=>({oid:s,timestamp:this.getNow(),data:{op:"delete"},authz:r}))}};function ot(i,n){if(i===n)return!0;if($(i)&&$(n))return De(i,n);let e=G(i),t=G(n);return!!(e&&t&&e===t)}function Vr(i,n,e,t){if(!It(n))return n;let r=G(n);if(!r)t.mergeUnknownObjects&&e&&z(n,e);else if(!je(i,r))return de(n,!1);return n}function It(i){return V(i)&&!$(i)}function Qt(i,n,e,t,r,s){var o;let a={patches:[],mergeUnknownObjects:s?.mergeUnknownObjects,merge:(o=s?.merge)!==null&&o!==void 0?o:s?.defaultUndefined,authz:s?.authz,patchCreator:new Ve(e,t)};return Jt(i,n,a),a.patches}function Jt(i,n,e){if(Array.isArray(i)&&Array.isArray(n))Uo(i,n,e);else{if(Array.isArray(i)||Array.isArray(n))throw new N(N.Code.Unexpected,void 0,"Cannot diff between array and non-array");It(i)&&It(n)&&No(i,n,e)}}function Uo(i,n,e){let t=se(i),r=[],s=new Set;for(let f=0;f<i.length;f++){let S=i[f];r[f]=S;let w=G(S);w&&s.add(w)}for(let f=0;f<n.length;f++){let S=n[f],w=i[f];n[f]=Vr(t,S,G(w),e)}let o=!0,a=new Set,l=new Set;for(let f=0;f<n.length;f++){let S=n[f],w=r[f];S===void 0&&(o=!1);let A=G(S),y=o&&f>=r.length;if(A&&s.has(A))if(ot(S,w))Jt(w,S,e);else{e.patches.push(...e.patchCreator.createListMoveByRef(t,ie(A),f,e.authz));let I=G(w);I&&l.add(I),a.add(A)}else if(y)e.patches.push(...e.patchCreator.createListPush(t,S,e.authz));else if(ot(S,w))Jt(w,S,e);else{let I=f===0||ot(n[f-1],r[f-1]),E=f===n.length-1||ot(n[f+1],r[f]);I&&E?(e.patches.push(...e.patchCreator.createListInsert(t,f,S,e.authz)),r.splice(f,0,void 0)):e.patches.push(...e.patchCreator.createListSet(t,f,S,e.authz))}}if(r.length-n.length>0)for(let f=r.length-1;f>=n.length;f--){let S=r[f],w=G(S);w?a.has(w)||(at(S,e),e.patches.push(...e.patchCreator.createListRemove(t,ie(w),"last",e.authz))):e.patches.push(...e.patchCreator.createListRemove(t,S,"last",e.authz))}for(let f of l){if(a.has(f))continue;let S=i.find(w=>G(w)===f);S&&at(S,e),e.patches.push(...e.patchCreator.createListRemove(t,ie(f),"last",e.authz))}}function No(i,n,e){let t=new Set(Object.keys(i)),r=se(i);for(let s in n){let o=n[s];if(o===void 0&&e.merge||(t.delete(s),hn(s)))continue;let a=i[s];It(o)?(Vr(r,o,G(a),e),a?ot(o,a)?Jt(a,o,e):(e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz))):ot(o,a)||(o===void 0?e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)):e.patches.push(...e.patchCreator.createSet(r,s,o,e.authz)),at(a,e))}if(!e.merge)for(let s of t)hn(s)||(e.patches.push(...e.patchCreator.createRemove(r,s,e.authz)),at(i[s],e))}function at(i,n){if(!It(i))return;let e=G(i);if(e){n.patches.push(...n.patchCreator.createDelete(e,n.authz));for(let t in i){let r=i[t];at(r,n)}}}var W=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=vt(),s=this.subscribers[e];return s||(s=this.subscribers[e]={}),s[r]=t,this.counts[e]=(this.counts[e]||0)+1,()=>{this.subscribers[e]&&(delete this.subscribers[e][r],this.counts[e]--,this.counts[e]===0&&(delete this.subscribers[e],delete this.counts[e],this._onAllUnsubscribed&&this._onAllUnsubscribed(e)))}},this.emit=(e,...t)=>{this._disabled||this.subscribers[e]&&Object.values(this.subscribers[e]).forEach(r=>r(...t))},this.dispose=()=>{this._disabled=!0,this.disposed=!0;let e=Object.keys(this.subscribers);this.subscribers={},this.counts={},e.forEach(t=>{this._onAllUnsubscribed&&this._onAllUnsubscribed(t)})},this.disable=()=>{this._disabled=!0}}get disabled(){return this._disabled}};var Gt="\uFFFFFE",zo="\0",$o="\uFFFFFF";function ye(...i){let n=Ko(i);return n.length===1?n[0]:n}function Re(...i){return i.join(Gt)+`${$o}`}function Ee(...i){return i.join(Gt)+`${Gt}${zo}`}function Ko(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(Gt))))}function Ur(i){return!!i.field}function Wo(i,n){let e={};for(let[t,r]of Object.entries(i.indexes||{})){let s=r;Ur(s)?e[t]=Ie(n[s.field]):e[t]=Ie(s.compute(n))}return e}function Ho(i,n){return Object.entries(i.compounds||{}).reduce((e,[t,r])=>(e[t]=ye(...r.of.map(s=>n[s])),e),{})}function qo(i,n){return Object.entries(i.fields).reduce((e,[t,r])=>("indexed"in r&&(e[t]=Ie(n[t])),e),{})}function fn(i,n){let e=Object.assign(Object.assign({[i.primaryKey]:n[i.primaryKey]},qo(i,n)),Wo(i,n));return Object.assign(e,Ho(i,Object.assign(Object.assign({},n),e))),e}var Qo="null";function Ie(i){if(i===null)return Qo;if(typeof i=="string"||typeof i=="number")return i;if(typeof i=="boolean"||i===null)return`${i}`;if(i===void 0)return"undefined";if(Array.isArray(i))return i.map(Ie);throw new Error(`Unsupported index value: ${i}`)}function Nr(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 Jo={version:0,collections:{}};function zr(i){return i?[...Object.keys(i.indexes||{}).map(n=>{let e=i.indexes[n],t=e.type;!t&&e.field&&(t=i.fields[e.field].type),L(t,`Could not determine type of index ${i}.${n}. Index must have a type. Perhaps your schema is malformed?`);let r=Et(i,n);return{name:n,multiEntry:r,synthetic:!0,compound:!1,type:t?.replace("[]","")}}),...Object.keys(i.compounds||{}).map(n=>({name:n,multiEntry:Et(i,n),synthetic:!1,compound:!0,type:"string"}))]:[]}function mn(i,n,e){let t=typeof n=="function"||n===void 0,r=t?Jo:i,s=t?i:n,o=t?n:e;L(r,"Invalid arguments to createMigration"),L(s,"Invalid arguments to createMigration");let{changedCollections:a,addedCollections:l,removedCollections:p,addedIndexes:f,removedIndexes:S,autoMigratedCollections:w,autoMigration:A}=Go(r,s);return{version:s.version,migrate:async y=>{let I=[];if(await o?.({migrate:async(P,_)=>{let T=A(P),b=async O=>{let u=await _(O);z(u,se(O));let m=T(u),d=Kr(s.collections[P].fields,m);return m};await y.migrate(P,b),I.push(P),w.delete(P)},info:{changedCollections:a,addedCollections:l,removedCollections:p},queries:y.queries,mutations:y.mutations}),s.version>1){y.log("debug","auto-migrating collections with new defaults",w);for(let _ of w)await y.migrate(_,A(_)),I.push(_);for(let _ of p)await y.deleteCollection(_);let P=a.filter(_=>!I.includes(_));P.length>0&&y.log("error",`Unmigrated changed collections from version ${r.version} to version ${s.version}:`,P)}},removedCollections:p,addedIndexes:f,removedIndexes:S,allCollections:Object.keys(s.collections),changedCollections:a,addedCollections:l,oldCollections:Object.keys(r.collections),oldSchema:r,newSchema:s}}function Go(i,n){let e=Object.keys(n.collections).filter(f=>i.collections[f]&&an(i.collections[f])!==an(n.collections[f])),t=Object.keys(i.collections).filter(f=>!n.collections[f]),r=Object.keys(n.collections).filter(f=>!i.collections[f]),s=new Set;for(let f of e){let S=i.collections[f].fields,w=n.collections[f].fields;Object.keys(w).some(A=>(!S[A]||pn(S[A]))&&!pn(w[A]))&&s.add(f),Object.keys(S).some(A=>!w[A])&&s.add(f)}let o={},a={};for(let f of[...e,...r]){let S=zr(i.collections[f]),w=zr(n.collections[f]),A=w.filter(I=>!S.find(E=>E.name===I.name)),y=S.filter(I=>!w.find(E=>E.name===I.name));A.length>0&&(o[f]=A,e.includes(f)&&s.add(f)),y.length>0&&(a[f]=y,e.includes(f)&&s.add(f))}return{changedCollections:e,addedCollections:r,removedCollections:t,addedIndexes:o,removedIndexes:a,autoMigratedCollections:s,withDefaults:(f,S)=>qe(n.collections[f],S),autoMigration:f=>S=>{let w=n.collections[f];return qe(w,$r(w,S))}}}var gn={};var Ue;(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"})(Ue||(Ue={}));var is=Be(Qe(),1),na=function(i,n){var e={};for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&n.indexOf(t)<0&&(e[t]=i[t]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(i);r<t.length;r++)n.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(i,t[r])&&(e[t[r]]=i[t[r]]);return e};function ra(i){let{properties:n,fields:e}=i,t=na(i,["properties","fields"]),r=n||e;if(!r)throw new Error("objectField must be passed a properties object");return Object.assign(Object.assign({type:"object"},t),{properties:r})}function sa(i,n){return i.properties=n,i}function oa(i){return Object.assign({type:"array"},i)}function aa(i,n){return i.items=n,i}var ca=i=>Object.assign({type:"string"},i),la=i=>Object.assign({type:"number"},i),da=i=>Object.assign({type:"boolean"},i),ua=i=>Object.assign({type:"any"},i);function ha(i){return Object.assign({type:"map"},i)}function fa(i,n){return i.values=n,i}var pa=i=>Object.assign({type:"file"},i),ma=()=>({type:"string",default:is.default}),ns={object:ra,array:oa,replaceObjectFields:sa,replaceArrayItems:aa,string:ca,number:la,boolean:da,any:ua,map:ha,replaceMapValues:fa,file:pa,id:ma};var as=Be(Qe(),1);function Zt(i){return i.equals!==void 0}function ei(i){return i.gte!==void 0||i.lte!==void 0||i.gt!==void 0||i.lt!==void 0}function rs(i){return!!i.match}function ti(i){return i.startsWith!==void 0}function Sn(i){return!ei(i)&&!Zt(i)&&!rs(i)&&!ti(i)&&i.order}function Et(i,n){var e,t;let r=(e=i.compounds)===null||e===void 0?void 0:e[n];if(r)return r.of.some(a=>Et(i,a));let s=(t=i.indexes)===null||t===void 0?void 0:t[n];if(s){if("type"in s)return xn(s.type);if("field"in s){let a=i.fields[s.field];return a?xn(a.type):!1}}let o=i.fields[n];return o?xn(o.type):!1}function xn(i){return i==="array"||i.endsWith("[]")}function pe(i){return i.type==="any"?!0:i.type==="map"?!1:i.nullable}function Fe(i){return i?i.type==="map"||i.type==="array"?!0:i.type==="file"?!1:i.default!==void 0:!1}function pn(i){return!pe(i)&&!Fe(i)}function qe(i,n){for(let[e,t]of Object.entries(i.fields)){let r=Pe(t);(r!==void 0&&n[e]===void 0||!pe(t)&&n[e]===null)&&(n[e]=r),n[e]&&Je(n[e],t)}return n}function Je(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=Pe(t);r!==void 0&&(i[e]=r)}Je(i[e],t)}else if(n.type==="array")for(let e of i)Je(e,n.items);else if(n.type==="map")for(let[e,t]of Object.entries(i))e===Ae||e===st||Je(t,n.values)}function Pe(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]=Pe(r));return e}if(pe(i))return null;if(i.type==="array")return[];if(i.type==="map")return{}}function $r(i,n){for(let[e,t]of Object.entries(n))e===Ae||e===st||(i.fields[e]?On(t,i.fields[e]):delete n[e]);return n}function On(i,n){if(V(i)&&n.type==="object")for(let[e,t]of Object.entries(i))n.properties[e]?On(t,n.properties[e]):delete i[e];else if(Array.isArray(i)&&n.type==="array")for(let e of i)On(e,n.items)}function ss(i){return i.type==="string"||i.type==="number"||i.type==="boolean"}function Kr(i,n){for(let[e,t]of Object.entries(n))if(e!==Ae){if(!i[e])return{type:"invalid-key",fieldPath:[e],message:`Invalid field "${e}"`};if(t){let r=Te({field:i[e],value:t,fieldPath:[e]});if(r)return r}}}function Te({field:i,value:n,fieldPath:e=[],depth:t,requireDefaults:r,expectRefs:s,hasPassedFirstLevel:o}){let a=s&&o;if(!(t!==void 0&&t<=0)&&!(pe(i)&&n==null)){if(n==null&&(r||!Fe(i)))return{type:"no-default",fieldPath:e,message:`Invalid null value for field ${he(e)}`};if(i.type==="object")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${he(e)}, got ${be(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected object ${i.nullable?"or null ":""}for field ${he(e)}, got ${be(n)}`};for(let[l,p]of Object.entries(i.properties)){if(l===Ae)continue;let f=Te({field:p,value:n[l],fieldPath:[...e,l],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(f)return f}for(let l of Object.keys(n))if(!i.properties[l])return{type:"invalid-key",fieldPath:[...e,l],message:`Invalid unexpected field "${l}" on value ${he(e)}`}}else if(i.type==="array")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${he(e)}, got ${be(n)}`}}else{if(!Array.isArray(n))return n===null&&i.nullable?void 0:{type:"invalid-value",fieldPath:e,message:`Expected array ${i.nullable?"or null ":""}for field ${he(e)}, got ${be(n)}`};for(let l of n){let p=Te({field:i.items,value:l,fieldPath:[...e,"[]"],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(p)return p}}else if(i.type==="map")if(a){if(!re(n))return{type:"invalid-type",fieldPath:e,message:`Expected ref for field ${he(e)}, got ${be(n)}`}}else{if(!V(n))return{type:"invalid-type",fieldPath:e,message:`Expected map for field ${he(e)}, got ${be(n)}`};for(let[l,p]of Object.entries(n)){let f=Te({field:i.values,value:p,fieldPath:[...e,l],depth:t!==void 0?t-1:void 0,expectRefs:s,hasPassedFirstLevel:!0});if(f)return f}}else if(i.type==="string"){if(typeof n!="string")return{type:"invalid-type",fieldPath:e,message:`Expected string ${i.nullable?"or null ":""}for field ${he(e)}, got ${be(n)}`};if(i.options&&!i.options.includes(n))return{type:"invalid-value",fieldPath:e,message:`Expected one of ${i.options.join(", ")} for field ${he(e)}, got ${be(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 ${he(e)}, got ${be(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 ${he(e)}, got ${be(n)}`}}else if(i.type==="file"){if(a){if(!fe(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ref for field ${he(e)}, got ${be(n)}`}}else if(!nt(n)&&!Ut(n))return{type:"invalid-type",fieldPath:e,message:`Expected file ${i.nullable?"or null ":""}for field ${he(e)}, got ${be(n)}`}}}}function be(i){try{return JSON.stringify(i)}catch{return String(i)}}function he(i){return i.length===0?"root":i.join(".")}function os(i,n){let e={};for(let[t,r]of Object.entries(n))i[t]&&(e[t]=ii({field:i[t],value:r,fieldPath:[t]}));return e}function ii({field:i,value:n,fieldPath:e=[],depth:t}){let r=Te({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]=ii({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=>ii({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]=ii({field:i.values,value:a,fieldPath:[...e,o],depth:t!==void 0?t-1:void 0});return s}else return n}}function Ne(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 ga=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 ya(i){var{synthetics:n,indexes:e}=i,t=ga(i,["synthetics","indexes"]);let r=Object.assign(Object.assign({},n),e);for(let[s,o]of Object.entries(t.fields))"indexed"in o&&(r[s]={field:s});return Object.assign(Object.assign({},t),{indexes:r})}function Ct(i){return i}Ct.collection=ya;Ct.fields=ns;Ct.generated={id:as.default};var us=Be(Qe(),1),ci=4,At=36;function cs(i){return i.toString(At).padStart(ci,"0")}function ba(i){return i.toString().padStart(6,"0")}var ni=class{constructor(){this.latest={time:Date.now(),counter:0,node:wa()},this.zeroCounter=0,this.now=n=>(this.latest=ds(this.latest),this.get(n,this.latest)),this.OLD_now=n=>(this.latest=ds(this.latest),ba(n)+xa(this.latest)),this.timerState=()=>this.latest,this.update=n=>{let e=n.slice(ci);this.latest=va(this.latest,hs(e))},this.get=(n,e)=>cs(n)+ls(e),this.zero=n=>cs(n)+ls({time:0,counter:this.zeroCounter++,node:this.latest.node}),this.getWallClockTime=_n}},ri=class extends Error{constructor(...n){super(),this.type="ClockDriftError",this.message=["maximum clock drift exceeded"].concat(n).join(" ")}},si=class extends Error{constructor(){super(),this.type="OverflowError",this.message="timestamp counter overflow"}},In=4,En=7,oi=60*1e3,Dt=9;function wa(){return us.default.slug().padStart(En,"0").slice(0,En)}function ls(i){let n=new Date(i.time).getTime().toString(At).padStart(Dt,"0"),e=i.counter.toString(At).padStart(In,"0"),t=i.node.padStart(En,"0");return`${n}${e}${t}`}function ds(i){let n=Date.now(),e=Math.max(i.time,n),t=i.time===e?i.counter+1:0;if(e-n>oi)throw new ri(e,n,oi);if(t>65535)throw new si;return{time:e,counter:t,node:i.node}}function va(i,n){let e=Date.now(),t=Math.max(e,Math.max(i.time,n.time)),r=Math.max(i.counter,n.counter),s;if(i.time===t&&n.time===t?s=r+1:i.time===t?s=i.counter+1:n.time===t?s=n.counter+1:s=0,t-e>oi)throw new ri(t,e,oi);if(s>65535)throw new si;return{time:t,counter:s,node:i.node}}function hs(i){let n=i.slice(0,Dt),e=i.slice(Dt,Dt+In),t=i.slice(Dt+In),r=parseInt(n,At),s=parseInt(e,At);if(isNaN(r)||isNaN(s))throw new Error("invalid clock format");return{time:r,counter:s,node:t}}function xa(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 ai(i){return parseInt(i.slice(0,ci),36)}function Pn(i,n){return ai(i)-ai(n)}function _n(i){return hs(i.slice(ci)).time}function fs(i,n,e,t,r,s){let o=new Ve(t,r);if(n==null)return[{oid:i,timestamp:t(),data:{op:"delete"},authz:s}];let a=de(n),l=[];for(let p of e){let f=Sa(i,a,p,o,s);l.unshift(...f),Me(a,p.data)}return l}function Sa(i,n,e,t,r){var s,o;let a=e.data;switch(a.op){case"set":return n[a.name]===void 0?t.createRemove(i,a.name,r):t.createSet(i,a.name,n[a.name],r);case"remove":return n[a.name]===void 0?[]:t.createSet(i,a.name,n[a.name],r);case"list-insert":return a.value===void 0&&((s=a.values)===null||s===void 0?void 0:s.length)===0?[]:t.createListDelete(i,a.index,a.value?1:((o=a.values)===null||o===void 0?void 0:o.length)||0,r);case"list-delete":return t.createListInsertMany(i,a.index,n.slice(a.index,a.index+a.count),r);case"list-move-by-ref":return t.createListMoveByRef(i,a.value,Rt(n,a.value),r);case"list-move-by-index":return t.createListMoveByIndex(i,a.to,a.from,r);case"delete":return t.createInitialize(n,i,r,!0);case"list-push":return t.createListRemove(i,a.value,"last",r);case"list-remove":if(a.only==="last"){let l=Rt(n,a.value,0,"backward");return l===-1?[]:t.createListInsert(i,l,a.value,r)}else if(a.only==="first"){let l=Rt(n,a.value);return l===-1?[]:t.createListInsert(i,l,a.value,r)}else{let l=[],p=Rt(n,a.value);for(;p!==-1;)l.push(p),p=Rt(n,a.value,p+1);return l.flatMap(f=>t.createListInsert(i,f,a.value,r))}case"list-add":return t.createListRemove(i,a.value,"last",r);case"list-set":return n[a.index]!==void 0?t.createListSet(i,a.index,n[a.index],r):t.createListDelete(i,a.index,1,r);case"initialize":return t.createDelete(i,r);case"touch":return[];default:throw new Error(`Cannot undo operation type: ${a.op}`)}}function Rt(i,n,e=0,t="forward"){let r=t==="forward"?"findIndex":"findLastIndex";return $(n)?i[r]((s,o)=>$(s)&&s.id===n.id&&o>=e):i[r]((s,o)=>s===n&&o>=e)}var li=class{constructor(n){this.value=n}deref(){return this.value}};var ct=class extends W{constructor(){super(...arguments);this._undoable=[];this._undone=[];this.undo=async()=>{let e=this._undoable.pop();if(e){let t=await e();return t&&this._undone.push(t),this.emit("change"),!0}return!1};this.redo=async()=>{let e=this._undone.pop();if(e){let t=await e();return t&&this._undoable.push(t),this.emit("change"),!0}return!1};this.addUndo=e=>{this._undoable.push(e),this._undone=[],this.emit("change")};this.addRedo=e=>{this._undone.push(e),this.emit("change")};this.clear=()=>{this._undoable=[],this._undone=[],this.emit("change")}}get canUndo(){return this._undoable.length>0}get canRedo(){return this._undone.length>0}get undoLength(){return this._undoable.length}get redoLength(){return this._undone.length}};var di=()=>{},ps=i=>(n,...e)=>{n==="critical"&&e.unshift("[CRITICAL]"),i&&e.unshift(`[${i}]`),n==="critical"?console.error(...e):console[n](...e)};function Cn(i){return localStorage.getItem("DEBUG")?ps(i):di}var oe=class{constructor(){this._disposes=[];this.disposed=!1;this.dispose=async()=>{this.disposed=!0,await Promise.all(this._disposes.map(async n=>{try{await n()}catch(e){console.error("Error disposing",e)}})),this._disposes=[]};this.compose=n=>this.addDispose(n.dispose.bind(n));this.addDispose=n=>{this._disposes.push(n)}}};var ms=typeof window<"u"?window.indexedDB:void 0;function Ge(i){return i instanceof Error&&i.name==="AbortError"}function lt(i){return new Promise((n,e)=>{i.onsuccess=()=>{n(i.result)},i.onerror=()=>{i.error&&Ge(i.error)?n(i.result):e(i.error)}})}function Ye(i,n){return new Promise((e,t)=>{let r=i.transaction([n],"readonly"),o=r.objectStore(n).openCursor(),a=0,l=0;o.onsuccess=function(p){let f=o.result;f&&(a++,l=l+Sr(f.value),f.continue())},o.onerror=function(p){o.error&&Ge(o.error)?e({count:a,size:l}):t(o.error)},r.oncomplete=function(p){e({count:a,size:l})},r.onabort=function(p){t(p)},r.onerror=function(p){t(p)}})}function Dn(i,n){let e=i.transaction(n,"readonly"),t=n.map(r=>{let s=e.objectStore(r);return lt(s.getAll())});return Promise.all(t)}async function we(i){i.close(),await new Promise(n=>{n()}),await new Promise(n=>{n()})}async function gs(i,n){let e=n.indexedDB.deleteDatabase([i,"meta"].join("_")),t=n.indexedDB.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})]),n.location.reload()}function ui(i,n=window.indexedDB){return lt(n.deleteDatabase(i))}async function Oa(i=window.indexedDB){return i.databases()}function ys(i,n,e,t,r){try{let s=i.transaction(n,e);if(t){let o=()=>{r?.("debug","aborting transaction");try{s.abort(),s.__aborted=!0}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}catch(s){if(s instanceof Error&&s.name==="InvalidStateError")return r?.("warn","Failed to create transaction, database is closing"),{abort:()=>{},addEventListener:()=>{},objectStore:()=>({add:()=>{},put:()=>{},get:()=>{},getAll:()=>{},delete:()=>{},clear:()=>{},openCursor:()=>{let o={onsuccess:()=>{},onerror:a=>{},result:null};return setTimeout(()=>{o.onerror({})},0),o},index:()=>{throw new Error("Transaction is not active")}}),oncomplete:null,onerror:null,onabort:null,error:new Error("Transaction is not active"),commit:()=>{},db:i,dispatchEvent:()=>!1,removeEventListener:()=>{},durability:"default",mode:"readonly",objectStoreNames:n,__aborted:!0};throw s}}function dt(i){return i.__aborted}async function An(i,n,e,t=window.indexedDB){(await Oa(t)).some(o=>o.name===n)&&(await ui(n,t),e.log("debug","Deleted existing database",n));let s=await new Promise((o,a)=>{e.log("debug","Copying to database",n,"at",i.version,"from",i.name);let l=t.open(n,i.version);l.onupgradeneeded=()=>{e.log("debug","Upgrading database",n,"to version",i.version);let p=i,f=l.transaction;if(!f)throw new Error("No transaction");for(let S of Array.from(p.objectStoreNames)){e.log("debug","Copying object store",S);let w=p.transaction(S).objectStore(S);f.db.createObjectStore(S,{keyPath:w.keyPath,autoIncrement:w.autoIncrement});let A=f.objectStore(S),y=p.transaction(S).objectStore(S);for(let I of Array.from(y.indexNames)){let E=y.index(I);e.log("debug","Copying index",I),A.createIndex(I,E.keyPath,{unique:E.unique,multiEntry:E.multiEntry})}}},l.onsuccess=()=>{e.log("debug","Opened reset database",n),o(l.result)},l.onerror=()=>a(l.error??new Error("Unknown database upgrade error"))});if(s.objectStoreNames.length>0){let o=await Dn(i,Array.from(i.objectStoreNames));await new Promise((a,l)=>{let p=s.transaction(Array.from(s.objectStoreNames),"readwrite");for(let f=0;f<o.length;f++){let S=p.objectStore(i.objectStoreNames[f]);for(let w of o[f])S.add(w)}p.oncomplete=()=>a(),p.onerror=f=>{let S=p.error??f.target.transaction?.error??new Error("Unknown error");e.log("critical","Error copying data",S),l(S)}})}await we(s)}function bs(i,n,e=window.indexedDB){return new Promise((t,r)=>{let s=e.open(i,n);s.onsuccess=()=>{if(s.result.version!==n){s.result.close(),r(new Error(`Migration error: opened database version ${s.result.version} but expected version ${n} for database ${i}`));return}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 Ft(i){return[i,"meta"].join("_")}function ut(i){return[i,"collections"].join("_")}function ws(i){return i.name?.split("_")[0]}var ze=class extends oe{constructor(e,t){super();this.db=e;this.ctx=t;this.createTransaction=(e,t)=>{try{if(this.globalAbortController.signal.aborted)throw new Error("Global abort signal is already aborted");let r=ys(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 s=r?.transaction||this.createTransaction([e],r);if(dt(s))return Promise.resolve(void 0);let o=s.objectStore(e),a=t(o);return lt(a)};this.runAll=async(e,t,r)=>{if(this.disposed||r?.transaction?.error)return Promise.resolve([]);if(r?.transaction&&dt(r.transaction))return Promise.resolve([]);let o=(r?.transaction||this.createTransaction([e],r)).objectStore(e),a=t(o);return Promise.all(a.map(lt))};this.iterate=async(e,t,r,s)=>{let o=s?.transaction||this.createTransaction([e],s);if(dt(o))return;let a=o.objectStore(e),l=t(a);return Array.isArray(l)?Promise.all(l.map(p=>new Promise((f,S)=>{p.onsuccess=()=>{let w=p.result;w?r(w.value,a,w)?f():w.continue():f()},p.onerror=()=>{p.error&&Ge(p.error)?f():S(p.error)}}))).then(()=>{}):new Promise((p,f)=>{l.onsuccess=()=>{let S=l.result;S?r(S.value,a,S)?p():S.continue():p()},l.onerror=()=>{l.error&&Ge(l.error)?p():f(l.error)}})};this.clear=(e,t)=>this.run(e,r=>r.clear(),{mode:"readwrite",transaction:t});this.onVersionChange=e=>{if(this.log?.("warn",`Another tab has requested a version change for ${this.db.name}`),this.db.close(),typeof window<"u")try{this.ctx.environment.location.reload()}catch(t){this.log?.("error","Failed to reload the page",t)}};let r=new AbortController;this.globalAbortController=r,this.db.addEventListener("versionchange",this.onVersionChange),this.addDispose(()=>{this.db.removeEventListener("versionchange",this.onVersionChange)})}};var hi=class extends ze{constructor(){super(...arguments);this.add=async e=>{let t=e.file?await Ea(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){this.ctx.log("error","Tried to mark unknown file as uploaded",e);return}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 Dn(this.db,["files"]);return t.map(this.hydrateFileData)};this.stats=async()=>({size:await Ye(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?Ia(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 Ia(i,n,e){return new File([new Blob([i],{type:n})],e??"blob",{type:n})}function Ea(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 fi=class extends ze{constructor(e,t){super(e,t);this.transaction=async(e,t)=>{let r=this.createTransaction(e.storeNames,{mode:e.mode,abort:e.abort});return await t(r)};this.getAckInfo=async()=>{let e=await this.run("info",t=>t.get("ack"));return e||{globalAckTimestamp:null}};this.setGlobalAck=async e=>{await this.run("info",t=>t.put({type:"ack",globalAckTimestamp:e}),{mode:"readwrite"})};this.getLocalReplica=async e=>this.run("info",t=>t.get("localReplicaInfo"),e);this.updateLocalReplica=async(e,t)=>{try{await this.run("info",r=>r.put({...e,type:"localReplicaInfo"}),{mode:"readwrite",transaction:t?.transaction})}catch(r){throw this.ctx.log("critical","Error updating local replica",e,r),r}};this.iterateDocumentBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>{let o=K(e),[a,l]=Mr(e),[p,f]=jr(e);return[s.openCursor(IDBKeyRange.only(o)),s.openCursor(IDBKeyRange.bound(a,l,!1,!1)),s.openCursor(IDBKeyRange.bound(p,f,!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=Rn)=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),t)};this.deleteBaseline=async(e,t=Rn)=>{await this.run("baselines",r=>r.delete(e),t)};this.iterateDocumentOperations=(e,t,r)=>this.iterate("operations",s=>{let o=s.index("d_t"),a=Ee(e),l=r?.to?ye(e,r.to):Re(e),p=IDBKeyRange.bound(a,l,!1,!1);return o.openCursor(p)},t,r);this.iterateEntityOperations=(e,t,r)=>this.iterate("operations",s=>{let o=Ee(e),a=r?.to?ye(e,r.to):Re(e),l=IDBKeyRange.bound(o,a,!1,!1);return s.openCursor(l)},t,r);this.deleteEntityOperations=(e,t)=>this.iterate("operations",r=>{let s=Ee(e),o=t?.to?ye(e,t.to):Re(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?ye(!0,t.after):Ee(!0),o=Re(!0);return r.index("l_t").openCursor(IDBKeyRange.bound(s,o,!!t?.after,!1),"next")},e);this.iterateAllOperations=(e,t)=>this.iterate("operations",r=>{let s=t?.from?Ee(t.from):void 0,o=t?.before?Re(t.before):Ee(!0),a=s&&o?IDBKeyRange.bound(s,o,!1,!0):s?IDBKeyRange.lowerBound(s,!1):o?IDBKeyRange.upperBound(o,!0):void 0;return r.index("timestamp").openCursor(a,"next")},e,t);this.addOperations=async(e,t=Rn)=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(K(o.oid)),s.put(this.addOperationIndexes(o)))),t),Array.from(r)};this.reset=async({clearReplica:e,transaction:t}={})=>{let r=t||this.createTransaction(["info","operations","baselines"],{mode:"readwrite"});await Promise.all([this.resetLocalReplica(r,e),this.resetBaselines(r),this.resetOperations(r)])};this.stats=async()=>{let e=await Ye(this.db,"operations"),t=await Ye(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:ye(e.oid,e.timestamp),l_t:ye(e.isLocal,e.timestamp),d_t:ye(K(e.oid),e.timestamp)});this.addDispose(()=>(this.ctx.log("info","Closing metadata DB for",t.namespace),we(e)))}},Rn={mode:"readwrite"};var vs=[_a,Ca,Da,Aa,Ra,Fa],Pa=vs.length;function Fn({indexedDB:i=window.indexedDB,namespace:n,log:e}){return new Promise((t,r)=>{let s=i.open(Ft(n),Pa),o=!1;s.onupgradeneeded=async a=>{let l=s.result,p=s.transaction,f=vs.slice(a.oldVersion);for(let S of f)await S(l,p);await new Promise((S,w)=>{p.addEventListener("complete",S),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 _a(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 Ca(i,n){let e=n.objectStore("operations");await new Promise((t,r)=>{let s=e.openCursor();s.onsuccess=()=>{let o=s.result;if(o){let{isLocal_timestamp:a,documentOid_timestamp:l,...p}=o.value;o.update({...p,l_t:a,d_t:l}),o.continue()}else t()},s.onerror=o=>{r(s.error)}}),e.deleteIndex("isLocal_timestamp"),e.deleteIndex("documentOid_timestamp"),e.createIndex("l_t","l_t",{unique:!1}),e.createIndex("o_t","o_t",{unique:!1}),e.createIndex("d_t","d_t",{unique:!1})}async function Da(i,n){n.objectStore("operations").createIndex("timestamp","timestamp")}async function Aa(i,n){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function Ra(i,n){let e=n.objectStore("operations");await new Promise((r,s)=>{let o=e.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let l=un(a.value);l.oid_timestamp!==a.primaryKey?(a.delete(),e.put(l)):a.update(l),a.continue()}else r()},o.onerror=a=>{s(o.error)}});let t=n.objectStore("baselines");await new Promise((r,s)=>{let o=t.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let l=un(a.value);l.oid!==a.primaryKey?(a.delete(),t.put(l)):a.update(l),a.continue()}else r()},o.onerror=a=>{s(o.error)}})}async function Fa(i,n){n.objectStore("files").createIndex("timestamp","timestamp")}var Ta=i=>IDBKeyRange.only(Ie(i.equals)),ka=i=>{},Ba=i=>{let n=i.gte||i.gt,e=i.lte||i.lt;return n===e?IDBKeyRange.only(Ie(n)):n?e?IDBKeyRange.bound(Ie(n),Ie(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(Ie(n),!!i.gt):IDBKeyRange.upperBound(Ie(e),!!i.lt)},La=(i,n,e)=>{let t=i.collections[n].compounds[e.where];L(t,`Index ${e.where} does not exist on collection ${n}`);let r=Object.keys(e.match).sort((l,p)=>t.of.indexOf(l)-t.of.indexOf(p));for(let l of r)if(t.of.indexOf(l)!==r.indexOf(l))throw new Error(`Compound index ${e.where} does not have ${l} at the start of its order`);let s=r.map(l=>e.match[l]);if(r.length===t.of.length)return IDBKeyRange.only(ye(...s));let o=Ee(...s),a=Re(...s);return IDBKeyRange.bound(o,a)};function Ma(i){let n=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(n,e)}function Tn(i,n,e){if(e)return ei(e)?Ba(e):Zt(e)?Ta(e):Sn(e)?ka(e):ti(e)?Ma(e):La(i,n,e)}var pi=class extends ze{constructor(e,t){super(e,t);this.context=t;this.close=async()=>{await this.dispose()};this.stats=async()=>{let e=Object.keys(this.context.schema.collections),t={};return await Promise.all(e.map(async r=>{let s=await Ye(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=Tn(this.context.schema,e.collection,e.index);return s.openCursor(a,o)},{mode:"readonly"});return t?ee(e.collection,t.primaryKey.toString()):null};this.findAllOids=async({collection:e,index:t,offset:r,limit:s})=>{let o=this.createTransaction([e],{mode:"readonly"});if(dt(o))return{result:[],hasNextPage:!1};let a=o.objectStore(e),l=t?.where?a.index(t.where):a,p=t?.order==="desc"?"prev":"next",f=Tn(this.context.schema,e,t),S=l.openCursor(f,p),w=!1;return{result:await new Promise((y,I)=>{let E=!r,P=0,_=new Set;S.onsuccess=()=>{P++;let T=S.result;if(!T){y(Array.from(_));return}r&&!E?(T.advance(r),E=!0):((!s||_.size<s)&&_.add(ee(e,T.primaryKey.toString())),s&&P>s?(w=!0,y(Array.from(_))):T.continue())},S.onerror=()=>{S.error?.name==="InvalidStateError"?(this.context.log("error","find query failed with InvalidStateError",S.error),y([])):S.error&&Ge(S.error)?y([]):I(S.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 l=a.getSnapshot();try{await this.saveDocument(a.oid,l,r)}catch(p){throw this.context.log("error",`Error saving document ${a.oid} (${JSON.stringify(l)})`,p),p instanceof Error?p:new Error("Unknown error saving document")}})),o=s.filter(a=>a.status==="rejected");if(o.length){if(o.length===s.length)throw new Error("Failed to save any documents. Something must be quite wrong.");this.context.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.context.schema.collections),t=this.createTransaction(e,{mode:"readwrite"});await Promise.all(e.map(r=>this.run(r,s=>s.clear(),{transaction:t}))),this.context.entityEvents.emit("collectionsChanged",e),this.context.log("info","\u{1F4A8} Reset queryable storage")};this.saveDocument=async(e,t,{transaction:r})=>{this.context.log("debug",`Saving document indexes for querying ${e}`);let{collection:s,id:o}=ue(e);try{if(!t)await this.run(s,a=>a.delete(o),{mode:"readwrite",transaction:r}),this.context.log("debug",`Deleted document indexes for querying ${e}`);else{let a=this.context.schema.collections[s],l=fn(a,t);l["@@@snapshot"]=JSON.stringify(t),await this.run(s,p=>p.put(l),{mode:"readwrite",transaction:r}),this.context.log("debug",`Save complete for ${e}`,l)}}catch(a){throw this.context.log("error",`Error saving document ${e}`,a),a}};this.addDispose(()=>(this.context.log("info","Closing document database for",t.namespace),we(this.db)))}};async function xs(i,n,e,t,r){r?.("debug","Upgrading database",n,"to version",e);function s(o,a){let l=i.open(ut(n),e),p=!1;l.onupgradeneeded=f=>{let S=l.transaction;t(S,l.result,f),p=!0},l.onsuccess=async f=>{p?(await we(l.result),o(l.result)):a(new Error("Database was not upgraded when a version change was expected"))},l.onerror=f=>{a(l.error||new Error("Unknown error"))},l.onblocked=f=>{r?.("Database upgrade blocked!")}}return new Promise(s)}async function kn({indexedDB:i=ms,namespace:n,version:e,log:t}){if(e<=0)throw new Error("Cannot open database at version less than 1");t?.("debug","Opening database",n,"at version",e);let r=await bs(ut(n),e,i);return t?.("debug","Database opened",n,"at version",r.version),r.version!==e&&t?.("warn",`Opened database version ${r.version} but expected version ${e} for namespace ${n}`),r.addEventListener("versionchange",s=>{r.close()}),r.addEventListener("close",()=>{t?.("warn","Database closed",n)}),r}var ht=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(ws).filter(e=>!!e)))};this.getNamespaceVersion=async n=>{let e=ut(n),r=(await this.indexedDB.databases()).find(s=>s.name===e);return r?r.version??0:0};this.deleteNamespace=async n=>{await Promise.all([ui(Ft(n),this.indexedDB),ui([n,"collections"].join("_"),this.indexedDB)])};this.openNamespace=async n=>new Bn(this.indexedDB,n);this.copyNamespace=async(n,e,t)=>{let r=t.cloneWithOptions({namespace:n}),s=t.cloneWithOptions({namespace:e}),{db:o}=await Fn({indexedDB:this.indexedDB,log:r.log,namespace:r.namespace}),a=await kn({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 An(o,Ft(s.namespace),s,this.indexedDB),await An(a,ut(s.namespace),s,this.indexedDB),await we(o),await we(a)}}},Bn=class{constructor(n,e){this.indexedDB=n;this.namespace=e;this.openMetadata=async n=>{let{db:e}=await Fn({indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return this.metadataDb=e,n.persistenceShutdownHandler.register(()=>we(e)),new fi(e,n)};this.openDocuments=async n=>{let e=await kn({version:n.schema.version,indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return n.persistenceShutdownHandler.register(()=>we(e)),new pi(e,n)};this.applyMigration=async(n,e)=>{n.log("debug","Applying migration",e.newSchema.version,e),await xs(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){if(!r.objectStoreNames.contains(s))throw new Error(`Expected object store for collection ${s} to exist during migration, but it did not`);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 hi(this.metadataDb,n))}};var ke=class{constructor(n){this.log=n;this.consumed=!1;this.handlers=[];this.reset=()=>{this.consumed=!1}}register(n){this.handlers.push(n)}async shutdown(){this.consumed&&this.log?.("warn","ShutdownHandler already consumed"),this.consumed=!0,await Promise.all(this.handlers.map(n=>n())),this.handlers.length=0}get isShuttingDown(){return this.consumed}};function Ss(i,n){return`@@wip-${i}-${We(n)}`}function Os({migration:i,newOids:n,ctx:e,meta:t}){return i.allCollections.reduce((r,s)=>(r[s]={put:async(o,a)=>{qe(i.newSchema.collections[s],o);let l=o[i.newSchema.collections[s].primaryKey],p=ee(s,l);return n.push(p),await e.time.withMigrationTime(i.version,()=>t.insertData({operations:e.patchCreator.createInitialize(o,p,a?.access),isLocal:!0})),o},delete:async o=>{let a=ee(s,o);await e.time.withMigrationTime(i.version,()=>t.deleteDocument(a))}},r),{})}function ja({migration:i,context:n,documents:e,meta:t}){return i.oldCollections.reduce((r,s)=>(r[s]={get:async o=>{let a=ee(s,o);return await t.getDocumentSnapshot(a,{to:n.time.nowWithVersion(i.oldSchema.version)})},findOne:async o=>{let a=await e.findOneOid({collection:s,index:o});return a?await t.getDocumentSnapshot(a,{to:n.time.nowWithVersion(i.oldSchema.version)}):null},findAll:async o=>{let{result:a}=await e.findAllOids({collection:s,index:o});return await Promise.all(a.map(async p=>t.getDocumentSnapshot(p,{to:n.time.nowWithVersion(i.oldSchema.version)})))}},r),{})}async function Is({migration:i,context:n,ns:e,meta:t}){let r=n.cloneWithOptions({schema:i.oldSchema});if(i.oldSchema.version===0)return Va({migration:i,context:r,meta:t});let s=new Array,o=await e.openDocuments(r),a=ja({migration:i,context:r,documents:o,meta:t}),l=Os({migration:i,newOids:s,ctx:r,meta:t}),p=async w=>{await t.deleteCollection(w)},f=new Array;return{log:n.log,newOids:s,deleteCollection:p,migrate:async(w,A)=>{let y=await a[w].findAll();n.log("debug",`Migrating ${y.length} documents in ${w}`),await Promise.all(y.filter(Boolean).map(async I=>{let E=se(I);L(!!E,`Document is missing an OID: ${JSON.stringify(I)}`);let P=await t.getDocumentAuthz(E),_=de(I),T=await A(I);if(T){Ot(_),Ot(T),rt(T);let b=Qt(_,T,()=>n.time.zeroWithVersion(i.version),void 0,[],{mergeUnknownObjects:!0,defaultUndefined:!1,authz:P});b.length>0&&await t.insertData({operations:b,isLocal:!0})}}))},queries:a,mutations:l,awaitables:f,close:async()=>{await o.close()}}}function Va({migration:i,context:n,meta:e}){let t=new Array,r=new Proxy({},{get(){throw new Error("Queries are not available in initial migrations; there is no database yet!")}}),s=Os({migration:i,newOids:t,ctx:n,meta:e});return{log:n.log,newOids:t,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:r,mutations:s,awaitables:[],close:()=>Promise.resolve()}}async function Es({ctx:i,documents:n,migration:e,meta:t,engine:r}){let s=await Ua({currentVersion:e.oldSchema.version,newVersion:e.newSchema.version,ctx:i,meta:t});for(let o of e.allCollections){let{result:a}=await n.findAllOids({collection:o});a.push(...r.newOids.filter(f=>ue(f).collection===o),...s.filter(f=>ue(f).collection===o));let p=(await Promise.all(a.map(async f=>{try{let S=await t.getDocumentSnapshot(f);return[f,S]}catch(S){return i.log("error","Could not regenerate snapshot during migration for oid",f,"this document will not be preserved",S),null}}))).filter(f=>!!f);await n.saveEntities(p.map(([f,S])=>({oid:f,getSnapshot(){return S}})),{collections:[o]})}}async function Ua({currentVersion:i,newVersion:n,ctx:e,meta:t}){let r=[];return await t.iterateAllOperations(s=>{r.push(s)},{from:e.time.zeroWithVersion(i+1)}),Array.from(new Set(r.map(s=>K(s.oid))))}function Ps({currentVersion:i,targetVersion:n,migrations:e}){let t=_s({currentVersion:i,targetVersion:n,migrations:e});if(!t)throw new N(N.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 _s({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=_s({currentVersion:r.newSchema.version,targetVersion:n,migrations:e});if(s)return[r,...s]}return null}async function Cs({context:i,version:n,meta:e}){let t=await i.persistence.openNamespace(i.namespace,i);await Na(i.namespace,async()=>{let r=await i.persistence.getNamespaceVersion(i.namespace);i.log("debug","Opening index database",i.namespace,"Current database version:",r,"target version:",n,i.schema.wip?"(wip)":"");let s=Ps({currentVersion:r,targetVersion:n,migrations:i.migrations});s.length>0&&(i.log("debug","Migrations to run:",s.map(o=>o.version)),await za({context:i,ns:t,toRun:s,meta:e}))})}async function Na(i,n){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,n):await n()}async function za({context:i,toRun:n,ns:e,meta:t}){i.pauseRebasing=!0;for(let r of n){i.log("info",`\u{1F680} Running migration v${r.oldSchema.version} -> v${r.newSchema.version}`);let s=i.cloneWithOptions({schema:r.oldSchema,persistenceShutdownHandler:new ke(i.log)}),o=await Is({migration:r,context:s,ns:e,meta:t});try{i.log("debug","Migrating data",s.namespace,"from version",r.oldSchema.version,"to version",r.newSchema.version),await r.migrate(o),i.log("debug","Awaiting remaining migration tasks"),await Promise.all(o.awaitables)}catch(l){throw i.log("critical",`Migration failed (${r.oldSchema.version} -> ${r.newSchema.version})`,l),l instanceof Error?l:new Error("Unknown error during migration")}await o.close(),s.log("debug","Upgrading database",s.namespace,"from version",s.schema.version,"to version",r.newSchema.version),await e.applyMigration(s,r),s.schema=r.newSchema;let a=await e.openDocuments(s);await Es({ctx:s,migration:r,engine:o,documents:a,meta:t}),await a.close(),s.log("debug",`Migration of ${s.namespace} complete.`),s.log("info",`
|
|
8
|
+
\u2B06\uFE0F v${r.newSchema.version} Migration complete. Here's the rundown:
|
|
9
|
+
- Added collections: ${r.addedCollections.join(", ")}
|
|
10
|
+
- Removed collections: ${r.removedCollections.join(", ")}
|
|
11
|
+
- Changed collections: ${r.changedCollections.join(", ")}
|
|
12
|
+
- New indexes: ${Object.keys(r.addedIndexes).map(l=>r.addedIndexes[l].map(p=>`${l}.${p.name}`)).flatMap(l=>l).join(", ")}
|
|
13
|
+
- Removed indexes: ${Object.keys(r.removedIndexes).map(l=>r.removedIndexes[l].map(p=>`${l}.${p.name}`)).flatMap(l=>l).join(", ")}
|
|
14
|
+
`)}i.pauseRebasing=!1}var mi=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,this.context.log("debug","Adding file to persistence",n),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 Ds=Be(Qe(),1);var gi=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($t)}};this.createSyncStep1=async n=>{let e=await this.meta.getLocalReplica(),t=n===null?null:e.lastSyncedLogicalTime,r=[],s=new Set;return this.db.transaction({mode:"readwrite",storeNames:["operations","baselines"]},async o=>{t?(this.ctx.log("debug","Syncing local operations since",t),await this.db.iterateLocalOperations(l=>{r.push($t(l)),s.add(K(l.oid))},{after:t,transaction:o})):(this.ctx.log("debug","Syncing all operations"),await this.db.iterateAllOperations(l=>{r.push($t(l)),s.add(K(l.oid))},{transaction:o}));let a=[];return t||await this.db.iterateAllBaselines(l=>{a.push(l)},{transaction:o}),r.length>0&&this.ctx.log("debug",`Syncing ${r.length} operations since ${t}`),{type:"sync",schemaVersion:this.ctx.schema.version,timestamp:this.ctx.time.now,replicaId:e.id,resyncAll:!e.lastSyncedLogicalTime,operations:r,baselines:a,since:t}})};this.createPresenceUpdate=async n=>{let e=await this.meta.getLocalReplica();return{type:"presence-update",presence:n.presence,replicaId:e.id,internal:n.internal}};this.createHeartbeat=async()=>({type:"heartbeat"});this.createAck=async n=>{let e=await this.meta.getLocalReplica();return{type:"ack",timestamp:this.ctx.time.now,replicaId:e.id,nonce:n}}}};var yi=class{constructor(n,e,t){this.db=n;this.meta=e;this.ctx=t;this.tryAutonomousRebase=async()=>{(await this.meta.getLocalReplica()).lastSyncedLogicalTime||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(this.ctx.log("debug","Running autonomous library rebase"),await this.runRebase(this.ctx.time.now))};this.runRebase=async n=>{this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(await this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async e=>{let t=new Set,r,s=0;if(await this.db.iterateAllOperations(a=>{t.add(a.oid),r=a.timestamp,s++},{before:n,transaction:e}),!t.size||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let o=[];for(let a of t)o.push(await this.rebase(a,r||n,e))}),this.ctx.globalEvents.emit("rebase"))};this.scheduleRebase=async n=>{this.rebaseTimeout&&clearTimeout(this.rebaseTimeout),this.rebaseTimeout=setTimeout(this.runRebase,this.ctx.config.persistence?.rebaseTimeout??1e4,n),this.ctx.log("debug","Scheduled rebase up to global ack",n)};this.rebaseTimeout=null;this.rebase=async(n,e,t)=>{if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let r=await this.db.getBaseline(n,{transaction:t}),s=r?.snapshot||void 0,o=0,a=r?.authz,l=[];if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;await this.db.iterateEntityOperations(n,f=>{(!r||f.timestamp>r.timestamp)&&(s=Me(s,f.data,l),f.data.op==="initialize"&&(a=f.authz)),o++},{to:e,transaction:t}),s&&z(s,n);let p={oid:n,snapshot:s,timestamp:e,authz:a};if(!(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown))return this.ctx.closeLock=(async()=>{if(p.snapshot?await this.db.setBaselines([p],{transaction:t}):await this.db.deleteBaseline(n,{transaction:t}),await this.db.deleteEntityOperations(n,{to:e,transaction:t}),this.ctx.log("debug","rebased",n,"up to",e,":",s,"and deleted",o,"operations"),l.length){let f=l.filter(fe);f.length&&this.ctx.internalEvents.emit("filesDeleted",f)}})(),p}}};var bi=class{constructor(n,e){this.db=n;this.ctx=e;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.ctx.internalEvents.emit("outgoingSyncMessage",t)};this.insertRemoteOperations=async(n,e)=>{if(n.length===0)return[];for(let t of n)t.isLocal=!1;await this.insertOperations(n,e),this.ack(n[n.length-1].timestamp)};this.insertRemoteBaselines=async(n,e)=>{if(n.length===0)return[];this.ctx.log("debug",`Inserting ${n.length} remote baselines`),await this.db.setBaselines(n,e);let t=new Set;return n.forEach(r=>{t.add(K(r.oid))}),Array.from(t)};this.deleteDocument=async n=>{let e=new Set,t=K(n);return L(t===n,"Must be root document OID"),e.add(t),this.db.transaction({storeNames:["baselines","operations"]},async r=>{await Promise.all([this.db.iterateDocumentBaselines(t,a=>{e.add(a.oid)},{transaction:r}),this.db.iterateDocumentOperations(t,a=>{e.add(a.oid)},{transaction:r})]);let s=await this.getDocumentAuthz(t),o=new Array;for(let a of e)o.push({oid:a,timestamp:this.ctx.time.now,data:{op:"delete"},authz:s});return this.insertLocalOperations(o,{transaction:r})})};this.deleteCollection=async n=>{let e=new Set;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await Promise.all([this.db.iterateCollectionBaselines(n,s=>{e.add(s.oid)},{transaction:t}),this.db.iterateCollectionOperations(n,s=>{e.add(s.oid)},{transaction:t})]);let r=new Array;for(let s of e)r.push({oid:s,timestamp:this.ctx.time.now,data:{op:"delete"},authz:void 0});return this.insertLocalOperations(r,{transaction:t})})};this.getDocumentSnapshot=async(n,e={})=>{let t=K(n);return L(t===n,"Must be root document OID"),this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async r=>{let s=[];await this.db.iterateDocumentBaselines(t,l=>{s.push(l)},{transaction:r});let o=new Map;for(let l of s)l.snapshot&&z(l.snapshot,l.oid),o.set(l.oid,l.snapshot);await this.db.iterateDocumentOperations(t,l=>{let p=o.get(l.oid)||void 0,f=Me(p,l.data);f&&z(f,l.oid),o.set(l.oid,f)},{transaction:r,to:e.to||this.ctx.time.now});let a=o.get(t);return a&&Nt(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,Ds.default)(),userId:null,ackedLogicalTime:null,lastSyncedLogicalTime:null};return await this.db.updateLocalReplica(r),this._cachedLocalReplica=r,r})(),this._creatingLocalReplica)};this.updateLocalReplica=async(n,e)=>{let t=await this.getLocalReplica(e);L(!!t,"Local replica must exist"),Object.assign(t,n),this._cachedLocalReplica=t,await this.db.updateLocalReplica(t,e)};this.iterateLocalOperations=this.db.iterateLocalOperations;this.iterateAllOperations=this.db.iterateAllOperations;this.iterateAllBaselines=this.db.iterateAllBaselines;this.reset=async()=>{this.ctx.closing||await this.db.reset()};this.stats=this.db.stats;this.export=async()=>{let n=new Array,e=new Array;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await this.iterateAllOperations(s=>{e.push(s)},{transaction:t}),await this.iterateAllBaselines(s=>{n.push(s)},{transaction:t});let r=await this.getLocalReplica();return{operations:e,baselines:n,localReplica:r,schemaVersion:this.ctx.schema.version}})};this.resetFrom=async n=>{this._cachedLocalReplica=null,await this.db.reset({clearReplica:!0}),n.localReplica&&await this.updateLocalReplica({ackedLogicalTime:n.localReplica.ackedLogicalTime,lastSyncedLogicalTime:n.localReplica.lastSyncedLogicalTime}),this.ctx.log("debug","Resetting metadata from export",n),await this.insertData({operations:n.operations,baselines:n.baselines,isLocal:!0})};this.manualRebase=async()=>{if(this.ctx.closing||this.ctx.config.persistence?.disableRebasing)return;let n=await this.db.getAckInfo();n.globalAckTimestamp&&await this.rebaser.scheduleRebase(n.globalAckTimestamp)};this.ack=async n=>{let e=await this.getLocalReplica();n>this.ctx.time.now||(this.ctx.internalEvents.emit("outgoingSyncMessage",{type:"ack",replicaId:e.id,timestamp:n}),!this.ctx.closing&&(!e.ackedLogicalTime||n>e.ackedLogicalTime)&&this.updateLocalReplica({ackedLogicalTime:n}))};this.rebaser=new yi(n,this,e),this.messageCreator=new gi(n,this,e)}};var wi=class{constructor(n,e){this.db=n;this.ctx=e;this.reset=this.db.reset.bind(this.db);this.close=this.db.close.bind(this.db);this.saveEntities=async(n,e)=>{if(n.length===0)return;let t=new Set(Object.keys(this.ctx.schema.collections)),r=[],s=n.filter(o=>{let{collection:a}=ue(o.oid);return t.has(a)?(r.includes(a)||r.push(a),!0):(this.ctx.log("warn",`Entity ${o.oid} is in a collection that no longer exists in the schema. It will not be saved.`),!1)});if(r.length!==0){this.ctx.log("debug","Saving",s.length,"entities"),await this.db.saveEntities(s,{abort:e?.abort,collections:r}),this.ctx.log("debug","Saved",s.length,"entities"),this.ctx.entityEvents.emit("collectionsChanged",r);for(let o of n)this.ctx.entityEvents.emit("documentChanged",o.oid)}};this.findOneOid=this.db.findOneOid.bind(this.db);this.findAllOids=this.db.findAllOids.bind(this.db);this.stats=this.db.stats.bind(this.db)}};async function Ln(i){let n=i.schema;if(i.schema.wip&&(i.namespace=Ss(i.originalNamespace,i.schema),i.log("info","\u{1F528}","Switched to WIP namespace",i.namespace),!(await i.persistence.getNamespaces()).includes(i.namespace))){let a=await i.persistence.getNamespaceVersion(i.originalNamespace);if(a===0)i.log("debug","No existing data to copy to WIP namespace");else{let l=i.oldSchemas?.find(p=>p.version===a);if(!l)throw new N(N.Code.MigrationPathNotFound,void 0,`Trying to open WIP database for version ${i.schema.version}, but the current local data is version ${a} and a historical schema for that version is not available.`);i.log("info",`Copying data from ${i.originalNamespace} to ${i.namespace}`),await i.persistence.copyNamespace(i.originalNamespace,i.namespace,i.cloneWithOptions({schema:l}))}}let e=await i.persistence.openNamespace(i.namespace,i);i.log("info","Opening persistence metadata",i.namespace);let t=new bi(await e.openMetadata(i),i);i.log("info","Opening persistence files",i.namespace);let r=new mi(await e.openFiles(i),i);if(i.log("info","Migrating document database"),await Cs({context:i,version:i.schema.version,meta:t}),i.log("info","Opening persistence documents"),i.schema.version<=0)throw i.schema!==n?(i.log("critical","Schema at initialization does not match original schema. This is likely a bug in Verdant!"),new N(N.Code.ConfigurationError,void 0,"Schema at initialization does not match original schema. This is likely a bug in Verdant!")):new N(N.Code.ConfigurationError,void 0,`Schema version must be greater than 0. Found version ${i.schema.version} with collections [${Object.keys(i.schema.collections).join(", ")}]
|
|
15
|
+
${JSON.stringify(i.schema)}`);let s=new wi(await e.openDocuments(i),i);if(!i.schema.wip){let o=await i.persistence.getNamespaces();for(let a of o)a.startsWith("@@wip_")&&(i.log("debug","Cleaning up old WIP namespace",a),await i.persistence.deleteNamespace(a,i))}return{meta:t,files:r,documents:s}}async function As(i,n){i.log("info","Importing data from export");let e=i.oldSchemas?.find(l=>l.version===n.data.schemaVersion);if(!e)throw new Error(`Could not find schema for version ${n.data.schemaVersion}`);let t=`@@import_${Date.now()}`,r=i.cloneWithOptions({schema:e,namespace:t,disableRebasing:!0,persistenceShutdownHandler:new ke(i.log)});await r.reinitialize();let s=await r.meta;await s.resetFrom(n.data);let o=new Set;for(let l of n.data.baselines)o.add(K(l.oid));for(let l of n.data.operations)o.add(K(l.oid));let a=await Promise.all(Array.from(o).map(async l=>{let p=await s.getDocumentSnapshot(l);return{oid:l,getSnapshot:()=>p}}));if(await(await r.documents).saveEntities(a),await(await r.files).import(n),i.log("debug","Imported data into temporary namespace",t),await r.persistenceShutdownHandler.shutdown(),e.version!==i.schema.version){let l=r.cloneWithOptions({persistenceShutdownHandler:new ke(i.log),schema:i.schema,oldSchemas:i.oldSchemas});await l.reinitialize(),i.log("debug","Upgraded imported data to current schema"),await l.persistenceShutdownHandler.shutdown(),i.log("debug","Shut down upgraded databases")}if(await i.persistenceShutdownHandler.shutdown(),await i.persistence.copyNamespace(t,i.namespace,i),i.log("debug","Copied imported data to primary namespace"),await i.reinitialize(),i.log("debug","Reinitialized primary persistence layer"),n.data.schemaVersion===i.schema.version){let l=await(await i.meta).stats();if(l.operationsSize.count!==n.data.operations.length)throw i.log("critical","Imported operations count mismatch","expected",n.data.operations.length,"actual",l.operationsSize.count),new N(N.Code.ImportFailed,void 0,"Imported operations count mismatch");if(l.baselinesSize.count!==n.data.baselines.length)throw i.log("critical","Imported documents count mismatch","expected",n.data.baselines.length,"actual",l.baselinesSize.count),new N(N.Code.ImportFailed,void 0,"Imported documents count mismatch")}else i.log("debug","Skipping integrity check due to schema version mismatch (not an error)",{exportedVersion:n.data.schemaVersion,currentVersion:i.schema.version});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 vi=class{constructor(n,e){this.base=n;this.version=e;this.withMigrationTime=async(n,e)=>{this.overrideNow=()=>this.base.zero(n),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 $a={WebSocket:typeof WebSocket<"u"?WebSocket:void 0,fetch:typeof window<"u"?window.fetch.bind(window):fetch,indexedDB:typeof indexedDB<"u"?indexedDB:void 0,location:typeof window<"u"?window.location:void 0,history:typeof window<"u"?window.history:void 0},xi=class i{constructor(n,e){this.init=n;this.weakRef=n=>this.init.EXPERIMENTAL_weakRefs?new WeakRef(n):new li(n);this.closing=!1;this.pauseRebasing=!1;this.getClient=()=>{throw new N(N.Code.Unexpected,void 0,"Client not yet initialized. This is a Verdant bug, please report it.")};this.reinitialize=async()=>{this.initializedPromise=Ln(this),await this.initializedPromise};if(typeof window>"u"&&!this.init.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 Client options.");this.namespace=this.init.namespace,this.originalNamespace=this.init.namespace,this.time=new vi(new ni,this.init.schema.version),this.log=this.init.log===!1?di:this.init.log||Cn("\u{1F33F}"),this.migrations=n.migrations,this.undoHistory=n.undoHistory||new ct,this.entityEvents=new W,this.internalEvents=new W,this.globalEvents=new W,this.schema=n.schema,this.oldSchemas=n.oldSchemas,this.patchCreator=new Ve(()=>this.time.now),this.persistenceShutdownHandler=n.persistenceShutdownHandler||new ke(this.log),this.config={files:n.files,sync:n.sync,persistence:{disableRebasing:n.disableRebasing,rebaseTimeout:n.rebaseTimeout},queries:n.queries},this.environment={...$a,...n.environment},this.persistence=n.persistence||new ht(this.environment.indexedDB),this.initializedPromise=e||Ln(this),this.initializedPromise.then(()=>{this.log("info","Persistence initialized")})}get meta(){return this.initializedPromise.then(n=>n.meta)}get documents(){return this.initializedPromise.then(n=>n.documents)}get files(){return this.initializedPromise.then(n=>n.files)}get waitForInitialization(){return this.initializedPromise.then(()=>{})}cloneWithOptions(n){return new i({...this.init,...n},this.initializedPromise)}};var Si=class{constructor(n,e){this.schema=n;this.entities=e;this.getOid=(n,e)=>{let t=this.schema.collections[n].primaryKey,r=e[t];return L(r,`Document must have a primary key: ${t.toString()} (got: ${JSON.stringify(e)})`),ee(n,r)};this.addDefaults=(n,e)=>{let t=this.schema.collections[n];return qe(t,e)};this.validate=(n,e)=>{let t=this.schema.collections[n];return os(t.fields,e)};this.create=async(n,e,t={})=>{let r=t,s=this.addDefaults(n,e),o=this.validate(n,s),a=this.getOid(n,o);if(t.access){let l=this.schema.collections[n];t.access!=="shared"&&e[l.primaryKey]&&!t.silenceAccessControlWithPrimaryKeyWarning&&console.warn("Using a custom primary key with access control is not supported. This may result in corrupted documents. Read more about why: https://verdant.dev/docs/sync/access#a-warning-about-custom-primaryKey"),r.access=t.access}return this.entities.create(o,a,r)};this.delete=async(n,e,t={})=>{let r=ee(n,e);return this.entities.delete(r,t)};this.deleteAll=async(n,e={})=>this.entities.deleteAll(n.map(([t,r])=>ee(t,r)),e);this.deleteAllFromCollection=async(n,e,t={})=>this.entities.deleteAll(e.map(r=>ee(n,r)),t);this.clone=async(n,e,t={})=>{if(!qt(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 Bi=Be(uo(),1);var Yn=Be(Qe(),1);function sc(i){return{id:(0,Yn.default)(),file:i,url:void 0,remote:!1,name:i.name,type:i.type}}function pt(i,n){if(typeof window<"u"&&nt(i)){let e=sc(i);return n(e),xt(e.id)}if(Ut(i)){let e={...i,id:(0,Yn.default)()};return n(e),xt(e.id)}if(Array.isArray(i)){for(let e=0;e<i.length;e++)i[e]=pt(i[e],n);return i}if(typeof i=="object"){for(let e in i)i[e]=pt(i[e],n);return i}return i}var mt=Symbol("entity-file-update"),Ri=Symbol("entity-file-mark-failed"),Xn=Symbol("child-file-changed"),oc,ac,ve=class extends W{constructor(e,{downloadRemote:t=!1,ctx:r,parent:s}){super();this.id=e;this._objectUrl=null;this._fileData=null;this._loading=!0;this._failed=!1;this._downloadRemote=!1;this._uploaded=!1;this.unsubscribes=[];this[oc]=e=>{this.ctx.log("debug","EntityFile updated",this.id,e),this._loading=!1,this._failed=!1,this._fileData=e,e.file&&(this._objectUrl&&"revokeObjectURL"in URL&&URL.revokeObjectURL(this._objectUrl),this.ctx.log("debug","Creating object URL for file",this.id),this._objectUrl=URL.createObjectURL(e.file)),this.emitChange()};this[ac]=e=>{this._failed=!0,this._failedReason=e,this._loading=!1,this.emitChange()};this.onUploaded=e=>{this._fileData??=e,this._uploaded=!0,this.ctx.log("debug","File marked uploaded",this.id,this._fileData),this.emitChange()};this.destroy=()=>{this._objectUrl&&URL.revokeObjectURL(this._objectUrl),this.dispose()};this.ctx=r,this.parent=s,this._downloadRemote=t,this.unsubscribes.push(this.ctx.internalEvents.subscribe(`fileUploaded:${e}`,this.onUploaded))}static{oc=mt,ac=Ri}get downloadRemote(){return this._downloadRemote}get isFile(){return!0}get isUploaded(){return this._uploaded||this._fileData?.remote||!1}get error(){return this._failedReason||null}emitChange(){this.parent[Xn](this),this.emit("change")}get url(){return this.loading?null:this._objectUrl?this._objectUrl:this._fileData?.url??null}get name(){return this._fileData?.name??null}get type(){return this._fileData?.type??null}get loading(){return this._loading}get failed(){return this._failed}getSnapshot(){return{id:this.id,url:this._fileData?.url??this._objectUrl??void 0,name:this.name??"unknown-file",remote:this._fileData?.remote??!1,type:this.type??"",file:this._fileData?.file}}};var Fi=class{constructor({initial:n,ctx:e}){this.cache=new Map;this.get=n=>{let e=this.getCached(n.oid);if(e)return e;let t=new me(n);return this.cache.set(n.oid,this.ctx.weakRef(t)),t};this.has=n=>this.cache.has(n);this.getCached=n=>{if(this.cache.has(n)){let t=this.cache.get(n)?.deref();if(t)return t;this.cache.delete(n)}return null};if(this.ctx=e,n)for(let t of n)this.cache.set(t.oid,e.weakRef(t))}};function ho(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 fo=Symbol("private entity context key"),lc,me=class i extends W{constructor({oid:e,schema:t,entityFamily:r,parent:s,ctx:o,metadataFamily:a,readonlyKeys:l,files:p,storeEvents:f,deleteSelf:S,fieldPath:w}){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=Ne(this.schema,e);return L(t,`No schema for key ${e}`),t};this.validate=Nr(()=>(this.validationError=Te({field:this.schema,value:this.rawView,fieldPath:this.fieldPath,expectRefs:!0})??void 0,this.validationError),()=>[this.viewData]);this.viewWithMappedChildren=e=>{let t=this.view;if(!t)return null;if(Array.isArray(t)){let r=t.map(s=>s instanceof i||s instanceof ve?e(s):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>(a instanceof i||a instanceof ve?s[o]=e(a):s[o]=a,s),{});return z(r,this.oid),r}};this.rawViewWithMappedChildren=e=>{let t=this.rawView;if(!t)return null;if(Array.isArray(t)){let r=t.map((s,o)=>$(s)?e(this.getChild(o,s.id)):s);return z(r,this.oid),r}else{let r=Object.entries(t).reduce((s,[o,a])=>($(a)?s[o]=e(this.getChild(o,a.id)):s[o]=a,s),{});return z(r,this.oid),r}};this.getSnapshot=()=>this.viewWithMappedChildren(e=>e.getSnapshot());this.getUnprunedSnapshot=()=>this.rawViewWithMappedChildren(e=>e instanceof ve?e.getSnapshot():e.getUnprunedSnapshot());this.addPendingOperations=e=>{this.ctx.log("debug","Entity: adding pending operations",this.oid,e),this.deepInvalid&&(this.ctx.log("warn","Changes are being applied to a pruned entity. This means that the pruned version is being treated as the new baseline and any pruned invalid data is lost.",this.oid),this.canonizePrunedVersion()),this.applyPendingOperations(e)};this.applyPendingOperations=e=>{if(this.access)for(let r of e)r.authz=this.access;let t=this.metadataFamily.addPendingData(e);for(let r of t)this.change(r)};this.getPruneDiff=()=>{let e=this.getSnapshot(),t=this.getUnprunedSnapshot();return this.patchCreator.createDiff(t,e,{authz:this.access,merge:!1})};this.canonizePrunedVersion=()=>{this.applyPendingOperations(this.getPruneDiff())};this.addConfirmedData=e=>{this.ctx.log("debug","Entity: adding confirmed data",this.oid);let t=this.metadataFamily.addConfirmedData(e);for(let r of t)this.change(r)};this.replaceAllData=e=>{this.ctx.log("debug","Entity: replacing all data",this.oid);let t=this.metadataFamily.replaceAllData(e);for(let r of t)this.change(r)};this.resetAllData=()=>{this.ctx.log("debug","Entity: resetting all data",this.oid),this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this._viewData=void 0;let e=this.metadataFamily.replaceAllData({});for(let t of e)this.change(t)};this.invalidateCachedView=()=>{this._viewData=void 0,this.cachedView=void 0};this.invalidate=e=>{if(e.oid===this.oid)this.invalidateCachedView();else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.invalidate(e)}};this.change=e=>{if(e.oid===this.oid)this.invalidateCachedView(),this.parent?this.changeNested(e):this.changeRoot(e);else{let t=this.entityFamily.getCached(e.oid);t&&t instanceof i&&t.change(e)}};this.changeRoot=e=>{this.deleted?this.wasDeletedLastChange?this.ctx.log("debug","Entity already deleted, not emitting delete or change events",this.oid):(this.ctx.log("debug","Entity deleted",this.oid),this.emit("delete",{isLocal:e.isLocal}),this.wasDeletedLastChange=!0):(this.wasDeletedLastChange&&(this.ctx.log("debug","Entity restored",this.oid),this.emit("restore",{isLocal:e.isLocal}),this.wasDeletedLastChange=!1),this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal}))};this.changeNested=e=>{if(this.deleted){this.ctx.log("debug","Entity deleted, not emitting change",this.oid);return}this.deepChange(this,e),this.emit("change",{isLocal:e.isLocal})};this.deepChange=(e,t)=>{if(this.deleted){this.ctx.log("debug","Entity deleted, not emitting deep change",this.oid);return}this.cachedDeepUpdatedAt=null,this.cachedView=void 0,this.emit("changeDeep",e,t),this.parent?.deepChange(e,t)};this[lc]=e=>{this.deepChange(this,{isLocal:!1,oid:this.oid})};this.getChild=(e,t)=>{let r=Ne(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)=>ho(this,e,r);this.get=e=>{Zn(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=Ne(this.schema,e);if(!s)throw new Error(`No schema for key ${String(e)} in ${JSON.stringify(this.schema)}`);if($(r))if(fe(r)){if(s.type!=="file"){if(pe(s))return null;if(Fe(s))return Pe(s);throw new Error(`Expected file schema for key ${String(e)}, got ${s.type}`)}return this.files.get(r.id,{downloadRemote:!!s.downloadRemote,ctx:this.ctx,parent:this})}else{if(s.type==="file"){if(console.error(`Expected file ref for key ${String(e)}, got ${r}`),pe(s))return null;if(Fe(s))return Pe(s);throw new Error(`No valid value for key ${String(e)} in ${JSON.stringify(this.schema)}`)}let o=this.getChild(e,r.id);if(o.deepInvalid){if(s.type==="array"||s.type==="map")return o;if(pe(s))return null;if(Fe(s)){let a=o.getUnprunedSnapshot(),l=this.patchCreator.createDiff(a,Pe(s),{merge:!1,mergeUnknownObjects:!0,authz:this.access});return this.processPrunedChild(e,o,l)}}return o}else{if(this.schema.type==="map"&&r===void 0)return;if(Te({field:s,value:r,fieldPath:[...this.fieldPath,e],depth:1,requireDefaults:!0}))if(Fe(s)){if(ss(s))return Pe(s);let o=Pe(s),a=Oe(this.oid),l=this.patchCreator.createInitialize(o,a,this.access);l.push(...this.patchCreator.createSet(this.oid,e,ie(a),this.access));let p=this.getChild(e,a);return this.processPrunedChild(e,p,l)}else return;return r}};this.processPrunedChild=(e,t,r)=>{this.ctx.log("warn","Replacing invalid child object field with ephemeral, valid data",this.oid,e);let s=this.metadataFamily.addEphemeralData(r);for(let o of s)this.invalidate(o);return t};this.getOrSet=(e,t)=>{Zn(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()}`);nt(e)||(e=de(e,!1));let r=Ne(this.schema,t);if(r){Je(e,r);let s=Te({field:r,value:e,fieldPath:[...this.fieldPath,t]});if(s)throw new Error(`Validation error: ${s.message}`,{cause:s})}return pt(e,s=>this.files.add(s,this))};this.getDeleteMode=e=>{if(this.readonlyKeys.includes(e))return!1;if(this.schema.type==="any"||this.schema.type==="map")return"delete";if(this.schema.type==="object"){let t=this.schema.properties[e];if(!t||t.type==="any")return"delete";if(t.type==="map")return!1;if(t.nullable)return"null"}return!1};this.getItemRefValue=e=>{if(e instanceof i)return ie(e.oid);if(e instanceof ve)return xt(e.id);if(typeof e=="object"){let t=G(e);if(!t||!this.entityFamily.has(t))throw new Error(`Cannot move object ${JSON.stringify(e)} which does not exist in this list`);return ie(t)}else return e};this.set=(e,t,r)=>{Zn(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)cc(e),this.addPendingOperations(this.patchCreator.createListDelete(this.oid,e));else{let t=this.getDeleteMode(e);if(!t)throw new Error(`Cannot delete key ${e.toString()} - the property is not marked as optional in the schema.`);t==="delete"?this.addPendingOperations(this.patchCreator.createRemove(this.oid,e)):this.addPendingOperations(this.patchCreator.createSet(this.oid,e,null))}};this.keys=()=>this.view?Object.keys(this.view):[];this.entries=()=>this.view?Object.entries(this.view):[];this.values=()=>this.view?Object.values(this.view):[];this.update=(e,{merge:t=!0,replaceSubObjects:r=!1,preserveUndefined:s=!1,dangerouslyDisableMerge:o=!1}={})=>{if(!t&&!o&&this.schema.type!=="any"&&this.schema.type!=="map")throw new Error('Cannot use .update without merge if the field has a strict schema type. merge: false is only available on "any" or "map" types.');let a={};z(a,this.oid);for(let[l,p]of Object.entries(e)){if(this.readonlyKeys.includes(l))throw new Error(`Cannot set readonly key ${l.toString()}`);if(p===void 0&&!s)continue;let f=Ne(this.schema,l);f&&Je(p,f),a[l]=this.processInputValue(p,l)}this.addPendingOperations(this.patchCreator.createDiff(this.getSnapshot(),a,{mergeUnknownObjects:!r,merge:t}))};this.push=e=>{this.addPendingOperations(this.patchCreator.createListPush(this.oid,this.processInputValue(e,this.view.length)))};this.insert=(e,t)=>{this.addPendingOperations(this.patchCreator.createListInsert(this.oid,e,this.processInputValue(t,e)))};this.move=(e,t)=>{this.addPendingOperations(this.patchCreator.createListMoveByIndex(this.oid,e,t))};this.moveItem=(e,t)=>{let r=this.getItemRefValue(e);if($(r))this.addPendingOperations(this.patchCreator.createListMoveByRef(this.oid,r,t));else{let s=this.view.indexOf(e);if(s===-1)throw new Error(`Cannot move item ${JSON.stringify(e)} which does not exist in this list`);this.move(s,t)}};this.add=e=>{this.addPendingOperations(this.patchCreator.createListAdd(this.oid,this.processInputValue(e,this.view.length)))};this.removeAll=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e)))};this.removeFirst=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"first"))};this.removeLast=e=>{this.addPendingOperations(this.patchCreator.createListRemove(this.oid,this.getItemRefValue(e),"last"))};this.map=e=>this.view.map(e);this.filter=e=>this.view.filter(e);this.has=e=>{if(!this.isList)throw new Error("has() is only available on list entities");let t=this.getItemRefValue(e);return $(t)?this.view.some(r=>{if($(r))return De(r,t)}):this.view.includes(e)};this.forEach=e=>{this.view.forEach(e)};this.reduce=(e,t)=>this.view.reduce(e,t);this.some=e=>this.view.some(e);this.every=e=>this.view.every(e);this.find=e=>this.view.find(e);this.includes=this.has;this.deleteSelf=()=>this._deleteSelf();this.__getViewData__=(e,t)=>this.metadataFamily.get(e).computeView(t==="confirmed");this.__getFamilyOids__=()=>this.metadataFamily.getAllOids();this.__discardPendingOperation__=e=>{this.metadataFamily.discardPendingOperation(e),this.invalidateCachedView()};L(!!e,"oid is required"),this.oid=e,this.readonlyKeys=l||[],this.ctx=o,this.files=p,this.schema=t,this.fieldPath=w||[],this.entityFamily=r||new Fi({initial:[this],ctx:o}),this.metadataFamily=a,this.storeEvents=f,this.parent=s,this._deleteSelf=S,this.parent||(f.add.attach(this.onAdd),f.replace.attach(this.onReplace),f.resetAll.attach(this.onResetAll))}get[fo](){return this.ctx}get metadata(){return this.metadataFamily.get(this.oid)}get patchCreator(){return this.ctx.patchCreator}get viewData(){return this._viewData===void 0&&(this._viewData=this.metadata.computeView(),this.validate()),this._viewData}get rawView(){return this.viewData.view}get view(){if(this.cachedView!==void 0)return this.cachedView;if(this.viewData.deleted)return null;let e=this.rawView;if(!e&&!pe(this.schema)||this.schema.type==="array"&&!Array.isArray(e)||(this.schema.type==="object"||this.schema.type==="map")&&!V(e))return Fe(this.schema)?Pe(this.schema):null;let r=this.isList?[]:{};if(z(r,this.oid),Array.isArray(e)){let s=Ne(this.schema,0);if(!s)this.ctx.log("error","No child field schema for list entity.",this.oid);else for(let o=0;o<e.length;o++){let a=this.get(o);this.childIsNull(a)&&!pe(s)?this.ctx.log("error","Child missing in non-nullable field",this.oid,"index:",o):r.push(a)}}else if(V(e)){let s=this.schema.type==="object"?Object.keys(this.schema.properties):Object.keys(e);for(let o of s){let a=Ne(this.schema,o);if(!a){this.ctx.log("error","No child field schema for object entity at key",o),this.schema.type==="map"?r={}:r=null;break}let l=this.get(o);if(this.childIsNull(l)&&!pe(a)){if(this.ctx.log("error","Child entity is missing for non-nullable field",this.oid,"key:",o),this.schema.type!=="map"){r=null;break}}else pe(a)&&l===void 0?r[o]=null:r[o]=l}}return this.cachedView=r,r}get uid(){return this.oid}get deleted(){return this.viewData.deleted||this.view===null}get quickDeleted(){return this._viewData?.deleted||this.cachedView===null}get invalid(){return!!this.validate()}get deepInvalid(){if(this.invalid)return!0;if(Array.isArray(this.rawView)){for(let e=0;e<this.rawView.length;e++)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}else if(V(this.rawView)){for(let e in this.rawView)if(re(this.rawView[e])&&this.getChild(e,this.rawView[e].id).deepInvalid)return!0}return!1}get isList(){return this.schema.type==="array"||Array.isArray(this.viewData.view)}get updatedAt(){return this.viewData.updatedAt}get deepUpdatedAt(){if(this.cachedDeepUpdatedAt)return this.cachedDeepUpdatedAt;let e=this.updatedAt;return this.isList?this.forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}):this.values().forEach(t=>{if(t instanceof i){let r=t.deepUpdatedAt;r&&(!e||r>e)&&(e=r)}}),this.cachedDeepUpdatedAt=e,e}get isOutdatedVersion(){return this.parent?this.parent.isOutdatedVersion:this.viewData.fromOlderVersion}get namespace(){return this.ctx.namespace}get access(){return this.viewData.authz}get isAuthorized(){return!!this.access}get size(){return this.isList?this.length:this.keys().length}get length(){return this.view.length}[(lc=Xn,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 Zn(i){if(typeof i=="symbol")throw new Error("Symbol keys aren't supported")}function cc(i){if(typeof i!="number")throw new Error("Only number keys are supported in list entities")}function po(i){return i[fo].getClient()}var er=class{constructor({oid:n,ctx:e,confirmedOperations:t,pendingOperations:r,baseline:s}){this.baseline=null;this.confirmedOperations=[];this.ephemeralOperations=[];this.pendingOperations=[];this.computeView=(n=!1)=>{let e=de(this.baseline?.snapshot??void 0),t=this.baseline?.timestamp??null,r=this.baseline?.authz,s=this.applyOperations(e,!e,this.confirmedOperations,t,t);s.futureSeen&&this.ctx.globalEvents.emit("futureSeen",s.futureSeen),s.authz&&(r=s.authz);let o=!this.ephemeralOperations||n?s:this.applyOperations(s.view,s.deleted,this.ephemeralOperations,s.latestTimestamp,null),a=n?s:this.applyOperations(o.view,o.deleted,this.pendingOperations,o.latestTimestamp,null);a.authz&&(r=a.authz),a.view&&z(a.view,this.oid);let l=!!s.latestTimestamp&&Pn(s.latestTimestamp,this.ctx.time.now)<0,p=!this.baseline&&!this.pendingOperations.length&&!this.confirmedOperations.length;p&&this.ctx.log("warn",`Tried to load Entity ${this.oid} with no data`);let f=a.latestTimestamp??s.latestTimestamp??t,S=f?_n(f):0;return!a.view&&!a.deleted&&!p&&this.ctx.log("warn",`Entity ${this.oid} has no view, no deleted flag, and not empty`),{view:a.view??void 0,deleted:a.deleted,empty:p,fromOlderVersion:l,updatedAt:S,latestTimestamp:f,authz:r}};this.addBaseline=n=>{if(!(this.baseline&&this.baseline.timestamp>=n.timestamp))for(this.baseline=n;this.confirmedOperations[0]?.timestamp<n.timestamp;)this.confirmedOperations.shift()};this.addConfirmedOperations=n=>{let e=0;for(let t of n){let r=this.confirmedOperations.findIndex(o=>o.timestamp>=t.timestamp);r!==-1?this.confirmedOperations[r].timestamp!==t.timestamp&&(this.confirmedOperations.splice(r,0,t),e++):(this.confirmedOperations.push(t),e++);let s=this.pendingOperations.length;this.discardPendingOperation(t),e-=s-this.pendingOperations.length}return e};this.addPendingOperation=n=>{this.pendingOperations.push(n)};this.addEphemeralOperation=n=>{this.ephemeralOperations||(this.ephemeralOperations=[]),this.ephemeralOperations.push(n)};this.clearEphemeralOperations=()=>{let n=this.ephemeralOperations;return this.ephemeralOperations=[],n};this.discardPendingOperation=n=>{this.pendingOperations=this.pendingOperations.filter(e=>e.timestamp!==n.timestamp)};this.applyOperations=(n,e,t,r,s)=>{let o,a,l=this.ctx.time.now;for(let p of t)if(!(s&&p.timestamp<=s)){if(Pn(p.timestamp,l)>0){o=p.timestamp;continue}if(p.data.op==="delete")e=!0;else try{n=Me(n,p.data),p.data.op==="initialize"&&(e=!1,p.authz&&(a=p.authz))}catch(f){throw this.ctx.log("critical",`Failed to apply operation to entity ${this.oid}: ${JSON.stringify(p)}`,f),f}(!r||p.timestamp>r)&&(r=p.timestamp)}return{view:n,latestTimestamp:r??null,deleted:e,futureSeen:o,authz:a}};L(n,"oid is required"),this.ctx=e,this.oid=n,t&&(this.confirmedOperations=t),r&&(this.pendingOperations=r),s&&(this.baseline=s)}},Ti=class{constructor({ctx:n,onPendingOperations:e,rootOid:t}){this.entities=new Map;this.get=n=>(L(n,"oid is required"),this.entities.has(n)||this.entities.set(n,new er({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(!je(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(!je(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o)!==0&&(r[s]??={oid:s,isLocal:t})}return Object.values(r)};this.addPendingData=n=>{this.flushAllEphemeral();let e={};for(let t of n)this.get(t.oid).addPendingOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return this.onPendingOperations(n),Object.values(e)};this.ephemeralMemo=new Array;this.flushAllEphemeral=()=>{for(let n of this.entities.values()){let e=n.clearEphemeralOperations();e&&this.ephemeralMemo.push(...e)}if(this.ephemeralMemo.length){let n=this.ephemeralMemo.slice();this.ephemeralMemo.length=0,this.addPendingData(n)}};this.addEphemeralData=n=>{let e={};for(let t of n)this.get(t.oid).addEphemeralOperation(t),e[t.oid]??={oid:t.oid,isLocal:!0};return Object.values(e)};this.replaceAllData=({operations:n={},baselines:e=[]})=>{let t=Array.from(this.entities.keys());this.entities.clear();let r={};for(let s of t)r[s]={oid:s,isLocal:!1};for(let s of e){if(!je(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(!je(this.rootOid,s))throw new Error(`Invalid operations for entity ${this.rootOid}: `+JSON.stringify(o));this.get(s).addConfirmedOperations(o),r[s]??={oid:s,isLocal:!1}}return Object.values(r)};this.discardPendingOperation=n=>{this.entities.get(n.oid)?.discardPendingOperation(n)};this.ctx=n,this.rootOid=t,this.onPendingOperations=e}};var kt="@@default",ki=class{constructor({batchTimeout:n=200,ctx:e,entities:t}){this.currentBatchKey=kt;this.flushOperations=async(n,e,t)=>{if(!n.length)return;this.ctx.log("debug","Flushing",n.length,"operations from batch",e,"to storage / sync");let r=[],s={};for(let o=n.length-1;o>=0;o--){let a=n[o],l=s[a.oid];if(l&&Fr(a,l)){this.entities.discardPendingOperation(a);continue}let p=Rr(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=vt(),max:t=null,timeout:r=this.defaultBatchTimeout}={})=>{let s=this.batcher.add({key:e,max:t,timeout:r,items:[],userData:{undoable:n}}),o={run:a=>(this.currentBatchKey=e,a(),this.currentBatchKey=kt,o),commit:async()=>(await this.batcher.flush(kt),s.flush()),flush:()=>o.commit(),discard:()=>{this.batcher.discard(e)}};return o};this.flushAll=()=>(this.ctx.log("debug","Flushing all operations"),Promise.all(this.batcher.flushAll()));this.createUndo=async n=>{let e=await this.getInverseOperations(n);return e.length?async()=>{let t=await this.createUndo({ops:e,source:n.source,isRedo:!0});for(let r of e)r.timestamp=this.ctx.time.now;return this.ctx.log("debug",n.isRedo?"Redo":"Undo",e,`
|
|
7
16
|
was
|
|
8
|
-
`,n.ops),await this.commitOperations(e,{undoable:!1}),t}:null};this.getInverseOperations=async({ops:n,source:e})=>{let t=Kt(n),r=[],s=()=>this.ctx.time.now;return await Promise.all(Object.entries(t).map(async([o,a])=>{let p=(e??await this.entities.hydrate(K(o)))?.__getViewData__(o,"confirmed");if(!p){this.ctx.log("warn","could not find entity",o,"for undo operation",n);return}let h=ps(o,p.view,a,s);r.unshift(...h)})),r};this.ctx=e,this.entities=t,this.defaultBatchTimeout=n,this.batcher=new nt(this.flushOperations),this.batcher.add({key:kt,items:[],max:100,timeout:n,userData:{undoable:!0}})}get isDefaultBatch(){return this.currentBatchKey===kt}};var _n=class extends oe{constructor({ctx:e,files:t}){super();this.events={add:new En.WeakEvent,replace:new En.WeakEvent,resetAll:new En.WeakEvent};this.cache=new Map;this.pendingEntityPromises=new Map;this.abortDataQueueController=new AbortController;this.ongoingResetPromise=null;this.entityFinalizationRegistry=new FinalizationRegistry(e=>{this.ctx.log("debug","Entity GC",e)});this.addData=async e=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not adding incoming data");return}e.reset&&(this.ctx.log("info","Resetting local store to replicate remote synced data - dropping any current transactions"),this.abortDataQueueController.abort(0),this.abortDataQueueController=new AbortController,this.ongoingResetPromise=this.resetData().finally(()=>{this.ongoingResetPromise=null,this.ctx.globalEvents.emit("resetToServer")})),this.ongoingResetPromise&&(this.ctx.log("debug","Waiting for ongoing reset to complete"),await this.ongoingResetPromise,this.ctx.log("debug","Ongoing reset complete")),await this.processData(e)};this.empty=async()=>{await this.ctx.documents.reset(),this.events.resetAll.invoke(this),this.cache.clear()};this.resetData=async()=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not resetting local data");return}await this.ctx.meta.reset(),await this.ctx.documents.reset(),this.events.resetAll.invoke(this)};this.processData=async e=>{if(this.disposed){this.ctx.log("warn","EntityStore is disposed, not processing incoming data");return}let t=e?.baselines??[],r=e?.operations??[];if(t.length===0&&r.length===0){this.ctx.log("debug","No data to process");return}this.ctx.log("debug","Processing incoming data",{operations:r.length,baselines:t.length,reset:!!e.reset});let s=Array.from(new Set(t.map(h=>K(h.oid)).concat(r.map(h=>K(h.oid))))),o=Rr(t),a=Ar(r);this.ctx.log("debug","Applying data to live entities");for(let h of s){let O=o[h],v=a[h]??[],P=Kt(v),y=e.reset?this.events.replace:this.events.add,I=this.pendingEntityPromises.get(h);I?(this.ctx.log("debug","Waiting for ongoing entity hydration",h),I.then(()=>{y.invoke(this,{oid:h,baselines:O,operations:P,isLocal:!1})})):(this.ctx.log("debug","Applying data to entity",h),y.invoke(this,{oid:h,baselines:O,operations:P,isLocal:!1}))}let l={abort:this.abortDataQueueController.signal};await this.ctx.meta.insertData(e,l),this.ctx.log("debug","Data processing complete, all data saved to metadata db.");let p=await Promise.all(s.map(async h=>await this.hydrate(h,l)??{oid:h,getSnapshot(){return null}}));try{this.ctx.log("debug","Saving entities to queryable storage"),await this.ctx.documents.saveEntities(p,l)}catch(h){this.disposed?this.ctx.log("warn","Error saving entities to queryable storage - EntityStore is disposed",h):this.ctx.log("error","Error saving entities to queryable storage",h)}};this.hydrate=async(e,t)=>{if(!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","Cached entity is deleted",e),null):(this.ctx.log("debug","Using cached hydrated entity",e),o);this.ctx.log("debug","Removing GC'd entity from cache",e),this.cache.delete(e)}}let r=this.pendingEntityPromises.get(e);if(r)return this.ctx.log("debug","Waiting for ongoing entity hydration",e),r;{this.ctx.log("debug","Hydrating entity from storage",e);let s=this.constructEntity(e);if(!s)return this.ctx.log("warn","Entity schema not found, cannot construct",e),null;let o=this.loadEntity(s,t);return o.finally(()=>{this.pendingEntityPromises.delete(e),this.ctx.log("debug","Hydration complete",e)}),this.pendingEntityPromises.set(e,o),o}};this.destroy=async()=>{this.dispose(),await this.batcher.flushAll()};this.create=async(e,t,{undoable:r=!0,access:s}={})=>{this.ctx.log("debug","Creating new entity",t);let{collection:o}=ue(t);Wt(e);let a=[],l=lt(e,a.push.bind(a));z(l,t);let{schema:p}=this.getCollectionSchema(o);if(!p)throw new Error(`Collection schema not found for ${o}`);let h=this.ctx.patchCreator.createInitialize(l,t,s);await this.batcher.commitOperations(h,{undoable:!!r});let O=await this.hydrate(t);if(!O)throw this.ctx.log("error","Failed to create entity; hydrated entity is null. Hopefully an error is logged above.",t),new q(q.Code.Unexpected,void 0,`Failed to create document ${t}`);return this.ctx.log("debug","Associating",a.length,"files to new entity",t),a.forEach(v=>this.files.add(v,O)),O};this.deleteAll=async(e,t)=>{this.ctx.log("info","Deleting documents",e),L(e.every(o=>o===K(o)),"Only root documents may be deleted via client methods");let r=await Promise.all(e.map(o=>this.hydrate(o))),s=[];for(let o of r)if(o){let a=o.__getFamilyOids__(),l=this.ctx.patchCreator.createDeleteAll(a);for(let p of l)p.authz=o.access;s.push(...l)}await this.batcher.commitOperations(s,{undoable:t?.undoable===void 0?!0:t.undoable}),e.forEach(o=>{this.cache.delete(o),this.ctx.log("debug","Deleted document from cache",o)})};this.delete=async(e,t)=>this.deleteAll([e],t);this.getCollectionSchema=e=>{let t=this.ctx.schema.collections[e];return t?{schema:{type:"object",nullable:!1,properties:t.fields},readonlyKeys:[t.primaryKey]}:(this.ctx.log("warn",`Missing schema for collection: ${e}`),{schema:null,readonlyKeys:[]})};this.constructEntity=e=>{L(!!e,"Cannot construct entity without OID");let{collection:t}=ue(e),{schema:r,readonlyKeys:s}=this.getCollectionSchema(t);if(!r)return null;if(this.disposed)throw new Error("Cannot hydrate entity after store has been disposed");let o=new On({ctx:this.ctx,onPendingOperations:this.onPendingOperations,rootOid:e});return new me({ctx:this.ctx,oid:e,schema:r,readonlyKeys:s,files:this.files,metadataFamily:o,storeEvents:this.events,deleteSelf:this.delete.bind(this,e)})};this.onPendingOperations=e=>{this.batcher.addOperations(e)};this.discardPendingOperation=e=>{let t=K(e.oid);this.cache.get(t)?.deref()?.__discardPendingOperation__(e)};this.loadEntity=async(e,t)=>(await this.loadEntityData(e,t),this.cache.set(e.oid,this.ctx.weakRef(e)),this.entityFinalizationRegistry.register(e,e.oid),e);this.loadEntityData=async(e,t)=>{let{operations:r,baselines:s}=await this.ctx.meta.getDocumentData(e.oid,t);return!s.length&&!Object.keys(r).length?(this.ctx.log("debug","No data found for entity",e.oid),null):(this.ctx.log("debug","Loaded entity from storage",e.oid),this.events.replace.invoke(this,{oid:e.oid,baselines:s,operations:r,isLocal:!1}),e)};this.clearCache=()=>{this.ctx.log("debug","Emptying entity cache"),this.cache.clear()};this.ctx=e,this.files=t,this.batcher=new In({ctx:e,entities:this}),this.addDispose(this.ctx.internalEvents.subscribe("persistenceReset",this.clearCache))}get batch(){return this.batcher.batch}get flushAllBatches(){return this.batcher.flushAll}};function Xs({currentVersion:i,targetVersion:n,migrations:e}){let t=Zs({currentVersion:i,targetVersion:n,migrations:e});if(!t)throw new q(q.Code.MigrationPathNotFound,void 0,`No migration path found from ${i} to ${n}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);return t}function Zs({currentVersion:i,targetVersion:n,migrations:e}){if(i===n)return[];let t=e.filter(r=>r.oldSchema.version===i).sort((r,s)=>s.newSchema.version-r.newSchema.version);for(;t.length>0;){let r=t.shift();if(r.newSchema.version>n)return null;if(r.newSchema.version===n)return[r];let s=Zs({currentVersion:r.newSchema.version,targetVersion:n,migrations:e});if(s)return[r,...s]}return null}var Dn=class extends oe{constructor({sync:e,context:t}){super();this.cache=new Map;this.add=async(e,t)=>{let r=this.cache.get(e.id);r||(r=new ve(e.id,{ctx:this.context,parent:t}),this.cache.set(e.id,r)),e.remote||r[dt](e);let s=await this.context.files.add(e);r[dt](s)};this.get=(e,t)=>{if(this.cache.has(e))return this.cache.get(e);let r=new ve(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[xn](r.error?.toString()))}catch(r){this.context.log("error","Failed to load file",r),e[xn](r instanceof Error?r.message:String(r))}};this.onFileUploaded=e=>{this.context.log("debug","Marking file as uploaded",e.id),this.context.files.onUploaded(e.id)};this.sync=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("fileUploaded",this.onFileUploaded))}};var eo=typeof window<"u"?window.indexedDB:void 0;function Xe(i){return i instanceof Error&&i.name==="AbortError"}function ut(i){return new Promise((n,e)=>{i.onsuccess=()=>{n(i.result)},i.onerror=()=>{i.error&&Xe(i.error)?n(i.result):e(i.error)}})}function Ze(i,n){return new Promise((e,t)=>{let r=i.transaction([n],"readonly"),o=r.objectStore(n).openCursor(),a=0,l=0;o.onsuccess=function(p){let h=o.result;h&&(a++,l=l+Or(h.value),h.continue())},o.onerror=function(p){o.error&&Xe(o.error)?e({count:a,size:l}):t(o.error)},r.oncomplete=function(p){e({count:a,size:l})},r.onabort=function(p){t(p)},r.onerror=function(p){t(p)}})}function Wi(i,n){let e=i.transaction(n,"readonly"),t=n.map(r=>{let s=e.objectStore(r);return ut(s.getAll())});return Promise.all(t)}async function we(i){i.close(),await new Promise(n=>{n()}),await new Promise(n=>{n()})}async function Cn(i,n){let e=n.indexedDB.deleteDatabase([i,"meta"].join("_")),t=n.indexedDB.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})]),n.location.reload()}function Pn(i,n=window.indexedDB){return ut(n.deleteDatabase(i))}async function Ka(i=window.indexedDB){return i.databases()}function to(i,n,e,t,r){try{let s=i.transaction(n,e);if(t){let o=()=>{r?.("debug","aborting transaction");try{s.abort(),s.__aborted=!0}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}catch(s){if(s instanceof Error&&s.name==="InvalidStateError")return r?.("warn","Failed to create transaction, database is closing"),{abort:()=>{},addEventListener:()=>{},objectStore:()=>({add:()=>{},put:()=>{},get:()=>{},getAll:()=>{},delete:()=>{},clear:()=>{},openCursor:()=>{let o={onsuccess:()=>{},onerror:a=>{},result:null};return setTimeout(()=>{o.onerror({})},0),o},index:()=>{throw new Error("Transaction is not active")}}),oncomplete:null,onerror:null,onabort:null,error:new Error("Transaction is not active"),commit:()=>{},db:i,dispatchEvent:()=>!1,removeEventListener:()=>{},durability:"default",mode:"readonly",objectStoreNames:n,__aborted:!0};throw s}}function ft(i){return i.__aborted}async function Ji(i,n,e,t=window.indexedDB){(await Ka(t)).some(a=>a.name===n)&&(await Pn(n,t),e.log("debug","Deleted existing database",n));let s=await new Promise((a,l)=>{e.log("debug","Opening reset database",n,"at",i.version);let p=t.open(n,i.version);p.onupgradeneeded=()=>{e.log("debug","Upgrading database",n,"to version",i.version);let h=i,O=p.transaction;if(!O)throw new Error("No transaction");for(let v of Array.from(h.objectStoreNames)){let P=h.transaction(v).objectStore(v);O.db.createObjectStore(v,{keyPath:P.keyPath,autoIncrement:P.autoIncrement});let y=O.objectStore(v),I=h.transaction(v).objectStore(v);for(let _ of Array.from(I.indexNames)){let E=I.index(_);e.log("debug","Copying index",_),y.createIndex(_,E.keyPath,{unique:E.unique,multiEntry:E.multiEntry})}}},p.onsuccess=()=>{e.log("debug","Opened reset database",n),a(p.result)},p.onerror=()=>l(p.error??new Error("Unknown database upgrade error"))}),o=await Wi(i,Array.from(i.objectStoreNames));await new Promise((a,l)=>{let p=s.transaction(Array.from(s.objectStoreNames),"readwrite");for(let h=0;h<o.length;h++){let O=p.objectStore(i.objectStoreNames[h]);for(let v of o[h])O.add(v)}p.oncomplete=()=>a(),p.onerror=h=>{let O=p.error??h.target.transaction?.error??new Error("Unknown error");e.log("critical","Error copying data",O),l(O)}}),await we(s)}function no(i,n,e=window.indexedDB){return new Promise((t,r)=>{let s=e.open(i,n);s.onsuccess=()=>{t(s.result)},s.onerror=()=>{r(s.error)},s.onblocked=()=>{r(new Error("Database blocked"))},s.onupgradeneeded=o=>{let a=s.result;a.version!==n&&(a.close(),r(new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${n}, got ${a.version}`)))}})}function Bt(i){return[i,"meta"].join("_")}function ht(i){return[i,"collections"].join("_")}function io(i){return i.name?.split("_")[0]}var ke=class{constructor(n){this.log=n;this.consumed=!1;this.handlers=[];this.reset=()=>{this.consumed=!1}}register(n){this.handlers.push(n)}async shutdown(){this.consumed&&this.log?.("warn","ShutdownHandler already consumed"),this.consumed=!0,await Promise.all(this.handlers.map(n=>n())),this.handlers.length=0}get isShuttingDown(){return this.consumed}};function ro(i,n){return`@@wip-${i}-${qe(n)}`}function so({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],l=ee(r,a);return n.push(l),await e.time.withMigrationTime(i.version,()=>e.meta.insertData({operations:e.patchCreator.createInitialize(s,l,o?.access),isLocal:!0})),s},delete:async s=>{let o=ee(r,s);await e.time.withMigrationTime(i.version,()=>e.meta.deleteDocument(o))}},t),{})}function qa({migration:i,context:n,documents:e}){return i.oldCollections.reduce((t,r)=>(t[r]={get:async s=>{let o=ee(r,s);return await n.meta.getDocumentSnapshot(o,{to:n.time.nowWithVersion(i.oldSchema.version)})},findOne:async s=>{let o=await e.findOneOid({collection:r,index:s});return o?await n.meta.getDocumentSnapshot(o,{to:n.time.nowWithVersion(i.oldSchema.version)}):null},findAll:async s=>{let{result:o}=await e.findAllOids({collection:r,index:s});return await Promise.all(o.map(l=>n.meta.getDocumentSnapshot(l,{to:n.time.nowWithVersion(i.oldSchema.version)})))}},t),{})}async function oo({migration:i,context:n,ns:e}){let t={...n,schema:i.oldSchema};if(i.oldSchema.version===0)return Ha({migration:i,context:t});let r=new Array,s=await e.openDocuments(t),o=qa({migration:i,context:t,documents:s}),a=so({migration:i,newOids:r,ctx:t}),l=async O=>{await n.meta.deleteCollection(O)},p=new Array;return{log:n.log,newOids:r,deleteCollection:l,migrate:async(O,v)=>{let P=await o[O].findAll();n.log("debug",`Migrating ${P.length} documents in ${O}`),await Promise.all(P.filter(Boolean).map(async y=>{let I=se(y);L(!!I,`Document is missing an OID: ${JSON.stringify(y)}`);let _=await n.meta.getDocumentAuthz(I),E=de(y),D=await v(y);if(D){It(E),It(D),rt(D);let k=Gt(E,D,()=>n.time.zeroWithVersion(i.version),void 0,[],{mergeUnknownObjects:!0,defaultUndefined:!1,authz:_});k.length>0&&await n.meta.insertData({operations:k,isLocal:!0})}}))},queries:o,mutations:a,awaitables:p,close:async()=>{await s.close()}}}function Ha({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=so({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 ao({ctx:i,documents:n,migration:e,engine:t}){let r=await Qa({currentVersion:e.oldSchema.version,newVersion:e.newSchema.version,ctx:i});for(let s of e.allCollections){let{result:o}=await n.findAllOids({collection:s});o.push(...t.newOids.filter(p=>ue(p).collection===s),...r.filter(p=>ue(p).collection===s));let l=(await Promise.all(o.map(async p=>{try{let h=await i.meta.getDocumentSnapshot(p);return[p,h]}catch(h){return i.log("error","Could not regenerate snapshot during migration for oid",p,"this document will not be preserved",h),null}}))).filter(p=>!!p);await n.saveEntities(l.map(([p,h])=>({oid:p,getSnapshot(){return h}})),{collections:[s]})}}async function Qa({currentVersion:i,newVersion:n,ctx:e}){let t=[];return await e.meta.iterateAllOperations(r=>{t.push(r)},{from:e.time.zeroWithVersion(i+1)}),Array.from(new Set(t.map(r=>K(r.oid))))}async function co({context:i,version:n}){let e=await i.persistence.openNamespace(i.namespace,i);await Wa(i.namespace,async()=>{let t=await i.persistence.getNamespaceVersion(i.namespace);i.log("debug","Opening index database",i.namespace,"Current database version:",t,"target version:",n,i.schema.wip?"(wip)":"");let r=Xs({currentVersion:t,targetVersion:n,migrations:i.migrations});r.length>0&&(i.log("debug","Migrations to run:",r.map(s=>s.version)),await Ja({context:i,ns:e,toRun:r}))})}async function Wa(i,n){typeof navigator<"u"&&navigator.locks?await navigator.locks.request(`verdant_migration_${i}`,n):await n()}async function Ja({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 ke(i.log)},s=await oo({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 ao({ctx:r,migration:t,engine:s,documents:o}),await o.close(),r.log("debug",`Migration of ${r.namespace} complete.`),r.log("info",`
|
|
9
|
-
\u2B06\uFE0F v${t.newSchema.version} Migration complete. Here's the rundown:
|
|
10
|
-
- Added collections: ${t.addedCollections.join(", ")}
|
|
11
|
-
- Removed collections: ${t.removedCollections.join(", ")}
|
|
12
|
-
- Changed collections: ${t.changedCollections.join(", ")}
|
|
13
|
-
- New indexes: ${Object.keys(t.addedIndexes).map(a=>t.addedIndexes[a].map(l=>`${a}.${l.name}`)).flatMap(a=>a).join(", ")}
|
|
14
|
-
- Removed indexes: ${Object.keys(t.removedIndexes).map(a=>t.removedIndexes[a].map(l=>`${a}.${l.name}`)).flatMap(a=>a).join(", ")}
|
|
15
|
-
`)}i.pauseRebasing=!1}var An=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,this.context.log("debug","Adding file to persistence",n),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 Rn=class{constructor(n,e,t){this.db=n;this.meta=e;this.ctx=t;this.tryAutonomousRebase=async()=>{(await this.meta.getLocalReplica()).lastSyncedLogicalTime||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(this.ctx.log("debug","Running autonomous library rebase"),await this.runRebase(this.ctx.time.now))};this.runRebase=async n=>{this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown||(await this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async e=>{let t=new Set,r,s=0;if(await this.db.iterateAllOperations(a=>{t.add(a.oid),r=a.timestamp,s++},{before:n,transaction:e}),!t.size||this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let o=[];for(let a of t)o.push(await this.rebase(a,r||n,e))}),this.ctx.globalEvents.emit("rebase"))};this.scheduleRebase=async n=>{this.rebaseTimeout&&clearTimeout(this.rebaseTimeout),this.rebaseTimeout=setTimeout(this.runRebase,this.ctx.config.persistence?.rebaseTimeout??1e4,n),this.ctx.log("debug","Scheduled rebase up to global ack",n)};this.rebaseTimeout=null;this.rebase=async(n,e,t)=>{if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;let r=await this.db.getBaseline(n,{transaction:t}),s=r?.snapshot||void 0,o=0,a=r?.authz,l=[];if(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown)return;await this.db.iterateEntityOperations(n,h=>{(!r||h.timestamp>r.timestamp)&&(s=je(s,h.data,l),h.data.op==="initialize"&&(a=h.authz)),o++},{to:e,transaction:t}),s&&z(s,n);let p={oid:n,snapshot:s,timestamp:e,authz:a};if(!(this.ctx.closing||this.ctx.persistenceShutdownHandler.isShuttingDown))return this.ctx.closeLock=(async()=>{if(p.snapshot?await this.db.setBaselines([p],{transaction:t}):await this.db.deleteBaseline(n,{transaction:t}),await this.db.deleteEntityOperations(n,{to:e,transaction:t}),this.ctx.log("debug","rebased",n,"up to",e,":",s,"and deleted",o,"operations"),l.length){let h=l.filter(he);h.length&&this.ctx.internalEvents.emit("filesDeleted",h)}})(),p}}};var Fn=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(qt)}};this.createSyncStep1=async n=>{let e=await this.meta.getLocalReplica(),t=n===null?null:e.lastSyncedLogicalTime,r=[],s=new Set;return this.db.transaction({mode:"readwrite",storeNames:["operations","baselines"]},async o=>{t?(this.ctx.log("debug","Syncing local operations since",t),await this.db.iterateLocalOperations(l=>{r.push(qt(l)),s.add(K(l.oid))},{after:t,transaction:o})):(this.ctx.log("debug","Syncing all operations"),await this.db.iterateAllOperations(l=>{r.push(qt(l)),s.add(K(l.oid))},{transaction:o}));let a=[];return t||await this.db.iterateAllBaselines(l=>{a.push(l)},{transaction:o}),r.length>0&&this.ctx.log("debug",`Syncing ${r.length} operations since ${t}`),{type:"sync",schemaVersion:this.ctx.schema.version,timestamp:this.ctx.time.now,replicaId:e.id,resyncAll:!e.lastSyncedLogicalTime,operations:r,baselines:a,since:t}})};this.createPresenceUpdate=async n=>{let e=await this.meta.getLocalReplica();return{type:"presence-update",presence:n.presence,replicaId:e.id,internal:n.internal}};this.createHeartbeat=async()=>({type:"heartbeat"});this.createAck=async n=>{let e=await this.meta.getLocalReplica();return{type:"ack",timestamp:this.ctx.time.now,replicaId:e.id,nonce:n}}}};var lo=Be(We(),1),Tn=class{constructor(n,e){this.db=n;this.ctx=e;this.events=new N;this.insertOperations=async(n,e)=>{this.ctx.log("debug",`Inserting ${n.length} operations`,n);let t=await this.db.addOperations(n,e);for(let r of n)this.ctx.globalEvents.emit("operation",r);return!this.ctx.config.persistence?.disableRebasing&&!this.ctx.pauseRebasing&&this.rebaser.tryAutonomousRebase(),t};this.insertLocalOperations=async(n,e)=>{if(n.length===0)return;for(let r of n)r.isLocal=!0;await this.insertOperations(n,e),this.ctx.log("debug",`Inserted ${n.length} local operations; sending sync message`);let t=await this.messageCreator.createOperation({operations:n});this.events.emit("syncMessage",t)};this.insertRemoteOperations=async(n,e)=>{if(n.length===0)return[];for(let t of n)t.isLocal=!1;await this.insertOperations(n,e),this.ack(n[n.length-1].timestamp)};this.insertRemoteBaselines=async(n,e)=>{if(n.length===0)return[];this.ctx.log("debug",`Inserting ${n.length} remote baselines`),await this.db.setBaselines(n,e);let t=new Set;return n.forEach(r=>{t.add(K(r.oid))}),Array.from(t)};this.deleteDocument=async n=>{let e=new Set,t=K(n);return L(t===n,"Must be root document OID"),e.add(t),this.db.transaction({storeNames:["baselines","operations"]},async r=>{await Promise.all([this.db.iterateDocumentBaselines(t,a=>{e.add(a.oid)},{transaction:r}),this.db.iterateDocumentOperations(t,a=>{e.add(a.oid)},{transaction:r})]);let s=await this.getDocumentAuthz(t),o=new Array;for(let a of e)o.push({oid:a,timestamp:this.ctx.time.now,data:{op:"delete"},authz:s});return this.insertLocalOperations(o,{transaction:r})})};this.deleteCollection=async n=>{let e=new Set;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await Promise.all([this.db.iterateCollectionBaselines(n,s=>{e.add(s.oid)},{transaction:t}),this.db.iterateCollectionOperations(n,s=>{e.add(s.oid)},{transaction:t})]);let r=new Array;for(let s of e)r.push({oid:s,timestamp:this.ctx.time.now,data:{op:"delete"},authz:void 0});return this.insertLocalOperations(r,{transaction:t})})};this.getDocumentSnapshot=async(n,e={})=>{let t=K(n);return L(t===n,"Must be root document OID"),this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async r=>{let s=[];await this.db.iterateDocumentBaselines(t,l=>{s.push(l)},{transaction:r});let o=new Map;for(let l of s)l.snapshot&&z(l.snapshot,l.oid),o.set(l.oid,l.snapshot);await this.db.iterateDocumentOperations(t,l=>{let p=o.get(l.oid)||void 0,h=je(p,l.data);h&&z(h,l.oid),o.set(l.oid,h)},{transaction:r,to:e.to||this.ctx.time.now});let a=o.get(t);return a&&$t(a,o),a})};this.getDocumentData=async(n,e)=>this.db.transaction({storeNames:["baselines","operations"],abort:e?.abort},async t=>{let r=[],s={};return await Promise.all([this.db.iterateDocumentBaselines(n,o=>{r.push(o)},{transaction:t}),this.db.iterateDocumentOperations(n,o=>{s[o.oid]??=[],s[o.oid].push(o)},{transaction:t})]),{baselines:r,operations:s}});this.getDocumentAuthz=async n=>{let e;return await this.db.iterateEntityOperations(n,t=>{if(t.data.op==="initialize")return e=t.authz,!0}),e};this.insertData=async(n,e)=>this.db.transaction({storeNames:["baselines","operations"],abort:e?.abort,mode:"readwrite"},async t=>{if(this.ctx.log("debug","Begin insert data transaction"),n.baselines&&await this.insertRemoteBaselines(n.baselines,{transaction:t}),this.ctx.log("debug","Inserted baselines (if any)"),e?.abort?.aborted)throw new Error("Aborted");n.operations&&(n.isLocal?(this.ctx.log("debug","Inserting local operations"),await this.insertLocalOperations(n.operations,{transaction:t})):(this.ctx.log("debug","Inserting remote operations"),await this.insertRemoteOperations(n.operations,{transaction:t}))),this.ctx.log("debug","End insert data transaction")});this.updateLastSynced=async n=>{if(!this.ctx.closing)return this.updateLocalReplica({lastSyncedLogicalTime:n})};this.setGlobalAck=async n=>{this.ctx.closing||(await this.db.setGlobalAck(n),this.ctx.config.persistence?.disableRebasing||await this.rebaser.scheduleRebase(n))};this._cachedLocalReplica=null;this._creatingLocalReplica=void 0;this.getLocalReplica=async n=>{if(this._cachedLocalReplica)return this._cachedLocalReplica;let e=await this.db.getLocalReplica(n);return e?(this.ctx.log("debug","Read local replica",e),this._cachedLocalReplica=e,e):this._creatingLocalReplica?this._creatingLocalReplica:(this._creatingLocalReplica=(async()=>{let r={id:(0,lo.default)(),userId:null,ackedLogicalTime:null,lastSyncedLogicalTime:null};return await this.db.updateLocalReplica(r),this._cachedLocalReplica=r,r})(),this._creatingLocalReplica)};this.updateLocalReplica=async(n,e)=>{let t=await this.getLocalReplica(e);L(!!t,"Local replica must exist"),Object.assign(t,n),this._cachedLocalReplica=t,await this.db.updateLocalReplica(t,e)};this.iterateLocalOperations=this.db.iterateLocalOperations;this.iterateAllOperations=this.db.iterateAllOperations;this.iterateAllBaselines=this.db.iterateAllBaselines;this.reset=async()=>{this.ctx.closing||await this.db.reset()};this.stats=this.db.stats;this.export=async()=>{let n=new Array,e=new Array;return this.db.transaction({storeNames:["baselines","operations"],mode:"readwrite"},async t=>{await this.iterateAllOperations(s=>{e.push(s)},{transaction:t}),await this.iterateAllBaselines(s=>{n.push(s)},{transaction:t});let r=await this.getLocalReplica();return{operations:e,baselines:n,localReplica:r,schemaVersion:this.ctx.schema.version}})};this.resetFrom=async n=>{this._cachedLocalReplica=null,await this.db.reset({clearReplica:!0}),n.localReplica&&await this.updateLocalReplica({ackedLogicalTime:n.localReplica.ackedLogicalTime,lastSyncedLogicalTime:n.localReplica.lastSyncedLogicalTime}),this.ctx.log("debug","Resetting metadata from export",n),await this.insertData({operations:n.operations,baselines:n.baselines,isLocal:!0})};this.manualRebase=async()=>{if(this.ctx.closing||this.ctx.config.persistence?.disableRebasing)return;let n=await this.db.getAckInfo();n.globalAckTimestamp&&await this.rebaser.scheduleRebase(n.globalAckTimestamp)};this.ack=async n=>{let e=await this.getLocalReplica();n>this.ctx.time.now||(this.events.emit("syncMessage",{type:"ack",replicaId:e.id,timestamp:n}),!this.ctx.closing&&(!e.ackedLogicalTime||n>e.ackedLogicalTime)&&this.updateLocalReplica({ackedLogicalTime:n}))};this.rebaser=new Rn(n,this,e),this.messageCreator=new Fn(n,this,e)}};var kn=class{constructor(n,e){this.db=n;this.ctx=e;this.reset=this.db.reset.bind(this.db);this.close=this.db.close.bind(this.db);this.saveEntities=async(n,e)=>{if(n.length===0)return;let t=new Set(Object.keys(this.ctx.schema.collections)),r=[],s=n.filter(o=>{let{collection:a}=ue(o.oid);return t.has(a)?(r.includes(a)||r.push(a),!0):(this.ctx.log("warn",`Entity ${o.oid} is in a collection that no longer exists in the schema. It will not be saved.`),!1)});if(r.length!==0){this.ctx.log("debug","Saving",s.length,"entities"),await this.db.saveEntities(s,{abort:e?.abort,collections:r}),this.ctx.log("debug","Saved",s.length,"entities"),this.ctx.entityEvents.emit("collectionsChanged",r);for(let o of n)this.ctx.entityEvents.emit("documentChanged",o.oid)}};this.findOneOid=this.db.findOneOid.bind(this.db);this.findAllOids=this.db.findAllOids.bind(this.db);this.stats=this.db.stats.bind(this.db)}};async function Lt(i){let n=i;if(i.schema.wip&&(n.namespace=ro(i.originalNamespace,i.schema),n.log("info","Switched to WIP namespace",n.namespace),!(await n.persistence.getNamespaces()).includes(n.namespace))){let r=await n.persistence.getNamespaceVersion(n.originalNamespace);if(r===0)n.log("debug","No existing data to copy to WIP namespace");else{let s=i.oldSchemas?.find(o=>o.version===r);if(!s)throw new q(q.Code.MigrationPathNotFound,void 0,`Trying to open WIP database for version ${i.schema.version}, but the current local data is version ${r} and a historical schema for that version is not available.`);n.log("info",`Copying data from ${n.originalNamespace} to ${n.namespace}`),await n.persistence.copyNamespace(n.originalNamespace,n.namespace,{...n,schema:s})}}let e=await i.persistence.openNamespace(n.namespace,n);if(n.log("info","Opening persistence metadata"),n.meta=new Tn(await e.openMetadata(i),i),n.log("info","Opening persistence files"),n.files=new An(await e.openFiles(n),n),n.log("info","Migrating document database"),await co({context:n,version:i.schema.version}),n.log("info","Opening persistence documents"),n.documents=new kn(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 uo(i,n){i.log("info","Importing data from export");let e=i.oldSchemas?.find(a=>a.version===n.data.schemaVersion);if(!e)throw new Error(`Could not find schema for version ${n.data.schemaVersion}`);let t=`@@import_${Date.now()}`,r=await Lt({...i,schema:e,namespace:t,originalNamespace:t,entityEvents:new N,internalEvents:new N,globalEvents:new N,config:{...i.config,persistence:{...i.config.persistence,disableRebasing:!0}},persistenceShutdownHandler:new ke(i.log)});await r.meta.resetFrom(n.data);let s=new Set;for(let a of n.data.baselines)s.add(K(a.oid));for(let a of n.data.operations)s.add(K(a.oid));let o=await Promise.all(Array.from(s).map(async a=>{let l=await r.meta.getDocumentSnapshot(a);return{oid:a,getSnapshot:()=>l}}));if(await r.documents.saveEntities(o),await r.files.import(n),i.log("debug","Imported data into temporary namespace",t),await r.persistenceShutdownHandler.shutdown(),e.version!==i.schema.version){let a=i.schema,l=await Lt({...r,persistenceShutdownHandler:new ke(i.log),schema:a});i.log("debug","Upgraded imported data to current schema"),await l.persistenceShutdownHandler.shutdown(),i.log("debug","Shut down upgraded databases")}if(await i.persistenceShutdownHandler.shutdown(),await i.persistence.copyNamespace(t,i.namespace,i),await Lt(i),n.data.schemaVersion===i.schema.version){let a=await i.meta.stats();if(a.operationsSize.count!==n.data.operations.length)throw i.log("critical","Imported operations count mismatch","expected",n.data.operations.length,"actual",a.operationsSize.count),new q(q.Code.ImportFailed,void 0,"Imported operations count mismatch");if(a.baselinesSize.count!==n.data.baselines.length)throw i.log("critical","Imported documents count mismatch","expected",n.data.baselines.length,"actual",a.baselinesSize.count),new q(q.Code.ImportFailed,void 0,"Imported documents count mismatch")}i.log("debug","Data copied to primary namespace"),await i.persistence.deleteNamespace(t,i),i.log("debug","Deleted temporary namespace"),i.internalEvents.emit("persistenceReset"),i.log("info","Data imported successfully"),i.persistenceShutdownHandler.reset()}function Ga(i){return i!==null}function Gi(i){return Array.isArray(i)?i.map(Gi).filter(Ga):i instanceof me&&i.deleted?null:i}function ze(i,n){return!i&&!n||i&&n&&qe(i)===qe(n)}var Yi=Symbol("ON_ALL_UNSUBSCRIBED"),ge=Symbol("UPDATE"),Ya,xe=class extends oe{constructor({initial:e,context:t,collection:r,key:s,shouldUpdate:o}){super();this._internalUnsubscribes=[];this._status="initial";this._executionPromise=null;this.setValue=e=>{this._rawValue=e,this.subscribeToDeleteAndRestore(this._rawValue);let t=Gi(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 me&&(this._internalUnsubscribes.push(t.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(t.subscribe("restore",this.refreshValue)))}):e instanceof me&&(this._internalUnsubscribes.push(e.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(e.subscribe("restore",()=>{this.refreshValue()})))};this.execute=()=>{let e=new Date;return this.context.log("debug",`[${e.toLocaleTimeString()}]`,"Executing query",this.key),this.status==="initial"?this.status="initializing":this.status==="ready"&&(this.status="revalidating"),this._executionPromise=this.run().then(()=>this._value).catch(t=>{if(t instanceof Error){if(t.name==="InvalidStateError"||t.name==="InvalidAccessError")return this._value;throw t}else throw new Error("Unknown error executing query")}).finally(()=>{let t=new Date,r=t.getTime()-e.getTime();this.context.log("debug",`[${t.toLocaleTimeString()}]`,"Query executed",this.key,`Duration: ${r}ms`)}),this._executionPromise};this[Ya]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this.isListQuery=Array.isArray(e),this._events=new N(l=>{l==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=t,this.key=s,this.collection=r;let a=o||(l=>l.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",l=>{a(l)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{Ya=Yi}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 xe{constructor({id:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.hydrate(this.oid);this.setValue(e)};this.oid=ee(r.collection,e),this.hydrate=t}};var Xa,Ln=class extends xe{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[Xa]=e=>{ze(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{Xa=ge}};var Za,jn=class extends xe{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[Za]=e=>{ze(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t,this._pageSize=r,this._page=s}static{Za=ge}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var ec,Mn=class extends xe{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[ec]=e=>{ze(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=t}static{ec=ge}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var tc,Vn=class extends xe{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[tc]=e=>{ze(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{tc=ge}};var Un=class{constructor({collection:n,cache:e,entities:t,context:r,documentManager:s}){this.serializeIndex=n=>n?qe(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 Ln({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[ge](n)})};this.findAll=({index:n,key:e}={})=>{let t=e||`findAll:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new Vn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[ge](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[ge](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 Mn({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[ge](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 Nn=class extends oe{constructor({evictionTime:e=5*1e3,context:t}){super();this._cache=new Map;this._holds=new Set;this.enqueueQueryEviction=e=>{setTimeout(()=>{if(!e.subscribed){if(this._holds.has(e.key)){this.context.log("debug","QueryCache: keepAlive hold on query preserves after unsubscribe",e.key);return}this._cache.get(e.key)===e&&(this._cache.delete(e.key),this.context.log("debug","QueryCache: evicted query",e.key))}},this._evictionTime)};this.dropAll=()=>{this.context.log("debug","QueryCache: drop all",this._cache.size,"queries"),this._cache.forEach(e=>e.dispose()),this._cache.clear()};this.forceRefreshAll=()=>{this.context.log("debug","QueryCache: force refresh all",this._cache.size,"queries"),this._cache.forEach(e=>e.execute())};this._evictionTime=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("persistenceReset",this.forceRefreshAll))}get activeKeys(){return Array.from(this._cache.keys())}get(e){return this._cache.get(e)||null}set(e){return this._cache.set(e.key,e),e[Yi](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 Xi=Symbol("handleMessage"),nc,jt=class extends N{constructor({initialPresence:e,updateBatchTimeout:t=200,defaultProfile:r,ctx:s}){super();this._peers={};this._self={profile:{}};this._selfReplicaIds=new Set;this._peerIds=new Array;this.isSelf=(e,t)=>e.id===t.replicaId||this._selfReplicaIds.has(t.replicaId)||this._self.id===t.id;this[nc]=async(e,t)=>{let r=!1,s=!1,o=new Set(this.peerIds);if(t.type==="presence-changed")this.isSelf(e,t.userInfo)?(this._self=t.userInfo,this._selfReplicaIds.add(t.userInfo.replicaId),s=!0,this.emit("selfChanged",t.userInfo)):(o.add(t.userInfo.id),this._peers[t.userInfo.id]=t.userInfo,r=!0,this.emit("peerChanged",t.userInfo.id,t.userInfo));else if(t.type==="sync-resp"){this._peers={},o.clear();for(let[a,l]of Object.entries(t.peerPresence))this.isSelf(e,l)?(this._self=l,this._selfReplicaIds.add(l.replicaId),s=!0,this.emit("selfChanged",l)):(r=!0,o.add(a),this._peers[a]=l,this.emit("peerChanged",a,l))}else if(t.type==="presence-offline"){o.delete(t.userId),this._selfReplicaIds.delete(t.replicaId);let a=this._peers[t.userId];delete this._peers[t.userId],r=!0,this.emit("peerLeft",t.userId,a)}r&&(this._peerIds=Array.from(o).sort(),this.emit("peersChanged",this._peers)),(r||s)&&this.emit("change")};this.update=async e=>{this._updateBatch.update({items:[{presence:e}]}),this.self.presence={...this.self.presence,...e},this.emit("selfChanged",this.self),this.emit("change")};this.flushPresenceUpdates=e=>{let t={presence:this.self.presence,internal:this.self.internal};for(let r of e)r.presence&&Object.assign(t.presence,r.presence),r.internal&&Object.assign(t.internal,r.internal);this.emit("update",t)};this.setViewId=e=>{this._updateBatch.update({items:[{internal:{viewId:e}}]}),this.self.internal.viewId=e,this.emit("selfChanged",this.self),this.emit("change")};this.setFieldId=(e,t=Date.now())=>{this._updateBatch.update({items:[{internal:{lastFieldId:e,lastFieldTimestamp:t}}]}),this.self.internal.lastFieldId=e,this.emit("selfChanged",this.self),this.emit("change")};this.getViewPeers=()=>this._peerIds.map(e=>this._peers[e]).filter(e=>this.self.internal.viewId===void 0||e.internal.viewId===this.self.internal.viewId);this.getFieldPeers=(e,t=60*1e3)=>this._peerIds.map(r=>this._peers[r]).filter(r=>r.internal.lastFieldId===e&&Date.now()-r.internal.lastFieldTimestamp<t);this.self.presence=e,this.self.profile=r,this.self.internal=bi,this.self.id="",this.self.replicaId="",s.meta.getLocalReplica().then(o=>{this.self.replicaId=o.id}),this._updateBatcher=new nt(this.flushPresenceUpdates),this._updateBatch=this._updateBatcher.add({max:25,timeout:t,items:[],key:"default"})}static{nc=Xi}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 zn=class extends oe{constructor({endpointProvider:e,ctx:t}){super();this.onFileAdded=async e=>{if(!e.remote){this.ctx.log("debug","Uploading file",e.id,e.name);try{await this.uploadFile(e)}catch(t){this.ctx.log("error","File upload failed",t)}}};this.uploadFile=async(e,t={current:0,max:3})=>{let r=e.file;if(!r)throw new Error("Cannot upload a non-local file");let{files:s,token:o}=await this.endpointProvider.getEndpoints(),a=new FormData;a.append("file",r);try{let l=await this.ctx.environment.fetch(s+`/${e.id}`,{method:"POST",body:a,credentials:"include",headers:{Authorization:`Bearer ${o}`}});if(l.ok)return this.ctx.internalEvents.emit(`fileUploaded:${e.id}`,e),this.ctx.internalEvents.emit("fileUploaded",e),this.ctx.log("info","File upload successful"),{success:!0};{let p=await l.text();return this.ctx.log("error","File upload failed",l.status,p),l.status<500||t.current>=t.max?{success:!1,error:`Failed to upload file: ${l.status} ${p}`}:(await new Promise(h=>setTimeout(h,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}}catch(l){return this.ctx.log("error","File upload failed",l),t.current>=t.max?{success:!1,error:l.message}:(await new Promise(p=>setTimeout(p,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}};this.getFile=async(e,t={current:0,max:3})=>{let{files:r,token:s}=await this.endpointProvider.getEndpoints();try{let o=await this.ctx.environment.fetch(r+`/${e}`,{method:"GET",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}});return o.ok?{success:!0,data:await o.json()}:(this.ctx.log("error","File information fetch failed",r+`/${e}`,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",`${r}/${e}`,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 pt=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.nextBeat=null),this.deadline&&(clearTimeout(this.deadline),this.deadline=null)};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 $n=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",t,s.status),this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1));let o=await s.json();mr(o)&&(o.code===vt.TokenExpired?(this.endpointProvider.clearCache(),this.heartbeat.keepAlive()):this.ctx.log("error","Server error",o)),s.status>=500&&this.heartbeat.keepAlive()}}catch(t){this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1)),this.ctx.log("error",t),this.heartbeat.keepAlive()}};this.handleServerMessage=async e=>{e.type==="sync-resp"&&(this._hasSynced=!0,e.ackThisNonce&&(this.ctx.log("debug","Sending sync ack",e.ackThisNonce),await this.sendRequest([await this.ctx.meta.messageCreator.createAck(e.ackThisNonce)]))),this.emit("message",e)};this.throttledPresenceUpdate=_r(e=>{this.sendRequest([e])},3e3);this.send=e=>{if(this.status!=="active"){this.ctx.log("warn","Attempted to send message while sync is not active",e);return}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"&&(this.ctx.log("debug","Starting push-pull sync"),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 pt({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.ctx.log("debug","Stopping push-pull sync"),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 Zi(i){this.message=i}Zi.prototype=new Error,Zi.prototype.name="InvalidCharacterError";var fo=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(i){var n=String(i).replace(/=+$/,"");if(n.length%4==1)throw new Zi("'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 ic(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(fo(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 fo(n)}}function Kn(i){this.message=i}function rc(i,n){if(typeof i!="string")throw new Kn("Invalid token specified");var e=(n=n||{}).header===!0?0:1;try{return JSON.parse(ic(i.split(".")[e]))}catch(t){throw new Kn("Invalid token specified: "+t.message)}}Kn.prototype=new Error,Kn.prototype.name="InvalidTokenError";var ho=rc;var qn=class{constructor(n,e){this.config=n;this.ctx=e;this.cached=null;this.tokenInfo=null;this.getEndpoints=async()=>{if(this.cached)return this.cached;let n;if(this.config.fetchAuth)n=await this.config.fetchAuth();else{let a=this.ctx.environment.fetch;n=await a(this.config.authEndpoint,{credentials:"include"}).then(l=>{if(l.ok)return l.json();throw new Error(`Auth endpoint returned non-200 response: ${l.status}`)})}L(n.accessToken,"No access token provided from auth endpoint");let e=ho(n.accessToken);L(e.url,"No sync endpoint provided from auth endpoint"),L(e.type!==void 0,"No replica type provided from auth endpoint"),this.tokenInfo={userId:e.sub,libraryId:e.lib,url:e.url,fileUrl:e.file,role:e.role,type:parseInt(e.type+"")};let t=new URL(e.url);t.protocol=t.protocol.replace("ws","http");let r=t.toString();t.protocol=t.protocol.replace("http","ws");let s=t.toString(),o=e.file;if(!o){let a=new URL(r);a.pathname=a.pathname+"/files",o=a.toString()}return this.cached={http:r,websocket:s,files:o,token:n.accessToken},this.cached};this.clearCache=()=>{this.cached=null};if(!n.authEndpoint&&!n.fetchAuth)throw new Error("Either authEndpoint or fetchAuth must be provided to ServerSyncEndpointProvider")}get type(){return this.tokenInfo?.type??Ue.Realtime}};var Hn=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,t){this.current=0;this.next=()=>{this.current=Math.min(this.max,Math.max(1,this.current)*this.factor)};this.reset=()=>{this.current=0};this.current=n,this.max=e,this.factor=t}};var Jn=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 pt;this.reconnectScheduler=new Hn(new Qn(2e3,6e4,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.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.reconnectScheduler.reset(),this._ignoreIncoming){this.ctx.log("warn","Ignoring incoming message (ignore incoming flag set)",e.data);return}let t=JSON.parse(e.data);switch(this.ctx.log("debug","Received",t.type,"message"),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","Sync socket error",e),!this.disposed&&(this.reconnectScheduler.next(),this.ctx.log("info","Attempting reconnect to websocket sync"))};this.onClose=e=>{this.ctx.log("info","Sync socket disconnected"),this.onOnlineChange(!1),!this.disposed&&(this.reconnectScheduler.next(),this.ctx.log("info","Attempting reconnect to websocket sync"))};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===Wn?(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===Wn&&(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?.readyState===Wn&&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===Wn}get status(){return this._status}},Wn=1;async function po(){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 Gn=class extends N{constructor(e){super();this.mode="pull";this.hasSynced=!1;this.destroy=()=>{};this.isConnected=!1;this.status="paused";this.pullInterval=0;this.uploadFile=async()=>({success:!1,retry:!1});this.getFile=async()=>({success:!1,error:"Sync is not active"});this.syncOnce=async()=>{};this.presence=new jt({initialPresence:null,defaultProfile:null,ctx:e})}send(){}async start(){}stop(){}ignoreIncoming(){}reconnect(){}setMode(){}setPullInterval(){}},mt=class extends N{constructor({authEndpoint:e,fetchAuth:t,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:a,pullInterval:l,presenceUpdateBatchTimeout:p,defaultProfile:h,useBroadcastChannel:O,onOutgoingMessage:v,EXPERIMENTAL_backgroundSync:P},{ctx:y,onData:I}){super();this.broadcastChannel=null;this._activelySyncing=!1;this._hasSynced=!1;this.handleBroadcastChannelMessage=e=>{e.data.type==="sync"&&this.handleMessage(e.data.message,{source:"broadcastChannel"})};this.handleMessage=async(e,{source:t}={source:"network"})=>{if(!this.ctx.closing){if(e.type==="op-re"||e.type==="sync-resp")for(let r of e.operations)this.ctx.time.update(r.timestamp);switch(this.ctx.log("debug","sync message",JSON.stringify(e,null,2)),e.type){case"op-re":await this.onData({operations:e.operations,baselines:e.baselines}),e.globalAckTimestamp&&await this.ctx.meta.setGlobalAck(e.globalAckTimestamp);break;case"global-ack":await this.ctx.meta.setGlobalAck(e.timestamp);break;case"sync-resp":this._activelySyncing=!0,this.emit("syncingChange",!0),await this.onData({operations:e.operations,baselines:e.baselines,reset:e.overwriteLocalData}),e.globalAckTimestamp&&await this.ctx.meta.setGlobalAck(e.globalAckTimestamp),await this.ctx.meta.updateLastSynced(e.ackedTimestamp),this._activelySyncing=!1,this.emit("syncingChange",!1),this._hasSynced=!0,this.emit("synced");break;case"need-since":this.emit("serverReset",e.since),this.ctx.files.onServerReset(e.since),this.activeSync.send(await this.ctx.meta.messageCreator.createSyncStep1(e.since));break;case"server-ack":await this.ctx.meta.updateLastSynced(e.timestamp)}t==="network"&&this.broadcastChannel?.postMessage({type:"sync",message:e}),this.presence[Xi](await this.ctx.meta.getLocalReplica(),e)}};this.handleOnlineChange=async e=>{if(this.emit("onlineChange",e),e){let t=await this.ctx.files.listUnsynced(),r=await Promise.allSettled(t.map(s=>this.fileSync.uploadFile(s)));r.some(s=>s.status==="rejected")&&this.ctx.log("error","Failed to upload unsynced files",r.filter(s=>s.status==="rejected").map(s=>s.reason))}};this.handlePresenceUpdate=async e=>{this.send(await this.ctx.meta.messageCreator.createPresenceUpdate(e))};this.setMode=e=>{if(e==="realtime"&&!this.canDoRealtime)throw new Error("Cannot switch to realtime mode, because the current auth token does not allow it");let t;e==="realtime"?t=this.webSocketSync:t=this.pushPullSync,t!==this.activeSync&&(this.ctx.log("debug","switching to",e,"mode"),this.activeSync.status==="active"&&t.start(),this.activeSync.stop(),this.activeSync=t)};this.setPullInterval=e=>{this.pushPullSync.setInterval(e)};this.send=async e=>{if(this.activeSync.status==="active"){let t=this.endpointProvider.tokenInfo?.userId;if(!t)throw new q(q.Code.Unexpected,void 0,"Active sync has invalid token info");(e.type==="sync"||e.type==="op")&&pr(e,t),await this.activeSync.send(e),this.onOutgoingMessage?.(e)}};this.uploadFile=async e=>(this.ctx.log("info","Uploading file",{name:e.name,type:e.type,id:e.id,size:e.file?.size}),this.activeSync.status==="active"?this.fileSync.uploadFile(e):{success:!1,retry:!1,error:"Sync is not active"});this.getFile=async e=>{if(this.activeSync.status==="active")return this.fileSync.getFile(e);if(await this.getSyncStartPromise(),this.activeSync.status==="paused")throw new q(q.Code.Offline,void 0,"Sync is not active");return this.fileSync.getFile(e)};this.getSyncStartPromise=(e=5e3)=>new Promise((t,r)=>{let s=setTimeout(()=>{r(new Error("Sync did not start in time")),o()},e),o=this.subscribe("onlineChange",a=>{a&&(clearTimeout(s),o(),t())})});this.start=()=>this.activeSync.start();this.stop=()=>this.activeSync.stop();this.destroy=()=>{this.dispose(),this.webSocketSync.destroy(),this.pushPullSync.destroy()};this.reconnect=()=>this.activeSync.reconnect();this.syncOnce=()=>this.pushPullSync.syncOnce();if(this.onData=I,this.ctx=y,this.onOutgoingMessage=v,this.presence=new jt({initialPresence:r,defaultProfile:h,updateBatchTimeout:p,ctx:y}),this.endpointProvider=new qn({authEndpoint:e,fetchAuth:t},y),this.webSocketSync=new Jn({endpointProvider:this.endpointProvider,presence:this.presence,ctx:y}),this.pushPullSync=new $n({endpointProvider:this.endpointProvider,presence:this.presence,interval:l,ctx:y}),this.fileSync=new zn({endpointProvider:this.endpointProvider,ctx:y}),O&&"BroadcastChannel"in window&&(this.broadcastChannel=new BroadcastChannel(`verdant-${y.namespace}`),this.broadcastChannel.addEventListener("message",this.handleBroadcastChannelMessage)),a==="realtime"?this.activeSync=this.webSocketSync:this.activeSync=this.pushPullSync,this.presence.subscribe("update",this.handlePresenceUpdate),y.meta.events.subscribe("syncMessage",this.send),this.webSocketSync.subscribe("message",this.handleMessage),this.webSocketSync.subscribe("onlineChange",this.handleOnlineChange),this.pushPullSync.subscribe("message",this.handleMessage),this.pushPullSync.subscribe("onlineChange",this.handleOnlineChange),s&&this.canDoRealtime){let _=()=>{E&&clearTimeout(E);let k=this.presence.getViewPeers().length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;k&&this.mode==="pull"?this.setMode("realtime"):!k&&this.mode==="realtime"&&(E=setTimeout(()=>{this.presence.getViewPeers().length===0&&this.setMode("pull")},1e3))},E;this.presence.subscribe("peersChanged",_),s!=="peers-only"&&this.presence.subscribe("selfChanged",_)}o&&this.start(),P&&po()}get canDoRealtime(){return this.endpointProvider.type===Ue.Realtime||this.endpointProvider.type===Ue.PassiveRealtime||this.endpointProvider.type===Ue.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 mo(i){return i.operations.map(t=>t.timestamp).concat(i.baselines?.map(t=>t.timestamp)??[]).reduce((t,r)=>{let s=dn(r);return s>t?s:t},1)}var gt=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?mo(e):this.schema.version;return t<this.schema.version?(this.context.log("warn","Incoming reset sync data is from an old schema version",t,`(current ${this.schema.version})`),await this.import({data:{operations:e.operations,baselines:e.baselines??[],localReplica:void 0,schemaVersion:t},fileData:[],files:[]})):await this._entities.addData(e)}catch(t){throw this.context.log("critical","Sync failed. To avoid data corruption, the client will now shut down.",t),this.emit("developerError",new q(q.Code.Unexpected,t,"Sync failed. To avoid data corruption, the client will now shut down.")),await this.close(),t}};this.stats=async()=>{if(this.disposed)return{};let e=await this.context.documents.stats(),t=await this.context.meta.stats(),r=typeof navigator<"u"&&typeof navigator.storage<"u"&&"estimate"in navigator.storage?await navigator.storage.estimate():void 0,s=await this.context.files.stats(),o=Object.values(e).reduce((p,{size:h})=>p+h,0),a=t.baselinesSize.size+t.operationsSize.size,l=a/o;return{collections:e,meta:t,storage:r,totalMetaSize:a,totalCollectionsSize:o,metaToDataRatio:l,files:s,quotaUsage:r?.usage&&r?.quota?r.usage/r.quota:void 0}};this.close=async()=>{this.sync.ignoreIncoming(),await this._entities.flushAllBatches(),this.context.closing=!0,this.context.closeLock&&await this.context.closeLock,this.sync.stop(),this.sync.destroy(),await this._entities.destroy(),this.context.persistenceShutdownHandler.shutdown(),this.context.internalEvents.disable(),this.context.entityEvents.disable(),await new Promise(e=>{e()}),this.context.log?.("info","Client closed")};this.__dangerous__resetLocal=async()=>{this.sync.stop(),await Cn(this.namespace,this.context.environment)};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 uo(this.context,{data:e,files:r,fileData:t}),s()};this.__dangerous__hardReset=async()=>{let e=await this.export();await this.import(e)};this.__cleanupFilesImmediately=()=>this.context.files.cleanupDeletedFiles();this.__manualRebase=()=>(this.context.meta.manualRebase(),new Promise(e=>{let t=this.subscribe("rebase",()=>{t(),e()})}));e.getClient=()=>this,this.collectionNames=Object.keys(e.schema.collections),this._sync=this.context.config.sync&&!e.schema.wip?new mt(this.context.config.sync,{onData:this.addData,ctx:this.context}):new Gn(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 Dn({sync:this.sync,context:this.context}),this._entities=new _n({ctx:this.context,files:this._fileManager}),this._queryCache=new Nn({context:e,evictionTime:e.config.queries?.evictionTime}),this._documentManager=new fn(this.schema,this._entities);let t=Er(()=>{this.emit("futureSeen")},300);this.context.globalEvents.subscribe("futureSeen",t),this.context.globalEvents.subscribe("resetToServer",()=>{this.emit("resetToServer")}),this.context.globalEvents.subscribe("operation",r=>{this.emit("operation",r)}),this.context.globalEvents.subscribe("rebase",()=>{this.emit("rebase")}),this.context.globalEvents.subscribe("fileSaved",r=>{this.emit("fileSaved",r)});for(let[r,s]of Object.entries(e.schema.collections)){let o=r;this[o]=new 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}async getReplicaId(){return(await this.context.meta.getLocalReplica()).id}get batch(){return this.entities.batch}get __persistence(){return{meta:this.context.meta,queries:this.context.documents,files:this.context.files}}};var Yn=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 Xn=class{constructor(n){this.value=n}deref(){return this.value}};var Zn=()=>{},go=i=>(n,...e)=>{n==="critical"&&e.unshift("[CRITICAL]"),i&&e.unshift(`[${i}]`),n==="critical"?console.error(...e):console[n](...e)};function er(i){return localStorage.getItem("DEBUG")?go(i):Zn}var $e=class extends oe{constructor(e,t){super();this.db=e;this.ctx=t;this.createTransaction=(e,t)=>{try{if(this.globalAbortController.signal.aborted)throw new Error("Global abort signal is already aborted");let r=to(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 s=r?.transaction||this.createTransaction([e],r);if(ft(s))return Promise.resolve(void 0);let o=s.objectStore(e),a=t(o);return ut(a)};this.runAll=async(e,t,r)=>{if(this.disposed||r?.transaction?.error)return Promise.resolve([]);if(r?.transaction&&ft(r.transaction))return Promise.resolve([]);let o=(r?.transaction||this.createTransaction([e],r)).objectStore(e),a=t(o);return Promise.all(a.map(ut))};this.iterate=async(e,t,r,s)=>{let o=s?.transaction||this.createTransaction([e],s);if(ft(o))return;let a=o.objectStore(e),l=t(a);return Array.isArray(l)?Promise.all(l.map(p=>new Promise((h,O)=>{p.onsuccess=()=>{let v=p.result;v?r(v.value,a,v)?h():v.continue():h()},p.onerror=()=>{p.error&&Xe(p.error)?h():O(p.error)}}))).then(()=>{}):new Promise((p,h)=>{l.onsuccess=()=>{let O=l.result;O?r(O.value,a,O)?p():O.continue():p()},l.onerror=()=>{l.error&&Xe(l.error)?p():h(l.error)}})};this.clear=(e,t)=>this.run(e,r=>r.clear(),{mode:"readwrite",transaction:t});this.onVersionChange=e=>{if(this.log?.("warn",`Another tab has requested a version change for ${this.db.name}`),this.db.close(),typeof window<"u")try{this.ctx.environment.location.reload()}catch(t){this.log?.("error","Failed to reload the page",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 ei=class extends $e{constructor(){super(...arguments);this.add=async e=>{let t=e.file?await oc(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){this.ctx.log("error","Tried to mark unknown file as uploaded",e);return}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 Wi(this.db,["files"]);return t.map(this.hydrateFileData)};this.stats=async()=>({size:await Ze(this.db,"files")});this.loadFileContents=async(e,t)=>{if(e.file)return e.file;if(e.localPath)throw new Error("Local file paths are not supported in browser");if(e.url){let r=await t.environment.fetch(e.url);if(!r.ok)throw new Error(`Failed to download file ${e.url}: ${r.statusText}`);return r.blob()}throw new Error("File is missing url, file, and localPath")};this.hydrateFileData=e=>{e.remote=e.remote==="true";let t=e.buffer;return delete e.buffer,e.file=t?sc(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 sc(i,n,e){return new File([new Blob([i],{type:n})],e??"blob",{type:n})}function oc(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 ti=class extends $e{constructor(e,t){super(e,t);this.transaction=async(e,t)=>{let r=this.createTransaction(e.storeNames,{mode:e.mode,abort:e.abort});return await t(r)};this.getAckInfo=async()=>{let e=await this.run("info",t=>t.get("ack"));return e||{globalAckTimestamp:null}};this.setGlobalAck=async e=>{await this.run("info",t=>t.put({type:"ack",globalAckTimestamp:e}),{mode:"readwrite"})};this.getLocalReplica=async e=>this.run("info",t=>t.get("localReplicaInfo"),e);this.updateLocalReplica=async(e,t)=>{try{await this.run("info",r=>r.put({...e,type:"localReplicaInfo"}),{mode:"readwrite",transaction:t?.transaction})}catch(r){throw this.ctx.log("critical","Error updating local replica",e,r),r}};this.iterateDocumentBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>{let o=K(e),[a,l]=Mr(e),[p,h]=Vr(e);return[s.openCursor(IDBKeyRange.only(o)),s.openCursor(IDBKeyRange.bound(a,l,!1,!1)),s.openCursor(IDBKeyRange.bound(p,h,!1,!1))]},t,r)};this.iterateCollectionBaselines=async(e,t,r)=>{await this.iterate("baselines",s=>[s.openCursor(IDBKeyRange.bound(e,e+"\uFFFF",!1,!1))],t,r)};this.iterateAllBaselines=async(e,t)=>{await this.iterate("baselines",r=>r.index("timestamp").openCursor(),e,t)};this.getBaseline=(e,t)=>this.run("baselines",r=>r.get(e),t);this.setBaselines=async(e,t=tr)=>{await this.runAll("baselines",r=>e.map(s=>r.put(s)),t)};this.deleteBaseline=async(e,t=tr)=>{await this.run("baselines",r=>r.delete(e),t)};this.iterateDocumentOperations=(e,t,r)=>this.iterate("operations",s=>{let o=s.index("d_t"),a=Ee(e),l=r?.to?ye(e,r.to):Re(e),p=IDBKeyRange.bound(a,l,!1,!1);return o.openCursor(p)},t,r);this.iterateEntityOperations=(e,t,r)=>this.iterate("operations",s=>{let o=Ee(e),a=r?.to?ye(e,r.to):Re(e),l=IDBKeyRange.bound(o,a,!1,!1);return s.openCursor(l)},t,r);this.deleteEntityOperations=(e,t)=>this.iterate("operations",r=>{let s=Ee(e),o=t?.to?ye(e,t.to):Re(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?ye(!0,t.after):Ee(!0),o=Re(!0);return r.index("l_t").openCursor(IDBKeyRange.bound(s,o,!!t?.after,!1),"next")},e);this.iterateAllOperations=(e,t)=>this.iterate("operations",r=>{let s=t?.from?Ee(t.from):void 0,o=t?.before?Re(t.before):Ee(!0),a=s&&o?IDBKeyRange.bound(s,o,!1,!0):s?IDBKeyRange.lowerBound(s,!1):o?IDBKeyRange.upperBound(o,!0):void 0;return r.index("timestamp").openCursor(a,"next")},e,t);this.addOperations=async(e,t=tr)=>{let r=new Set;return await this.runAll("operations",s=>e.map(o=>(r.add(K(o.oid)),s.put(this.addOperationIndexes(o)))),t),Array.from(r)};this.reset=async({clearReplica:e,transaction:t}={})=>{let r=t||this.createTransaction(["info","operations","baselines"],{mode:"readwrite"});await Promise.all([this.resetLocalReplica(r,e),this.resetBaselines(r),this.resetOperations(r)])};this.stats=async()=>{let e=await Ze(this.db,"operations"),t=await Ze(this.db,"baselines");return{operationsSize:e,baselinesSize:t}};this.resetLocalReplica=async(e,t=!1)=>{if(t)return this.run("info",r=>r.delete("localReplicaInfo"),{mode:"readwrite",transaction:e});{let r=await this.getLocalReplica({transaction:e});r&&(r.ackedLogicalTime=null,r.lastSyncedLogicalTime=null,await this.run("info",s=>s.put({...r,type:"localReplicaInfo"}),{mode:"readwrite",transaction:e}))}};this.resetBaselines=async e=>this.clear("baselines",e);this.resetOperations=async e=>this.clear("operations",e);this.addOperationIndexes=e=>({...e,oid_timestamp:ye(e.oid,e.timestamp),l_t:ye(e.isLocal,e.timestamp),d_t:ye(K(e.oid),e.timestamp)});this.addDispose(()=>(this.ctx.log("info","Closing metadata DB for",this.ctx.namespace),we(e)))}},tr={mode:"readwrite"};var yo=[cc,lc,dc,uc,fc,hc],ac=yo.length;function nr({indexedDB:i=window.indexedDB,namespace:n,log:e}){return new Promise((t,r)=>{let s=i.open(Bt(n),ac),o=!1;s.onupgradeneeded=async a=>{let l=s.result,p=s.transaction,h=yo.slice(a.oldVersion);for(let O of h)await O(l,p);await new Promise((O,v)=>{p.addEventListener("complete",O),p.addEventListener("error",v)}),a.oldVersion||(o=!0)},s.onerror=()=>{console.error("Error opening database",s.error),r(s.error)},s.onsuccess=()=>{t({db:s.result,wasInitialized:o})}})}async function cc(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 lc(i,n){let e=n.objectStore("operations");await new Promise((t,r)=>{let s=e.openCursor();s.onsuccess=()=>{let o=s.result;if(o){let{isLocal_timestamp:a,documentOid_timestamp:l,...p}=o.value;o.update({...p,l_t:a,d_t:l}),o.continue()}else t()},s.onerror=o=>{r(s.error)}}),e.deleteIndex("isLocal_timestamp"),e.deleteIndex("documentOid_timestamp"),e.createIndex("l_t","l_t",{unique:!1}),e.createIndex("o_t","o_t",{unique:!1}),e.createIndex("d_t","d_t",{unique:!1})}async function dc(i,n){n.objectStore("operations").createIndex("timestamp","timestamp")}async function uc(i,n){let e=i.createObjectStore("files",{keyPath:"id"});e.createIndex("remote","remote"),e.createIndex("deletedAt","deletedAt")}async function fc(i,n){let e=n.objectStore("operations");await new Promise((r,s)=>{let o=e.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let l=hi(a.value);l.oid_timestamp!==a.primaryKey?(a.delete(),e.put(l)):a.update(l),a.continue()}else r()},o.onerror=a=>{s(o.error)}});let t=n.objectStore("baselines");await new Promise((r,s)=>{let o=t.openCursor();o.onsuccess=()=>{let a=o.result;if(a){let l=hi(a.value);l.oid!==a.primaryKey?(a.delete(),t.put(l)):a.update(l),a.continue()}else r()},o.onerror=a=>{s(o.error)}})}async function hc(i,n){n.objectStore("files").createIndex("timestamp","timestamp")}var pc=i=>IDBKeyRange.only(Ie(i.equals)),mc=i=>{},gc=i=>{let n=i.gte||i.gt,e=i.lte||i.lt;return n===e?IDBKeyRange.only(Ie(n)):n?e?IDBKeyRange.bound(Ie(n),Ie(e),!!i.gt,!!i.lt):IDBKeyRange.lowerBound(Ie(n),!!i.gt):IDBKeyRange.upperBound(Ie(e),!!i.lt)},yc=(i,n,e)=>{let t=i.collections[n].compounds[e.where];L(t,`Index ${e.where} does not exist on collection ${n}`);let r=Object.keys(e.match).sort((l,p)=>t.of.indexOf(l)-t.of.indexOf(p));for(let l of r)if(t.of.indexOf(l)!==r.indexOf(l))throw new Error(`Compound index ${e.where} does not have ${l} at the start of its order`);let s=r.map(l=>e.match[l]);if(r.length===t.of.length)return IDBKeyRange.only(ye(...s));let o=Ee(...s),a=Re(...s);return IDBKeyRange.bound(o,a)};function bc(i){let n=i.startsWith,e=i.startsWith+"\uFFFF";return IDBKeyRange.bound(n,e)}function ir(i,n,e){if(e)return nn(e)?gc(e):tn(e)?pc(e):Ii(e)?mc(e):rn(e)?bc(e):yc(i,n,e)}var ni=class extends $e{constructor(e,t){super(e,t);this.close=async()=>{await this.dispose()};this.stats=async()=>{let e=Object.keys(this.ctx.schema.collections),t={};return await Promise.all(e.map(async r=>{let s=await Ze(this.db,r);t[r]=s})),t};this.findOneOid=async e=>{let t=await this.run(e.collection,r=>{let s=e.index?.where?r.index(e.index.where):r,o=e.index?.order==="desc"?"prev":"next",a=ir(this.ctx.schema,e.collection,e.index);return s.openCursor(a,o)},{mode:"readonly"});return t?ee(e.collection,t.primaryKey.toString()):null};this.findAllOids=async({collection:e,index:t,offset:r,limit:s})=>{let o=this.createTransaction([e],{mode:"readonly"});if(ft(o))return{result:[],hasNextPage:!1};let a=o.objectStore(e),l=t?.where?a.index(t.where):a,p=t?.order==="desc"?"prev":"next",h=ir(this.ctx.schema,e,t),O=l.openCursor(h,p),v=!1;return{result:await new Promise((y,I)=>{let _=!r,E=0,D=new Set;O.onsuccess=()=>{E++;let k=O.result;if(!k){y(Array.from(D));return}r&&!_?(k.advance(r),_=!0):((!s||D.size<s)&&D.add(ee(e,k.primaryKey.toString())),s&&E>s?(v=!0,y(Array.from(D))):k.continue())},O.onerror=()=>{O.error?.name==="InvalidStateError"?(this.ctx.log("error","find query failed with InvalidStateError",O.error),y([])):O.error&&Xe(O.error)?y([]):I(O.error)}}),hasNextPage:v}};this.saveEntities=async(e,t)=>{let r={transaction:this.createTransaction(t.collections,{mode:"readwrite",abort:t.abort})},s=await Promise.allSettled(e.map(async a=>{let l=a.getSnapshot();try{await this.saveDocument(a.oid,l,r)}catch(p){throw this.ctx.log("error",`Error saving document ${a.oid} (${JSON.stringify(l)})`,p),p instanceof Error?p:new Error("Unknown error saving document")}})),o=s.filter(a=>a.status==="rejected");if(o.length){if(o.length===s.length)throw new Error("Failed to save any documents. Something must be quite wrong.");this.ctx.log("error","Failed to save documents:",o,". See logs above. This only affects querying these documents. Let's hope a future attempt will correct them...")}r.transaction.commit()};this.reset=async()=>{let e=Object.keys(this.ctx.schema.collections),t=this.createTransaction(e,{mode:"readwrite"});await Promise.all(e.map(r=>this.run(r,s=>s.clear(),{transaction:t}))),this.ctx.entityEvents.emit("collectionsChanged",e),this.ctx.log("info","\u{1F4A8} Reset queryable storage")};this.saveDocument=async(e,t,{transaction:r})=>{this.ctx.log("debug",`Saving document indexes for querying ${e}`);let{collection:s,id:o}=ue(e);try{if(!t)await this.run(s,a=>a.delete(o),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Deleted document indexes for querying ${e}`);else{let a=this.ctx.schema.collections[s],l=mi(a,t);l["@@@snapshot"]=JSON.stringify(t),await this.run(s,p=>p.put(l),{mode:"readwrite",transaction:r}),this.ctx.log("debug",`Save complete for ${e}`,l)}}catch(a){throw this.ctx.log("error",`Error saving document ${e}`,a),a}};this.addDispose(()=>(this.ctx.log("info","Closing document database for",this.ctx.namespace),we(this.db)))}};async function bo(i,n,e,t,r){r?.("debug","Upgrading database",n,"to version",e);function s(o,a){let l=i.open(ht(n),e),p=!1;l.onupgradeneeded=h=>{let O=l.transaction;t(O,l.result,h),p=!0},l.onsuccess=async h=>{p?(await we(l.result),o(l.result)):a(new Error("Database was not upgraded when a version change was expected"))},l.onerror=h=>{a(l.error||new Error("Unknown error"))},l.onblocked=h=>{r?.("Database upgrade blocked!")}}return new Promise(s)}async function rr({indexedDB:i=eo,namespace:n,version:e,log:t}){t?.("debug","Opening database",n,"at version",e);let r=await no(ht(n),e,i);return r.addEventListener("versionchange",s=>{r.close()}),r.addEventListener("close",()=>{t?.("warn","Database closed",n)}),r}var yt=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(io).filter(e=>!!e)))};this.getNamespaceVersion=async n=>{let e=ht(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([Pn(Bt(n),this.indexedDB),Pn([n,"collections"].join("_"),this.indexedDB)])};this.openNamespace=async n=>new sr(this.indexedDB,n);this.copyNamespace=async(n,e,t)=>{let r={...t,namespace:n},s={...t,namespace:e},{db:o}=await nr({indexedDB:this.indexedDB,log:r.log,namespace:r.namespace}),a=await rr({indexedDB:this.indexedDB,namespace:r.namespace,version:r.schema.version,log:r.log});r.log("info",`Copying data from ${r.namespace} to ${s.namespace}`),await Ji(o,Bt(s.namespace),s,this.indexedDB),await Ji(a,ht(s.namespace),s,this.indexedDB),await we(o),await we(a)}}},sr=class{constructor(n,e){this.indexedDB=n;this.namespace=e;this.openMetadata=async n=>{let{db:e}=await nr({indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return this.metadataDb=e,n.persistenceShutdownHandler.register(()=>we(e)),new ti(e,n)};this.openDocuments=async n=>{let e=await rr({version:n.schema.version,indexedDB:this.indexedDB,log:n.log,namespace:this.namespace});return n.persistenceShutdownHandler.register(()=>we(e)),new ni(e,n)};this.applyMigration=async(n,e)=>{n.log("debug","Applying migration",e.newSchema.version,e),await bo(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 ei(this.metadataDb,n))}};var bt=class extends N{constructor(){super(...arguments);this._undoable=[];this._undone=[];this.undo=async()=>{let e=this._undoable.pop();if(e){let t=await e();return t&&this._undone.push(t),this.emit("change"),!0}return!1};this.redo=async()=>{let e=this._undone.pop();if(e){let t=await e();return t&&this._undoable.push(t),this.emit("change"),!0}return!1};this.addUndo=e=>{this._undoable.push(e),this._undone=[],this.emit("change")};this.addRedo=e=>{this._undone.push(e),this.emit("change")};this.clear=()=>{this._undoable=[],this._undone=[],this.emit("change")}}get canUndo(){return this._undoable.length>0}get canRedo(){return this._undone.length>0}get undoLength(){return this._undoable.length}get redoLength(){return this._undone.length}};var ii=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 Yn(new on,n.schema.version),t=n.log===!1?Zn:n.log||er("\u{1F33F}"),r={...vo,...n.environment},s={closing:!1,entityEvents:new N,globalEvents:new N,internalEvents:new N,log:t,migrations:n.migrations,namespace:n.namespace,originalNamespace:n.namespace,schema:n.schema,oldSchemas:n.oldSchemas,time:e,undoHistory:n.undoHistory||new bt,weakRef:l=>n.EXPERIMENTAL_weakRefs?new WeakRef(l):new Xn(l),patchCreator:new Ve(()=>e.now),config:{files:n.files,sync:n.sync,persistence:{disableRebasing:n.disableRebasing,rebaseTimeout:n.rebaseTimeout},queries:n.queries},persistence:n.persistence||new yt(r.indexedDB),environment:r,persistenceShutdownHandler:new ke(t),pauseRebasing:!1,getClient(){throw new q(q.Code.Unexpected,void 0,"Client not yet initialized. This is a Verdant bug, please report it.")}};s.log("info","Initializing client",{namespace:s.namespace,version:n.schema.version,persistence:s.persistence.name});let o=await Lt(s),a=new gt(o);return this.resolveReady(a),this._resolvedValue=a,a}catch(e){throw e instanceof Error?(this.rejectReady(e),e):new Error("Unknown error initializing storage")}finally{this._initializing=!1}};this.open=()=>this.initialize(this.init);this.close=async()=>{this._resolvedValue&&this._resolvedValue.close(),this._initializing&&(await this._readyPromise).close()};this.__dangerous__resetLocal=async()=>{await Cn(this.namespace,vo)};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}},vo={WebSocket:typeof WebSocket<"u"?WebSocket:void 0,fetch:typeof window<"u"?window.fetch.bind(window):fetch,indexedDB:typeof indexedDB<"u"?indexedDB:void 0,location:typeof window<"u"?window.location:void 0,history:typeof window<"u"?window.history:void 0};var vc={private:Ke.onlyMe(),public:void 0};function wc(i,{port:n=3242,initialPresence:e={}}={}){let t=localStorage.getItem("verdant-userId");return t||(t=`user-${Math.random().toString(36).slice(2)}`,localStorage.setItem("verdant-userId",t)),{defaultProfile:{id:t},initialPresence:e,authEndpoint:`http://localhost:${n}/auth/${i}?userId=${t}`}}var or=Be(We(),1);function xc(i){return i?or.default.slug():(0,or.default)()}window.Verdant=ar;
|
|
17
|
+
`,n.ops),await this.commitOperations(e,{undoable:!1}),t}:null};this.getInverseOperations=async({ops:n,source:e})=>{let t=zt(n),r=[],s=()=>this.ctx.time.now;return await Promise.all(Object.entries(t).map(async([o,a])=>{let p=(e??await this.entities.hydrate(K(o)))?.__getViewData__(o,"confirmed");if(!p){this.ctx.log("warn","could not find entity",o,"for undo operation",n);return}let f=fs(o,p.view,a,s);r.unshift(...f)})),r};this.ctx=e,this.entities=t,this.defaultBatchTimeout=n,this.batcher=new it(this.flushOperations),this.batcher.add({key:kt,items:[],max:100,timeout:n,userData:{undoable:!0}})}get isDefaultBatch(){return this.currentBatchKey===kt}};var Li=class extends oe{constructor({ctx:e,files:t}){super();this.events={add:new Bi.WeakEvent,replace:new Bi.WeakEvent,resetAll:new Bi.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(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(await this.ctx.meta).reset(),await(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(f=>K(f.oid)).concat(r.map(f=>K(f.oid))))),o=Ar(t),a=Dr(r);this.ctx.log("debug","Applying data to live entities");for(let f of s){let S=o[f],w=a[f]??[],A=zt(w),y=e.reset?this.events.replace:this.events.add,I=this.pendingEntityPromises.get(f);I?(this.ctx.log("debug","Waiting for ongoing entity hydration",f),I.then(()=>{y.invoke(this,{oid:f,baselines:S,operations:A,isLocal:!1})})):(this.ctx.log("debug","Applying data to entity",f),y.invoke(this,{oid:f,baselines:S,operations:A,isLocal:!1}))}let l={abort:this.abortDataQueueController.signal};await(await this.ctx.meta).insertData(e,l),this.ctx.log("debug","Data processing complete, all data saved to metadata db.");let p=await Promise.all(s.map(async f=>await this.hydrate(f,l)??{oid:f,getSnapshot(){return null}}));try{this.ctx.log("debug","Saving entities to queryable storage"),await(await this.ctx.documents).saveEntities(p,l)}catch(f){this.disposed?this.ctx.log("warn","Error saving entities to queryable storage - EntityStore is disposed",f):this.ctx.log("error","Error saving entities to queryable storage",f)}};this.hydrate=async(e,t)=>{if(!qt(e))throw new Error("Cannot hydrate non-root entity");if(this.cache.has(e)){let s=this.cache.get(e);if(s){let o=s.deref();if(o)return o.deleted?(this.ctx.log("debug","Cached entity is deleted",e),null):(this.ctx.log("debug","Using cached hydrated entity",e),o);this.ctx.log("debug","Removing GC'd entity from cache",e),this.cache.delete(e)}}let r=this.pendingEntityPromises.get(e);if(r)return this.ctx.log("debug","Waiting for ongoing entity hydration",e),r;{this.ctx.log("debug","Hydrating entity from storage",e);let s=this.constructEntity(e);if(!s)return this.ctx.log("warn","Entity schema not found, cannot construct",e),null;let o=this.loadEntity(s,t);return o.finally(()=>{this.pendingEntityPromises.delete(e),this.ctx.log("debug","Hydration complete",e)}),this.pendingEntityPromises.set(e,o),o}};this.destroy=async()=>{this.ctx.log("warn","Disposing EntityStore"),this.dispose(),await this.batcher.flushAll()};this.create=async(e,t,{undoable:r=!0,access:s}={})=>{this.ctx.log("debug","Creating new entity",t);let{collection:o}=ue(t);Ht(e);let a=[],l=pt(e,a.push.bind(a));z(l,t);let{schema:p}=this.getCollectionSchema(o);if(!p)throw new Error(`Collection schema not found for ${o}`);let f=this.ctx.patchCreator.createInitialize(l,t,s);await this.batcher.commitOperations(f,{undoable:!!r});let S=await this.hydrate(t);if(!S)throw this.ctx.log("error","Failed to create entity; hydrated entity is null. Hopefully an error is logged above.",t),new N(N.Code.Unexpected,void 0,`Failed to create document ${t}`);return this.ctx.log("debug","Associating",a.length,"files to new entity",t),a.forEach(w=>this.files.add(w,S)),S};this.deleteAll=async(e,t)=>{this.ctx.log("info","Deleting documents",e),L(e.every(o=>o===K(o)),"Only root documents may be deleted via client methods");let r=await Promise.all(e.map(o=>this.hydrate(o))),s=[];for(let o of r)if(o){let a=o.__getFamilyOids__(),l=this.ctx.patchCreator.createDeleteAll(a);for(let p of l)p.authz=o.access;s.push(...l)}await this.batcher.commitOperations(s,{undoable:t?.undoable===void 0?!0:t.undoable}),e.forEach(o=>{this.cache.delete(o),this.ctx.log("debug","Deleted document from cache",o)})};this.delete=async(e,t)=>this.deleteAll([e],t);this.getCollectionSchema=e=>{let t=this.ctx.schema.collections[e];return t?{schema:{type:"object",nullable:!1,properties:t.fields},readonlyKeys:[t.primaryKey]}:(this.ctx.log("warn",`Missing schema for collection: ${e}`),{schema:null,readonlyKeys:[]})};this.constructEntity=e=>{L(!!e,"Cannot construct entity without OID");let{collection:t}=ue(e),{schema:r,readonlyKeys:s}=this.getCollectionSchema(t);if(!r)return null;if(this.disposed)return this.ctx.log("warn","Cannot hydrate entity after store has been disposed"),null;let o=new Ti({ctx:this.ctx,onPendingOperations:this.onPendingOperations,rootOid:e});return new me({ctx:this.ctx,oid:e,schema:r,readonlyKeys:s,files:this.files,metadataFamily:o,storeEvents:this.events,deleteSelf:this.delete.bind(this,e)})};this.onPendingOperations=e=>{this.batcher.addOperations(e)};this.discardPendingOperation=e=>{let t=K(e.oid);this.cache.get(t)?.deref()?.__discardPendingOperation__(e)};this.loadEntity=async(e,t)=>(await this.loadEntityData(e,t),this.cache.set(e.oid,this.ctx.weakRef(e)),this.entityFinalizationRegistry.register(e,e.oid),e);this.loadEntityData=async(e,t)=>{let{operations:r,baselines:s}=await(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 ki({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 Mi=class extends oe{constructor({sync:e,context:t}){super();this.cache=new Map;this.add=async(e,t)=>{let r=this.cache.get(e.id);r||(r=new ve(e.id,{ctx:this.context,parent:t}),this.cache.set(e.id,r)),e.remote||r[mt](e);let s=await(await this.context.files).add(e);r[mt](s)};this.get=(e,t)=>{if(this.cache.has(e))return this.cache.get(e);let r=new ve(e,t);return this.cache.set(e,r),this.load(r),r};this.load=async e=>{let t=await(await this.context.files).get(e.id);if(t)e[mt](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(await this.context.files).add(r.data),e[mt](r.data)):(this.context.log("error","Failed to load file",r),e[Ri](r.error?.toString()))}catch(r){this.context.log("error","Failed to load file",r),e[Ri](r instanceof Error?r.message:String(r))}};this.onFileUploaded=async e=>{this.context.log("debug","Marking file as uploaded",e.id),(await this.context.files).onUploaded(e.id)};this.sync=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("fileUploaded",this.onFileUploaded))}};function dc(i){return i!==null}function tr(i){return Array.isArray(i)?i.map(tr).filter(dc):i instanceof me&&i.deleted?null:i}function $e(i,n){return!i&&!n||i&&n&&We(i)===We(n)}var ir=Symbol("ON_ALL_UNSUBSCRIBED"),ge=Symbol("UPDATE"),uc,xe=class extends oe{constructor({initial:e,context:t,collection:r,key:s,shouldUpdate:o}){super();this._internalUnsubscribes=[];this._status="initial";this._executionPromise=null;this.setValue=e=>{this._rawValue=e,this.subscribeToDeleteAndRestore(this._rawValue);let t=tr(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 me&&(this._internalUnsubscribes.push(t.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(t.subscribe("restore",this.refreshValue)))}):e instanceof me&&(this._internalUnsubscribes.push(e.subscribe("delete",this.refreshValue)),this._internalUnsubscribes.push(e.subscribe("restore",()=>{this.refreshValue()})))};this.execute=()=>{let e=new Date;return this.context.log("debug",`[${e.toLocaleTimeString()}]`,"Executing query",this.key),this.status==="initial"?this.status="initializing":this.status==="ready"&&(this.status="revalidating"),this._executionPromise=this.run().then(()=>this._value).catch(t=>{if(t instanceof Error){if(t.name==="InvalidStateError"||t.name==="InvalidAccessError")return this._value;throw t}else throw new Error("Unknown error executing query")}).finally(()=>{let t=new Date,r=t.getTime()-e.getTime();this.context.log("debug",`[${t.toLocaleTimeString()}]`,"Query executed",this.key,`Duration: ${r}ms`)}),this._executionPromise};this[uc]=e=>{this._allUnsubscribedHandler=e};this._rawValue=e,this._value=e,this.isListQuery=Array.isArray(e),this._events=new W(l=>{l==="change"&&this._allUnsubscribedHandler?.(this)}),this.context=t,this.key=s,this.collection=r;let a=o||(l=>l.includes(r));this.addDispose(this.context.entityEvents.subscribe("collectionsChanged",l=>{a(l)&&(this.context.log("info","Updating query",this.key),this.execute())}))}static{uc=ir}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 ji=class extends xe{constructor({id:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await this.hydrate(this.oid);this.setValue(e)};this.oid=ee(r.collection,e),this.hydrate=t}};var hc,Vi=class extends xe{constructor({index:e,hydrate:t,...r}){super({initial:null,...r});this.run=async()=>{let e=await(await this.context.documents).findOneOid({collection:this.collection,index:this.index});this.setValue(e?await this.hydrate(e):null)};this[hc]=e=>{$e(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{hc=ge}};var fc,Ui=class extends xe{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(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[fc]=e=>{$e(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t,this._pageSize=r,this._page=s}static{fc=ge}get pageSize(){return this._pageSize}get page(){return this._page}get hasNextPage(){return this._hasNextPage}get hasPreviousPage(){return this._page>0}};var pc,Ni=class extends xe{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(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(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[pc]=e=>{$e(this.index,e)||(this.index=e,this.execute())};this.index=r,this.hydrate=e,this._pageSize=t}static{pc=ge}get pageSize(){return this._pageSize}get hasMore(){return this._hasNextPage}};var mc,zi=class extends xe{constructor({index:e,hydrate:t,...r}){super({initial:[],...r});this.run=async()=>{let{result:e}=await(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[mc]=e=>{$e(this.index,e)||(this.index=e,this.execute())};this.index=e,this.hydrate=t}static{mc=ge}};var $i=class{constructor({collection:n,cache:e,entities:t,context:r,documentManager:s}){this.serializeIndex=n=>n?We(n):"";this.get=n=>{let e=`get:${this.collection}:${n}`;return this.cache.getOrSet(e,()=>new ji({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 Vi({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[ge](n)})};this.findAll=({index:n,key:e}={})=>{let t=e||`findAll:${this.collection}:${this.serializeIndex(n)}`;return this.cache.getOrSet(t,()=>new zi({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:t}),r=>{r[ge](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 Ui({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:s,pageSize:e,page:t}),o=>{o[ge](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 Ni({index:n,collection:this.collection,hydrate:this.hydrate,context:this.context,key:r,pageSize:e}),s=>{s[ge](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 Ki=class extends oe{constructor({evictionTime:e=5*1e3,context:t}){super();this._cache=new Map;this._holds=new Set;this.enqueueQueryEviction=e=>{setTimeout(()=>{if(!e.subscribed){if(this._holds.has(e.key)){this.context.log("debug","QueryCache: keepAlive hold on query preserves after unsubscribe",e.key);return}this._cache.get(e.key)===e&&(this._cache.delete(e.key),this.context.log("debug","QueryCache: evicted query",e.key))}},this._evictionTime)};this.dropAll=()=>{this.context.log("debug","QueryCache: drop all",this._cache.size,"queries"),this._cache.forEach(e=>e.dispose()),this._cache.clear()};this.forceRefreshAll=()=>{this.context.log("debug","QueryCache: force refresh all",this._cache.size,"queries"),this._cache.forEach(e=>e.execute())};this._evictionTime=e,this.context=t,this.addDispose(this.context.internalEvents.subscribe("persistenceReset",this.forceRefreshAll))}get activeKeys(){return Array.from(this._cache.keys())}get(e){return this._cache.get(e)||null}set(e){return this._cache.set(e.key,e),e[ir](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}};async function mo(){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 Wi=class extends oe{constructor({endpointProvider:e,ctx:t}){super();this.onFileAdded=async e=>{if(!e.remote){this.ctx.log("debug","Uploading file",e.id,e.name);try{await this.uploadFile(e)}catch(t){this.ctx.log("error","File upload failed",t)}}};this.uploadFile=async(e,t={current:0,max:3})=>{let r=e.file;if(!r)throw new Error("Cannot upload a non-local file");let{files:s,token:o}=await this.endpointProvider.getEndpoints(),a=new FormData;a.append("file",r);try{let l=await this.ctx.environment.fetch(s+`/${e.id}`,{method:"POST",body:a,credentials:"include",headers:{Authorization:`Bearer ${o}`}});if(l.ok)return this.ctx.internalEvents.emit(`fileUploaded:${e.id}`,e),this.ctx.internalEvents.emit("fileUploaded",e),this.ctx.log("info","File upload successful"),{success:!0};{let p=await l.text();return this.ctx.log("error","File upload failed",l.status,p),l.status<500||t.current>=t.max?{success:!1,error:`Failed to upload file: ${l.status} ${p}`}:(await new Promise(f=>setTimeout(f,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}}catch(l){return this.ctx.log("error","File upload failed",l),t.current>=t.max?{success:!1,error:l.message}:(await new Promise(p=>setTimeout(p,1e3)),this.uploadFile(e,{max:t.max,current:t.current+1}))}};this.getFile=async(e,t={current:0,max:3})=>{let{files:r,token:s}=await this.endpointProvider.getEndpoints();try{let o=await this.ctx.environment.fetch(r+`/${e}`,{method:"GET",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}});return o.ok?{success:!0,data:await o.json()}:(this.ctx.log("error","File information fetch failed",r+`/${e}`,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",`${r}/${e}`,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 nr=Symbol("handleMessage"),gc,Bt=class extends W{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[gc]=async(e,t)=>{let r=!1,s=!1,o=new Set(this.peerIds);if(t.type==="presence-changed")this.isSelf(e,t.userInfo)?(this._self=t.userInfo,this._selfReplicaIds.add(t.userInfo.replicaId),s=!0,this.emit("selfChanged",t.userInfo)):(o.add(t.userInfo.id),this._peers[t.userInfo.id]=t.userInfo,r=!0,this.emit("peerChanged",t.userInfo.id,t.userInfo));else if(t.type==="sync-resp"){this._peers={},o.clear();for(let[a,l]of Object.entries(t.peerPresence))this.isSelf(e,l)?(this._self=l,this._selfReplicaIds.add(l.replicaId),s=!0,this.emit("selfChanged",l)):(r=!0,o.add(a),this._peers[a]=l,this.emit("peerChanged",a,l))}else if(t.type==="presence-offline"){o.delete(t.userId),this._selfReplicaIds.delete(t.replicaId);let a=this._peers[t.userId];delete this._peers[t.userId],r=!0,this.emit("peerLeft",t.userId,a)}r&&(this._peerIds=Array.from(o).sort(),this.emit("peersChanged",this._peers)),(r||s)&&this.emit("change")};this.update=async e=>{this._updateBatch.update({items:[{presence:e}]}),this.self.presence={...this.self.presence,...e},this.emit("selfChanged",this.self),this.emit("change")};this.flushPresenceUpdates=e=>{let t={presence:this.self.presence,internal:this.self.internal};for(let r of e)r.presence&&Object.assign(t.presence,r.presence),r.internal&&Object.assign(t.internal,r.internal);this.emit("update",t)};this.setViewId=e=>{this._updateBatch.update({items:[{internal:{viewId:e}}]}),this.self.internal.viewId=e,this.emit("selfChanged",this.self),this.emit("change")};this.setFieldId=(e,t=Date.now())=>{this._updateBatch.update({items:[{internal:{lastFieldId:e,lastFieldTimestamp:t}}]}),this.self.internal.lastFieldId=e,this.emit("selfChanged",this.self),this.emit("change")};this.getViewPeers=()=>this._peerIds.map(e=>this._peers[e]).filter(e=>this.self.internal.viewId===void 0||e.internal.viewId===this.self.internal.viewId);this.getFieldPeers=(e,t=60*1e3)=>this._peerIds.map(r=>this._peers[r]).filter(r=>r.internal.lastFieldId===e&&Date.now()-r.internal.lastFieldTimestamp<t);this.self.presence=e,this.self.profile=r,this.self.internal=gn,this.self.id="",this.self.replicaId="",s.waitForInitialization.then(()=>s.meta).then(o=>o.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{gc=nr}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 gt=class extends W{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.nextBeat=null),this.deadline&&(clearTimeout(this.deadline),this.deadline=null)};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 Hi=class extends W{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",t,s.status),this._isConnected&&(this._isConnected=!1,this.emit("onlineChange",!1));let o=await s.json();pr(o)&&(o.code===bt.TokenExpired?(this.endpointProvider.clearCache(),this.heartbeat.keepAlive()):this.ctx.log("error","Server error",o)),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(await this.ctx.meta).messageCreator.createAck(e.ackThisNonce)]))),this.emit("message",e)};this.throttledPresenceUpdate=Er(e=>{this.sendRequest([e])},3e3);this.send=e=>{if(this.status!=="active"){this.ctx.log("warn","Attempted to send message while sync is not active",e);return}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"&&(this.ctx.log("debug","Starting push-pull sync"),await this.endpointProvider.getEndpoints(),this.heartbeat.start(!0),this._status="active")};this.destroy=()=>{this.dispose(),this.stop()};this.onHeartbeat=async()=>{this.sendRequest([await(await this.ctx.meta).messageCreator.createPresenceUpdate(this.presence.self),await(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(await this.ctx.meta).messageCreator.createSyncStep1()])};this.ctx=s,this.presence=t,this.endpointProvider=e,this.heartbeat=new gt({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.ctx.log("debug","Stopping push-pull sync"),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 rr(i){this.message=i}rr.prototype=new Error,rr.prototype.name="InvalidCharacterError";var go=typeof window<"u"&&window.atob&&window.atob.bind(window)||function(i){var n=String(i).replace(/=+$/,"");if(n.length%4==1)throw new rr("'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 yc(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(go(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 go(n)}}function qi(i){this.message=i}function bc(i,n){if(typeof i!="string")throw new qi("Invalid token specified");var e=(n=n||{}).header===!0?0:1;try{return JSON.parse(yc(i.split(".")[e]))}catch(t){throw new qi("Invalid token specified: "+t.message)}}qi.prototype=new Error,qi.prototype.name="InvalidTokenError";var yo=bc;var Qi=class{constructor(n,e){this.config=n;this.ctx=e;this.cached=null;this.tokenInfo=null;this.getEndpoints=async()=>{if(this.cached)return this.cached;let n;if(this.config.fetchAuth)n=await this.config.fetchAuth();else{let a=this.ctx.environment.fetch;n=await a(this.config.authEndpoint,{credentials:"include"}).then(l=>{if(l.ok)return l.json();throw new Error(`Auth endpoint returned non-200 response: ${l.status}`)})}L(n.accessToken,"No access token provided from auth endpoint");let e=yo(n.accessToken);L(e.url,"No sync endpoint provided from auth endpoint"),L(e.type!==void 0,"No replica type provided from auth endpoint"),this.tokenInfo={userId:e.sub,libraryId:e.lib,url:e.url,fileUrl:e.file,role:e.role,type:parseInt(e.type+"")};let t=new URL(e.url);t.protocol=t.protocol.replace("ws","http");let r=t.toString();t.protocol=t.protocol.replace("http","ws");let s=t.toString(),o=e.file;if(!o){let a=new URL(r);a.pathname=a.pathname+"/files",o=a.toString()}return this.cached={http:r,websocket:s,files:o,token:n.accessToken},this.cached};this.clearCache=()=>{this.cached=null};if(!n.authEndpoint&&!n.fetchAuth)throw new Error("Either authEndpoint or fetchAuth must be provided to ServerSyncEndpointProvider")}get type(){return this.tokenInfo?.type??Ue.Realtime}};var Ji=class extends W{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}},Gi=class{constructor(n,e,t){this.current=0;this.next=()=>{this.current=Math.min(this.max,Math.max(1,this.current)*this.factor)};this.reset=()=>{this.current=0};this.current=n,this.max=e,this.factor=t}};var Xi=class extends W{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 gt;this.reconnectScheduler=new Ji(new Gi(2e3,6e4,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.onOnlineChange=async e=>{if(this.ctx.log("info","Socket online change",e),!this.disposed&&!this.ctx.closing){if(!e)this.hasStartedSync=!1,this.synced=!1,this.heartbeat.stop();else{this.ctx.log("debug","Starting sync"),this.hasStartedSync=!0,this.synced=!1;let t=await this.ctx.meta;this.ctx.log("debug","HERE"),this.send(await t.messageCreator.createPresenceUpdate(this.presence.self)),this.send(await t.messageCreator.createSyncStep1()),this.heartbeat.start()}this.emit("onlineChange",e)}};this.onMessage=async e=>{if(this.reconnectScheduler.reset(),this._ignoreIncoming){this.ctx.log("warn","Ignoring incoming message (ignore incoming flag set)",e.data);return}let t=JSON.parse(e.data);switch(this.ctx.log("debug","Received",t.type,"message"),t.type){case"sync-resp":if(t.ackThisNonce&&this.send(await(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","Sync socket error",e,e.target),!this.disposed&&(this.reconnectScheduler.next(),this.ctx.log("info","Attempting reconnect to websocket sync"))};this.onClose=e=>{this.ctx.log("info","Sync socket disconnected",e.code),this.onOnlineChange(!1),!this.disposed&&(this.reconnectScheduler.next(),this.ctx.log("info","Attempting reconnect to websocket sync"))};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(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=>{if(this.status!=="active"){this.ctx.log("debug","Ignoring outgoing message",e.type,"sync is not active");return}if(!this.hasStartedSync&&!this.canSkipSyncWait(e)){this.ctx.log("debug","Ignoring outgoing message",e.type,"still waiting to begin initial sync");return}this.canSkipSyncWait(e)?this.socket?.readyState===Yi?(this.ctx.log("debug","Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):(this.ctx.log("debug","Enqueueing message until socket is open",JSON.stringify(e,null,2)),this.connectQueue.push(e)):this.synced?this.socket?.readyState===Yi&&(this.ctx.log("debug","Sending message",JSON.stringify(e,null,2)),this.socket.send(JSON.stringify(e))):this.hasStartedSync&&(this.ctx.log("debug","Enqueueing message until synced",JSON.stringify(e,null,2)),this.syncQueue.push(e))};this.destroy=()=>{this.dispose(),this.stop()};this.start=async()=>{this.socket||(await this.initializeSocket(),this._status="active")};this.stop=()=>{this.socket?.removeEventListener("message",this.onMessage),this.socket?.removeEventListener("close",this.onClose),this.socket?.readyState===Yi&&this.socket.close(),this.socket=null,this._status="paused"};this.ctx=t,this.endpointProvider=e,this.presence=r,this.reconnectScheduler.subscribe("trigger",this.initializeSocket),this.heartbeat.subscribe("beat",this.sendHeartbeat)}get hasSynced(){return this.synced}ignoreIncoming(){this.incomingQueue=[],this._ignoreIncoming=!0}get isConnected(){return this.socket?.readyState===Yi}get status(){return this._status}},Yi=1;var Zi=class extends W{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 Bt({initialPresence:null,defaultProfile:null,ctx:e})}send(){}async start(){}stop(){}ignoreIncoming(){}reconnect(){}setMode(){}setPullInterval(){}},yt=class extends W{constructor({authEndpoint:e,fetchAuth:t,initialPresence:r,automaticTransportSelection:s=!0,autoStart:o,initialTransport:a,pullInterval:l,presenceUpdateBatchTimeout:p,defaultProfile:f,useBroadcastChannel:S,onOutgoingMessage:w,EXPERIMENTAL_backgroundSync:A},{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(await this.ctx.meta).setGlobalAck(e.globalAckTimestamp);break;case"global-ack":await(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(await this.ctx.meta).setGlobalAck(e.globalAckTimestamp),await(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),(await this.ctx.files).onServerReset(e.since),this.activeSync.send(await(await this.ctx.meta).messageCreator.createSyncStep1(e.since));break;case"server-ack":await(await this.ctx.meta).updateLastSynced(e.timestamp)}t==="network"&&this.broadcastChannel?.postMessage({type:"sync",message:e}),this.presence[nr](await(await this.ctx.meta).getLocalReplica(),e)}};this.handleOnlineChange=async e=>{if(this.emit("onlineChange",e),e){let t=await(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(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 N(N.Code.Unexpected,void 0,"Active sync has invalid token info");(e.type==="sync"||e.type==="op")&&fr(e,t),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 N(N.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.ctx.log("info","Starting sync"),this.activeSync.start());this.stop=()=>(this.ctx.log("info","Stopping sync"),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 Bt({initialPresence:r,defaultProfile:f,updateBatchTimeout:p,ctx:y}),this.endpointProvider=new Qi({authEndpoint:e,fetchAuth:t},y),this.webSocketSync=new Xi({endpointProvider:this.endpointProvider,presence:this.presence,ctx:y}),this.pushPullSync=new Hi({endpointProvider:this.endpointProvider,presence:this.presence,interval:l,ctx:y}),this.fileSync=new Wi({endpointProvider:this.endpointProvider,ctx:y}),S&&"BroadcastChannel"in window&&(this.broadcastChannel=new BroadcastChannel(`verdant-${y.namespace}`),this.broadcastChannel.addEventListener("message",this.handleBroadcastChannelMessage)),y.log("info","Sync initialized with transport:",a??"pull"),a==="realtime"?this.activeSync=this.webSocketSync:this.activeSync=this.pushPullSync,this.presence.subscribe("update",this.handlePresenceUpdate),y.internalEvents.subscribe("outgoingSyncMessage",this.send),this.webSocketSync.subscribe("message",this.handleMessage),this.webSocketSync.subscribe("onlineChange",this.handleOnlineChange),this.pushPullSync.subscribe("message",this.handleMessage),this.pushPullSync.subscribe("onlineChange",this.handleOnlineChange),s&&this.canDoRealtime){let E=()=>{P&&clearTimeout(P);let T=this.presence.getViewPeers().length>0||s!=="peers-only"&&this.presence.selfReplicaIds.size>1;T&&this.mode==="pull"?this.setMode("realtime"):!T&&this.mode==="realtime"&&(P=setTimeout(()=>{this.presence.getViewPeers().length===0&&this.setMode("pull")},1e3))},P;this.presence.subscribe("peersChanged",E),s!=="peers-only"&&this.presence.subscribe("selfChanged",E)}o&&this.start(),A&&mo()}get canDoRealtime(){return this.endpointProvider.type===Ue.Realtime||this.endpointProvider.type===Ue.PassiveRealtime||this.endpointProvider.type===Ue.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 bo(i){return i.operations.map(t=>t.timestamp).concat(i.baselines?.map(t=>t.timestamp)??[]).reduce((t,r)=>{let s=ai(r);return s>t?s:t},1)}var en=class extends W{constructor(e){super();this.contextInit=e;this.importingPromise=Promise.resolve();this.addData=async e=>{if(this.context.closing){this.context.log("warn","Client is closing; ignoring incoming sync data");return}await this.importingPromise;try{let t=e.reset?bo(e):this.schema.version;return t<this.schema.version?(this.context.log("warn","Incoming reset sync data is from an old schema version",t,`(current ${this.schema.version})`),await this.import({data:{operations:e.operations,baselines:e.baselines??[],localReplica:void 0,schemaVersion:t},fileData:[],files:[]})):await this._entities.addData(e)}catch(t){throw this.context.log("critical","Sync failed. To avoid data corruption, the client will now shut down.",t),this.emit("developerError",new N(N.Code.Unexpected,t,"Sync failed. To avoid data corruption, the client will now shut down.")),await this.close(),t}};this.stats=async()=>{if(this.disposed)return{};let e=await(await this.context.documents).stats(),t=await(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(await this.context.files).stats(),o=Object.values(e).reduce((p,{size:f})=>p+f,0),a=t.baselinesSize.size+t.operationsSize.size,l=a/o;return{collections:e,meta:t,storage:r,totalMetaSize:a,totalCollectionsSize:o,metaToDataRatio:l,files:s,quotaUsage:r?.usage&&r?.quota?r.usage/r.quota:void 0}};this.close=async()=>{this.sync.ignoreIncoming(),await this._entities.flushAllBatches(),this.context.closing=!0,this.context.closeLock&&await this.context.closeLock,this.sync.stop(),this.sync.destroy(),await this._entities.destroy(),this.context.persistenceShutdownHandler.shutdown(),this.context.internalEvents.disable(),this.context.entityEvents.disable(),await new Promise(e=>{e()}),this.context.log?.("info","Client closed")};this.__dangerous__resetLocal=async()=>{this.sync.stop(),await gs(this.namespace,this.context.environment)};this.export=async({downloadRemoteFiles:e}={downloadRemoteFiles:!0})=>{this.context.log("info","Exporting data...");let t=await(await this.context.meta).export(),{fileData:r,files:s}=await(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 As(this.context,{data:e,files:r,fileData:t}),s()};this.__dangerous__hardReset=async()=>{let e=await this.export();await this.import(e)};this.__cleanupFilesImmediately=async()=>(await this.context.files).cleanupDeletedFiles();this.__manualRebase=async()=>((await this.context.meta).manualRebase(),new Promise(e=>{let t=this.subscribe("rebase",()=>{t(),e()})}));this.context=new xi(this.contextInit),this.context.getClient=()=>this,this.collectionNames=Object.keys(this.context.schema.collections),this._sync=this.context.config.sync&&!this.context.schema.wip?new yt(this.context.config.sync,{onData:this.addData,ctx:this.context}):new Zi(this.context),this.context.schema.wip&&this.context.config.sync&&this.context.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 Mi({sync:this.sync,context:this.context}),this._entities=new Li({ctx:this.context,files:this._fileManager}),this._queryCache=new Ki({context:this.context,evictionTime:this.context.config.queries?.evictionTime}),this._documentManager=new Si(this.schema,this._entities);let t=Ir(()=>{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(this.context.schema.collections)){let o=r;this[o]=new $i({collection:o,cache:this._queryCache,context:this.context,entities:this.entities,documentManager: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 sync(){return this._sync}get entities(){return this._entities}get documentManager(){return this._documentManager}async getReplicaId(){return(await(await this.context.meta).getLocalReplica()).id}get batch(){return this.entities.batch}get __persistence(){return{meta:this.context.meta,queries:this.context.documents,files:this.context.files}}get __persistenceReady(){return this.context.waitForInitialization}};var wc={private:Ke.onlyMe(),public:void 0};function vc(i,{port:n=3242,initialPresence:e={}}={}){let t=localStorage.getItem("verdant-userId");return t||(t=`user-${Math.random().toString(36).slice(2)}`,localStorage.setItem("verdant-userId",t)),{defaultProfile:{id:t},initialPresence:e,authEndpoint:`http://localhost:${n}/auth/${i}?userId=${t}`}}var sr=Be(Qe(),1);function xc(i){return i?sr.default.slug():(0,sr.default)()}window.Verdant=or;
|
|
16
18
|
//# sourceMappingURL=index.js.map
|