tempest.games 0.1.33 → 0.1.34

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,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var ut=Object.create;var{getPrototypeOf:St,defineProperty:Ve,getOwnPropertyNames:kt}=Object;var bt=Object.prototype.hasOwnProperty;var Mt=(e,o,t)=>{t=e!=null?ut(St(e)):{};let n=o||!e||!e.__esModule?Ve(t,"default",{value:e,enumerable:!0}):t;for(let i of kt(e))if(!bt.call(n,i))Ve(n,i,{get:()=>e[i],enumerable:!0});return n};var ht=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var Jt=(e,o)=>{for(var t in o)Ve(e,t,{get:o[t],enumerable:!0,configurable:!0,set:(n)=>o[t]=()=>n})};var $t=import.meta.require;function $e(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}}function vt(e){return Object.entries(e)}var uo=(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 y(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 Ne 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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(e),T=o.default,b={key:p,default:T instanceof Function?T(s):T};if(o.effects)b.effects=o.effects(s);let M=ee(d,b,c);return r.next({type:"state_creation",token:M}),M},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 So(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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(e),T=xe(d,{key:p,get:o.get(s)},c);return r.next({type:"state_creation",token:T}),T},n,{internalRoles:t,subject:r,install:(s)=>L(s,o),default:(s)=>{return o.get(s)({get:(...c)=>w(e,...c),find:(...c)=>S(e,...c),json:(c)=>v(e,c)})}});return e.families.set(o.key,l),n}function ko(e,o){if("set"in o)return Ae(e,o);return L(e,o)}class we{_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 we([...this._buffer]);return e._index=this._index,e}}var xt={atom_family:"atom",mutable_atom_family:"mutable_atom",selector_family:"selector",readonly_selector_family:"readonly_selector",molecule_family:"molecule"};function bo(e,o){let t=x(o),n=`${e.key}(${t})`,i=xt[e.type],r={key:n,type:i};return Object.assign(r,{family:{key:e.key,subKey:t}}),Object.assign(r,{counterfeit:!0}),r}function U(e){let o={key:e.key,type:e.type};if("family"in e)o.family=e.family;return o}function se(e){return xo(F.STORE,e)}function oe(e){return So(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 Ao(e){return go(e,F.STORE)}var Ue=(e)=>(o,t,n,i,...r)=>{console[e](`${o} ${t} "${n}" ${i}`,...r)},At={error:Ue("error"),info:Ue("info"),warn:Ue("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=F.STORE){this.store=e,Fo("root",e)}allocate(e,o,t){return te(this.store,e,o,t)}fuse(e,o,t){return Ro(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 Co(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 ko(F.STORE,e)}function _(e){return"epoch"in e.transactionMeta}function K(e){return"phase"in e.transactionMeta}var Ko=(e)=>{let o=y(e);if(!K(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 N(e){return e.type.split("_").map(J).join(" ")}class ie extends Error{constructor(e,o){super(`${N(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"),Mo(o,e);if(o.type==="selector"||o.type==="readonly_selector")return e.logger.info("\uD83E\uDDEE",o.type,o.key,"computing value"),o.get();let t=o.default instanceof Function?o.default():o.default;return e.logger.info("\uD83D\uDC81","atom",o.key,"could not find cached value; using default",t),o.default instanceof Function?o.default():o.default};var ho=(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}"${!K(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 wo=(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;Oo(i,t),ce(t,i)}}};function gt(e,o){if(vo(o.newValue))return!1;if(e.includes("\uD83D\uDD0D"))return!1;return!0}var Bo=(e,o,t)=>{let{key:n}=o,i=y(e);if(!K(i)||i.transactionMeta.phase!=="building"){e.logger.error("\uD83D\uDC1E","atom",n,"stowUpdate called outside of a transaction. This is probably a bug.");return}if(!gt(n,t))return;let a={type:"atom_update",key:n,...t};if(o.family)a.family=o.family;i.transactionMeta.update.updates.push(a),e.logger.info("\uD83D\uDCC1","atom",n,"stowed (",t.oldValue,"->",t.newValue,")")};var _o=(e,o,t)=>{let n=Q(t,e),i=n;if(e.type==="mutable_atom"&&K(t)){let{parent:a}=t;i=Fe(t,e,a)}if(i=_e(o)(i),t.logger.info("\uD83D\uDCDD","atom",e.key,"set to",i),i=D(t,e.key,i,e.subject),Wo(t,e.key))Io(t,e.key);ce(t,e.key),Ge(t,e);let r={oldValue:n,newValue:i};if(_(t))wo(t,e,r);else if(t.parent){if(t.on.transactionApplying.state===null)Bo(t,e,r);else if(e.key.startsWith("*")){let a=e.key.slice(1),l=t.atoms.get(a),s=t.valueMap.get(a);if(l.type==="mutable_atom"&&K(t)){let{parent:c}=t;s=Fe(t,l,c)}if(s.do(r.newValue)===null)Ge(t,l)}}};var We=(e,o,t)=>{switch(o.type){case"atom":case"mutable_atom":_o(o,t,e);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?E(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((c)=>c?.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:
3
+ var ut=Object.create;var{getPrototypeOf:St,defineProperty:Ve,getOwnPropertyNames:kt}=Object;var bt=Object.prototype.hasOwnProperty;var Mt=(e,o,t)=>{t=e!=null?ut(St(e)):{};let n=o||!e||!e.__esModule?Ve(t,"default",{value:e,enumerable:!0}):t;for(let i of kt(e))if(!bt.call(n,i))Ve(n,i,{get:()=>e[i],enumerable:!0});return n};var ht=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var Jt=(e,o)=>{for(var t in o)Ve(e,t,{get:o[t],enumerable:!0,configurable:!0,set:(n)=>o[t]=()=>n})};var $t=import.meta.require;function $e(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}}function vt(e){return Object.entries(e)}var uo=(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 y(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 Ne 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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(e),T=o.default,b={key:p,default:T instanceof Function?T(s):T};if(o.effects)b.effects=o.effects(s);let M=ee(d,b,c);return r.next({type:"state_creation",token:M}),M},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 So(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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(e),T=xe(d,{key:p,get:o.get(s)},c);return r.next({type:"state_creation",token:T}),T},n,{internalRoles:t,subject:r,install:(s)=>L(s,o),default:(s)=>{return o.get(s)({get:(...c)=>w(e,...c),find:(...c)=>S(e,...c),json:(c)=>v(e,c)})}});return e.families.set(o.key,l),n}function ko(e,o){if("set"in o)return Ae(e,o);return L(e,o)}class we{_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 we([...this._buffer]);return e._index=this._index,e}}var xt={atom_family:"atom",mutable_atom_family:"mutable_atom",selector_family:"selector",readonly_selector_family:"readonly_selector",molecule_family:"molecule"};function bo(e,o){let t=x(o),n=`${e.key}(${t})`,i=xt[e.type],r={key:n,type:i};return Object.assign(r,{family:{key:e.key,subKey:t}}),Object.assign(r,{counterfeit:!0}),r}function U(e){let o={key:e.key,type:e.type};if("family"in e)o.family=e.family;return o}function se(e){return xo(F.STORE,e)}function oe(e){return So(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 Ao(e){return go(e,F.STORE)}var Ue=(e)=>(o,t,n,i,...r)=>{console[e](`${o} ${t} "${n}" ${i}`,...r)},At={error:Ue("error"),info:Ue("info"),warn:Ue("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=F.STORE){this.store=e,Fo("root",e)}allocate(e,o,t){return te(this.store,e,o,t)}fuse(e,o,t){return Ro(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 Co(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 ko(F.STORE,e)}function _(e){return"epoch"in e.transactionMeta}function K(e){return"phase"in e.transactionMeta}var Ko=(e)=>{let o=y(e);if(!K(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 N(e){return e.type.split("_").map(J).join(" ")}class ie extends Error{constructor(e,o){super(`${N(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"),Mo(o,e);if(o.type==="selector"||o.type==="readonly_selector")return e.logger.info("\uD83E\uDDEE",o.type,o.key,"computing value"),o.get();let t=o.default instanceof Function?o.default():o.default;return e.logger.info("\uD83D\uDC81","atom",o.key,"could not find cached value; using default",t),o.default instanceof Function?o.default():o.default};var ho=(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}"${!K(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 wo=(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;Oo(i,t),ce(t,i)}}};function gt(e,o){if(vo(o.newValue))return!1;if(e.includes("\uD83D\uDD0D"))return!1;return!0}var Bo=(e,o,t)=>{let{key:n}=o,i=y(e);if(!K(i)||i.transactionMeta.phase!=="building"){e.logger.error("\uD83D\uDC1E","atom",n,"stowUpdate called outside of a transaction. This is probably a bug.");return}if(!gt(n,t))return;let a={type:"atom_update",key:n,...t};if(o.family)a.family=o.family;i.transactionMeta.update.updates.push(a),e.logger.info("\uD83D\uDCC1","atom",n,"stowed (",t.oldValue,"->",t.newValue,")")};var _o=(e,o,t)=>{let n=Q(t,e),i=n;if(e.type==="mutable_atom"&&K(t)){let{parent:a}=t;i=Fe(t,e,a)}if(i=_e(o)(i),t.logger.info("\uD83D\uDCDD","atom",e.key,"set to",i),i=D(t,e.key,i,e.subject),Wo(t,e.key))Io(t,e.key);ce(t,e.key),Ge(t,e);let r={oldValue:n,newValue:i};if(_(t))wo(t,e,r);else if(t.parent){if(t.on.transactionApplying.state===null)Bo(t,e,r);else if(e.key.startsWith("*")){let a=e.key.slice(1),l=t.atoms.get(a),s=t.valueMap.get(a);if(l.type==="mutable_atom"&&K(t)){let{parent:c}=t;s=Fe(t,l,c)}if(s.do(r.newValue)===null)Ge(t,l)}}};var We=(e,o,t)=>{switch(o.type){case"atom":case"mutable_atom":_o(o,t,e);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?E(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((c)=>c?.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
4
  ${m.trace}`:"No previous disposal trace was found.");return}let a=ho(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);We(e,l,r),Jo(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`
5
5
  `+o.split(`
6
6
  `)?.slice(1)?.join(`
@@ -13,4 +13,4 @@ ${T.trace}`:`No previous disposal trace for ${t} was found.`);return}let i=e.mol
13
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
14
  ${l} was most recently disposed
15
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])=>E(d));if(n)r.moleculeGraph.delete(i);r.moleculeGraph.set({upstreamMoleculeKey:s.stringKey,downstreamMoleculeKey:a.stringKey},{source:s.stringKey});let c={type:"molecule_transfer",key:a.key,from:m,to:[s.key]};if(K(r)&&r.transactionMeta.phase==="building")r.transactionMeta.update.updates.push(c);return t}function Le(e,o,t){switch(o){case"newValue":{zo(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(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,E(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 Po(e,o,t){switch(o){case"newValue":ne(t,e.key);break;case"oldValue":{let n=e.provenance.map(E);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 Do(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":Le(i,e,t);break;case"state_disposal":Qe(i,e,t);break;case"molecule_creation":Ho(i,e,t);break;case"molecule_disposal":Po(i,e,t);break;case"molecule_transfer":Do(i,e,t);break;case"transaction_update":Ee(e,i,t);break}}function Vo(e,o,t){if(_(e)&&o)e.transactionMeta.epoch.set(o,t)}function Xo(e,o,t){if(!_(e))return;let i=e.transactionMeta.actionContinuities.getRelatedKey(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||!K(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),_(n))Xo(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(K(n))n.transactionMeta.update.updates.push(t.transactionMeta.update);n.on.transactionApplying.next(null)};function Uo(e,o,t){if(!_(e))return;let{epoch:i,actionContinuities:r}=e.transactionMeta;if(r.set(o,t),!i.has(o))i.set(o,-1)}function qo(e){return{store:e}}function w(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 Q(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 V extends Map{source;deleted=new Set;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 Yo=(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 V(i.atoms),atomsThatAreDefault:new Set(i.atomsThatAreDefault),families:new V(i.families),joins:new V(i.joins),operation:{open:!1},readonlySelectors:new V(i.readonlySelectors),timelines:new V(i.timelines),timelineTopics:new W(i.timelineTopics.toJSON()),trackers:new Map,transactions:new V(i.transactions),selectorAtoms:new W(i.selectorAtoms.toJSON()),selectorGraph:new W(i.selectorGraph.toJSON(),{makeContentKey:(...m)=>m.sort().join(":")}),selectors:new V(i.selectors),valueMap:new V(i.valueMap),defaults:i.defaults,disposalTraces:e.disposalTraces.copy(),molecules:new V(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 V(i.miscResources)},a=Go(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)=>w(s,...m),set:(...m)=>{O(s,...m)},run:(m,c=$e())=>me(s,m,c),find:(m,c)=>S(s,m,c),json:(m)=>v(s,m),dispose:(...m)=>{re(s,...m)},env:()=>qo(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 Ze(e,o){let t={key:o.key,type:"transaction",run:(r,a)=>{let l=Yo(e,o.key,r,a);try{let s=y(e),{toolkit:m}=l.transactionMeta,c=o.do(m,...r);return No(c,s),c}catch(s){throw Ko(n),e.logger.warn("\uD83D\uDCA5","transaction",o.key,"caught:",s),s}},install:(r)=>Ze(r,o),subject:new g},n=y(e);n.transactions.set(t.key,t);let i=U(t);return e.on.transactionCreation.next(i),i}function Go(e,o){let t=_(e),n=t?e.transactionMeta.actionContinuities.getRelatedKey(o):void 0;return t&&n!==void 0?e.transactionMeta.epoch.get(n):void 0}function Re(e){return Ze(F.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 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 we(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 Ne(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)=>!t.includes("\uD83D\uDD0D"))];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},_(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(){if(!globalThis.ATOM_IO_IMPLICIT_STORE)globalThis.ATOM_IO_IMPLICIT_STORE=new Lo({name:"IMPLICIT_STORE",lifespan:"ephemeral"});return 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 Qo(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(_(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(K(r)&&r.on.transactionApplying.state===null)r.transactionMeta.update.updates.push({type:"state_creation",token:i})}return i}function Zo(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 U(a);return a}function S(e,o,t){let n=Zo(e,o,t);if(n)return n;let i=x(t),r=e.molecules.get(i);if(!r&&e.config.lifespan==="immortal"){let a=bo(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=Qo(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":eo(e,t);break;case"selector":case"readonly_selector":et(e,t);break}}var je=(e,o)=>y(e).atoms.has(o),Ct=(e,o)=>y(e).selectors.has(o),Ft=(e,o)=>y(e).readonlySelectors.has(o),ot=(e,o)=>je(e,o)||Ct(e,o)||Ft(e,o);var ze=(e,o)=>{return y(o).selectorGraph.getRelationEntries({downstreamSelectorKey:e}).filter(([n,{source:i}])=>i!==e).map(([n,{source:i}])=>i).filter((n)=>ot(o,n))};var oo=(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},tt=(e,o)=>{let t=e.key,n=ze(t,o),i=new Set;return n.flatMap((r)=>je(o,r)?r:oo(r,i,o))};var nt=(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=oo(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=y(t),r;if(n.length===2){let[s,m]=n;r=S(t,s,m)}else[r]=n;let a=R(t,r),l=Q(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}),nt(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=y(t),l=R(a,i);We(a,l,r)},find:(n,i)=>S(t,n,i),json:(n)=>v(t,n)});var xe=(e,o,t)=>{let n=y(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 D(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 p=m();e.logger.info("\u2728",c.type,c.key,"=",p);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 g,r=new Set,a=He(o.key,r,n),{find:l,get:s,json:m}=a,c={find:l,get:s,json:m},p=($=o.get,B=y(e))=>{let H=$(c);return D(B,o.key,H,i),r.clear(),H},T={...o,subject:i,install:($)=>Ke($,o,t),get:p,set:($)=>{let B=y(e),H=p(o.get,B),G=_e($)(H);if(e.logger.info("\uD83D\uDCDD","selector",o.key,"set (",H,"->",G,")"),D(B,o.key,G,i),ce(B,o.key),_(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 M={key:o.key,type:"selector"};if(t)M.family=t;return M};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 et(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"),K(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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(e),T=Ke(d,{key:p,get:o.get(s),set:o.set(s)},c);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:(...c)=>w(e,...c),find:(c,p)=>S(e,c,p),json:(c)=>v(e,c)})}});return e.families.set(o.key,l),n}function it(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 E=(e)=>JSON.parse(e),x=(e)=>JSON.stringify(e),Js=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];var rt=(e,o)=>{let t=y(e);if(t.operation.open)return t.operation.prev.get(o.key);return t.valueMap.get(o.key)};var io=(e,o)=>{let t=y(e);return tt(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=rt(t,o),s=Q(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=io(e,r),s=(p)=>{if(l)l.length=0,l.push(...io(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 to=(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 no=(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}:${K(t)?t.transactionMeta.update.key:"main"}:${e.key}`,i=w(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}:${K(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=to(t,{key:a,type:"timeline"},n,(c)=>{m(),O(t,e,(p)=>{if(c==="redo"&&i)p.do(i);else if(c==="undo"&&r)p.undo(r);return p})});return}}let l=t.on.operationClose.subscribe(n,()=>{l();let s=w(t,e),m=i===null?-1:s.getUpdateNumber(i),c=m-s.cacheUpdateNumber;if(i&&c===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=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."),U(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),Pe(e,o.key),D(n,o.key,l,r);let s=U(a);if(o.effects){let m=0,c=[];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)c.push(d);++m}a.cleanup=()=>{for(let p of c)p()}}if(new ae(s,e),!t)uo(s,o,e);return s}class ro{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=E(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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(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,c);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),it(e,l,o),new ro(l,e),n}var ao=(e,o)=>{let t=y(o),n=`${e.key}:JSON`;return t.families.get(n)};var v=(e,o)=>{if(o.family){let n=y(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 vo(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){if(n===void 0)return typeof o.default==="function"?o.default():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}return i}function D(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)=>{D(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 Mo=(e,o)=>{let t=o.valueMap.get(e.key);if(e.type==="mutable_atom"&&K(o)){let{parent:n}=o;t=Fe(o,e,n)}return t},Oo=(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)},Pe=(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."),U(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),Pe(e,o.key),D(n,o.key,l,r);let s=U(a);if(o.effects){let m=0,c=[];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)c.push(d);++m}a.cleanup=()=>{for(let p of c)p()}}return s}function xo(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 eo(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),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=K(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);eo(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(s)}else e.on.atomDisposal.next(o)}}class I extends Set{mode="record";subject=new g;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(e,o=0){super(e);if(e instanceof I)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 I(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 I(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)=>w(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 I,mutable:!0,fromJson:(f)=>I.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,j=k(r,u),X=A(j);for(let P of X){if(C.includes(P))continue;h(r,P,(q)=>{return q.delete(u),q})}h(j,(P)=>{return P.transaction((Te)=>{Te.clear();for(let q of C){let de=a(f,q),fo=de.has(u);if(this.relations.cardinality==="1:n"){let To=[];for(let ue of de){if(ue===u)continue;let Se=a(f,ue);if(Se.delete(q),Se.size===0)To.push(ue)}if(!fo&&de.size>0)de.clear();for(let ue of To){let Se=[q,ue].sort(),dt=`"${Se[0]}:${Se[1]}"`;this.molecules.delete(dt)}}if(!fo)de.add(u);Te.add(q)}return!0}),P})},c=(f,u,C)=>{let{set:k}=f;k(r,u,(A)=>{return A.transaction((h)=>{for(let j of C)h.add(j);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)=>{c(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 M=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)),j=t.molecules.get(x(C));if(!h)this.realm.allocate(e.key,u);if(!j)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}}),$=()=>L(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 L(t,{key:`${e.key}/multipleRelatedKeys`,get:(f)=>({get:u})=>{let C=ao(r,t);return u(C,f).members}},["join","keys"])},H=()=>L(t,{key:`${e.key}/singleRelatedEntry`,get:(f)=>({get:u})=>{let C=u(r,f);for(let k of C){let A=M.isAType?.(f)?f:void 0,h=A===void 0?f:void 0;A??=k,h??=k;let j=M.makeContentKey(A,h),X=u(b,j);return[k,X]}return null}},["join","entries"]),G=()=>L(t,{key:`${e.key}/multipleRelatedEntries`,get:(f)=>({get:u})=>{let C=ao(r,t);return u(C,f).members.map((A)=>{let h=M.isAType?.(f)?f:void 0,j=h===void 0?f:void 0;h??=A,j??=A;let X=M.makeContentKey(h,j),P=u(b,X);return[A,P]})}},["join","entries"]);switch(e.cardinality){case"1:1":{let f=$(),u=`${n}KeyOf${J(i)}`,C=`${i}KeyOf${J(n)}`,k={[u]:f,[C]:f},A;if(o){let h=H(),j=`${n}EntryOf${J(i)}`,X=`${i}EntryOf${J(n)}`,P={[j]:h,[X]:h};A=Object.assign(k,P)}else A=k;this.relations=M,this.states=A;break}case"1:n":{let f=$(),u=B(),C=`${n}KeyOf${J(i)}`,k=`${i}KeysOf${J(n)}`,A={[C]:f,[k]:u},h;if(o){let j=H(),X=G(),P=`${n}EntryOf${J(i)}`,Te=`${i}EntriesOf${J(n)}`,q={[P]:j,[Te]:X};h=Object.assign(A,q)}else h=A;this.relations=M,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(),j=`${n}EntriesOf${J(i)}`,X=`${i}EntriesOf${J(n)}`,P={[j]:h,[X]:h};A=Object.assign(k,P)}else A=k;this.relations=M,this.states=A}}}}function ye(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=ye(e,t),i=y(t);if(K(i)){let{toolkit:r}=i.transactionMeta;n.transact(r,({relations:a})=>{o(a)})}else o(n.relations)}function Be(e,o,t){let n=ye(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 go(e,o){return ye(e,o).core.relatedKeysAtoms}class at 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 De{key;type="continuity";globals=[];actions=[];perspectives=[];constructor(e){this.key=e}static existing=new at;static create(e,o){let t=new De(e),{type:n,globals:i,actions:r,perspectives:a}=o(t),l={type:n,key:e,globals:i,actions:r,perspectives:a};return De.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 Vc(e){let{key:o,config:t}=e,n=De.create(o,t),{actions:i}=n;for(let r of i)Uo(F.STORE,o,r.key);return Vo(F.STORE,o,-1),n}var qc=se({key:"usersInRoomIndex",mutable:!0,default:()=>new I,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),so=se({key:"roomIndex",default:()=>new I,mutable:!0,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),Rt={enteredAtEpoch:0},he=Oe({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(e)=>typeof e==="string",isBType:(e)=>typeof e==="string"},Rt),Yc=ve({key:"usersInMyRoomView",get:(e)=>({find:o})=>{let t=Ao(he);return[o(t,e)]}});import{spawn as Kt}from"child_process";class pe{emit;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";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 lo 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=E(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=E(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=E(this.incompleteLog);this.handleLog(a);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)a=E(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 g,this.out=new g,this.in.subscribe("socket",(o)=>{this.handleEvent(...o)})}dispose(){for(let e of this.disposalFunctions)e()}}class mo extends pe{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...e){this.process.stderr.write(x(e.map((o)=>o instanceof I?`{ ${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=E(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=E(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 co=oe({key:"roomArguments",default:["echo",["Hello World!"]]}),lt=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=Kt(r,a,{env:process.env}),c=(p)=>{if(p.toString()==="ALIVE")m.stdout.off("data",c),s(m)};m.stdout.on("data",c)});return new lo(l,e)}});var gy=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(so,(c)=>c.add(n));let s=t(lt,n);return e(s)}}),Cy=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}}),Fy=Re({key:"leaveRoom",do:(e,o,t)=>{Ce(he,(n)=>{n.delete({room:o,user:t})},e.env().store)}}),Ry=Re({key:"destroyRoom",do:(e,o)=>{Ce(he,(t)=>{t.delete({room:o})},e.env().store),e.set(so,(t)=>(t.delete(o),t))}});function yo(e,o){return o.map((t)=>{switch(t.type){case"transaction_update":{let n=yo(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 mt=oe({key:"sockets",default:null}),Oy=se({key:"socketsIndex",mutable:!0,default:()=>new I,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),By=se({key:"usersIndex",mutable:!0,default:()=>new I,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),po=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,c=w(e,m);a.push(m,c)}for(let s of o.perspectives){let{viewAtoms:m,resourceAtoms:c}=s,p=S(e,m,t),d=w(e,p);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"?v(e,T):T,M=w(e,b);a.push(b,M)}}let l=_(e)?e.transactionMeta.epoch.get(i)??null:null;n?.emit(`continuity-init:${i}`,l,a)}}function yt(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`,c=`${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(c);let p=performance.measure(s,m,c);e?.logger.info("\uD83D\uDE80","transaction",a,l,t,p.duration)}}function pt(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 ft(e,o,t,n){let i=o.key,r=[];for(let a of o.actions){let l=no(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 w(e,b).map(($)=>{return $.type==="mutable_atom"?"*"+$.key:$.key})})),c=yo(m,s.updates),p={...s,updates:c};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 Tt(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:c,newValue:p})=>{let d=c.map(($)=>$.key),T=p.map(($)=>$.key),b=c.filter(($)=>!T.includes($.key)),M=p.filter(($)=>!d.includes($.key)).flatMap(($)=>{let B=$.type==="mutable_atom"?v(e,$):$,H=w(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:M,concealed:b}),M.length>0)n?.emit(`reveal:${i}`,M);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(po,`socket::${i.id}`,o).userKeyOfSocket,l=w(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(po,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,mt,B);i=w(o,H);for(let f of c)i?.emit(`tx-new:${r}`,f)}),c=w(o,fe,l),p=[],d=Tt(o,n,l,i),T=ft(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 M=yt(o,n,l);i.off(`tx-run:${r}`,M),i.on(`tx-run:${r}`,M);let $=pt(o,n,l,c);return i?.on(`ack:${r}`,$),()=>{for(let B of p)B();i?.off(`ack:${r}`,$),i?.off(`get:${r}`,b),i?.off(`tx-run:${r}`,M)}}}var Je=new mo;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");
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 Q(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 V 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 Yo=(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 V(i.atoms),atomsThatAreDefault:new Set(i.atomsThatAreDefault),families:new V(i.families),joins:new V(i.joins),operation:{open:!1},readonlySelectors:new V(i.readonlySelectors),timelines:new V(i.timelines),timelineTopics:new W(i.timelineTopics.toJSON()),trackers:new Map,transactions:new V(i.transactions),selectorAtoms:new W(i.selectorAtoms.toJSON()),selectorGraph:new W(i.selectorGraph.toJSON(),{makeContentKey:(...m)=>m.sort().join(":")}),selectors:new V(i.selectors),valueMap:new V(i.valueMap),defaults:i.defaults,disposalTraces:e.disposalTraces.copy(),molecules:new V(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 V(i.miscResources)},a=Go(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)=>w(s,...m),set:(...m)=>{O(s,...m)},run:(m,c=$e())=>me(s,m,c),find:(m,c)=>S(s,m,c),json:(m)=>v(s,m),dispose:(...m)=>{re(s,...m)},env:()=>qo(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 Ze(e,o){let t={key:o.key,type:"transaction",run:(r,a)=>{let l=Yo(e,o.key,r,a);try{let s=y(e),{toolkit:m}=l.transactionMeta,c=o.do(m,...r);return No(c,s),c}catch(s){throw Ko(n),e.logger.warn("\uD83D\uDCA5","transaction",o.key,"caught:",s),s}},install:(r)=>Ze(r,o),subject:new g},n=y(e);n.transactions.set(t.key,t);let i=U(t);return e.on.transactionCreation.next(i),i}function Go(e,o){let t=_(e),n=t?e.transactionMeta.actionContinuities.getRelatedKey(o):void 0;return t&&n!==void 0?e.transactionMeta.epoch.get(n):void 0}function Re(e){return Ze(F.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 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 we(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 Ne(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)=>!t.includes("\uD83D\uDD0D"))];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},_(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(){if(!globalThis.ATOM_IO_IMPLICIT_STORE)globalThis.ATOM_IO_IMPLICIT_STORE=new Lo({name:"IMPLICIT_STORE",lifespan:"ephemeral"});return 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 Qo(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(_(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(K(r)&&r.on.transactionApplying.state===null)r.transactionMeta.update.updates.push({type:"state_creation",token:i})}return i}function Zo(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 U(a);return a}function S(e,o,t){let n=Zo(e,o,t);if(n)return n;let i=x(t),r=e.molecules.get(i);if(!r&&e.config.lifespan==="immortal"){let a=bo(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=Qo(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":eo(e,t);break;case"selector":case"readonly_selector":et(e,t);break}}var je=(e,o)=>y(e).atoms.has(o),Ct=(e,o)=>y(e).selectors.has(o),Ft=(e,o)=>y(e).readonlySelectors.has(o),ot=(e,o)=>je(e,o)||Ct(e,o)||Ft(e,o);var ze=(e,o)=>{return y(o).selectorGraph.getRelationEntries({downstreamSelectorKey:e}).filter(([n,{source:i}])=>i!==e).map(([n,{source:i}])=>i).filter((n)=>ot(o,n))};var oo=(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},tt=(e,o)=>{let t=e.key,n=ze(t,o),i=new Set;return n.flatMap((r)=>je(o,r)?r:oo(r,i,o))};var nt=(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=oo(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=y(t),r;if(n.length===2){let[s,m]=n;r=S(t,s,m)}else[r]=n;let a=R(t,r),l=Q(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}),nt(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=y(t),l=R(a,i);We(a,l,r)},find:(n,i)=>S(t,n,i),json:(n)=>v(t,n)});var xe=(e,o,t)=>{let n=y(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 D(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 p=m();e.logger.info("\u2728",c.type,c.key,"=",p);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 g,r=new Set,a=He(o.key,r,n),{find:l,get:s,json:m}=a,c={find:l,get:s,json:m},p=($=o.get,B=y(e))=>{let H=$(c);return D(B,o.key,H,i),r.clear(),H},T={...o,subject:i,install:($)=>Ke($,o,t),get:p,set:($)=>{let B=y(e),H=p(o.get,B),G=_e($)(H);if(e.logger.info("\uD83D\uDCDD","selector",o.key,"set (",H,"->",G,")"),D(B,o.key,G,i),ce(B,o.key),_(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 M={key:o.key,type:"selector"};if(t)M.family=t;return M};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 et(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"),K(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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(e),T=Ke(d,{key:p,get:o.get(s),set:o.set(s)},c);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:(...c)=>w(e,...c),find:(c,p)=>S(e,c,p),json:(c)=>v(e,c)})}});return e.families.set(o.key,l),n}function it(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 E=(e)=>JSON.parse(e),x=(e)=>JSON.stringify(e),Js=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];var rt=(e,o)=>{let t=y(e);if(t.operation.open)return t.operation.prev.get(o.key);return t.valueMap.get(o.key)};var io=(e,o)=>{let t=y(e);return tt(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=rt(t,o),s=Q(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=io(e,r),s=(p)=>{if(l)l.length=0,l.push(...io(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 to=(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 no=(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}:${K(t)?t.transactionMeta.update.key:"main"}:${e.key}`,i=w(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}:${K(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=to(t,{key:a,type:"timeline"},n,(c)=>{m(),O(t,e,(p)=>{if(c==="redo"&&i)p.do(i);else if(c==="undo"&&r)p.undo(r);return p})});return}}let l=t.on.operationClose.subscribe(n,()=>{l();let s=w(t,e),m=i===null?-1:s.getUpdateNumber(i),c=m-s.cacheUpdateNumber;if(i&&c===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=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."),U(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),Pe(e,o.key),D(n,o.key,l,r);let s=U(a);if(o.effects){let m=0,c=[];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)c.push(d);++m}a.cleanup=()=>{for(let p of c)p()}}if(new ae(s,e),!t)uo(s,o,e);return s}class ro{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=E(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 ${N(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),c={key:o.key,subKey:m},p=`${o.key}(${m})`,d=y(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,c);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),it(e,l,o),new ro(l,e),n}var ao=(e,o)=>{let t=y(o),n=`${e.key}:JSON`;return t.families.get(n)};var v=(e,o)=>{if(o.family){let n=y(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 vo(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){if(n===void 0)return typeof o.default==="function"?o.default():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}return i}function D(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)=>{D(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 Mo=(e,o)=>{let t=o.valueMap.get(e.key);if(e.type==="mutable_atom"&&K(o)){let{parent:n}=o;t=Fe(o,e,n)}return t},Oo=(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)},Pe=(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."),U(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),Pe(e,o.key),D(n,o.key,l,r);let s=U(a);if(o.effects){let m=0,c=[];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)c.push(d);++m}a.cleanup=()=>{for(let p of c)p()}}return s}function xo(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 eo(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),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=K(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);eo(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(s)}else e.on.atomDisposal.next(o)}}class I extends Set{mode="record";subject=new g;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(e,o=0){super(e);if(e instanceof I)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 I(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 I(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)=>w(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 I,mutable:!0,fromJson:(f)=>I.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,j=k(r,u),X=A(j);for(let P of X){if(C.includes(P))continue;h(r,P,(q)=>{return q.delete(u),q})}h(j,(P)=>{return P.transaction((Te)=>{Te.clear();for(let q of C){let de=a(f,q),fo=de.has(u);if(this.relations.cardinality==="1:n"){let To=[];for(let ue of de){if(ue===u)continue;let Se=a(f,ue);if(Se.delete(q),Se.size===0)To.push(ue)}if(!fo&&de.size>0)de.clear();for(let ue of To){let Se=[q,ue].sort(),dt=`"${Se[0]}:${Se[1]}"`;this.molecules.delete(dt)}}if(!fo)de.add(u);Te.add(q)}return!0}),P})},c=(f,u,C)=>{let{set:k}=f;k(r,u,(A)=>{return A.transaction((h)=>{for(let j of C)h.add(j);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)=>{c(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 M=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)),j=t.molecules.get(x(C));if(!h)this.realm.allocate(e.key,u);if(!j)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}}),$=()=>L(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 L(t,{key:`${e.key}/multipleRelatedKeys`,get:(f)=>({get:u})=>{let C=ao(r,t);return u(C,f).members}},["join","keys"])},H=()=>L(t,{key:`${e.key}/singleRelatedEntry`,get:(f)=>({get:u})=>{let C=u(r,f);for(let k of C){let A=M.isAType?.(f)?f:void 0,h=A===void 0?f:void 0;A??=k,h??=k;let j=M.makeContentKey(A,h),X=u(b,j);return[k,X]}return null}},["join","entries"]),G=()=>L(t,{key:`${e.key}/multipleRelatedEntries`,get:(f)=>({get:u})=>{let C=ao(r,t);return u(C,f).members.map((A)=>{let h=M.isAType?.(f)?f:void 0,j=h===void 0?f:void 0;h??=A,j??=A;let X=M.makeContentKey(h,j),P=u(b,X);return[A,P]})}},["join","entries"]);switch(e.cardinality){case"1:1":{let f=$(),u=`${n}KeyOf${J(i)}`,C=`${i}KeyOf${J(n)}`,k={[u]:f,[C]:f},A;if(o){let h=H(),j=`${n}EntryOf${J(i)}`,X=`${i}EntryOf${J(n)}`,P={[j]:h,[X]:h};A=Object.assign(k,P)}else A=k;this.relations=M,this.states=A;break}case"1:n":{let f=$(),u=B(),C=`${n}KeyOf${J(i)}`,k=`${i}KeysOf${J(n)}`,A={[C]:f,[k]:u},h;if(o){let j=H(),X=G(),P=`${n}EntryOf${J(i)}`,Te=`${i}EntriesOf${J(n)}`,q={[P]:j,[Te]:X};h=Object.assign(A,q)}else h=A;this.relations=M,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(),j=`${n}EntriesOf${J(i)}`,X=`${i}EntriesOf${J(n)}`,P={[j]:h,[X]:h};A=Object.assign(k,P)}else A=k;this.relations=M,this.states=A}}}}function ye(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=ye(e,t),i=y(t);if(K(i)){let{toolkit:r}=i.transactionMeta;n.transact(r,({relations:a})=>{o(a)})}else o(n.relations)}function Be(e,o,t){let n=ye(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 go(e,o){return ye(e,o).core.relatedKeysAtoms}class at 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 De{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(e){this.key=e}static existing=new at;static create(e,o){let t=new De(e),{type:n,globals:i,actions:r,perspectives:a}=o(t),l={type:n,key:e,globals:i,actions:r,perspectives:a};return De.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 Vc(e){let{key:o,config:t}=e,n=De.create(o,t),{actions:i}=n;for(let r of i)Uo(F.STORE,o,r.key);return Vo(F.STORE,o,-1),n}var qc=se({key:"usersInRoomIndex",mutable:!0,default:()=>new I,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),so=se({key:"roomIndex",default:()=>new I,mutable:!0,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),Rt={enteredAtEpoch:0},he=Oe({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(e)=>typeof e==="string",isBType:(e)=>typeof e==="string"},Rt),Yc=ve({key:"usersInMyRoomView",get:(e)=>({find:o})=>{let t=Ao(he);return[o(t,e)]}});import{spawn as Kt}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 lo 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=E(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=E(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=E(this.incompleteLog);this.handleLog(a);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)a=E(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 g,this.out=new g,this.in.subscribe("socket",(o)=>{this.handleEvent(...o)})}dispose(){for(let e of this.disposalFunctions)e()}}class mo extends pe{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...e){this.process.stderr.write(x(e.map((o)=>o instanceof I?`{ ${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=E(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=E(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 co=oe({key:"roomArguments",default:["echo",["Hello World!"]]}),lt=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=Kt(r,a,{env:process.env}),c=(p)=>{if(p.toString()==="ALIVE")m.stdout.off("data",c),s(m)};m.stdout.on("data",c)});return new lo(l,e)}});var gy=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(so,(c)=>c.add(n));let s=t(lt,n);return e(s)}}),Cy=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}}),Fy=Re({key:"leaveRoom",do:(e,o,t)=>{Ce(he,(n)=>{n.delete({room:o,user:t})},e.env().store)}}),Ry=Re({key:"destroyRoom",do:(e,o)=>{Ce(he,(t)=>{t.delete({room:o})},e.env().store),e.set(so,(t)=>(t.delete(o),t))}});function yo(e,o){return o.map((t)=>{switch(t.type){case"transaction_update":{let n=yo(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 mt=oe({key:"sockets",default:null}),Oy=se({key:"socketsIndex",mutable:!0,default:()=>new I,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),By=se({key:"usersIndex",mutable:!0,default:()=>new I,toJson:(e)=>e.toJSON(),fromJson:(e)=>I.fromJSON(e)}),po=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,c=w(e,m);a.push(m,c)}for(let s of o.perspectives){let{viewAtoms:m,resourceAtoms:c}=s,p=S(e,m,t),d=w(e,p);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"?v(e,T):T,M=w(e,b);a.push(b,M)}}let l=_(e)?e.transactionMeta.epoch.get(i)??null:null;n?.emit(`continuity-init:${i}`,l,a)}}function yt(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`,c=`${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(c);let p=performance.measure(s,m,c);e?.logger.info("\uD83D\uDE80","transaction",a,l,t,p.duration)}}function pt(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 ft(e,o,t,n){let i=o.key,r=[];for(let a of o.actions){let l=no(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 w(e,b).map(($)=>{return $.type==="mutable_atom"?"*"+$.key:$.key})})),c=yo(m,s.updates),p={...s,updates:c};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 Tt(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:c,newValue:p})=>{let d=c.map(($)=>$.key),T=p.map(($)=>$.key),b=c.filter(($)=>!T.includes($.key)),M=p.filter(($)=>!d.includes($.key)).flatMap(($)=>{let B=$.type==="mutable_atom"?v(e,$):$,H=w(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:M,concealed:b}),M.length>0)n?.emit(`reveal:${i}`,M);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(po,`socket::${i.id}`,o).userKeyOfSocket,l=w(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(po,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,mt,B);i=w(o,H);for(let f of c)i?.emit(`tx-new:${r}`,f)}),c=w(o,fe,l),p=[],d=Tt(o,n,l,i),T=ft(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 M=yt(o,n,l);i.off(`tx-run:${r}`,M),i.on(`tx-run:${r}`,M);let $=pt(o,n,l,c);return i?.on(`ack:${r}`,$),()=>{for(let B of p)B();i?.off(`ack:${r}`,$),i?.off(`get:${r}`,b),i?.off(`tx-run:${r}`,M)}}}var Je=new mo;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");