UNPKG

@instantdb/core

Version:
8 lines • 153 kB
(function(T,F){typeof exports=="object"&&typeof module<"u"?F(exports):typeof define=="function"&&define.amd?define(["exports"],F):(T=typeof globalThis<"u"?globalThis:T||self,F(T.instant={}))})(this,(function(T){"use strict";function F(n){const e=Ke(n);let t=3735928559^e.length,r=1103547991^e.length;for(let s=0;s<e.length;s++){const i=e.charCodeAt(s);t=Math.imul(t^i,2654435761),r=Math.imul(r^i,1597334677)}return t=Math.imul(t^t>>>16,2246822507)^Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),`${(r>>>0).toString(16).padStart(8,"0")}${(t>>>0).toString(16).padStart(8,"0")}`}function Ke(n){if(n&&typeof n.toJSON=="function")return Ke(n.toJSON());if(Array.isArray(n)){let e="[";for(let t=0;t<n.length;t++)t>0&&(e+=","),e+=Ke(n[t]);return e+"]"}if(n&&typeof n=="object"){const e=Object.keys(n);e.sort();let t="{",r=!0;for(let s=0;s<e.length;s++){const i=e[s],o=n[i];o!==void 0&&(r||(t+=","),t+=JSON.stringify(i)+":"+Ke(o),r=!1)}return t+"}"}return n===void 0?"undefined":typeof n=="bigint"?`${n}n`:JSON.stringify(n)??String(n)}function we(n){if(typeof n=="number")return(Math.abs(n*2654435761)>>>0).toString(16);if(typeof n=="boolean")return n?"1":"0";if(n===null)return"null";if(n===void 0)return"undefined";if(typeof n=="string"){let e=2166136261;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24),e=e>>>0;return e.toString(16)}if(Array.isArray(n)){let e=2166136261;for(let t=0;t<n.length;t++){e^=(t+1)*2654435761;const r=we(n[t]);for(let s=0;s<r.length;s++)e^=r.charCodeAt(s),e*=16777619,e=e>>>0}return e.toString(16)}if(typeof n=="object"){let e=2166136261;const t=Object.keys(n).sort();for(let r=0;r<t.length;r++){const s=t[r];if(n[s]===void 0)continue;const i=we(s);e^=parseInt(i,16),e*=16777619,e=e>>>0;const o=we(n[s]);e^=parseInt(o,16),e*=16777619,e=e>>>0}return e.toString(16)}return we(String(n))}const D={Remove:"remove",Replace:"replace",Add:"add"},Zt=Symbol.for("__MUTATIVE_PROXY_DRAFT__"),$r=Symbol("__MUTATIVE_RAW_RETURN_SYMBOL__"),qe=Symbol.iterator,X={mutable:"mutable",immutable:"immutable"},it={};function Me(n,e){return n instanceof Map?n.has(e):Object.prototype.hasOwnProperty.call(n,e)}function Xt(n,e){if(e in n){let t=Reflect.getPrototypeOf(n);for(;t;){const r=Reflect.getOwnPropertyDescriptor(t,e);if(r)return r;t=Reflect.getPrototypeOf(t)}}}function ot(n){return Object.getPrototypeOf(n)===Set.prototype}function at(n){return Object.getPrototypeOf(n)===Map.prototype}function ee(n){var e;return(e=n.copy)!==null&&e!==void 0?e:n.original}function pe(n){return!!I(n)}function I(n){return typeof n!="object"?null:n?.[Zt]}function ct(n){var e;const t=I(n);return t?(e=t.copy)!==null&&e!==void 0?e:t.original:n}function se(n,e){if(!n||typeof n!="object")return!1;let t;return Object.getPrototypeOf(n)===Object.prototype||Array.isArray(n)||n instanceof Map||n instanceof Set||!!e?.mark&&((t=e.mark(n,X))===X.immutable||typeof t=="function")}function en(n,e=[]){if(Object.hasOwnProperty.call(n,"key")){const t=n.parent.copy,r=I(le(t,n.key));if(r!==null&&r?.original!==n.original)return null;const s=n.parent.type===3,i=s?Array.from(n.parent.setMap.keys()).indexOf(n.key):n.key;if(!(s&&t.size>i||Me(t,i)))return null;e.push(i)}if(n.parent)return en(n.parent,e);e.reverse();try{Rr(n.copy,e)}catch{return null}return e}function ye(n){return Array.isArray(n)?1:n instanceof Map?2:n instanceof Set?3:0}function le(n,e){return ye(n)===2?n.get(e):n[e]}function Pe(n,e,t){ye(n)===2?n.set(e,t):n[e]=t}function ut(n,e){const t=I(n);return(t?ee(t):n)[e]}function de(n,e){return n===e?n!==0||1/n===1/e:n!==n&&e!==e}function lt(n){if(n)for(;n.finalities.revoke.length>0;)n.finalities.revoke.pop()()}function be(n,e){return e?n:[""].concat(n).map(t=>{const r=`${t}`;return r.indexOf("/")===-1&&r.indexOf("~")===-1?r:r.replace(/~/g,"~0").replace(/\//g,"~1")}).join("/")}function Rr(n,e){for(let t=0;t<e.length-1;t+=1){const r=e[t];if(n=le(ye(n)===3?Array.from(n):n,r),typeof n!="object")throw new Error(`Cannot resolve patch at '${e.join("/")}'.`)}return n}function Dr(n){const e=Object.create(Object.getPrototypeOf(n));return Reflect.ownKeys(n).forEach(t=>{let r=Reflect.getOwnPropertyDescriptor(n,t);if(r.enumerable&&r.configurable&&r.writable){e[t]=n[t];return}r.writable||(r.writable=!0,r.configurable=!0),(r.get||r.set)&&(r={configurable:!0,writable:!0,enumerable:r.enumerable,value:n[t]}),Reflect.defineProperty(e,t,r)}),e}const xr=Object.prototype.propertyIsEnumerable;function tn(n,e){let t;if(Array.isArray(n))return Array.prototype.concat.call(n);if(n instanceof Set){if(!ot(n)){const r=Object.getPrototypeOf(n).constructor;return new r(n.values())}return Set.prototype.difference?Set.prototype.difference.call(n,new Set):new Set(n.values())}else if(n instanceof Map){if(!at(n)){const r=Object.getPrototypeOf(n).constructor;return new r(n)}return new Map(n)}else if(e?.mark&&(t=e.mark(n,X),t!==void 0)&&t!==X.mutable){if(t===X.immutable)return Dr(n);if(typeof t=="function"){if(e.enablePatches||e.enableAutoFreeze)throw new Error("You can't use mark and patches or auto freeze together.");return t()}throw new Error(`Unsupported mark result: ${t}`)}else if(typeof n=="object"&&Object.getPrototypeOf(n)===Object.prototype){const r={};return Object.keys(n).forEach(s=>{r[s]=n[s]}),Object.getOwnPropertySymbols(n).forEach(s=>{xr.call(n,s)&&(r[s]=n[s])}),r}else throw new Error("Please check mark() to ensure that it is a stable marker draftable function.")}function W(n){n.copy||(n.copy=tn(n.original,n.options))}function je(n){if(!se(n))return ct(n);if(Array.isArray(n))return n.map(je);if(n instanceof Map){const t=Array.from(n.entries()).map(([r,s])=>[r,je(s)]);if(!at(n)){const r=Object.getPrototypeOf(n).constructor;return new r(t)}return new Map(t)}if(n instanceof Set){const t=Array.from(n).map(je);if(!ot(n)){const r=Object.getPrototypeOf(n).constructor;return new r(t)}return new Set(t)}const e=Object.create(Object.getPrototypeOf(n));for(const t in n)e[t]=je(n[t]);return e}function ze(n){return pe(n)?je(n):n}function ce(n){var e;n.assignedMap=(e=n.assignedMap)!==null&&e!==void 0?e:new Map,n.operated||(n.operated=!0,n.parent&&ce(n.parent))}function nn(){throw new Error("Cannot modify frozen object")}function _e(n,e,t,r,s){{t=t??new WeakMap,r=r??[],s=s??[];const o=t.has(n)?t.get(n):n;if(r.length>0){const a=r.indexOf(o);if(o&&typeof o=="object"&&a!==-1)throw r[0]===o?new Error("Forbids circular reference"):new Error(`Forbids circular reference: ~/${s.slice(0,a).map((c,u)=>{if(typeof c=="symbol")return`[${c.toString()}]`;const l=r[u];return typeof c=="object"&&(l instanceof Map||l instanceof Set)?Array.from(l.keys()).indexOf(c):c}).join("/")}`);r.push(o),s.push(e)}else r.push(o)}if(Object.isFrozen(n)||pe(n)){r.pop(),s.pop();return}switch(ye(n)){case 2:for(const[a,c]of n)_e(a,a,t,r,s),_e(c,a,t,r,s);n.set=n.clear=n.delete=nn;break;case 3:for(const a of n)_e(a,a,t,r,s);n.add=n.clear=n.delete=nn;break;case 1:Object.freeze(n);let o=0;for(const a of n)_e(a,o,t,r,s),o+=1;break;default:Object.freeze(n),Object.keys(n).forEach(a=>{const c=n[a];_e(c,a,t,r,s)})}r.pop(),s.pop()}function dt(n,e){const t=ye(n);if(t===0)Reflect.ownKeys(n).forEach(r=>{e(r,n[r],n)});else if(t===1){let r=0;for(const s of n)e(r,s,n),r+=1}else n.forEach((r,s)=>e(s,r,n))}function rn(n,e,t){if(pe(n)||!se(n,t)||e.has(n)||Object.isFrozen(n))return;const r=n instanceof Set,s=r?new Map:void 0;if(e.add(n),dt(n,(i,o)=>{var a;if(pe(o)){const c=I(o);W(c);const u=!((a=c.assignedMap)===null||a===void 0)&&a.size||c.operated?c.copy:c.original;Pe(r?s:n,i,u)}else rn(o,e,t)}),s){const i=n,o=Array.from(i);i.clear(),o.forEach(a=>{i.add(s.has(a)?s.get(a):a)})}}function Ur(n,e){const t=n.type===3?n.setMap:n.copy;n.finalities.revoke.length>1&&n.assignedMap.get(e)&&t&&rn(le(t,e),n.finalities.handledSet,n.options)}function ft(n){n.type===3&&n.copy&&(n.copy.clear(),n.setMap.forEach(e=>{n.copy.add(ct(e))}))}function ht(n,e,t,r){if(n.operated&&n.assignedMap&&n.assignedMap.size>0&&!n.finalized){if(t&&r){const i=en(n);i&&e(n,i,t,r)}n.finalized=!0}}function pt(n,e,t,r){const s=I(t);s&&(s.callbacks||(s.callbacks=[]),s.callbacks.push((i,o)=>{var a;const c=n.type===3?n.setMap:n.copy;if(de(le(c,e),t)){let u=s.original;s.copy&&(u=s.copy),ft(n),ht(n,r,i,o),n.options.enableAutoFreeze&&(n.options.updatedValues=(a=n.options.updatedValues)!==null&&a!==void 0?a:new WeakMap,n.options.updatedValues.set(u,s.original)),Pe(c,e,u)}}),n.options.enableAutoFreeze&&s.finalities!==n.finalities&&(n.options.enableAutoFreeze=!1)),se(t,n.options)&&n.finalities.draft.push(()=>{const i=n.type===3?n.setMap:n.copy;de(le(i,e),t)&&Ur(n,e)})}function Lr(n,e,t,r,s){let{original:i,assignedMap:o,options:a}=n,c=n.copy;c.length<i.length&&([i,c]=[c,i],[t,r]=[r,t]);for(let u=0;u<i.length;u+=1)if(o.get(u.toString())&&c[u]!==i[u]){const l=e.concat([u]),f=be(l,s);t.push({op:D.Replace,path:f,value:ze(c[u])}),r.push({op:D.Replace,path:f,value:ze(i[u])})}for(let u=i.length;u<c.length;u+=1){const l=e.concat([u]),f=be(l,s);t.push({op:D.Add,path:f,value:ze(c[u])})}if(i.length<c.length){const{arrayLengthAssignment:u=!0}=a.enablePatches;if(u){const l=e.concat(["length"]),f=be(l,s);r.push({op:D.Replace,path:f,value:i.length})}else for(let l=c.length;i.length<l;l-=1){const f=e.concat([l-1]),d=be(f,s);r.push({op:D.Remove,path:d})}}}function Nr({original:n,copy:e,assignedMap:t},r,s,i,o){t.forEach((a,c)=>{const u=le(n,c),l=ze(le(e,c)),f=a?Me(n,c)?D.Replace:D.Add:D.Remove;if(de(u,l)&&f===D.Replace)return;const d=r.concat(c),h=be(d,o);s.push(f===D.Remove?{op:f,path:h}:{op:f,path:h,value:l}),i.push(f===D.Add?{op:D.Remove,path:h}:f===D.Remove?{op:D.Add,path:h,value:u}:{op:D.Replace,path:h,value:u})})}function Fr({original:n,copy:e},t,r,s,i){let o=0;n.forEach(a=>{if(!e.has(a)){const c=t.concat([o]),u=be(c,i);r.push({op:D.Remove,path:u,value:a}),s.unshift({op:D.Add,path:u,value:a})}o+=1}),o=0,e.forEach(a=>{if(!n.has(a)){const c=t.concat([o]),u=be(c,i);r.push({op:D.Add,path:u,value:a}),s.unshift({op:D.Remove,path:u,value:a})}o+=1})}function $e(n,e,t,r){const{pathAsArray:s=!0}=n.options.enablePatches;switch(n.type){case 0:case 2:return Nr(n,e,t,r,s);case 1:return Lr(n,e,t,r,s);case 3:return Fr(n,e,t,r,s)}}const We=(n,e,t=!1)=>{if(typeof n=="object"&&n!==null&&(!se(n,e)||t))throw new Error("Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.")},yt={get size(){return ee(I(this)).size},has(n){return ee(I(this)).has(n)},set(n,e){const t=I(this),r=ee(t);return(!r.has(n)||!de(r.get(n),e))&&(W(t),ce(t),t.assignedMap.set(n,!0),t.copy.set(n,e),pt(t,n,e,$e)),this},delete(n){if(!this.has(n))return!1;const e=I(this);return W(e),ce(e),e.original.has(n)?e.assignedMap.set(n,!1):e.assignedMap.delete(n),e.copy.delete(n),!0},clear(){const n=I(this);if(this.size){W(n),ce(n),n.assignedMap=new Map;for(const[e]of n.original)n.assignedMap.set(e,!1);n.copy.clear()}},forEach(n,e){const t=I(this);ee(t).forEach((r,s)=>{n.call(e,this.get(s),s,this)})},get(n){var e,t;const r=I(this),s=ee(r).get(n),i=((t=(e=r.options).mark)===null||t===void 0?void 0:t.call(e,s,X))===X.mutable;if(r.options.strict&&We(s,r.options,i),i||r.finalized||!se(s,r.options)||s!==r.original.get(n))return s;const o=it.createDraft({original:s,parentDraft:r,key:n,finalities:r.finalities,options:r.options});return W(r),r.copy.set(n,o),o},keys(){return ee(I(this)).keys()},values(){const n=this.keys();return{[qe]:()=>this.values(),next:()=>{const e=n.next();return e.done?e:{done:!1,value:this.get(e.value)}}}},entries(){const n=this.keys();return{[qe]:()=>this.entries(),next:()=>{const e=n.next();if(e.done)return e;const t=this.get(e.value);return{done:!1,value:[e.value,t]}}}},[qe](){return this.entries()}},Kr=Reflect.ownKeys(yt),sn=(n,e,{isValuesIterator:t})=>()=>{var r,s;const i=e.next();if(i.done)return i;const o=i.value;let a=n.setMap.get(o);const c=I(a),u=((s=(r=n.options).mark)===null||s===void 0?void 0:s.call(r,a,X))===X.mutable;if(n.options.strict&&We(o,n.options,u),!u&&!c&&se(o,n.options)&&!n.finalized&&n.original.has(o)){const l=it.createDraft({original:o,parentDraft:n,key:o,finalities:n.finalities,options:n.options});n.setMap.set(o,l),a=l}else c&&(a=c.proxy);return{done:!1,value:t?a:[a,a]}},Qe={get size(){return I(this).setMap.size},has(n){const e=I(this);if(e.setMap.has(n))return!0;W(e);const t=I(n);return!!(t&&e.setMap.has(t.original))},add(n){const e=I(this);return this.has(n)||(W(e),ce(e),e.assignedMap.set(n,!0),e.setMap.set(n,n),pt(e,n,n,$e)),this},delete(n){if(!this.has(n))return!1;const e=I(this);W(e),ce(e);const t=I(n);return t&&e.setMap.has(t.original)?(e.assignedMap.set(t.original,!1),e.setMap.delete(t.original)):(!t&&e.setMap.has(n)?e.assignedMap.set(n,!1):e.assignedMap.delete(n),e.setMap.delete(n))},clear(){if(!this.size)return;const n=I(this);W(n),ce(n);for(const e of n.original)n.assignedMap.set(e,!1);n.setMap.clear()},values(){const n=I(this);W(n);const e=n.setMap.keys();return{[Symbol.iterator]:()=>this.values(),next:sn(n,e,{isValuesIterator:!0})}},entries(){const n=I(this);W(n);const e=n.setMap.keys();return{[Symbol.iterator]:()=>this.entries(),next:sn(n,e,{isValuesIterator:!1})}},keys(){return this.values()},[qe](){return this.values()},forEach(n,e){const t=this.values();let r=t.next();for(;!r.done;)n.call(e,r.value,r.value,this),r=t.next()}};Set.prototype.difference&&Object.assign(Qe,{intersection(n){return Set.prototype.intersection.call(new Set(this.values()),n)},union(n){return Set.prototype.union.call(new Set(this.values()),n)},difference(n){return Set.prototype.difference.call(new Set(this.values()),n)},symmetricDifference(n){return Set.prototype.symmetricDifference.call(new Set(this.values()),n)},isSubsetOf(n){return Set.prototype.isSubsetOf.call(new Set(this.values()),n)},isSupersetOf(n){return Set.prototype.isSupersetOf.call(new Set(this.values()),n)},isDisjointFrom(n){return Set.prototype.isDisjointFrom.call(new Set(this.values()),n)}});const qr=Reflect.ownKeys(Qe),on=new WeakSet,an={get(n,e,t){var r,s;const i=(r=n.copy)===null||r===void 0?void 0:r[e];if(i&&on.has(i))return i;if(e===Zt)return n;let o;if(n.options.mark){const u=e==="size"&&(n.original instanceof Map||n.original instanceof Set)?Reflect.get(n.original,e):Reflect.get(n.original,e,t);if(o=n.options.mark(u,X),o===X.mutable)return n.options.strict&&We(u,n.options,!0),u}const a=ee(n);if(a instanceof Map&&Kr.includes(e)){if(e==="size")return Object.getOwnPropertyDescriptor(yt,"size").get.call(n.proxy);const u=yt[e];if(u)return u.bind(n.proxy)}if(a instanceof Set&&qr.includes(e)){if(e==="size")return Object.getOwnPropertyDescriptor(Qe,"size").get.call(n.proxy);const u=Qe[e];if(u)return u.bind(n.proxy)}if(!Me(a,e)){const u=Xt(a,e);return u?"value"in u?u.value:(s=u.get)===null||s===void 0?void 0:s.call(n.proxy):void 0}const c=a[e];if(n.options.strict&&We(c,n.options),n.finalized||!se(c,n.options))return c;if(c===ut(n.original,e)){if(W(n),n.copy[e]=bt({original:n.original[e],parentDraft:n,key:n.type===1?Number(e):e,finalities:n.finalities,options:n.options}),typeof o=="function"){const u=I(n.copy[e]);return W(u),ce(u),u.copy}return n.copy[e]}return c},set(n,e,t){var r;if(n.type===3||n.type===2)throw new Error("Map/Set draft does not support any property assignment.");let s;if(n.type===1&&e!=="length"&&!(Number.isInteger(s=Number(e))&&s>=0&&(e===0||s===0||String(s)===String(e))))throw new Error("Only supports setting array indices and the 'length' property.");const i=Xt(ee(n),e);if(i?.set)return i.set.call(n.proxy,t),!0;const o=ut(ee(n),e),a=I(o);return a&&de(a.original,t)?(n.copy[e]=t,n.assignedMap=(r=n.assignedMap)!==null&&r!==void 0?r:new Map,n.assignedMap.set(e,!1),!0):(de(t,o)&&(t!==void 0||Me(n.original,e))||(W(n),ce(n),Me(n.original,e)&&de(t,n.original[e])?n.assignedMap.delete(e):n.assignedMap.set(e,!0),n.copy[e]=t,pt(n,e,t,$e)),!0)},has(n,e){return e in ee(n)},ownKeys(n){return Reflect.ownKeys(ee(n))},getOwnPropertyDescriptor(n,e){const t=ee(n),r=Reflect.getOwnPropertyDescriptor(t,e);return r&&{writable:!0,configurable:n.type!==1||e!=="length",enumerable:r.enumerable,value:t[e]}},getPrototypeOf(n){return Reflect.getPrototypeOf(n.original)},setPrototypeOf(){throw new Error("Cannot call 'setPrototypeOf()' on drafts")},defineProperty(){throw new Error("Cannot call 'defineProperty()' on drafts")},deleteProperty(n,e){var t;return n.type===1?an.set.call(this,n,e,void 0,n.proxy):(ut(n.original,e)!==void 0||e in n.original?(W(n),ce(n),n.assignedMap.set(e,!1)):(n.assignedMap=(t=n.assignedMap)!==null&&t!==void 0?t:new Map,n.assignedMap.delete(e)),n.copy&&delete n.copy[e],!0)}};function bt(n){const{original:e,parentDraft:t,key:r,finalities:s,options:i}=n,o=ye(e),a={type:o,finalized:!1,parent:t,original:e,copy:null,proxy:null,finalities:s,options:i,setMap:o===3?new Map(e.entries()):void 0};(r||"key"in n)&&(a.key=r);const{proxy:c,revoke:u}=Proxy.revocable(o===1?Object.assign([],a):a,an);if(s.revoke.push(u),on.add(c),a.proxy=c,t){const l=t;l.finalities.draft.push((f,d)=>{var h,p;const m=I(c);let b=l.type===3?l.setMap:l.copy;const y=le(b,r),g=I(y);if(g){let k=g.original;g.operated&&(k=ct(y)),ft(g),ht(g,$e,f,d),l.options.enableAutoFreeze&&(l.options.updatedValues=(h=l.options.updatedValues)!==null&&h!==void 0?h:new WeakMap,l.options.updatedValues.set(k,g.original)),Pe(b,r,k)}(p=m.callbacks)===null||p===void 0||p.forEach(k=>{k(f,d)})})}else{const l=I(c);l.finalities.draft.push((f,d)=>{ft(l),ht(l,$e,f,d)})}return c}it.createDraft=bt;function zr(n,e,t,r,s){var i;const o=I(n),a=(i=o?.original)!==null&&i!==void 0?i:n,c=!!e.length;if(o?.operated)for(;o.finalities.draft.length>0;)o.finalities.draft.pop()(t,r);const u=c?e[0]:o?o.operated?o.copy:o.original:n;return o&&lt(o),s&&_e(u,u,o?.options.updatedValues),[u,t&&c?[{op:D.Replace,path:[],value:e[0]}]:t,r&&c?[{op:D.Replace,path:[],value:a}]:r]}function Wr(n,e){var t;const r={draft:[],revoke:[],handledSet:new WeakSet};let s,i;e.enablePatches&&(s=[],i=[]);const a=((t=e.mark)===null||t===void 0?void 0:t.call(e,n,X))===X.mutable||!se(n,e)?n:bt({original:n,parentDraft:null,finalities:r,options:e});return[a,(c=[])=>{const[u,l,f]=zr(a,c,s,i,e.enableAutoFreeze);return e.enablePatches?[u,l,f]:u}]}function gt(n){const{rootDraft:e,value:t,useRawReturn:r=!1,isRoot:s=!0}=n;dt(t,(i,o,a)=>{const c=I(o);if(c&&e&&c.finalities===e.finalities){n.isContainDraft=!0;const u=c.original;if(a instanceof Set){const l=Array.from(a);a.clear(),l.forEach(f=>a.add(i===f?u:f))}else Pe(a,i,u)}else typeof o=="object"&&o!==null&&(n.value=o,n.isRoot=!1,gt(n))}),s&&(n.isContainDraft||console.warn("The return value does not contain any draft, please use 'rawReturn()' to wrap the return value to improve performance."),r&&console.warn("The return value contains drafts, please don't use 'rawReturn()' to wrap the return value."))}function cn(n){var e;const t=I(n);if(!se(n,t?.options))return n;const r=ye(n);if(t&&!t.operated)return t.original;let s;function i(){s=r===2?at(n)?new Map(n):new(Object.getPrototypeOf(n)).constructor(n):r===3?Array.from(t.setMap.values()):tn(n,t?.options)}if(t){t.finalized=!0;try{i()}finally{t.finalized=!1}}else s=n;if(dt(s,(o,a)=>{if(t&&de(le(t.original,o),a))return;const c=cn(a);c!==a&&(s===n&&i(),Pe(s,o,c))}),r===3){const o=(e=t?.original)!==null&&e!==void 0?e:s;return ot(o)?new Set(s):new(Object.getPrototypeOf(o)).constructor(s)}return s}function un(n){if(!pe(n))throw new Error(`current() is only used for Draft, parameter: ${n}`);return cn(n)}const Ve=(n=>function e(t,r,s){var i,o,a;if(typeof t=="function"&&typeof r!="function")return function(O,...q){return e(O,E=>t.call(this,E,...q),r)};const c=t,u=r;let l=s;if(typeof r!="function"&&(l=r),l!==void 0&&Object.prototype.toString.call(l)!=="[object Object]")throw new Error(`Invalid options: ${l}, 'options' should be an object.`);l=Object.assign(Object.assign({},n),l);const f=pe(c)?un(c):c,d=Array.isArray(l.mark)?((O,q)=>{for(const E of l.mark){if(typeof E!="function")throw new Error(`Invalid mark: ${E}, 'mark' should be a function.`);const C=E(O,q);if(C)return C}}):l.mark,h=(i=l.enablePatches)!==null&&i!==void 0?i:!1,p=(o=l.strict)!==null&&o!==void 0?o:!1,b={enableAutoFreeze:(a=l.enableAutoFreeze)!==null&&a!==void 0?a:!1,mark:d,strict:p,enablePatches:h};if(!se(f,b)&&typeof f=="object"&&f!==null)throw new Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");const[y,g]=Wr(f,b);if(typeof r!="function"){if(!se(f,b))throw new Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");return[y,g]}let k;try{k=u(y)}catch(O){throw lt(I(y)),O}const L=O=>{const q=I(y);if(!pe(O)){if(O!==void 0&&!de(O,y)&&q?.operated)throw new Error("Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.");const C=O?.[$r];if(C){const V=C[0];return b.strict&&typeof O=="object"&&O!==null&&gt({rootDraft:q,value:O,useRawReturn:!0}),g([V])}if(O!==void 0)return typeof O=="object"&&O!==null&&gt({rootDraft:q,value:O}),g([O])}if(O===y||O===void 0)return g([]);const E=I(O);if(b===E.options){if(E.operated)throw new Error("Cannot return a modified child draft.");return g([un(O)])}return g([O])};return k instanceof Promise?k.then(L,O=>{throw lt(I(y)),O}):L(k)})();Object.prototype.constructor.toString();function ln(n,e){const t=Object.keys(n),r=Object.keys(e);return t.length===r.length&&Object.keys(n).every(s=>e.hasOwnProperty(s))}function dn(n,e){return Object.keys(n).length===Object.keys(e).length&&Object.keys(n).every(t=>e.hasOwnProperty(t)&&n[t]===e[t])}function Be(n,e){return typeof n!="object"||typeof e!="object"||n===null||e===null?n===e:ln(n,e)?Object.keys(n).every(t=>Be(n[t],e[t])):!1}function mt(n){if(!Re(n))return n;const e={};for(const[t,r]of Object.entries(n))r!==void 0&&(e[t]=r);return e}function fn(n,e){if(!Re(n)||!Re(e))return e;const t={...n};for(const r of Object.keys(e)){if(e[r]===void 0)continue;if(e[r]===null){delete t[r];continue}const s=Re(n[r])&&Re(e[r]);t[r]=s?fn(n[r],e[r]):e[r]}return t}function Re(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Qr(n,e,t){if(!n||e.length===0)return;let r=n||{};for(let i=0;i<e.length-1;i++){const o=e[i];(!(o in r)||typeof r[o]!="object")&&(r[o]=typeof e[i+1]=="number"?[]:{}),r=r[o]}const s=e[e.length-1];Array.isArray(r)&&typeof s=="number"?r.splice(s,0,t):r[s]=t}function hn(n,e,t){if(!n||e.length===0)return;let r=n||{};for(let s=0;s<e.length-1;s++){const i=e[s];(!(i in r)||typeof r[i]!="object")&&(r[i]=typeof e[s+1]=="number"?[]:{}),r=r[i]}r[e[e.length-1]]=t}function pn(n,e){if(!n||e.length===0)return;const[t,...r]=e;if(t in n){if(r.length===0){Array.isArray(n)?n.splice(t,1):delete n[t];return}pn(n[t],r),Vr(n[t])&&delete n[t]}}function Vr(n){return n&&Object.keys(n).length===0}const yn=/ZULU|YEKT|YEKST|YAPT|YAKT|YAKST|XJT|WGT|WGST|WFT|WETDST|WET|WDT|WAT|WAST|WAKT|WADT|VUT|VOLT|VLAT|VLAST|VET|UZT|UZST|UYT|UYST|UTC|UT|ULAT|ULAST|UCT|TVT|TRUT|TOT|TMT|TKT|TJT|TFT|TAHT|SGT|SCT|SAST|SADT|RET|PYT|PYST|PWT|PST|PONT|PMST|PMDT|PKT|PKST|PHT|PGT|PETT|PETST|PET|PDT|OMST|OMSST|NZT|NZST|NZDT|NUT|NST|NPT|NOVT|NOVST|NFT|NDT|MYT|MVT|MUT|MUST|MST|MSK|MSD|MPT|MMT|MHT|MEZ|METDST|MET|MESZ|MEST|MDT|MAWT|MART|MAGT|MAGST|LKT|LINT|LIGT|LHST|LHDT|KST|KRAT|KRAST|KOST|KGT|KGST|KDT|JST|JAYT|IST|IRT|IRKT|IRKST|IOT|IDT|ICT|HST|HKT|GYT|GMT|GILT|GFT|GET|GEST|GAMT|GALT|FNT|FNST|FKT|FKST|FJT|FJST|FET|EST|EGT|EGST|EETDST|EET|EEST|EDT|EAT|EAST|EASST|DDUT|DAVT|CXT|CST|COT|CLT|CLST|CKT|CHUT|CHAST|CHADT|CETDST|CET|CEST|CDT|CCT|CAST|CADT|BTT|BST|BRT|BRST|BRA|BOT|BORT|BNT|BDT|BDST|AZT|AZST|AZOT|AZOST|AWST|AWSST|AST|ART|ARST|ANAT|ANAST|AMT|AMST|ALMT|ALMST|AKST|AKDT|AFT|AEST|AESST|AEDT|ADT|ACWST|ACT|ACST|ACSST|ACDT$/,Br={ZULU:0,YEKT:18e3,YEKST:21600,YAPT:36e3,YAKT:32400,YAKST:32400,XJT:21600,WGT:-10800,WGST:-7200,WFT:43200,WETDST:3600,WET:0,WDT:32400,WAT:3600,WAST:25200,WAKT:43200,WADT:28800,VUT:39600,VOLT:10800,VLAT:36e3,VLAST:36e3,VET:-14400,UZT:18e3,UZST:21600,UYT:-10800,UYST:-7200,UTC:0,UT:0,ULAT:28800,ULAST:32400,UCT:0,TVT:43200,TRUT:36e3,TOT:46800,TMT:18e3,TKT:46800,TJT:18e3,TFT:18e3,TAHT:-36e3,SGT:28800,SCT:14400,SAST:7200,SADT:37800,RET:14400,PYT:-14400,PYST:-10800,PWT:32400,PST:-28800,PONT:39600,PMST:-10800,PMDT:-7200,PKT:18e3,PKST:21600,PHT:28800,PGT:36e3,PETT:43200,PETST:43200,PET:-18e3,PDT:-25200,OMST:21600,OMSST:21600,NZT:43200,NZST:43200,NZDT:46800,NUT:-39600,NST:-12600,NPT:20700,NOVT:25200,NOVST:25200,NFT:-12600,NDT:-9e3,MYT:28800,MVT:18e3,MUT:14400,MUST:18e3,MST:-25200,MSK:10800,MSD:14400,MPT:36e3,MMT:23400,MHT:43200,MEZ:3600,METDST:7200,MET:3600,MESZ:7200,MEST:7200,MDT:-21600,MAWT:18e3,MART:-34200,MAGT:39600,MAGST:39600,LKT:19800,LINT:50400,LIGT:36e3,LHST:37800,LHDT:37800,KST:32400,KRAT:25200,KRAST:25200,KOST:39600,KGT:21600,KGST:21600,KDT:36e3,JST:32400,JAYT:32400,IST:7200,IRT:12600,IRKT:28800,IRKST:28800,IOT:21600,IDT:10800,ICT:25200,HST:-36e3,HKT:28800,GYT:-14400,GMT:0,GILT:43200,GFT:-10800,GET:14400,GEST:14400,GAMT:-32400,GALT:-21600,FNT:-7200,FNST:-3600,FKT:-10800,FKST:-10800,FJT:43200,FJST:46800,FET:10800,EST:-18e3,EGT:-3600,EGST:0,EETDST:10800,EET:7200,EEST:10800,EDT:-14400,EAT:10800,EAST:-21600,EASST:-21600,DDUT:36e3,DAVT:25200,CXT:25200,CST:-21600,COT:-18e3,CLT:-14400,CLST:-10800,CKT:-36e3,CHUT:36e3,CHAST:45900,CHADT:49500,CETDST:7200,CET:3600,CEST:7200,CDT:-18e3,CCT:28800,CAST:34200,CADT:37800,BTT:21600,BST:3600,BRT:-10800,BRST:-7200,BRA:-10800,BOT:-14400,BORT:28800,BNT:28800,BDT:21600,BDST:7200,AZT:14400,AZST:14400,AZOT:-3600,AZOST:0,AWST:28800,AWSST:32400,AST:-14400,ART:-10800,ARST:-10800,ANAT:43200,ANAST:43200,AMT:-14400,AMST:14400,ALMT:21600,ALMST:25200,AKST:-32400,AKDT:-28800,AFT:16200,AEST:36e3,AESST:39600,AEDT:39600,ADT:-10800,ACWST:31500,ACT:-18e3,ACST:34200,ACSST:37800,ACDT:37800};function Gr(n){return new Date(n)}function Hr(n){return new Date(n+"Z")}const Jr=/^(\d+)[\./-](\d+)[\./-](\d+)$/;function Yr(n){const e=n.match(Jr);if(!e)return null;const[t,r,s,i]=e;return r<=0||s<=0||i<=0?null:r>999?new Date(Date.UTC(r,s-1,i,0,0,0,0)):new Date(Date.UTC(i,r-1,s,0,0,0,0))}function Zr(n){const[e,t]=n.split(" ");return new Date(e+"T"+t+"Z")}function Xr(n){const[e,t]=n.split(" ");return new Date(e+"T"+t+"Z")}function es(n){return new Date(n)}function ts(n){const e=/^(\w{3}) (\w{3}) (\d{2}) (\d{4})$/;if(!n.match(e))throw new Error(`Unable to parse \`${n}\` as a date.`);const r=new Date(n+" UTC");return new Date(Date.UTC(r.getUTCFullYear(),r.getUTCMonth(),r.getUTCDate(),0,0,0,0))}function ns(n){const e=/^(.+T.+)([+-])(\d{2})$/,t=n.match(e);if(t){const[,r,s,i]=t,o=`${r}${s}${i}:00`;return new Date(o)}return null}function rs(n){const e=/^(\d+)-(\d{1,2})-(\d{1,2})([ T])(\d{1,2})(?::(\d{1,2}))?(?::(\d{1,2}))?(.*)$/,t=n.match(e);if(t){const[,r,s,i,o,a,c,u,l]=t,f=s.padStart(2,"0"),d=i.padStart(2,"0");let h=a.padStart(2,"0");c!==void 0&&(h+=`:${c.padStart(2,"0")}`),u!==void 0&&(h+=`:${u.padStart(2,"0")}`);const p=`${r}-${f}-${d}T${h}${l}`;return new Date(p)}return null}function ss(n){const[e,t]=n.split(", "),[r,s,i]=e.split("/").map(Number),o=t.match(/(\d{1,2}):(\d{2}):(\d{2}) (AM|PM)/);if(!o)throw new Error(`Unable to parse time from: ${n}`);let[,a,c,u,l]=o;return a=Number(a),c=Number(c),u=Number(u),l==="PM"&&a!==12?a+=12:l==="AM"&&a===12&&(a=0),new Date(Date.UTC(i,r-1,s,a,c,u))}function is(n){switch(n){case"epoch":return new Date(0);case"infinity":case"-infinity":case"today":case"tomorrow":case"yesterday":return null}}function os(n){const e=n.match(yn);if(!e)return null;const[t]=e,r=Br[t],s=new Date(n.replace(yn,"Z"));return new Date(s.getTime()-r*1e3)}const as=[Yr,Xr,ts,ss,Hr,ns,Zr,Gr,is,os,rs,es];function cs(n,e){try{const t=n(e);return t instanceof Date&&!isNaN(t.getTime())?t:null}catch{return null}}function wt(n){for(const e of as){const t=cs(e,n);if(t)return t}return null}function us(n){try{const e=JSON.parse(n);return typeof e=="string"?wt(e):null}catch{return null}}function De(n){if(n!==void 0){if(n===null)return null;if(n instanceof Date)return n;if(typeof n=="string"){const e=wt(n)||us(n)||wt(n.trim());if(!e)throw new Error(`Unable to parse \`${n}\` as a date.`);return e}else if(typeof n=="number")return new Date(n);throw new Error(`Invalid date value \`${n}\`. Expected a date, number, or string, got type ${typeof n}.`)}}class he{attrs;linkIndex;_blobAttrs=null;_primaryKeys=null;_forwardIdents=null;_revIdents=null;constructor(e,t){this.attrs=e,this.linkIndex=t}resetAttrIndexes(){this._blobAttrs=null,this._primaryKeys=null,this._forwardIdents=null,this._revIdents=null}addAttr(e){this.attrs[e.id]=e,this.resetAttrIndexes()}deleteAttr(e){delete this.attrs[e],this.resetAttrIndexes()}updateAttr(e){const t=this.attrs[e.id];t&&(this.attrs[e.id]={...t,...e},this.resetAttrIndexes())}getAttr(e){return this.attrs[e]}get blobAttrs(){if(this._blobAttrs)return this._blobAttrs;this._blobAttrs=new Map;for(const e of Object.values(this.attrs))if(St(e)){const[t,r,s]=e["forward-identity"];G(this.blobAttrs,[r,s],e)}return this._blobAttrs}get primaryKeys(){if(this._primaryKeys)return this._primaryKeys;this._primaryKeys=new Map;for(const e of Object.values(this.attrs))if(e["primary?"]){const[t,r]=e["forward-identity"];G(this._primaryKeys,[r],e)}return this._primaryKeys}get forwardIdents(){if(this._forwardIdents)return this._forwardIdents;this._forwardIdents=new Map;for(const e of Object.values(this.attrs)){const t=e["forward-identity"],[r,s,i]=t;G(this._forwardIdents,[s,i],e)}return this._forwardIdents}get revIdents(){if(this._revIdents)return this._revIdents;this._revIdents=new Map;for(const e of Object.values(this.attrs)){const t=e["reverse-identity"];if(t){const[r,s,i]=t;G(this._revIdents,[s,i],e)}}return this._revIdents}toJSON(){return{attrs:this.attrs,linkIndex:this.linkIndex}}}function ls(n){return n.cardinality==="one"}function _t(n){return n["value-type"]==="ref"}function St(n){return n["value-type"]==="blob"}function Se(n,e){return e.reduce((t,r)=>t&&t.get(r),n)}function ie(n,e){if(e.length===0)throw new Error("path must have at least one element");if(e.length===1){n.delete(e[0]);return}const[t,...r]=e;n.has(t)&&ie(n.get(t),r)}function G(n,e,t){let r=n;const s=e.length-1;for(let i=0;i<s;i++){const o=e[i];let a=r.get(o);a===void 0&&(a=new Map,r.set(o,a)),r=a}s>-1&&r.set(e[s],t)}function bn(n,e,t){const r=new Map,s=new Map,i=new Map;for(const o of e){let[a,c,u]=o;const l=n.getAttr(c);if(!l){console.warn("no such attr",c,a);continue}l["checked-data-type"]==="date"&&t&&(u=De(u),o[2]=u),_t(l)&&G(i,[u,c,a],o),G(r,[a,c,u],o),G(s,[c,a,u],o)}return{eav:r,aev:s,vae:i}}function gn(n){return{triples:H(n.eav,3),cardinalityInference:n.cardinalityInference,useDateObjects:n.useDateObjects,version:1}}function mn(n,e){return Te(n,e.triples,e.cardinalityInference,e.useDateObjects)}function wn(n,e){if(n)return new he(n.attrs,n.linkIndex);if(e&&"__type"in e)return new he(e.attrs,e.linkIndex)}function ds(n,e){return Se(n.eav,[e])!==void 0}function Te(n,e,t,r){const s=bn(n,e,r);return s.cardinalityInference=t,s.useDateObjects=r,s}function xe(n,e){let t;if(Array.isArray(e[0])){const[s,i]=e[0],o=n.aev.get(s);if(!o)return null;t=H(o,2).find(c=>c[2]===i)?.[0]}else t=e[0];if(!t)return null;const r=e[2];if(Array.isArray(r)&&r.length===2&&n.aev.get(r[0])){const[s,i]=r,o=n.aev.get(s);if(!o)return null;const c=H(o,2).find(h=>h[2]===i)?.[0];if(!c)return null;const[u,l,f,...d]=e;return[t,l,c,...d]}else{const[s,...i]=e;return[t,...i]}}function _n(n,e,t){const r=xe(n,t);if(!r)return;const[s,i,o]=r,a=e.getAttr(i);a&&(ie(n.eav,[s,i,o]),ie(n.aev,[i,s,o]),_t(a)&&ie(n.vae,[o,i,s]))}let fs=0;function Sn(n,e,t){const[r,s,i]=t;let o;const a=Se(n.eav,[r,s,i]);return a&&(o=a[3]),o||Date.now()*10+fs++}function Tn(n,e,t){const r=xe(n,t);if(!r)return;let[s,i,o]=r;const a=e.getAttr(i);if(!a)return;a["checked-data-type"]==="date"&&n.useDateObjects&&(o=De(o));const u=Se(n.eav,[s,i,o])?.[3]??Sn(n,a,r),l=[s,i,o,u];ls(a)?(G(n.eav,[s,i],new Map([[o,l]])),G(n.aev,[i,s],new Map([[o,l]]))):(G(n.eav,[s,i,o],l),G(n.aev,[i,s,o],l)),_t(a)&&G(n.vae,[o,i,s],l)}function hs(n,e,t){const r=xe(n,t);if(!r)return;const[s,i,o]=r,a=e.getAttr(i);if(!a)return;if(!St(a))throw new Error("merge operation is not supported for links");const c=Se(n.eav,[s,i]);if(!c)return;const u=c.values().next()?.value;if(!u)return;const l=u[2],f=fn(l,o),d=[s,i,f,Sn(n,a,u)];G(n.eav,[s,i],new Map([[f,d]])),G(n.aev,[i,s],new Map([[f,d]]))}function Tt(n,e,t){const[r,s]=t,i=xe(n,[r]);if(!i)return;const[o]=i,a=n.eav.get(o);if(a){for(const u of a.keys()){const l=e.getAttr(u);l&&l["on-delete-reverse"]==="cascade"&&H(a.get(u),1).forEach(([f,d,h])=>Tt(n,e,[h,l["reverse-identity"]?.[1]])),(!s||!l||l["forward-identity"]?.[1]===s)&&(ie(n.aev,[u,o]),ie(n.eav,[o,u]))}a.size===0&&ie(n.eav,[o])}const c=n.vae.get(o)&&H(n.vae.get(o),2);c&&c.forEach(u=>{const[l,f,d]=u,h=e.getAttr(f);(!s||!h||h["reverse-identity"]?.[1]===s)&&(ie(n.eav,[l,f,d]),ie(n.aev,[f,l,d]),ie(n.vae,[d,f,l])),h&&h["on-delete"]==="cascade"&&h["reverse-identity"]?.[1]===s&&Tt(n,e,[l,h["forward-identity"]?.[1]])}),n.vae.get(o)?.size===0&&ie(n.vae,[o])}function vn(n,e,t){const r=bn(e,t,n.useDateObjects);Object.keys(r).forEach(s=>{n[s]=r[s]})}function ps(n,[e]){n.addAttr(e)}function An(n){return H(n.eav,3)}function ys(n,e,[t]){if(!e.getAttr(t))return;const r=An(n).filter(([s,i])=>i!==t);e.deleteAttr(t),vn(n,e,r)}function bs(n,e,[t]){e.getAttr(t.id)&&(e.updateAttr(t),vn(n,e,An(n)))}function gs(n,e,t){const[r,...s]=t;switch(r){case"add-triple":Tn(n,e,s);break;case"deep-merge-triple":hs(n,e,s);break;case"retract-triple":_n(n,e,s);break;case"delete-entity":Tt(n,e,s);break;case"add-attr":ps(e,s);break;case"delete-attr":ys(n,e,s);break;case"update-attr":bs(n,e,s);break;case"restore-attr":break;case"rule-params":break;default:throw new Error(`unhandled transaction action: ${r}`)}}function H(n,e,t=[]){if(!n||e===0)return t;if(e===1){for(const r of n.values())t.push(r);return t}for(const r of n.values())H(r,e-1,t);return t}function Ge(n,e,t){const r=[];if(t?.hasOwnProperty("$not")){for(const i of e.keys())t.$not!==i&&r.push(e.get(i));return r}if(t?.hasOwnProperty("$isNull")){const{attrId:i,isNull:o,reverse:a}=t.$isNull;if(a)for(const c of e.keys()){const u=n.vae.get(c),l=!u||!u.get(i);(o?l:!l)&&r.push(e.get(c))}else{const c=n.aev.get(i);for(const u of e.keys()){const l=!c||c.get(u)?.get(null)||!c.get(u);(o?l:!l)&&r.push(e.get(u))}}return r}if(t?.$comparator)return H(e,1).filter(t.$op);const s=t.in||t.$in||[t];for(const i of s){const o=e.get(i);o&&r.push(o)}return r}function ms(n,e,t){let r="";return n!==void 0&&(r+="e"),e!==void 0&&(r+="a"),t!==void 0&&(r+="v"),r}function ws(n,[e,t,r]){switch(ms(e,t,r)){case"e":{const i=n.eav.get(e);return H(i,2)}case"ea":{const i=n.eav.get(e)?.get(t);return H(i,1)}case"eav":{const i=n.eav.get(e)?.get(t);return i?Ge(n,i,r):[]}case"ev":{const i=n.eav.get(e);if(!i)return[];const o=[];for(const a of i.values())o.push(...Ge(n,a,r));return o}case"a":{const i=n.aev.get(t);return H(i,2)}case"av":{const i=n.aev.get(t);if(!i)return[];const o=[];for(const a of i.values())o.push(...Ge(n,a,r));return o}case"v":{const i=[];for(const o of n.eav.values())for(const a of o.values())i.push(...Ge(n,a,r));return i}default:return H(n.eav,3)}}function _s(n,e,t){const r={};if(!e)return r;for(const[s,i]of e.entries()){const o=n.eav.get(t)?.get(i.id),a=H(o,1);for(const c of a)r[s]=c[2]}return r}function x(n,e,t){return n.forwardIdents.get(e)?.get(t)}function ge(n,e,t){return n.revIdents.get(e)?.get(t)}function Ss(n,e){return n.blobAttrs.get(e)}function kn(n,e){const t=n.primaryKeys.get(e);return t||n.forwardIdents.get(e)?.get("id")}function Ts(n,e,t){const r=xe(n,t);if(!r)return;const[s,i,o]=r;if(e.getAttr(i))return Se(n.eav,[s,i])}function vs(n,e,t){const r=t.filter(([s,i,o,a,c])=>{if(s!=="add-triple"&&s!=="deep-merge-triple")return!0;const u=c?.mode;if(u!=="create"&&u!=="update")return!0;let l=!1;const f=e.getAttr(o);if(f){const d=kn(e,f["forward-identity"][1]);l=!!Ts(n,e,[i,d?.id,i])}return!(u==="create"&&l||u==="update"&&!l)});return Ve({store:n,attrsStore:e},s=>{r.forEach(i=>{gs(s.store,s.attrsStore,i)})},{mark:s=>{if(s instanceof he)return"immutable"}})}function As(n){return typeof n=="string"&&n.startsWith("?")}function ks(n,e,t){if(t.hasOwnProperty(n)){const r=t[n];return On(r,e,t)}return{...t,[n]:e}}function In(n,e,t){return n===e?t:null}function Is(n){return typeof n==="string"&&n.startsWith("?")?ks:In}const Os=["in","$in","$not","$isNull","$comparator"];function Cs(n){for(const e of Os)if(n.hasOwnProperty(e))return!0;return!1}function On(n,e,t){return t?typeof n=="object"?Cs(n)?t:null:Is(n)(n,e,t):null}function Es(n,e,t){return n.reduce((r,s,i)=>{const o=e[i];return On(s,o,r)},t)}function Ms(n,e,t){return $s(n,e,t).map(r=>Es(e,r,t)).filter(r=>r)}function Ps(n,e,t){return e.or?e.or.patterns.flatMap(r=>vt(n,r,t)):e.and?e.and.patterns.reduce((r,s)=>vt(n,s,r),t):t.flatMap(r=>Ms(n,e,r))}function vt(n,e,t=[{}]){return e.reduce((r,s)=>Ps(n,s,r),t)}function At(n,e){return Array.isArray(e)?e.map(t=>At(n,t)):As(e)?n[e]:e}function js(n,{find:e,where:t}){return vt(n,t).map(s=>At(s,e))}function $s(n,e,t){return ws(n,At(t,e))}const Rs=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;function ve(n){return typeof n=="string"&&Rs.test(n)}const K=[];for(let n=0;n<256;++n)K.push((n+256).toString(16).slice(1));function Ds(n,e=0){return(K[n[e+0]]+K[n[e+1]]+K[n[e+2]]+K[n[e+3]]+"-"+K[n[e+4]]+K[n[e+5]]+"-"+K[n[e+6]]+K[n[e+7]]+"-"+K[n[e+8]]+K[n[e+9]]+"-"+K[n[e+10]]+K[n[e+11]]+K[n[e+12]]+K[n[e+13]]+K[n[e+14]]+K[n[e+15]]).toLowerCase()}let kt;const xs=new Uint8Array(16);function Us(){if(!kt){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");kt=crypto.getRandomValues.bind(crypto)}return kt(xs)}const Cn={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function Ls(n,e,t){if(Cn.randomUUID&&!n)return Cn.randomUUID();n=n||{};const r=n.random??n.rng?.()??Us();if(r.length<16)throw new Error("Random bytes length must be >= 16");return r[6]=r[6]&15|64,r[8]=r[8]&63|128,Ds(r)}function En(n){const e=n.replace(/-/g,""),t=[];for(let r=0;r<e.length;r+=2)t.push(parseInt(e.substring(r,r+2),16));return t}function Ns(n,e){for(let t=0;t<n.length;t++){if(n[t]<e[t])return-1;if(n[t]>e[t])return 1}return 0}function Fs(n,e){return Ns(En(n),En(e))}function $(){return Ls()}function Ks(n,e){return n.localeCompare(e)}function qs(){let n=Ks;if(typeof Intl=="object"&&Intl.hasOwnProperty("Collator"))try{n=Intl.Collator("en-US").compare}catch{}return n}const zs=qs();let Mn=!0;const Ws=n=>{Mn=n};let Qs=0;function Ue(n){return He(`_${n}`,Qs++)}function He(n,e){return`?${n}-${e}`}class Ae extends Error{constructor(e){super(e),this.name="AttrNotFoundError"}}function Vs(n,e){const t=kn(n,e);if(!t)throw new Ae(`Could not find id attr for ${e}`);return t}function Pn(n,e,t,r){return[Bs(n,e,t,r)]}function Bs(n,e,t,r){return[n(t,r),Vs(e,t).id,n(t,r),n("time",r)]}function Gs(n,e,t){return n.map(r=>r===e?t:r)}function jn(n,e,t,r,s){const i=x(e,t,s),o=ge(e,t,s),a=i||o;if(!a)throw new Ae(`Could not find attr for ${[t,s]}`);if(a["value-type"]!=="ref")throw new Error(`Attr ${a.id} is not a ref`);const[c,u]=a["forward-identity"],[l,f]=a["reverse-identity"],d=r+1,h=i?[n(u,r),a.id,n(f,d),Ue("time")]:[n(u,d),a.id,n(f,r),Ue("time")];return[i?f:u,d,h,a,!!i]}function $n(n,e){if(typeof e!="string")return function(o){return!1};const r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,"."),s=new RegExp(`^${r}$`,n?"s":"is");return function(o){return typeof o!="string"?!1:s.test(o)}}function Hs(n,e){if(typeof e!="object"||e.hasOwnProperty("$in")||e.hasOwnProperty("in"))return e;const t=n["checked-data-type"]==="date";if(e.hasOwnProperty("$gt"))return{$comparator:!0,$op:t?function(s){return new Date(s[2])>new Date(e.$gt)}:function(s){return s[2]>e.$gt}};if(e.hasOwnProperty("$gte"))return{$comparator:!0,$op:t?function(s){return new Date(s[2])>=new Date(e.$gte)}:function(s){return s[2]>=e.$gte}};if(e.hasOwnProperty("$lt"))return{$comparator:!0,$op:t?function(s){return new Date(s[2])<new Date(e.$lt)}:function(s){return s[2]<e.$lt}};if(e.hasOwnProperty("$lte"))return{$comparator:!0,$op:t?function(s){return new Date(s[2])<=new Date(e.$lte)}:function(s){return s[2]<=e.$lte}};if(e.hasOwnProperty("$like")){const r=$n(!0,e.$like);return{$comparator:!0,$op:function(i){return r(i[2])}}}if(e.hasOwnProperty("$ilike")){const r=$n(!1,e.$ilike);return{$comparator:!0,$op:function(i){return r(i[2])}}}return e}function Js(n,e,t,r,s,i){const o=x(e,t,s),a=ge(e,t,s),c=o||a;if(!c)throw new Ae(`No attr for etype = ${t} label = ${s}`);if(i?.hasOwnProperty("$isNull")){const u=x(e,t,"id");if(!u)throw new Ae(`No attr for etype = ${t} label = id`);return[n(t,r),u.id,{$isNull:{attrId:c.id,isNull:i.$isNull,reverse:!o}},Ue("time")]}return o?[n(t,r),c.id,Hs(c,i),Ue("time")]:[i,c.id,n(t,r),Ue("time")]}function Ys(n,e,t,r,s){const[i,o,a]=s.reduce((c,u)=>{const[l,f,d]=c,[h,p,m]=jn(n,e,l,f,u);return[h,p,[...d,m]]},[t,r,[]]);return[i,o,a]}function It(n,e,t,r,s,i){const o=s.slice(0,s.length-1),a=s[s.length-1],[c,u,l]=Ys(n,e,t,r,o),f=Js(n,e,c,u,a,i);return l.concat([f])}function Zs(n,e){return e?[e].concat(n):n}function Xs([n,e]){return n==="or"&&Array.isArray(e)}function ei([n,e]){return n==="and"&&Array.isArray(e)}function ti(n,e,t){return(r,s)=>{const i=n(r,s);return e==i?i:`${i}-${t}`}}function Rn(n,e,t,r,s,i){const o=n(r,s),a=i.map((c,u)=>{const l=ti(n,o,u);return xn(l,t,r,s,c)});return{[e]:{patterns:a,joinSym:o}}}function ni(n){const e=[];for(let t=1;t<=n.length;t++)e.push(n.slice(0,t));return e}function Dn(n,e,t,r,s){return ni(s).map(i=>It(n,e,t,r,i,{$isNull:!0}))}function xn(n,e,t,r,s){return Object.entries(s).flatMap(([i,o])=>{if(Xs([i,o]))return Rn(n,"or",e,t,r,o);if(ei([i,o]))return Rn(n,"and",e,t,r,o);if(i==="$entityIdStartsWith")return[];const a=i.split(".");if(o?.hasOwnProperty("$ne")&&(o={...o,$not:o.$ne},delete o.$ne),o?.hasOwnProperty("$not")){const c=It(n,e,t,r,a,o),u=Dn(n,e,t,r,a);return[{or:{patterns:[c,...u],joinSym:n(t,r)}}]}return o?.hasOwnProperty("$isNull")&&o.$isNull===!0&&a.length>1?[{or:{patterns:Dn(n,e,t,r,a),joinSym:n(t,r)}}]:It(n,e,t,r,a,o)})}function ri(n,e,t,r){const s=He;return r?xn(s,n,e,t,r).concat(Pn(s,n,e,t)):Pn(s,n,e,t)}function si(n,e,t){return[n(e,t),n("time",t)]}function ii(n,e,t,r,s,i){const[o,a,c,u,l]=jn(n,e,t,r,s),f=Gs(c,n(t,r),i);return[o,a,f,u,l]}function oi(n,e,t,{etype:r,level:s,form:i},o){const a=Object.keys(i).filter(c=>c!=="$");return a.length?Object.entries(o).map(function([u,l]){return a.map(function(h){const p=!!(e.cardinalityInference&&t.linkIndex?.[r]?.[h]?.isSingular);try{const[m,b,y]=ii(n,t,r,s,h,u),g=Nn(e,t,{etype:m,level:b,form:i[h],join:y}),k=p?g[0]:g;return{[h]:k}}catch(m){if(m instanceof Ae)return{[h]:p?void 0:[]};throw m}}).reduce(function(h,p){return{...h,...p}},l)}):Object.values(o)}function ai(n,e,t){return t==="string"?zs(n,e):n>e?1:-1}function Le(n,e,t,r,s){return e===r||e==null&&r==null?Fs(n,t):r==null?1:e==null?-1:ai(e,r,s)}function Je([n,e],[t,r],s){return Le(n,e,t,r,s)}function Ot(n){return n==null?n:new Date(n).getTime()}function Un(n,e,t){const[r,s,i,o]=n;if(e["forward-identity"]?.[2]==="id")return Je(t,[r,o],null);const[a,c]=t,u=e["checked-data-type"],l=u==="date"?Ot(c):c,f=u==="date"?Ot(i):i;return Je([a,l],[r,f],u)}function ci(n,e,t,r){const s=Un(n,e,r);return t==="desc"?s>0:s<0}function ui(n,e,t,r){const s=Un(n,e,r);return t==="desc"?s<0:s>0}function li(n,e){const t=e[1];return n.getAttr(t)}function di(n,e,t){const r=Object.keys(t)[0];return x(n,e,r)}function fi(n,e,t,r){if(t)return li(n,t);if(r)return di(n,e,r)}function hi(n,e,t){if(!Array.isArray(t.fields))return Ss(n,e);const r=new Map;for(const s of t.fields){const i=x(n,e,s),o=i?.["forward-identity"]?.[2];o&&St(i)&&r.set(o,i)}if(!r.has("id")){const s=x(n,e,"id"),i=s?.["forward-identity"]?.[2];i&&r.set(i,s)}return r}function pi(n,e,{etype:t,pageInfo:r,dq:s,form:i}){const o=i?.$?.order,a=Ln(i),c=yi(i);let u=js(n,s);const l=r?.["start-cursor"],f=r?.["end-cursor"],d=fi(e,t,l,o);if(d&&d?.["forward-identity"]?.[2]!=="id"){const m=d["checked-data-type"]==="date",b=d.id;u=u.map(([y])=>{let g=n.eav.get(y)?.get(b)?.values()?.next()?.value?.[2];return m&&(g=Ot(g)),[y,g]})}u.sort(c==="asc"?function(b,y){return Je(b,y,d?.["checked-data-type"])}:function(b,y){return Je(y,b,d?.["checked-data-type"])});let h={};const p=hi(e,t,s);for(const m of u){const[b]=m;if(h[b]||!a&&l&&d&&ci(l,d,c,m)||!a&&f&&d&&ui(f,d,c,m))continue;const y=_s(n,p,b);y&&(h[b]=y)}return h}function yi(n){const e=n.$?.order;return e&&e[Object.keys(e)[0]]||"asc"}function Ln(n){const e=n.$?.offset,t=n.$?.before,r=n.$?.after;return!e&&!t&&!r}function bi(n,e,{etype:t,level:r,form:s,join:i,pageInfo:o}){if(!Ln(s)&&(!o||!o["start-cursor"]))return[];const a=Zs(ri(e,t,r,s.$?.where),i),c=si(He,t,r),u=s.$?.fields,l=pi(n,e,{etype:t,pageInfo:o,form:s,dq:{where:a,find:c,fields:u}}),f=s.$?.limit||s.$?.first||s.$?.last;if(f!=null){r>0&&Mn&&console.warn("WARNING: Limits in child queries are only run client-side. Data returned from the server will not have a limit.");const d=Object.entries(l);return d.length<=f?l:Object.fromEntries(d.slice(0,f))}return l}function gi(n,e,t){try{return bi(n,e,t)}catch(r){if(r instanceof Ae)return{};throw r}}function Nn(n,e,t){const r=gi(n,e,t);return oi(He,n,e,t,r)}function mi(n){const e={};for(const[t,r]of Object.entries(n))e[t]={startCursor:r["start-cursor"],endCursor:r["end-cursor"],hasNextPage:r["has-next-page?"],hasPreviousPage:r["has-previous-page?"]};return e}function Ct({store:n,attrsStore:e,pageInfo:t,aggregate:r},s){const o={data:Object.keys(s).reduce(function(c,u){return r?.[u]||u==="$$ruleParams"||(c[u]=Nn(n,e,{etype:u,form:s[u],level:0,pageInfo:t?.[u]})),c},{})};return t&&(o.pageInfo=mi(t)),r&&(o.aggregate=r),o}function wi(){const e={__etype:1,__ops:1,create:1,update:1,link:1,unlink:1,delete:1,merge:1,ruleParams:1};return new Set(Object.keys(e))}const _i=wi();function Ye(n,e,t){const r={__etype:n,__ops:t};return new Proxy(r,{get:(s,i)=>{if(i==="__ops")return t;if(i==="__etype")return n;if(_i.has(i))return(o,a)=>Ye(n,e,[...t,a?[i,n,e,o,a]:[i,n,e,o]])}})}function Fn(n,e){return`lookup__${n}__${JSON.stringify(e)}`}function Ze(n){return n.startsWith("lookup__")}function Et(n){const[e,t,...r]=n.split("__");return[t,JSON.parse(r.join("__"))]}function Si(n){return new Proxy({__etype:n},{get(e,t){if(t==="lookup")return(s,i)=>Ye(n,Et(Fn(s,i)),[]);if(t==="__etype")return n;const r=t;return Ze(r)?Ye(n,Et(r),[]):Ye(n,r,[])}})}function Mt(){return new Proxy({},{get(n,e){return Si(e)}})}const Ti=Mt();function Kn(n){return n.__ops}function vi(n,e){const{attrIdMap:t,refSwapAttrIds:r}=n,s=[];for(const o of e){const a=t[o];if(a)s.push(a);else if(Array.isArray(o)&&o.length==2&&t[o[0]]){const[c,u]=o;s.push([t[c],u])}else s.push(o)}const[i]=e;if((i==="add-triple"||i==="retract-triple")&&r.has(e[2])){const o=s[1];s[1]=s[3],s[3]=o}return s}function Ai(n){if(Array.isArray(n))return n;const e=Object.entries(n);if(e.length!==1)throw new Error("lookup must be an object with a single unique attr and value.");return e[0]}function ki(n,e,t){return t.indexOf(".")!==-1&&!x(n,e,t)}function Pt(n){const[e,t,...r]=n.split(".");if(r.length>0||t!=="id")throw new Error(`${n} is not a valid lookup attribute.`);return e}function Ii(n,e,t){if(!ki(n,e,t))return x(n,e,t);const r=Pt(t),s=x(n,e,r)||ge(n,e,r);if(s&&s["value-type"]!=="ref")throw new Error(`${t} does not reference a valid link attribute.`);return s}function jt(n){return typeof n=="string"&&!Ze(n)?null:typeof n=="string"&&Ze(n)?Et(n):Ai(n)}function J(n,e,t){const r=jt(t);if(r===null)return t;const[s,i]=r,o=Ii(n,e,s);if(!o||!o["unique?"])throw new Error(`${s} is not a unique attribute.`);return[o.id,i]}function qn(n,e,t,r){const s=J(n,e,t);return Array.isArray(s)?[["add-triple",s,x(n,e,"id")?.id,s]].concat(r):r}function Oi({attrsStore:n},[e,t,r]){const s=Object.entries(r).flatMap(([i,o])=>{const a=Array.isArray(o)?o:[o],c=x(n,e,i),u=ge(n,e,i);return a.map(l=>c?["add-triple",J(n,e,t),c.id,J(n,c["reverse-identity"][1],l)]:["add-triple",J(n,u["forward-identity"][1],l),u?.id,J(n,e,t)])});return qn(n,e,t,s)}function Ci({attrsStore:n},[e,t,r]){const s=Object.entries(r).flatMap(([i,o])=>{const a=Array.isArray(o)?o:[o],c=x(n,e,i),u=ge(n,e,i);return a.map(l=>c?["retract-triple",J(n,e,t),c.id,J(n,c["reverse-identity"][1],l)]:["retract-triple",J(n,u["forward-identity"][1],l),u.id,J(n,e,t)])});return qn(n,e,t,s)}function Ei(n,e,t,r){if(Array.isArray(r)){const[s,i]=r;for(const o of n||[]){const a=o?.aev.get(s);if(a){for(const[c,u,l]of H(a,2))if(l===i)return!0}}}else for(const s of n||[]){const i=s?.eav.get(r);if(i){for(const o of i.keys())if(e.getAttr(o)?.["forward-identity"][1]==t)return!0}}return!1}function zn({stores:n,attrsStore:e},[t,r,s,i]){return i?.upsert===!1?{mode:"update"}:i?.upsert===!0?null:Ei(n,e,t,r)?{mode:"update"}:null}function Mi(n,e){const{attrsStore:t}=n,[r,s,i,o]=e,a=mt(i),c=J(t,r,s);return[["id",c]].concat(Object.entries(a)).map(([l,f])=>{const d=x(t,r,l);return d["checked-data-type"]==="date"&&n.useDateObjects&&(f=De(f)),["add-triple",c,d.id,f,{mode:"create"}]})}function Pi(n,e){const{attrsStore:t}=n,[r,s,i,o]=e,a=mt(i),c=J(t,r,s),u=zn(n,[r,c,i,o]);return[["id",c]].concat(Object.entries(a)).map(([f,d])=>{const h=x(t,r,f);return h["checked-data-type"]==="date"&&n.useDateObjects&&(d=De(d)),["add-triple",c,h.id,d,...u?[u]:[]]})}function ji({attrsStore:n},[e,t]){return[["delete-entity",J(n,e,t),e]]}function $i(n,e){const{attrsStore:t}=n,[r,s,i,o]=e,a=mt(i),c=J(t,r,s),u=zn(n,[r,c,i,o]),l=Object.entries(a).map(([d,h])=>{const p=x(t,r,d);return["deep-merge-triple",c,p.id,h,...u?[u]:[]]});return[["add-triple",c,x(t,r,"id").id,c,...u?[u]:[]]].concat(l)}function Ri({attrsStore:n},[e,t,r]){return[["rule-params",J(n,e,t),e,r]]}function Di(n){const[e,t,r,s,i]=n;if(!s)return n;const o={...s};return delete o.id,[e,t,r,o,...i?[i]:[]]}function xi(n,e){const[t,...r]=Di(e);switch(t){case"merge":return $i(n,r);case"create":return Mi(n,r);case"update":return Pi(n,r);case"link":return Oi(n,r);case"unlink":return Ci(n,r);case"delete":return ji(n,r);case"ruleParams":return Ri(n,r);default:throw new Error(`unsupported action ${t}`)}}function Ui(n){switch(n){case"string":case"date":case"boolean":case"number":return n;default:return}}function Li(n,e,t){const r=n.entities[e]?.attrs?.[t];if(t==="id")return null;if(!r)throw new Error(`${e}.${t} does not exist in your schema`);const{unique:s,indexed:i}=r?.config,o=Ui(r?.valueType);return{"index?":i,"unique?":s,"checked-data-type":o}}function Xe(n,e,t,r){const s=n?Li(n,e,t):null,i=$(),a=[$(),e,t];return{id:i,"forward-identity":a,"value-type":"blob",cardinality:"one","unique?":!1,"index?":!1,isUnsynced:!0,...s||{},...r||{}}}function Ni(n,e,t){return Object.values(n.links).find(i=>i.forward.on===e&&i.forward.label===t||i.reverse.on===e&&i.reverse.label===t)}function Fi(n,e,t){const r=Ni(n,e,t);if(!r)throw new Error(`Couldn't find the link ${e}.${t} in your schema`);const{forward:s,reverse:i}=r;return{"forward-identity":[$(),s.on,s.label],"reverse-identity":[$(),i.on,i.label],cardinality:s.has==="one"?"one":"many","unique?":i.has==="one","on-delete":s.onDelete,"on-delete-reverse":i.onDelete}}function Wn(n,e,t,r){const s=n?Fi(n,e,t):null,i=$(),o=[$(),e,t],a=[$(),t,e];return{id:i,"forward-identity":o,"reverse-identity":a,"value-type":"ref",cardinality:"many","unique?":!1,"index?":!1,isUnsynced:!0,...s||{},...r||{}}}const Ki=new Set(["create","update","merge","link","unlink"]),qi=new Set(["link","unlink"]),zi=new Set(["create","update","merge"]),Wi=new Set(["link","unlink","create","update","merge","delete","ruleParams"]),$t={"unique?":!0,"index?":!0},Qi={...$t,cardinality:"one"};function Vi(n){const e=[],[t,r,s,i]=n;if(!Wi.has(t))return e;const o=jt(s);if(o&&e.push({etype:r,lookupPair:o}),t==="link")for(const[a,c]of Object.entries(i)){const u=Array.isArray(c)?c:[c];for(const l of u){const f=jt(l);f&&e.push({etype:r,lookupPair:f,linkLabel:a})}}return e}function Bi({attrsStore:n,schema:e},t){const r=new Set,s=[],i=[];function o(d,h){return x(n,d,h)||s.find(p=>p["forward-identity"][1]===d&&p["forward-identity"][2]===h)}function a(d,h){return ge(n,d,h)||s.find(p=>p["reverse-identity"]?.[1]===d&&p["reverse-identity"]?.[2]===h)}function c(d){s.push(d),i.push(["add-attr",d]),r.add(d.id)}function u(d){d&&"isUnsynced"in d&&d.isUnsynced&&!r.has(d.id)&&(s.push(d),i.push(["add-attr",d]),r.add(d.id))}function l(d,h){return h.indexOf(".")!==-1&&!o(d,h)}function f(d,h){const p=o(d,h),m=a(d,h);u(p),u(m),!p&&!m&&c(Wn(e,d,h,Qi))}for(const d of t)for(const{etype:h,lookupPair:p,linkLabel:m}of Vi(d)){const b=p[0];if(m){f(h,m);const y=o(h,m),g=a(h,m);u(y),u(g);const k=y?.["reverse-identity"]?.[1]||g?.["forward-identity"]?.[1]||m;if(l(k,b))f(k,Pt(b));else{const L=o(k,b);L||c(Xe(e,k,b,$t)),u(L)}}else if(l(h,b))f(h,Pt(b));else{const y=o(h,b);y||c(Xe(e,h,b,$t)),u(y)}}for(const d of t){const[h,p,m,b]=d;if(Ki.has(h)){const y=o(p,"id");u(y),y||c(Xe(e,p,"id",{"unique?":!0}));for(const g of Object.keys(b)){const k=o(p,g);if(u(k),zi.has(h)&&(k||c(Xe(e,p,g,g==="id"?{"unique?":!0}:null))),qi.has(h)){const L=a(p,g);!k&&!L&&c(Wn(e,p,g)),u(L)}}}}if(s.length){const d={...n.attrs};for(const h of s)d[h.id]=h;return[new he(d,n.linkIndex),i]}return[n,i]}function Gi(n,e){const r=(Array.isArray(e)?e:[e]).flatMap(c=>Kn(c)),[s,i]=Bi(n,r),o={...n,attrsStore:s},a=r.flatMap(c=>xi(o,c));return[...i,...a]}function Qn(n,e){typeof requestIdleCallback>"u"?n():requestIdleCallback(n,{timeout:e})}const ke="__meta";class Rt{constructor(e,t){}}class Dt{currentValue;_subs=[];_persister;_merge;serialize;parse;_saveThrottleMs;_idleCallbackMaxWaitMs;_nextSave=null;_nextGc=null;_pendingSaveKeys=new Set;_loadedKeys=new Set;_loadingKeys;_objectSize;_log;onKeyLoaded;_version=0;_meta={isLoading:!0,onLoadCbs:[],value:null,error:null,attempts:0};_gcOpts;constructor(e){this._persister=e.persister,this._merge=e.merge,this.serialize=e.serialize,this.parse=e.parse,this._objectSize=e.objectSize,this._log=e.logger,this._saveThrottleMs=e.saveThrottleMs??100,this._idleCallbackMaxWaitMs=e.idleCallbackMaxWaitMs??1e3,this._gcOpts=e.gc,this.currentValue={},this._loadedKeys=new Set,this._loadingKeys={},this._initMeta(),e.preloadEntryCount&&this._preloadEntries(e.preloadEntryCount)}async _initMeta(){this._meta.loadingPromise&&await this._meta.loadingPromise;try{const e=this._persister.getItem(ke);this._meta.loadingPromise=e;const t=await e;this._meta.isLoading=!1,this._meta.error=null,this._meta.loadingPromise=null,this._meta.attempts=0;const r=this._meta.value?.objects??{},s=t??{},i=s.objects??{};this._meta.value={...s,objects:{...r,...i}}}catch(e){this._meta.error=e,this._meta.attempts++,this._meta.loadingPromise=null}}async _getMeta(){return this._meta.value?this._meta.value:this._meta.loadingPromise?(await this._meta.loadingPromise,this._meta.value):(this._initMeta(),await this._meta.loadingPromise,this._meta.value)}async _refreshMeta(){return await this._initMeta(),this._meta.value}async _preloadEntries(e){const t=await this.waitForMetaToLoad();if(!t)return;const r=Object.entries(t.objects);r.sort(([s,i],[o,a])=>a.updatedAt-i.updatedAt);for(const[s]of r.slice(0,e))this._loadKey(s)}async _getFromStorage(e){try{const t=await this._persister.getItem(e);return t&&this.parse(e,t)}catch(t){return console.error(`Unable to read from storage for key=${e}`,t),null}}async waitForKeyToLoad(e){return this._loadedKeys.has(e)?this.currentValue[e]:(await(this._loadingKeys[e]||this._loadKey(e)),this.currentValue[e])}async waitForMetaToLoad(){return this._getMeta()}unloadKey(e){this._loadedKeys.delete(e),delete this._loadingKeys[e],delete this.currentValue[e]}async _loadKey(e){if(this._loadedKeys.has(e)||e in this._loadingKeys)return;const t=this._getFromStorage(e);this._loadingKeys[e]=t;const r=await t;if(delete this._loadingKeys[e],this._loadedKeys.add(e),r){const s=this._merge(e,r,this.currentValue[e]);s&&(this.currentValue[e]=s)}this.onKeyLoaded&&this.onKeyLoaded(e)}_writeToStorage(e){const t=[],r=e?.skipGc;if(this._meta.isLoading){const f=new Promise((d,h)=>{setTimeout(()=>this._enqueuePersist(e?{...e,attempts:(e.attempts||0)+1}:{attempts:1}).then(d).catch(h),10+(e?.attempts??0)*1e3)});return t.push(f),Promise.all(t).then(d=>d.reduce((h,p)=>h+p,0))}const s=this._meta.value;if(!s)return Promise.resolve(0);const i=[],o=[];for(const f of this._pendingSaveKeys)f in this.currentValue?o.push(f):(i.push(f),delete s.objects[f]);for(const f of i){const d=this._persister.removeItem(f);t.push(d.then(()=>1)),this._loadedKeys.delete(f),this._pendingSaveKeys.delete(f)}const a=[],c=[[ke,s]],u=s.objects??{};s.objects=u;for(const f of o)if(this._loadedKeys.has(f)){const d=this.serialize(f,this.currentValue[f]);c.push([f,d]);const h=this._objectSize(d),p=u[f]??{createdAt:Date.now(),updatedAt:Date.now(),size:h};p.updatedAt=Date.now(),p.size=h,u[f]=p,this._pendingSaveKeys.delete(f)}else a.push(f);const l=this._persister.multiSet(c);t.push(l.then(()=>1));for(const f of a){const d=this._loadKey(f).then(()=>this._enqueuePersist(e));t.push(d)}return r||this.gc(),Promise.all(t).then(f=>f.reduce((d,h)=>d+h,0))}async flush(){return this._nextSave?(clearTimeout(this._nextSave),this._nextSave=null,this._writeToStorage()):void 0}async _gc(){if(!this._gcOpts)return;const e=new Set(await this._persister.getAllKeys());e.delete(ke);const t=new Set(Object.keys(this.currentValue));for(const d of Object.keys(this._loadingKeys))t.add(d);for(const d of this._loadedKeys)t.add(d);const r=await this._refreshMeta();if(!r){this._log.info("Could not gc because we were not able to load meta");return}const s=[],i={gcOpts:this._gcOpts,keys:e,sacredKeys:t,removed:[],metaRemoved:[],removedMissingCount:0,removedOldCount:0,removedThresholdCount:0,removedSizeCount:0};for(const d of e)t.has(d)||d in r.objects||(this._log.info("Lost track of key in meta",d),s.push(this._persister.removeItem(d)),i.removed.push(d),i.removedMissingCount++);const o=Date.now();for(const[d,h]of Object.entries(r.objects))!t.has(d)&&h.updatedAt<o-this._gcOpts.maxAgeMs&&(s.push(this._persister.removeItem(d)),delete r.objects[d],i.removed.push(d),i.removedOldCount++);const a=Object.entries(r.objects);a.sort(([d,h],[p,m])=>h.updatedAt-m.updatedAt);const c=a.filter(([d])=>!t.has(d));if(a.length>this._gcOpts.maxEntries)for(const[d]of c.slice(0,a.length-this._gcOpts.maxEntries))s.push(this._persister.removeItem(d)),delete r.objects[d],i.removed.push(d),i.removedThresholdCount++;const u=Object.entries(r.objects);u.sort(([d,h],[p,m])=>h.updatedAt-m.updatedAt);const l=u.filter(([d])=>!t.has(d));let f=u.reduce((d,[h,p])=>d+p.size,0);for(;f>0&&f>this._gcOpts.maxSize&&l.length;){const[[d,h]]=l.splice(0,1);f-=h.size,s.push(this._persister.removeItem(d)),delete r.objects[d],i.removed.push(d),i.removedSizeCount++}for(const d of Object.keys(r.objects))!e.has(d)&&!t.has(d)&&delete r.objects[d];return(i.removed.length||i.metaRemoved.length)&&s.push(this._enqueuePersist({skipGc:!0})),this._log.info("Completed GC",i),await Promise.all(s),i}gc(){this._nextGc||(this._nextGc=setTimeout(()=>{Qn(()=>{this._nextGc=null,this._gc().catch(e=>this._log.error("Persisted Object GC Failed:",e))},30*1e3)},1e3*60+Math.random()*500))}_enqueuePersist(e){return new Promise((t,r)=>{if(this._nextSave){t(0);return}this._nextSave=setTimeout(()=>{Qn(()=>{this._nextSave=null,this._writeToStorage(e).then(t).catch(r)},this._idleCallbackMaxWaitMs)},this._saveThrottleMs)})}version(){return this._version}updateInPlace(e){this._version++;const[t,r]=Ve(this.currentValue,e,{enablePatches:!0});for(const s of r){const i=s.path[0];i&&typeof i=="string"&&(this._pendingSaveKeys.add(i),this._loadedKeys.has(i)||this._loadKey(i))}this.currentValue=t,this._enqueuePersist();for(const s of this._subs)s(this.currentValue);return t}subscribe(e){return this._subs.push(e),e(this.currentValue),()=>{this._subs=this._subs.filter(t=>t!==e)}}async clearUnloadedKeys(){let e=!1;for(const t of await this._persister.getAllKeys())t===ke||t in this.currentValue||(this._pendingSaveKeys.add(t),e=!0);e&&await this._enqueuePersist()}}const Hi=6,Ji=["kv","querySubs","syncSubs"];function Yi(n){return function(t){console.error("Error in IndexedDB event",{source:n,event:t})}}async function Zi(n){return new Promise(e=>{const t=indexedDB.open(n);t.onerror=r=>{e(null)},t.onsuccess=r=>{const i=r.target.result;e(i)},t.onupgradeneeded=r=>{r.target.transaction?.abort(),e(null)}})}async function Xi(n,e,t){const r=typeof e=="string"?JSON.parse(e):e;if(!r)return;const s=new Set;return new Promise((i,o)=>{const a={};for(const[l,f]of Object.entries(r)){const d=typeof f=="string"?JSON.parse(f):f;if(d.lastAccessed){const p={createdAt:d.lastAccessed,updatedAt:d.lastAccessed,size:d.result?.store?.triples?.length??0};a[l]=p}const h=t.put(d,l);s.add(h)}const c={objects:a},u=t.put(c,ke);s.add(u);for(const l of s)l.onsuccess=()=>{s.delete(l),s.size===0&&i()},l.onerror=f=>{o(f)}})}async function Vn(n,e,t){const r=t.put(e,n);return new Promise((s,i)=>{r.onsuccess=()=>s(),r.onerror=o=>i(o)})}async function eo(n,e){const t=await Zi(`instant_${n}_5`);if(!t)return;const r=await new Promise((l,f)=>{const p=t.transaction(["kv"],"readonly").objectStore("kv").openCursor();p.onerror=b=>{f(b)};const m=[];p.onsuccess=()=>{const b=p.result;if(b){const y=b.key,g=b.value;m.push([y,g]),b.continue()}else l(m)},p.onerror=b=>{f(b)}}),s=e.transaction(["kv","querySubs"],"readwrite"),i=s.objectStore("kv"),o=s.objectStore("querySubs"),a=[],c={objects:{}};for(const[l,f]of r)if(l==="querySubs"){const d=Xi(l,f,o);a.push(d)}else{const d=Vn(l,f,i);a.push(d);const h={createdAt:Date.now(),updatedAt:Date.now(),size:0};c.objects[l]=h}const u=Vn(ke,c,i);a.push(u),await Promise.all(a),await new Promise((l,f)=>{s.oncomplete=d=>l(d),s.onerror=d=>f(d),s.onabort=d=>f(d)})}const Bn=new Map;class xt extends Rt{dbName;_storeName;_appId;_prefix;_dbPromise;constructor(e,t){super(e,t),this.dbName=`instant_${e}_${Hi}`,this._storeName=t,this._appId=e,this._dbPromise=this._init()}_init(){return new Promise((e,t)=>{let r=!1;const s=indexedDB.open(this.dbName,1);s.onerror=i=>{t(i)},s.onsuccess=i=>{const a=i.target.result;if(a.onclose=()=>{this._dbPromise=this._init()},a.onversionchange=()=>{a.close()},r){const c=eo(this._appId,a).catch(u=>{Yi("Error upgrading store from version 5 to 6.")(u)});Bn.set(this.dbName,c),c.then(()=>e(a)).catch(()=>e(a))}else{const c=Bn.get(this.dbName);c?c.then(()=>e(a)).catch(()=>e(a)):e(a)}},s.onupgradeneeded=i=>{r=!0,this._upgradeStore(i)}})}_upgradeStore(e){const r=e.target.result;for(const s of Ji)r.objectStoreNames.contains(s)||r.createObjectStore(s)}async _withRetry(e){try{const t=await this._dbPromise;return await e(t)}catch(t){if(t instanceof DOMException&&t.name==="InvalidStateError"){this._dbPromise=this._init();const r=await this._dbPromise;return await e(r)}throw t}}async getItem(e){return this._withRetry(t=>new Promise((r,s)=>{const a=t.transaction([this._storeName],"readonly").objectStore(this._storeName).get(e);a.onerror=()=>{s(a.error)},a.onsuccess=()=>{a.result?r(a.result):r(null)}}))}async setItem(e,t){return this._withRetry(r=>new Promise((s,i)=>{const o=r.transaction([this._storeName],"readwrite");o.objectStore(this._storeName).put(t,e),o.oncomplete=()=>s(),o.onerror=()=>i(o.error),o.onabort=()=>i(o.error),o.commit?.()}))}async multiSet(e){return this._withRetry(t=>new Promise((r,s)=>{const i=t.transaction([this._storeName],"readwrite"),o=i.objectStore(this._storeName);for(const[a,c]of e)o.put(c,a);i.oncomplete=()=>r(),i.onerror=()=>s(i.error),i.onabort=()=>s(i.error),i.commit?.()}))}async removeItem(e){return this._withRetry(t=>new Promise((r,s)=>{const i=t.transaction([this._storeName],"readwrite");i.objectStore(this._storeName).delete(e),i.oncomplete=()=>r(),i.onerror=()=>s(i.error),i.onabort=()=>s(i.error),i.commit?.()}))}async getAllKeys(){return this._withRetry(e=>new Promise((t,r)=>{const o=e.transaction([this._storeName],"readonly").objectStore(this._storeName).getAllKeys();o.onerror=()=>{r(o.error)},o.onsuccess=()=>{t(o.result.filter(a=>typeof a=="string"))}}))}}class Ut{static async getIsOnline(){return navigator.onLine}static listen(e){const t=()=>{e(!0)},r=()=>{e(!1)};return addEventListener("online",t),addEventListener("offline",r),()=>{removeEventListener("online",t),removeEventListener("offline",r)}}}class U extends Error{hint;traceId;constructor(e,t,r){super(e),this.hint=t,r&&(this.traceId=r);const s=new.target.prototype;Object.setPrototypeOf&&Object.setPrototypeOf(this,s),Error.captureStackTrace&&Error.captureStackTrace(this,U),this.name="InstantError"}get[Symbol.toStringTag](){return"InstantError"}}class Ie extends U{body;status;constructor(e){const t=e.body?.message||`API Error (${e.status})`;super(t,e.body.hint,e.body?.traceId||e.body["trace-id"]);const r=new.target.prototype;Object.setPrototypeOf&&Object.setPrototypeOf(this,r),Error.captureStackTrace&&Error.captureStackTrace(this,Ie),this.name="InstantAPIError",this.status=e.status,this.body=e.body}get[Symbol.toStringTag](){return"InstantAPIError"}}async function oe(n,e){const t=await fetch(n,e),r=await t.json();return t.status===200?Promise.resolve(r):Promise.reject(new Ie({status:t.status,body:r}))}function to({apiURI:n,appId:e,email:t}){return oe(`${n}/runtime/auth/send_magic_code`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({"app-id":e,email:t})})}async function no({apiURI:n,appId:e,email:t,code:r,refreshToken:s,extraFields:i}){return await oe(`${n}/runtime/auth/verify_magic_code`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({"app-id":e,email:t,code:r,...s?{"refresh-token":s}:{},...i?{"extra-fields":i}:{}})})}async function ro({apiURI:n,appId:e,refreshToken:t}){return await oe(`${n}/runtime/auth/verify_refresh_token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({"app-id":e,"refresh-token":t})})}async function so({apiURI:n,appId:e,extraFields:t}){return await oe(`${n}/runtime/auth/sign_in_guest`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({"app-id":e,...t?{"extra-fields":t}:{}})})}async function Gn({apiURI:n,appId:e,code:t,codeVerifier:r,refreshToken:s,extraFields:i}){return await oe(`${n}/runtime/oauth/token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({app_id:e,code:t,code_verifier:r,refresh_token:s,...i?{extra_fields:i}:{}})})}async function io({apiURI:n,appId:e,nonce:t,idToken:r,clientName:s,refreshToken:i,extraFields:o}){return await oe(`${n}/runtime/oauth/id_token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({app_id:e,nonce:t,id_token:r,client_name:s,refresh_token:i,...o?{extra_fields:o}:{}})})}async function oo({apiURI:n,appId:e,refreshToken:t}){return await oe(`${n}/runtime/signout`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({app_id:e,refresh_token:t})})}async function ao({apiURI:n,appId:e,path:t,file:r,refreshToken:s,contentType:i,contentDisposition:o}){const a={"app-id":e,app_id:e,path:t,authorization:`Bearer ${s}`,"content-type":i||r.type};return o&&(a["content-disposition"]=o),await oe(`${n}/storage/upload`,{method:"PUT",headers:a,body:r})}async function co({apiURI:n,appId:e,path:t,refreshToken:r}){const{data:s}=await oe(`${n}/storage/files?app_id=${e}&filename=${encodeURIComponent(t)}`,{method:"DELETE",headers:{"content-type":"application/json",authorization:`Bearer ${r}`}});return s}async function uo({apiURI:n,appId:e,fileName:t,refreshToken:r,metadata:s={}}){const{data:i}=await oe(`${n}/storage/signed-upload-url`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${r}`},body:JSON.stringify({app_id:e,filename:t})});return i}async function lo(n,e){return(await fetch(n,{method:"PUT",body:e,headers:{"Content-Type":e.type}})).ok}async function fo({apiURI:n,appId:e,path:t,refreshToken:r}){const{data:s}=await oe(`${n}/storage/signed-download-url?app_id=${e}&filename=${encodeURIComponent(t)}`,{method:"GET",headers:{"content-type":"application/json",authorization:`Bearer ${r}`}});return s}let Lt=!1,Hn=!1,Jn=!1;typeof window<"u"&&typeof window.localStorage<"u"&&(Lt=!!window.localStorage.getItem("devBackend"),Hn=!!window.localStorage.getItem("__instantLogging"),Jn=!!window.localStorage.getItem("__devtoolLocalDash"));function Yn(n,e){if(!e)return n;const t={};return e.forEach(r=>{t[r]=n[r]}),t}function ho(n,e,t){const r={peers:{}};if(e&&"user"in e?e.user:!0){const i=Yn(n.user??{},e?.keys);r.user={...i,peerId:t}}for(const i of Object.keys(n.peers??{})){const o=e?.peers===void 0,a=Array.isArray(e?.peers)&&e?.peers.includes(i);if(o||a){const c=Yn(n.peers[i],e?.keys);r.peers[i]={...c,peerId:i}}}return r}function po(n,e){if(n.isLoading!==e.isLoading||n.error!==e.error||(n.user||e.user)&&(!n.user||!e.user||!dn(n.user,e.user))||!ln(n.peers,e.peers))return!0;for(const r of Object.keys(n.peers))if(!dn(n.peers[r],e.peers[r]))return!0;return!1}class Zn{promise;_resolve;_reject;constructor(){this.promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}resolve(e){this._resolve(e)}reject(e){this._reject(e)}}function Xn(n,e=[]){n.forEach(t=>{const{data:r}=t,{"datalog-result":s}=r,{"join-rows":i}=s;for(const o of i)for(const a of o)e.push(a);Xn(t["child-nodes"],e)})}function er(n){const e=[];return Xn(n,e),e}function Nt(n){return Object.values(n.links).reduce((e,t)=>(e[t.forward.on]??={},e[t.forward.on][t.forward.label]={isForward:!0,isSingular:t.forward.has==="one",link:t},e[t.reverse.on]??={},e[t.reverse.on][t.reverse.label]={isForward:!1,isSingular:t.reverse.has==="one",link:t},e),{})}const Ft="v1.0.67";function yo(n,e,t=console){return{info:n?(...r)=>t.info(...r,e()):()=>{},debug:n?(...r)=>t.debug(...r,e()):()=>{},error:n?(...r)=>t.error(...r,e()):()=>{}}}class Q{constructor(e,t,r,s={indexed:!1,unique:!1}){this.valueType=e,this.required=t,this.isIndexed=r,this.config=s}metadata={};clientRequired(){return new Q(this.valueType,!1,this.isIndexed,this.config)}optional(){return new Q(this.valueType,!1,this.isIndexed,this.config)}unique(){return new Q(this.valueType,this.required,this.isIndexed,{...this.config,unique:!0})}indexed(){return new Q(this.valueType,this.required,!0,{...this.config,indexed:!0})}}class et{constructor(e,t){this.attrs=e,this.links=t}asType(){return new et(this.attrs,this.links)}}class tt{constructor(e,t,r){this.entities=e,this.links=t,this.rooms=r}withRoomSchema(){return new tt(this.entities,this.links,{})}}class P extends Error{constructor(e,t){const r=t?`At path '${t}': ${e}`:e;super(r),this.name="QueryValidationError"}}const tr=["where","order","limit","last","first","offset","after","afterInclusive","before","beforeInclusive","fields","aggregate"],bo=n=>n.valueType||"unknown",nr=(n,e,t=!1)=>{if(t||n==null)return!0;switch(e){case"string":return typeof n=="string";case"number":return typeof n=="number"&&!isNaN(n);case"boolean":return typeof n=="boolean";case"date":return n instanceof Date||typeof n=="string"||typeof n=="number";default:return!0}},go=(n,e,t,r,s,i,o)=>{const a=i.valueType==="json",c=(u,l,f)=>{if(!nr(f,l,a))throw new P(`Invalid value for operator '${u}' on attribute '${r}' in entity '${s}'. Expected ${l}, but received: ${typeof f}`,o)};switch(n){case"in":case"$in":if(!Array.isArray(e))throw new P(`Operator '${n}' for attribute '${r}' in entity '${s}' must be an array, but received: ${typeof e}`,o);for(const u of e)c(n,t,u);break;case"$not":case"$ne":case"$gt":case"$lt":case"$gte":case"$lte":c(n,t,e);break;case"$like":case"$ilike":if(c(n,"string",e),n==="$ilike"&&!i.isIndexed)throw new P(`Operator '${n}' can only be used with indexed attributes, but '${r}' in entity '${s}' is not indexed`,o);break;case"$isNull":c(n,"boolean",e);break;default:throw new P(`Unknown operator '${n}' for attribute '${r}' in entity '${s}'`,o)}},Oe=(n,e,t,r,s)=>{const i=bo(t),o=t.valueType==="json";if(typeof n=="object"&&n!==null&&!Array.isArray(n)){if(o)return;const c=n;for(const[u,l]of Object.entries(c))go(u,l,i,e,r,t,`${s}.${u}`)}else if(!nr(n,i,o))throw new P(`Invalid value for attribute '${e}' in entity '${r}'. Expected ${i}, but received: ${typeof n}`,s)},mo=(n,e,t,r,s)=>{const i=n.split(".");if(i.length<2)throw new P(`Invalid dot notation path '${n}'. Must contain at least one dot.`,s);let o=t;for(let l=0;l<i.length-1;l++){const f=i[l],d=r.entities[o];if(!d)throw new P(`Entity '${o}' does not exist in schema while traversing dot notation path '${n}'.`,s);const h=d.links[f];if(!h){const p=Object.keys(d.links);throw new P(`Link '${f}' does not exist on entity '${o}' in dot notation path '${n}'. Available links: ${p.length>0?p.join(", "):"none"}`,s)}o=h.entityName}const a=i[i.length-1],c=r.entities[o];if(!c)throw new P(`Target entity '${o}' does not exist in schema for dot notation path '${n}'.`,s);if(a==="id"){if(typeof e=="string"&&!ve(e))throw new P(`Invalid value for id field in entity '${o}'. Expected a UUID, but received: ${e}`,s);Oe(e,n,new Q("string",!1,!0),t,s);return}const u=c.attrs[a];if(Object.keys(c.links).includes(a)){if(typeof e=="string"&&!ve(e))throw new P(`Invalid value for link '${a}' in entity '${o}'. Expected a UUID, but received: ${e}`,s);Oe(e,n,new Q("string",!1,!0),t,s);return}if(!u){const l=Object.keys(c.attrs);throw new P(`Attribute '${a}' does not exist on entity '${o}' in dot notation path '${n}'. Available attributes: ${l.length>0?l.join(", ")+", id":"id"}`,s)}Oe(e,n,u,t,s)},rr=(n,e,t,r)=>{for(const[s,i]of Object.entries(n)){if(s==="or"||s==="and"){if(Array.isArray(i))for(const u of i)typeof u=="object"&&u!==null&&rr(u,e,t,`${r}.${s}[${u}]`);continue}if(s==="id"){Oe(i,"id",new Q("string",!1,!0),e,`${r}.id`);continue}if(s.includes(".")){mo(s,i,e,t,`${r}.${s}`);continue}const o=t.entities[e];if(!o)continue;const a=o.attrs[s],c=o.links[s];if(!a&&!c){const u=Object.keys(o.attrs),l=Object.keys(o.links);throw new P(`Attribute or link '${s}' does not exist on entity '${e}'. Available attributes: ${u.length>0?u.join(", "):"none"}. Available links: ${l.length>0?l.join(", "):"none"}`,`${r}.${s}`)}if(a)Oe(i,s,a,e,`${r}.${s}`);else if(c){if(typeof i=="string"&&!ve(i))throw new P(`Invalid value for link '${s}' in entity '${e}'. Expected a UUID, but received: ${i}`,`${r}.${s}`);const u=new Q("string",!1,!0);Oe(i,s,u,e,`${r}.${s}`)}}},wo=(n,e,t,r,s=0)=>{for(const o of Object.keys(n))if(!tr.includes(o))throw new P(`Invalid query parameter '${o}' in $ object. Valid parameters are: ${tr.join(", ")}. Found: ${o}`,r);const i=["offset","before","beforeInclusive","after","afterInclusive","first","last"];for(const o of i)if(n[o]!==void 0&&s>0)throw new P(`'${o}' can only be used on top-level namespaces. It cannot be used in nested queries.`,r);if(n.where&&t){if(typeof n.where!="object"||n.where===null)throw new P(`'where' clause must be an object in entity '${e}', but received: ${typeof n.where}`,r?`${r}.where`:void 0);rr(n.where,e,t,r?`${r}.where`:"where")}},sr=(n,e,t,r,s=0)=>{if(!n||typeof n!="object")throw new P(`Query part for entity '${e}' must be an object, but received: ${typeof n}`,r);for(const i of Object.keys(n))if(i!=="$"){if(t&&!(i in t.entities[e].links)){const a=Object.keys(t.entities[e].links);throw new P(`Link '${i}' does not exist on entity '${e}'. Available links: ${a.length>0?a.join(", "):"none"}`,`${r}.${i}`)}const o=n[i];if(typeof o=="object"&&o!==null){const a=t?.entities[e].links[i]?.entityName;a&&sr(o,a,t,`${r}.${i}`,s+1)}}else{const o=n[i];if(typeof o!="object"||o===null)throw new P(`Query parameter '$' must be an object in entity '${e}', but received: ${typeof o}`,`${r}.$`);wo(o,e,t,`${r}.$`,s)}},Kt=(n,e)=>{if(typeof n!="object"||n===null)throw new P(`Query must be an object, but received: ${typeof n}${n===null?" (null)":""}`);if(Array.isArray(n))throw new P(`Query must be an object, but received: ${typeof n}`);const t=n;for(const r of Object.keys(t)){if(Array.isArray(n[r]))throw new P(`Query keys must be strings, but found key of type: ${typeof r}`,r);if(typeof r!="string")throw new P(`Query keys must be strings, but found key of type: ${typeof r}`,r);if(r!=="$$ruleParams"){if(e&&!e.entities[r]){const s=Object.keys(e.entities);throw new P(`Entity '${r}' does not exist in schema. Available entities: ${s.length>0?s.join(", "):"none"}`,r)}sr(t[r],r,e,r,0)}}},ir=n=>typeof n!="string"?!1:Ze(n)?!0:ve(n);class te extends Error{constructor(e){super(e),this.name="TransactionValidationError"}}const or=n=>n.length>0?n.join(", "):"none",_o=(n,e)=>new te(`Entity '${n}' does not exist in schema. Available entities: ${or(e)}`),So={string:n=>typeof n=="string",number:n=>typeof n=="number"&&!isNaN(n),boolean:n=>typeof n=="boolean",date:n=>n instanceof Date||typeof n=="string"||typeof n=="number",json:()=>!0},To=(n,e)=>n==null?!0:So[e.valueType]?.(n)??!1,ar=(n,e)=>{const t=e.entities[n];if(!t)throw _o(n,Object.keys(e.entities));return t},qt=(n,e,t)=>{const r=ar(n,t);if(typeof e!="object"||e===null)throw new te(`Arguments for data operation on entity '${n}' must be an object, but received: ${typeof e}`);for(const[s,i]of Object.entries(e)){if(s==="id")continue;const o=r.attrs[s];if(o&&!To(i,o))throw new te(`Invalid value for attribute '${s}' in entity '${n}'. Expected ${o.valueType}, but received: ${typeof i}`)}},cr=(n,e,t)=>{const r=ar(n,t);if(typeof e!="object"||e===null)throw new te(`Arguments for link operation on entity '${n}' must be an object, but received: ${typeof e}`);for(const[s,i]of Object.entries(e)){if(!r.links[s]){const a=Object.keys(r.links);throw new te(`Link '${s}' does not exist on entity '${n}'. Available links: ${or(a)}`)}if(i!=null){if(Array.isArray(i)){for(const a of i)if(!ir(a))throw new te(`Invalid entity ID in link '${s}' for entity '${n}'. Expected a UUID or a lookup, but received: ${a}`)}else if(!ir(i))throw new te(`Invalid UUID in link '${s}' for entity '${n}'. Expected a UUID, but received: ${i}`)}}},vo={create:qt,update:qt,merge:qt,link:cr,unlink:cr,delete:()=>{}},Ao=(n,e)=>{if(!e)return;const[t,r,s,i]=n;if(!Array.isArray(s)&&!ve(s))throw new te(`Invalid id for entity '${r}'. Expected a UUID, but received: ${s}`);if(typeof r!="string")throw new te(`Entity name must be a string, but received: ${typeof r}`);const o=vo[t];o&&i!==void 0&&o(r,i,e)},ur=(n,e)=>{const t=Array.isArray(n)?n:[n];for(const r of t){if(!r||typeof r!="object")throw new te(`Transaction chunk must be an object, but received: ${typeof r}`);if(!Array.isArray(r.__ops))throw new te(`Transaction chunk must have __ops array, but received: ${typeof r.__ops}`);for(const s of r.__ops){if(!Array.isArray(s))throw new te(`Transaction operation must be an array, but received: ${typeof s}`);Ao(s,e)}}};let lr=0;class dr{type="ws";conn;id;onopen;onmessage;onclose;onerror;constructor(e){this.id=`${this.type}_${lr++}`,this.conn=new WebSocket(e),this.conn.onopen=t=>{this.onopen&&this.onopen({target:this})},this.conn.onmessage=t=>{this.onmessage&&this.onmessage({target:this,message:JSON.parse(t.data.toString())})},this.conn.onclose=t=>{this.onclose&&this.onclose({target:this})},this.conn.onerror=t=>{this.onerror&&this.onerror({target:this})}}close(){this.conn.close()}isOpen(){return this.conn.readyState===(WebSocket.OPEN??1)}isConnecting(){return this.conn.readyState===(WebSocket.CONNECTING??0)}send(e){return this.conn.send(JSON.stringify(e))}}class fr{type="sse";initParams=null;sendQueue=[];sendPromise;closeFired=!1;sseInitTimeout=void 0;ES;messageUrl;conn;url;id;onopen;onmessage;onclose;onerror;constructor(e,t,r){this.id=`${this.type}_${lr++}`,this.url=t,this.messageUrl=r||this.url,this.ES=e,this.conn=new e(t),this.sseInitTimeout=setTimeout(()=>{this.initParams||this.handleError()},1e4),this.conn.onmessage=s=>{const i=JSON.parse(s.data);if(Array.isArray(i))for(const o of i)this.handleMessage(o);else this.handleMessage(i)},this.conn.onerror=s=>{this.handleError()}}handleMessage(e){if(e.op==="sse-init"){this.initParams={machineId:e["machine-id"],sessionId:e["session-id"],sseToken:e["sse-token"]},this.onopen&&this.onopen({target:this}),clearTimeout(this.sseInitTimeout);return}this.onmessage&&this.onmessage({target:this,message:e})}handleError(){try{this.onerror&&this.onerror({target:this})}finally{this.handleClose()}}handleClose(){this.conn.close(),this.onclose&&!this.closeFired&&(this.closeFired=!0,this.onclose({target:this}))}async postMessages(e){try{(await fetch(this.messageUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machine_id:this.initParams?.machineId,session_id:this.initParams?.sessionId,sse_token:this.initParams?.sseToken,messages:e})})).ok||this.handleError()}catch{this.handleError()}}async flushQueue(){if(this.sendPromise||!this.sendQueue.length)return;const e=this.sendQueue;this.sendQueue=[];const t=this.postMessages(e);this.sendPromise=t,t.then(()=>{this.sendPromise=null,this.flushQueue()})}send(e){if(!this.isOpen()||!this.initParams)throw this.isConnecting()?new Error("Failed to execute 'send' on 'EventSource': Still in CONNECTING state."):this.conn.readyState===this.ES.CLOSED?new Error("EventSource is already in CLOSING or CLOSED state."):new Error("EventSource is in invalid state.");this.sendQueue.push(e),this.flushQueue()}isOpen(){return this.conn.readyState===this.ES.OPEN&&this.initParams!==null}isConnecting(){return this.conn.readyState===this.ES.CONNECTING||this.conn.readyState===this.ES.OPEN&&this.initParams===null}close(){this.handleClose()}}function ko(n,e){const t=n.values;if(t){const r=wn(t.attrsStore,null);if(r){for(const s of t.entities||[])s.store.useDateObjects=e,s.store=mn(r,s.store);t.attrsStore=r}}return n}function Io(n,e){if(e.values){const t=[];for(const r of e.values?.entities){const s=gn(r.store);t.push({...r,store:s})}return{...e,values:{attrsStore:e.values.attrsStore.toJSON(),entities:t}}}else return e}function Oo(n,e,t){const r=e?.state?.txId,s=t?.state?.txId;return r&&(!s||r>s)?e:s&&(!r||s>r)?t:e||t}function zt(n,e,t){return Ct({store:e,attrsStore:t,pageInfo:null,aggregate:null},n.query).data[n.table][0]}function hr(n,e,t,r){const s=x(t,n.table,"id")?.id;if(!s)return-1;const i=Se(e.eav,[r,s,r]);return i?i[3]:-1}function pr(n,e,t){for(const{action:r,triple:s}of t)switch(r){case"added":Tn(n,e,s);break;case"removed":_n(n,e,s);break}}function Co(n,e,t){const r={};for(const{action:s,triple:i}of t){const[o,a,c]=i,u=e.getAttr(a)?.["forward-identity"]?.[2];if(!u)continue;const l=r[o]??{};r[o]=l;const f=l[u]??{};switch(s){case"added":f.newValue=c;break;case"removed":f.oldValue===void 0&&(f.oldValue=c);break}l[u]=f}for(const[s,i]of Object.entries(r))for(const[o,{oldValue:a,newValue:c}]of Object.entries(i))a===c&&delete i[o];return r}function nt(n,e){return{[n.table]:e.map(t=>t.entity)}}function Eo(n,e){if(n.orderFieldType)return n.orderFieldType;const t=n.orderField==="serverCreatedAt"?"number":x(e(),n.table,n.orderField)?.["checked-data-type"];return n.orderFieldType=t,t}function Mo(n,e,t){const r=e;if(n.orderField==="serverCreatedAt"){t.sort(n.orderDirection==="asc"?function(o,a){return Le(o.entity.id,o.serverCreatedAt,a.entity.id,a.serverCreatedAt,r)}:function(o,a){return Le(a.entity.id,a.serverCreatedAt,o.entity.id,o.serverCreatedAt,r)});return}const s=n.orderField;t.sort(n.orderDirection==="asc"?function(o,a){return Le(o.entity.id,o.entity[s],a.entity.id,a.entity[s],r)}:function(o,a){return Le(a.entity.id,a.entity[s],o.entity.id,o.entity[s],r)})}var yr=(n=>(n.InitialSyncBatch="InitialSyncBatch",n.InitialSyncComplete="InitialSyncComplete",n.LoadFromStorage="LoadFromStorage",n.SyncTransaction="SyncTransaction",n.Error="Error",n))(yr||{});class Po{trySend;subs;callbacks={};config;idToHash={};log;createStore;getAttrs;constructor(e,t,r,s,i,o){this.trySend=e,this.config=r,this.log=s,this.createStore=i,this.getAttrs=o,this.subs=new Dt({persister:t,merge:Oo,serialize:Io,parse:(a,c)=>ko(c,this.config.useDateObjects),objectSize:a=>a.values?.entities.length||0,logger:s,gc:{maxAgeMs:1e3*60*60*24*7*52,maxEntries:1e3,maxSize:1e6}})}beforeUnload(){this.subs.flush()}subscribe(e,t){const r=F(e);return this.callbacks[r]=this.callbacks[r]||[],this.callbacks[r].push(t),this.initSubscription(e,r,t),s=>{this.unsubscribe(r,t,s?.keepSubscription)}}unsubscribe(e,t,r){const s=(this.callbacks[e]||[]).filter(i=>i!==t);if(this.callbacks[e]=s,!s.length){delete this.callbacks[e];const i=this.subs.currentValue[e];i?.state&&this.clearSubscriptionData(i.state.subscriptionId,!!r),r||this.subs.updateInPlace(o=>{delete o[e]})}}sendStart(e){this.trySend($(),{op:"start-sync",q:e})}sendResync(e,t,r){this.idToHash[t.subscriptionId]=e.hash,this.trySend(t.subscriptionId,{op:"resync-table","subscription-id":t.subscriptionId,"tx-id":r,token:t.token})}sendRemove(e,t){this.trySend($(),{op:"remove-sync","subscription-id":e.subscriptionId,"keep-subscription":t})}async initSubscription(e,t,r){await this.subs.waitForKeyToLoad(t);const s=this.subs.currentValue[t];if(s&&s.state&&s.state.txId){this.sendResync(s,s.state,s.state.txId),s.values?.entities&&r&&r({type:"LoadFromStorage",data:nt(s,s.values?.entities)});return}const i=Object.keys(e)[0],o=e[i]?.$?.order||{serverCreatedAt:"asc"},[a,c]=Object.entries(o)[0];this.subs.updateInPlace(u=>{u[t]={query:e,hash:t,table:i,orderDirection:c,orderField:a,createdAt:Date.now(),updatedAt:Date.now()}}),this.sendStart(e)}async flushPending(){for(const e of Object.keys(this.callbacks)){await this.subs.waitForKeyToLoad(e);const t=this.subs.currentValue[e];t?await this.initSubscription(t.query,t.hash):this.log.error("Missing sub for hash in flushPending",e)}}onStartSyncOk(e){const t=e["subscription-id"],r=e.q,s=F(r);this.idToHash[t]=s,this.subs.updateInPlace(i=>{const o=i[s];if(!o)return this.log.error("Missing sub for hash",s,"subscription-id",t,"query",r),i;o.state={subscriptionId:t,token:e.token}})}notifyCbs(e,t){for(const r of this.callbacks[e]||[])r(t)}onSyncLoadBatch(e){const t=e["subscription-id"],r=e["join-rows"],s=this.idToHash[t];if(!s){this.log.error("Missing hash for subscription",e);return}const i=[],o=this.subs.currentValue[s];if(!o){this.log.error("Missing sub for hash",s,e);return}const a=o.values??{entities:[],attrsStore:this.getAttrs()};o.values=a;const c=a.entities;for(const u of r){const l=this.createStore(u),f=zt(o,l,a.attrsStore);c.push({store:l,entity:f,serverCreatedAt:hr(o,l,a.attrsStore,f.id)}),i.push(f)}this.subs.updateInPlace(u=>{u[s]=o,u[s].updatedAt=Date.now()}),o.values&&this.notifyCbs(s,{type:"InitialSyncBatch",data:nt(o,o.values.entities),batch:i})}onSyncInitFinish(e){const t=e["subscription-id"],r=this.idToHash[t];if(!r){this.log.error("Missing hash for subscription",e);return}this.subs.updateInPlace(i=>{const o=i[r];if(!o){this.log.error("Missing sub for hash",r,e);return}const a=o.state;if(!a)return this.log.error("Sub never set init, missing result",o,e),i;a.txId=e["tx-id"],o.updatedAt=Date.now()});const s=this.subs.currentValue[r];s&&this.notifyCbs(r,{type:"InitialSyncComplete",data:nt(s,s.values?.entities||[])})}onSyncUpdateTriples(e){const t=e["subscription-id"],r=this.idToHash[t];if(!r){this.log.error("Missing hash for subscription",e);return}const s=this.subs.currentValue[r];if(!s){this.log.error("Missing sub for hash",r,e);return}const i=s.state;if(!i){this.log.error("Missing state for sub",s,e);return}for(const o of e.txes){if(i.txId&&i.txId>=o["tx-id"])continue;i.txId=o["tx-id"];const a=[],c={};for(const m of o.changes){const b=c[m.triple[0]]??[];c[m.triple[0]]=b,b.push(m)}const u=s.values??{entities:[],attrsStore:this.getAttrs()},l=u.entities;s.values=u;const f=[];e:for(const[m,b]of Object.entries(c))for(let y=0;y<l.length;y++){const g=l[y];if(ds(g.store,m)){pr(g.store,u.attrsStore,b);const k=zt(s,g.store,u.attrsStore),L=Co(g.store,u.attrsStore,b)[m];k?(f.push({oldEntity:g.entity,newEntity:k,changedFields:L||{}}),g.entity=k):a.push(y),delete c[m];continue e}}const d=[];for(const[m,b]of Object.entries(c)){const y=this.createStore([]);pr(y,u.attrsStore,b);const g=zt(s,y,u.attrsStore);if(!g){this.log.error("No entity found after applying change",{sub:s,changes:b,store:y});continue}l.push({store:y,entity:g,serverCreatedAt:hr(s,y,u.attrsStore,g.id)}),d.push(g)}const h=[];for(const m of a.sort().reverse())h.push(l[m].entity),l.splice(m,1);const p=Eo(s,this.getAttrs);Mo(s,p,l),this.notifyCbs(r,{type:"SyncTransaction",data:nt(s,s.values?.entities),added:d,removed:h,updated:f})}this.subs.updateInPlace(o=>{o[r]=s,o[r].updatedAt=Date.now()})}clearSubscriptionData(e,t){const r=this.idToHash[e];if(r){delete this.idToHash[e];const s=this.subs.currentValue[r];if(s.state&&this.sendRemove(s.state,t),t?this.subs.unloadKey(r):this.subs.updateInPlace(i=>{delete i[r]}),s)return s}}onStartSyncError(e){const t=F(e["original-event"].q),r={message:e.message||"Uh-oh, something went wrong. Ping Joe & Stopa.",status:e.status,type:e.type,hint:e.hint},s=Object.keys(e["original-event"].q)[0];this.notifyCbs(t,{type:"Error",data:{[s]:[]},error:r})}onResyncError(e){const t=e["original-event"]["subscription-id"],r=this.clearSubscriptionData(t,!1);r&&this.initSubscription(r.query,r.hash)}}function jo({WStream:n,opts:e,startStream:t,appendStream:r,registerStream:s}){const i=e.clientId;let o=null,a=null,c=null;const u=$();let l=!1,f=!1;const d=[],h=[],p=[];let m=!1,b=0,y=0;const g=[],k=new TextEncoder;function L(){f=!0;for(const _ of d)_(a??void 0)}function O(_){return d.push(_),f&&_(a??void 0),()=>{const A=d.indexOf(_);A!==-1&&d.splice(A,1)}}function q(_){return p.push(_),()=>{const A=p.indexOf(_);A!==-1&&p.splice(A,1)}}e.waitUntil&&e.waitUntil(new Promise(_=>{p.push(_)}));function E(){for(const _ of p)try{_()}catch{}}function C(_){return h.push(_),o&&_(o),()=>{const A=h.indexOf(_);A!==-1&&h.splice(A,1)}}function V(_){o=_;for(const A of h)A(o)}function j(){m=!0}function w(_){let A=b,z=0,Z=0;for(const{byteLen:ae}of g){const fe=A+ae;if(fe>_)break;A=fe,z++,Z+=ae}z>0&&(b+=Z,y-=Z,g.splice(0,z))}function S(_,A){a=A,L(),_.error(A),E()}async function v(){const _=await t({clientId:i,reconnectToken:u,ruleParams:e.ruleParams});switch(_.type){case"ok":{const{streamId:A,offset:z}=_;o=A,w(z),g.length&&r({streamId:A,chunks:g.map(Z=>Z.chunk),offset:b}),m=!1;break}case"disconnect":{j();break}case"error":{c&&S(c,_.error);break}}}function M(){j(),v()}function N({offset:_,done:A}){w(_),A&&(l=!0,E())}function ne(_){return l?(S(_,new U("Stream has been closed.")),null):o||(S(_,new U("Stream has not been initialized.")),null)}async function Y(_){c=_;let A=!0,z=0;for(;A;){let Z=Date.now()+Math.min(15e3,500*(z-1));A=!1;const ae=await t({clientId:e.clientId,reconnectToken:u,ruleParams:e.ruleParams});switch(ae.type){case"ok":{const{streamId:fe,offset:Yt}=ae;if(Yt!==0){const me=new U("Write stream is corrupted");S(_,me);return}V(fe),s(fe,{onDisconnect:j,onFlush:N,onConnectionReconnect:v,onAppendFailed:M}),m=!1;return}case"disconnect":{A=!0,j(),z++,await new Promise(fe=>{setTimeout(fe,Math.max(0,Z-Date.now()))});break}case"error":{S(_,ae.error);return}}}}class B extends n{constructor(A,z){super(A,z)}async streamId(){return o||new Promise((A,z)=>{const Z=[],ae=()=>{for(const me of Z)me()},fe=me=>{A(me),ae()},Yt=me=>{z(me||new U("Stream is closed.")),ae()};Z.push(C(fe)),Z.push(O(Yt))})}}return{stream:new B({async start(_){try{await Y(_)}catch(A){S(_,A)}},write(_,A){const z=ne(A);if(z){const Z=k.encode(_).length;g.push({chunk:_,byteLen:Z});const ae=b+y;y+=Z,m||r({streamId:z,chunks:[_],offset:ae})}},close(){o?r({streamId:o,chunks:[],offset:b+y,isDone:!0}):E(),L()},abort(_){o?r({streamId:o,chunks:[],offset:b+y,isDone:!0,abortReason:_}):E(),L()}}),addCompleteCb:q,closed(){return f}}}class $o{items=[];resolvers=[];isClosed=!1;constructor(){}push(e){if(this.isClosed)return;const t=this.resolvers.shift();t?t({value:e,done:!1}):this.items.push(e)}close(){for(this.isClosed=!0;this.resolvers.length>0;)this.resolvers.shift()({value:void 0,done:!0})}async*[Symbol.asyncIterator](){for(;;)if(this.items.length>0)yield this.items.shift();else{if(this.isClosed)return;{const{value:e,done:t}=await new Promise(r=>{this.resolvers.push(r)});if(t||!e)return;yield e}}}}function Ro({RStream:n,opts:e,startStream:t,cancelStream:r}){let s=e.byteOffset||0,i=!1;const o=new TextDecoder("utf-8"),a=new TextEncoder;let c,u=!1;const l=[],f=[];let d=null,h=null;function p(E){u=!0;for(const C of l)C(E)}function m(E){return l.push(E),()=>{const C=l.indexOf(E);C!==-1&&l.splice(C,1)}}function b(E){return f.push(E),d&&E(d),()=>{const C=f.indexOf(E);C!==-1&&f.splice(C,1)}}function y(E,C){h=C,E.error(C),p(C)}let g=0;async function k(E,C){c=$();const V={...E||{},eventId:c};for await(const j of t(V)){if(i)return;if(j.type==="reconnect")return{retry:!0};if(j.type==="error"){y(C,j.error);return}if(j.offset>s){y(C,new U("Stream is corrupted.")),i=!0;return}d=j.streamId;for(const S of f)S(d);let w=s-j.offset;if(j.files&&j.files.length){const S=new AbortController;let v=fetch(j.files[0].url,{signal:S.signal});for(let M=0;M<j.files.length;M++){const N=j.files[M+1],Y=await v;if(N&&(v=fetch(N.url,{signal:S.signal})),!Y.ok){if(g++,g>10){y(C,new U("Unable to process stream."));return}return{retry:!0}}if(Y.body){const B=Y.body.getReader();try{for(;;){const{done:re,value:_}=await B.read();if(re)break;if(i){S.abort();return}let A=_;if(w>0&&(A=_.subarray(w),w-=_.length-A.length),!A.length)continue;s+=A.length;const z=o.decode(A);C.enqueue(z)}}finally{B.releaseLock()}}else{const B=await Y.arrayBuffer();let re=B;if(i){S.abort();return}if(w>0&&(re=new Uint8Array(B).subarray(w),w-=B.byteLength-re.length),!re.byteLength)continue;s+=re.byteLength;const _=o.decode(re);C.enqueue(_)}}}if(g=0,j.content){let S=j.content,v=a.encode(j.content);if(w>0){const M=v.subarray(w);if(w-=v.length-M.length,!M.length)continue;v=M,S=o.decode(M)}s+=v.length,C.enqueue(S)}}}async function L(E){let C=!0,V=0;for(;C;){C=!1;let j=Date.now()+Math.min(15e3,500*(V-1));(await k({...e,offset:s},E))?.retry&&(C=!0,V++,j<Date.now()-3e5&&(V=0),await new Promise(S=>{setTimeout(S,Math.max(0,j-Date.now()))}))}!i&&!u&&(E.close(),p())}class O extends n{constructor(C,V){super(C,V)}async streamId(){if(d)return d;if(h)throw h;return new Promise((C,V)=>{const j=[],w=()=>{for(const M of j)M()},S=M=>{C(M),w()},v=M=>{V(M||new U("Stream is closed.")),w()};j.push(b(S)),j.push(m(v))})}}return{stream:new O({start(E){L(E)},cancel(E){i=!0,c&&r({eventId:c}),p()}}),addCloseCb:m,closed(){return u}}}class br{trySend;WStream;RStream;writeStreams={};startWriteStreamCbs={};readStreamIterators={};log;activeStreams=new Set;constructor({WStream:e,RStream:t,trySend:r,log:s}){this.WStream=e,this.RStream=t,this.trySend=r,this.log=s}createWriteStream(e){const{stream:t,addCompleteCb:r}=jo({WStream:this.WStream,startStream:this.startWriteStream.bind(this),appendStream:this.appendStream.bind(this),registerStream:this.registerWriteStream.bind(this),opts:e});return this.activeStreams.add(t),r(()=>{this.activeStreams.delete(t)}),t}createReadStream(e){const{stream:t,addCloseCb:r}=Ro({RStream:this.RStream,opts:e,startStream:this.startReadStream.bind(this),cancelStream:this.cancelReadStream.bind(this)});return this.activeStreams.add(t),r(()=>{this.activeStreams.delete(t)}),t}startWriteStream(e){const t=$();let r=null;const s=new Promise(o=>{r=o});this.startWriteStreamCbs[t]=r;const i={op:"start-stream","client-id":e.clientId,"reconnect-token":e.reconnectToken};return e.ruleParams&&(i["rule-params"]=e.ruleParams),this.trySend(t,i),s}registerWriteStream(e,t){this.writeStreams[e]=t}appendStream({streamId:e,chunks:t,isDone:r,offset:s,abortReason:i}){const o={op:"append-stream","stream-id":e,chunks:t,offset:s,done:!!r};i&&(o["abort-reason"]=i),this.trySend($(),o)}onAppendFailed(e){const t=this.writeStreams[e["stream-id"]];t&&t.onAppendFailed()}onStartStreamOk(e){const t=this.startWriteStreamCbs[e["client-event-id"]];if(!t){this.log.info("No stream for start-stream-ok",e);return}t({type:"ok",streamId:e["stream-id"],offset:e.offset}),delete this.startWriteStreamCbs[e["client-event-id"]]}onStreamFlushed(e){const t=e["stream-id"],r=this.writeStreams[t];if(!r){this.log.info("No stream cbs for stream-flushed",e);return}r.onFlush({offset:e.offset,done:e.done}),e.done&&delete this.writeStreams[t]}startReadStream({eventId:e,clientId:t,streamId:r,offset:s,ruleParams:i}){const o={op:"subscribe-stream"};if(!r&&!t)throw new Error("Must provide one of streamId or clientId to subscribe to the stream.");r&&(o["stream-id"]=r),t&&(o["client-id"]=t),s&&(o.offset=s),i&&(o["rule-params"]=i);const a=new $o;return this.readStreamIterators[e]=a,this.trySend(e,o),a}cancelReadStream({eventId:e}){const t={op:"unsubscribe-stream","subscribe-event-id":e};this.trySend($(),t),delete this.readStreamIterators[e]}onStreamAppend(e){const t=e["client-event-id"],r=this.readStreamIterators[t];if(!r){this.log.info("No iterator for read stream",e);return}if(e.error){e.retry?r.push({type:"reconnect"}):r.push({type:"error",error:new U(e.error)}),r.close(),delete this.readStreamIterators[t];return}r.push({type:"append",offset:e.offset,files:e.files,content:e.content,streamId:e["stream-id"]}),e.done&&(r.close(),delete this.readStreamIterators[t])}onConnectionStatusChange(e){for(const t of Object.values(this.startWriteStreamCbs))t({type:"disconnect"});if(this.startWriteStreamCbs={},e!==ue.AUTHENTICATED)for(const{onDisconnect:t}of Object.values(this.writeStreams))t();else{for(const{onConnectionReconnect:t}of Object.values(this.writeStreams))t();for(const t of Object.values(this.readStreamIterators))t.push({type:"reconnect"}),t.close();this.readStreamIterators={}}}onRecieveError(e){const t=e["original-event"];switch(t.op){case"append-stream":{const r=t["stream-id"];this.writeStreams[r]?.onAppendFailed();break}case"start-stream":{const r=e["client-event-id"],s=this.startWriteStreamCbs[r];s&&(s({type:"error",error:new U(e.message||"Unknown error",e.hint)}),delete this.startWriteStreamCbs[r]);break}case"subscribe-stream":{const r=e["client-event-id"],s=this.readStreamIterators[r];s&&(s.push({type:"error",error:new U(e.message||"Unknown error",e.hint)}),s.close(),delete this.readStreamIterators[r]);break}}}hasActiveStreams(){return this.activeStreams.size>0}}const ue={CONNECTING:"connecting",OPENED:"opened",AUTHENTICATED:"authenticated",CLOSED:"closed",ERRORED:"errored"},Do=3e4,xo=3e4,Uo=200,Lo=1e3*60*60*24,gr="lastSyncedUserCookie",No={apiURI:"https://api.instantdb.com",websocketURI:"wss://api.instantdb.com/runtime/session"},Wt="_instant_oauth_redirect",Qt="_instant_extra_fields_id",rt="oauthExtraFields",Ce="currentUser";function Fo({transportType:n,appId:e,apiURI:t,wsURI:r,EventSourceImpl:s}){if(!s)return new dr(`${r}?app_id=${e}`);switch(n){case"ws":return new dr(`${r}?app_id=${e}`);case"sse":return new fr(s,`${t}/runtime/sse?app_id=${e}`);default:throw new Error("Unknown transport type "+n)}}function Ko(){return typeof window<"u"||typeof chrome<"u"}const mr={"set-presence":!0,"set-presence-ok":!0,"refresh-presence":!0,"patch-presence":!0};function qo(n,e){const t=typeof n=="string"?JSON.parse(n):n;if(t?.result?.store){const r=wn(t.result.attrsStore,t.result.store);if(r){const s=t.result.store;t.result.store=mn(r,{...s,useDateObjects:e}),t.result.attrsStore=r}}return t}function zo(n,e){const{result:t,...r}=e,s=r;if(t){const i={...t,store:gn(t.store),attrsStore:t.attrsStore.toJSON()};s.result=i}return s}function Wo(n,e){return n==="pendingMutations"?new Map(typeof e=="string"?JSON.parse(e):e):e}function Qo(n,e){return n==="pendingMutations"?[...e.entries()]:e}function Vo(n,e,t){const r=e?.result,s=t?.result;return r&&!s&&t&&(t.result=r),t||e}function Vt(n){return[...n].sort((e,t)=>{const[r,s]=e,[i,o]=t,a=s.order||0,c=o.order||0;return a==c?r<i?-1:r>i?1:0:a-c})}class wr{attrs;_isOnline=!0;_isShutdown=!1;status=ue.CONNECTING;querySubs;kv;_syncTable;_instantStream;queryCbs={};queryOnceDfds={};authCbs=[];attrsCbs=[];mutationErrorCbs=[];connectionStatusCbs=[];appStatusCbs=[];_appStatusState={isLoading:!0,isReadOnly:void 0};config;mutationDeferredStore=new Map;_reconnectTimeoutId=null;_reconnectTimeoutMs=0;_transport;_transportType="ws";_EventSource;_wsOk=null;_localIdPromises={};_errorMessage=null;_oauthCallbackResponse=null;_linkIndex=null;_broadcastChannel;_rooms={};_roomsPendingLeave={};_presence={};_broadcastQueue=[];_broadcastSubs={};_currentUserCached={isLoading:!0,error:void 0,user:void 0};_beforeUnloadCbs=[];_dataForQueryCache={};_log;_pendingTxCleanupTimeout;_pendingMutationCleanupThreshold;_inFlightMutationEventIds=new Set;_frameworkClient=null;constructor(e,t=xt,r=Ut,s,i){if(this._EventSource=i,this.config={...No,...e},this.queryCacheLimit=this.config.queryCacheLimit??10,this._pendingTxCleanupTimeout=this.config.pendingTxCleanupTimeout??xo,this._pendingMutationCleanupThreshold=this.config.pendingMutationCleanupThreshold??Uo,this._log=yo(e.verbose||Lt||Hn,()=>this._reactorStats(),e.logger),this.versions={...s||{},"@instantdb/core":Ft},this.config.schema&&(this._linkIndex=Nt(this.config.schema)),!!Ko()){if(!e.appId)throw new Error("Instant must be initialized with an appId.");if(!ve(e.appId))throw new Error(`Instant must be initialized with a valid appId. \`${e.appId}\` is not a valid uuid.`);typeof BroadcastChannel=="function"&&(this._broadcastChannel=new BroadcastChannel("@instantdb"),this._broadcastChannel.addEventListener("message",async o=>{try{if(o.data?.type==="auth"){const a=await this.getCurrentUser({forceReadFromStorage:!0});await this.updateUser(a.user).catch(c=>{this._log.error("[error] update user",c)})}}catch(a){this._log.error("[error] handle broadcast channel",a)}})),this._initStorage(t),this._syncTable=new Po(this._trySendAuthed.bind(this),new t(this.config.appId,"syncSubs"),{useDateObjects:this.config.useDateObjects},this._log,o=>Te(this.ensureAttrs(),o,this.config.enableCardinalityInference,this.config.useDateObjects),()=>this.ensureAttrs()),this._instantStream=new br({WStream:this.config.WritableStream||WritableStream,RStream:this.config.ReadableStream||ReadableStream,trySend:this._trySendAuthed.bind(this),log:this._log}),this._oauthCallbackResponse=this._oauthLoginInit(),this.setupUserSyncTimer(),r.getIsOnline().then(o=>{this._isOnline=o,this._startSocket(),r.listen(a=>{a!==this._isOnline&&(this._log.info("[network] online =",a),this._isOnline=a,this._isOnline?this._startSocket():(this._log.info("Changing status from",this.status,"to",ue.CLOSED),this._setStatus(ue.CLOSED)))})}),typeof addEventListener<"u"&&(this._beforeUnload=this._beforeUnload.bind(this),addEventListener("beforeunload",this._beforeUnload))}}getFrameworkClient(){return this._frameworkClient}setFrameworkClient(e){this._frameworkClient=e}ensureAttrs(){if(!this.attrs)throw new Error("attrs have not loaded.");return this.attrs}updateSchema(e){this.config={...this.config,schema:e,cardinalityInference:!!e},this._linkIndex=e?Nt(this.config.schema):null}_reactorStats(){return{inFlightMutationCount:this._inFlightMutationEventIds.size,storedMutationCount:this._pendingMutations().size,transportType:this._transportType}}_onQuerySubLoaded(e){this.kv.waitForKeyToLoad("pendingMutations").then(()=>this.notifyOne(e))}_initStorage(e){this.querySubs=new Dt({persister:new e(this.config.appId,"querySubs"),merge:Vo,serialize:zo,parse:(t,r)=>qo(r,this.config.useDateObjects),objectSize:t=>t?.result?.store?.triples?.length??0,logger:this._log,preloadEntryCount:10,gc:{maxAgeMs:1e3*60*60*24*7*52,maxEntries:1e3,maxSize:1e6}}),this.querySubs.onKeyLoaded=t=>this._onQuerySubLoaded(t),this.kv=new Dt({persister:new e(this.config.appId,"kv"),merge:this._onMergeKv,serialize:Qo,parse:Wo,objectSize:()=>0,logger:this._log,saveThrottleMs:100,idleCallbackMaxWaitMs:100,gc:null}),this.kv.onKeyLoaded=t=>{t==="pendingMutations"&&this.notifyAll()},this.kv.waitForKeyToLoad("pendingMutations"),this.kv.waitForKeyToLoad(Ce),this._beforeUnloadCbs.push(()=>{this.kv.flush(),this.querySubs.flush()})}_beforeUnload(){for(const e of this._beforeUnloadCbs)e();this._syncTable.beforeUnload()}_finishTransaction(e,t,r){const s=this.mutationDeferredStore.get(t);this.mutationDeferredStore.delete(t);const i=e!=="error"&&e!=="timeout";if(!s&&!i&&console.error("Mutation failed",{status:e,eventId:t,...r}),!!s)if(i)s.resolve({status:e,eventId:t});else if(r?.type){const{status:o,...a}=r;s.reject(new Ie({body:a,status:o??0}))}else s.reject(new U(r?.message||"Unknown error",r?.hint,r?.traceId))}_setStatus(e,t){this.status=e,this._errorMessage=t,this.notifyConnectionStatusSubs(e),this._instantStream.onConnectionStatusChange(e)}_onMergeKv=(e,t,r)=>{if(e==="pendingMutations"){const s=t?.entries()??[],i=r?.entries()??[],o=new Map([...s,...i]);return(t?this._rewriteMutationsSorted(this.attrs,t):[]).forEach(([c,u])=>{!r?.pendingMutations?.has(c)&&!u["tx-id"]&&this._sendMutation(c,u)}),o}else return r||t};_flushEnqueuedRoomData(e){const t=this._presence[e]?.result?.user,r=this._broadcastQueue[e];if(this._broadcastQueue[e]=[],t&&this._trySetPresence(e,t),r)for(const s of r){const{topic:i,roomType:o,data:a}=s;this._tryBroadcast(e,o,i,a)}}_addQueryData(e,t,r){if(!this.attrs)throw new Error("Attrs in reactor have not been set");const s=F(e),i=this.ensureAttrs(),o=Te(this.attrs,t.triples,r,this.config.useDateObjects);this.querySubs.updateInPlace(a=>{a[s]={result:{store:o,attrsStore:i,pageInfo:t.pageInfo,processedTxId:void 0,isExternal:!0},q:e}}),this._cleanupPendingMutationsQueries(),this.notifyOne(s),this.notifyOneQueryOnce(s),this._cleanupPendingMutationsTimeout()}_handleReceive(e,t){const r=!!this.config.schema&&("cardinalityInference"in this.config?!!this.config.cardinalityInference:!0);switch(mr[t.op]||this._log.info("[receive]",e,t.op,t),t.op){case"init-ok":{this._setStatus(ue.AUTHENTICATED),this._reconnectTimeoutMs=0,this._setAppStatus(t["app-status"]?.status??"active"),this._setAttrs(t.attrs),this._flushPendingMessages(),this._sessionId=t["session-id"];for(const o of Object.keys(this._rooms)){const a=this._presence[o]?.result?.user,c=this._rooms[o]?.roomType;this._tryJoinRoom(c,o,a)}break}case"add-query-exists":{this.notifyOneQueryOnce(F(t.q));break}case"add-query-ok":{const{q:o,result:a}=t,c=F(o);if(!this._hasQueryListeners()&&!this.querySubs.currentValue[c])break;const u=a?.[0]?.data?.["page-info"],l=a?.[0]?.data?.aggregate,f=er(a),d=this.ensureAttrs(),h=Te(d,f,r,this.config.useDateObjects);this.querySubs.updateInPlace(p=>{if(!p[c]){this._log.info("Missing value in querySubs",{hash:c,q:o});return}p[c].result={store:h,attrsStore:d,pageInfo:u,aggregate:l,processedTxId:t["processed-tx-id"]}}),this._cleanupPendingMutationsQueries(),this.notifyOne(c),this.notifyOneQueryOnce(c),this._cleanupPendingMutationsTimeout();break}case"start-sync-ok":{this._syncTable.onStartSyncOk(t);break}case"sync-load-batch":{this._syncTable.onSyncLoadBatch(t);break}case"sync-init-finish":{this._syncTable.onSyncInitFinish(t);break}case"sync-update-triples":{this._syncTable.onSyncUpdateTriples(t);break}case"start-stream-ok":{this._instantStream.onStartStreamOk(t);break}case"stream-flushed":{this._instantStream.onStreamFlushed(t);break}case"append-failed":{this._instantStream.onAppendFailed(t);break}case"stream-append":{this._instantStream.onStreamAppend(t);break}case"refresh-ok":{const{computations:o,attrs:a}=t,c=t["processed-tx-id"];a&&this._setAttrs(a),this._cleanupPendingMutationsTimeout();const u=this._rewriteMutations(this.ensureAttrs(),this._pendingMutations(),c);u!==this._pendingMutations()&&this.kv.updateInPlace(d=>{d.pendingMutations=u});const l=Vt(u.entries()),f=o.map(d=>{const h=d["instaql-query"],p=d["instaql-result"],m=F(h),b=er(p),y=this.ensureAttrs(),g=Te(y,b,r,this.config.useDateObjects),{store:k,attrsStore:L}=this._applyOptimisticUpdates(g,y,l,c),O=p?.[0]?.data?.["page-info"],q=p?.[0]?.data?.aggregate;return{q:h,hash:m,store:k,attrsStore:L,pageInfo:O,aggregate:q}});f.forEach(({hash:d,q:h,store:p,attrsStore:m,pageInfo:b,aggregate:y})=>{this.querySubs.updateInPlace(g=>{if(!g[d]){this._log.error("Missing value in querySubs",{hash:d,q:h});return}g[d].result={store:p,attrsStore:m,pageInfo:b,aggregate:y,processedTxId:c}})}),this._cleanupPendingMutationsQueries(),f.forEach(({hash:d})=>{this.notifyOne(d)});break}case"transact-ok":{const{"client-event-id":o,"tx-id":a}=t;this._inFlightMutationEventIds.delete(o);const u=this._rewriteMutations(this.ensureAttrs(),this._pendingMutations()).get(o);if(!u)break;this._updatePendingMutations(f=>{f.set(o,{...f.get(o),"tx-id":a,confirmed:Date.now()})});const l=[];for(const f of u["tx-steps"])if(f[0]==="add-attr"){const d=f[1];l.push(d)}if(l.length){const f=Object.values(this.ensureAttrs().attrs);this._setAttrs([...f,...l])}this._finishTransaction("synced",o),this._cleanupPendingMutationsTimeout();break}case"patch-presence":{const o=t["room-id"];this._trySetRoomConnected(o,!0),this._patchPresencePeers(o,t.edits),this._notifyPresenceSubs(o);break}case"refresh-presence":{const o=t["room-id"];this._trySetRoomConnected(o,!0),this._setPresencePeers(o,t.data),this._notifyPresenceSubs(o);break}case"server-broadcast":{const o=t["room-id"],a=t.topic;this._trySetRoomConnected(o,!0),this._notifyBroadcastSubs(o,a,t);break}case"join-room-ok":{const o=t["room-id"];if(!this._rooms[o]){this._roomsPendingLeave[o]&&(this._tryLeaveRoom(o),delete this._roomsPendingLeave[o]);break}this._trySetRoomConnected(o,!0),this._flushEnqueuedRoomData(o);break}case"leave-room-ok":{const o=t["room-id"];this._trySetRoomConnected(o,!1);break}case"app-status-changed":{const o=this._appStatusState.status;if(this._setAppStatus(t.status),t.status==="disabled"&&o!=="disabled"){const a={message:"This app is currently disabled.",hint:{status:"disabled"}};Object.keys(this.queryCbs).forEach(c=>this.notifyQueryError(c,a))}o==="disabled"&&t.status!=="disabled"&&this._startSocket();break}case"join-room-error":const s=t["room-id"],i=this._rooms[s];i&&(i.error=t.error),this._notifyPresenceSubs(s);break;case"error":this._handleReceiveError(t);break;default:this._log.info("Unknown op",t.op,t);break}}createWriteStream(e){return this._instantStream.createWriteStream(e)}createReadStream(e){return this._instantStream.createReadStream(e)}_pendingMutations(){return this.kv.currentValue.pendingMutations??new Map}_updatePendingMutations(e){this.kv.updateInPlace(t=>{const r=t.pendingMutations??new Map;t.pendingMutations=r,e(r)})}_handleMutationError(e,t,r){const s=this._pendingMutations().get(t);if(s&&(e!=="timeout"||!s["tx-id"])){this._updatePendingMutations(o=>(o.delete(t),o)),this._inFlightMutationEventIds.delete(t);const i={message:r.message,hint:r.hint,traceId:r.traceId};this.notifyAll(),this.notifyAttrsSubs(),this.notifyMutationErrorSubs(i),this._finishTransaction(e,t,r)}}_handleReceiveError(e){this._log.info("error",e);const t=e["client-event-id"];this._inFlightMutationEventIds.delete(t);const r=this._pendingMutations().get(t),s={message:e.message||"Uh-oh, something went wrong. Ping Joe & Stopa."};if(e.hint&&(s.hint=e.hint),e["trace-id"]||e["original-event"]?.["trace-id"]){const c=[e["trace-id"],e["original-event"]?.["trace-id"]].filter(Boolean).join(",");s.traceId=c}if(r){this._handleMutationError("error",t,s);return}if(e["original-event"]?.hasOwnProperty("q")&&e["original-event"]?.op==="add-query"){const a=e["original-event"]?.q,c=F(a);this.notifyQueryError(F(a),s),this.notifyQueryOnceError(a,c,t,s);return}if(e["original-event"]?.op==="init"){if(e.type==="record-not-found"&&e.hint?.["record-type"]==="app-user"){this.changeCurrentUser(null);return}this._setStatus(ue.ERRORED,s),this.notifyAll();return}switch(e["original-event"]?.op){case"resync-table":{this._syncTable.onResyncError(e);return}case"start-sync":{this._syncTable.onStartSyncError(e);return}case"start-stream":case"append-stream":case"subscribe-stream":case"unsubscribe-stream":{this._instantStream.onRecieveError(e);return}}const o={...e};delete o.message,delete o.hint,console.error(e.message,o),e.hint&&console.error(`This error comes with some debugging information. Here it is: 
`,e.hint)}notifyQueryOnceError(e,t,r,s){const i=this.queryOnceDfds[t]?.find(o=>o.eventId===r);i&&(i.dfd.reject(s),this._completeQueryOnce(e,t,i.dfd))}_setAttrs(e){this.attrs=new he(e.reduce((t,r)=>(t[r.id]=r,t),{}),this._linkIndex),this.notifyAttrsSubs()}getPreviousResult=e=>{const t=F(e);return this.dataForQuery(t)?.data};_startQuerySub(e,t){const r=$();return this.querySubs.updateInPlace(s=>{if(!s[t]){const i=we(e);i!==t&&s[i]&&(s[t]=s[i],delete s[i])}s[t]=s[t]||{q:e,result:null,eventId:r},s[t].lastAccessed=Date.now()}),this._tryMigrateLegacyQuerySub(e,t),this._trySendAuthed(r,{op:"add-query",q:e}),r}async _tryMigrateLegacyQuerySub(e,t){const r=we(e);if(r===t)return;await this.querySubs.waitForKeyToLoad(r);const s=this.querySubs.currentValue[r];if(!s)return;let i=!1;this.querySubs.updateInPlace(o=>{const a=o[t];a&&!a.result&&s.result?(a.result=s.result,i=!0):a||(o[t]=s,i=!!s.result),delete o[r]}),i&&this.notifyOne(t)}subscribeTable(e,t){return this._syncTable.subscribe(e,t)}subscribeQuery(e,t,r){this.config.disableValidation||Kt(e,this.config.schema),r&&"ruleParams"in r&&(e={$$ruleParams:r.ruleParams,...e});const s=F(e),i=this.getPreviousResult(e);return i&&t(i),this.queryCbs[s]=this.queryCbs[s]??[],this.queryCbs[s].push({q:e,cb:t}),this._startQuerySub(e,s),()=>{this._unsubQuery(e,s,t)}}queryOnce(e,t){this.config.disableValidation||Kt(e,this.config.schema),t&&"ruleParams"in t&&(e={$$ruleParams:t.ruleParams,...e});const r=new Zn;if(!this._isOnline)return r.reject(new Error("We can't run `queryOnce`, because the device is offline.")),r.promise;if(!this.querySubs)return r.reject(new Error("We can't run `queryOnce` on the backend. Use adminAPI.query instead: https://www.instantdb.com/docs/backend#query")),r.promise;const s=F(e),i=this._startQuerySub(e,s);return this.queryOnceDfds[s]=this.queryOnceDfds[s]??[],this.queryOnceDfds[s].push({q:e,dfd:r,eventId:i}),setTimeout(()=>r.reject(new Error("Query timed out")),Do),r.promise}_completeQueryOnce(e,t,r){this.queryOnceDfds[t]&&(this.queryOnceDfds[t]=this.queryOnceDfds[t].filter(s=>s.dfd!==r),this._cleanupQuery(e,t))}_unsubQuery(e,t,r){this.queryCbs[t]&&(this.queryCbs[t]=this.queryCbs[t].filter(s=>s.cb!==r),this._cleanupQuery(e,t))}_hasQueryListeners(e){return!!(this.queryCbs[e]?.length||this.queryOnceDfds[e]?.length)}_cleanupQuery(e,t){this._hasQueryListeners(t)||(delete this.queryCbs[t],delete this.queryOnceDfds[t],delete this._dataForQueryCache[t],this.querySubs.unloadKey(t),this._trySendAuthed($(),{op:"remove-query",q:e}))}_rewriteMutations(e,t,r){if(!e)return t;if(!t)return new Map;const s=l=>{const[f,d,h]=l["forward-identity"];return x(e,d,h)},i=l=>{const[f,d,h]=l["forward-identity"];return ge(e,d,h)},o={attrIdMap:{},refSwapAttrIds:new Set};let a=!1;const c=(l,f)=>{const d=[];for(const h of l){const[p]=h;if(p==="add-attr"){const[b,y]=h,g=s(y);if(g&&y.id!==g.id){o.attrIdMap[y.id]=g.id,a=!0;continue}if(y["value-type"]==="ref"){const k=i(y);if(k){o.attrIdMap[y.id]=k.id,o.refSwapAttrIds.add(y.id),a=!0;continue}}}if(r&&f&&r>=f&&p==="add-attr"||p==="update-attr"||p==="delete-attr"){a=!0;continue}const m=a?vi(o,h):h;d.push(m)}return a?d:l},u=new Map;for(const[l,f]of t.entries())u.set(l,{...f,"tx-steps":c(f["tx-steps"],f["tx-id"])});return a?u:t}_rewriteMutationsSorted(e,t){return Vt(this._rewriteMutations(e,t).entries())}optimisticAttrs(){const e=[...this._pendingMutations().values()].flatMap(i=>i["tx-steps"]),t=new Set(e.filter(([i,o])=>i==="delete-attr").map(([i,o])=>o)),r=[];for(const[i,o]of e)if(i==="add-attr")r.push(o);else if(i==="update-attr"&&o.id&&this.attrs?.getAttr(o.id)){const a={...this.attrs.getAttr(o.id),...o};r.push(a)}if(!t.size&&!r.length)return this.attrs||new he({},this._linkIndex);const s={...this.attrs?.attrs||{}};for(const i of r)s[i.id]=i;for(const i of t)delete s[i];return new he(s,this._linkIndex)}dataForQuery(e,t=!0){const r=this._errorMessage;if(r)return{error:r};if(!this.querySubs||!this.kv.currentValue.pendingMutations)return;const s=this.querySubs.version(),i=this.querySubs.currentValue,o=this.kv.version(),a=this._pendingMutations(),{q:c,result:u}=i[e]||{};if(!u)return;const l=this._dataForQueryCache[e];if(l&&s===l.querySubVersion&&o===l.pendingMutationsVersion)return l;let f=u.store,d=u.attrsStore;const{pageInfo:h,aggregate:p,processedTxId:m}=u,b=this._rewriteMutationsSorted(d,a);if(t){const g=this._applyOptimisticUpdates(f,d,b,m);f=g.store,d=g.attrsStore}return{data:Ct({store:f,attrsStore:d,pageInfo:h,aggregate:p},c),querySubVersion:s,pendingMutationsVersion:o}}_applyOptimisticUpdates(e,t,r,s){for(const[i,o]of r)if(!o["tx-id"]||s&&o["tx-id"]>s){const a=vs(e,t,o["tx-steps"]);e=a.store,t=a.attrsStore}return{store:e,attrsStore:t}}notifyOne=e=>{const t=this.queryCbs[e]??[],r=this._dataForQueryCache[e]?.data,s=this.dataForQuery(e);s?.data&&(this._dataForQueryCache[e]=s,!Be(s.data,r)&&t.forEach(i=>i.cb(s.data)))};notifyOneQueryOnce=e=>{const t=this.queryOnceDfds[e]??[],r=this.dataForQuery(e)?.data;t.forEach(s=>{this._completeQueryOnce(s.q,e,s.dfd),s.dfd.resolve(r)})};notifyQueryError=(e,t)=>{delete this._dataForQueryCache[e],(this.queryCbs[e]||[]).forEach(s=>s.cb({error:t}))};notifyAll(){Object.keys(this.queryCbs).forEach(e=>{this.querySubs.waitForKeyToLoad(e).then(()=>this.notifyOne(e)).catch(()=>this.notifyOne(e))})}loadedNotifyAll(){this.kv.waitForKeyToLoad("pendingMutations").then(()=>this.notifyAll()).catch(()=>this.notifyAll())}pushTx=e=>{if(this._appStatusState.isReadOnly)return Promise.reject(this._appStatusState.status==="disabled"?new U("This app is currently disabled.",{status:"disabled"}):new U("This app is in read-only mode.",{status:"read-only"}));this.config.disableValidation||ur(e,this.config.schema);try{const t=Gi({attrsStore:this.optimisticAttrs(),schema:this.config.schema,stores:Object.values(this.querySubs.currentValue).map(r=>r?.result?.store),useDateObjects:this.config.useDateObjects},e);return this.pushOps(t)}catch(t){return this.pushOps([],t)}};pushOps=(e,t)=>{const r=$(),s=[...this._pendingMutations().values()],i=Math.max(0,...s.map(c=>c.order||0))+1,o={op:"transact","tx-steps":e,created:Date.now(),error:t,order:i};this._updatePendingMutations(c=>{c.set(r,o)});const a=new Zn;return this.mutationDeferredStore.set(r,a),this._sendMutation(r,o),this.notifyAll(),a.promise};shutdown(){this._log.info("[shutdown]",this.config.appId),this._isShutdown=!0,this._transport?.close()}_sendMutation(e,t){if(t.error){this._handleMutationError("error",e,{message:t.error.message});return}if(this.status!==ue.AUTHENTICATED){this._finishTransaction("enqueued",e);return}const r=Math.max(6e3,Math.min(this._inFlightMutationEventIds.size+1,this._pendingMutations().size+1)*6e3);this._isOnline?(this._trySend(e,t),setTimeout(()=>{this._isOnline&&this._handleMutationError("timeout",e,{message:"transaction timed out"})},r)):this._finishTransaction("enqueued",e)}_flushPendingMessages(){Object.keys(this.queryCbs).map(i=>this.querySubs.currentValue[i]).filter(i=>i).forEach(({eventId:i,q:o})=>{this._trySendAuthed(i,{op:"add-query",q:o})}),Object.values(this.queryOnceDfds).flat().forEach(({eventId:i,q:o})=>{this._trySendAuthed(i,{op:"add-query",q:o})});const r=this._rewriteMutations(this.ensureAttrs(),this._pendingMutations());r!==this._pendingMutations()&&this.kv.updateInPlace(i=>{i.pendingMutations=r}),Vt(r.entries()).forEach(([i,o])=>{o["tx-id"]||this._sendMutation(i,o)}),this._syncTable.flushPending()}_cleanupPendingMutationsQueries(){let e=Number.MAX_SAFE_INTEGER;for(const{result:t}of Object.values(this.querySubs.currentValue))t?.processedTxId&&(e=Math.min(e,t?.processedTxId));this._updatePendingMutations(t=>{for(const[r,s]of Array.from(t.entries()))s["tx-id"]&&s["tx-id"]<=e&&t.delete(r)})}_cleanupPendingMutationsTimeout(){if(this._pendingMutations().size<this._pendingMutationCleanupThreshold)return;const e=Date.now();this._updatePendingMutations(t=>{for(const[r,s]of Array.from(t.entries()))s.confirmed&&s.confirmed+this._pendingTxCleanupTimeout<e&&t.delete(r)})}_trySendAuthed(...e){this.status===ue.AUTHENTICATED&&this._trySend(...e)}_trySend(e,t,r){if(this._transport.isOpen()){switch(mr[t.op]||this._log.info("[send]",this._transport.id,t.op,{"client-event-id":e,...t}),t.op){case"transact":{this._inFlightMutationEventIds.add(e);break}case"init":this._inFlightMutationEventIds.clear()}this._transport.send({"client-event-id":e,...t})}}_transportOnOpen=e=>{const t=e.target;if(this._transport!==t){this._log.info("[socket][open]",t.id,"skip; this is no longer the current transport");return}this._log.info("[socket][open]",this._transport.id),this._setStatus(ue.OPENED),this.getCurrentUser().then(r=>{this._trySend($(),{op:"init","app-id":this.config.appId,"refresh-token":r.user?.refresh_token,versions:this.versions,"__admin-token":this.config.__adminToken})}).catch(r=>{this._log.error("[socket][error]",t.id,r)})};_transportOnMessage=e=>{const t=e.target,r=e.message;if(this._transport!==t){this._log.info("[socket][message]",t.id,r,"skip; this is no longer the current transport");return}if(!this._wsOk&&t.type==="ws"&&(this._wsOk=!0),this._transportType="ws",Array.isArray(e.message))for(const s of e.message)this._handleReceive(t.id,s);else this._handleReceive(t.id,e.message)};_transportOnError=e=>{const t=e.target;if(this._transport!==t){this._log.info("[socket][error]",t.id,"skip; this is no longer the current transport");return}this._log.error("[socket][error]",t.id,e)};_scheduleReconnect=()=>{!this._wsOk&&this._transportType!=="sse"&&(this._transportType="sse",this._reconnectTimeoutMs=0),setTimeout(()=>{if(this._reconnectTimeoutMs=Math.min(this._reconnectTimeoutMs+1e3,1e4),!this._isOnline){this._log.info("[socket][close]",this._transport.id,"we are offline, no need to start socket");return}this._startSocket()},this._reconnectTimeoutMs)};_transportOnClose=e=>{const t=e.target;if(this._transport!==t){this._log.info("[socket][close]",t.id,"skip; this is no longer the current transport");return}this._setStatus(ue.CLOSED);for(const r of Object.values(this._rooms))r.isConnected=!1;if(this._isShutdown){this._log.info("[socket][close]",t.id,"Reactor has been shut down and will not reconnect");return}this._log.info("[socket][close]",t.id,"schedule reconnect, ms =",this._reconnectTimeoutMs),this._scheduleReconnect()};_startSocket(){if(this._wsOk=null,this._isShutdown){this._log.info("[socket][start]",this.config.appId,"Reactor has been shut down and will not start a new socket");return}if(this._transport&&this._transport.isConnecting()){this._log.info("[socket][start]",this._transport.id,"maintained as current transport, we were still in a connecting state");return}const e=this._transport;this._transport=Fo({transportType:this._transportType,appId:this.config.appId,apiURI:this.config.apiURI,wsURI:this.config.websocketURI,EventSourceImpl:this._EventSource}),this._transport.onopen=this._transportOnOpen,this._transport.onmessage=this._transportOnMessage,this._transport.onclose=this._transportOnClose,this._transport.onerror=this._transportOnError,this._log.info("[socket][start]",this._transport.id),e?.isOpen()&&(this._log.info("[socket][start]",this._transport.id,"close previous transport id = ",e.id),e.close())}async getLocalId(e){const t=`localToken_${e}`;if(this.kv.currentValue[t])return this.kv.currentValue[t];const r=await this.kv.waitForKeyToLoad(t);if(r)return r;const s=$();return this.kv.updateInPlace(i=>{i[t]||(i[t]=s)}),await this.kv.waitForKeyToLoad(t)}_replaceUrlAfterOAuth(){if(typeof URL>"u")return;const e=new URL(window.location.href);if(e.searchParams.get(Wt)){const t=e.toString();e.searchParams.delete(Wt),e.searchParams.delete(Qt),e.searchParams.delete("code"),e.searchParams.delete("error");const r=e.pathname+(e.searchParams.size?"?"+e.searchParams:"")+e.hash;if(history.replaceState(history.state,"",r),typeof navigation=="object"&&typeof navigation.addEventListener=="function"&&typeof navigation.removeEventListener=="function"){let s=!1;const i=o=>{s||(s=!0,navigation.removeEventListener("navigate",i),!o.userInitiated&&o.navigationType==="replace"&&o.destination?.url===t&&history.replaceState(history.state,"",r))};navigation.addEventListener("navigate",i)}}}async _oauthLoginInit(){if(typeof window>"u"||typeof window.location>"u"||typeof URLSearchParams>"u")return null;const e=new URLSearchParams(window.location.search);if(!e.get(Wt))return null;const t=e.get("error");if(t)return this._replaceUrlAfterOAuth(),{error:{message:t}};const r=e.get("code");if(!r)return null;const s=e.get(Qt);this._replaceUrlAfterOAuth();try{let i;const o=await this.kv.waitForKeyToLoad(rt);s&&o&&(i=o[s]),o&&this.kv.updateInPlace(l=>{delete l[rt]});const a=await this._getCurrentUser(),c=a?.type==="guest",{user:u}=await Gn({apiURI:this.config.apiURI,appId:this.config.appId,code:r,refreshToken:c?a.refresh_token:void 0,extraFields:i});return this.setCurrentUser(u),null}catch(i){return i?.body?.type==="record-not-found"&&i?.body?.hint?.["record-type"]==="app-oauth-code"&&await this._hasCurrentUser()?null:{error:{message:i?.body?.message||"Error logging in."}}}}async _waitForOAuthCallbackResponse(){return await this._oauthCallbackResponse}__subscribeMutationErrors(e){return this.mutationErrorCbs.push(e),()=>{this.mutationErrorCbs=this.mutationErrorCbs.filter(t=>t!==e)}}subscribeAuth(e){this.authCbs.push(e);const t=this._currentUserCached;t.isLoading||e(this._currentUserCached);let r=!1;return this.getCurrentUser().then(s=>{r||Be(s,t)||e(s)}),()=>{r=!0,this.authCbs=this.authCbs.filter(s=>s!==e)}}async getAuth(){const{user:e,error:t}=await this.getCurrentUser();if(t)throw new U("Could not get current user: "+t.message);return e??null}subscribeConnectionStatus(e){return this.connectionStatusCbs.push(e),()=>{this.connectionStatusCbs=this.connectionStatusCbs.filter(t=>t!==e)}}_setAppStatus(e){!e||e===this._appStatusState.status||(this._appStatusState={isLoading:!1,isReadOnly:e!=="active",status:e},this.notifyAppStatusSubs(this._appStatusState))}subscribeAppStatus(e){return this.appStatusCbs.push(e),e(this._appStatusState),()=>{this.appStatusCbs=this.appStatusCbs.filter(t=>t!==e)}}subscribeAttrs(e){return this.attrsCbs.push(e),this.attrs&&e(this.attrs.attrs),()=>{this.attrsCbs=this.attrsCbs.filter(t=>t!==e)}}notifyAuthSubs(e){this.authCbs.forEach(t=>t(e))}notifyMutationErrorSubs(e){this.mutationErrorCbs.forEach(t=>t(e))}notifyAttrsSubs(){if(!this.attrs)return;const e=this.optimisticAttrs();this.attrsCbs.forEach(t=>t(e.attrs))}notifyConnectionStatusSubs(e){this.connectionStatusCbs.forEach(t=>t(e))}notifyAppStatusSubs(e){this.appStatusCbs.forEach(t=>t(e))}async setCurrentUser(e){this.kv.updateInPlace(t=>{t[Ce]=e}),await this.kv.waitForKeyToLoad(Ce)}getCurrentUserCached(){return this._currentUserCached}async _getCurrentUser(e){e?.forceReadFromStorage&&await this.kv.unloadKey(Ce);const t=await this.kv.waitForKeyToLoad(Ce);return typeof t=="string"?JSON.parse(t):t}async getCurrentUser(e){const t=await this._waitForOAuthCallbackResponse();if(t?.error){const r={error:t.error,user:void 0};return this._currentUserCached={isLoading:!1,...r},this._currentUserCached}try{const s={user:await this._getCurrentUser(e),error:void 0};return this._currentUserCached={isLoading:!1,...s},this._currentUserCached}catch(r){return{user:void 0,isLoading:!1,error:{message:r?.message||"Error loading user"}}}}async _hasCurrentUser(){const e=await this.kv.waitForKeyToLoad(Ce);return typeof e=="string"?JSON.parse(e)!=null:e!=null}async changeCurrentUser(e){const{user:t}=await this.getCurrentUser();if(!Be(t,e)){this._frameworkClient=null,await this.setCurrentUser(e),await this.updateUser(e);try{await this.kv.flush(),this._broadcastChannel?.postMessage({type:"auth"})}catch(r){console.error("Error posting message to broadcast channel",r)}}}async setupUserSyncTimer(){if(this.config.firstPartyPath)try{const e=await this.kv.waitForKeyToLoad(gr),t=e?new Date(e).getTime():0;if(!(!Number.isFinite(t)||Date.now()-t>=Lo))return;const{user:s}=await this.getCurrentUser();await this.syncUserToEndpoint(s??null)}catch(e){this._log.error("Error syncing user cookie on startup",e)}}async syncUserToEndpoint(e){if(this.config.firstPartyPath){try{const t=await fetch(this.config.firstPartyPath+"/",{method:"POST",body:JSON.stringify({type:"sync-user",appId:this.config.appId,user:e}),headers:{"Content-Type":"application/json"}});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`)}catch(t){this._log.error("Error syncing user with external endpoint",t)}this.kv.updateInPlace(t=>{t[gr]=new Date().toISOString()})}}async updateUser(e){const t={error:void 0,user:e};this._currentUserCached={isLoading:!1,...t},this._dataForQueryCache={},this.querySubs.updateInPlace(r=>{Object.keys(r).forEach(s=>{delete r[s].result})}),this.querySubs.clearUnloadedKeys(),this._updatePendingMutations(r=>{for(const[s,i]of r.entries())this.mutationDeferredStore.get(s)&&this._finishTransaction("error",s,{message:"User changed while transaction was in progress.",type:"user-changed"});r.clear()}),this._reconnectTimeoutMs=0,this._transport.close(),this._oauthCallbackResponse=null,this.notifyAuthSubs(t);try{await this.syncUserToEndpoint(e)}catch(r){this._log.error("Error syncing user with external endpoint",r)}}sendMagicCode({email:e}){return to({apiURI:this.config.apiURI,appId:this.config.appId,email:e})}async signInWithMagicCode(e){const t=await this.getCurrentUser(),r=t?.user?.type==="guest",s=await no({apiURI:this.config.apiURI,appId:this.config.appId,email:e.email,code:e.code,refreshToken:r?t?.user?.refresh_token:void 0,extraFields:e.extraFields});return await this.changeCurrentUser(s.user),s}async signInWithCustomToken(e){const t=await ro({apiURI:this.config.apiURI,appId:this.config.appId,refreshToken:e});return await this.changeCurrentUser(t.user),t}async signInAsGuest(e){const t=await so({apiURI:this.config.apiURI,appId:this.config.appId,extraFields:e?.extraFields});return await this.changeCurrentUser(t.user),t}potentiallyInvalidateToken(e,t){const r=e?.user?.refresh_token;if(!r)return;if(t.invalidateToken===!1){this._log.info("[auth-invalidate] skipped invalidateToken");return}oo({apiURI:this.config.apiURI,appId:this.config.appId,refreshToken:r}).then(()=>{this._log.info("[auth-invalidate] completed invalidateToken")}).catch(i=>{})}async signOut(e){const t=await this.getCurrentUser();this.potentiallyInvalidateToken(t,e),await this.changeCurrentUser(null)}createAuthorizationURL({clientName:e,redirectURL:t,extraFields:r}){const{apiURI:s,appId:i}=this.config;let o=t;if(r){const a=`${Math.random().toString(36).slice(2)}`;this.kv.updateInPlace(c=>{const u=c[rt]||{};u[a]=r,c[rt]=u}),o=`${t}${t.includes("?")?"&":"?"}${Qt}=${a}`}return`${s}/runtime/oauth/start?app_id=${i}&client_name=${e}&redirect_uri=${encodeURIComponent(o)}`}async exchangeCodeForToken({code:e,codeVerifier:t,extraFields:r}){const s=await this.getCurrentUser(),i=s?.user?.type==="guest",o=await Gn({apiURI:this.config.apiURI,appId:this.config.appId,code:e,codeVerifier:t,refreshToken:i?s?.user?.refresh_token:void 0,extraFields:r});return await this.changeCurrentUser(o.user),o}issuerURI(){const{apiURI:e,appId:t}=this.config;return`${e}/runtime/${t}`}async signInWithIdToken(e){const r=(await this.getCurrentUser())?.user?.refresh_token,s=await io({apiURI:this.config.apiURI,appId:this.config.appId,idToken:e.idToken,clientName:e.clientName,nonce:e.nonce,refreshToken:r,extraFields:e.extraFields});return await this.changeCurrentUser(s.user),s}joinRoom(e,t,r){let s=!1;this._rooms[t]||(s=!0,this._rooms[t]={roomType:e,isConnected:!1,error:void 0}),this._presence[t]=this._presence[t]||{};const i=this._presence[t].result;return r&&!i&&(this._presence[t].result=this._presence[t].result||{},this._presence[t].result.user=r,this._notifyPresenceSubs(t)),s&&this._tryJoinRoom(e,t,r),()=>{this._cleanupRoom(t)}}_cleanupRoom(e){if(!this._presence[e]?.handlers?.length&&!Object.keys(this._broadcastSubs[e]??{}).length){const t=this._rooms[e]?.isConnected;delete this._rooms[e],delete this._presence[e],delete this._broadcastSubs[e],t?this._tryLeaveRoom(e):this._roomsPendingLeave[e]=!0}}getPresence(e,t,r={}){const s=this._rooms[t],i=this._presence[t];return!s||!i||!i.result?null:{...ho(i.result,r,this._sessionId),isLoading:!s.isConnected,error:s.error}}publishPresence(e,t,r){const s=this._rooms[t],i=this._presence[t];if(!s||!i)return;i.result=i.result||{};const o={...i.result.user,...r};i.result.user=o,s.isConnected&&(this._trySetPresence(t,o),this._notifyPresenceSubs(t))}_trySetPresence(e,t){this._trySendAuthed($(),{op:"set-presence","room-id":e,data:t})}_tryJoinRoom(e,t,r){this._trySendAuthed($(),{op:"join-room","room-type":e,"room-id":t,data:r}),delete this._roomsPendingLeave[t]}_tryLeaveRoom(e){this._trySendAuthed($(),{op:"leave-room","room-id":e})}_trySetRoomConnected(e,t){const r=this._rooms[e];r&&(r.isConnected=t)}subscribePresence(e,t,r,s){const i=this.joinRoom(e,t,r.initialPresence||r.initialData),o={...r,roomId:t,cb:s,prev:null};return this._presence[t]=this._presence[t]||{},this._presence[t].handlers=this._presence[t].handlers||[],this._presence[t].handlers.push(o),this._notifyPresenceSub(t,o),()=>{this._presence[t].handlers=this._presence[t]?.handlers?.filter(a=>a!==o)??[],i()}}_notifyPresenceSubs(e){this._presence[e]?.handlers?.forEach(t=>{this._notifyPresenceSub(e,t)})}_notifyPresenceSub(e,t){const r=this.getPresence("",e,t);r&&(t.prev&&!po(r,t.prev)||(t.prev=r,t.cb(r)))}_patchPresencePeers(e,t){const r=this._presence[e]?.result?.peers||{};let s=Object.fromEntries(Object.entries(r).map(([o,a])=>[o,{data:a}]));this._presence[e]?.result;const i=Ve(s,o=>{for(let[a,c,u]of t)switch(c){case"+":Qr(o,a,u);break;case"r":hn(o,a,u);break;case"-":pn(o,a);break}delete o[this._sessionId]});this._setPresencePeers(e,i)}_setPresencePeers(e,t){const r={...t};delete r[this._sessionId];const s=Object.fromEntries(Object.entries(r).map(([i,o])=>[i,o.data]));this._presence=Ve(this._presence,i=>{hn(i,[e,"result","peers"],s)})}publishTopic({roomType:e,roomId:t,topic:r,data:s}){const i=this._rooms[t];if(i){if(!i.isConnected){this._broadcastQueue[t]=this._broadcastQueue[t]??[],this._broadcastQueue[t].push({topic:r,roomType:e,data:s});return}this._tryBroadcast(t,e,r,s)}}_tryBroadcast(e,t,r,s){this._trySendAuthed($(),{op:"client-broadcast","room-id":e,roomType:t,topic:r,data:s})}subscribeTopic(e,t,r,s){const i=this.joinRoom(e,t);return this._broadcastSubs[t]=this._broadcastSubs[t]||{},this._broadcastSubs[t][r]=this._broadcastSubs[t][r]||[],this._broadcastSubs[t][r].push(s),this._presence[t]=this._presence[t]||{},()=>{this._broadcastSubs[t][r]=this._broadcastSubs[t][r].filter(o=>o!==s),this._broadcastSubs[t][r].length||delete this._broadcastSubs[t][r],i()}}_notifyBroadcastSubs(e,t,r){this._broadcastSubs?.[e]?.[t]?.forEach(s=>{const i=r.data?.data,o=r.data["peer-id"]===this._sessionId?this._presence[e]?.result?.user:this._presence[e]?.result?.peers?.[r.data["peer-id"]];return s(i,o)})}async uploadFile(e,t,r){const i=(await this.getCurrentUser())?.user?.refresh_token;return ao({...r,apiURI:this.config.apiURI,appId:this.config.appId,path:e,file:t,refreshToken:i})}async deleteFile(e){const r=(await this.getCurrentUser())?.user?.refresh_token;return await co({apiURI:this.config.apiURI,appId:this.config.appId,path:e,refreshToken:r})}async upload(e,t){const s=(await this.getCurrentUser())?.user?.refresh_token,i=e||t.name,o=await uo({apiURI:this.config.apiURI,appId:this.config.appId,fileName:i,refreshToken:s});return await lo(o,t)}async getDownloadUrl(e){const r=(await this.getCurrentUser())?.user?.refresh_token;return await fo({apiURI:this.config.apiURI,appId:this.config.appId,path:e,refreshToken:r})}}function Bo(n,e){return new tt(_r(n,e),e,void 0)}function Go(n){return new et(n,{})}function Ho(){return new Q("string",!0,!1)}function Jo(){return new Q("number",!0,!1)}function Yo(){return new Q("boolean",!0,!1)}function Zo(){return new Q("date",!0,!1)}function Xo(){return new Q("json",!0,!1)}function ea(){return new Q("json",!0,!1)}function _r(n,e){const t={fwd:{},rev:{}};for(const s of Object.values(e))t.fwd[s.forward.on]||={},t.rev[s.reverse.on]||={},t.fwd[s.forward.on][s.forward.label]={entityName:s.reverse.on,cardinality:s.forward.has},t.rev[s.reverse.on][s.reverse.label]={entityName:s.forward.on,cardinality:s.reverse.has};return Object.fromEntries(Object.entries(n).map(([s,i])=>[s,new et(i.attrs,{...t.fwd[s],...t.rev[s]})]))}function ta({entities:n,links:e,rooms:t}){const r=e??{},s=t??{};return new tt(_r(n,r),r,s)}const R={graph:Bo,schema:ta,entity:Go,string:Ho,number:Jo,boolean:Yo,date:Zo,json:Xo,any:ea};let Sr;function na(n,e){Sr?.dispose();const t=ca(e),r=ia(e,a),s=sa(ra(n,e));function i(l){l.source===s.element.contentWindow&&l.data?.type==="close"&&t.isVisible()&&a()}function o(l){const f=l.shiftKey&&l.ctrlKey&&l.code==="Digit0",d=l.key==="Escape"||l.key==="Esc";(f||d&&t.isVisible())&&a()}function a(){t.isVisible()?t.element.style.display="none":(t.element.style.display="block",t.element.contains(s.element)||t.element.appendChild(s.element))}function c(){t.element.remove(),r.element.remove(),removeEventListener("keydown",o),removeEventListener("message",i)}function u(){document.body.appendChild(t.element),document.body.appendChild(r.element),addEventListener("keydown",o),addEventListener("message",i),Sr={dispose:c}}return u()}function ra(n,e){const t=Lt||Jn;return`${(e.dashURI??(t?"http://localhost:3000":"https://instantdb.com")).replace(/\/+$/,"")}/_devtool?appId=${n}`}function sa(n){const e=document.createElement("iframe");return e.src=n,e.className="instant-devtool-iframe",Object.assign(e.style,{width:"100%",height:"100%",backgroundColor:"white",border:"none"}),{element:e}}function ia(n,e){const t=`
    <svg width="32" height="32" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
      <rect width="512" height="512" fill="black"/>
      <rect x="97.0973" y="91.3297" width="140" height="330" fill="white"/>
    </svg>
  `,r=document.createElement("button");return r.innerHTML=t,r.className="instant-devtool-toggler",Object.assign(r.style,{position:"fixed",...oa(n.position),height:"32px",width:"32px",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"9010",padding:"0",margin:"0",border:"none",cursor:"pointer"}),r.addEventListener("click",e),{element:r}}function oa(n){switch(n){case"bottom-left":return{bottom:"24px",left:"24px"};case"bottom-right":return{bottom:"24px",right:"24px"};case"top-right":return{top:"24px",right:"24px"};case"top-left":return{top:"24px",left:"24px"}}}function aa(n){switch(n){case"bottom-left":return{bottom:"24px",right:"24px",left:"60px",top:"72px"};case"bottom-right":return{bottom:"24px",left:"24px",right:"60px",top:"72px"};case"top-right":return{top:"24px",left:"24px",right:"60px",bottom:"72px"};case"top-left":return{top:"24px",right:"24px",left:"60px",bottom:"72px"}}}function ca(n){const e=document.createElement("div");Object.assign(e.style,{position:"fixed",...aa(n.position),display:"block",borderRadius:"4px",border:"1px #ccc solid",boxShadow:"0px 0px 8px #00000044",backgroundColor:"#eee",zIndex:"999990"}),e.style.display="none",e.className="instant-devtool-container";function t(){return e.style.display!=="none"}return{element:e,isVisible:t}}function ua(n,e){return e&&e.refresh_token?new Response(JSON.stringify({ok:!0}),{headers:{"Content-Type":"application/json","Set-Cookie":`instant_user_${n.appId}=${encodeURIComponent(JSON.stringify(e))}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`}}):new Response(JSON.stringify({ok:!0}),{headers:{"Content-Type":"application/json","Set-Cookie":`instant_user_${n.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`}})}function st(n,e){return new Response(JSON.stringify({ok:!1,error:e}),{status:n,headers:{"Content-Type":"application/json"}})}const la=n=>({POST:async e=>{let t;try{t=await e.json()}catch{return st(400,"Invalid JSON body")}return t.type?t.appId!==n.appId?st(403,"App ID mismatch"):t.type==="sync-user"?ua(n,t.user??null):st(400,`Unknown type: ${t.type}`):st(400,'Missing "type" field')}}),da=n=>{const e={};for(const[i,o]of Object.entries(n.entities)){const a=o,c={};for(const[u,l]of Object.entries(a.attrs)){const f=l;let d;switch(f.valueType){case"string":d=R.string();break;case"number":d=R.number();break;case"boolean":d=R.boolean();break;case"date":d=R.date();break;case"json":d=R.json();break;default:d=R.json()}f.required||(d=d.optional()),f.config?.indexed&&(d=d.indexed()),f.config?.unique&&(d=d.unique()),c[u]=d}e[i]=R.entity(c)}const t=n.links||{},r={};if(n.rooms)for(const[i,o]of Object.entries(n.rooms)){const a=o,c={};for(const[l,f]of Object.entries(a.presence.attrs)){const d=f;let h;switch(d.valueType){case"string":h=R.string();break;case"number":h=R.number();break;case"boolean":h=R.boolean();break;case"date":h=R.date();break;case"json":h=R.json();break;default:h=R.json()}d.required||(h=h.optional()),d.config?.indexed&&(h=h.indexed()),d.config?.unique&&(h=h.unique()),c[l]=h}const u={};if(a.topics)for(const[l,f]of Object.entries(a.topics)){const d=f,h={};for(const[p,m]of Object.entries(d.attrs)){const b=m;let y;switch(b.valueType){case"string":y=R.string();break;case"number":y=R.number();break;case"boolean":y=R.boolean();break;case"date":y=R.date();break;case"json":y=R.json();break;default:y=R.json()}b.required||(y=y.optional()),b.config?.indexed&&(y=y.indexed()),b.config?.unique&&(y=y.unique()),h[p]=y}u[l]=R.entity(h)}r[i]={presence:R.entity(c),topics:u}}return R.schema({entities:e,links:t,rooms:r})},fa=typeof window>"u"||"Deno"in globalThis;class ha{params;db;resultMap=new Map;queryResolvedCallbacks=[];constructor(e){this.params=e,this.db=e.db,this.resultMap=new Map}subscribe=e=>{this.queryResolvedCallbacks.push(e)};addQueryResult=(e,t)=>{this.resultMap.set(e,{type:t.type,status:"success",data:t,promise:null,error:null}),fa||(this.db._reactor.attrs||this.db._reactor._setAttrs(t.attrs),this.db._reactor._addQueryData(t.query,t,!!this.db._reactor.config.schema))};removeCachedQueryResult=e=>{this.resultMap.delete(e)};queryClient=(e,t)=>{const{hash:r,query:s}=this.hashQuery(e,t);let i,o;const a=new Promise((l,f)=>{i=l,o=f});let c={status:"pending",type:"session",data:void 0,error:void 0,promise:a},u=null;return u=this.db.subscribeQuery(s,l=>{l.error?(c.status="error",c.error=l.error,c.promise=null,o(l.error)):(c.status="success",c.data=l,c.promise=null,i(l)),u!==null&&u()}),this.resultMap.set(r,c),a};query=(e,t)=>{const{hash:r,query:s}=this.hashQuery(e,t);if(this.db._reactor.status==="authenticated"){const a=this.db.queryOnce(e,t);let c={status:"pending",type:"session",data:void 0,error:void 0,promise:a};return a.then(u=>{c.status="success",c.data=u,c.promise=null}),a.catch(u=>{c.status="error",c.error=u,c.promise=null}),this.resultMap.set(r,c),c}const i=this.getTriplesAndAttrsForQuery(s);let o={status:"pending",type:"http",data:void 0,error:void 0,promise:i};return i.then(a=>{o.status="success",o.data=a,o.promise=null}),i.catch(a=>{o.status="error",o.error=a,o.promise=null}),i.then(a=>{this.queryResolvedCallbacks.forEach(c=>{c({queryHash:r,query:s,attrs:a.attrs,triples:a.triples,pageInfo:a.pageInfo})})}),this.resultMap.set(r,o),o};getExistingResultForQuery=(e,t)=>{const{hash:r}=this.hashQuery(e,t);return this.resultMap.get(r)};completeIsomorphic=(e,t,r,s)=>{const i={};r.forEach(l=>{i[l.id]=l});const o=!!this.db?._reactor?.config?.schema&&("cardinalityInference"in this.db?._reactor?.config?!!this.db?._reactor.config?.cardinalityInference:!0),a=new he(r.reduce((l,f)=>(l[f.id]=f,l),{}),Nt(this.db?._reactor.config.schema)),c=Te(a,t,o,this.params.db._reactor.config.useDateObjects||!1);return Ct({store:c,attrsStore:a,pageInfo:s,aggregate:void 0},e)};hashQuery=(e,t)=>{e&&t&&"ruleParams"in t&&(e={$$ruleParams:t.ruleParams,...e});const r=e?Jt(e):null;return{hash:F(r),query:r}};getTriplesAndAttrsForQuery=async e=>{try{const t=await fetch(`${this.db._reactor.config.apiURI}/runtime/framework/query`,{method:"POST",headers:{"app-id":this.params.db._reactor.config.appId,"Content-Type":"application/json",Authorization:this.params.token?`Bearer ${this.params.token}`:void 0},body:JSON.stringify({query:e})});if(!t.ok)try{const a=await t.json();throw"message"in a?new Ie({body:a,status:t.status}):new Error("Error getting triples from server")}catch(a){throw a instanceof U?a:new Error("Error getting triples from server")}const r=await t.json(),s=r?.attrs;if(!s)throw new Error("No attrs");const i=r.result?.[0].data?.["datalog-result"]?.["join-rows"][0],o=r.result?.[0]?.data?.["page-info"];return{attrs:s,triples:i,type:"http",queryHash:this.hashQuery(e).hash,query:e,pageInfo:o}}catch(t){if(t instanceof U)throw t;const r=new Error("Error getting triples from framework client");throw r.cause=t,r}}}function Ne(n,e){if(!n)throw new Error("[assertion error] "+e)}const pa=n=>JSON.stringify(n),Fe=(n,e=!1)=>JSON.stringify([n,e]),Tr=n=>{const[e,t]=JSON.parse(n);return{cursor:e,afterInclusive:t}},Ee=(n,e,t=!1)=>`${n}:${Fe(e,t)}`,ya=n=>!!n.endCursor,ba=n=>{const e=Array.from(n.values());return e.length===0?!1:e[e.length-1]?.hasMore||!1},vr=n=>{if(!n)return{serverCreatedAt:"asc"};const e=Object.keys(n).at(0);return e?{[e]:n[e]==="asc"?"desc":"asc"}:{serverCreatedAt:"asc"}},Ar=n=>n&&Object.keys(n).length>0?n:{serverCreatedAt:"asc"},ga=(n,e)=>{const t=[...Array.from(e.values()).slice().reverse(),...Array.from(n.values())],r=[...Array.from(e.values()).slice().reverse().flatMap(s=>s.data.slice().reverse()),...Array.from(n.values()).flatMap(s=>s.data)];return{chunks:t,data:r}},Bt=["bootstrap","bootstrap","bootstrap",1],ma=(n,e,t,r)=>{const{entityName:s,entityQuery:i}=kr(e),o=i.$?.limit||10,a=s,c=Ar(i.$?.order),u=new Map,l=new Map,f=new Map;let d=!1,h=!0,p=null,m=null;const b=w=>{t({error:w,data:void 0,canLoadNextPage:!1})},y=()=>{if(!h)return;const{chunks:w,data:S}=ga(u,l);t({data:{[a]:S},chunks:w,canLoadNextPage:ba(u)})},g=(w,S)=>{u.set(Fe(w,S.afterInclusive),S),y()},k=(w,S)=>{l.set(Fe(w),S),C(),y()},L=(w,S)=>{const{cursor:v}=Tr(w);f.get(Ee("reverse",v))?.();const N=n.subscribeQuery({[a]:{...i,$:{after:v,before:S.endCursor,beforeInclusive:!0,where:i.$?.where,fields:i.$?.fields,order:vr(c)}}},ne=>{if(ne.error)return b(ne.error);const Y=ne.data[a],B=ne.pageInfo[a];Ne(Y&&B,"Expected query subscription to contain rows and pageInfo"),k(v,{data:Y,status:"frozen",hasMore:B.hasNextPage,endCursor:B.endCursor})},r);f.set(Ee("reverse",v),N)},O=w=>{const S=n.subscribeQuery({[a]:{...i,$:{limit:o,after:w,where:i.$?.where,fields:i.$?.fields,order:vr(c)}}},v=>{if(v.error)return b(v.error);const M=v.data[a],N=v.pageInfo[a];Ne(M&&N,"Expected rows and pageInfo"),k(w,{data:M,status:"bootstrapping",hasMore:N.hasNextPage,endCursor:N.endCursor})},r);f.set(Ee("reverse",w),S)},q=(w,S=!1)=>{const v=n.subscribeQuery({[a]:{...i,$:{limit:o,after:w,afterInclusive:S,where:i.$?.where,fields:i.$?.fields,order:c}}},M=>{if(M.error)return b(M.error);const N=M.data[a],ne=M.pageInfo[a];Ne(N&&ne,"Page info and rows"),g(w,{data:N,status:"bootstrapping",hasMore:ne.hasNextPage,endCursor:ne.endCursor,afterInclusive:S})},r);f.set(Ee("forward",w,S),v)},E=(w,S=!1)=>{const v=Fe(w,S);f.get(Ee("forward",w,S))?.();const N=u.get(v);if(!N?.endCursor)return;const ne=n.subscribeQuery({[a]:{...i,$:{after:w,afterInclusive:N.afterInclusive,before:N.endCursor,beforeInclusive:!0,where:i.$?.where,fields:i.$?.fields,order:c}}},Y=>{if(Y.error)return b(Y.error);const B=Y.data[a],re=Y.pageInfo[a];Ne(B&&re,"Expected rows and pageInfo"),g(w,{data:B,status:"frozen",hasMore:re.hasNextPage,endCursor:re.endCursor,afterInclusive:N.afterInclusive})},r);f.set(Ee("forward",w,S),ne)},C=()=>{const w=Array.from(l.entries()).at(-1);if(!w)return;const[S,v]=w;if(!v?.hasMore||!ya(v))return;const M=`${S}:${pa(v.endCursor)}`;M!=p&&(p=M,L(S,v),O(v.endCursor))},V=()=>{const w=Array.from(u.entries()).at(-1);if(!w)return;const[S,v]=w;if(!v.endCursor)return;const{cursor:M,afterInclusive:N}=Tr(S);E(M,N),q(v.endCursor)};return m=n.subscribeQuery({[a]:{...i,$:{limit:o,where:i.$?.where,fields:i.$?.fields,order:c}}},async w=>{if(d)return;if(w.error)return b(w.error);const S=w.pageInfo[a],v=w?.data?.[a];if(Ne(v&&S,"Expected rows and pageInfo"),v.length<o){g(Bt,{data:v,status:"pre-bootstrap"});return}const M=S.startCursor;if(!M){g(Bt,{data:v,status:"pre-bootstrap"});return}u.delete(Fe(Bt)),q(M,!0),O(S.startCursor),d=!0},r),{unsubscribe:()=>{if(h){h=!1,m?.(),m=null;for(const w of f.values())w?.();f.clear()}},loadNextPage:V}},wa=(n,e,t)=>{if(!e)return{canLoadNextPage:!1,data:void 0,error:void 0};const{entityName:r,entityQuery:s}=kr(e),i=s.$?.limit||10,o=Ar(s.$?.order);let a=e?Jt({[r]:{...s,$:{limit:i,where:s.$?.where,fields:s.$?.fields,order:o}}}):null;return t&&"ruleParams"in t&&(a={$$ruleParams:t.ruleParams,...a}),{canLoadNextPage:!1,data:n._reactor.getPreviousResult(a)?.data||void 0,error:void 0}},kr=n=>{if(Object.keys(n).length!==1)throw new P("subscribeInfiniteQuery expects exactly one entity");const[t,r]=Object.entries(n)[0];if(!t||!r)throw new P("No query provided for infinite query");return{entityName:t,entityQuery:r}},_a={apiURI:"https://api.instantdb.com",websocketURI:"wss://api.instantdb.com/runtime/session"};function Sa(){return globalThis.__instantDbSchemaHashStore=globalThis.__instantDbSchemaHashStore??new WeakMap,globalThis.__instantDbSchemaHashStore}function Ta(){return globalThis.__instantDbStore=globalThis.__instantDbStore??{},globalThis.__instantDbStore}function Gt(n){const e=n.__adminToken,t=n.__extraDedupeKey;return n.appId+"_"+(n.websocketURI||"default_ws_uri")+"_"+(n.apiURI||"default_api_uri")+"_"+(e||"client_only")+"_"+n.useDateObjects+"_"+(t||"")}const Ht=Ta(),Ir=Sa();class Or{constructor(e){this.db=e}sendMagicCode=e=>this.db.sendMagicCode(e);signInWithMagicCode=e=>this.db.signInWithMagicCode(e);signInWithToken=e=>this.db.signInWithCustomToken(e);signInAsGuest=e=>this.db.signInAsGuest(e);createAuthorizationURL=e=>this.db.createAuthorizationURL(e);signInWithIdToken=e=>this.db.signInWithIdToken(e);exchangeOAuthCode=e=>this.db.exchangeCodeForToken(e);issuerURI=()=>this.db.issuerURI();signOut=(e={invalidateToken:!0})=>this.db.signOut(e)}class Cr{constructor(e){this.db=e}uploadFile=(e,t,r={})=>this.db.uploadFile(e,t,r);delete=e=>this.db.deleteFile(e);upload=(e,t)=>this.db.upload(e,t);put=this.upload;getDownloadUrl=e=>this.db.getDownloadUrl(e)}class Er{constructor(e){this.db=e}createReadStream=e=>this.db.createReadStream(e);createWriteStream=e=>this.db.createWriteStream(e)}function Jt(n){return JSON.parse(JSON.stringify(n))}class Mr{_reactor;auth;storage;streams;tx=Mt();constructor(e){this._reactor=e,this.auth=new Or(this._reactor),this.storage=new Cr(this._reactor),this.streams=new Er(this._reactor)}transact(e){return this._reactor.pushTx(e)}getLocalId(e){return this._reactor.getLocalId(e)}subscribeQuery(e,t,r){return this._reactor.subscribeQuery(e,t,r)}subscribeInfiniteQuery(e,t,r){return ma(this,e,t,r)}subscribeAuth(e){return this._reactor.subscribeAuth(e)}getAuth(){return this._reactor.getAuth()}subscribeConnectionStatus(e){return this._reactor.subscribeConnectionStatus(e)}subscribeAppStatus(e){return this._reactor.subscribeAppStatus(e)}joinRoom(e="_defaultRoomType",t="_defaultRoomId",r){return{leaveRoom:this._reactor.joinRoom(e,t,r?.initialPresence),subscribeTopic:(i,o)=>this._reactor.subscribeTopic(e,t,i,o),subscribePresence:(i,o)=>this._reactor.subscribePresence(e,t,i,o),publishTopic:(i,o)=>this._reactor.publishTopic({roomType:e,roomId:t,topic:i,data:o}),publishPresence:i=>this._reactor.publishPresence(e,t,i),getPresence:i=>this._reactor.getPresence(e,t,i)}}shutdown(){delete Ht[Gt(this._reactor.config)],this._reactor.shutdown()}queryOnce(e,t){return this._reactor.queryOnce(e,t)}_syncTableExperimental(e,t){return this._reactor.subscribeTable(e,t)}}function Pr(n){if(!n)return"0";const e=Ir.get(n);if(e)return e;const t=F(n);return Ir.set(n,t),t}function va(n,e){return Pr(n._reactor.config.schema)!==Pr(e)}function jr(n,e,t,r,s){const i={...n,appId:n.appId?.trim(),useDateObjects:n.useDateObjects??!1},o=Ht[Gt(i)];if(o)return va(o,i.schema)&&o._reactor.updateSchema(i.schema),o;const a=new wr({..._a,...i,cardinalityInference:!!i.schema},e||xt,t||Ut,{...r||{},"@instantdb/core":Ft},s),c=new Mr(a);return Ht[Gt(i)]=c,Aa(i.appId,i.devtool),c}function Aa(n,e){if(typeof window>"u"||typeof window.location>"u"||typeof document>"u"||typeof e=="boolean"&&!e)return;const t={position:"bottom-right",allowedHosts:["localhost"],...typeof e=="object"?e:{}};t.allowedHosts.includes(window.location.hostname)&&na(n,t)}const ka=jr,Ia=Rt;T.Auth=Or,T.FrameworkClient=ha,T.IndexedDBStorage=xt,T.InstantAPIError=Ie,T.InstantCoreDatabase=Mr,T.InstantError=U,T.InstantStream=br,T.QueryValidationError=P,T.Reactor=wr,T.SSEConnection=fr,T.Storage=Cr,T.StorageInterface=Ia,T.StoreInterface=Rt,T.Streams=Er,T.SyncTableCallbackEventType=yr,T.TransactionValidationError=te,T.WindowNetworkListener=Ut,T.coerceQuery=Jt,T.coerceToDate=De,T.createInstantRouteHandler=la,T.getInfiniteQueryInitialSnapshot=wa,T.getOps=Kn,T.i=R,T.id=$,T.init=jr,T.init_experimental=ka,T.lookup=Fn,T.parseSchemaFromJSON=da,T.setInstantWarningsEnabled=Ws,T.tx=Ti,T.txInit=Mt,T.validateQuery=Kt,T.validateTransactions=ur,T.version=Ft,T.weakHash=F,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})}));