tempest.games 0.1.39 → 0.1.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var St=Object.create;var{getPrototypeOf:kt,defineProperty:De,getOwnPropertyNames:bt}=Object;var xt=Object.prototype.hasOwnProperty;var ht=(e,o,t)=>{t=e!=null?St(kt(e)):{};let n=o||!e||!e.__esModule?De(t,"default",{value:e,enumerable:!0}):t;for(let i of bt(e))if(!xt.call(n,i))De(n,i,{get:()=>e[i],enumerable:!0});return n};var Jt=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var wt=(e,o)=>{for(var t in o)De(e,t,{get:o[t],enumerable:!0,configurable:!0,set:(n)=>o[t]=()=>n})};var $t=import.meta.require;function we(e=Math.random){return e().toString(36).slice(2)}class ke extends Promise{fate;resolve;reject;done=!1;constructor(e){let o,t;super((n,i)=>{o=n,t=i});this.resolve=o,this.reject=t,this.use(e instanceof Promise?e:new Promise(e))}pass(e,o){if(e===this.fate)this.resolve(o),this.done=!0}fail(e,o){if(e===this.fate)this.reject(o),this.done=!0}use(e){if(e instanceof Promise){let o=e;this.fate=o,o.then((t)=>{this.pass(o,t)},(t)=>{this.fail(o,t)})}else this.resolve(e),this.fate=void 0}}var So=(e,o,t=F.STORE)=>{return Xe(t,{key:`${e.key}:JSON`,get:({get:n})=>o.toJson(n(e)),set:({set:n},i)=>{n(e,o.fromJson(i))}})};function c(e){while(e.child!==null)e=e.child;return e}class g{Subscriber;subscribers=new Map;subscribe(e,o){return this.subscribers.set(e,o),()=>{this.unsubscribe(e)}}unsubscribe(e){this.subscribers.delete(e)}next(e){let o=this.subscribers.values();for(let t of o)t(e)}}class Ue extends g{state;constructor(e){super();this.state=e}next(e){this.state=e,super.next(e)}}function Z(e,o,t){let n={key:o.key,type:"atom_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","atom_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new g,l=Object.assign((s)=>{let m=x(s),y={key:o.key,subKey:m},p=`${o.key}(${m})`,d=c(e),T=o.default,b={key:p,default:T instanceof Function?T(s):T};if(o.effects)b.effects=o.effects(s);let K=ee(d,b,y);return r.next({type:"state_creation",token:K}),K},n,{subject:r,install:(s)=>Z(s,o),internalRoles:t});return e.families.set(o.key,l),e.defaults.set(o.key,o.default),n}function ko(e,o){if("mutable"in o)return be(e,o);return Z(e,o)}function Q(e,o,t){let n={key:o.key,type:"readonly_selector_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","readonly_selector_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new g,l=Object.assign((s)=>{let m=x(s),y={key:o.key,subKey:m},p=`${o.key}(${m})`,d=c(e),T=xe(d,{key:p,get:o.get(s)},y);return r.next({type:"state_creation",token:T}),T},n,{internalRoles:t,subject:r,install:(s)=>Q(s,o),default:(s)=>{return o.get(s)({get:(...y)=>$(e,...y),find:(...y)=>S(e,...y),json:(y)=>v(e,y)})}});return e.families.set(o.key,l),n}function bo(e,o){if("set"in o)return Ae(e,o);return Q(e,o)}class $e{_buffer;_index=0;constructor(e){let o;if(typeof e==="number")o=e;else o=e.length;this._buffer=Array.from({length:o})}get buffer(){return this._buffer}get index(){return this._index}add(e){this._buffer[this._index]=e,this._index=(this._index+1)%this._buffer.length}copy(){let e=new $e([...this._buffer]);return e._index=this._index,e}}var At={atom_family:"atom",mutable_atom_family:"mutable_atom",selector_family:"selector",readonly_selector_family:"readonly_selector",molecule_family:"molecule"};function xo(e,o){let t=x(o),n=`${e.key}(${t})`,i=At[e.type],r={key:n,type:i};return Object.assign(r,{family:{key:e.key,subKey:t}}),Object.assign(r,{counterfeit:!0}),r}function N(e){let o={key:e.key,type:e.type};if("family"in e)o.family=e.family;return o}function se(e){return Ao(F.STORE,e)}function oe(e){return ko(F.STORE,e)}function Oe(e,o,t=F.STORE){return t.joins.set(e.key,new ge(e,o,t)),{key:e.key,type:"join",a:e.between[0],b:e.between[1],cardinality:e.cardinality}}function go(e){return Co(e,F.STORE)}var Ne=(e)=>(o,t,n,i,...r)=>{console[e](`${o} ${t} "${n}" ${i}`,...r)},gt={error:Ne("error"),info:Ne("info"),warn:Ne("warn")};class qe{logLevel;filter;logger;constructor(e,o,t=gt){this.logLevel=e,this.filter=o,this.logger=t}error=(...e)=>{if((this.filter?.(...e)??!0)&&this.logLevel!==null)this.logger.error(...e)};info=(...e)=>{if((this.filter?.(...e)??!0)&&this.logLevel==="info")this.logger.info(...e)};warn=(...e)=>{if((this.filter?.(...e)??!0)&&this.logLevel!=="error"&&this.logLevel!==null)this.logger.warn(...e)}}var dn=Symbol("claim");class Fo{store;constructor(e=F.STORE){this.store=e,Ro("root",e)}allocate(e,o,t){return te(this.store,e,o,t)}fuse(e,o,t){return Ko(this.store,e,o,t)}deallocate(e){ne(this.store,e)}claim(e,o,t){return le(this.store,e,o,t)}}class Ye{store;realm;constructor(e=F.STORE){this.store=e,this.realm=new Fo(e)}allocate(e,o,t){te(this.store,e,o,t)}deallocate(e){ne(this.store,e)}claim(e,o,t){le(this.store,e,o,t)}}function ve(e){return bo(F.STORE,e)}function j(e){return"epoch"in e.transactionMeta}function M(e){return"phase"in e.transactionMeta}var Mo=(e)=>{let o=c(e);if(!M(o)){e.logger.warn("\uD83D\uDC1E","transaction","???","abortTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}e.logger.info("\uD83E\uDE82","transaction",o.transactionMeta.update.key,"Aborting transaction"),o.parent.child=null};function J(e){return e[0].toUpperCase()+e.slice(1)}function U(e){return e.type.split("_").map(J).join(" ")}class ie extends Error{constructor(e,o){super(`${U(e)} ${x(e.key)} not found in store "${o.config.name}".`)}}function me(e,o,t){return(...n)=>{let i=R(e,o);if(i)return i.run(n,t);throw new ie(o,e)}}var We=(e)=>(o)=>e instanceof Function?e(o):e;var L=(e,o)=>{if(e.valueMap.has(o.key))return e.logger.info("\uD83D\uDCD6",o.type,o.key,"reading cached value"),ho(o,e);switch(o.type){case"selector":case"readonly_selector":return e.logger.info("\uD83E\uDDEE",o.type,o.key,"computing value"),o.get();case"atom":case"mutable_atom":{let t=o.default,n;if(t instanceof Function)n=t();else n=t;return e.logger.info("\uD83D\uDC81","atom",o.key,"could not find cached value; using default",n),n}}};var Jo=(e,o)=>{if(e.operation.open){let t=performance.now();return e.logger.info("\u2757",o.type,o.key,`deferring setState at T-${t} until setState for "${e.operation.token.key}" is done`),t}e.operation={open:!0,done:new Set,prev:new Map,time:Date.now(),token:o},e.logger.info("\u2B55",o.type,o.key,`operation start in store "${e.config.name}"${!M(e)?"":` ${e.transactionMeta.phase} "${e.transactionMeta.update.key}"`}`)},wo=(e)=>{if(e.operation.open)e.logger.info("\uD83D\uDD34",e.operation.token.type,e.operation.token.key,`operation done in store "${e.config.name}"`);e.operation={open:!1},e.on.operationClose.next(e.operation)},$o=(e,o)=>{if(!e.operation.open)return e.logger.error("\uD83D\uDC1E","unknown",o,"isDone called outside of an operation. This is probably a bug in AtomIO."),!0;return e.operation.done.has(o)},ye=(e,o)=>{if(!e.operation.open){e.logger.error("\uD83D\uDC1E","unknown",o,"markDone called outside of an operation. This is probably a bug in AtomIO.");return}e.operation.done.add(o)};var Oo=(e,o,t)=>{switch(o.type){case"mutable_atom":e.logger.info("\uD83D\uDCE2",o.type,o.key,"is now (",t.newValue,") subscribers:",o.subject.subscribers);break;case"atom":case"selector":case"readonly_selector":e.logger.info("\uD83D\uDCE2",o.type,o.key,"went (",t.oldValue,"->",t.newValue,") subscribers:",o.subject.subscribers)}o.subject.next(t)};var Ge=(e,o)=>{let t=c(e),n=t.selectorAtoms.getRelatedKeys(o.key);if(t.logger.info("\uD83E\uDDF9",o.type,o.key,n?`evicting ${n.size} states downstream:`:"no downstream states",n??"to evict"),n){if(t.operation.open)t.logger.info("\uD83E\uDDF9",o.type,o.key,`[ ${[...t.operation.done].join(", ")} ] already done`);for(let i of n){if($o(t,i))continue;Bo(i,t),ye(t,i)}}};var vo=(e,o,t)=>{let n=L(e,o),i=n;if(o.type==="mutable_atom"&&M(e)){let{parent:a}=e;i=Fe(e,o,a)}if(i=We(t)(i),e.logger.info("\uD83D\uDCDD","atom",o.key,"set to",i),i=P(e,o.key,i,o.subject),_o(e,o.key))Io(e,o.key);ye(e,o.key),Ge(e,o);let r={oldValue:n,newValue:i};if(!M(e)){Oo(e,o,r);return}if(e.on.transactionApplying.state===null){let{key:a}=o;if(Wo(r.newValue))return;let l={type:"atom_update",key:a,...r};if(o.family)l.family=o.family;e.transactionMeta.update.updates.push(l),e.logger.info("\uD83D\uDCC1","atom",a,"stowed (",r.oldValue,"->",r.newValue,")")}else if(o.key.startsWith("*")){let a=o.key.slice(1),l=e.atoms.get(a),s=e.valueMap.get(a);if(l.type==="mutable_atom"&&M(e)){let{parent:y}=e;s=Fe(e,l,y)}if(s.do(r.newValue)===null)Ge(e,l)}};var _e=(e,o,t)=>{switch(o.type){case"atom":case"mutable_atom":vo(e,o,t);break;case"selector":o.set(t);break}};function Eo(e,o){if(o.family){let t=e.families.get(o.family.key);if(t)return t}}function O(e,...o){let t,n,i,r;if(o.length===2){if(t=o[0],r=o[1],n=Eo(e,t)??null,n)i=t.family?I(t.family.subKey):null,t=S(e,n,i)}else n=o[0],i=o[1],r=o[2],t=S(e,n,i);if("counterfeit"in t&&"family"in t){let s=t.family.subKey,m=e.disposalTraces.buffer.find((y)=>y?.key===s);e.logger.error("\u274C",t.type,t.key,`could not be set because it was not found in the store "${e.config.name}".`,m?`This state was previously disposed:
4
- ${m.trace}`:"No previous disposal trace was found.");return}let a=Jo(e,t);if(a){let s=e.on.operationClose.subscribe(`waiting to set "${t.key}" at T-${a}`,()=>{s(),e.logger.info("\uD83D\uDFE2",t.type,t.key,`resuming deferred setState from T-${a}`),O(e,t,r)});return}let l=R(e,t);_e(e,l,r),wo(e)}function Ie(e,o,t){let{key:n,newValue:i,oldValue:r}=o,a=e==="newValue"?i:r,l={key:n,type:"atom"};if(o.family)Object.assign(l,{family:o.family});O(t,l,a)}function jo(e){let{stack:o}=e;if(o)return`
3
+ var St=Object.create;var{getPrototypeOf:kt,defineProperty:De,getOwnPropertyNames:bt}=Object;var xt=Object.prototype.hasOwnProperty;var ht=(e,o,t)=>{t=e!=null?St(kt(e)):{};let n=o||!e||!e.__esModule?De(t,"default",{value:e,enumerable:!0}):t;for(let i of bt(e))if(!xt.call(n,i))De(n,i,{get:()=>e[i],enumerable:!0});return n};var wt=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var Jt=(e,o)=>{for(var t in o)De(e,t,{get:o[t],enumerable:!0,configurable:!0,set:(n)=>o[t]=()=>n})};var $t=import.meta.require;function Je(e=Math.random){return e().toString(36).slice(2)}class ke extends Promise{fate;resolve;reject;done=!1;constructor(e){let o,t;super((n,i)=>{o=n,t=i});this.resolve=o,this.reject=t,this.use(e instanceof Promise?e:new Promise(e))}pass(e,o){if(e===this.fate)this.resolve(o),this.done=!0}fail(e,o){if(e===this.fate)this.reject(o),this.done=!0}use(e){if(e instanceof Promise){let o=e;this.fate=o,o.then((t)=>{this.pass(o,t)},(t)=>{this.fail(o,t)})}else this.resolve(e),this.fate=void 0}}var So=(e,o,t=C.STORE)=>{return Xe(t,{key:`${e.key}:JSON`,get:({get:n})=>o.toJson(n(e)),set:({set:n},i)=>{n(e,o.fromJson(i))}})};function y(e){while(e.child!==null)e=e.child;return e}class A{Subscriber;subscribers=new Map;subscribe(e,o){return this.subscribers.set(e,o),()=>{this.unsubscribe(e)}}unsubscribe(e){this.subscribers.delete(e)}next(e){let o=this.subscribers.values();for(let t of o)t(e)}}class Ue extends A{state;constructor(e){super();this.state=e}next(e){this.state=e,super.next(e)}}function Z(e,o,t){let n={key:o.key,type:"atom_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","atom_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new A,s=Object.assign((l)=>{let m=x(l),c={key:o.key,subKey:m},f=`${o.key}(${m})`,d=y(e),T=o.default,b={key:f,default:T instanceof Function?T(l):T};if(o.effects)b.effects=o.effects(l);let K=ee(d,b,c);return r.next({type:"state_creation",token:K}),K},n,{subject:r,install:(l)=>Z(l,o),internalRoles:t});return e.families.set(o.key,s),e.defaults.set(o.key,o.default),n}function ko(e,o){if("mutable"in o)return be(e,o);return Z(e,o)}function L(e,o,t){let n={key:o.key,type:"readonly_selector_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","readonly_selector_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new A,s=Object.assign((l)=>{let m=x(l),c={key:o.key,subKey:m},f=`${o.key}(${m})`,d=y(e),T=xe(d,{key:f,get:o.get(l)},c);return r.next({type:"state_creation",token:T}),T},n,{internalRoles:t,subject:r,install:(l)=>L(l,o),default:(l)=>{return o.get(l)({get:(...c)=>$(e,...c),find:(...c)=>S(e,...c),json:(c)=>B(e,c)})}});return e.families.set(o.key,s),n}function bo(e,o){if("set"in o)return ge(e,o);return L(e,o)}class $e{_buffer;_index=0;constructor(e){let o;if(typeof e==="number")o=e;else o=e.length;this._buffer=Array.from({length:o})}get buffer(){return this._buffer}get index(){return this._index}add(e){this._buffer[this._index]=e,this._index=(this._index+1)%this._buffer.length}copy(){let e=new $e([...this._buffer]);return e._index=this._index,e}}var gt={atom_family:"atom",mutable_atom_family:"mutable_atom",selector_family:"selector",readonly_selector_family:"readonly_selector",molecule_family:"molecule"};function xo(e,o){let t=x(o),n=`${e.key}(${t})`,i=gt[e.type],r={key:n,type:i};return Object.assign(r,{family:{key:e.key,subKey:t}}),Object.assign(r,{counterfeit:!0}),r}function N(e){let o={key:e.key,type:e.type};if("family"in e)o.family=e.family;return o}function le(e){return go(C.STORE,e)}function oe(e){return ko(C.STORE,e)}function Oe(e,o,t=C.STORE){return t.joins.set(e.key,new Ae(e,o,t)),{key:e.key,type:"join",a:e.between[0],b:e.between[1],cardinality:e.cardinality}}function Ao(e){return Fo(e,C.STORE)}var Ne=(e)=>(o,t,n,i,...r)=>{console[e](`${o} ${t} "${n}" ${i}`,...r)},At={error:Ne("error"),info:Ne("info"),warn:Ne("warn")};class qe{logLevel;filter;logger;constructor(e,o,t=At){this.logLevel=e,this.filter=o,this.logger=t}error=(...e)=>{if((this.filter?.(...e)??!0)&&this.logLevel!==null)this.logger.error(...e)};info=(...e)=>{if((this.filter?.(...e)??!0)&&this.logLevel==="info")this.logger.info(...e)};warn=(...e)=>{if((this.filter?.(...e)??!0)&&this.logLevel!=="error"&&this.logLevel!==null)this.logger.warn(...e)}}var dn=Symbol("claim");class Co{store;constructor(e=C.STORE){this.store=e,Ro("root",e)}allocate(e,o,t){return te(this.store,e,o,t)}fuse(e,o,t){return Ko(this.store,e,o,t)}deallocate(e){ne(this.store,e)}claim(e,o,t){return se(this.store,e,o,t)}}class Ye{store;realm;constructor(e=C.STORE){this.store=e,this.realm=new Co(e)}allocate(e,o,t){te(this.store,e,o,t)}deallocate(e){ne(this.store,e)}claim(e,o,t){se(this.store,e,o,t)}}function Be(e){return bo(C.STORE,e)}function j(e){return"epoch"in e.transactionMeta}function M(e){return"phase"in e.transactionMeta}var Mo=(e)=>{let o=y(e);if(!M(o)){e.logger.warn("\uD83D\uDC1E","transaction","???","abortTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}e.logger.info("\uD83E\uDE82","transaction",o.transactionMeta.update.key,"Aborting transaction"),o.parent.child=null};function w(e){return e[0].toUpperCase()+e.slice(1)}function U(e){return e.type.split("_").map(w).join(" ")}class ie extends Error{constructor(e,o){super(`${U(e)} ${x(e.key)} not found in store "${o.config.name}".`)}}function me(e,o,t){return(...n)=>{let i=R(e,o);if(i)return i.run(n,t);throw new ie(o,e)}}var _e=(e)=>(o)=>e instanceof Function?e(o):e;var Q=(e,o)=>{if(e.valueMap.has(o.key))return e.logger.info("\uD83D\uDCD6",o.type,o.key,"reading cached value"),ho(o,e);switch(o.type){case"selector":case"readonly_selector":return e.logger.info("\uD83E\uDDEE",o.type,o.key,"computing value"),o.get();case"atom":case"mutable_atom":{let t=o.default,n;if(t instanceof Function)n=t();else n=t;return e.logger.info("\uD83D\uDC81","atom",o.key,"could not find cached value; using default",n),n}}};var wo=(e,o)=>{if(e.operation.open){let t=performance.now();return e.logger.info("\u2757",o.type,o.key,`deferring setState at T-${t} until setState for "${e.operation.token.key}" is done`),t}e.operation={open:!0,done:new Set,prev:new Map,time:Date.now(),token:o},e.logger.info("\u2B55",o.type,o.key,`operation start in store "${e.config.name}"${!M(e)?"":` ${e.transactionMeta.phase} "${e.transactionMeta.update.key}"`}`)},Jo=(e)=>{if(e.operation.open)e.logger.info("\uD83D\uDD34",e.operation.token.type,e.operation.token.key,`operation done in store "${e.config.name}"`);e.operation={open:!1},e.on.operationClose.next(e.operation)},$o=(e,o)=>{if(!e.operation.open)return e.logger.error("\uD83D\uDC1E","unknown",o,"isDone called outside of an operation. This is probably a bug in AtomIO."),!0;return e.operation.done.has(o)},ce=(e,o)=>{if(!e.operation.open){e.logger.error("\uD83D\uDC1E","unknown",o,"markDone called outside of an operation. This is probably a bug in AtomIO.");return}e.operation.done.add(o)};var Oo=(e,o,t)=>{switch(o.type){case"mutable_atom":e.logger.info("\uD83D\uDCE2",o.type,o.key,"is now (",t.newValue,") subscribers:",o.subject.subscribers);break;case"atom":case"selector":case"readonly_selector":e.logger.info("\uD83D\uDCE2",o.type,o.key,"went (",t.oldValue,"->",t.newValue,") subscribers:",o.subject.subscribers)}o.subject.next(t)};var Ge=(e,o)=>{let t=y(e),n=t.selectorAtoms.getRelatedKeys(o.key);if(t.logger.info("\uD83E\uDDF9",o.type,o.key,n?`evicting ${n.size} states downstream:`:"no downstream states",n??"to evict"),n){if(t.operation.open)t.logger.info("\uD83E\uDDF9",o.type,o.key,`[ ${[...t.operation.done].join(", ")} ] already done`);for(let i of n){if($o(t,i))continue;vo(i,t),ce(t,i)}}};var Bo=(e,o,t)=>{let n=Q(e,o),i=n;if(o.type==="mutable_atom"&&M(e)){let{parent:a}=e;i=Ce(e,o,a)}if(i=_e(t)(i),e.logger.info("\uD83D\uDCDD","atom",o.key,"set to",i),i=P(e,o.key,i,o.subject),Wo(e,o.key))Io(e,o.key);ce(e,o.key),Ge(e,o);let r={oldValue:n,newValue:i};if(!M(e)){Oo(e,o,r);return}if(e.on.transactionApplying.state===null){let{key:a}=o;if(_o(r.newValue))return;let s={type:"atom_update",key:a,...r};if(o.family)s.family=o.family;e.transactionMeta.update.updates.push(s),e.logger.info("\uD83D\uDCC1","atom",a,"stowed (",r.oldValue,"->",r.newValue,")")}else if(o.key.startsWith("*")){let a=o.key.slice(1),s=e.atoms.get(a),l=e.valueMap.get(a);if(s.type==="mutable_atom"&&M(e)){let{parent:c}=e;l=Ce(e,s,c)}if(l.do(r.newValue)===null)Ge(e,s)}};var We=(e,o,t)=>{switch(o.type){case"atom":case"mutable_atom":Bo(e,o,t);break;case"selector":o.set(t);break}};function Eo(e,o){if(o.family){let t=e.families.get(o.family.key);if(t)return t}}function O(e,...o){let t,n,i,r;if(o.length===2){if(t=o[0],r=o[1],n=Eo(e,t)??null,n)i=t.family?I(t.family.subKey):null,t=S(e,n,i)}else n=o[0],i=o[1],r=o[2],t=S(e,n,i);if("counterfeit"in t&&"family"in t){let l=t.family.subKey,m=e.disposalTraces.buffer.find((c)=>c?.key===l);e.logger.error("\u274C",t.type,t.key,`could not be set because it was not found in the store "${e.config.name}".`,m?`This state was previously disposed:
4
+ ${m.trace}`:"No previous disposal trace was found.");return}let a=wo(e,t);if(a){let l=e.on.operationClose.subscribe(`waiting to set "${t.key}" at T-${a}`,()=>{l(),e.logger.info("\uD83D\uDFE2",t.type,t.key,`resuming deferred setState from T-${a}`),O(e,t,r)});return}let s=R(e,t);We(e,s,r),Jo(e)}function Ie(e,o,t){let{key:n,newValue:i,oldValue:r}=o,a=e==="newValue"?i:r,s={key:n,type:"atom"};if(o.family)Object.assign(s,{family:o.family});O(t,s,a)}function jo(e){let{stack:o}=e;if(o)return`
5
5
  `+o.split(`
6
6
  `)?.slice(1)?.join(`
7
- `);return""}function Ro(e,o=F.STORE){let t={key:e,stringKey:x(e),dependsOn:"any"};return o.molecules.set(x(e),t),e}function te(e,o,t,n="any"){let i=o,r=x(t),a=[],l=c(e);if(Array.isArray(i))for(let y of i){let p=x(y);if(l.molecules.get(p))e.moleculeGraph.set(p,r,{source:p});else a.push(p)}else{let y=x(i);if(l.molecules.get(y))e.moleculeGraph.set(y,r,{source:y});else a.push(y)}if(a.length===0)l.molecules.set(r,{key:t,stringKey:r,dependsOn:n});let s={type:"molecule_creation",key:t,provenance:i};if(M(l)&&l.transactionMeta.phase==="building")l.transactionMeta.update.updates.push(s);else l.on.moleculeCreation.next(s);for(let y of a){let p=e.disposalTraces.buffer.find((d)=>d?.key===y);e.logger.error("\u274C","molecule",t,"allocation failed:",`Could not allocate to ${y} in store "${e.config.name}".`,p?`
8
- ${y} was most recently disposed
9
- ${p.trace}`:`No previous disposal trace for ${y} was found.`)}return t}function Ko(e,o,t,n){let i=`T$--${o}==${t}++${n}`;return te(e,[t,n],i,"all"),i}function ne(e,o){let t=x(o),n=e.molecules.get(t);if(!n){let T=e.disposalTraces.buffer.find((b)=>b?.key===t);e.logger.error("\u274C","molecule",o,"deallocation failed:",`Could not find allocation for ${t} in store "${e.config.name}".`,T?`
7
+ `);return""}function Ro(e,o=C.STORE){let t={key:e,stringKey:x(e),dependsOn:"any"};return o.molecules.set(x(e),t),e}function te(e,o,t,n="any"){let i=o,r=x(t),a=[],s=y(e);if(Array.isArray(i))for(let c of i){let f=x(c);if(s.molecules.get(f))e.moleculeGraph.set(f,r,{source:f});else a.push(f)}else{let c=x(i);if(s.molecules.get(c))e.moleculeGraph.set(c,r,{source:c});else a.push(c)}if(a.length===0)s.molecules.set(r,{key:t,stringKey:r,dependsOn:n});let l={type:"molecule_creation",key:t,provenance:i};if(M(s)&&s.transactionMeta.phase==="building")s.transactionMeta.update.updates.push(l);else s.on.moleculeCreation.next(l);for(let c of a){let f=e.disposalTraces.buffer.find((d)=>d?.key===c);e.logger.error("\u274C","molecule",t,"allocation failed:",`Could not allocate to ${c} in store "${e.config.name}".`,f?`
8
+ ${c} was most recently disposed
9
+ ${f.trace}`:`No previous disposal trace for ${c} was found.`)}return t}function Ko(e,o,t,n){let i=`T$--${o}==${t}++${n}`;return te(e,[t,n],i,"all"),i}function ne(e,o){let t=x(o),n=e.molecules.get(t);if(!n){let T=e.disposalTraces.buffer.find((b)=>b?.key===t);e.logger.error("\u274C","molecule",o,"deallocation failed:",`Could not find allocation for ${t} in store "${e.config.name}".`,T?`
10
10
  This state was most recently deallocated
11
- ${T.trace}`:`No previous disposal trace for ${t} was found.`);return}let i=e.moleculeJoins.getRelatedKeys(n.key);if(i)for(let T of i){let b=e.joins.get(T);if(b)b.relations.delete(n.key),b.molecules.delete(n.stringKey)}e.moleculeJoins.delete(n.stringKey);let r=[],a=[],l={type:"molecule_disposal",key:n.key,values:a,provenance:r},s=c(e);s.molecules.delete(t);let m=M(s)&&s.transactionMeta.phase==="building";if(m)s.transactionMeta.update.updates.push(l);let y=e.moleculeGraph.getRelationEntries({downstreamMoleculeKey:n.stringKey});if(y)for(let[T,{source:b}]of y)if(b===n.stringKey){let K=I(T);ne(e,K)}else r.push(b);let p=s.moleculeData.getRelatedKeys(n.stringKey);if(p)for(let T of p){let b=s.families.get(T),K=S(e,b,n.key);a.push([b.key,K]),re(e,K)}if(s.moleculeGraph.delete(n.stringKey),s.moleculeJoins.delete(n.stringKey),s.moleculeData.delete(n.stringKey),!m)s.on.moleculeDisposal.next(l);s.molecules.delete(n.stringKey);let d=jo(new Error);e.disposalTraces.add({key:t,trace:d})}function le(e,o,t,n){let i=x(t),r=c(e),a=r.molecules.get(i);if(!a){let d=e.disposalTraces.buffer.find((T)=>T?.key===i);return e.logger.error("\u274C","molecule",t,"claim failed:",`Could not allocate to ${i} in store "${e.config.name}".`,d?`
11
+ ${T.trace}`:`No previous disposal trace for ${t} was found.`);return}let i=e.moleculeJoins.getRelatedKeys(n.key);if(i)for(let T of i){let b=e.joins.get(T);if(b)b.relations.delete(n.key),b.molecules.delete(n.stringKey)}e.moleculeJoins.delete(n.stringKey);let r=[],a=[],s={type:"molecule_disposal",key:n.key,values:a,provenance:r},l=y(e);l.molecules.delete(t);let m=M(l)&&l.transactionMeta.phase==="building";if(m)l.transactionMeta.update.updates.push(s);let c=e.moleculeGraph.getRelationEntries({downstreamMoleculeKey:n.stringKey});if(c)for(let[T,{source:b}]of c)if(b===n.stringKey){let K=I(T);ne(e,K)}else r.push(b);let f=l.moleculeData.getRelatedKeys(n.stringKey);if(f)for(let T of f){let b=l.families.get(T),K=S(e,b,n.key);a.push([b.key,K]),re(e,K)}if(l.moleculeGraph.delete(n.stringKey),l.moleculeJoins.delete(n.stringKey),l.moleculeData.delete(n.stringKey),!m)l.on.moleculeDisposal.next(s);l.molecules.delete(n.stringKey);let d=jo(new Error);e.disposalTraces.add({key:t,trace:d})}function se(e,o,t,n){let i=x(t),r=y(e),a=r.molecules.get(i);if(!a){let d=e.disposalTraces.buffer.find((T)=>T?.key===i);return e.logger.error("\u274C","molecule",t,"claim failed:",`Could not allocate to ${i} in store "${e.config.name}".`,d?`
12
12
  ${i} was most recently disposed
13
- ${d.trace}`:`No previous disposal trace for ${i} was found.`),t}let l=x(o),s=r.molecules.get(l);if(!s){let d=e.disposalTraces.buffer.find((T)=>T?.key===l);return e.logger.error("\u274C","molecule",t,"claim failed:",`Could not allocate to ${l} in store "${e.config.name}".`,d?`
14
- ${l} was most recently disposed
15
- ${d.trace}`:`No previous disposal trace for ${l} was found.`),t}let m=e.moleculeGraph.getRelationEntries({downstreamMoleculeKey:a.stringKey}).filter(([,{source:d}])=>d!==i).map(([d])=>I(d));if(n)r.moleculeGraph.delete(i);r.moleculeGraph.set({upstreamMoleculeKey:s.stringKey,downstreamMoleculeKey:a.stringKey},{source:s.stringKey});let y={type:"molecule_transfer",key:a.key,from:m,to:[s.key]};if(M(r)&&r.transactionMeta.phase==="building")r.transactionMeta.update.updates.push(y);return t}function Qe(e,o,t){switch(o){case"newValue":{zo(e,t);break}case"oldValue":{re(t,e.token);break}}}function Le(e,o,t){switch(o){case"newValue":{re(t,e.token);break}case"oldValue":{if(zo(e,t),e.subType==="atom")t.valueMap.set(e.token.key,e.value);break}}}function zo(e,o){let{family:t}=e.token;if(t){let n=o.families.get(t.key);if(n)S(o,n,I(t.subKey))}}function Ho(e,o,t){switch(o){case"newValue":te(t,e.provenance,e.key);break;case"oldValue":ne(t,e.key);break}}function Vo(e,o,t){switch(o){case"newValue":ne(t,e.key);break;case"oldValue":{let n=e.provenance.map(I);te(t,n,e.key);for(let[i,r]of e.values){let a=t.families.get(i);if(a){S(t,a,e.key);let l=`${i}(${x(e.key)})`;t.valueMap.set(l,r)}}}break}}function Po(e,o,t){switch(o){case"newValue":{let n=e.to.length===1?e.to[0]:e.to;le(t,n,e.key,"exclusive")}break;case"oldValue":{let n=e.from.length===1?e.from[0]:e.from;le(t,n,e.key,"exclusive")}break}}function Ee(e,o,t){let n=e==="newValue"?o.updates:[...o.updates].reverse();for(let i of n)switch(i.type){case"atom_update":case"selector_update":Ie(e,i,t);break;case"state_creation":Qe(i,e,t);break;case"state_disposal":Le(i,e,t);break;case"molecule_creation":Ho(i,e,t);break;case"molecule_disposal":Vo(i,e,t);break;case"molecule_transfer":Po(i,e,t);break;case"transaction_update":Ee(e,i,t);break}}function Ze(e,o){return e.transactionMeta.actionContinuities.getRelatedKey(o)}function Ct(e,o){return e.transactionMeta.epoch.get(o)}function Do(e,o){if(!j(e))return;let n=Ze(e,o);if(n===void 0)return;return Ct(e,n)}function Xo(e,o,t){if(j(e)&&o)e.transactionMeta.epoch.set(o,t)}function Uo(e,o,t){if(!j(e))return;let i=Ze(e,o);if(i!==void 0)e.transactionMeta.epoch.set(i,t)}var No=(e,o)=>{let t=c(o),{parent:n}=t;if(n===null||!M(t)||t.transactionMeta?.phase!=="building"){o.logger.warn("\uD83D\uDC1E","transaction","???","applyTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}t.transactionMeta.phase="applying",t.transactionMeta.update.output=e,n.child=null,n.on.transactionApplying.next(t.transactionMeta);let{updates:i}=t.transactionMeta.update;if(o.logger.info("\uD83D\uDEC4","transaction",t.transactionMeta.update.key,`Applying transaction with ${i.length} updates:`,i),Ee("newValue",t.transactionMeta.update,n),j(n))Uo(n,t.transactionMeta.update.key,t.transactionMeta.update.epoch),R(o,{key:t.transactionMeta.update.key,type:"transaction"})?.subject.next(t.transactionMeta.update),o.logger.info("\uD83D\uDEEC","transaction",t.transactionMeta.update.key,"Finished applying transaction.");else if(M(n))n.transactionMeta.update.updates.push(t.transactionMeta.update);n.on.transactionApplying.next(null)};function qo(e,o,t){if(!j(e))return;let{epoch:i,actionContinuities:r}=e.transactionMeta;if(r.set(o,t),!i.has(o))i.set(o,-1)}function Yo(e){return{store:e}}function $(e,...o){let t,n,i;if(o.length===1)t=o[0];else n=o[0],i=o[1],t=S(e,n,i);if("counterfeit"in t&&"family"in t){n=e.families.get(t.family.key);let r=t.family.subKey,a=e.disposalTraces.buffer.find((l)=>l?.key===r);switch(e.logger.error("\u274C",t.type,t.key,`could not be retrieved because it was not found in the store "${e.config.name}".`,a?`This state was previously disposed:
16
- ${a.trace}`:"No previous disposal trace was found."),n.type){case"atom_family":case"mutable_atom_family":return e.defaults.get(n.key);case"selector_family":case"readonly_selector_family":{if(e.defaults.has(n.key))return e.defaults.get(t.family.key);let l=R(e,n).default(r);return e.defaults.set(n.key,l),l}}}return L(e,R(e,t))}class W{a;b;cardinality;relations=new Map;contents=new Map;isAType;isBType;isContent;makeContentKey=(e,o)=>`${e}:${o}`;warn;getRelatedKeys(e){return this.relations.get(e)}addRelation(e,o){let t=this.relations.get(e),n=this.relations.get(o);if(t)t.add(o);else t=new Set([o]),this.relations.set(e,t);if(n)n.add(e);else n=new Set([e]),this.relations.set(o,n)}deleteRelation(e,o){let t=this.relations.get(e);if(t){if(t.delete(o),t.size===0)this.relations.delete(e);let n=this.relations.get(o);if(n){if(n.delete(e),n.size===0)this.relations.delete(o)}}}replaceRelationsUnsafely(e,o){this.relations.set(e,new Set(o));for(let t of o){let n=new Set().add(e);this.relations.set(t,n)}}replaceRelationsSafely(e,o){let t=this.relations.get(e),n=this.isAType?.(e)?e:void 0,i=n===void 0?e:void 0;if(t)for(let r of t){n??=r,i??=r;let a=this.relations.get(r);if(a){if(a.size===1)this.relations.delete(r);else a.delete(e);this.contents.delete(this.makeContentKey(n,i))}}this.relations.set(e,new Set(o));for(let r of o){let a=this.relations.get(r);if(a)a.add(e);else a=new Set().add(e),this.relations.set(r,a)}}getContentInternal(e){return this.contents.get(e)}setContent(e,o){this.contents.set(e,o)}deleteContent(e){this.contents.delete(e)}constructor(e,o){if(this.a=e.between[0],this.b=e.between[1],this.cardinality=e.cardinality,!o?.externalStore)this.relations=new Map(e.relations?.map(([t,n])=>[t,new Set(n)])),this.contents=new Map(e.contents);if(this.isAType=o?.isAType??null,this.isBType=o?.isBType??null,this.isContent=o?.isContent??null,o?.makeContentKey)this.makeContentKey=o.makeContentKey;if(o?.externalStore){let t=o.externalStore;if(this.has=(n,i)=>t.has(n,i),this.addRelation=(n,i)=>{t.addRelation(n,i)},this.deleteRelation=(n,i)=>{t.deleteRelation(n,i)},this.replaceRelationsSafely=(n,i)=>{t.replaceRelationsSafely(n,i)},this.replaceRelationsUnsafely=(n,i)=>{t.replaceRelationsUnsafely(n,i)},this.getRelatedKeys=(n)=>t.getRelatedKeys(n),t.getContent)this.getContentInternal=(n)=>{return t.getContent(n)},this.setContent=(n,i)=>{t.setContent(n,i)},this.deleteContent=(n)=>{t.deleteContent(n)};for(let[n,i]of e.relations??[]){let r=this.isAType?.(n)?n:void 0,a=r===void 0?n:void 0;for(let l of i)r??=l,a??=l,this.addRelation(r,a)}for(let[n,i]of e.contents??[])this.setContent(n,i)}if(o?.warn)this.warn=o.warn}toJSON(){return{between:[this.a,this.b],cardinality:this.cardinality,relations:[...this.relations.entries()].map(([e,o])=>[e,[...o]]),contents:[...this.contents.entries()]}}set(...e){let o,t,n;switch(e.length){case 1:{let i=e[0];o=i[this.a],t=i[this.b],n=void 0;break}case 2:{let i=e[0];if(typeof i==="string")[o,t]=e;else o=i[this.a],t=i[this.b],n=e[1];break}default:{o=e[0],t=e[1],n=e[2];break}}switch(this.cardinality){case"1:1":{let i=this.getRelatedKey(o);if(i&&i!==t)this.delete(o,i)}case"1:n":{let i=this.getRelatedKey(t);if(i&&i!==o)this.delete(i,t)}break;case"n:n":}if(n){let i=this.makeContentKey(o,t);this.setContent(i,n)}return this.addRelation(o,t),this}delete(e,o){o=typeof o==="string"?o:e[this.b];let t=typeof e==="string"?e:e[this.a];if(t===void 0&&typeof o==="string"){let n=this.getRelatedKeys(o);if(n)for(let i of n)this.delete(i,o)}if(typeof t==="string"&&o===void 0){let n=this.getRelatedKeys(t);if(n)for(let i of n)this.delete(t,i)}if(typeof t==="string"&&typeof o==="string"){this.deleteRelation(t,o);let n=this.makeContentKey(t,o);this.deleteContent(n)}return this}getRelatedKey(e){let o=this.getRelatedKeys(e);if(o){if(o.size>1)this.warn?.(`${o.size} related keys were found for key "${e}": (${[...o].map((n)=>`"${n}"`).join(", ")}). Only one related key was expected.`);let t;for(let n of o){t=n;break}return t}}replaceRelations(e,o,t){let n=!Array.isArray(o),i=n?Object.keys(o):o;if(t?.reckless)this.replaceRelationsUnsafely(e,i);else this.replaceRelationsSafely(e,i);if(n)for(let r of i){let a=this.makeContentKey(e,r),l=o[r];this.setContent(a,l)}return this}getContent(e,o){let t=this.makeContentKey(e,o);return this.getContentInternal(t)}getRelationEntries(e){let o=e[this.a],t=e[this.b];if(o!==void 0&&t===void 0){let n=this.getRelatedKeys(o);if(n)return[...n].map((i)=>{return[i,this.getContent(o,i)]})}if(o===void 0&&t!==void 0){let n=this.getRelatedKeys(t);if(n)return[...n].map((i)=>{return[i,this.getContent(i,t)]})}return[]}has(e,o){if(o)return this.getRelatedKeys(e)?.has(o)??!1;return this.relations.has(e)}}class D extends Map{deleted=new Set;source;constructor(e){super();this.source=e}get(e){if(super.has(e))return super.get(e);if(!this.deleted.has(e)&&this.source.has(e))return this.source.get(e);return}set(e,o){return this.deleted.delete(e),super.set(e,o)}hasOwn(e){return super.has(e)}has(e){return!this.deleted.has(e)&&(super.has(e)||this.source.has(e))}delete(e){return this.deleted.add(e),super.delete(e)}}var Go=(e,o,t,n)=>{let i=c(e),r={parent:i,child:null,on:i.on,loggers:i.loggers,logger:i.logger,config:i.config,atoms:new D(i.atoms),atomsThatAreDefault:new Set(i.atomsThatAreDefault),families:new D(i.families),joins:new D(i.joins),operation:{open:!1},readonlySelectors:new D(i.readonlySelectors),timelines:new D(i.timelines),timelineTopics:new W(i.timelineTopics.toJSON()),trackers:new Map,transactions:new D(i.transactions),selectorAtoms:new W(i.selectorAtoms.toJSON()),selectorGraph:new W(i.selectorGraph.toJSON(),{makeContentKey:(...m)=>m.sort().join(":")}),selectors:new D(i.selectors),valueMap:new D(i.valueMap),defaults:i.defaults,disposalTraces:e.disposalTraces.copy(),molecules:new D(i.molecules),moleculeGraph:new W(i.moleculeGraph.toJSON(),{makeContentKey:i.moleculeGraph.makeContentKey}),moleculeData:new W(i.moleculeData.toJSON(),{makeContentKey:i.moleculeData.makeContentKey}),moleculeJoins:new W(i.moleculeJoins.toJSON(),{makeContentKey:i.moleculeJoins.makeContentKey}),miscResources:new D(i.miscResources)},a=Do(e,o),l={phase:"building",update:{type:"transaction_update",key:o,id:n,epoch:a===void 0?Number.NaN:a+1,updates:[],params:t,output:void 0},toolkit:{get:(...m)=>$(s,...m),set:(...m)=>{O(s,...m)},run:(m,y=we())=>me(s,m,y),find:(m,y)=>S(s,m,y),json:(m)=>v(s,m),dispose:(...m)=>{re(s,...m)},env:()=>Yo(s)}},s=Object.assign(r,{transactionMeta:l});return i.child=s,e.logger.info("\uD83D\uDEEB","transaction",o,"Building transaction with params:",t),s};function eo(e,o){let t={key:o.key,type:"transaction",run:(r,a)=>{let l=Go(e,o.key,r,a);try{let s=c(e),{toolkit:m}=l.transactionMeta,y=o.do(m,...r);return No(y,s),y}catch(s){throw Mo(n),e.logger.warn("\uD83D\uDCA5","transaction",o.key,"caught:",s),s}},install:(r)=>eo(r,o),subject:new g},n=c(e);n.transactions.set(t.key,t);let i=N(t);return e.on.transactionCreation.next(i),i}function Re(e){return eo(F.STORE,e)}class Qo{parent=null;child=null;valueMap=new Map;defaults=new Map;atoms=new Map;selectors=new Map;readonlySelectors=new Map;atomsThatAreDefault=new Set;selectorAtoms=new W({between:["selectorKey","atomKey"],cardinality:"n:n"});selectorGraph=new W({between:["upstreamSelectorKey","downstreamSelectorKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});trackers=new Map;families=new Map;joins=new Map;transactions=new Map;transactionMeta={epoch:new Map,actionContinuities:new W({between:["continuity","action"],cardinality:"1:n"})};timelines=new Map;timelineTopics=new W({between:["timelineKey","topicKey"],cardinality:"1:n"});disposalTraces=new $e(100);molecules=new Map;moleculeJoins=new W({between:["moleculeKey","joinKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});moleculeGraph=new W({between:["upstreamMoleculeKey","downstreamMoleculeKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});moleculeData=new W({between:["moleculeKey","stateFamilyKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});miscResources=new Map;on={atomCreation:new g,atomDisposal:new g,selectorCreation:new g,selectorDisposal:new g,timelineCreation:new g,transactionCreation:new g,transactionApplying:new Ue(null),operationClose:new g,moleculeCreation:new g,moleculeDisposal:new g};operation={open:!1};config={name:"IMPLICIT_STORE",lifespan:"ephemeral"};loggers=[new qe("warn",(e,o,t)=>!Lo(t))];logger={error:(...e)=>{for(let o of this.loggers)o.error(...e)},info:(...e)=>{for(let o of this.loggers)o.info(...e)},warn:(...e)=>{for(let o of this.loggers)o.warn(...e)}};constructor(e,o=null){if(this.config={...o?.config,...e},o!==null){if(this.valueMap=new Map(o?.valueMap),this.operation={...o?.operation},j(o))this.transactionMeta={epoch:new Map(o?.transactionMeta.epoch),actionContinuities:new W(o?.transactionMeta.actionContinuities.toJSON())};for(let[,n]of o.families){if(n.internalRoles?.includes("mutable")||n.internalRoles?.includes("join"))continue;n.install(this)}let t=new Set;for(let[,n]of o.atoms){if(t.has(n.key))continue;if(n.install(this),n.type==="mutable_atom"){let i=v(o,n),r=Y(n);t.add(i.key),t.add(r.key)}}for(let[,n]of o.readonlySelectors)n.install(this);for(let[,n]of o.selectors){if(t.has(n.key))continue;n.install(this)}for(let[,n]of o.transactions)n.install(this);for(let[,n]of o.timelines)n.install(this)}}}var F={get STORE(){return globalThis.ATOM_IO_IMPLICIT_STORE??=new Qo({name:"IMPLICIT_STORE",lifespan:"ephemeral"}),globalThis.ATOM_IO_IMPLICIT_STORE}};function R(e,o){let t,n=e;while(n!==null){switch(o.type){case"atom":case"mutable_atom":t=n.atoms.get(o.key);break;case"selector":t=n.selectors.get(o.key);break;case"readonly_selector":t=n.readonlySelectors.get(o.key);break;case"atom_family":case"mutable_atom_family":case"selector_family":case"readonly_selector_family":t=n.families.get(o.key);break;case"timeline":t=n.timelines.get(o.key);break;case"transaction":t=n.transactions.get(o.key);break}if(t)return t;n=n.child}throw new ie(o,e)}function Zo(e,o,t){let n=e.families.get(o.key);if(n===void 0)throw new ie(o,e);let i=n(t),r=c(e);if(i.family){if(j(r))switch(i.type){case"atom":case"mutable_atom":e.on.atomCreation.next(i);break;case"selector":case"readonly_selector":e.on.selectorCreation.next(i);break}else if(M(r)&&r.on.transactionApplying.state===null)r.transactionMeta.update.updates.push({type:"state_creation",token:i})}return i}function et(e,o,t){let n=x(t),i=`${o.key}(${n})`,r=c(e),a;switch(o.type){case"atom_family":case"mutable_atom_family":a=r.atoms.get(i);break;case"selector_family":a=r.selectors.get(i);break;case"readonly_selector_family":a=r.readonlySelectors.get(i);break}if(a)return N(a);return a}function S(e,o,t){let n=et(e,o,t);if(n)return n;let i=x(t),r=e.molecules.get(i);if(!r&&e.config.lifespan==="immortal"){let a=xo(o,t);return e.logger.error("\u274C",a.type,a.key,`was not found in store "${e.config.name}"; returned a counterfeit token.`),a}if(n=Zo(e,o,t),r)c(e).moleculeData.set(i,o.key);return n}function re(e,...o){let t;if(o.length===1)t=o[0];else{let n=o[0],i=o[1];t=S(e,n,i)}try{R(e,t)}catch(n){e.logger.error("\u274C",t.type,t.key,`could not be disposed because it was not found in the store "${e.config.name}".`);return}switch(t.type){case"atom":case"mutable_atom":oo(e,t);break;case"selector":case"readonly_selector":ot(e,t);break}}var je=(e,o)=>c(e).atoms.has(o),Ft=(e,o)=>c(e).selectors.has(o),Rt=(e,o)=>c(e).readonlySelectors.has(o),tt=(e,o)=>je(e,o)||Ft(e,o)||Rt(e,o);var ze=(e,o)=>{return c(o).selectorGraph.getRelationEntries({downstreamSelectorKey:e}).filter(([n,{source:i}])=>i!==e).map(([n,{source:i}])=>i).filter((n)=>tt(o,n))};var to=(e,o,t)=>{let n=[],i=ze(e,t);while(i.length>0){let r=i.shift();if(o.has(r))continue;if(o.add(r),!je(t,r))i.push(...ze(r,t));else if(!n.includes(r))n.push(r)}return n},nt=(e,o)=>{let t=e.key,n=ze(t,o),i=new Set;return n.flatMap((r)=>je(o,r)?r:to(r,i,o))};var it=(e,o,t,n)=>{let i=c(n);if(o.type==="atom"||o.type==="mutable_atom")i.selectorAtoms.set({selectorKey:e,atomKey:o.key}),n.logger.info("\uD83D\uDD0D","selector",e,`discovers root atom "${o.key}"`);else{let r=to(o.key,t,n);n.logger.info("\uD83D\uDD0D","selector",e,`discovers root atoms: [ ${r.map((a)=>`"${a}"`).join(", ")} ]`);for(let a of r)i.selectorAtoms=i.selectorAtoms.set({selectorKey:e,atomKey:a})}t.add(o.key)};var He=(e,o,t)=>({get:(...n)=>{let i=c(t),r;if(n.length===2){let[s,m]=n;r=S(t,s,m)}else[r]=n;let a=R(t,r),l=L(t,a);return t.logger.info("\uD83D\uDD0C","selector",e,`registers dependency ( "${r.key}" =`,l,")"),i.selectorGraph.set({upstreamSelectorKey:r.key,downstreamSelectorKey:e},{source:r.key}),it(e,r,o,t),l},set:(...n)=>{let i,r;if(n.length===2)i=n[0],r=n[1];else{let s=n[0],m=n[1];r=n[2],i=S(t,s,m)}let a=c(t),l=R(a,i);_e(a,l,r)},find:(n,i)=>S(t,n,i),json:(n)=>v(t,n)});var xe=(e,o,t)=>{let n=c(e),i=new g,r=new Set,{get:a,find:l,json:s}=He(o.key,r,n),m=()=>{let T=o.get({get:a,find:l,json:s});return P(c(e),o.key,T,i),r.clear(),T},y={...o,subject:i,install:(T)=>xe(T,o,t),get:m,type:"readonly_selector",...t&&{family:t}};n.readonlySelectors.set(o.key,y);let p=m();e.logger.info("\u2728",y.type,y.key,"=",p);let d={key:o.key,type:"readonly_selector"};if(t)d.family=t;return d};var Ke=(e,o,t)=>{let n=c(e),i=new g,r=new Set,a=He(o.key,r,n),{find:l,get:s,json:m}=a,y={find:l,get:s,json:m},p=(w=o.get,B=c(e))=>{let H=w(y);return P(B,o.key,H,i),r.clear(),H},T={...o,subject:i,install:(w)=>Ke(w,o,t),get:p,set:(w)=>{let B=c(e),H=p(o.get,B),G=We(w)(H);if(e.logger.info("\uD83D\uDCDD","selector",o.key,"set (",H,"->",G,")"),P(B,o.key,G,i),ye(B,o.key),j(B))i.next({newValue:G,oldValue:H});o.set(a,G)},type:"selector",...t&&{family:t}};n.selectors.set(o.key,T);let b=p();e.logger.info("\u2728",T.type,T.key,"=",b);let K={key:o.key,type:"selector"};if(t)K.family=t;return K};function Xe(e,o){if("set"in o){let i=Ke(e,o,void 0);return e.on.selectorCreation.next(i),i}let n=xe(e,o,void 0);return e.on.selectorCreation.next(n),n}function ot(e,o){let t=c(e),{key:n}=o,i=R(t,o);if(!i.family)e.logger.error("\u274C","selector",n,"Standalone selectors cannot be disposed.");else{if(t.molecules.get(i.family.subKey))t.moleculeData.delete(i.family.subKey,i.family.key);let a;switch(o.type){case"selector":t.selectors.delete(n),a={key:i.family.key,type:"selector_family"},R(e,a).subject.next({type:"state_disposal",subType:"selector",token:o});break;case"readonly_selector":t.readonlySelectors.delete(n),a={key:i.family.key,type:"readonly_selector_family"},R(e,a).subject.next({type:"state_disposal",subType:"selector",token:o});break}if(t.valueMap.delete(n),t.selectorAtoms.delete(n),t.selectorGraph.delete(n),e.logger.info("\uD83D\uDD25",o.type,n,"deleted"),M(t)&&t.transactionMeta.phase==="building")t.transactionMeta.update.updates.push({type:"state_disposal",subType:"selector",token:o});else e.on.selectorDisposal.next(o)}}function Ae(e,o,t){let n={key:o.key,type:"selector_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","selector_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new g,l=Object.assign((s)=>{let m=x(s),y={key:o.key,subKey:m},p=`${o.key}(${m})`,d=c(e),T=Ke(d,{key:p,get:o.get(s),set:o.set(s)},y);return r.next({type:"state_creation",token:T}),T},n,{internalRoles:t,subject:r,install:(s)=>Ae(s,o),default:(s)=>{return o.get(s)({get:(...y)=>$(e,...y),find:(y,p)=>S(e,y,p),json:(y)=>v(e,y)})}});return e.families.set(o.key,l),n}function rt(e,o,t){return Ae(e,{key:`${o.key}:JSON`,get:(i)=>({get:r})=>{let a=r(o,i);return t.toJson(a)},set:(i)=>({set:r},a)=>{r(o,i,t.fromJson(a))}},["mutable","json"])}var I=(e)=>JSON.parse(e),x=(e)=>JSON.stringify(e),Ms=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];var at=(e,o)=>{let t=c(e);if(t.operation.open)return t.operation.prev.get(o.key);return t.valueMap.get(o.key)};var ro=(e,o)=>{let t=c(e);return nt(o,e).map((i)=>{let r=t.atoms.get(i);if(r===void 0)throw new Error(`Atom "${i}", a dependency of selector "${o.key}", not found in store "${e.config.name}".`);return r.subject.subscribe(`${o.type}:${o.key}`,(a)=>{e.logger.info("\uD83D\uDCE2",o.type,o.key,"root",i,"went",a.oldValue,"->",a.newValue);let l=at(t,o),s=L(t,o);e.logger.info("\u2728",o.type,o.key,"went",l,"->",s),o.subject.next({newValue:s,oldValue:l})})})};function z(e,o,t,n){function i(p){if(e.operation.open){let d=e.on.operationClose.subscribe(`state subscription ${t}`,()=>{d(),n(p)})}else n(p)}let r=R(e,o);e.logger.info("\uD83D\uDC40",r.type,r.key,`Adding subscription "${t}"`);let a=r.type==="selector"||r.type==="readonly_selector",l=null,s=i;if(a)l=ro(e,r),s=(p)=>{if(l)l.length=0,l.push(...ro(e,r));i(p)};let m=r.subject.subscribe(t,s);return()=>{if(e.logger.info("\uD83D\uDE48",r.type,r.key,`Removing subscription "${t}"`),m(),l)for(let p of l)p()}}var no=(e,o,t,n)=>{let i=R(e,o);e.logger.info("\uD83D\uDC40","timeline",o.key,`Adding subscription "${t}"`);let r=i.subject.subscribe(t,n);return()=>{e.logger.info("\uD83D\uDE48","timeline",o.key,`Removing subscription "${t}" from timeline`),r()}};var io=(e,o,t,n)=>{let i=R(e,o);e.logger.info("\uD83D\uDC40","transaction",o.key,`Adding subscription "${t}"`);let r=i.subject.subscribe(t,n);return()=>{e.logger.info("\uD83D\uDE48","transaction",o.key,`Removing subscription "${t}"`),r()}};class ae{Update;initializeState(e,o){let t=`*${e.key}`;o.atoms.delete(t),o.valueMap.delete(t);let n=e.family?{key:`*${e.family.key}`,subKey:e.family.subKey}:void 0,i=ee(o,{key:t,default:null},n);if(o.parent?.valueMap.has(t)){let r=o.parent.valueMap.get(t);o.valueMap.set(t,r)}return i}unsubscribeFromInnerValue;unsubscribeFromState;observeCore(e,o,t){let n=`tracker:${t.config.name}:${M(t)?t.transactionMeta.update.key:"main"}:${e.key}`,i=$(t,e);this.unsubscribeFromInnerValue=i.subscribe(n,(r)=>{O(t,o,r)}),this.unsubscribeFromState=z(t,e,n,(r)=>{if(r.newValue!==r.oldValue)this.unsubscribeFromInnerValue(),this.unsubscribeFromInnerValue=r.newValue.subscribe(n,(a)=>{O(t,o,a)})})}updateCore(e,o,t){let n=`tracker:${t.config.name}:${M(t)?t.transactionMeta.update.key:"main"}:${e.key}`;z(t,o,n,({newValue:i,oldValue:r})=>{let a=t.timelineTopics.getRelatedKey(o.key);if(a){if(t.timelines.get(a)?.timeTraveling){let m=no(t,{key:a,type:"timeline"},n,(y)=>{m(),O(t,e,(p)=>{if(y==="redo"&&i)p.do(i);else if(y==="undo"&&r)p.undo(r);return p})});return}}let l=t.on.operationClose.subscribe(n,()=>{l();let s=$(t,e),m=i===null?-1:s.getUpdateNumber(i),y=m-s.cacheUpdateNumber;if(i&&y===1)O(t,e,(p)=>(p.do(i),p));else t.logger.info("\u274C","mutable_atom",e.key,`could not be updated. Expected update number ${s.cacheUpdateNumber+1}, but got ${m}`)})})}mutableState;latestUpdateState;[Symbol.dispose];constructor(e,o){this.mutableState=e;let t=c(o);this.latestUpdateState=this.initializeState(e,t),this.observeCore(e,this.latestUpdateState,t),this.updateCore(e,this.latestUpdateState,t),t.trackers.set(e.key,this),this[Symbol.dispose]=()=>{this.unsubscribeFromInnerValue(),this.unsubscribeFromState(),t.trackers.delete(e.key)}}}function Me(e,o,t){e.logger.info("\uD83D\uDD28","atom",o.key,`creating in store "${e.config.name}"`);let n=c(e),i=n.atoms.get(o.key);if(i&&i.type==="mutable_atom")return e.logger.error("\u274C","atom",o.key,"Tried to create atom, but it already exists in the store."),N(i);let r=new g,a={...o,type:"mutable_atom",install:(m)=>{return m.logger.info("\uD83D\uDEE0\uFE0F","atom",o.key,`installing in store "${m.config.name}"`),Me(m,o,t)},subject:r};if(t)a.family=t;let l=o.default();n.atoms.set(a.key,a),Ve(e,o.key),P(n,o.key,l,r);let s=N(a);if(o.effects){let m=0,y=[];for(let p of o.effects){let d=p({setSelf:(T)=>{O(e,s,T)},onSet:(T)=>z(e,s,`effect[${m}]`,T)});if(d)y.push(d);++m}a.cleanup=()=>{for(let p of y)p()}}if(new ae(s,e),!t)So(s,o,e);return s}class ao{trackers=new Map;Update;latestUpdateAtoms;mutableAtoms;constructor(e,o){let t=Z(o,{key:`*${e.key}`,default:null},["mutable","updates"]);this.latestUpdateAtoms=R(o,t),this.mutableAtoms=e,this.mutableAtoms.subject.subscribe(`store=${o.config.name}::tracker-atom-family`,(n)=>{let{type:i,token:r}=n;if(r.family){let a=I(r.family.subKey);switch(i){case"state_creation":this.trackers.set(a,new ae(r,o));break;case"state_disposal":{let l=this.trackers.get(a);if(l)l[Symbol.dispose](),this.trackers.delete(a)}break}}})}}function be(e,o,t){let n={key:o.key,type:"mutable_atom_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","mutable_atom_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new g,l=Object.assign((s)=>{let m=x(s),y={key:o.key,subKey:m},p=`${o.key}(${m})`,d=c(e),T={key:p,default:()=>o.default(s),toJson:o.toJson,fromJson:o.fromJson,mutable:!0};if(o.effects)T.effects=o.effects(s);let b=Me(d,T,y);return r.next({type:"state_creation",token:b}),b},n,{subject:r,install:(s)=>be(s,o),toJson:o.toJson,fromJson:o.fromJson,internalRoles:t});return e.families.set(o.key,l),rt(e,l,o),new ao(l,e),n}var so=(e,o)=>{let t=c(o),n=`${e.key}:JSON`;return t.families.get(n)};var v=(e,o)=>{if(o.family){let n=c(e),r={key:`${o.family.key}:JSON`,type:"selector_family"},a=R(n,r),l=JSON.parse(o.family.subKey);return S(e,a,l)}return{type:"selector",key:`${o.key}:JSON`}};var Y=(e)=>{let t={type:"atom",key:`*${e.key}`};if(e.family)t.family={key:`*${e.family.key}`,subKey:e.family.subKey};return t};function Wo(e){return typeof e==="object"&&e!==null&&"do"in e&&"undo"in e&&"subscribe"in e}function Fe(e,o,t){let n=t.valueMap.get(o.key),i=e.valueMap.get(o.key);if(n!==i)return i;if(n===void 0)return o.default();t.logger.info("\uD83D\uDCC3","atom",o.key,"copying");let r=o.toJson(n),a=o.fromJson(r);return e.valueMap.set(o.key,a),new ae(o,t),a}function P(e,o,t,n){let i=e.valueMap.get(o);if(i instanceof ke)i.use(t);if(t instanceof Promise){let r=new ke(t);return e.valueMap.set(o,r),r.then((a)=>{P(e,o,a,n),n.next({newValue:a,oldValue:r})}).catch((a)=>{e.logger.error("\uD83D\uDCA5","state",o,"rejected:",a)}),r}return e.valueMap.set(o,t),t}var ho=(e,o)=>{let t=o.valueMap.get(e.key);if(e.type==="mutable_atom"&&M(o)){let{parent:n}=o;t=Fe(o,e,n)}return t},Bo=(e,o)=>{let t=o.valueMap.get(e);if(t instanceof ke){let n=t,i=o.selectors.get(e)??o.readonlySelectors.get(e);if(i)n.use(i.get());return}if(o.operation.open)o.operation.prev.set(e,t);o.valueMap.delete(e),o.logger.info("\uD83D\uDDD1","state",e,"evicted")};var _o=(e,o)=>{return c(e).atomsThatAreDefault.has(o)},Ve=(e,o)=>{let t=c(e);t.atomsThatAreDefault=new Set(t.atomsThatAreDefault).add(o)},Io=(e,o)=>{let t=c(e);t.atomsThatAreDefault=new Set(c(e).atomsThatAreDefault),t.atomsThatAreDefault.delete(o)};function ee(e,o,t){e.logger.info("\uD83D\uDD28","atom",o.key,`creating in store "${e.config.name}"`);let n=c(e),i=n.atoms.get(o.key);if(i&&i.type==="atom")return e.logger.error("\u274C","atom",o.key,"Tried to create atom, but it already exists in the store."),N(i);let r=new g,a={...o,type:"atom",install:(m)=>{return m.logger.info("\uD83D\uDEE0\uFE0F","atom",o.key,`installing in store "${m.config.name}"`),ee(m,o,t)},subject:r};if(t)a.family=t;let l=o.default;if(o.default instanceof Function)l=o.default();n.atoms.set(a.key,a),Ve(e,o.key),P(n,o.key,l,r);let s=N(a);if(o.effects){let m=0,y=[];for(let p of o.effects){let d=p({setSelf:(T)=>{O(e,s,T)},onSet:(T)=>z(e,s,`effect[${m}]`,T)});if(d)y.push(d);++m}a.cleanup=()=>{for(let p of y)p()}}return s}function Ao(e,o){if("mutable"in o){let i=Me(e,o,void 0);return e.on.atomCreation.next(i),i}let n=ee(e,o,void 0);return e.on.atomCreation.next(n),n}function oo(e,o){let t=c(e),{key:n,family:i}=o,r=R(t,o);if(!i)e.logger.error("\u274C","atom",n,"Standalone atoms cannot be disposed.");else{r.cleanup?.();let a=e.valueMap.get(r.key),l=R(e,{key:i.key,type:"atom_family"}),s={type:"state_disposal",subType:"atom",token:o,value:a};l.subject.next(s);let m=M(t);if(t.atoms.delete(n),t.valueMap.delete(n),t.selectorAtoms.delete(n),t.atomsThatAreDefault.delete(n),e.timelineTopics.delete(n),o.type==="mutable_atom"){let y=Y(o);oo(e,y),e.trackers.delete(n)}if(e.logger.info("\uD83D\uDD25","atom",n,"deleted"),m&&t.transactionMeta.phase==="building"){let y=t.transactionMeta.update.updates.at(-1);if(!(y?.type==="molecule_disposal"&&y.values.some(([T])=>T===r.family?.key)))t.transactionMeta.update.updates.push(s)}else e.on.atomDisposal.next(o)}}class _ extends Set{mode="record";subject=new g;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(e,o=0){super(e);if(e instanceof _)this.parent=e,this.cacheUpdateNumber=e.cacheUpdateNumber;if(o)this.cacheLimit=o,this.cache=new Array(o),this.subscribe("auto cache",(t)=>{this.cacheIdx++,this.cacheIdx%=this.cacheLimit,this.cache[this.cacheIdx]=t})}toJSON(){return{members:[...this],cache:this.cache,cacheLimit:this.cacheLimit,cacheIdx:this.cacheIdx,cacheUpdateNumber:this.cacheUpdateNumber}}static fromJSON(e){let o=new _(e.members,e.cacheLimit);return o.cache=e.cache,o.cacheIdx=e.cacheIdx,o.cacheUpdateNumber=e.cacheUpdateNumber,o}add(e){let o=super.add(e);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`add:${x(e)}`);return o}clear(){let e=this.mode==="record"?[...this]:null;if(super.clear(),e)this.cacheUpdateNumber++,this.emit(`clear:${JSON.stringify(e)}`)}delete(e){let o=super.delete(e);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`del:${x(e)}`);return o}parent;child=null;transactionUpdates=null;transaction(e){this.mode="transaction",this.transactionUpdates=[],this.child=new _(this);let o=this.child._subscribe("transaction",(t)=>{this.transactionUpdates?.push(t)});try{if(e(this.child)){for(let n of this.transactionUpdates)this.doStep(n);this.cacheUpdateNumber++,this.emit(`tx:${this.transactionUpdates.join(";")}`)}}catch(t){throw console.warn("Did not apply transaction to SetRTX; this error was thrown:",t),t}finally{o(),this.child=null,this.transactionUpdates=null,this.mode="record"}}_subscribe(e,o){return this.subject.subscribe(e,o)}subscribe(e,o){return this.subject.subscribe(e,(t)=>{o(`${this.cacheUpdateNumber}=${t}`)})}emit(e){this.subject.next(e)}doStep(e){let o=e.indexOf(":"),t=e.substring(0,o),n=e.substring(o+1);switch(t){case"add":this.add(JSON.parse(n));break;case"clear":this.clear();break;case"del":this.delete(JSON.parse(n));break;case"tx":for(let i of n.split(";"))this.doStep(i)}}getUpdateNumber(e){let o=e.indexOf("=");return Number(e.substring(0,o))}do(e){let o=e.indexOf("="),t=Number(e.substring(0,o)),n=t-this.cacheUpdateNumber;if(n>0){if(n===1){this.mode="playback";let r=e.substring(o+1);return this.doStep(r),this.mode="record",this.cacheUpdateNumber=t,null}return this.cacheUpdateNumber+1}if(Math.abs(n)<this.cacheLimit){let r=this.cacheIdx+n;if(this.cache[r]===e)return null;this.mode="playback";let l=!1;while(!l){this.cacheIdx%=this.cacheLimit;let m=this.cache[this.cacheIdx];if(this.cacheIdx--,!m)return"OUT_OF_RANGE";this.undo(m),l=this.cacheIdx===r-1}let s=e.substring(o+1);return this.doStep(s),this.mode="record",this.cacheUpdateNumber=t,null}return"OUT_OF_RANGE"}undoStep(e){let o=e.indexOf(":"),t=e.substring(0,o),n=e.substring(o+1);switch(t){case"add":this.delete(JSON.parse(n));break;case"del":this.add(JSON.parse(n));break;case"clear":{let i=JSON.parse(n);for(let r of i)this.add(r);break}case"tx":{let i=n.split(";");for(let r=i.length-1;r>=0;r--)this.undoStep(i[r])}}}undo(e){let o=e.indexOf("=");if(Number(e.substring(0,o))===this.cacheUpdateNumber){this.mode="playback";let n=e.substring(o+1);return this.undoStep(n),this.mode="record",this.cacheUpdateNumber--,null}return this.cacheUpdateNumber}}class ge{toolkit;options;defaultContent;molecules=new Map;relations;states;core;transact(e,o){let t=this.toolkit;this.toolkit=e,o(this),this.toolkit=t}store;realm;[Symbol.dispose](){}constructor(e,o,t=F.STORE){this.store=t,this.realm=new Ye(t),this.options=e,this.defaultContent=o,this.store.miscResources.set(`join:${e.key}`,this),this.realm.allocate("root",e.key),this.toolkit={get:(...f)=>$(t,...f),set:(...f)=>{O(t,...f)},find:(...f)=>S(t,...f),json:(f)=>v(t,f)};let n=e.between[0],i=e.between[1],r=be(t,{key:`${e.key}/relatedKeys`,default:()=>new _,mutable:!0,fromJson:(f)=>_.fromJSON(f),toJson:(f)=>f.toJSON()},["join","relations"]);this.core={relatedKeysAtoms:r};let a=({get:f},u)=>f(r,u),l=({set:f},u,C)=>{if(!this.store.molecules.has(x(u)))this.realm.allocate(e.key,u);f(r,u,(k)=>k.add(C)),f(r,C,(k)=>k.add(u))},s=({set:f},u,C)=>{f(r,u,(k)=>{return k.delete(C),k}),f(r,C,(k)=>{return k.delete(u),k})},m=(f,u,C)=>{let{find:k,get:A,set:h}=f,E=k(r,u),X=A(E);for(let V of X){if(C.includes(V))continue;h(r,V,(q)=>{return q.delete(u),q})}h(E,(V)=>{return V.transaction((Te)=>{Te.clear();for(let q of C){let de=a(f,q),To=de.has(u);if(this.relations.cardinality==="1:n"){let uo=[];for(let ue of de){if(ue===u)continue;let Se=a(f,ue);if(Se.delete(q),Se.size===0)uo.push(ue)}if(!To&&de.size>0)de.clear();for(let ue of uo){let Se=[q,ue].sort(),ut=`"${Se[0]}:${Se[1]}"`;this.molecules.delete(ut)}}if(!To)de.add(u);Te.add(q)}return!0}),V})},y=(f,u,C)=>{let{set:k}=f;k(r,u,(A)=>{return A.transaction((h)=>{for(let E of C)h.add(E);return!0}),A});for(let A of C)k(r,A,(h)=>{return h.add(u),h});return!0},p=(f,u,C)=>{let k=a(f,u);return C?k.has(C):k.size>0},d={getRelatedKeys:(f)=>a(this.toolkit,f),addRelation:(f,u)=>{this.store.moleculeJoins.set(f,e.key),this.store.moleculeJoins.set(u,e.key),l(this.toolkit,f,u)},deleteRelation:(f,u)=>{s(this.toolkit,f,u)},replaceRelationsSafely:(f,u)=>{m(this.toolkit,f,u)},replaceRelationsUnsafely:(f,u)=>{y(this.toolkit,f,u)},has:(f,u)=>p(this.toolkit,f,u)},T,b;if(o){b=Z(t,{key:`${e.key}/content`,default:o},["join","content"]);let f=({get:k},A)=>k(b,A),u=({set:k},A,h)=>{k(b,A,h)};T=Object.assign(d,{getContent:(k)=>{return f(this.toolkit,k)},setContent:(k,A)=>{u(this.toolkit,k,A)},deleteContent:(k)=>{this.realm.deallocate(k)}})}else T=d;let K=new W(e,{externalStore:T,isAType:e.isAType,isBType:e.isBType,makeContentKey:(...f)=>{let[u,C]=f,k=f.sort(),A=`${k[0]}:${k[1]}`,h=t.molecules.get(x(u)),E=t.molecules.get(x(C));if(!h)this.realm.allocate(e.key,u);if(!E)this.realm.allocate(e.key,C);return this.realm.allocate(u,A,"all"),this.realm.claim(C,A),this.store.moleculeJoins.set(A,e.key),A}}),w=()=>Q(t,{key:`${e.key}/singleRelatedKey`,get:(f)=>({get:u})=>{let C=u(r,f);for(let k of C)return k;return null}},["join","keys"]),B=()=>{return Q(t,{key:`${e.key}/multipleRelatedKeys`,get:(f)=>({get:u})=>{let C=so(r,t);return u(C,f).members}},["join","keys"])},H=()=>Q(t,{key:`${e.key}/singleRelatedEntry`,get:(f)=>({get:u})=>{let C=u(r,f);for(let k of C){let A=K.isAType?.(f)?f:void 0,h=A===void 0?f:void 0;A??=k,h??=k;let E=K.makeContentKey(A,h),X=u(b,E);return[k,X]}return null}},["join","entries"]),G=()=>Q(t,{key:`${e.key}/multipleRelatedEntries`,get:(f)=>({get:u})=>{let C=so(r,t);return u(C,f).members.map((A)=>{let h=K.isAType?.(f)?f:void 0,E=h===void 0?f:void 0;h??=A,E??=A;let X=K.makeContentKey(h,E),V=u(b,X);return[A,V]})}},["join","entries"]);switch(e.cardinality){case"1:1":{let f=w(),u=`${n}KeyOf${J(i)}`,C=`${i}KeyOf${J(n)}`,k={[u]:f,[C]:f},A;if(o){let h=H(),E=`${n}EntryOf${J(i)}`,X=`${i}EntryOf${J(n)}`,V={[E]:h,[X]:h};A=Object.assign(k,V)}else A=k;this.relations=K,this.states=A;break}case"1:n":{let f=w(),u=B(),C=`${n}KeyOf${J(i)}`,k=`${i}KeysOf${J(n)}`,A={[C]:f,[k]:u},h;if(o){let E=H(),X=G(),V=`${n}EntryOf${J(i)}`,Te=`${i}EntriesOf${J(n)}`,q={[V]:E,[Te]:X};h=Object.assign(A,q)}else h=A;this.relations=K,this.states=h;break}case"n:n":{let f=B(),u=`${n}KeysOf${J(i)}`,C=`${i}KeysOf${J(n)}`,k={[u]:f,[C]:f},A;if(o){let h=G(),E=`${n}EntriesOf${J(i)}`,X=`${i}EntriesOf${J(n)}`,V={[E]:h,[X]:h};A=Object.assign(k,V)}else A=k;this.relations=K,this.states=A}}}}function ce(e,o){let t=o.joins.get(e.key);if(t===void 0){let i=F.STORE.joins.get(e.key);if(i===void 0)throw new Error(`Join "${e.key}" not found in store "${o.config.name}"`);t=new ge(i.options,i.defaultContent,o),o.joins.set(e.key,t)}return t}function Ce(e,o,t){let n=ce(e,t),i=c(t);if(M(i)){let{toolkit:r}=i.transactionMeta;n.transact(r,({relations:a})=>{o(a)})}else o(n.relations)}function Be(e,o,t){let n=ce(e,t),i;switch(e.cardinality){case"1:1":{let r=`${e.a}KeyOf${J(e.b)}`,a=`${e.b}KeyOf${J(e.a)}`;i={get[r](){let s=n.states[r];return S(t,s,o)},get[a](){let s=n.states[a];return S(t,s,o)}};let l=`${e.a}EntryOf${J(e.b)}`;if(l in n.states){let s=`${e.b}EntryOf${J(e.a)}`;Object.assign(i,{get[l](){let m=n.states[l];return S(t,m,o)},get[s](){let m=n.states[s];return S(t,m,o)}})}break}case"1:n":{let r=`${e.a}KeyOf${J(e.b)}`,a=`${e.b}KeysOf${J(e.a)}`;i={get[r](){let s=n.states[r];return S(t,s,o)},get[a](){let s=n.states[a];return S(t,s,o)}};let l=`${e.a}EntryOf${J(e.b)}`;if(l in n.states){let s=`${e.b}EntriesOf${J(e.a)}`;Object.assign(i,{get[l](){let m=n.states[l];return S(t,m,o)},get[s](){let m=n.states[s];return S(t,m,o)}})}break}case"n:n":{let r=`${e.a}KeysOf${J(e.b)}`,a=`${e.b}KeysOf${J(e.a)}`;i={get[r](){let s=n.states[r];return S(t,s,o)},get[a](){let s=n.states[a];return S(t,s,o)}};let l=`${e.a}EntriesOf${J(e.b)}`;if(l in n.states){let s=`${e.b}EntriesOf${J(e.a)}`;Object.assign(i,{get[l](){let m=n.states[l];return S(t,m,o)},get[s](){let m=n.states[s];return S(t,m,o)}})}}}return i}function Co(e,o){return ce(e,o).core.relatedKeysAtoms}function Lo(e){return e.startsWith("\uD83D\uDD0D ")}class st extends Map{set(e,o){if(this.has(e))return console.warn("Tried to set a key that already exists in an InvariantMap",{key:e,value:o}),this;return super.set(e,o)}clear(){throw new Error("Cannot clear an InvariantMap")}}class Pe{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(e){this.key=e}static existing=new st;static create(e,o){let t=new Pe(e),{type:n,globals:i,actions:r,perspectives:a}=o(t),l={type:n,key:e,globals:i,actions:r,perspectives:a};return Pe.existing.set(e,l),l}add(...e){switch(e[0].type){case"atom":case"mutable_atom":this.globals.push(...e);break;case"transaction":this.actions.push(...e);break;case"atom_family":case"mutable_atom_family":{let[t,n]=e;this.perspectives.push({type:"realtime_perspective",resourceAtoms:t,viewAtoms:n})}break}return this}}function Dy(e){let{key:o,config:t}=e,n=Pe.create(o,t),{actions:i}=n;for(let r of i)qo(F.STORE,o,r.key);return Xo(F.STORE,o,-1),n}var qy=se({key:"usersInRoomIndex",mutable:!0,default:()=>new _,toJson:(e)=>e.toJSON(),fromJson:(e)=>_.fromJSON(e)}),lo=se({key:"roomIndex",default:()=>new _,mutable:!0,toJson:(e)=>e.toJSON(),fromJson:(e)=>_.fromJSON(e)}),Kt={enteredAtEpoch:0},he=Oe({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(e)=>typeof e==="string",isBType:(e)=>typeof e==="string"},Kt),Yy=ve({key:"usersInMyRoomView",get:(e)=>({find:o})=>{let t=go(he);return[o(t,e)]}});import{spawn as Mt}from"child_process";class pe{listeners;globalListeners;handleEvent(e,...o){for(let n of this.globalListeners)n(e,...o);let t=this.listeners.get(e);if(t)for(let n of t)n(...o)}id="no_id_retrieved";emit;constructor(e){this.emit=e,this.listeners=new Map,this.globalListeners=new Set}on(e,o){let t=this.listeners.get(e);if(t)t.add(o);else this.listeners.set(e,new Set([o]));return this}onAny(e){return this.globalListeners.add(e),this}off(e,o){let t=this.listeners.get(e);if(t)if(o)t.delete(o);else this.listeners.delete(e);return this}offAny(e){return this.globalListeners.delete(e),this}}class mo extends pe{incompleteData="";unprocessedEvents=[];incompleteLog="";unprocessedLogs=[];id="#####";process;key;logger;handleLog(e){if(Array.isArray(e)){let[o,...t]=e;switch(o){case"i":this.logger.info(...t);break;case"w":this.logger.warn(...t);break;case"e":this.logger.error(...t);break;default:return}}}constructor(e,o,t){super((n,...i)=>{let r=JSON.stringify([n,...i])+"\x03",a=(l)=>{if(l.code==="EPIPE")console.error("EPIPE error during write",this.process.stdin);this.process.stdin.removeListener("error",a)};return this.process.stdin.once("error",a),this.process.stdin.write(r),this});if(this.process=e,this.key=o,this.logger=t??{info:(...n)=>{console.info(this.id,this.key,...n)},warn:(...n)=>{console.warn(this.id,this.key,...n)},error:(...n)=>{console.error(this.id,this.key,...n)}},this.process.stdout.on("data",(n)=>{let i=n.toString();if(i==="ALIVE")return;this.unprocessedEvents.push(...i.split("\x03"));let r=this.unprocessedEvents.shift();this.incompleteData+=r??"";try{if(this.incompleteData.startsWith("error"))console.log("\u2757",this.incompleteData);let a=I(this.incompleteData);this.handleEvent(...a);while(this.unprocessedEvents.length>0){let l=this.unprocessedEvents.shift();if(l){if(this.unprocessedEvents.length===0)this.incompleteData=l;a=I(l),this.handleEvent(...a)}}this.incompleteData=""}catch(a){console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.warn(this.incompleteData),console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.error(a)}}),this.process.stderr.on("data",(n)=>{let i=n.toString();this.unprocessedLogs.push(...i.split("\x03"));let r=this.unprocessedLogs.shift();this.incompleteLog+=r??"";try{let a=I(this.incompleteLog);this.handleLog(a);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)a=I(this.incompleteLog),this.handleLog(a)}catch(a){console.error("\u274C\u274C\u274C"),console.error(this.incompleteLog),console.error(a),console.error("\u274C\u274C\u274C\uFE0F")}}),e.pid)this.id=e.pid.toString()}}class lt extends pe{in;out;id="no_id_retrieved";disposalFunctions=[];constructor(e){super((...o)=>{return this.out.next(o),this});this.id=e,this.in=new g,this.out=new g,this.in.subscribe("socket",(o)=>{this.handleEvent(...o)})}dispose(){for(let e of this.disposalFunctions)e()}}class yo extends pe{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...e){this.process.stderr.write(x(e.map((o)=>o instanceof _?`{ ${o.toJSON().members.join(" | ")} }`:o))+"\x03")}logger={info:(...e)=>{this.log("i",...e)},warn:(...e)=>{this.log("w",...e)},error:(...e)=>{this.log("e",...e)}};constructor(){super((e,...o)=>{let t=JSON.stringify([e,...o]);return this.process.stdout.write(t+"\x03"),this});if(this.process=process,this.process.stdin.resume(),this.relays=new Map,this.relayServices=[],this.process.stdin.on("data",(e)=>{let o=e.toString();this.unprocessedEvents.push(...o.split("\x03"));let t=this.unprocessedEvents.shift();this.incompleteData+=t??"";try{let n=I(this.incompleteData);this.logger.info("\uD83C\uDFB0","received",n),this.handleEvent(...n);while(this.unprocessedEvents.length>0){let i=this.unprocessedEvents.shift();if(i){if(this.unprocessedEvents.length===0)this.incompleteData=i;let r=I(i);this.handleEvent(...r)}}this.incompleteData=""}catch(n){if(n instanceof Error)this.logger.error("\u2757",n.message,n.cause,n.stack)}}),this.on("exit",()=>{this.logger.info("\uD83D\uDD25",this.id,'received "exit"'),process.exit(0)}),process.on("exit",(e)=>{this.logger.info("\uD83D\uDD25",this.id,`exited with code ${e}`)}),process.on("end",()=>{this.logger.info("\uD83D\uDD25",this.id,"ended"),process.exit(0)}),process.on("SIGTERM",()=>{this.logger.error("\uD83D\uDD25",this.id,"terminated"),process.exit(0)}),process.on("SIGINT",()=>{this.logger.error("\uD83D\uDD25",this.id,"interrupted"),process.exit(0)}),process.pid)this.id=process.pid?.toString();this.on("user-joins",(e)=>{this.logger.info("\uD83D\uDC64","user",e,"joined");let o=new lt(`user:${e}`);this.relays.set(e,o),this.logger.info("\uD83D\uDD17","attaching services:",`[${[...this.relayServices.keys()].join(", ")}]`);for(let t of this.relayServices){let n=t(o);if(n)o.disposalFunctions.push(n)}this.on(`user:${e}`,(...t)=>{o.in.next(t)}),o.out.subscribe("socket",(t)=>{this.emit(...t)})}),this.on("user-leaves",(e)=>{let o=this.relays.get(e);if(this.off(`relay:${e}`),o)o.dispose(),this.relays.delete(e)}),process.stdout.write("ALIVE")}relay(e){this.logger.info("\uD83D\uDD17","running relay method"),this.relayServices.push(e)}}var co=oe({key:"roomArguments",default:["echo",["Hello World!"]]}),mt=ve({key:"room",get:(e)=>async({get:o,find:t})=>{let n=t(co,e),i=o(n),[r,a]=i,l=await new Promise((s)=>{let m=Mt(r,a,{env:process.env}),y=(p)=>{if(p.toString()==="ALIVE")m.stdout.off("data",y),s(m)};m.stdout.on("data",y)});return new mo(l,e)}});var gc=Re({key:"createRoom",do:({get:e,set:o,find:t},n,i,r)=>{let a=r?[i,r]:[i],l=t(co,n);o(l,a),o(lo,(y)=>y.add(n));let s=t(mt,n);return e(s)}}),Cc=Re({key:"joinRoom",do:(e,o,t,n)=>{let i={enteredAtEpoch:n};return Ce(he,(r)=>{r.set({room:o,user:t},i)},e.env().store),i}}),Fc=Re({key:"leaveRoom",do:(e,o,t)=>{Ce(he,(n)=>{n.delete({room:o,user:t})},e.env().store)}}),Rc=Re({key:"destroyRoom",do:(e,o)=>{Ce(he,(t)=>{t.delete({room:o})},e.env().store),e.set(lo,(t)=>(t.delete(o),t))}});function po(e,o){return o.map((t)=>{switch(t.type){case"transaction_update":{let n=po(e,t.updates);return{...t,updates:n}}case"atom_update":case"selector_update":case"molecule_creation":case"molecule_disposal":case"molecule_transfer":case"state_creation":case"state_disposal":return t}}).filter((t)=>{switch(t.type){case"atom_update":case"selector_update":return e.includes(t.key);case"state_creation":case"state_disposal":return e.includes(t.token.key);case"molecule_creation":case"transaction_update":case"molecule_disposal":case"molecule_transfer":return!0}})}var hc=oe({key:"redactor",default:{occlude:(e)=>e}}),fe=oe({key:"unacknowledgedUpdates",default:()=>[]});var yt=oe({key:"sockets",default:null}),Oc=se({key:"socketsIndex",mutable:!0,default:()=>new _,toJson:(e)=>e.toJSON(),fromJson:(e)=>_.fromJSON(e)}),Bc=se({key:"usersIndex",mutable:!0,default:()=>new _,toJson:(e)=>e.toJSON(),fromJson:(e)=>_.fromJSON(e)}),fo=Oe({key:"usersOfSockets",between:["user","socket"],cardinality:"1:1",isAType:(e)=>e.startsWith("user::"),isBType:(e)=>e.startsWith("socket::")});function ct(e,o,t,n){let i=o.key;return function r(){let a=[];for(let s of o.globals){let m=s.type==="mutable_atom"?v(e,s):s,y=$(e,m);a.push(m,y)}for(let s of o.perspectives){let{viewAtoms:m,resourceAtoms:y}=s,p=S(e,m,t),d=$(e,p);e.logger.info("\uD83D\uDC41","atom",y.key,`${t} can see`,{viewAtoms:m,resourceAtoms:y,userView:d});for(let T of d){let b=T.type==="mutable_atom"?v(e,T):T,K=$(e,b);a.push(b,K)}}let l=j(e)?e.transactionMeta.epoch.get(i)??null:null;n?.emit(`continuity-init:${i}`,l,a)}}function pt(e,o,t){let n=o.key;return function i(r){e.logger.info("\uD83D\uDECE\uFE0F","continuity",n,"received",r);let{key:a,id:l}=r,s=`tx-run:${a}:${l}`,m=`${s}:start`,y=`${s}:end`;performance.mark(m);try{me(e,{type:"transaction",key:a},l)(...r.params)}catch(d){if(d instanceof Error)e.logger.error("\u274C","continuity",n,`failed to run transaction ${a} from ${t} with update ${l}`,d.message)}performance.mark(y);let p=performance.measure(s,m,y);e?.logger.info("\uD83D\uDE80","transaction",a,l,t,p.duration)}}function ft(e,o,t,n){let i=o.key;return function r(a){if(e.logger.info("\uD83D\uDC4D","continuity",i,`${t} acknowledged epoch ${a}`),n[0]?.epoch===a)O(e,fe,t,(s)=>{return s.shift(),e.logger.info("\uD83D\uDC4D","continuity",i,`${t} unacknowledged update queue now has`,s.length,"items"),s})}}function Tt(e,o,t,n){let i=o.key,r=[];for(let a of o.actions){let l=io(e,a,`sync-continuity:${i}:${t}`,(s)=>{try{let m=o.globals.map((d)=>{if(d.type==="atom")return d.key;return Y(d).key}).concat(o.perspectives.flatMap((d)=>{let{viewAtoms:T}=d,b=S(e,T,t);return $(e,b).map((w)=>{return w.type==="mutable_atom"?"*"+w.key:w.key})})),y=po(m,s.updates),p={...s,updates:y};O(e,fe,t,(d)=>{if(p)d.push(p),d.sort((T,b)=>T.epoch-b.epoch),e.logger.info("\uD83D\uDC4D","continuity",i,`${t} unacknowledged update queue now has`,d.length,"items");return d}),n?.emit(`tx-new:${i}`,p)}catch(m){if(m instanceof Error)e.logger.error("\u274C","continuity",i,`${t} failed to send update from transaction ${a.key} to ${t}`,m.message)}});r.push(l)}return r}function dt(e,o,t,n){let i=o.key,r=[];for(let a of o.perspectives){let{viewAtoms:l}=a,s=S(e,l,t),m=z(e,s,`sync-continuity:${i}:${t}:perspective:${a.resourceAtoms.key}`,({oldValue:y,newValue:p})=>{let d=y.map((w)=>w.key),T=p.map((w)=>w.key),b=y.filter((w)=>!T.includes(w.key)),K=p.filter((w)=>!d.includes(w.key)).flatMap((w)=>{let B=w.type==="mutable_atom"?v(e,w):w,H=$(e,B);return[B,H]});if(e.logger.info("\uD83D\uDC41","atom",a.resourceAtoms.key,`${t} has a new perspective`,{oldKeys:d,newKeys:T,revealed:K,concealed:b}),K.length>0)n?.emit(`reveal:${i}`,K);if(b.length>0)n?.emit(`conceal:${i}`,b)});r.push(m)}return r}function lp({socket:e,store:o=F.STORE}){return function t(n){let i=e,r=n.key,a=Be(fo,`socket::${i.id}`,o).userKeyOfSocket,l=$(o,a);if(!l)return o.logger.error("\u274C","continuity",r,`Tried to create a synchronizer for a socket (${i.id}) that is not connected to a user.`),()=>{};let s=Be(fo,l,o).socketKeyOfUser,m=z(o,s,`sync-continuity:${r}:${l}`,({newValue:B})=>{if(o.logger.info("\uD83D\uDC4B","continuity",r,`seeing ${l} on new socket ${B}`),B===null){o.logger.warn("\u274C","continuity",r,`User (${l}) is not connected to a socket, waiting for them to reappear.`);return}let H=S(o,yt,B);i=$(o,H);for(let f of y)i?.emit(`tx-new:${r}`,f)}),y=$(o,fe,l),p=[],d=dt(o,n,l,i),T=Tt(o,n,l,i);p.push(...d,...T);let b=ct(o,n,l,e);i.off(`get:${r}`,b),i.on(`get:${r}`,b);let K=pt(o,n,l);i.off(`tx-run:${r}`,K),i.on(`tx-run:${r}`,K);let w=ft(o,n,l,y);return i?.on(`ack:${r}`,w),()=>{for(let B of p)B();i?.off(`ack:${r}`,w),i?.off(`get:${r}`,b),i?.off(`tx-run:${r}`,K)}}}var Je=new yo;Object.assign(console,Je.logger,{log:Je.logger.info});Je.on("timeToStop",function e(){Je.logger.info("\uD83D\uDEEC game worker exiting"),process.exit(0)});Je.logger.info("\uD83D\uDEEB game worker ready");
13
+ ${d.trace}`:`No previous disposal trace for ${i} was found.`),t}let s=x(o),l=r.molecules.get(s);if(!l){let d=e.disposalTraces.buffer.find((T)=>T?.key===s);return e.logger.error("\u274C","molecule",t,"claim failed:",`Could not allocate to ${s} in store "${e.config.name}".`,d?`
14
+ ${s} was most recently disposed
15
+ ${d.trace}`:`No previous disposal trace for ${s} was found.`),t}let m=e.moleculeGraph.getRelationEntries({downstreamMoleculeKey:a.stringKey}).filter(([,{source:d}])=>d!==i).map(([d])=>I(d));if(n)r.moleculeGraph.delete(i);r.moleculeGraph.set({upstreamMoleculeKey:l.stringKey,downstreamMoleculeKey:a.stringKey},{source:l.stringKey});let c={type:"molecule_transfer",key:a.key,from:m,to:[l.key]};if(M(r)&&r.transactionMeta.phase==="building")r.transactionMeta.update.updates.push(c);return t}function Le(e,o,t){switch(o){case"newValue":{Ho(e,t);break}case"oldValue":{re(t,e.token);break}}}function Qe(e,o,t){switch(o){case"newValue":{re(t,e.token);break}case"oldValue":{if(Ho(e,t),e.subType==="atom")t.valueMap.set(e.token.key,e.value);break}}}function Ho(e,o){let{family:t}=e.token;if(t){let n=o.families.get(t.key);if(n)S(o,n,I(t.subKey))}}function zo(e,o,t){switch(o){case"newValue":te(t,e.provenance,e.key);break;case"oldValue":ne(t,e.key);break}}function Vo(e,o,t){switch(o){case"newValue":ne(t,e.key);break;case"oldValue":{let n=e.provenance.map(I);te(t,n,e.key);for(let[i,r]of e.values){let a=t.families.get(i);if(a){S(t,a,e.key);let s=`${i}(${x(e.key)})`;t.valueMap.set(s,r)}}}break}}function Po(e,o,t){switch(o){case"newValue":{let n=e.to.length===1?e.to[0]:e.to;se(t,n,e.key,"exclusive")}break;case"oldValue":{let n=e.from.length===1?e.from[0]:e.from;se(t,n,e.key,"exclusive")}break}}function Ee(e,o,t){let n=e==="newValue"?o.updates:[...o.updates].reverse();for(let i of n)switch(i.type){case"atom_update":case"selector_update":Ie(e,i,t);break;case"state_creation":Le(i,e,t);break;case"state_disposal":Qe(i,e,t);break;case"molecule_creation":zo(i,e,t);break;case"molecule_disposal":Vo(i,e,t);break;case"molecule_transfer":Po(i,e,t);break;case"transaction_update":Ee(e,i,t);break}}function Ze(e,o){return e.transactionMeta.actionContinuities.getRelatedKey(o)}function Ft(e,o){return e.transactionMeta.epoch.get(o)}function Do(e,o){if(!j(e))return;let n=Ze(e,o);if(n===void 0)return;return Ft(e,n)}function Xo(e,o,t){if(j(e)&&o)e.transactionMeta.epoch.set(o,t)}function Uo(e,o,t){if(!j(e))return;let i=Ze(e,o);if(i!==void 0)e.transactionMeta.epoch.set(i,t)}var No=(e,o)=>{let t=y(o),{parent:n}=t;if(n===null||!M(t)||t.transactionMeta?.phase!=="building"){o.logger.warn("\uD83D\uDC1E","transaction","???","applyTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}t.transactionMeta.phase="applying",t.transactionMeta.update.output=e,n.child=null,n.on.transactionApplying.next(t.transactionMeta);let{updates:i}=t.transactionMeta.update;if(o.logger.info("\uD83D\uDEC4","transaction",t.transactionMeta.update.key,`Applying transaction with ${i.length} updates:`,i),Ee("newValue",t.transactionMeta.update,n),j(n))Uo(n,t.transactionMeta.update.key,t.transactionMeta.update.epoch),R(o,{key:t.transactionMeta.update.key,type:"transaction"})?.subject.next(t.transactionMeta.update),o.logger.info("\uD83D\uDEEC","transaction",t.transactionMeta.update.key,"Finished applying transaction.");else if(M(n))n.transactionMeta.update.updates.push(t.transactionMeta.update);n.on.transactionApplying.next(null)};function qo(e,o,t){if(!j(e))return;let{epoch:i,actionContinuities:r}=e.transactionMeta;if(r.set(o,t),!i.has(o))i.set(o,-1)}function Yo(e){return{store:e}}function $(e,...o){let t,n,i;if(o.length===1)t=o[0];else n=o[0],i=o[1],t=S(e,n,i);if("counterfeit"in t&&"family"in t){n=e.families.get(t.family.key);let r=t.family.subKey,a=e.disposalTraces.buffer.find((s)=>s?.key===r);switch(e.logger.error("\u274C",t.type,t.key,`could not be retrieved because it was not found in the store "${e.config.name}".`,a?`This state was previously disposed:
16
+ ${a.trace}`:"No previous disposal trace was found."),n.type){case"atom_family":case"mutable_atom_family":return e.defaults.get(n.key);case"selector_family":case"readonly_selector_family":{if(e.defaults.has(n.key))return e.defaults.get(t.family.key);let s=R(e,n).default(r);return e.defaults.set(n.key,s),s}}}return Q(e,R(e,t))}class _{a;b;cardinality;relations=new Map;contents=new Map;isAType;isBType;isContent;makeContentKey=(e,o)=>`${e}:${o}`;warn;getRelatedKeys(e){return this.relations.get(e)}addRelation(e,o){let t=this.relations.get(e),n=this.relations.get(o);if(t)t.add(o);else t=new Set([o]),this.relations.set(e,t);if(n)n.add(e);else n=new Set([e]),this.relations.set(o,n)}deleteRelation(e,o){let t=this.relations.get(e);if(t){if(t.delete(o),t.size===0)this.relations.delete(e);let n=this.relations.get(o);if(n){if(n.delete(e),n.size===0)this.relations.delete(o)}}}replaceRelationsUnsafely(e,o){this.relations.set(e,new Set(o));for(let t of o){let n=new Set().add(e);this.relations.set(t,n)}}replaceRelationsSafely(e,o){let t=this.relations.get(e),n=this.isAType?.(e)?e:void 0,i=n===void 0?e:void 0;if(t)for(let r of t){n??=r,i??=r;let a=this.relations.get(r);if(a){if(a.size===1)this.relations.delete(r);else a.delete(e);this.contents.delete(this.makeContentKey(n,i))}}this.relations.set(e,new Set(o));for(let r of o){let a=this.relations.get(r);if(a)a.add(e);else a=new Set().add(e),this.relations.set(r,a)}}getContentInternal(e){return this.contents.get(e)}setContent(e,o){this.contents.set(e,o)}deleteContent(e){this.contents.delete(e)}constructor(e,o){if(this.a=e.between[0],this.b=e.between[1],this.cardinality=e.cardinality,!o?.externalStore)this.relations=new Map(e.relations?.map(([t,n])=>[t,new Set(n)])),this.contents=new Map(e.contents);if(this.isAType=o?.isAType??null,this.isBType=o?.isBType??null,this.isContent=o?.isContent??null,o?.makeContentKey)this.makeContentKey=o.makeContentKey;if(o?.externalStore){let t=o.externalStore;if(this.has=(n,i)=>t.has(n,i),this.addRelation=(n,i)=>{t.addRelation(n,i)},this.deleteRelation=(n,i)=>{t.deleteRelation(n,i)},this.replaceRelationsSafely=(n,i)=>{t.replaceRelationsSafely(n,i)},this.replaceRelationsUnsafely=(n,i)=>{t.replaceRelationsUnsafely(n,i)},this.getRelatedKeys=(n)=>t.getRelatedKeys(n),t.getContent)this.getContentInternal=(n)=>{return t.getContent(n)},this.setContent=(n,i)=>{t.setContent(n,i)},this.deleteContent=(n)=>{t.deleteContent(n)};for(let[n,i]of e.relations??[]){let r=this.isAType?.(n)?n:void 0,a=r===void 0?n:void 0;for(let s of i)r??=s,a??=s,this.addRelation(r,a)}for(let[n,i]of e.contents??[])this.setContent(n,i)}if(o?.warn)this.warn=o.warn}toJSON(){return{between:[this.a,this.b],cardinality:this.cardinality,relations:[...this.relations.entries()].map(([e,o])=>[e,[...o]]),contents:[...this.contents.entries()]}}set(...e){let o,t,n;switch(e.length){case 1:{let i=e[0];o=i[this.a],t=i[this.b],n=void 0;break}case 2:{let i=e[0];if(typeof i==="string")[o,t]=e;else o=i[this.a],t=i[this.b],n=e[1];break}default:{o=e[0],t=e[1],n=e[2];break}}switch(this.cardinality){case"1:1":{let i=this.getRelatedKey(o);if(i&&i!==t)this.delete(o,i)}case"1:n":{let i=this.getRelatedKey(t);if(i&&i!==o)this.delete(i,t)}break;case"n:n":}if(n){let i=this.makeContentKey(o,t);this.setContent(i,n)}return this.addRelation(o,t),this}delete(e,o){o=typeof o==="string"?o:e[this.b];let t=typeof e==="string"?e:e[this.a];if(t===void 0&&typeof o==="string"){let n=this.getRelatedKeys(o);if(n)for(let i of n)this.delete(i,o)}if(typeof t==="string"&&o===void 0){let n=this.getRelatedKeys(t);if(n)for(let i of n)this.delete(t,i)}if(typeof t==="string"&&typeof o==="string"){this.deleteRelation(t,o);let n=this.makeContentKey(t,o);this.deleteContent(n)}return this}getRelatedKey(e){let o=this.getRelatedKeys(e);if(o){if(o.size>1)this.warn?.(`${o.size} related keys were found for key "${e}": (${[...o].map((n)=>`"${n}"`).join(", ")}). Only one related key was expected.`);let t;for(let n of o){t=n;break}return t}}replaceRelations(e,o,t){let n=!Array.isArray(o),i=n?Object.keys(o):o;if(t?.reckless)this.replaceRelationsUnsafely(e,i);else this.replaceRelationsSafely(e,i);if(n)for(let r of i){let a=this.makeContentKey(e,r),s=o[r];this.setContent(a,s)}return this}getContent(e,o){let t=this.makeContentKey(e,o);return this.getContentInternal(t)}getRelationEntries(e){let o=e[this.a],t=e[this.b];if(o!==void 0&&t===void 0){let n=this.getRelatedKeys(o);if(n)return[...n].map((i)=>{return[i,this.getContent(o,i)]})}if(o===void 0&&t!==void 0){let n=this.getRelatedKeys(t);if(n)return[...n].map((i)=>{return[i,this.getContent(i,t)]})}return[]}has(e,o){if(o)return this.getRelatedKeys(e)?.has(o)??!1;return this.relations.has(e)}}class D extends Map{deleted=new Set;source;constructor(e){super();this.source=e}get(e){if(super.has(e))return super.get(e);if(!this.deleted.has(e)&&this.source.has(e))return this.source.get(e);return}set(e,o){return this.deleted.delete(e),super.set(e,o)}hasOwn(e){return super.has(e)}has(e){return!this.deleted.has(e)&&(super.has(e)||this.source.has(e))}delete(e){return this.deleted.add(e),super.delete(e)}}var Go=(e,o,t,n)=>{let i=y(e),r={parent:i,child:null,on:i.on,loggers:i.loggers,logger:i.logger,config:i.config,atoms:new D(i.atoms),atomsThatAreDefault:new Set(i.atomsThatAreDefault),families:new D(i.families),joins:new D(i.joins),operation:{open:!1},readonlySelectors:new D(i.readonlySelectors),timelines:new D(i.timelines),timelineTopics:new _(i.timelineTopics.toJSON()),trackers:new Map,transactions:new D(i.transactions),selectorAtoms:new _(i.selectorAtoms.toJSON()),selectorGraph:new _(i.selectorGraph.toJSON(),{makeContentKey:(...m)=>m.sort().join(":")}),selectors:new D(i.selectors),valueMap:new D(i.valueMap),defaults:i.defaults,disposalTraces:e.disposalTraces.copy(),molecules:new D(i.molecules),moleculeGraph:new _(i.moleculeGraph.toJSON(),{makeContentKey:i.moleculeGraph.makeContentKey}),moleculeData:new _(i.moleculeData.toJSON(),{makeContentKey:i.moleculeData.makeContentKey}),moleculeJoins:new _(i.moleculeJoins.toJSON(),{makeContentKey:i.moleculeJoins.makeContentKey}),miscResources:new D(i.miscResources)},a=Do(e,o),s={phase:"building",update:{type:"transaction_update",key:o,id:n,epoch:a===void 0?Number.NaN:a+1,updates:[],params:t,output:void 0},toolkit:{get:(...m)=>$(l,...m),set:(...m)=>{O(l,...m)},run:(m,c=Je())=>me(l,m,c),find:(...m)=>S(e,...m),json:(m)=>B(l,m),dispose:(...m)=>{re(l,...m)},env:()=>Yo(l)}},l=Object.assign(r,{transactionMeta:s});return i.child=l,e.logger.info("\uD83D\uDEEB","transaction",o,"Building transaction with params:",t),l};function eo(e,o){let t={key:o.key,type:"transaction",run:(r,a)=>{let s=Go(e,o.key,r,a);try{let l=y(e),{toolkit:m}=s.transactionMeta,c=o.do(m,...r);return No(c,l),c}catch(l){throw Mo(n),e.logger.warn("\uD83D\uDCA5","transaction",o.key,"caught:",l),l}},install:(r)=>eo(r,o),subject:new A},n=y(e);n.transactions.set(t.key,t);let i=N(t);return e.on.transactionCreation.next(i),i}function Re(e){return eo(C.STORE,e)}class Lo{parent=null;child=null;valueMap=new Map;defaults=new Map;atoms=new Map;selectors=new Map;readonlySelectors=new Map;atomsThatAreDefault=new Set;selectorAtoms=new _({between:["selectorKey","atomKey"],cardinality:"n:n"});selectorGraph=new _({between:["upstreamSelectorKey","downstreamSelectorKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});trackers=new Map;families=new Map;joins=new Map;transactions=new Map;transactionMeta={epoch:new Map,actionContinuities:new _({between:["continuity","action"],cardinality:"1:n"})};timelines=new Map;timelineTopics=new _({between:["timelineKey","topicKey"],cardinality:"1:n"});disposalTraces=new $e(100);molecules=new Map;moleculeJoins=new _({between:["moleculeKey","joinKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});moleculeGraph=new _({between:["upstreamMoleculeKey","downstreamMoleculeKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});moleculeData=new _({between:["moleculeKey","stateFamilyKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});miscResources=new Map;on={atomCreation:new A,atomDisposal:new A,selectorCreation:new A,selectorDisposal:new A,timelineCreation:new A,transactionCreation:new A,transactionApplying:new Ue(null),operationClose:new A,moleculeCreation:new A,moleculeDisposal:new A};operation={open:!1};config={name:"IMPLICIT_STORE",lifespan:"ephemeral"};loggers=[new qe("warn",(e,o,t)=>!Qo(t))];logger={error:(...e)=>{for(let o of this.loggers)o.error(...e)},info:(...e)=>{for(let o of this.loggers)o.info(...e)},warn:(...e)=>{for(let o of this.loggers)o.warn(...e)}};constructor(e,o=null){if(this.config={...o?.config,...e},o!==null){if(this.valueMap=new Map(o?.valueMap),this.operation={...o?.operation},j(o))this.transactionMeta={epoch:new Map(o?.transactionMeta.epoch),actionContinuities:new _(o?.transactionMeta.actionContinuities.toJSON())};for(let[,n]of o.families){if(n.internalRoles?.includes("mutable")||n.internalRoles?.includes("join"))continue;n.install(this)}let t=new Set;for(let[,n]of o.atoms){if(t.has(n.key))continue;if(n.install(this),n.type==="mutable_atom"){let i=B(o,n),r=Y(n);t.add(i.key),t.add(r.key)}}for(let[,n]of o.readonlySelectors)n.install(this);for(let[,n]of o.selectors){if(t.has(n.key))continue;n.install(this)}for(let[,n]of o.transactions)n.install(this);for(let[,n]of o.timelines)n.install(this)}}}var C={get STORE(){return globalThis.ATOM_IO_IMPLICIT_STORE??=new Lo({name:"IMPLICIT_STORE",lifespan:"ephemeral"}),globalThis.ATOM_IO_IMPLICIT_STORE}};function R(e,o){let t,n=e;while(n!==null){switch(o.type){case"atom":case"mutable_atom":t=n.atoms.get(o.key);break;case"selector":t=n.selectors.get(o.key);break;case"readonly_selector":t=n.readonlySelectors.get(o.key);break;case"atom_family":case"mutable_atom_family":case"selector_family":case"readonly_selector_family":t=n.families.get(o.key);break;case"timeline":t=n.timelines.get(o.key);break;case"transaction":t=n.transactions.get(o.key);break}if(t)return t;n=n.child}throw new ie(o,e)}function Zo(e,o,t){let n=e.families.get(o.key);if(n===void 0)throw new ie(o,e);let i=n(t),r=y(e);if(i.family){if(j(r))switch(i.type){case"atom":case"mutable_atom":e.on.atomCreation.next(i);break;case"selector":case"readonly_selector":e.on.selectorCreation.next(i);break}else if(M(r)&&r.on.transactionApplying.state===null)r.transactionMeta.update.updates.push({type:"state_creation",token:i})}return i}function et(e,o,t){let n=x(t),i=`${o.key}(${n})`,r=y(e),a;switch(o.type){case"atom_family":case"mutable_atom_family":a=r.atoms.get(i);break;case"selector_family":a=r.selectors.get(i);break;case"readonly_selector_family":a=r.readonlySelectors.get(i);break}if(a)return N(a);return a}function S(e,o,t){let n=et(e,o,t);if(n)return n;let i=x(t),r=e.molecules.get(i);if(!r&&e.config.lifespan==="immortal"){let a=xo(o,t);return e.logger.error("\u274C",a.type,a.key,`was not found in store "${e.config.name}"; returned a counterfeit token.`),a}if(n=Zo(e,o,t),r)y(e).moleculeData.set(i,o.key);return n}function re(e,...o){let t;if(o.length===1)t=o[0];else{let n=o[0],i=o[1];t=S(e,n,i)}try{R(e,t)}catch(n){e.logger.error("\u274C",t.type,t.key,`could not be disposed because it was not found in the store "${e.config.name}".`);return}switch(t.type){case"atom":case"mutable_atom":oo(e,t);break;case"selector":case"readonly_selector":ot(e,t);break}}var je=(e,o)=>y(e).atoms.has(o),Ct=(e,o)=>y(e).selectors.has(o),Rt=(e,o)=>y(e).readonlySelectors.has(o),tt=(e,o)=>je(e,o)||Ct(e,o)||Rt(e,o);var He=(e,o)=>{return y(o).selectorGraph.getRelationEntries({downstreamSelectorKey:e}).filter(([n,{source:i}])=>i!==e).map(([n,{source:i}])=>i).filter((n)=>tt(o,n))};var to=(e,o,t)=>{let n=[],i=He(e,t);while(i.length>0){let r=i.shift();if(o.has(r))continue;if(o.add(r),!je(t,r))i.push(...He(r,t));else if(!n.includes(r))n.push(r)}return n},nt=(e,o)=>{let t=e.key,n=He(t,o),i=new Set;return n.flatMap((r)=>je(o,r)?r:to(r,i,o))};var it=(e,o,t,n)=>{let i=y(n);if(o.type==="atom"||o.type==="mutable_atom")i.selectorAtoms.set({selectorKey:e,atomKey:o.key}),n.logger.info("\uD83D\uDD0D","selector",e,`discovers root atom "${o.key}"`);else{let r=to(o.key,t,n);n.logger.info("\uD83D\uDD0D","selector",e,`discovers root atoms: [ ${r.map((a)=>`"${a}"`).join(", ")} ]`);for(let a of r)i.selectorAtoms=i.selectorAtoms.set({selectorKey:e,atomKey:a})}t.add(o.key)};var ze=(e,o,t)=>({get:(...n)=>{let i=y(t),r;if(n.length===2){let[l,m]=n;r=S(t,l,m)}else[r]=n;let a=R(t,r),s=Q(t,a);return t.logger.info("\uD83D\uDD0C","selector",e,`registers dependency ( "${r.key}" =`,s,")"),i.selectorGraph.set({upstreamSelectorKey:r.key,downstreamSelectorKey:e},{source:r.key}),it(e,r,o,t),s},set:(...n)=>{let i,r;if(n.length===2)i=n[0],r=n[1];else{let l=n[0],m=n[1];r=n[2],i=S(t,l,m)}let a=y(t),s=R(a,i);We(a,s,r)},find:(...n)=>S(t,...n),json:(n)=>B(t,n)});var xe=(e,o,t)=>{let n=y(e),i=new A,r=new Set,{get:a,find:s,json:l}=ze(o.key,r,n),m=()=>{let T=o.get({get:a,find:s,json:l});return P(y(e),o.key,T,i),r.clear(),T},c={...o,subject:i,install:(T)=>xe(T,o,t),get:m,type:"readonly_selector",...t&&{family:t}};n.readonlySelectors.set(o.key,c);let f=m();e.logger.info("\u2728",c.type,c.key,"=",f);let d={key:o.key,type:"readonly_selector"};if(t)d.family=t;return d};var Ke=(e,o,t)=>{let n=y(e),i=new A,r=new Set,a=ze(o.key,r,n),{find:s,get:l,json:m}=a,c={find:s,get:l,json:m},f=(J=o.get,v=y(e))=>{let z=J(c);return P(v,o.key,z,i),r.clear(),z},T={...o,subject:i,install:(J)=>Ke(J,o,t),get:f,set:(J)=>{let v=y(e),z=f(o.get,v),G=_e(J)(z);if(e.logger.info("\uD83D\uDCDD","selector",o.key,"set (",z,"->",G,")"),P(v,o.key,G,i),ce(v,o.key),j(v))i.next({newValue:G,oldValue:z});o.set(a,G)},type:"selector",...t&&{family:t}};n.selectors.set(o.key,T);let b=f();e.logger.info("\u2728",T.type,T.key,"=",b);let K={key:o.key,type:"selector"};if(t)K.family=t;return K};function Xe(e,o){if("set"in o){let i=Ke(e,o,void 0);return e.on.selectorCreation.next(i),i}let n=xe(e,o,void 0);return e.on.selectorCreation.next(n),n}function ot(e,o){let t=y(e),{key:n}=o,i=R(t,o);if(!i.family)e.logger.error("\u274C","selector",n,"Standalone selectors cannot be disposed.");else{if(t.molecules.get(i.family.subKey))t.moleculeData.delete(i.family.subKey,i.family.key);let a;switch(o.type){case"selector":t.selectors.delete(n),a={key:i.family.key,type:"selector_family"},R(e,a).subject.next({type:"state_disposal",subType:"selector",token:o});break;case"readonly_selector":t.readonlySelectors.delete(n),a={key:i.family.key,type:"readonly_selector_family"},R(e,a).subject.next({type:"state_disposal",subType:"selector",token:o});break}if(t.valueMap.delete(n),t.selectorAtoms.delete(n),t.selectorGraph.delete(n),e.logger.info("\uD83D\uDD25",o.type,n,"deleted"),M(t)&&t.transactionMeta.phase==="building")t.transactionMeta.update.updates.push({type:"state_disposal",subType:"selector",token:o});else e.on.selectorDisposal.next(o)}}function ge(e,o,t){let n={key:o.key,type:"selector_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","selector_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new A,s=Object.assign((l)=>{let m=x(l),c={key:o.key,subKey:m},f=`${o.key}(${m})`,d=y(e),T=Ke(d,{key:f,get:o.get(l),set:o.set(l)},c);return r.next({type:"state_creation",token:T}),T},n,{internalRoles:t,subject:r,install:(l)=>ge(l,o),default:(l)=>{return o.get(l)({get:(...c)=>$(e,...c),find:(...c)=>S(e,...c),json:(c)=>B(e,c)})}});return e.families.set(o.key,s),n}function rt(e,o,t){return ge(e,{key:`${o.key}:JSON`,get:(i)=>({get:r})=>{let a=r(o,i);return t.toJson(a)},set:(i)=>({set:r},a)=>{r(o,i,t.fromJson(a))}},["mutable","json"])}var I=(e)=>JSON.parse(e),x=(e)=>JSON.stringify(e),Ml=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];var at=(e,o)=>{let t=y(e);if(t.operation.open)return t.operation.prev.get(o.key);return t.valueMap.get(o.key)};var ro=(e,o)=>{let t=y(e);return nt(o,e).map((i)=>{let r=t.atoms.get(i);if(r===void 0)throw new Error(`Atom "${i}", a dependency of selector "${o.key}", not found in store "${e.config.name}".`);return r.subject.subscribe(`${o.type}:${o.key}`,(a)=>{e.logger.info("\uD83D\uDCE2",o.type,o.key,"root",i,"went",a.oldValue,"->",a.newValue);let s=at(t,o),l=Q(t,o);e.logger.info("\u2728",o.type,o.key,"went",s,"->",l),o.subject.next({newValue:l,oldValue:s})})})};function H(e,o,t,n){function i(f){if(e.operation.open){let d=e.on.operationClose.subscribe(`state subscription ${t}`,()=>{d(),n(f)})}else n(f)}let r=R(e,o);e.logger.info("\uD83D\uDC40",r.type,r.key,`Adding subscription "${t}"`);let a=r.type==="selector"||r.type==="readonly_selector",s=null,l=i;if(a)s=ro(e,r),l=(f)=>{if(s)s.length=0,s.push(...ro(e,r));i(f)};let m=r.subject.subscribe(t,l);return()=>{if(e.logger.info("\uD83D\uDE48",r.type,r.key,`Removing subscription "${t}"`),m(),s)for(let f of s)f()}}var no=(e,o,t,n)=>{let i=R(e,o);e.logger.info("\uD83D\uDC40","timeline",o.key,`Adding subscription "${t}"`);let r=i.subject.subscribe(t,n);return()=>{e.logger.info("\uD83D\uDE48","timeline",o.key,`Removing subscription "${t}" from timeline`),r()}};var io=(e,o,t,n)=>{let i=R(e,o);e.logger.info("\uD83D\uDC40","transaction",o.key,`Adding subscription "${t}"`);let r=i.subject.subscribe(t,n);return()=>{e.logger.info("\uD83D\uDE48","transaction",o.key,`Removing subscription "${t}"`),r()}};class ae{Update;initializeState(e,o){let t=`*${e.key}`;o.atoms.delete(t),o.valueMap.delete(t);let n=e.family?{key:`*${e.family.key}`,subKey:e.family.subKey}:void 0,i=ee(o,{key:t,default:null},n);if(o.parent?.valueMap.has(t)){let r=o.parent.valueMap.get(t);o.valueMap.set(t,r)}return i}unsubscribeFromInnerValue;unsubscribeFromState;observeCore(e,o,t){let n=`tracker:${t.config.name}:${M(t)?t.transactionMeta.update.key:"main"}:${e.key}`,i=$(t,e);this.unsubscribeFromInnerValue=i.subscribe(n,(r)=>{O(t,o,r)}),this.unsubscribeFromState=H(t,e,n,(r)=>{if(r.newValue!==r.oldValue)this.unsubscribeFromInnerValue(),this.unsubscribeFromInnerValue=r.newValue.subscribe(n,(a)=>{O(t,o,a)})})}updateCore(e,o,t){let n=`tracker:${t.config.name}:${M(t)?t.transactionMeta.update.key:"main"}:${e.key}`;H(t,o,n,({newValue:i,oldValue:r})=>{let a=t.timelineTopics.getRelatedKey(o.key);if(a){if(t.timelines.get(a)?.timeTraveling){let m=no(t,{key:a,type:"timeline"},n,(c)=>{m(),O(t,e,(f)=>{if(c==="redo"&&i)f.do(i);else if(c==="undo"&&r)f.undo(r);return f})});return}}let s=t.on.operationClose.subscribe(n,()=>{s();let l=$(t,e),m=i===null?-1:l.getUpdateNumber(i),c=m-l.cacheUpdateNumber;if(i&&c===1)O(t,e,(f)=>(f.do(i),f));else t.logger.info("\u274C","mutable_atom",e.key,`could not be updated. Expected update number ${l.cacheUpdateNumber+1}, but got ${m}`)})})}mutableState;latestUpdateState;[Symbol.dispose];constructor(e,o){this.mutableState=e;let t=y(o);this.latestUpdateState=this.initializeState(e,t),this.observeCore(e,this.latestUpdateState,t),this.updateCore(e,this.latestUpdateState,t),t.trackers.set(e.key,this),this[Symbol.dispose]=()=>{this.unsubscribeFromInnerValue(),this.unsubscribeFromState(),t.trackers.delete(e.key)}}}function Me(e,o,t){e.logger.info("\uD83D\uDD28","atom",o.key,`creating in store "${e.config.name}"`);let n=y(e),i=n.atoms.get(o.key);if(i&&i.type==="mutable_atom")return e.logger.error("\u274C","atom",o.key,"Tried to create atom, but it already exists in the store."),N(i);let r=new A,a={...o,type:"mutable_atom",install:(m)=>{return m.logger.info("\uD83D\uDEE0\uFE0F","atom",o.key,`installing in store "${m.config.name}"`),Me(m,o,t)},subject:r};if(t)a.family=t;let s=o.default();n.atoms.set(a.key,a),Ve(e,o.key),P(n,o.key,s,r);let l=N(a);if(o.effects){let m=0,c=[];for(let f of o.effects){let d=f({setSelf:(T)=>{O(e,l,T)},onSet:(T)=>H(e,l,`effect[${m}]`,T)});if(d)c.push(d);++m}a.cleanup=()=>{for(let f of c)f()}}if(new ae(l,e),!t)So(l,o,e);return l}class ao{trackers=new Map;Update;latestUpdateAtoms;mutableAtoms;constructor(e,o){let t=Z(o,{key:`*${e.key}`,default:null},["mutable","updates"]);this.latestUpdateAtoms=R(o,t),this.mutableAtoms=e,this.mutableAtoms.subject.subscribe(`store=${o.config.name}::tracker-atom-family`,(n)=>{let{type:i,token:r}=n;if(r.family){let a=I(r.family.subKey);switch(i){case"state_creation":this.trackers.set(a,new ae(r,o));break;case"state_disposal":{let s=this.trackers.get(a);if(s)s[Symbol.dispose](),this.trackers.delete(a)}break}}})}}function be(e,o,t){let n={key:o.key,type:"mutable_atom_family"},i=e.families.get(o.key);if(i)e.logger.error("\u2757","mutable_atom_family",o.key,`Overwriting an existing ${U(i)} "${i.key}" in store "${e.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let r=new A,s=Object.assign((l)=>{let m=x(l),c={key:o.key,subKey:m},f=`${o.key}(${m})`,d=y(e),T={key:f,default:()=>o.default(l),toJson:o.toJson,fromJson:o.fromJson,mutable:!0};if(o.effects)T.effects=o.effects(l);let b=Me(d,T,c);return r.next({type:"state_creation",token:b}),b},n,{subject:r,install:(l)=>be(l,o),toJson:o.toJson,fromJson:o.fromJson,internalRoles:t});return e.families.set(o.key,s),rt(e,s,o),new ao(s,e),n}var lo=(e,o)=>{let t=y(o),n=`${e.key}:JSON`;return t.families.get(n)};var B=(e,o)=>{if(o.family){let n=y(e),r={key:`${o.family.key}:JSON`,type:"selector_family"},a=R(n,r),s=JSON.parse(o.family.subKey);return S(e,a,s)}return{type:"selector",key:`${o.key}:JSON`}};var Y=(e)=>{let t={type:"atom",key:`*${e.key}`};if(e.family)t.family={key:`*${e.family.key}`,subKey:e.family.subKey};return t};function _o(e){return typeof e==="object"&&e!==null&&"do"in e&&"undo"in e&&"subscribe"in e}function Ce(e,o,t){let n=t.valueMap.get(o.key),i=e.valueMap.get(o.key);if(n!==i)return i;if(n===void 0)return o.default();t.logger.info("\uD83D\uDCC3","atom",o.key,"copying");let r=o.toJson(n),a=o.fromJson(r);return e.valueMap.set(o.key,a),new ae(o,t),a}function P(e,o,t,n){let i=e.valueMap.get(o);if(i instanceof ke)i.use(t);if(t instanceof Promise){let r=new ke(t);return e.valueMap.set(o,r),r.then((a)=>{P(e,o,a,n),n.next({newValue:a,oldValue:r})}).catch((a)=>{e.logger.error("\uD83D\uDCA5","state",o,"rejected:",a)}),r}return e.valueMap.set(o,t),t}var ho=(e,o)=>{let t=o.valueMap.get(e.key);if(e.type==="mutable_atom"&&M(o)){let{parent:n}=o;t=Ce(o,e,n)}return t},vo=(e,o)=>{let t=o.valueMap.get(e);if(t instanceof ke){let n=t,i=o.selectors.get(e)??o.readonlySelectors.get(e);if(i)n.use(i.get());return}if(o.operation.open)o.operation.prev.set(e,t);o.valueMap.delete(e),o.logger.info("\uD83D\uDDD1","state",e,"evicted")};var Wo=(e,o)=>{return y(e).atomsThatAreDefault.has(o)},Ve=(e,o)=>{let t=y(e);t.atomsThatAreDefault=new Set(t.atomsThatAreDefault).add(o)},Io=(e,o)=>{let t=y(e);t.atomsThatAreDefault=new Set(y(e).atomsThatAreDefault),t.atomsThatAreDefault.delete(o)};function ee(e,o,t){e.logger.info("\uD83D\uDD28","atom",o.key,`creating in store "${e.config.name}"`);let n=y(e),i=n.atoms.get(o.key);if(i&&i.type==="atom")return e.logger.error("\u274C","atom",o.key,"Tried to create atom, but it already exists in the store."),N(i);let r=new A,a={...o,type:"atom",install:(m)=>{return m.logger.info("\uD83D\uDEE0\uFE0F","atom",o.key,`installing in store "${m.config.name}"`),ee(m,o,t)},subject:r};if(t)a.family=t;let s=o.default;if(o.default instanceof Function)s=o.default();n.atoms.set(a.key,a),Ve(e,o.key),P(n,o.key,s,r);let l=N(a);if(o.effects){let m=0,c=[];for(let f of o.effects){let d=f({setSelf:(T)=>{O(e,l,T)},onSet:(T)=>H(e,l,`effect[${m}]`,T)});if(d)c.push(d);++m}a.cleanup=()=>{for(let f of c)f()}}return l}function go(e,o){if("mutable"in o){let i=Me(e,o,void 0);return e.on.atomCreation.next(i),i}let n=ee(e,o,void 0);return e.on.atomCreation.next(n),n}function oo(e,o){let t=y(e),{key:n,family:i}=o,r=R(t,o);if(!i)e.logger.error("\u274C","atom",n,"Standalone atoms cannot be disposed.");else{r.cleanup?.();let a=e.valueMap.get(r.key),s=R(e,{key:i.key,type:"atom_family"}),l={type:"state_disposal",subType:"atom",token:o,value:a};s.subject.next(l);let m=M(t);if(t.atoms.delete(n),t.valueMap.delete(n),t.selectorAtoms.delete(n),t.atomsThatAreDefault.delete(n),e.timelineTopics.delete(n),o.type==="mutable_atom"){let c=Y(o);oo(e,c),e.trackers.delete(n)}if(e.logger.info("\uD83D\uDD25","atom",n,"deleted"),m&&t.transactionMeta.phase==="building"){let c=t.transactionMeta.update.updates.at(-1);if(!(c?.type==="molecule_disposal"&&c.values.some(([T])=>T===r.family?.key)))t.transactionMeta.update.updates.push(l)}else e.on.atomDisposal.next(o)}}class W extends Set{mode="record";subject=new A;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(e,o=0){super(e);if(e instanceof W)this.parent=e,this.cacheUpdateNumber=e.cacheUpdateNumber;if(o)this.cacheLimit=o,this.cache=new Array(o),this.subscribe("auto cache",(t)=>{this.cacheIdx++,this.cacheIdx%=this.cacheLimit,this.cache[this.cacheIdx]=t})}toJSON(){return{members:[...this],cache:this.cache,cacheLimit:this.cacheLimit,cacheIdx:this.cacheIdx,cacheUpdateNumber:this.cacheUpdateNumber}}static fromJSON(e){let o=new W(e.members,e.cacheLimit);return o.cache=e.cache,o.cacheIdx=e.cacheIdx,o.cacheUpdateNumber=e.cacheUpdateNumber,o}add(e){let o=super.add(e);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`add:${x(e)}`);return o}clear(){let e=this.mode==="record"?[...this]:null;if(super.clear(),e)this.cacheUpdateNumber++,this.emit(`clear:${JSON.stringify(e)}`)}delete(e){let o=super.delete(e);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`del:${x(e)}`);return o}parent;child=null;transactionUpdates=null;transaction(e){this.mode="transaction",this.transactionUpdates=[],this.child=new W(this);let o=this.child._subscribe("transaction",(t)=>{this.transactionUpdates?.push(t)});try{if(e(this.child)){for(let n of this.transactionUpdates)this.doStep(n);this.cacheUpdateNumber++,this.emit(`tx:${this.transactionUpdates.join(";")}`)}}catch(t){throw console.warn("Did not apply transaction to SetRTX; this error was thrown:",t),t}finally{o(),this.child=null,this.transactionUpdates=null,this.mode="record"}}_subscribe(e,o){return this.subject.subscribe(e,o)}subscribe(e,o){return this.subject.subscribe(e,(t)=>{o(`${this.cacheUpdateNumber}=${t}`)})}emit(e){this.subject.next(e)}doStep(e){let o=e.indexOf(":"),t=e.substring(0,o),n=e.substring(o+1);switch(t){case"add":this.add(JSON.parse(n));break;case"clear":this.clear();break;case"del":this.delete(JSON.parse(n));break;case"tx":for(let i of n.split(";"))this.doStep(i)}}getUpdateNumber(e){let o=e.indexOf("=");return Number(e.substring(0,o))}do(e){let o=e.indexOf("="),t=Number(e.substring(0,o)),n=t-this.cacheUpdateNumber;if(n>0){if(n===1){this.mode="playback";let r=e.substring(o+1);return this.doStep(r),this.mode="record",this.cacheUpdateNumber=t,null}return this.cacheUpdateNumber+1}if(Math.abs(n)<this.cacheLimit){let r=this.cacheIdx+n;if(this.cache[r]===e)return null;this.mode="playback";let s=!1;while(!s){this.cacheIdx%=this.cacheLimit;let m=this.cache[this.cacheIdx];if(this.cacheIdx--,!m)return"OUT_OF_RANGE";this.undo(m),s=this.cacheIdx===r-1}let l=e.substring(o+1);return this.doStep(l),this.mode="record",this.cacheUpdateNumber=t,null}return"OUT_OF_RANGE"}undoStep(e){let o=e.indexOf(":"),t=e.substring(0,o),n=e.substring(o+1);switch(t){case"add":this.delete(JSON.parse(n));break;case"del":this.add(JSON.parse(n));break;case"clear":{let i=JSON.parse(n);for(let r of i)this.add(r);break}case"tx":{let i=n.split(";");for(let r=i.length-1;r>=0;r--)this.undoStep(i[r])}}}undo(e){let o=e.indexOf("=");if(Number(e.substring(0,o))===this.cacheUpdateNumber){this.mode="playback";let n=e.substring(o+1);return this.undoStep(n),this.mode="record",this.cacheUpdateNumber--,null}return this.cacheUpdateNumber}}class Ae{toolkit;options;defaultContent;molecules=new Map;relations;states;core;transact(e,o){let t=this.toolkit;this.toolkit=e,o(this),this.toolkit=t}store;realm;[Symbol.dispose](){}constructor(e,o,t=C.STORE){this.store=t,this.realm=new Ye(t),this.options=e,this.defaultContent=o,this.store.miscResources.set(`join:${e.key}`,this),this.realm.allocate("root",e.key),this.toolkit={get:(...p)=>$(t,...p),set:(...p)=>{O(t,...p)},find:(...p)=>S(t,...p),json:(p)=>B(t,p)};let n=e.between[0],i=e.between[1],r=be(t,{key:`${e.key}/relatedKeys`,default:()=>new W,mutable:!0,fromJson:(p)=>W.fromJSON(p),toJson:(p)=>p.toJSON()},["join","relations"]);this.core={relatedKeysAtoms:r};let a=({get:p},u)=>p(r,u),s=({set:p},u,F)=>{if(!this.store.molecules.has(x(u)))this.realm.allocate(e.key,u);p(r,u,(k)=>k.add(F)),p(r,F,(k)=>k.add(u))},l=({set:p},u,F)=>{p(r,u,(k)=>{return k.delete(F),k}),p(r,F,(k)=>{return k.delete(u),k})},m=(p,u,F)=>{let{find:k,get:g,set:h}=p,E=k(r,u),X=g(E);for(let V of X){if(F.includes(V))continue;h(r,V,(q)=>{return q.delete(u),q})}h(E,(V)=>{return V.transaction((Te)=>{Te.clear();for(let q of F){let de=a(p,q),To=de.has(u);if(this.relations.cardinality==="1:n"){let uo=[];for(let ue of de){if(ue===u)continue;let Se=a(p,ue);if(Se.delete(q),Se.size===0)uo.push(ue)}if(!To&&de.size>0)de.clear();for(let ue of uo){let Se=[q,ue].sort(),ut=`"${Se[0]}:${Se[1]}"`;this.molecules.delete(ut)}}if(!To)de.add(u);Te.add(q)}return!0}),V})},c=(p,u,F)=>{let{set:k}=p;k(r,u,(g)=>{return g.transaction((h)=>{for(let E of F)h.add(E);return!0}),g});for(let g of F)k(r,g,(h)=>{return h.add(u),h});return!0},f=(p,u,F)=>{let k=a(p,u);return F?k.has(F):k.size>0},d={getRelatedKeys:(p)=>a(this.toolkit,p),addRelation:(p,u)=>{this.store.moleculeJoins.set(p,e.key),this.store.moleculeJoins.set(u,e.key),s(this.toolkit,p,u)},deleteRelation:(p,u)=>{l(this.toolkit,p,u)},replaceRelationsSafely:(p,u)=>{m(this.toolkit,p,u)},replaceRelationsUnsafely:(p,u)=>{c(this.toolkit,p,u)},has:(p,u)=>f(this.toolkit,p,u)},T,b;if(o){b=Z(t,{key:`${e.key}/content`,default:o},["join","content"]);let p=({get:k},g)=>k(b,g),u=({set:k},g,h)=>{k(b,g,h)};T=Object.assign(d,{getContent:(k)=>{return p(this.toolkit,k)},setContent:(k,g)=>{u(this.toolkit,k,g)},deleteContent:(k)=>{this.realm.deallocate(k)}})}else T=d;let K=new _(e,{externalStore:T,isAType:e.isAType,isBType:e.isBType,makeContentKey:(...p)=>{let[u,F]=p,k=p.sort(),g=`${k[0]}:${k[1]}`,h=t.molecules.get(x(u)),E=t.molecules.get(x(F));if(!h)this.realm.allocate(e.key,u);if(!E)this.realm.allocate(e.key,F);return this.realm.allocate(u,g,"all"),this.realm.claim(F,g),this.store.moleculeJoins.set(g,e.key),g}}),J=()=>L(t,{key:`${e.key}/singleRelatedKey`,get:(p)=>({get:u})=>{let F=u(r,p);for(let k of F)return k;return null}},["join","keys"]),v=()=>{return L(t,{key:`${e.key}/multipleRelatedKeys`,get:(p)=>({get:u})=>{let F=lo(r,t);return u(F,p).members}},["join","keys"])},z=()=>L(t,{key:`${e.key}/singleRelatedEntry`,get:(p)=>({get:u})=>{let F=u(r,p);for(let k of F){let g=K.isAType?.(p)?p:void 0,h=g===void 0?p:void 0;g??=k,h??=k;let E=K.makeContentKey(g,h),X=u(b,E);return[k,X]}return null}},["join","entries"]),G=()=>L(t,{key:`${e.key}/multipleRelatedEntries`,get:(p)=>({get:u})=>{let F=lo(r,t);return u(F,p).members.map((g)=>{let h=K.isAType?.(p)?p:void 0,E=h===void 0?p:void 0;h??=g,E??=g;let X=K.makeContentKey(h,E),V=u(b,X);return[g,V]})}},["join","entries"]);switch(e.cardinality){case"1:1":{let p=J(),u=`${n}KeyOf${w(i)}`,F=`${i}KeyOf${w(n)}`,k={[u]:p,[F]:p},g;if(o){let h=z(),E=`${n}EntryOf${w(i)}`,X=`${i}EntryOf${w(n)}`,V={[E]:h,[X]:h};g=Object.assign(k,V)}else g=k;this.relations=K,this.states=g;break}case"1:n":{let p=J(),u=v(),F=`${n}KeyOf${w(i)}`,k=`${i}KeysOf${w(n)}`,g={[F]:p,[k]:u},h;if(o){let E=z(),X=G(),V=`${n}EntryOf${w(i)}`,Te=`${i}EntriesOf${w(n)}`,q={[V]:E,[Te]:X};h=Object.assign(g,q)}else h=g;this.relations=K,this.states=h;break}case"n:n":{let p=v(),u=`${n}KeysOf${w(i)}`,F=`${i}KeysOf${w(n)}`,k={[u]:p,[F]:p},g;if(o){let h=G(),E=`${n}EntriesOf${w(i)}`,X=`${i}EntriesOf${w(n)}`,V={[E]:h,[X]:h};g=Object.assign(k,V)}else g=k;this.relations=K,this.states=g}}}}function ye(e,o){let t=o.joins.get(e.key);if(t===void 0){let i=C.STORE.joins.get(e.key);if(i===void 0)throw new Error(`Join "${e.key}" not found in store "${o.config.name}"`);t=new Ae(i.options,i.defaultContent,o),o.joins.set(e.key,t)}return t}function Fe(e,o,t){let n=ye(e,t),i=y(t);if(M(i)){let{toolkit:r}=i.transactionMeta;n.transact(r,({relations:a})=>{o(a)})}else o(n.relations)}function ve(e,o,t){let n=ye(e,t),i;switch(e.cardinality){case"1:1":{let r=`${e.a}KeyOf${w(e.b)}`,a=`${e.b}KeyOf${w(e.a)}`;i={get[r](){let l=n.states[r];return S(t,l,o)},get[a](){let l=n.states[a];return S(t,l,o)}};let s=`${e.a}EntryOf${w(e.b)}`;if(s in n.states){let l=`${e.b}EntryOf${w(e.a)}`;Object.assign(i,{get[s](){let m=n.states[s];return S(t,m,o)},get[l](){let m=n.states[l];return S(t,m,o)}})}break}case"1:n":{let r=`${e.a}KeyOf${w(e.b)}`,a=`${e.b}KeysOf${w(e.a)}`;i={get[r](){let l=n.states[r];return S(t,l,o)},get[a](){let l=n.states[a];return S(t,l,o)}};let s=`${e.a}EntryOf${w(e.b)}`;if(s in n.states){let l=`${e.b}EntriesOf${w(e.a)}`;Object.assign(i,{get[s](){let m=n.states[s];return S(t,m,o)},get[l](){let m=n.states[l];return S(t,m,o)}})}break}case"n:n":{let r=`${e.a}KeysOf${w(e.b)}`,a=`${e.b}KeysOf${w(e.a)}`;i={get[r](){let l=n.states[r];return S(t,l,o)},get[a](){let l=n.states[a];return S(t,l,o)}};let s=`${e.a}EntriesOf${w(e.b)}`;if(s in n.states){let l=`${e.b}EntriesOf${w(e.a)}`;Object.assign(i,{get[s](){let m=n.states[s];return S(t,m,o)},get[l](){let m=n.states[l];return S(t,m,o)}})}}}return i}function Fo(e,o){return ye(e,o).core.relatedKeysAtoms}function Qo(e){return e.startsWith("\uD83D\uDD0D ")}class lt extends Map{set(e,o){if(this.has(e))return console.warn("Tried to set a key that already exists in an InvariantMap",{key:e,value:o}),this;return super.set(e,o)}clear(){throw new Error("Cannot clear an InvariantMap")}}class Pe{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(e){this.key=e}static existing=new lt;static create(e,o){let t=new Pe(e),{type:n,globals:i,actions:r,perspectives:a}=o(t),s={type:n,key:e,globals:i,actions:r,perspectives:a};return Pe.existing.set(e,s),s}add(...e){switch(e[0].type){case"atom":case"mutable_atom":this.globals.push(...e);break;case"transaction":this.actions.push(...e);break;case"atom_family":case"mutable_atom_family":{let[t,n]=e;this.perspectives.push({type:"realtime_perspective",resourceAtoms:t,viewAtoms:n})}break}return this}}function Dc(e){let{key:o,config:t}=e,n=Pe.create(o,t),{actions:i}=n;for(let r of i)qo(C.STORE,o,r.key);return Xo(C.STORE,o,-1),n}var qc=le({key:"usersInRoomIndex",mutable:!0,default:()=>new W,toJson:(e)=>e.toJSON(),fromJson:(e)=>W.fromJSON(e)}),so=le({key:"roomIndex",default:()=>new W,mutable:!0,toJson:(e)=>e.toJSON(),fromJson:(e)=>W.fromJSON(e)}),Kt={enteredAtEpoch:0},he=Oe({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(e)=>typeof e==="string",isBType:(e)=>typeof e==="string"},Kt),Yc=Be({key:"usersInMyRoomView",get:(e)=>({find:o})=>{let t=Ao(he);return[o(t,e)]}});import{spawn as Mt}from"child_process";class pe{listeners;globalListeners;handleEvent(e,...o){for(let n of this.globalListeners)n(e,...o);let t=this.listeners.get(e);if(t)for(let n of t)n(...o)}id="no_id_retrieved";emit;constructor(e){this.emit=e,this.listeners=new Map,this.globalListeners=new Set}on(e,o){let t=this.listeners.get(e);if(t)t.add(o);else this.listeners.set(e,new Set([o]));return this}onAny(e){return this.globalListeners.add(e),this}off(e,o){let t=this.listeners.get(e);if(t)if(o)t.delete(o);else this.listeners.delete(e);return this}offAny(e){return this.globalListeners.delete(e),this}}class mo extends pe{incompleteData="";unprocessedEvents=[];incompleteLog="";unprocessedLogs=[];id="#####";process;key;logger;handleLog(e){if(Array.isArray(e)){let[o,...t]=e;switch(o){case"i":this.logger.info(...t);break;case"w":this.logger.warn(...t);break;case"e":this.logger.error(...t);break;default:return}}}constructor(e,o,t){super((n,...i)=>{let r=JSON.stringify([n,...i])+"\x03",a=(s)=>{if(s.code==="EPIPE")console.error("EPIPE error during write",this.process.stdin);this.process.stdin.removeListener("error",a)};return this.process.stdin.once("error",a),this.process.stdin.write(r),this});if(this.process=e,this.key=o,this.logger=t??{info:(...n)=>{console.info(this.id,this.key,...n)},warn:(...n)=>{console.warn(this.id,this.key,...n)},error:(...n)=>{console.error(this.id,this.key,...n)}},this.process.stdout.on("data",(n)=>{let i=n.toString();if(i==="ALIVE")return;this.unprocessedEvents.push(...i.split("\x03"));let r=this.unprocessedEvents.shift();this.incompleteData+=r??"";try{if(this.incompleteData.startsWith("error"))console.log("\u2757",this.incompleteData);let a=I(this.incompleteData);this.handleEvent(...a);while(this.unprocessedEvents.length>0){let s=this.unprocessedEvents.shift();if(s){if(this.unprocessedEvents.length===0)this.incompleteData=s;a=I(s),this.handleEvent(...a)}}this.incompleteData=""}catch(a){console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.warn(this.incompleteData),console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.error(a)}}),this.process.stderr.on("data",(n)=>{let i=n.toString();this.unprocessedLogs.push(...i.split("\x03"));let r=this.unprocessedLogs.shift();this.incompleteLog+=r??"";try{let a=I(this.incompleteLog);this.handleLog(a);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)a=I(this.incompleteLog),this.handleLog(a)}catch(a){console.error("\u274C\u274C\u274C"),console.error(this.incompleteLog),console.error(a),console.error("\u274C\u274C\u274C\uFE0F")}}),e.pid)this.id=e.pid.toString()}}class st extends pe{in;out;id="no_id_retrieved";disposalFunctions=[];constructor(e){super((...o)=>{return this.out.next(o),this});this.id=e,this.in=new A,this.out=new A,this.in.subscribe("socket",(o)=>{this.handleEvent(...o)})}dispose(){for(let e of this.disposalFunctions)e()}}class co extends pe{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...e){this.process.stderr.write(x(e.map((o)=>o instanceof W?`{ ${o.toJSON().members.join(" | ")} }`:o))+"\x03")}logger={info:(...e)=>{this.log("i",...e)},warn:(...e)=>{this.log("w",...e)},error:(...e)=>{this.log("e",...e)}};constructor(){super((e,...o)=>{let t=JSON.stringify([e,...o]);return this.process.stdout.write(t+"\x03"),this});if(this.process=process,this.process.stdin.resume(),this.relays=new Map,this.relayServices=[],this.process.stdin.on("data",(e)=>{let o=e.toString();this.unprocessedEvents.push(...o.split("\x03"));let t=this.unprocessedEvents.shift();this.incompleteData+=t??"";try{let n=I(this.incompleteData);this.logger.info("\uD83C\uDFB0","received",n),this.handleEvent(...n);while(this.unprocessedEvents.length>0){let i=this.unprocessedEvents.shift();if(i){if(this.unprocessedEvents.length===0)this.incompleteData=i;let r=I(i);this.handleEvent(...r)}}this.incompleteData=""}catch(n){if(n instanceof Error)this.logger.error("\u2757",n.message,n.cause,n.stack)}}),this.on("exit",()=>{this.logger.info("\uD83D\uDD25",this.id,'received "exit"'),process.exit(0)}),process.on("exit",(e)=>{this.logger.info("\uD83D\uDD25",this.id,`exited with code ${e}`)}),process.on("end",()=>{this.logger.info("\uD83D\uDD25",this.id,"ended"),process.exit(0)}),process.on("SIGTERM",()=>{this.logger.error("\uD83D\uDD25",this.id,"terminated"),process.exit(0)}),process.on("SIGINT",()=>{this.logger.error("\uD83D\uDD25",this.id,"interrupted"),process.exit(0)}),process.pid)this.id=process.pid?.toString();this.on("user-joins",(e)=>{this.logger.info("\uD83D\uDC64","user",e,"joined");let o=new st(`user:${e}`);this.relays.set(e,o),this.logger.info("\uD83D\uDD17","attaching services:",`[${[...this.relayServices.keys()].join(", ")}]`);for(let t of this.relayServices){let n=t(o);if(n)o.disposalFunctions.push(n)}this.on(`user:${e}`,(...t)=>{o.in.next(t)}),o.out.subscribe("socket",(t)=>{this.emit(...t)})}),this.on("user-leaves",(e)=>{let o=this.relays.get(e);if(this.off(`relay:${e}`),o)o.dispose(),this.relays.delete(e)}),process.stdout.write("ALIVE")}relay(e){this.logger.info("\uD83D\uDD17","running relay method"),this.relayServices.push(e)}}var yo=oe({key:"roomArguments",default:["echo",["Hello World!"]]}),mt=Be({key:"room",get:(e)=>async({get:o,find:t})=>{let n=t(yo,e),i=o(n),[r,a]=i,s=await new Promise((l)=>{let m=Mt(r,a,{env:process.env}),c=(f)=>{if(f.toString()==="ALIVE")m.stdout.off("data",c),l(m)};m.stdout.on("data",c)});return new mo(s,e)}});var Ay=Re({key:"createRoom",do:({get:e,set:o,find:t},n,i,r)=>{let a=r?[i,r]:[i],s=t(yo,n);o(s,a),o(so,(c)=>c.add(n));let l=t(mt,n);return e(l)}}),Fy=Re({key:"joinRoom",do:(e,o,t,n)=>{let i={enteredAtEpoch:n};return Fe(he,(r)=>{r.set({room:o,user:t},i)},e.env().store),i}}),Cy=Re({key:"leaveRoom",do:(e,o,t)=>{Fe(he,(n)=>{n.delete({room:o,user:t})},e.env().store)}}),Ry=Re({key:"destroyRoom",do:(e,o)=>{Fe(he,(t)=>{t.delete({room:o})},e.env().store),e.set(so,(t)=>(t.delete(o),t))}});function po(e,o){return o.map((t)=>{switch(t.type){case"transaction_update":{let n=po(e,t.updates);return{...t,updates:n}}case"atom_update":case"selector_update":case"molecule_creation":case"molecule_disposal":case"molecule_transfer":case"state_creation":case"state_disposal":return t}}).filter((t)=>{switch(t.type){case"atom_update":case"selector_update":return e.includes(t.key);case"state_creation":case"state_disposal":return e.includes(t.token.key);case"molecule_creation":case"transaction_update":case"molecule_disposal":case"molecule_transfer":return!0}})}var hy=oe({key:"redactor",default:{occlude:(e)=>e}}),fe=oe({key:"unacknowledgedUpdates",default:()=>[]});var ct=oe({key:"sockets",default:null}),Oy=le({key:"socketsIndex",mutable:!0,default:()=>new W,toJson:(e)=>e.toJSON(),fromJson:(e)=>W.fromJSON(e)}),vy=le({key:"usersIndex",mutable:!0,default:()=>new W,toJson:(e)=>e.toJSON(),fromJson:(e)=>W.fromJSON(e)}),fo=Oe({key:"usersOfSockets",between:["user","socket"],cardinality:"1:1",isAType:(e)=>e.startsWith("user::"),isBType:(e)=>e.startsWith("socket::")});function yt(e,o,t,n){let i=o.key;return function r(){let a=[];for(let l of o.globals){let m=l.type==="mutable_atom"?B(e,l):l,c=$(e,m);a.push(m,c)}for(let l of o.perspectives){let{viewAtoms:m,resourceAtoms:c}=l,f=S(e,m,t),d=$(e,f);e.logger.info("\uD83D\uDC41","atom",c.key,`${t} can see`,{viewAtoms:m,resourceAtoms:c,userView:d});for(let T of d){let b=T.type==="mutable_atom"?B(e,T):T,K=$(e,b);a.push(b,K)}}let s=j(e)?e.transactionMeta.epoch.get(i)??null:null;n?.emit(`continuity-init:${i}`,s,a)}}function pt(e,o,t){let n=o.key;return function i(r){e.logger.info("\uD83D\uDECE\uFE0F","continuity",n,"received",r);let{key:a,id:s}=r,l=`tx-run:${a}:${s}`,m=`${l}:start`,c=`${l}:end`;performance.mark(m);try{me(e,{type:"transaction",key:a},s)(...r.params)}catch(d){if(d instanceof Error)e.logger.error("\u274C","continuity",n,`failed to run transaction ${a} from ${t} with update ${s}`,d.message)}performance.mark(c);let f=performance.measure(l,m,c);e?.logger.info("\uD83D\uDE80","transaction",a,s,t,f.duration)}}function ft(e,o,t,n){let i=o.key;return function r(a){if(e.logger.info("\uD83D\uDC4D","continuity",i,`${t} acknowledged epoch ${a}`),n[0]?.epoch===a)O(e,fe,t,(l)=>{return l.shift(),e.logger.info("\uD83D\uDC4D","continuity",i,`${t} unacknowledged update queue now has`,l.length,"items"),l})}}function Tt(e,o,t,n){let i=o.key,r=[];for(let a of o.actions){let s=io(e,a,`sync-continuity:${i}:${t}`,(l)=>{try{let m=o.globals.map((d)=>{if(d.type==="atom")return d.key;return Y(d).key}).concat(o.perspectives.flatMap((d)=>{let{viewAtoms:T}=d,b=S(e,T,t);return $(e,b).map((J)=>{return J.type==="mutable_atom"?"*"+J.key:J.key})})),c=po(m,l.updates),f={...l,updates:c};O(e,fe,t,(d)=>{if(f)d.push(f),d.sort((T,b)=>T.epoch-b.epoch),e.logger.info("\uD83D\uDC4D","continuity",i,`${t} unacknowledged update queue now has`,d.length,"items");return d}),n?.emit(`tx-new:${i}`,f)}catch(m){if(m instanceof Error)e.logger.error("\u274C","continuity",i,`${t} failed to send update from transaction ${a.key} to ${t}`,m.message)}});r.push(s)}return r}function dt(e,o,t,n){let i=o.key,r=[];for(let a of o.perspectives){let{viewAtoms:s}=a,l=S(e,s,t),m=H(e,l,`sync-continuity:${i}:${t}:perspective:${a.resourceAtoms.key}`,({oldValue:c,newValue:f})=>{let d=c.map((J)=>J.key),T=f.map((J)=>J.key),b=c.filter((J)=>!T.includes(J.key)),K=f.filter((J)=>!d.includes(J.key)).flatMap((J)=>{let v=J.type==="mutable_atom"?B(e,J):J,z=$(e,v);return[v,z]});if(e.logger.info("\uD83D\uDC41","atom",a.resourceAtoms.key,`${t} has a new perspective`,{oldKeys:d,newKeys:T,revealed:K,concealed:b}),K.length>0)n?.emit(`reveal:${i}`,K);if(b.length>0)n?.emit(`conceal:${i}`,b)});r.push(m)}return r}function sp({socket:e,store:o=C.STORE}){return function t(n){let i=e,r=n.key,a=ve(fo,`socket::${i.id}`,o).userKeyOfSocket,s=$(o,a);if(!s)return o.logger.error("\u274C","continuity",r,`Tried to create a synchronizer for a socket (${i.id}) that is not connected to a user.`),()=>{};let l=ve(fo,s,o).socketKeyOfUser,m=H(o,l,`sync-continuity:${r}:${s}`,({newValue:v})=>{if(o.logger.info("\uD83D\uDC4B","continuity",r,`seeing ${s} on new socket ${v}`),v===null){o.logger.warn("\u274C","continuity",r,`User (${s}) is not connected to a socket, waiting for them to reappear.`);return}let z=S(o,ct,v);i=$(o,z);for(let p of c)i?.emit(`tx-new:${r}`,p)}),c=$(o,fe,s),f=[],d=dt(o,n,s,i),T=Tt(o,n,s,i);f.push(...d,...T);let b=yt(o,n,s,e);i.off(`get:${r}`,b),i.on(`get:${r}`,b);let K=pt(o,n,s);i.off(`tx-run:${r}`,K),i.on(`tx-run:${r}`,K);let J=ft(o,n,s,c);return i?.on(`ack:${r}`,J),()=>{for(let v of f)v();i?.off(`ack:${r}`,J),i?.off(`get:${r}`,b),i?.off(`tx-run:${r}`,K)}}}var we=new co;Object.assign(console,we.logger,{log:we.logger.info});we.on("timeToStop",function e(){we.logger.info("\uD83D\uDEEC game worker exiting"),process.exit(0)});we.logger.info("\uD83D\uDEEB game worker ready");