tempest.games 0.2.28 → 0.2.29

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,17 +1,17 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var AQ=Object.create;var{getPrototypeOf:wQ,defineProperty:$0,getOwnPropertyNames:RQ}=Object;var xQ=Object.prototype.hasOwnProperty;var VZ=(Q,Z,Y)=>{Y=Q!=null?AQ(wQ(Q)):{};let G=Z||!Q||!Q.__esModule?$0(Y,"default",{value:Q,enumerable:!0}):Y;for(let _ of RQ(Q))if(!xQ.call(G,_))$0(G,_,{get:()=>Q[_],enumerable:!0});return G};var $Z=(Q,Z)=>()=>(Z||Q((Z={exports:{}}).exports,Z),Z.exports);var FZ=(Q,Z)=>{for(var Y in Z)$0(Q,Y,{get:Z[Y],enumerable:!0,configurable:!0,set:(G)=>Z[Y]=()=>G})};var hZ=(Q,Z)=>()=>(Q&&(Z=Q(Q=0)),Z);var IZ=import.meta.require;var r0=(Q,Z,Y=w.STORE)=>{return F0(Y,{key:`${Q.key}:JSON`,get:({get:G})=>Z.toJson(G(Q)),set:({set:G},_)=>{G(Q,Z.fromJson(_))}})};function a0(Q,Z,Y){return L0(Q,{key:`${Z.key}:JSON`,get:(_)=>({get:X})=>{let W=X(Z,_);return Y.toJson(W)},set:(_)=>({set:X},W)=>{X(Z,_,Y.fromJson(W))}},["mutable","json"])}var v=(Q)=>JSON.parse(Q),h=(Q)=>JSON.stringify(Q),wZ=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];function r(Q){return XQ(w.STORE,Q)}function _0(Q){return QQ(w.STORE,Q)}function TZ(...Q){if(Q.length===2)return k(w.STORE,...Q);return k(w.STORE,...Q)}function M0(Q,Z,Y=w.STORE){return Y.joins.set(Q.key,new A0(Q,Z,Y)),{key:Q.key,type:"join",a:Q.between[0],b:Q.between[1],cardinality:Q.cardinality}}function s0(Q){return qQ(Q,w.STORE)}var h0=(Q)=>(Z,Y,G,_,...X)=>{console[Q](`${Z} ${Y} "${G}" ${_}`,...X)},TQ={error:h0("error"),info:h0("info"),warn:h0("warn")},o0=class{logLevel;filter;logger;constructor(Q,Z,Y=TQ){this.logLevel=Q,this.filter=Z,this.logger=Y}error=(...Q)=>{let Z=this.filter?.(...Q)??!0;if(this.logLevel!==null){if(Z===!0)this.logger.error(...Q);else if(Z!==!1)this.logger.error(...Z)}};info=(...Q)=>{let Z=this.filter?.(...Q)??!0;if(this.logLevel==="info"){if(Z===!0)this.logger.info(...Q);else if(Z!==!1)this.logger.info(...Z)}};warn=(...Q)=>{let Z=this.filter?.(...Q)??!0;if(this.logLevel!=="error"&&this.logLevel!==null){if(Z===!0)this.logger.warn(...Q);else if(Z!==!1)this.logger.warn(...Z)}}};var vQ=class{store;constructor(Q=w.STORE){this.store=Q,YQ("root",Q)}allocate(Q,Z,Y){return s(this.store,Q,Z,Y)}fuse(Q,Z,Y){return GQ(this.store,Q,Z,Y)}deallocate(Q){o(this.store,Q)}claim(Q,Z,Y){return W0(this.store,Q,Z,Y)}},t0=class{store;realm;constructor(Q=w.STORE){this.store=Q,this.realm=new vQ(Q)}allocate(Q,Z,Y){s(this.store,Q,Z,Y)}deallocate(Q){o(this.store,Q)}claim(Q,Z,Y){W0(this.store,Q,Z,Y)}};function J0(Q){return ZQ(w.STORE,Q)}function X0(Q){return U0(w.STORE,Q)}var f=class Q extends Set{mode="record";subject=new I;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(Z,Y=0){super(Z);if(Z instanceof Q)this.parent=Z,this.cacheUpdateNumber=Z.cacheUpdateNumber;if(Y)this.cacheLimit=Y,this.cache=new Array(Y),this.subscribe("auto cache",(G)=>{this.cacheIdx++,this.cacheIdx%=this.cacheLimit,this.cache[this.cacheIdx]=G})}toJSON(){return{members:[...this],cache:this.cache,cacheLimit:this.cacheLimit,cacheIdx:this.cacheIdx,cacheUpdateNumber:this.cacheUpdateNumber}}static fromJSON(Z){let Y=new Q(Z.members,Z.cacheLimit);return Y.cache=Z.cache,Y.cacheIdx=Z.cacheIdx,Y.cacheUpdateNumber=Z.cacheUpdateNumber,Y}add(Z){let Y=super.add(Z);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`add:${h(Z)}`);return Y}clear(){let Z=this.mode==="record"?[...this]:null;if(super.clear(),Z)this.cacheUpdateNumber++,this.emit(`clear:${JSON.stringify(Z)}`)}delete(Z){let Y=super.delete(Z);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`del:${h(Z)}`);return Y}parent=null;child=null;transactionUpdates=null;transaction(Z){this.mode="transaction",this.transactionUpdates=[],this.child=new Q(this);let Y=this.child._subscribe("transaction",(G)=>{this.transactionUpdates?.push(G)});try{if(Z(this.child)){for(let _ of this.transactionUpdates)this.doStep(_);this.cacheUpdateNumber++,this.emit(`tx:${this.transactionUpdates.join(";")}`)}}catch(G){throw console.warn("Did not apply transaction to SetRTX; this error was thrown:",G),G}finally{Y(),this.child=null,this.transactionUpdates=null,this.mode="record"}}_subscribe(Z,Y){return this.subject.subscribe(Z,Y)}subscribe(Z,Y){return this.subject.subscribe(Z,(G)=>{Y(`${this.cacheUpdateNumber}=${G}`)})}emit(Z){this.subject.next(Z)}doStep(Z){let Y=Z.indexOf(":"),G=Z.substring(0,Y),_=Z.substring(Y+1);switch(G){case"add":this.add(JSON.parse(_));break;case"clear":this.clear();break;case"del":this.delete(JSON.parse(_));break;case"tx":for(let X of _.split(";"))this.doStep(X)}}getUpdateNumber(Z){let Y=Z.indexOf("=");return Number(Z.substring(0,Y))}do(Z){let Y=Z.indexOf("="),G=Number(Z.substring(0,Y)),_=G-this.cacheUpdateNumber;if(_>0){if(_===1){this.mode="playback";let W=Z.substring(Y+1);return this.doStep(W),this.mode="record",this.cacheUpdateNumber=G,null}return this.cacheUpdateNumber+1}if(Math.abs(_)<this.cacheLimit){let W=this.cacheIdx+_;if(this.cache[W]===Z)return null;this.mode="playback";let H=!1;while(!H){this.cacheIdx%=this.cacheLimit;let z=this.cache[this.cacheIdx];if(this.cacheIdx--,!z)return"OUT_OF_RANGE";this.undo(z),H=this.cacheIdx===W-1}let N=Z.substring(Y+1);return this.doStep(N),this.mode="record",this.cacheUpdateNumber=G,null}return"OUT_OF_RANGE"}undoStep(Z){let Y=Z.indexOf(":"),G=Z.substring(0,Y),_=Z.substring(Y+1);switch(G){case"add":this.delete(JSON.parse(_));break;case"del":this.add(JSON.parse(_));break;case"clear":{let X=JSON.parse(_);for(let W of X)this.add(W);break}case"tx":{let X=_.split(";");for(let W=X.length-1;W>=0;W--)this.undoStep(X[W])}}}undo(Z){let Y=Z.indexOf("=");if(Number(Z.substring(0,Y))===this.cacheUpdateNumber){this.mode="playback";let _=Z.substring(Y+1);return this.undoStep(_),this.mode="record",this.cacheUpdateNumber--,null}return this.cacheUpdateNumber}};function e0(Q=Math.random){return Q().toString(36).slice(2)}var w0=class extends Promise{fate;resolve;reject;done=!1;constructor(Q){let Z,Y;super((G,_)=>{Z=G,Y=_});this.resolve=Z,this.reject=Y,this.use(Q instanceof Promise?Q:new Promise(Q))}pass(Q,Z){if(Q===this.fate)this.resolve(Z),this.done=!0}fail(Q,Z){if(Q===this.fate)this.reject(Z),this.done=!0}use(Q){if(Q instanceof Promise){let Z=Q;this.fate=Z,Z.then((Y)=>{this.pass(Z,Y)},(Y)=>{this.fail(Z,Y)})}else this.resolve(Q),this.fate=void 0}};function O(Q){while(Q.child!==null)Q=Q.child;return Q}var fQ=class Q{_buffer;_index=0;constructor(Z){let Y;if(typeof Z==="number")Y=Z;else Y=Z.length;this._buffer=Array.from({length:Y})}get buffer(){return this._buffer}get index(){return this._index}add(Z){this._buffer[this._index]=Z,this._index=(this._index+1)%this._buffer.length}copy(){let Z=new Q([...this._buffer]);return Z._index=this._index,Z}},bQ={atom_family:"atom",molecule_family:"molecule",mutable_atom_family:"mutable_atom",readonly_held_selector_family:"readonly_held_selector",readonly_pure_selector_family:"readonly_pure_selector",writable_held_selector_family:"writable_held_selector",writable_pure_selector_family:"writable_pure_selector"};function gQ(Q,Z){let Y=h(Z),G=`${Q.key}(${Y})`,_=bQ[Q.type],X={key:G,type:_};return Object.assign(X,{family:{key:Q.key,subKey:Y}}),Object.assign(X,{counterfeit:!0}),X}function e(Q){let Z={key:Q.key,type:Q.type};if("family"in Q)Z.family=Q.family;return Z}var S=class{a;b;cardinality;relations=new Map;contents=new Map;isAType;isBType;isContent;makeContentKey=(Q,Z)=>`${Q}:${Z}`;warn;getRelatedKeys(Q){return this.relations.get(Q)}addRelation(Q,Z){let Y=this.relations.get(Q),G=this.relations.get(Z);if(Y)Y.add(Z);else Y=new Set([Z]),this.relations.set(Q,Y);if(G)G.add(Q);else G=new Set([Q]),this.relations.set(Z,G)}deleteRelation(Q,Z){let Y=this.relations.get(Q);if(Y){if(Y.delete(Z),Y.size===0)this.relations.delete(Q);let G=this.relations.get(Z);if(G){if(G.delete(Q),G.size===0)this.relations.delete(Z)}}}replaceRelationsUnsafely(Q,Z){this.relations.set(Q,new Set(Z));for(let Y of Z){let G=new Set().add(Q);this.relations.set(Y,G)}}replaceRelationsSafely(Q,Z){let Y=this.relations.get(Q),G=this.isAType?.(Q)?Q:void 0,_=G===void 0?Q:void 0;if(Y)for(let X of Y){G??=X,_??=X;let W=this.relations.get(X);if(W){if(W.size===1)this.relations.delete(X);else W.delete(Q);this.contents.delete(this.makeContentKey(G,_))}}this.relations.set(Q,new Set(Z));for(let X of Z){let W=this.relations.get(X);if(W)W.add(Q);else W=new Set().add(Q),this.relations.set(X,W)}}getContentInternal(Q){return this.contents.get(Q)}setContent(Q,Z){this.contents.set(Q,Z)}deleteContent(Q){this.contents.delete(Q)}constructor(Q,Z){if(this.a=Q.between[0],this.b=Q.between[1],this.cardinality=Q.cardinality,!Z?.externalStore)this.relations=new Map(Q.relations?.map(([Y,G])=>[Y,new Set(G)])),this.contents=new Map(Q.contents);if(this.isAType=Z?.isAType??null,this.isBType=Z?.isBType??null,this.isContent=Z?.isContent??null,Z?.makeContentKey)this.makeContentKey=Z.makeContentKey;if(Z?.externalStore){let Y=Z.externalStore;if(this.has=(G,_)=>Y.has(G,_),this.addRelation=(G,_)=>{Y.addRelation(G,_)},this.deleteRelation=(G,_)=>{Y.deleteRelation(G,_)},this.replaceRelationsSafely=(G,_)=>{Y.replaceRelationsSafely(G,_)},this.replaceRelationsUnsafely=(G,_)=>{Y.replaceRelationsUnsafely(G,_)},this.getRelatedKeys=(G)=>Y.getRelatedKeys(G),Y.getContent)this.getContentInternal=(G)=>{return Y.getContent(G)},this.setContent=(G,_)=>{Y.setContent(G,_)},this.deleteContent=(G)=>{Y.deleteContent(G)};for(let[G,_]of Q.relations??[]){let X=this.isAType?.(G)?G:void 0,W=X===void 0?G:void 0;for(let q of _)X??=q,W??=q,this.addRelation(X,W)}for(let[G,_]of Q.contents??[])this.setContent(G,_)}if(Z?.warn)this.warn=Z.warn}toJSON(){return{between:[this.a,this.b],cardinality:this.cardinality,relations:[...this.relations.entries()].map(([Q,Z])=>[Q,[...Z]]),contents:[...this.contents.entries()]}}set(...Q){let Z,Y,G;switch(Q.length){case 1:{let _=Q[0];Z=_[this.a],Y=_[this.b],G=void 0;break}case 2:{let _=Q[0];if(typeof _==="string")[Z,Y]=Q;else Z=_[this.a],Y=_[this.b],G=Q[1];break}default:{Z=Q[0],Y=Q[1],G=Q[2];break}}switch(this.cardinality){case"1:1":{let _=this.getRelatedKey(Z);if(_&&_!==Y)this.delete(Z,_)}case"1:n":{let _=this.getRelatedKey(Y);if(_&&_!==Z)this.delete(_,Y)}break;case"n:n":}if(G){let _=this.makeContentKey(Z,Y);this.setContent(_,G)}return this.addRelation(Z,Y),this}delete(Q,Z){Z=typeof Z==="string"?Z:Q[this.b];let Y=typeof Q==="string"?Q:Q[this.a];if(Y===void 0&&typeof Z==="string"){let G=this.getRelatedKeys(Z);if(G)for(let _ of G)this.delete(_,Z)}if(typeof Y==="string"&&Z===void 0){let G=this.getRelatedKeys(Y);if(G)for(let _ of G)this.delete(Y,_)}if(typeof Y==="string"&&typeof Z==="string"){this.deleteRelation(Y,Z);let G=this.makeContentKey(Y,Z);this.deleteContent(G)}return this}getRelatedKey(Q){let Z=this.getRelatedKeys(Q);if(Z){if(Z.size>1)this.warn?.(`${Z.size} related keys were found for key "${Q}": (${[...Z].map((G)=>`"${G}"`).join(", ")}). Only one related key was expected.`);let Y;for(let G of Z){Y=G;break}return Y}}replaceRelations(Q,Z,Y){let G=!Array.isArray(Z),_=G?Object.keys(Z):Z;if(Y?.reckless)this.replaceRelationsUnsafely(Q,_);else this.replaceRelationsSafely(Q,_);if(G)for(let X of _){let W=this.makeContentKey(Q,X),q=Z[X];this.setContent(W,q)}return this}getContent(Q,Z){let Y=this.makeContentKey(Q,Z);return this.getContentInternal(Y)}getRelationEntries(Q){let Z=Q[this.a],Y=Q[this.b];if(Z!==void 0&&Y===void 0){let G=this.getRelatedKeys(Z);if(G)return[...G].map((_)=>{return[_,this.getContent(Z,_)]})}if(Z===void 0&&Y!==void 0){let G=this.getRelatedKeys(Y);if(G)return[...G].map((_)=>{return[_,this.getContent(_,Y)]})}return[]}has(Q,Z){if(Z)return this.getRelatedKeys(Q)?.has(Z)??!1;return this.relations.has(Q)}},I=class{Subscriber;subscribers=new Map;subscribe(Q,Z){return this.subscribers.set(Q,Z),()=>{this.unsubscribe(Q)}}unsubscribe(Q){this.subscribers.delete(Q)}next(Q){let Z=this.subscribers.values();for(let Y of Z)Y(Q)}},dQ=class extends I{state;constructor(Q){super();this.state=Q}next(Q){this.state=Q,super.next(Q)}};function y(Q){return"epoch"in Q.transactionMeta}function x(Q){return"phase"in Q.transactionMeta}var mQ=(Q)=>{let Z=O(Q);if(!x(Z)){Q.logger.warn("\uD83D\uDC1E","transaction","???","abortTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}Q.logger.info("\uD83E\uDE82","transaction",Z.transactionMeta.update.key,"Aborting transaction"),Z.parent.child=null};function U(Q){return Q[0].toUpperCase()+Q.slice(1)}function i(Q){return Q.type.split("_").map(U).join(" ")}var v0=class extends Error{constructor(Q,Z){super(`${i(Q)} ${h(Q.key)} not found in store "${Z.config.name}".`)}};function I0(Q,Z,Y){return(...G)=>{let _=A(Q,Z);if(_)return _.run(G,Y);throw new v0(Z,Q)}}var S0=(Q)=>(Z)=>Q instanceof Function?Q(Z):Q,O0=(Q,Z)=>{if(Q.valueMap.has(Z.key))return Q.logger.info("\uD83D\uDCD6",Z.type,Z.key,"reading cached value"),MZ(Z,Q);switch(Z.type){case"readonly_held_selector":case"readonly_pure_selector":case"writable_held_selector":case"writable_pure_selector":return Q.logger.info("\uD83E\uDDEE",Z.type,Z.key,"computing value"),Z.get();case"atom":case"mutable_atom":{let Y=Z.default,G;if(Y instanceof Function)G=Y();else G=Y;return Q.logger.info("\uD83D\uDC81","atom",Z.key,"could not find cached value; using default",G),G}}},C0=(Q,Z)=>{if(Q.operation.open){let Y=performance.now();return Q.logger.info("\u2757",Z.type,Z.key,`deferring setState at T-${Y} until setState for "${Q.operation.token.key}" is done`),Y}Q.operation={open:!0,done:new Set,prev:new Map,time:Date.now(),token:Z},Q.logger.info("\u2B55",Z.type,Z.key,`operation start in store "${Q.config.name}"${!x(Q)?"":` ${Q.transactionMeta.phase} "${Q.transactionMeta.update.key}"`}`)},P0=(Q)=>{if(Q.operation.open)Q.logger.info("\uD83D\uDD34",Q.operation.token.type,Q.operation.token.key,`operation done in store "${Q.config.name}"`);Q.operation={open:!1},Q.on.operationClose.next(Q.operation)},DQ=(Q,Z)=>{if(!Q.operation.open)return Q.logger.error("\uD83D\uDC1E","unknown",Z,"isDone called outside of an operation. This is probably a bug in AtomIO."),!0;return Q.operation.done.has(Z)},N0=(Q,Z)=>{if(!Q.operation.open){Q.logger.error("\uD83D\uDC1E","unknown",Z,"markDone called outside of an operation. This is probably a bug in AtomIO.");return}Q.operation.done.add(Z)},kQ=(Q,Z,Y)=>{switch(Z.type){case"mutable_atom":Q.logger.info("\uD83D\uDCE2",Z.type,Z.key,"is now (",Y.newValue,") subscribers:",Z.subject.subscribers);break;case"atom":case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":Q.logger.info("\uD83D\uDCE2",Z.type,Z.key,"went (",Y.oldValue,"->",Y.newValue,") subscribers:",Z.subject.subscribers)}Z.subject.next(Y)};function R0(Q,Z){let Y=O(Q),G=Y.selectorAtoms.getRelatedKeys(Z.key);if(Y.logger.info("\uD83E\uDDF9",Z.type,Z.key,G?`evicting ${G.size} states downstream:`:"no downstream states",G??"to evict"),G){if(Y.operation.open)Y.logger.info("\uD83E\uDDF9",Z.type,Z.key,`[ ${[...Y.operation.done].join(", ")} ] already done`);for(let _ of G){if(DQ(Y,_))continue;$Q(_,Y),N0(Y,_)}}}function cQ(Q,Z){let Y=O(Q),G=Y.selectorGraph.getRelationEntries({upstreamSelectorKey:Z.key}).filter(([_,{source:X}])=>X===Z.key);for(let[_]of G){if(DQ(Y,_))continue;$Q(_,Y),N0(Y,_)}}var LQ=(Q,Z,Y)=>{let G=O0(Q,Z),_=G;if(Z.type==="mutable_atom"&&x(Q)){let{parent:W}=Q;_=T0(Q,Z,W)}_=S0(Y)(_),Q.logger.info("\uD83D\uDCDD","atom",Z.key,"set to",_),_=u(Q,Z.key,_,Z.subject),N0(Q,Z.key),R0(Q,Z);let X={oldValue:G,newValue:_};if(!x(Q)){kQ(Q,Z,X);return}if(Q.on.transactionApplying.state===null){let{key:W}=Z;if(LZ(X.newValue))return;let q={type:"atom_update",key:W,...X};if(Z.family)q.family=Z.family;Q.transactionMeta.update.updates.push(q),Q.logger.info("\uD83D\uDCC1","atom",W,"stowed (",X.oldValue,"->",X.newValue,")")}else if(Z.key.startsWith("*")){let W=Z.key.slice(1),q=Q.atoms.get(W),H=Q.valueMap.get(W);if(q.type==="mutable_atom"&&x(Q)){let{parent:z}=Q;H=T0(Q,q,z)}if(H.do(X.newValue)===null)R0(Q,q)}};function HQ(Q,Z){let Y=Z.default;if(Y instanceof Function)Y=Y();LQ(Q,Z,Y)}function uQ(Q,Z){switch(Z.type){case"atom":case"mutable_atom":HQ(Q,Z);break;case"writable_pure_selector":case"writable_held_selector":{let Y=JQ(Z,Q);for(let G of Y)HQ(Q,G)}break}}function B0(Q,Z,Y){let G={key:Z.key,type:"atom_family"},_=Q.families.get(Z.key);if(_)Q.logger.error("\u2757","atom_family",Z.key,`Overwriting an existing ${i(_)} "${_.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let X=new I,q=Object.assign((H)=>{let N=h(H),z={key:Z.key,subKey:N},L=`${Z.key}(${N})`,M=O(Q),C=Z.default,E={key:L,default:C instanceof Function?()=>C(H):C};if(Z.effects)E.effects=Z.effects(H);let B=V0(M,E,z);return X.next({type:"state_creation",token:B}),B},G,{subject:X,install:(H)=>B0(H,Z),internalRoles:Y});return Q.families.set(Z.key,q),Q.defaults.set(Z.key,Z.default),G}function QQ(Q,Z){if("mutable"in Z)return c0(Q,Z);return B0(Q,Z)}var K0=(Q,Z)=>O(Q).atoms.has(Z),pQ=(Q,Z)=>O(Q).writableSelectors.has(Z),yQ=(Q,Z)=>O(Q).readonlySelectors.has(Z),lQ=(Q,Z)=>K0(Q,Z)||pQ(Q,Z)||yQ(Q,Z),x0=(Q,Z)=>{return O(Q).selectorGraph.getRelationEntries({downstreamSelectorKey:Z}).filter(([G,{source:_}])=>_!==Z).map(([G,{source:_}])=>_).filter((G)=>lQ(Q,G))},MQ=(Q,Z,Y)=>{let G=[],_=x0(Q,Z);while(_.length>0){let X=_.shift();if(Y.has(X))continue;if(Y.add(X),!K0(Q,X))_.push(...x0(Q,X));else if(!G.includes(X))G.push(X)}return G},JQ=(Q,Z)=>{let Y=Q.key,G=x0(Z,Y),_=new Set;return G.flatMap((X)=>K0(Z,X)?X:MQ(Z,X,_)).map((X)=>Z.atoms.get(X))},iQ=(Q,Z,Y,G,_)=>{let X=O(Q),{type:W,key:q}=G;if(W==="atom"||W==="mutable_atom")X.selectorAtoms.set({selectorKey:Y,atomKey:q}),Q.logger.info("\uD83D\uDD0D",Z,Y,`discovers root atom "${q}"`);else{let H=MQ(Q,q,_);Q.logger.info("\uD83D\uDD0D",Z,Y,`discovers root atoms: [ ${H.map((N)=>`"${N}"`).join(", ")} ]`);for(let N of H)X.selectorAtoms=X.selectorAtoms.set({selectorKey:Y,atomKey:N})}_.add(q)},j0=(Q,Z,Y,G)=>({get:(..._)=>{let X=O(Q),W;if(_.length===2){let[z,L]=_;W=$(Q,z,L)}else[W]=_;let q=A(Q,W),H=O0(Q,q),N=W.key;return Q.logger.info("\uD83D\uDD0C",Z,Y,`registers dependency ( "${N}" =`,H,")"),X.selectorGraph.set({upstreamSelectorKey:N,downstreamSelectorKey:Y},{source:W.key}),iQ(Q,Z,Y,W,G),H},set:(..._)=>{let X,W;if(_.length===2)X=_[0],W=_[1];else{let N=_[0],z=_[1];W=_[2],X=$(Q,N,z)}let q=O(Q),H=A(q,X);OQ(q,H,W)},find:(..._)=>$(Q,..._),json:(_)=>n(Q,_)}),f0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,{key:W,const:q}=Z,H="readonly_held_selector",{get:N,find:z,json:L}=j0(G,"readonly_held_selector",W,X),C={...Z,type:"readonly_held_selector",subject:_,install:(B)=>f0(B,Z,Y),get:()=>{return Z.get({get:N,find:z,json:L},q),u(O(Q),W,q,_),X.clear(),q},...Y&&{family:Y}};G.readonlySelectors.set(W,C),Q.logger.info("\u2728","readonly_held_selector",W,"=",q);let E={key:W,type:"readonly_held_selector"};if(Y)E.family=Y;return E},b0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,W=Z.key,q="readonly_pure_selector",{get:H,find:N,json:z}=j0(G,"readonly_pure_selector",W,X),L=()=>{let B=Z.get({get:H,find:N,json:z});return u(O(Q),W,B,_),X.clear(),B},M={...Z,type:"readonly_pure_selector",subject:_,install:(B)=>b0(B,Z,Y),get:L,...Y&&{family:Y}};G.readonlySelectors.set(W,M);let C=L();Q.logger.info("\u2728","readonly_pure_selector",W,"=",C);let E={key:W,type:"readonly_pure_selector"};if(Y)E.family=Y;return E},g0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,{key:W,const:q}=Z,H="writable_held_selector",N=j0(G,"writable_held_selector",W,X),{find:z,get:L,json:M}=N,C={find:z,get:L,json:M},E=(T=Z.get,D=O(Q))=>{return T(C,q),u(D,W,q,_),X.clear(),q},K={...Z,type:"writable_held_selector",subject:_,install:(T)=>g0(T,Z,Y),get:E,set:(T)=>{let D=O(Q),J=E(Z.get,D),j=S0(T)(J);if(Q.logger.info("\uD83D\uDCDD","writable_held_selector",W,"set (",J,"->",j,")"),u(D,W,j,_),N0(D,W),y(D))_.next({newValue:j,oldValue:J});Z.set(N,j)},...Y&&{family:Y}};G.writableSelectors.set(W,K);let l=E();Q.logger.info("\u2728","writable_held_selector",W,"=",l);let d={key:W,type:"writable_held_selector"};if(Y)d.family=Y;return d},d0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,W=Z.key,q="writable_pure_selector",H=j0(G,"writable_pure_selector",W,X),{find:N,get:z,json:L}=H,M={find:N,get:z,json:L},C=(d=Z.get,T=O(Q))=>{let D=d(M);return u(T,W,D,_),X.clear(),D},B={...Z,type:"writable_pure_selector",subject:_,install:(d)=>d0(d,Z,Y),get:C,set:(d)=>{let T=O(Q),D=C(Z.get,T),J=S0(d)(D);if(Q.logger.info("\uD83D\uDCDD","writable_pure_selector",W,"set (",D,"->",J,")"),u(T,Z.key,J,_),N0(T,Z.key),y(T))_.next({newValue:J,oldValue:D});Z.set(H,J)},...Y&&{family:Y}};G.writableSelectors.set(W,B);let K=C();Q.logger.info("\u2728",B.type,B.key,"=",K);let l={key:W,type:"writable_pure_selector"};if(Y)l.family=Y;return l};function F0(Q,Z){let Y="set"in Z,G="const"in Z;if(G&&Y){let X=g0(Q,Z,void 0);return Q.on.selectorCreation.next(X),X}if(G){let X=f0(Q,Z,void 0);return Q.on.selectorCreation.next(X),X}if(Y){let X=d0(Q,Z,void 0);return Q.on.selectorCreation.next(X),X}let _=b0(Q,Z,void 0);return Q.on.selectorCreation.next(_),_}function nQ(Q,Z){let Y=O(Q),{key:G,type:_}=Z,X=A(Y,Z);if(!X.family)Q.logger.error("\u274C",_,G,"Standalone selectors cannot be disposed.");else{if(Y.molecules.get(X.family.subKey))Y.moleculeData.delete(X.family.subKey,X.family.key);let q;switch(Z.type){case"writable_held_selector":Y.writableSelectors.delete(G),q={key:X.family.key,type:"writable_held_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break;case"writable_pure_selector":Y.writableSelectors.delete(G),q={key:X.family.key,type:"writable_pure_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break;case"readonly_held_selector":Y.readonlySelectors.delete(G),q={key:X.family.key,type:"readonly_held_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break;case"readonly_pure_selector":Y.readonlySelectors.delete(G),q={key:X.family.key,type:"readonly_pure_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break}if(Y.valueMap.delete(G),Y.selectorAtoms.delete(G),Y.selectorGraph.delete(G),Q.logger.info("\uD83D\uDD25",Z.type,G,"deleted"),x(Y)&&Y.transactionMeta.phase==="building")Y.transactionMeta.update.updates.push({type:"state_disposal",subType:"selector",token:Z});else Q.on.selectorDisposal.next(Z)}}function t(Q,Z,Y){let G=Z.key,_="readonly_pure_selector_family",X={key:G,type:"readonly_pure_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","readonly_pure_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=b0(E,{key:C,get:Z.get(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>t(z,Z),default:(z)=>{return Z.get(z)({get:(...M)=>k(Q,...M),find:(...M)=>$(Q,...M),json:(M)=>n(Q,M)})}});return Q.families.set(G,N),X}function EQ(Q,Z,Y){let G=Z.key,_="readonly_held_selector_family",X={key:G,type:"readonly_held_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","readonly_held_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=f0(E,{key:C,const:Z.const(z),get:Z.get(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>EQ(z,Z),default:Z.const});return Q.families.set(G,N),X}function CQ(Q,Z,Y){let G=Z.key,_="writable_held_selector_family",X={key:G,type:"writable_held_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","writable_held_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=g0(E,{key:C,const:Z.const(z),get:Z.get(z),set:Z.set(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>CQ(z,Z),default:Z.const});return Q.families.set(G,N),X}function L0(Q,Z,Y){let G=Z.key,_="writable_pure_selector_family",X={key:G,type:"writable_pure_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","writable_pure_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=d0(E,{key:C,get:Z.get(z),set:Z.set(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>L0(z,Z),default:(z)=>{return Z.get(z)({get:(...M)=>k(Q,...M),find:(...M)=>$(Q,...M),json:(M)=>n(Q,M)})}});return Q.families.set(G,N),X}function ZQ(Q,Z){let Y="set"in Z,G="const"in Z;if(G&&Y)return CQ(Q,Z,void 0);if(G)return EQ(Q,Z,void 0);if(Y)return L0(Q,Z);return t(Q,Z)}function rQ(Q,Z,Y){let G=Q.families.get(Z.key);if(G===void 0)throw new v0(Z,Q);let _=G(Y),X=O(Q);if(_.family){if(y(X))switch(_.type){case"atom":case"mutable_atom":Q.on.atomCreation.next(_);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":Q.on.selectorCreation.next(_);break}else if(x(X)&&X.on.transactionApplying.state===null)X.transactionMeta.update.updates.push({type:"state_creation",token:_})}return _}function aQ(Q,Z,Y){let G=h(Y),_=`${Z.key}(${G})`,X=O(Q),W;switch(Z.type){case"atom_family":case"mutable_atom_family":W=X.atoms.get(_);break;case"writable_held_selector_family":case"writable_pure_selector_family":W=X.writableSelectors.get(_);break;case"readonly_held_selector_family":case"readonly_pure_selector_family":W=X.readonlySelectors.get(_);break}if(W)return e(W);return W}function $(Q,Z,Y){let G=aQ(Q,Z,Y);if(G)return G;let _=h(Y),X=Q.molecules.get(_);if(!X&&Q.config.lifespan==="immortal"){let W=gQ(Z,Y);return Q.logger.error("\u274C",W.type,W.key,`was not found in store "${Q.config.name}"; returned a counterfeit token.`),W}if(G=rQ(Q,Z,Y),X)O(Q).moleculeData.set(_,Z.key);return G}function a(Q,...Z){let Y;if(Z.length===1)Y=Z[0];else{let G=Z[0],_=Z[1];Y=$(Q,G,_)}try{A(Q,Y)}catch(G){Q.logger.error("\u274C",Y.type,Y.key,`could not be disposed because it was not found in the store "${Q.config.name}".`);return}switch(Y.type){case"atom":case"mutable_atom":FQ(Q,Y);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":nQ(Q,Y);break}}function PQ(Q,Z){if(Z.family){let Y=Q.families.get(Z.family.key);if(Y)return Y}}function E0(Q,...Z){let Y,G,_;if(Z.length===1){if(Y=Z[0],G=PQ(Q,Y)??null,G)_=Y.family?v(Y.family.subKey):null,Y=$(Q,G,_)}else G=Z[0],_=Z[1],Y=$(Q,G,_);if("counterfeit"in Y&&"family"in Y){let q=Y.family.subKey,H=Q.disposalTraces.buffer.find((N)=>N?.key===q);Q.logger.error("\u274C",Y.type,Y.key,`could not be reset because it was not found in the store "${Q.config.name}".`,H?`This state was previously disposed:
4
- ${H.trace}`:"No previous disposal trace was found.");return}let X=C0(Q,Y);if(X){let q=Q.on.operationClose.subscribe(`waiting to reset "${Y.key}" at T-${X}`,()=>{q(),Q.logger.info("\uD83D\uDFE2",Y.type,Y.key,`resuming deferred resetState from T-${X}`),E0(Q,Y)});return}let W=A(Q,Y);uQ(Q,W),P0(Q)}var OQ=(Q,Z,Y)=>{switch(Z.type){case"atom":case"mutable_atom":LQ(Q,Z,Y);break;case"writable_pure_selector":case"writable_held_selector":Z.set(Y);break}};function g(Q,...Z){let Y,G,_,X;if(Z.length===2){if(Y=Z[0],X=Z[1],G=PQ(Q,Y)??null,G)_=Y.family?v(Y.family.subKey):null,Y=$(Q,G,_)}else G=Z[0],_=Z[1],X=Z[2],Y=$(Q,G,_);if("counterfeit"in Y&&"family"in Y){let H=Y.family.subKey,N=Q.disposalTraces.buffer.find((z)=>z?.key===H);Q.logger.error("\u274C",Y.type,Y.key,`could not be set because it was not found in the store "${Q.config.name}".`,N?`This state was previously disposed:
3
+ var AQ=Object.create;var{getPrototypeOf:wQ,defineProperty:$0,getOwnPropertyNames:RQ}=Object;var xQ=Object.prototype.hasOwnProperty;var VZ=(Q,Z,Y)=>{Y=Q!=null?AQ(wQ(Q)):{};let G=Z||!Q||!Q.__esModule?$0(Y,"default",{value:Q,enumerable:!0}):Y;for(let _ of RQ(Q))if(!xQ.call(G,_))$0(G,_,{get:()=>Q[_],enumerable:!0});return G};var $Z=(Q,Z)=>()=>(Z||Q((Z={exports:{}}).exports,Z),Z.exports);var FZ=(Q,Z)=>{for(var Y in Z)$0(Q,Y,{get:Z[Y],enumerable:!0,configurable:!0,set:(G)=>Z[Y]=()=>G})};var hZ=(Q,Z)=>()=>(Q&&(Z=Q(Q=0)),Z);var IZ=import.meta.require;var r0=(Q,Z,Y=w.STORE)=>{return F0(Y,{key:`${Q.key}:JSON`,get:({get:G})=>Z.toJson(G(Q)),set:({set:G},_)=>{G(Q,Z.fromJson(_))}})};function a0(Q,Z,Y){return M0(Q,{key:`${Z.key}:JSON`,get:(_)=>({get:X})=>{let W=X(Z,_);return Y.toJson(W)},set:(_)=>({set:X},W)=>{X(Z,_,Y.fromJson(W))}},["mutable","json"])}var v=(Q)=>JSON.parse(Q),h=(Q)=>JSON.stringify(Q),wZ=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];function r(Q){return XQ(w.STORE,Q)}function X0(Q){return QQ(w.STORE,Q)}function TZ(...Q){if(Q.length===2)return k(w.STORE,...Q);return k(w.STORE,...Q)}function J0(Q,Z,Y=w.STORE){return Y.joins.set(Q.key,new A0(Q,Z,Y)),{key:Q.key,type:"join",a:Q.between[0],b:Q.between[1],cardinality:Q.cardinality}}function s0(Q){return qQ(Q,w.STORE)}var h0=(Q)=>(Z,Y,G,_,...X)=>{console[Q](`${Z} ${Y} "${G}" ${_}`,...X)},TQ={error:h0("error"),info:h0("info"),warn:h0("warn")},o0=class{logLevel;filter;logger;constructor(Q,Z,Y=TQ){this.logLevel=Q,this.filter=Z,this.logger=Y}error=(...Q)=>{let Z=this.filter?.(...Q)??!0;if(this.logLevel!==null){if(Z===!0)this.logger.error(...Q);else if(Z!==!1)this.logger.error(...Z)}};info=(...Q)=>{let Z=this.filter?.(...Q)??!0;if(this.logLevel==="info"){if(Z===!0)this.logger.info(...Q);else if(Z!==!1)this.logger.info(...Z)}};warn=(...Q)=>{let Z=this.filter?.(...Q)??!0;if(this.logLevel!=="error"&&this.logLevel!==null){if(Z===!0)this.logger.warn(...Q);else if(Z!==!1)this.logger.warn(...Z)}}};var vQ=class{store;constructor(Q=w.STORE){this.store=Q,YQ("root",Q)}allocate(Q,Z,Y){return o(this.store,Q,Z,Y)}fuse(Q,Z,Y){return GQ(this.store,Q,Z,Y)}deallocate(Q){t(this.store,Q)}claim(Q,Z,Y){return q0(this.store,Q,Z,Y)}},t0=class{store;realm;constructor(Q=w.STORE){this.store=Q,this.realm=new vQ(Q)}allocate(Q,Z,Y){o(this.store,Q,Z,Y)}deallocate(Q){t(this.store,Q)}claim(Q,Z,Y){q0(this.store,Q,Z,Y)}};function E0(Q){return ZQ(w.STORE,Q)}function W0(Q){return U0(w.STORE,Q)}var f=class Q extends Set{mode="record";subject=new I;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(Z,Y=0){super(Z);if(Z instanceof Q)this.parent=Z,this.cacheUpdateNumber=Z.cacheUpdateNumber;if(Y)this.cacheLimit=Y,this.cache=new Array(Y),this.subscribe("auto cache",(G)=>{this.cacheIdx++,this.cacheIdx%=this.cacheLimit,this.cache[this.cacheIdx]=G})}toJSON(){return{members:[...this],cache:this.cache,cacheLimit:this.cacheLimit,cacheIdx:this.cacheIdx,cacheUpdateNumber:this.cacheUpdateNumber}}static fromJSON(Z){let Y=new Q(Z.members,Z.cacheLimit);return Y.cache=Z.cache,Y.cacheIdx=Z.cacheIdx,Y.cacheUpdateNumber=Z.cacheUpdateNumber,Y}add(Z){let Y=super.add(Z);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`add:${h(Z)}`);return Y}clear(){let Z=this.mode==="record"?[...this]:null;if(super.clear(),Z)this.cacheUpdateNumber++,this.emit(`clear:${JSON.stringify(Z)}`)}delete(Z){let Y=super.delete(Z);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`del:${h(Z)}`);return Y}parent=null;child=null;transactionUpdates=null;transaction(Z){this.mode="transaction",this.transactionUpdates=[],this.child=new Q(this);let Y=this.child._subscribe("transaction",(G)=>{this.transactionUpdates?.push(G)});try{if(Z(this.child)){for(let _ of this.transactionUpdates)this.doStep(_);this.cacheUpdateNumber++,this.emit(`tx:${this.transactionUpdates.join(";")}`)}}catch(G){throw console.warn("Did not apply transaction to SetRTX; this error was thrown:",G),G}finally{Y(),this.child=null,this.transactionUpdates=null,this.mode="record"}}_subscribe(Z,Y){return this.subject.subscribe(Z,Y)}subscribe(Z,Y){return this.subject.subscribe(Z,(G)=>{Y(`${this.cacheUpdateNumber}=${G}`)})}emit(Z){this.subject.next(Z)}doStep(Z){let Y=Z.indexOf(":"),G=Z.substring(0,Y),_=Z.substring(Y+1);switch(G){case"add":this.add(JSON.parse(_));break;case"clear":this.clear();break;case"del":this.delete(JSON.parse(_));break;case"tx":for(let X of _.split(";"))this.doStep(X)}}getUpdateNumber(Z){let Y=Z.indexOf("=");return Number(Z.substring(0,Y))}do(Z){let Y=Z.indexOf("="),G=Number(Z.substring(0,Y)),_=G-this.cacheUpdateNumber;if(_>0){if(_===1){this.mode="playback";let W=Z.substring(Y+1);return this.doStep(W),this.mode="record",this.cacheUpdateNumber=G,null}return this.cacheUpdateNumber+1}if(Math.abs(_)<this.cacheLimit){let W=this.cacheIdx+_;if(this.cache[W]===Z)return null;this.mode="playback";let H=!1;while(!H){this.cacheIdx%=this.cacheLimit;let z=this.cache[this.cacheIdx];if(this.cacheIdx--,!z)return"OUT_OF_RANGE";this.undo(z),H=this.cacheIdx===W-1}let N=Z.substring(Y+1);return this.doStep(N),this.mode="record",this.cacheUpdateNumber=G,null}return"OUT_OF_RANGE"}undoStep(Z){let Y=Z.indexOf(":"),G=Z.substring(0,Y),_=Z.substring(Y+1);switch(G){case"add":this.delete(JSON.parse(_));break;case"del":this.add(JSON.parse(_));break;case"clear":{let X=JSON.parse(_);for(let W of X)this.add(W);break}case"tx":{let X=_.split(";");for(let W=X.length-1;W>=0;W--)this.undoStep(X[W])}}}undo(Z){let Y=Z.indexOf("=");if(Number(Z.substring(0,Y))===this.cacheUpdateNumber){this.mode="playback";let _=Z.substring(Y+1);return this.undoStep(_),this.mode="record",this.cacheUpdateNumber--,null}return this.cacheUpdateNumber}};function e0(Q=Math.random){return Q().toString(36).slice(2)}var w0=class extends Promise{fate;resolve;reject;done=!1;constructor(Q){let Z,Y;super((G,_)=>{Z=G,Y=_});this.resolve=Z,this.reject=Y,this.use(Q instanceof Promise?Q:new Promise(Q))}pass(Q,Z){if(Q===this.fate)this.resolve(Z),this.done=!0}fail(Q,Z){if(Q===this.fate)this.reject(Z),this.done=!0}use(Q){if(Q instanceof Promise){let Z=Q;this.fate=Z,Z.then((Y)=>{this.pass(Z,Y)},(Y)=>{this.fail(Z,Y)})}else this.resolve(Q),this.fate=void 0}};function O(Q){while(Q.child!==null)Q=Q.child;return Q}var fQ=class Q{_buffer;_index=0;constructor(Z){let Y;if(typeof Z==="number")Y=Z;else Y=Z.length;this._buffer=Array.from({length:Y})}get buffer(){return this._buffer}get index(){return this._index}add(Z){this._buffer[this._index]=Z,this._index=(this._index+1)%this._buffer.length}copy(){let Z=new Q([...this._buffer]);return Z._index=this._index,Z}},bQ={atom_family:"atom",molecule_family:"molecule",mutable_atom_family:"mutable_atom",readonly_held_selector_family:"readonly_held_selector",readonly_pure_selector_family:"readonly_pure_selector",writable_held_selector_family:"writable_held_selector",writable_pure_selector_family:"writable_pure_selector"};function gQ(Q,Z){let Y=h(Z),G=`${Q.key}(${Y})`,_=bQ[Q.type],X={key:G,type:_};return Object.assign(X,{family:{key:Q.key,subKey:Y}}),Object.assign(X,{counterfeit:!0}),X}function Q0(Q){let Z={key:Q.key,type:Q.type};if("family"in Q)Z.family=Q.family;return Z}var S=class{a;b;cardinality;relations=new Map;contents=new Map;isAType;isBType;isContent;makeContentKey=(Q,Z)=>`${Q}:${Z}`;warn;getRelatedKeys(Q){return this.relations.get(Q)}addRelation(Q,Z){let Y=this.relations.get(Q),G=this.relations.get(Z);if(Y)Y.add(Z);else Y=new Set([Z]),this.relations.set(Q,Y);if(G)G.add(Q);else G=new Set([Q]),this.relations.set(Z,G)}deleteRelation(Q,Z){let Y=this.relations.get(Q);if(Y){if(Y.delete(Z),Y.size===0)this.relations.delete(Q);let G=this.relations.get(Z);if(G){if(G.delete(Q),G.size===0)this.relations.delete(Z)}}}replaceRelationsUnsafely(Q,Z){this.relations.set(Q,new Set(Z));for(let Y of Z){let G=new Set().add(Q);this.relations.set(Y,G)}}replaceRelationsSafely(Q,Z){let Y=this.relations.get(Q),G=this.isAType?.(Q)?Q:void 0,_=G===void 0?Q:void 0;if(Y)for(let X of Y){G??=X,_??=X;let W=this.relations.get(X);if(W){if(W.size===1)this.relations.delete(X);else W.delete(Q);this.contents.delete(this.makeContentKey(G,_))}}this.relations.set(Q,new Set(Z));for(let X of Z){let W=this.relations.get(X);if(W)W.add(Q);else W=new Set().add(Q),this.relations.set(X,W)}}getContentInternal(Q){return this.contents.get(Q)}setContent(Q,Z){this.contents.set(Q,Z)}deleteContent(Q){this.contents.delete(Q)}constructor(Q,Z){if(this.a=Q.between[0],this.b=Q.between[1],this.cardinality=Q.cardinality,!Z?.externalStore)this.relations=new Map(Q.relations?.map(([Y,G])=>[Y,new Set(G)])),this.contents=new Map(Q.contents);if(this.isAType=Z?.isAType??null,this.isBType=Z?.isBType??null,this.isContent=Z?.isContent??null,Z?.makeContentKey)this.makeContentKey=Z.makeContentKey;if(Z?.externalStore){let Y=Z.externalStore;if(this.has=(G,_)=>Y.has(G,_),this.addRelation=(G,_)=>{Y.addRelation(G,_)},this.deleteRelation=(G,_)=>{Y.deleteRelation(G,_)},this.replaceRelationsSafely=(G,_)=>{Y.replaceRelationsSafely(G,_)},this.replaceRelationsUnsafely=(G,_)=>{Y.replaceRelationsUnsafely(G,_)},this.getRelatedKeys=(G)=>Y.getRelatedKeys(G),Y.getContent)this.getContentInternal=(G)=>{return Y.getContent(G)},this.setContent=(G,_)=>{Y.setContent(G,_)},this.deleteContent=(G)=>{Y.deleteContent(G)};for(let[G,_]of Q.relations??[]){let X=this.isAType?.(G)?G:void 0,W=X===void 0?G:void 0;for(let q of _)X??=q,W??=q,this.addRelation(X,W)}for(let[G,_]of Q.contents??[])this.setContent(G,_)}if(Z?.warn)this.warn=Z.warn}toJSON(){return{between:[this.a,this.b],cardinality:this.cardinality,relations:[...this.relations.entries()].map(([Q,Z])=>[Q,[...Z]]),contents:[...this.contents.entries()]}}set(...Q){let Z,Y,G;switch(Q.length){case 1:{let _=Q[0];Z=_[this.a],Y=_[this.b],G=void 0;break}case 2:{let _=Q[0];if(typeof _==="string")[Z,Y]=Q;else Z=_[this.a],Y=_[this.b],G=Q[1];break}default:{Z=Q[0],Y=Q[1],G=Q[2];break}}switch(this.cardinality){case"1:1":{let _=this.getRelatedKey(Z);if(_&&_!==Y)this.delete(Z,_)}case"1:n":{let _=this.getRelatedKey(Y);if(_&&_!==Z)this.delete(_,Y)}break;case"n:n":}if(G){let _=this.makeContentKey(Z,Y);this.setContent(_,G)}return this.addRelation(Z,Y),this}delete(Q,Z){Z=typeof Z==="string"?Z:Q[this.b];let Y=typeof Q==="string"?Q:Q[this.a];if(Y===void 0&&typeof Z==="string"){let G=this.getRelatedKeys(Z);if(G)for(let _ of G)this.delete(_,Z)}if(typeof Y==="string"&&Z===void 0){let G=this.getRelatedKeys(Y);if(G)for(let _ of G)this.delete(Y,_)}if(typeof Y==="string"&&typeof Z==="string"){this.deleteRelation(Y,Z);let G=this.makeContentKey(Y,Z);this.deleteContent(G)}return this}getRelatedKey(Q){let Z=this.getRelatedKeys(Q);if(Z){if(Z.size>1)this.warn?.(`${Z.size} related keys were found for key "${Q}": (${[...Z].map((G)=>`"${G}"`).join(", ")}). Only one related key was expected.`);let Y;for(let G of Z){Y=G;break}return Y}}replaceRelations(Q,Z,Y){let G=!Array.isArray(Z),_=G?Object.keys(Z):Z;if(Y?.reckless)this.replaceRelationsUnsafely(Q,_);else this.replaceRelationsSafely(Q,_);if(G)for(let X of _){let W=this.makeContentKey(Q,X),q=Z[X];this.setContent(W,q)}return this}getContent(Q,Z){let Y=this.makeContentKey(Q,Z);return this.getContentInternal(Y)}getRelationEntries(Q){let Z=Q[this.a],Y=Q[this.b];if(Z!==void 0&&Y===void 0){let G=this.getRelatedKeys(Z);if(G)return[...G].map((_)=>{return[_,this.getContent(Z,_)]})}if(Z===void 0&&Y!==void 0){let G=this.getRelatedKeys(Y);if(G)return[...G].map((_)=>{return[_,this.getContent(_,Y)]})}return[]}has(Q,Z){if(Z)return this.getRelatedKeys(Q)?.has(Z)??!1;return this.relations.has(Q)}},I=class{Subscriber;subscribers=new Map;subscribe(Q,Z){return this.subscribers.set(Q,Z),()=>{this.unsubscribe(Q)}}unsubscribe(Q){this.subscribers.delete(Q)}next(Q){let Z=this.subscribers.values();for(let Y of Z)Y(Q)}},dQ=class extends I{state;constructor(Q){super();this.state=Q}next(Q){this.state=Q,super.next(Q)}};function y(Q){return"epoch"in Q.transactionMeta}function x(Q){return"phase"in Q.transactionMeta}var mQ=(Q)=>{let Z=O(Q);if(!x(Z)){Q.logger.warn("\uD83D\uDC1E","transaction","???","abortTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}Q.logger.info("\uD83E\uDE82","transaction",Z.transactionMeta.update.key,"Aborting transaction"),Z.parent.child=null};function U(Q){return Q[0].toUpperCase()+Q.slice(1)}function i(Q){return Q.type.split("_").map(U).join(" ")}var v0=class extends Error{constructor(Q,Z){super(`${i(Q)} ${h(Q.key)} not found in store "${Z.config.name}".`)}};function I0(Q,Z,Y){return(...G)=>{let _=A(Q,Z);if(_)return _.run(G,Y);throw new v0(Z,Q)}}var S0=(Q)=>(Z)=>Q instanceof Function?Q(Z):Q,O0=(Q,Z)=>{if(Q.valueMap.has(Z.key))return Q.logger.info("\uD83D\uDCD6",Z.type,Z.key,"reading cached value"),MZ(Z,Q);switch(Z.type){case"readonly_held_selector":case"readonly_pure_selector":case"writable_held_selector":case"writable_pure_selector":return Q.logger.info("\uD83E\uDDEE",Z.type,Z.key,"computing value"),Z.get();case"atom":case"mutable_atom":{let Y=Z.default,G;if(Y instanceof Function)G=Y();else G=Y;return Q.logger.info("\uD83D\uDC81","atom",Z.key,"could not find cached value; using default",G),G}}},C0=(Q,Z)=>{if(Q.operation.open){let Y=performance.now();return Q.logger.info("\u2757",Z.type,Z.key,`deferring setState at T-${Y} until setState for "${Q.operation.token.key}" is done`),Y}Q.operation={open:!0,done:new Set,prev:new Map,time:Date.now(),token:Z},Q.logger.info("\u2B55",Z.type,Z.key,`operation start in store "${Q.config.name}"${!x(Q)?"":` ${Q.transactionMeta.phase} "${Q.transactionMeta.update.key}"`}`)},P0=(Q)=>{if(Q.operation.open)Q.logger.info("\uD83D\uDD34",Q.operation.token.type,Q.operation.token.key,`operation done in store "${Q.config.name}"`);Q.operation={open:!1},Q.on.operationClose.next(Q.operation)},DQ=(Q,Z)=>{if(!Q.operation.open)return Q.logger.error("\uD83D\uDC1E","unknown",Z,"isDone called outside of an operation. This is probably a bug in AtomIO."),!0;return Q.operation.done.has(Z)},z0=(Q,Z)=>{if(!Q.operation.open){Q.logger.error("\uD83D\uDC1E","unknown",Z,"markDone called outside of an operation. This is probably a bug in AtomIO.");return}Q.operation.done.add(Z)},kQ=(Q,Z,Y)=>{switch(Z.type){case"mutable_atom":Q.logger.info("\uD83D\uDCE2",Z.type,Z.key,"is now (",Y.newValue,") subscribers:",Z.subject.subscribers);break;case"atom":case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":Q.logger.info("\uD83D\uDCE2",Z.type,Z.key,"went (",Y.oldValue,"->",Y.newValue,") subscribers:",Z.subject.subscribers)}Z.subject.next(Y)};function R0(Q,Z){let Y=O(Q),G=Y.selectorAtoms.getRelatedKeys(Z.key);if(Y.logger.info("\uD83E\uDDF9",Z.type,Z.key,G?`evicting ${G.size} states downstream:`:"no downstream states",G??"to evict"),G){if(Y.operation.open)Y.logger.info("\uD83E\uDDF9",Z.type,Z.key,`[ ${[...Y.operation.done].join(", ")} ] already done`);for(let _ of G){if(DQ(Y,_))continue;$Q(_,Y),z0(Y,_)}}}function cQ(Q,Z){let Y=O(Q),G=Y.selectorGraph.getRelationEntries({upstreamSelectorKey:Z.key}).filter(([_,{source:X}])=>X===Z.key);for(let[_]of G){if(DQ(Y,_))continue;$Q(_,Y),z0(Y,_)}}var LQ=(Q,Z,Y)=>{let G=O0(Q,Z),_=G;if(Z.type==="mutable_atom"&&x(Q)){let{parent:W}=Q;_=T0(Q,Z,W)}_=S0(Y)(_),Q.logger.info("\uD83D\uDCDD","atom",Z.key,"set to",_),_=u(Q,Z.key,_,Z.subject),z0(Q,Z.key),R0(Q,Z);let X={oldValue:G,newValue:_};if(!x(Q)){kQ(Q,Z,X);return}if(Q.on.transactionApplying.state===null){let{key:W}=Z;if(LZ(X.newValue))return;let q={type:"atom_update",key:W,...X};if(Z.family)q.family=Z.family;Q.transactionMeta.update.updates.push(q),Q.logger.info("\uD83D\uDCC1","atom",W,"stowed (",X.oldValue,"->",X.newValue,")")}else if(Z.key.startsWith("*")){let W=Z.key.slice(1),q=Q.atoms.get(W),H=Q.valueMap.get(W);if(q.type==="mutable_atom"&&x(Q)){let{parent:z}=Q;H=T0(Q,q,z)}if(H.do(X.newValue)===null)R0(Q,q)}};function HQ(Q,Z){let Y=Z.default;if(Y instanceof Function)Y=Y();LQ(Q,Z,Y)}function uQ(Q,Z){switch(Z.type){case"atom":case"mutable_atom":HQ(Q,Z);break;case"writable_pure_selector":case"writable_held_selector":{let Y=JQ(Z,Q);for(let G of Y)HQ(Q,G)}break}}function B0(Q,Z,Y){let G={key:Z.key,type:"atom_family"},_=Q.families.get(Z.key);if(_)Q.logger.error("\u2757","atom_family",Z.key,`Overwriting an existing ${i(_)} "${_.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let X=new I,q=Object.assign((H)=>{let N=h(H),z={key:Z.key,subKey:N},L=`${Z.key}(${N})`,M=O(Q),C=Z.default,E={key:L,default:C instanceof Function?()=>C(H):C};if(Z.effects)E.effects=Z.effects(H);let B=V0(M,E,z);return X.next({type:"state_creation",token:B}),B},G,{subject:X,install:(H)=>B0(H,Z),internalRoles:Y});return Q.families.set(Z.key,q),Q.defaults.set(Z.key,Z.default),G}function QQ(Q,Z){if("mutable"in Z)return c0(Q,Z);return B0(Q,Z)}var K0=(Q,Z)=>O(Q).atoms.has(Z),pQ=(Q,Z)=>O(Q).writableSelectors.has(Z),yQ=(Q,Z)=>O(Q).readonlySelectors.has(Z),lQ=(Q,Z)=>K0(Q,Z)||pQ(Q,Z)||yQ(Q,Z),x0=(Q,Z)=>{return O(Q).selectorGraph.getRelationEntries({downstreamSelectorKey:Z}).filter(([G,{source:_}])=>_!==Z).map(([G,{source:_}])=>_).filter((G)=>lQ(Q,G))},MQ=(Q,Z,Y)=>{let G=[],_=x0(Q,Z);while(_.length>0){let X=_.shift();if(Y.has(X))continue;if(Y.add(X),!K0(Q,X))_.push(...x0(Q,X));else if(!G.includes(X))G.push(X)}return G},JQ=(Q,Z)=>{let Y=Q.key,G=x0(Z,Y),_=new Set;return G.flatMap((X)=>K0(Z,X)?X:MQ(Z,X,_)).map((X)=>Z.atoms.get(X))},iQ=(Q,Z,Y,G,_)=>{let X=O(Q),{type:W,key:q}=G;if(W==="atom"||W==="mutable_atom")X.selectorAtoms.set({selectorKey:Y,atomKey:q}),Q.logger.info("\uD83D\uDD0D",Z,Y,`discovers root atom "${q}"`);else{let H=MQ(Q,q,_);Q.logger.info("\uD83D\uDD0D",Z,Y,`discovers root atoms: [ ${H.map((N)=>`"${N}"`).join(", ")} ]`);for(let N of H)X.selectorAtoms=X.selectorAtoms.set({selectorKey:Y,atomKey:N})}_.add(q)},j0=(Q,Z,Y,G)=>({get:(..._)=>{let X=O(Q),W;if(_.length===2){let[z,L]=_;W=$(Q,z,L)}else[W]=_;let q=A(Q,W),H=O0(Q,q),N=W.key;return Q.logger.info("\uD83D\uDD0C",Z,Y,`registers dependency ( "${N}" =`,H,")"),X.selectorGraph.set({upstreamSelectorKey:N,downstreamSelectorKey:Y},{source:W.key}),iQ(Q,Z,Y,W,G),H},set:(..._)=>{let X,W;if(_.length===2)X=_[0],W=_[1];else{let N=_[0],z=_[1];W=_[2],X=$(Q,N,z)}let q=O(Q),H=A(q,X);OQ(q,H,W)},find:(..._)=>$(Q,..._),json:(_)=>n(Q,_)}),f0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,{key:W,const:q}=Z,H="readonly_held_selector",{get:N,find:z,json:L}=j0(G,"readonly_held_selector",W,X),C={...Z,type:"readonly_held_selector",subject:_,install:(B)=>f0(B,Z,Y),get:()=>{return Z.get({get:N,find:z,json:L},q),u(O(Q),W,q,_),X.clear(),q},...Y&&{family:Y}};G.readonlySelectors.set(W,C),Q.logger.info("\u2728","readonly_held_selector",W,"=",q);let E={key:W,type:"readonly_held_selector"};if(Y)E.family=Y;return E},b0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,W=Z.key,q="readonly_pure_selector",{get:H,find:N,json:z}=j0(G,"readonly_pure_selector",W,X),L=()=>{let B=Z.get({get:H,find:N,json:z});return u(O(Q),W,B,_),X.clear(),B},M={...Z,type:"readonly_pure_selector",subject:_,install:(B)=>b0(B,Z,Y),get:L,...Y&&{family:Y}};G.readonlySelectors.set(W,M);let C=L();Q.logger.info("\u2728","readonly_pure_selector",W,"=",C);let E={key:W,type:"readonly_pure_selector"};if(Y)E.family=Y;return E},g0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,{key:W,const:q}=Z,H="writable_held_selector",N=j0(G,"writable_held_selector",W,X),{find:z,get:L,json:M}=N,C={find:z,get:L,json:M},E=(T=Z.get,D=O(Q))=>{return T(C,q),u(D,W,q,_),X.clear(),q},K={...Z,type:"writable_held_selector",subject:_,install:(T)=>g0(T,Z,Y),get:E,set:(T)=>{let D=O(Q),J=E(Z.get,D),j=S0(T)(J);if(Q.logger.info("\uD83D\uDCDD","writable_held_selector",W,"set (",J,"->",j,")"),u(D,W,j,_),z0(D,W),y(D))_.next({newValue:j,oldValue:J});Z.set(N,j)},...Y&&{family:Y}};G.writableSelectors.set(W,K);let l=E();Q.logger.info("\u2728","writable_held_selector",W,"=",l);let d={key:W,type:"writable_held_selector"};if(Y)d.family=Y;return d},d0=(Q,Z,Y)=>{let G=O(Q),_=new I,X=new Set,W=Z.key,q="writable_pure_selector",H=j0(G,"writable_pure_selector",W,X),{find:N,get:z,json:L}=H,M={find:N,get:z,json:L},C=(d=Z.get,T=O(Q))=>{let D=d(M);return u(T,W,D,_),X.clear(),D},B={...Z,type:"writable_pure_selector",subject:_,install:(d)=>d0(d,Z,Y),get:C,set:(d)=>{let T=O(Q),D=C(Z.get,T),J=S0(d)(D);if(Q.logger.info("\uD83D\uDCDD","writable_pure_selector",W,"set (",D,"->",J,")"),u(T,Z.key,J,_),z0(T,Z.key),y(T))_.next({newValue:J,oldValue:D});Z.set(H,J)},...Y&&{family:Y}};G.writableSelectors.set(W,B);let K=C();Q.logger.info("\u2728",B.type,B.key,"=",K);let l={key:W,type:"writable_pure_selector"};if(Y)l.family=Y;return l};function F0(Q,Z){let Y="set"in Z,G="const"in Z;if(G&&Y){let X=g0(Q,Z,void 0);return Q.on.selectorCreation.next(X),X}if(G){let X=f0(Q,Z,void 0);return Q.on.selectorCreation.next(X),X}if(Y){let X=d0(Q,Z,void 0);return Q.on.selectorCreation.next(X),X}let _=b0(Q,Z,void 0);return Q.on.selectorCreation.next(_),_}function nQ(Q,Z){let Y=O(Q),{key:G,type:_}=Z,X=A(Y,Z);if(!X.family)Q.logger.error("\u274C",_,G,"Standalone selectors cannot be disposed.");else{if(Y.molecules.get(X.family.subKey))Y.moleculeData.delete(X.family.subKey,X.family.key);let q;switch(Z.type){case"writable_held_selector":Y.writableSelectors.delete(G),q={key:X.family.key,type:"writable_held_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break;case"writable_pure_selector":Y.writableSelectors.delete(G),q={key:X.family.key,type:"writable_pure_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break;case"readonly_held_selector":Y.readonlySelectors.delete(G),q={key:X.family.key,type:"readonly_held_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break;case"readonly_pure_selector":Y.readonlySelectors.delete(G),q={key:X.family.key,type:"readonly_pure_selector_family"},A(Q,q).subject.next({type:"state_disposal",subType:"selector",token:Z});break}if(Y.valueMap.delete(G),Y.selectorAtoms.delete(G),Y.selectorGraph.delete(G),Q.logger.info("\uD83D\uDD25",Z.type,G,"deleted"),x(Y)&&Y.transactionMeta.phase==="building")Y.transactionMeta.update.updates.push({type:"state_disposal",subType:"selector",token:Z});else Q.on.selectorDisposal.next(Z)}}function e(Q,Z,Y){let G=Z.key,_="readonly_pure_selector_family",X={key:G,type:"readonly_pure_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","readonly_pure_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=b0(E,{key:C,get:Z.get(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>e(z,Z),default:(z)=>{return Z.get(z)({get:(...M)=>k(Q,...M),find:(...M)=>$(Q,...M),json:(M)=>n(Q,M)})}});return Q.families.set(G,N),X}function EQ(Q,Z,Y){let G=Z.key,_="readonly_held_selector_family",X={key:G,type:"readonly_held_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","readonly_held_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=f0(E,{key:C,const:Z.const(z),get:Z.get(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>EQ(z,Z),default:Z.const});return Q.families.set(G,N),X}function CQ(Q,Z,Y){let G=Z.key,_="writable_held_selector_family",X={key:G,type:"writable_held_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","writable_held_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=g0(E,{key:C,const:Z.const(z),get:Z.get(z),set:Z.set(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>CQ(z,Z),default:Z.const});return Q.families.set(G,N),X}function M0(Q,Z,Y){let G=Z.key,_="writable_pure_selector_family",X={key:G,type:"writable_pure_selector_family"},W=Q.families.get(G);if(W)Q.logger.error("\u2757","writable_pure_selector_family",G,`Overwriting an existing ${i(W)} "${W.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let q=new I,N=Object.assign((z)=>{let L=h(z),M={key:G,subKey:L},C=`${G}(${L})`,E=O(Q),B=d0(E,{key:C,get:Z.get(z),set:Z.set(z)},M);return q.next({type:"state_creation",token:B}),B},X,{internalRoles:Y,subject:q,install:(z)=>M0(z,Z),default:(z)=>{return Z.get(z)({get:(...M)=>k(Q,...M),find:(...M)=>$(Q,...M),json:(M)=>n(Q,M)})}});return Q.families.set(G,N),X}function ZQ(Q,Z){let Y="set"in Z,G="const"in Z;if(G&&Y)return CQ(Q,Z,void 0);if(G)return EQ(Q,Z,void 0);if(Y)return M0(Q,Z);return e(Q,Z)}function rQ(Q,Z,Y){let G=Q.families.get(Z.key);if(G===void 0)throw new v0(Z,Q);let _=G(Y),X=O(Q);if(_.family){if(y(X))switch(_.type){case"atom":case"mutable_atom":Q.on.atomCreation.next(_);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":Q.on.selectorCreation.next(_);break}else if(x(X)&&X.on.transactionApplying.state===null)X.transactionMeta.update.updates.push({type:"state_creation",token:_})}return _}function aQ(Q,Z,Y){let G=h(Y),_=`${Z.key}(${G})`,X=O(Q),W;switch(Z.type){case"atom_family":case"mutable_atom_family":W=X.atoms.get(_);break;case"writable_held_selector_family":case"writable_pure_selector_family":W=X.writableSelectors.get(_);break;case"readonly_held_selector_family":case"readonly_pure_selector_family":W=X.readonlySelectors.get(_);break}if(W)return Q0(W);return W}function $(Q,Z,Y){let G=aQ(Q,Z,Y);if(G)return G;let _=h(Y),X=Q.molecules.get(_);if(!X&&Q.config.lifespan==="immortal"){let W=gQ(Z,Y);return Q.logger.error("\u274C",W.type,W.key,`was not found in store "${Q.config.name}"; returned a counterfeit token.`),W}if(G=rQ(Q,Z,Y),X)O(Q).moleculeData.set(_,Z.key);return G}function a(Q,...Z){let Y;if(Z.length===1)Y=Z[0];else{let G=Z[0],_=Z[1];Y=$(Q,G,_)}try{A(Q,Y)}catch(G){Q.logger.error("\u274C",Y.type,Y.key,`could not be disposed because it was not found in the store "${Q.config.name}".`);return}switch(Y.type){case"atom":case"mutable_atom":FQ(Q,Y);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":nQ(Q,Y);break}}function PQ(Q,Z){if(Z.family){let Y=Q.families.get(Z.family.key);if(Y)return Y}}function s(Q,...Z){let Y,G,_;if(Z.length===1){if(Y=Z[0],G=PQ(Q,Y)??null,G)_=Y.family?v(Y.family.subKey):null,Y=$(Q,G,_)}else G=Z[0],_=Z[1],Y=$(Q,G,_);if("counterfeit"in Y&&"family"in Y){let q=Y.family.subKey,H=Q.disposalTraces.buffer.find((N)=>N?.key===q);Q.logger.error("\u274C",Y.type,Y.key,`could not be reset because it was not found in the store "${Q.config.name}".`,H?`This state was previously disposed:
4
+ ${H.trace}`:"No previous disposal trace was found.");return}let X=C0(Q,Y);if(X){let q=Q.on.operationClose.subscribe(`waiting to reset "${Y.key}" at T-${X}`,()=>{q(),Q.logger.info("\uD83D\uDFE2",Y.type,Y.key,`resuming deferred resetState from T-${X}`),s(Q,Y)});return}let W=A(Q,Y);uQ(Q,W),P0(Q)}var OQ=(Q,Z,Y)=>{switch(Z.type){case"atom":case"mutable_atom":LQ(Q,Z,Y);break;case"writable_pure_selector":case"writable_held_selector":Z.set(Y);break}};function g(Q,...Z){let Y,G,_,X;if(Z.length===2){if(Y=Z[0],X=Z[1],G=PQ(Q,Y)??null,G)_=Y.family?v(Y.family.subKey):null,Y=$(Q,G,_)}else G=Z[0],_=Z[1],X=Z[2],Y=$(Q,G,_);if("counterfeit"in Y&&"family"in Y){let H=Y.family.subKey,N=Q.disposalTraces.buffer.find((z)=>z?.key===H);Q.logger.error("\u274C",Y.type,Y.key,`could not be set because it was not found in the store "${Q.config.name}".`,N?`This state was previously disposed:
5
5
  ${N.trace}`:"No previous disposal trace was found.");return}let W=C0(Q,Y);if(W){let H=Q.on.operationClose.subscribe(`waiting to set "${Y.key}" at T-${W}`,()=>{H(),Q.logger.info("\uD83D\uDFE2",Y.type,Y.key,`resuming deferred setState from T-${W}`),g(Q,Y,X)});return}let q=A(Q,Y);OQ(Q,q,X),P0(Q)}function sQ(Q,Z,Y){let{key:G,newValue:_,oldValue:X}=Z,W=Q==="newValue"?_:X,q={key:G,type:"atom"};if(Z.family)Object.assign(q,{family:Z.family});g(Y,q,W)}function oQ(Q){let{stack:Z}=Q;if(Z)return`
6
6
  `+Z.split(`
7
7
  `)?.slice(1)?.join(`
8
- `);return""}function YQ(Q,Z=w.STORE){let Y={key:Q,stringKey:h(Q),dependsOn:"any"};return Z.molecules.set(h(Q),Y),Q}function s(Q,Z,Y,G="any"){let _=Z,X=h(Y),W=[],q=O(Q);if(Array.isArray(_))for(let z of _){let L=h(z);if(q.molecules.get(L))Q.moleculeGraph.set(L,X,{source:L});else W.push(L)}else{let z=h(_);if(q.molecules.get(z))Q.moleculeGraph.set(z,X,{source:z});else W.push(z)}if(W.length===0)q.molecules.set(X,{key:Y,stringKey:X,dependsOn:G});let H={type:"molecule_creation",key:Y,provenance:_};if(x(q)&&q.transactionMeta.phase==="building")q.transactionMeta.update.updates.push(H);else q.on.moleculeCreation.next(H);for(let z of W){let L=Q.disposalTraces.buffer.find((M)=>M?.key===z);Q.logger.error("\u274C","molecule",Y,"allocation failed:",`Could not allocate to ${z} in store "${Q.config.name}".`,L?`
8
+ `);return""}function YQ(Q,Z=w.STORE){let Y={key:Q,stringKey:h(Q),dependsOn:"any"};return Z.molecules.set(h(Q),Y),Q}function o(Q,Z,Y,G="any"){let _=Z,X=h(Y),W=[],q=O(Q);if(Array.isArray(_))for(let z of _){let L=h(z);if(q.molecules.get(L))Q.moleculeGraph.set(L,X,{source:L});else W.push(L)}else{let z=h(_);if(q.molecules.get(z))Q.moleculeGraph.set(z,X,{source:z});else W.push(z)}if(W.length===0)q.molecules.set(X,{key:Y,stringKey:X,dependsOn:G});let H={type:"molecule_creation",key:Y,provenance:_};if(x(q)&&q.transactionMeta.phase==="building")q.transactionMeta.update.updates.push(H);else q.on.moleculeCreation.next(H);for(let z of W){let L=Q.disposalTraces.buffer.find((M)=>M?.key===z);Q.logger.error("\u274C","molecule",Y,"allocation failed:",`Could not allocate to ${z} in store "${Q.config.name}".`,L?`
9
9
  ${z} was most recently disposed
10
- ${L.trace}`:`No previous disposal trace for ${z} was found.`)}return Y}function GQ(Q,Z,Y,G){let _=`T$--${Z}==${Y}++${G}`;return s(Q,[Y,G],_,"all"),_}function o(Q,Z){let Y=h(Z),G=Q.molecules.get(Y);if(!G){let C=Q.disposalTraces.buffer.find((E)=>E?.key===Y);Q.logger.error("\u274C","molecule",Z,"deallocation failed:",`Could not find allocation for ${Y} in store "${Q.config.name}".`,C?`
10
+ ${L.trace}`:`No previous disposal trace for ${z} was found.`)}return Y}function GQ(Q,Z,Y,G){let _=`T$--${Z}==${Y}++${G}`;return o(Q,[Y,G],_,"all"),_}function t(Q,Z){let Y=h(Z),G=Q.molecules.get(Y);if(!G){let C=Q.disposalTraces.buffer.find((E)=>E?.key===Y);Q.logger.error("\u274C","molecule",Z,"deallocation failed:",`Could not find allocation for ${Y} in store "${Q.config.name}".`,C?`
11
11
  This state was most recently deallocated
12
- ${C.trace}`:`No previous disposal trace for ${Y} was found.`);return}let _=Q.moleculeJoins.getRelatedKeys(G.key);if(_)for(let C of _){let E=Q.joins.get(C);if(E)E.relations.delete(G.key),E.molecules.delete(G.stringKey)}Q.moleculeJoins.delete(G.stringKey);let X=[],W=[],q={type:"molecule_disposal",key:G.key,values:W,provenance:X},H=O(Q);H.molecules.delete(Y);let N=x(H)&&H.transactionMeta.phase==="building";if(N)H.transactionMeta.update.updates.push(q);let z=Q.moleculeGraph.getRelationEntries({downstreamMoleculeKey:G.stringKey});if(z)for(let[C,{source:E}]of z)if(E===G.stringKey){let B=v(C);o(Q,B)}else X.push(E);let L=H.moleculeData.getRelatedKeys(G.stringKey);if(L)for(let C of L){let E=H.families.get(C),B=$(Q,E,G.key);W.push([E.key,B]),a(Q,B)}if(H.moleculeGraph.delete(G.stringKey),H.moleculeJoins.delete(G.stringKey),H.moleculeData.delete(G.stringKey),!N)H.on.moleculeDisposal.next(q);H.molecules.delete(G.stringKey);let M=oQ(new Error);Q.disposalTraces.add({key:Y,trace:M})}function W0(Q,Z,Y,G){let _=h(Y),X=O(Q),W=X.molecules.get(_);if(!W){let M=Q.disposalTraces.buffer.find((C)=>C?.key===_);return Q.logger.error("\u274C","molecule",Y,"claim failed:",`Could not allocate to ${_} in store "${Q.config.name}".`,M?`
12
+ ${C.trace}`:`No previous disposal trace for ${Y} was found.`);return}let _=Q.moleculeJoins.getRelatedKeys(G.key);if(_)for(let C of _){let E=Q.joins.get(C);if(E)E.relations.delete(G.key),E.molecules.delete(G.stringKey)}Q.moleculeJoins.delete(G.stringKey);let X=[],W=[],q={type:"molecule_disposal",key:G.key,values:W,provenance:X},H=O(Q);H.molecules.delete(Y);let N=x(H)&&H.transactionMeta.phase==="building";if(N)H.transactionMeta.update.updates.push(q);let z=Q.moleculeGraph.getRelationEntries({downstreamMoleculeKey:G.stringKey});if(z)for(let[C,{source:E}]of z)if(E===G.stringKey){let B=v(C);t(Q,B)}else X.push(E);let L=H.moleculeData.getRelatedKeys(G.stringKey);if(L)for(let C of L){let E=H.families.get(C),B=$(Q,E,G.key);W.push([E.key,B]),a(Q,B)}if(H.moleculeGraph.delete(G.stringKey),H.moleculeJoins.delete(G.stringKey),H.moleculeData.delete(G.stringKey),!N)H.on.moleculeDisposal.next(q);H.molecules.delete(G.stringKey);let M=oQ(new Error);Q.disposalTraces.add({key:Y,trace:M})}function q0(Q,Z,Y,G){let _=h(Y),X=O(Q),W=X.molecules.get(_);if(!W){let M=Q.disposalTraces.buffer.find((C)=>C?.key===_);return Q.logger.error("\u274C","molecule",Y,"claim failed:",`Could not allocate to ${_} in store "${Q.config.name}".`,M?`
13
13
  ${_} was most recently disposed
14
14
  ${M.trace}`:`No previous disposal trace for ${_} was found.`),Y}let q=h(Z),H=X.molecules.get(q);if(!H){let M=Q.disposalTraces.buffer.find((C)=>C?.key===q);return Q.logger.error("\u274C","molecule",Y,"claim failed:",`Could not allocate to ${q} in store "${Q.config.name}".`,M?`
15
15
  ${q} was most recently disposed
16
- ${M.trace}`:`No previous disposal trace for ${q} was found.`),Y}let N=Q.moleculeGraph.getRelationEntries({downstreamMoleculeKey:W.stringKey}).filter(([,{source:M}])=>M!==_).map(([M])=>v(M));if(G)X.moleculeGraph.delete(_);X.moleculeGraph.set({upstreamMoleculeKey:H.stringKey,downstreamMoleculeKey:W.stringKey},{source:H.stringKey});let z={type:"molecule_transfer",key:W.key,from:N,to:[H.key]};if(x(X)&&X.transactionMeta.phase==="building")X.transactionMeta.update.updates.push(z);return Y}function tQ(Q,Z,Y){switch(Z){case"newValue":{BQ(Q,Y);break}case"oldValue":{a(Y,Q.token);break}}}function eQ(Q,Z,Y){switch(Z){case"newValue":{a(Y,Q.token);break}case"oldValue":{if(BQ(Q,Y),Q.subType==="atom")Y.valueMap.set(Q.token.key,Q.value);break}}}function BQ(Q,Z){let{family:Y}=Q.token;if(Y){let G=Z.families.get(Y.key);if(G)$(Z,G,v(Y.subKey))}}function QZ(Q,Z,Y){switch(Z){case"newValue":s(Y,Q.provenance,Q.key);break;case"oldValue":o(Y,Q.key);break}}function ZZ(Q,Z,Y){switch(Z){case"newValue":o(Y,Q.key);break;case"oldValue":{let G=Q.provenance.map(v);s(Y,G,Q.key);for(let[_,X]of Q.values){let W=Y.families.get(_);if(W){$(Y,W,Q.key);let q=`${_}(${h(Q.key)})`;Y.valueMap.set(q,X)}}}break}}function YZ(Q,Z,Y){switch(Z){case"newValue":{let G=Q.to.length===1?Q.to[0]:Q.to;W0(Y,G,Q.key,"exclusive")}break;case"oldValue":{let G=Q.from.length===1?Q.from[0]:Q.from;W0(Y,G,Q.key,"exclusive")}break}}function jQ(Q,Z,Y){let G=Q==="newValue"?Z.updates:[...Z.updates].reverse();for(let _ of G)switch(_.type){case"atom_update":case"selector_update":sQ(Q,_,Y);break;case"state_creation":tQ(_,Q,Y);break;case"state_disposal":eQ(_,Q,Y);break;case"molecule_creation":QZ(_,Q,Y);break;case"molecule_disposal":ZZ(_,Q,Y);break;case"molecule_transfer":YZ(_,Q,Y);break;case"transaction_update":jQ(Q,_,Y);break}}function VQ(Q,Z){return Q.transactionMeta.actionContinuities.getRelatedKey(Z)}function GZ(Q,Z){return Q.transactionMeta.epoch.get(Z)}function _Z(Q,Z){if(!y(Q))return;let G=VQ(Q,Z);if(G===void 0)return;return GZ(Q,G)}function XZ(Q,Z,Y){if(!y(Q))return;let _=VQ(Q,Z);if(_!==void 0)Q.transactionMeta.epoch.set(_,Y)}var WZ=(Q,Z)=>{let Y=O(Z),{parent:G}=Y;if(G===null||!x(Y)||Y.transactionMeta?.phase!=="building"){Z.logger.warn("\uD83D\uDC1E","transaction","???","applyTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}Y.transactionMeta.phase="applying",Y.transactionMeta.update.output=Q,G.child=null,G.on.transactionApplying.next(Y.transactionMeta);let{updates:_}=Y.transactionMeta.update;if(Z.logger.info("\uD83D\uDEC4","transaction",Y.transactionMeta.update.key,`Applying transaction with ${_.length} updates:`,_),jQ("newValue",Y.transactionMeta.update,G),y(G))XZ(G,Y.transactionMeta.update.key,Y.transactionMeta.update.epoch),A(Z,{key:Y.transactionMeta.update.key,type:"transaction"})?.subject.next(Y.transactionMeta.update),Z.logger.info("\uD83D\uDEEC","transaction",Y.transactionMeta.update.key,"Finished applying transaction.");else if(x(G))G.transactionMeta.update.updates.push(Y.transactionMeta.update);G.on.transactionApplying.next(null)};function qZ(Q){return{store:Q}}function k(Q,...Z){let Y,G,_;if(Z.length===1)Y=Z[0];else G=Z[0],_=Z[1],Y=$(Q,G,_);if("counterfeit"in Y&&"family"in Y){G=Q.families.get(Y.family.key);let X=Y.family.subKey,W=Q.disposalTraces.buffer.find((q)=>q?.key===X);switch(Q.logger.error("\u274C",Y.type,Y.key,`could not be retrieved because it was not found in the store "${Q.config.name}".`,W?`This state was previously disposed:
17
- ${W.trace}`:"No previous disposal trace was found."),G.type){case"atom_family":case"mutable_atom_family":return Q.defaults.get(G.key);case"readonly_pure_selector_family":case"writable_pure_selector_family":case"readonly_held_selector_family":case"writable_held_selector_family":{if(Q.defaults.has(G.key))return Q.defaults.get(Y.family.key);let q=A(Q,G).default(X);return Q.defaults.set(G.key,q),q}}}return O0(Q,A(Q,Y))}var c=class extends Map{deleted=new Set;source;constructor(Q){super();this.source=Q}get(Q){if(super.has(Q))return super.get(Q);if(!this.deleted.has(Q)&&this.source.has(Q))return this.source.get(Q);return}set(Q,Z){return this.deleted.delete(Q),super.set(Q,Z)}hasOwn(Q){return super.has(Q)}has(Q){return!this.deleted.has(Q)&&(super.has(Q)||this.source.has(Q))}delete(Q){return this.deleted.add(Q),super.delete(Q)}},HZ=(Q,Z,Y,G)=>{let _=O(Q),X={parent:_,child:null,on:_.on,loggers:_.loggers,logger:_.logger,config:_.config,atoms:new c(_.atoms),atomsThatAreDefault:new Set(_.atomsThatAreDefault),families:new c(_.families),joins:new c(_.joins),operation:{open:!1},readonlySelectors:new c(_.readonlySelectors),timelines:new c(_.timelines),timelineTopics:new S(_.timelineTopics.toJSON()),trackers:new Map,transactions:new c(_.transactions),selectorAtoms:new S(_.selectorAtoms.toJSON()),selectorGraph:new S(_.selectorGraph.toJSON(),{makeContentKey:(...N)=>N.sort().join(":")}),writableSelectors:new c(_.writableSelectors),valueMap:new c(_.valueMap),defaults:_.defaults,disposalTraces:Q.disposalTraces.copy(),molecules:new c(_.molecules),moleculeGraph:new S(_.moleculeGraph.toJSON(),{makeContentKey:_.moleculeGraph.makeContentKey}),moleculeData:new S(_.moleculeData.toJSON(),{makeContentKey:_.moleculeData.makeContentKey}),moleculeJoins:new S(_.moleculeJoins.toJSON(),{makeContentKey:_.moleculeJoins.makeContentKey}),miscResources:new c(_.miscResources)},W=_Z(Q,Z),q={phase:"building",update:{type:"transaction_update",key:Z,id:G,epoch:W===void 0?NaN:W+1,updates:[],params:Y,output:void 0},toolkit:{get:(...N)=>k(H,...N),set:(...N)=>{g(H,...N)},reset:(...N)=>{E0(H,...N)},run:(N,z=e0())=>I0(H,N,z),find:(...N)=>$(Q,...N),json:(N)=>n(H,N),dispose:(...N)=>{a(H,...N)},env:()=>qZ(H)}},H=Object.assign(X,{transactionMeta:q});return _.child=H,Q.logger.info("\uD83D\uDEEB","transaction",Z,"Building transaction with params:",Y),H};function U0(Q,Z){let{key:Y}=Z,G=Q.transactions.has(Y),_={key:Y,type:"transaction",run:(q,H)=>{let N=HZ(Q,Y,q,H);try{let z=O(Q),{toolkit:L}=N.transactionMeta,M=Z.do(L,...q);return WZ(M,z),M}catch(z){throw mQ(X),Q.logger.warn("\uD83D\uDCA5","transaction",Y,"caught:",z),z}},install:(q)=>U0(q,Z),subject:new I},X=O(Q);X.transactions.set(Y,_);let W=e(_);if(!G)Q.on.transactionCreation.next(W);return W}var _Q=class{parent=null;child=null;valueMap=new Map;defaults=new Map;atoms=new Map;writableSelectors=new Map;readonlySelectors=new Map;atomsThatAreDefault=new Set;selectorAtoms=new S({between:["selectorKey","atomKey"],cardinality:"n:n"});selectorGraph=new S({between:["upstreamSelectorKey","downstreamSelectorKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});trackers=new Map;families=new Map;joins=new Map;transactions=new Map;transactionMeta={epoch:new Map,actionContinuities:new S({between:["continuity","action"],cardinality:"1:n"})};timelines=new Map;timelineTopics=new S({between:["timelineKey","topicKey"],cardinality:"1:n"});disposalTraces=new fQ(100);molecules=new Map;moleculeJoins=new S({between:["moleculeKey","joinKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});moleculeGraph=new S({between:["upstreamMoleculeKey","downstreamMoleculeKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});moleculeData=new S({between:["moleculeKey","stateFamilyKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});miscResources=new Map;on={atomCreation:new I,atomDisposal:new I,selectorCreation:new I,selectorDisposal:new I,timelineCreation:new I,transactionCreation:new I,transactionApplying:new dQ(null),operationClose:new I,moleculeCreation:new I,moleculeDisposal:new I};operation={open:!1};config={name:"IMPLICIT_STORE",lifespan:"ephemeral"};loggers=[new o0("warn",(Q,Z,Y)=>!JZ(Y))];logger={error:(...Q)=>{for(let Z of this.loggers)Z.error(...Q)},info:(...Q)=>{for(let Z of this.loggers)Z.info(...Q)},warn:(...Q)=>{for(let Z of this.loggers)Z.warn(...Q)}};constructor(Q,Z=null){if(this.config={...Z?.config,...Q},Z!==null){if(this.valueMap=new Map(Z?.valueMap),this.operation={...Z?.operation},y(Z))this.transactionMeta={epoch:new Map(Z?.transactionMeta.epoch),actionContinuities:new S(Z?.transactionMeta.actionContinuities.toJSON())};for(let[,G]of Z.families){if(G.internalRoles?.includes("mutable")||G.internalRoles?.includes("join"))continue;G.install(this)}let Y=new Set;for(let[,G]of Z.atoms){if(Y.has(G.key))continue;if(G.install(this),G.type==="mutable_atom"){let _=n(Z,G),X=u0(G);Y.add(_.key),Y.add(X.key)}}for(let[,G]of Z.readonlySelectors)G.install(this);for(let[,G]of Z.writableSelectors){if(Y.has(G.key))continue;G.install(this)}for(let[,G]of Z.transactions)G.install(this);for(let[,G]of Z.timelines)G.install(this)}}},w={get STORE(){return globalThis.ATOM_IO_IMPLICIT_STORE??=new _Q({name:"IMPLICIT_STORE",lifespan:"ephemeral"}),globalThis.ATOM_IO_IMPLICIT_STORE}};function A(Q,Z){let Y,G=Q;while(G!==null){switch(Z.type){case"atom":case"mutable_atom":Y=G.atoms.get(Z.key);break;case"writable_pure_selector":case"writable_held_selector":Y=G.writableSelectors.get(Z.key);break;case"readonly_pure_selector":case"readonly_held_selector":Y=G.readonlySelectors.get(Z.key);break;case"atom_family":case"mutable_atom_family":case"writable_pure_selector_family":case"readonly_pure_selector_family":case"writable_held_selector_family":case"readonly_held_selector_family":Y=G.families.get(Z.key);break;case"timeline":Y=G.timelines.get(Z.key);break;case"transaction":Y=G.transactions.get(Z.key);break}if(Y)return Y;G=G.child}throw new v0(Z,Q)}var NZ=(Q,Z)=>{let Y=O(Q);if(Y.operation.open)return Y.operation.prev.get(Z.key);return Y.valueMap.get(Z.key)};var NQ=(Q,Z)=>{let Y=O(Q);return JQ(Z,Q).map((_)=>{return _.subject.subscribe(`${Z.type}:${Z.key}`,(X)=>{Q.logger.info("\uD83D\uDCE2",Z.type,Z.key,"root",_.key,"went",X.oldValue,"->",X.newValue);let W=NZ(Y,Z),q=O0(Y,Z);Q.logger.info("\u2728",Z.type,Z.key,"went",W,"->",q),Z.subject.next({newValue:q,oldValue:W})})})};function H0(Q,Z,Y,G){function _(L){if(Q.operation.open){let M=Q.on.operationClose.subscribe(`state subscription ${Y}`,()=>{M(),G(L)})}else G(L)}let X=A(Q,Z);Q.logger.info("\uD83D\uDC40",X.type,X.key,`Adding subscription "${Y}"`);let W=X.type==="writable_pure_selector"||X.type==="readonly_pure_selector",q=null,H=_;if(W)q=NQ(Q,X),H=(L)=>{if(q)q.length=0,q.push(...NQ(Q,X));_(L)};let N=X.subject.subscribe(Y,H);return()=>{if(Q.logger.info("\uD83D\uDE48",X.type,X.key,`Removing subscription "${Y}"`),N(),q)for(let L of q)L()}}var zZ=(Q,Z,Y,G)=>{let _=A(Q,Z);Q.logger.info("\uD83D\uDC40","timeline",Z.key,`Adding subscription "${Y}"`);let X=_.subject.subscribe(Y,G);return()=>{Q.logger.info("\uD83D\uDE48","timeline",Z.key,`Removing subscription "${Y}" from timeline`),X()}};var m0=class{initializeState(Q,Z){let Y=`*${Q.key}`;Z.atoms.delete(Y),Z.valueMap.delete(Y);let G=Q.family?{key:`*${Q.family.key}`,subKey:Q.family.subKey}:void 0,_=V0(Z,{key:Y,default:null},G);if(Z.parent?.valueMap.has(Y)){let X=Z.parent.valueMap.get(Y);Z.valueMap.set(Y,X)}return _}unsubscribeFromInnerValue;unsubscribeFromState;observeCore(Q,Z,Y){let G=`tracker:${Y.config.name}:${x(Y)?Y.transactionMeta.update.key:"main"}:${Q.key}`,_=k(Y,Q);this.unsubscribeFromInnerValue=_.subscribe(G,(X)=>{g(Y,Z,X)}),this.unsubscribeFromState=H0(Y,Q,G,(X)=>{if(X.newValue!==X.oldValue)this.unsubscribeFromInnerValue(),this.unsubscribeFromInnerValue=X.newValue.subscribe(G,(W)=>{g(Y,Z,W)})})}updateCore(Q,Z,Y){let G=`tracker:${Y.config.name}:${x(Y)?Y.transactionMeta.update.key:"main"}:${Q.key}`;H0(Y,Z,G,({newValue:_,oldValue:X})=>{let W=Y.timelineTopics.getRelatedKey(Z.key);if(W){if(Y.timelines.get(W)?.timeTraveling){let N=zZ(Y,{key:W,type:"timeline"},G,(z)=>{N(),g(Y,Q,(L)=>{if(z==="redo"&&_)L.do(_);else if(z==="undo"&&X)L.undo(X);return L})});return}}let q=Y.on.operationClose.subscribe(G,()=>{q();let H=k(Y,Q),N=_===null?-1:H.getUpdateNumber(_),z=N-H.cacheUpdateNumber;if(_&&z===1)g(Y,Q,(L)=>(L.do(_),L));else Y.logger.info("\u274C","mutable_atom",Q.key,`could not be updated. Expected update number ${H.cacheUpdateNumber+1}, but got ${N}`)})})}mutableState;latestUpdateState;[Symbol.dispose];constructor(Q,Z){this.mutableState=Q;let Y=O(Z);this.latestUpdateState=this.initializeState(Q,Y),this.observeCore(Q,this.latestUpdateState,Y),this.updateCore(Q,this.latestUpdateState,Y),Y.trackers.set(Q.key,this),this[Symbol.dispose]=()=>{this.unsubscribeFromInnerValue(),this.unsubscribeFromState(),Y.trackers.delete(Q.key)}}};function k0(Q,Z,Y){Q.logger.info("\uD83D\uDD28","atom",Z.key,`creating in store "${Q.config.name}"`);let G=O(Q),{key:_,default:X}=Z,W=G.atoms.get(_),q="mutable_atom";if(W&&W.type===q)return Q.logger.error("\u274C",q,_,"Tried to create atom, but it already exists in the store."),e(W);let H=new I,N={...Z,type:q,install:(M)=>{return M.logger.info("\uD83D\uDEE0\uFE0F","atom",_,`installing in store "${M.config.name}"`),k0(M,Z,Y)},subject:H};if(Y)N.family=Y;let z=X();G.atoms.set(N.key,N),u(G,_,z,H);let L=e(N);if(Z.effects){let M=0,C=[];for(let E of Z.effects){let B=E({setSelf:(K)=>{g(Q,L,K)},onSet:(K)=>H0(Q,L,`effect[${M}]`,K)});if(B)C.push(B);++M}N.cleanup=()=>{for(let E of C)E()}}if(new m0(L,Q),!Y)r0(L,Z,Q);return L}var DZ=class{trackers=new Map;latestUpdateAtoms;mutableAtoms;constructor(Q,Z){let Y=B0(Z,{key:`*${Q.key}`,default:null},["mutable","updates"]);this.latestUpdateAtoms=A(Z,Y),this.mutableAtoms=Q,this.mutableAtoms.subject.subscribe(`store=${Z.config.name}::tracker-atom-family`,(G)=>{let{type:_,token:X}=G;if(X.family){let W=v(X.family.subKey);switch(_){case"state_creation":this.trackers.set(W,new m0(X,Z));break;case"state_disposal":{let q=this.trackers.get(W);if(q)q[Symbol.dispose](),this.trackers.delete(W)}break}}})}};function c0(Q,Z,Y){let G={key:Z.key,type:"mutable_atom_family"},_=Q.families.get(Z.key);if(_)Q.logger.error("\u2757","mutable_atom_family",Z.key,`Overwriting an existing ${i(_)} "${_.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let X=new I,q=Object.assign((H)=>{let N=h(H),z={key:Z.key,subKey:N},L=`${Z.key}(${N})`,M=O(Q),C={key:L,default:()=>Z.default(H),toJson:Z.toJson,fromJson:Z.fromJson,mutable:!0};if(Z.effects)C.effects=Z.effects(H);let E=k0(M,C,z);return X.next({type:"state_creation",token:E}),E},G,{subject:X,install:(H)=>c0(H,Z),toJson:Z.toJson,fromJson:Z.fromJson,internalRoles:Y});return Q.families.set(Z.key,q),a0(Q,q,Z),new DZ(q,Q),G}var zQ=(Q,Z)=>{let Y=O(Z),G=`${Q.key}:JSON`;return Y.families.get(G)},n=(Q,Z)=>{if(Z.family){let G=O(Q),X={key:`${Z.family.key}:JSON`,type:"writable_pure_selector_family"},W=A(G,X),q=JSON.parse(Z.family.subKey);return $(Q,W,q)}return{type:"writable_pure_selector",key:`${Z.key}:JSON`}};var u0=(Q)=>{let Y={type:"atom",key:`*${Q.key}`};if(Q.family)Y.family={key:`*${Q.family.key}`,subKey:Q.family.subKey};return Y};function LZ(Q){return typeof Q==="object"&&Q!==null&&"do"in Q&&"undo"in Q&&"subscribe"in Q}function T0(Q,Z,Y){let G=Y.valueMap.get(Z.key),_=Q.valueMap.get(Z.key);if(G!==_)return _;if(G===void 0)return Z.default();Y.logger.info("\uD83D\uDCC3","atom",Z.key,"copying");let X=Z.toJson(G),W=Z.fromJson(X);return Q.valueMap.set(Z.key,W),new m0(Z,Y),W}function u(Q,Z,Y,G){let _=Q.valueMap.get(Z);if(_ instanceof w0){let X=_;if(Y instanceof Promise)return X;return Q.valueMap.set(Z,Y),Y}if(Y instanceof Promise){let X=new w0(Y);return Q.valueMap.set(Z,X),X.then((W)=>{if(Q.valueMap.get(Z)===X){u(Q,Z,W,G);let H=Q.atoms.get(Z);if(H)C0(Q,H),R0(Q,H),P0(Q);else{let N=Q.writableSelectors.get(Z)??Q.readonlySelectors.get(Z);if(N)C0(Q,N),cQ(Q,N),P0(Q)}G.next({newValue:W,oldValue:X})}}).catch((W)=>{Q.logger.error("\uD83D\uDCA5","state",Z,"rejected:",W)}),X}return Q.valueMap.set(Z,Y),Y}var MZ=(Q,Z)=>{let Y=Z.valueMap.get(Q.key);if(Q.type==="mutable_atom"&&x(Z)){let{parent:G}=Z;Y=T0(Z,Q,G)}return Y},$Q=(Q,Z)=>{let Y=Z.valueMap.get(Q);if(Y instanceof w0){let G=Y,_=Z.writableSelectors.get(Q)??Z.readonlySelectors.get(Q);if(_)G.use(_.get());return}if(Z.operation.open)Z.operation.prev.set(Q,Y);Z.valueMap.delete(Q),Z.logger.info("\uD83D\uDDD1","state",Q,"evicted")};function V0(Q,Z,Y){let{key:_,default:X}=Z;Q.logger.info("\uD83D\uDD28","atom",_,`creating in store "${Q.config.name}"`);let W=O(Q),q=W.atoms.get(_);if(q&&q.type==="atom")return Q.logger.error("\u274C","atom",_,"Tried to create atom, but it already exists in the store."),e(q);let H=new I,N={...Z,type:"atom",install:(M)=>{return M.logger.info("\uD83D\uDEE0\uFE0F","atom",_,`installing in store "${M.config.name}"`),V0(M,Z,Y)},subject:H};if(Y)N.family=Y;let z=X;if(X instanceof Function)z=X();W.atoms.set(_,N),u(W,_,z,H);let L=e(N);if(Z.effects){let M=0,C=[];for(let E of Z.effects){let B=E({setSelf:(K)=>{g(Q,L,K)},onSet:(K)=>H0(Q,L,`effect[${M}]`,K)});if(B)C.push(B);++M}N.cleanup=()=>{for(let E of C)E()}}return L}function XQ(Q,Z){if("mutable"in Z){let _=k0(Q,Z,void 0);return Q.on.atomCreation.next(_),_}let G=V0(Q,Z,void 0);return Q.on.atomCreation.next(G),G}function FQ(Q,Z){let Y=O(Q),{key:G,family:_}=Z,X=A(Y,Z);if(!_)Q.logger.error("\u274C","atom",G,"Standalone atoms cannot be disposed.");else{X.cleanup?.();let W=Q.valueMap.get(X.key),q=A(Q,{key:_.key,type:"atom_family"}),H={type:"state_disposal",subType:"atom",token:Z,value:W};q.subject.next(H);let N=x(Y);if(Y.atoms.delete(G),Y.valueMap.delete(G),Y.selectorAtoms.delete(G),Y.atomsThatAreDefault.delete(G),Q.timelineTopics.delete(G),Z.type==="mutable_atom"){let z=u0(Z);FQ(Q,z),Q.trackers.delete(G)}if(Q.logger.info("\uD83D\uDD25","atom",G,"deleted"),N&&Y.transactionMeta.phase==="building"){let z=Y.transactionMeta.update.updates.at(-1);if(!(z?.type==="molecule_disposal"&&z.values.some(([C])=>C===X.family?.key)))Y.transactionMeta.update.updates.push(H)}else Q.on.atomDisposal.next(Z)}}var A0=class{toolkit;options;defaultContent;molecules=new Map;relations;states;core;transact(Q,Z){let Y=this.toolkit;this.toolkit=Q,Z(this),this.toolkit=Y}store;realm;[Symbol.dispose](){}constructor(Q,Z,Y=w.STORE){this.store=Y,this.realm=new t0(Y),this.options=Q,this.defaultContent=Z,this.store.miscResources.set(`join:${Q.key}`,this),this.realm.allocate("root",Q.key),this.toolkit={get:(...D)=>k(Y,...D),set:(...D)=>{g(Y,...D)},find:(...D)=>$(Y,...D),json:(D)=>n(Y,D)};let G=Q.between[0],_=Q.between[1],X=c0(Y,{key:`${Q.key}/relatedKeys`,default:()=>new f,mutable:!0,fromJson:(D)=>f.fromJSON(D),toJson:(D)=>D.toJSON()},["join","relations"]);this.core={relatedKeysAtoms:X};let W=({get:D},J)=>D(X,J),q=({set:D},J,j)=>{if(!this.store.molecules.has(h(J)))this.realm.allocate(Q.key,J);D(X,J,(P)=>P.add(j)),D(X,j,(P)=>P.add(J))},H=({set:D},J,j)=>{D(X,J,(P)=>{return P.delete(j),P}),D(X,j,(P)=>{return P.delete(J),P})},N=(D,J,j)=>{let{find:P,get:V,set:F}=D,R=P(X,J),m=V(R);for(let b of m){if(j.includes(b))continue;F(X,b,(p)=>{return p.delete(J),p})}F(R,(b)=>{return b.transaction((Q0)=>{Q0.clear();for(let p of j){let Z0=W(D,p),i0=Z0.has(J);if(this.relations.cardinality==="1:n"){let n0=[];for(let Y0 of Z0){if(Y0===J)continue;let G0=W(D,Y0);if(G0.delete(p),G0.size===0)n0.push(Y0)}if(!i0&&Z0.size>0)Z0.clear();for(let Y0 of n0){let G0=[p,Y0].sort(),UQ=`"${G0[0]}:${G0[1]}"`;this.molecules.delete(UQ)}}if(!i0)Z0.add(J);Q0.add(p)}return!0}),b})},z=(D,J,j)=>{let{set:P}=D;P(X,J,(V)=>{return V.transaction((F)=>{for(let R of j)F.add(R);return!0}),V});for(let V of j)P(X,V,(F)=>{return F.add(J),F});return!0},L=(D,J,j)=>{let P=W(D,J);return j?P.has(j):P.size>0},M={getRelatedKeys:(D)=>W(this.toolkit,D),addRelation:(D,J)=>{this.store.moleculeJoins.set(D,Q.key),this.store.moleculeJoins.set(J,Q.key),q(this.toolkit,D,J)},deleteRelation:(D,J)=>{H(this.toolkit,D,J)},replaceRelationsSafely:(D,J)=>{N(this.toolkit,D,J)},replaceRelationsUnsafely:(D,J)=>{z(this.toolkit,D,J)},has:(D,J)=>L(this.toolkit,D,J)},C,E;if(Z){E=B0(Y,{key:`${Q.key}/content`,default:Z},["join","content"]);let D=({get:P},V)=>P(E,V),J=({set:P},V,F)=>{P(E,V,F)};C=Object.assign(M,{getContent:(P)=>{return D(this.toolkit,P)},setContent:(P,V)=>{J(this.toolkit,P,V)},deleteContent:(P)=>{this.realm.deallocate(P)}})}else C=M;let B=new S(Q,{externalStore:C,isAType:Q.isAType,isBType:Q.isBType,makeContentKey:(...D)=>{let[J,j]=D,P=D.sort(),V=`${P[0]}:${P[1]}`,F=Y.molecules.get(h(J)),R=Y.molecules.get(h(j));if(!F)this.realm.allocate(Q.key,J);if(!R)this.realm.allocate(Q.key,j);return this.realm.allocate(J,V,"all"),this.realm.claim(j,V),this.store.moleculeJoins.set(V,Q.key),V}}),K=()=>t(Y,{key:`${Q.key}/singleRelatedKey`,get:(D)=>({get:J})=>{let j=J(X,D);for(let P of j)return P;return null}},["join","keys"]),l=()=>{return t(Y,{key:`${Q.key}/multipleRelatedKeys`,get:(D)=>({get:J})=>{let j=zQ(X,Y);return J(j,D).members}},["join","keys"])},d=()=>t(Y,{key:`${Q.key}/singleRelatedEntry`,get:(D)=>({get:J})=>{let j=J(X,D);for(let P of j){let V=B.isAType?.(D)?D:void 0,F=V===void 0?D:void 0;V??=P,F??=P;let R=B.makeContentKey(V,F),m=J(E,R);return[P,m]}return null}},["join","entries"]),T=()=>t(Y,{key:`${Q.key}/multipleRelatedEntries`,get:(D)=>({get:J})=>{let j=zQ(X,Y);return J(j,D).members.map((V)=>{let F=B.isAType?.(D)?D:void 0,R=F===void 0?D:void 0;F??=V,R??=V;let m=B.makeContentKey(F,R),b=J(E,m);return[V,b]})}},["join","entries"]);switch(Q.cardinality){case"1:1":{let D=K(),J=`${G}KeyOf${U(_)}`,j=`${_}KeyOf${U(G)}`,P={[J]:D,[j]:D},V;if(Z){let F=d(),R=`${G}EntryOf${U(_)}`,m=`${_}EntryOf${U(G)}`,b={[R]:F,[m]:F};V=Object.assign(P,b)}else V=P;this.relations=B,this.states=V;break}case"1:n":{let D=K(),J=l(),j=`${G}KeyOf${U(_)}`,P=`${_}KeysOf${U(G)}`,V={[j]:D,[P]:J},F;if(Z){let R=d(),m=T(),b=`${G}EntryOf${U(_)}`,Q0=`${_}EntriesOf${U(G)}`,p={[b]:R,[Q0]:m};F=Object.assign(V,p)}else F=V;this.relations=B,this.states=F;break}case"n:n":{let D=l(),J=`${G}KeysOf${U(_)}`,j=`${_}KeysOf${U(G)}`,P={[J]:D,[j]:D},V;if(Z){let F=T(),R=`${G}EntriesOf${U(_)}`,m=`${_}EntriesOf${U(G)}`,b={[R]:F,[m]:F};V=Object.assign(P,b)}else V=P;this.relations=B,this.states=V}}}};function p0(Q,Z){let Y=Z.joins.get(Q.key);if(Y===void 0){let _=w.STORE.joins.get(Q.key);if(_===void 0)throw new Error(`Join "${Q.key}" not found in store "${Z.config.name}"`);Y=new A0(_.options,_.defaultContent,Z),Z.joins.set(Q.key,Y)}return Y}function q0(Q,Z,Y){let G=p0(Q,Y),_=O(Y);if(x(_)){let{toolkit:X}=_.transactionMeta;G.transact(X,({relations:W})=>{Z(W)})}else Z(G.relations)}function WQ(Q,Z,Y){let G=p0(Q,Y),_;switch(Q.cardinality){case"1:1":{let X=`${Q.a}KeyOf${U(Q.b)}`,W=`${Q.b}KeyOf${U(Q.a)}`;_={get[X](){let H=G.states[X];return $(Y,H,Z)},get[W](){let H=G.states[W];return $(Y,H,Z)}};let q=`${Q.a}EntryOf${U(Q.b)}`;if(q in G.states){let H=`${Q.b}EntryOf${U(Q.a)}`;Object.assign(_,{get[q](){let N=G.states[q];return $(Y,N,Z)},get[H](){let N=G.states[H];return $(Y,N,Z)}})}break}case"1:n":{let X=`${Q.a}KeyOf${U(Q.b)}`,W=`${Q.b}KeysOf${U(Q.a)}`;_={get[X](){let H=G.states[X];return $(Y,H,Z)},get[W](){let H=G.states[W];return $(Y,H,Z)}};let q=`${Q.a}EntryOf${U(Q.b)}`;if(q in G.states){let H=`${Q.b}EntriesOf${U(Q.a)}`;Object.assign(_,{get[q](){let N=G.states[q];return $(Y,N,Z)},get[H](){let N=G.states[H];return $(Y,N,Z)}})}break}case"n:n":{let X=`${Q.a}KeysOf${U(Q.b)}`,W=`${Q.b}KeysOf${U(Q.a)}`;_={get[X](){let H=G.states[X];return $(Y,H,Z)},get[W](){let H=G.states[W];return $(Y,H,Z)}};let q=`${Q.a}EntriesOf${U(Q.b)}`;if(q in G.states){let H=`${Q.b}EntriesOf${U(Q.a)}`;Object.assign(_,{get[q](){let N=G.states[q];return $(Y,N,Z)},get[H](){let N=G.states[H];return $(Y,N,Z)}})}}}return _}function qQ(Q,Z){return p0(Q,Z).core.relatedKeysAtoms}function JZ(Q){return Q.startsWith("\uD83D\uDD0D ")}var EZ=class extends Map{set(Q,Z){if(this.has(Q))return console.warn("Tried to set a key that already exists in an InvariantMap",{key:Q,value:Z}),this;return super.set(Q,Z)}clear(){throw new Error("Cannot clear an InvariantMap")}},G1=class Q{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(Z){this.key=Z}static existing=new EZ;static create(Z,Y){let G=new Q(Z),{type:_,globals:X,actions:W,perspectives:q}=Y(G),H={type:_,key:Z,globals:X,actions:W,perspectives:q};return Q.existing.set(Z,H),H}add(...Z){switch(Z[0].type){case"atom":case"mutable_atom":this.globals.push(...Z);break;case"transaction":this.actions.push(...Z);break;case"atom_family":case"mutable_atom_family":{let[G,_]=Z;this.perspectives.push({type:"realtime_perspective",resourceAtoms:G,viewAtoms:_})}break}return this}};var _1=r({key:"usersInRoomIndex",mutable:!0,default:()=>new f,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),y0=r({key:"roomIndex",default:()=>new f,mutable:!0,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),CZ={enteredAtEpoch:0},z0=M0({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(Q)=>typeof Q==="string",isBType:(Q)=>typeof Q==="string"},CZ),X1=J0({key:"usersInMyRoomView",get:(Q)=>({find:Z})=>{let Y=s0(z0);return[Z(Y,Q)]}});import{spawn as PZ}from"child_process";var l0=class{listeners;globalListeners;handleEvent(Q,...Z){for(let G of this.globalListeners)G(Q,...Z);let Y=this.listeners.get(Q);if(Y)for(let G of Y)G(...Z)}id="no_id_retrieved";emit;constructor(Q){this.emit=Q,this.listeners=new Map,this.globalListeners=new Set}on(Q,Z){let Y=this.listeners.get(Q);if(Y)Y.add(Z);else this.listeners.set(Q,new Set([Z]));return this}onAny(Q){return this.globalListeners.add(Q),this}off(Q,Z){let Y=this.listeners.get(Q);if(Y)if(Z)Y.delete(Z);else this.listeners.delete(Q);return this}offAny(Q){return this.globalListeners.delete(Q),this}},OZ=class extends l0{incompleteData="";unprocessedEvents=[];incompleteLog="";unprocessedLogs=[];id="#####";process;key;logger;handleLog(Q){if(Array.isArray(Q)){let[Z,...Y]=Q;switch(Z){case"i":this.logger.info(...Y);break;case"w":this.logger.warn(...Y);break;case"e":this.logger.error(...Y);break;default:return}}}constructor(Q,Z,Y){super((G,..._)=>{let X=JSON.stringify([G,..._])+"\x03",W=(q)=>{if(q.code==="EPIPE")console.error("EPIPE error during write",this.process.stdin);this.process.stdin.removeListener("error",W)};return this.process.stdin.once("error",W),this.process.stdin.write(X),this});if(this.process=Q,this.key=Z,this.logger=Y??{info:(...G)=>{console.info(this.id,this.key,...G)},warn:(...G)=>{console.warn(this.id,this.key,...G)},error:(...G)=>{console.error(this.id,this.key,...G)}},this.process.stdout.on("data",(G)=>{let _=G.toString();if(_==="ALIVE")return;this.unprocessedEvents.push(..._.split("\x03"));let X=this.unprocessedEvents.shift();this.incompleteData+=X??"";try{if(this.incompleteData.startsWith("error"))console.log("\u2757",this.incompleteData);let W=v(this.incompleteData);this.handleEvent(...W);while(this.unprocessedEvents.length>0){let q=this.unprocessedEvents.shift();if(q){if(this.unprocessedEvents.length===0)this.incompleteData=q;W=v(q),this.handleEvent(...W)}}this.incompleteData=""}catch(W){console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.warn(this.incompleteData),console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.error(W)}}),this.process.stderr.on("data",(G)=>{let _=G.toString();this.unprocessedLogs.push(..._.split("\x03"));let X=this.unprocessedLogs.shift();this.incompleteLog+=X??"";try{let W=v(this.incompleteLog);this.handleLog(W);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)W=v(this.incompleteLog),this.handleLog(W)}catch(W){console.error("\u274C\u274C\u274C"),console.error(this.incompleteLog),console.error(W),console.error("\u274C\u274C\u274C\uFE0F")}}),Q.pid)this.id=Q.pid.toString()}},BZ=class extends l0{in;out;id="no_id_retrieved";disposalFunctions=[];constructor(Q){super((...Z)=>{return this.out.next(Z),this});this.id=Q,this.in=new I,this.out=new I,this.in.subscribe("socket",(Z)=>{this.handleEvent(...Z)})}dispose(){for(let Q of this.disposalFunctions)Q()}},hQ=class extends l0{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...Q){this.process.stderr.write(h(Q.map((Z)=>Z instanceof f?`{ ${Z.toJSON().members.join(" | ")} }`:Z))+"\x03")}logger={info:(...Q)=>{this.log("i",...Q)},warn:(...Q)=>{this.log("w",...Q)},error:(...Q)=>{this.log("e",...Q)}};constructor(){super((Q,...Z)=>{let Y=JSON.stringify([Q,...Z]);return this.process.stdout.write(Y+"\x03"),this});if(this.process=process,this.process.stdin.resume(),this.relays=new Map,this.relayServices=[],this.process.stdin.on("data",(Q)=>{let Z=Q.toString();this.unprocessedEvents.push(...Z.split("\x03"));let Y=this.unprocessedEvents.shift();this.incompleteData+=Y??"";try{let G=v(this.incompleteData);this.logger.info("\uD83C\uDFB0","received",G),this.handleEvent(...G);while(this.unprocessedEvents.length>0){let _=this.unprocessedEvents.shift();if(_){if(this.unprocessedEvents.length===0)this.incompleteData=_;let X=v(_);this.handleEvent(...X)}}this.incompleteData=""}catch(G){if(G instanceof Error)this.logger.error("\u2757",G.message,G.cause,G.stack)}}),this.on("exit",()=>{this.logger.info("\uD83D\uDD25",this.id,'received "exit"'),process.exit(0)}),process.on("exit",(Q)=>{this.logger.info("\uD83D\uDD25",this.id,`exited with code ${Q}`)}),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",(Q)=>{this.logger.info("\uD83D\uDC64","user",Q,"joined");let Z=new BZ(`user:${Q}`);this.relays.set(Q,Z),this.logger.info("\uD83D\uDD17","attaching services:",`[${[...this.relayServices.keys()].join(", ")}]`);for(let Y of this.relayServices){let G=Y(Z);if(G)Z.disposalFunctions.push(G)}this.on(`user:${Q}`,(...Y)=>{Z.in.next(Y)}),Z.out.subscribe("socket",(Y)=>{this.emit(...Y)})}),this.on("user-leaves",(Q)=>{let Z=this.relays.get(Q);if(this.off(`relay:${Q}`),Z)Z.dispose(),this.relays.delete(Q)}),process.stdout.write("ALIVE")}relay(Q){this.logger.info("\uD83D\uDD17","running relay method"),this.relayServices.push(Q)}},IQ=_0({key:"roomArguments",default:["echo",["Hello World!"]]}),jZ=J0({key:"room",get:(Q)=>async({get:Z,find:Y})=>{let G=Y(IQ,Q),_=Z(G),[X,W]=_,q=await new Promise((H)=>{let N=PZ(X,W,{env:process.env}),z=(L)=>{if(L.toString()==="ALIVE")N.stdout.off("data",z),H(N)};N.stdout.on("data",z)});return new OZ(q,Q)}}),E1=X0({key:"createRoom",do:({get:Q,set:Z,find:Y},G,_,X)=>{let W=X?[_,X]:[_],q=Y(IQ,G);Z(q,W),Z(y0,(z)=>z.add(G));let H=Y(jZ,G);return Q(H)}}),C1=X0({key:"joinRoom",do:(Q,Z,Y,G)=>{let _={enteredAtEpoch:G};return q0(z0,(X)=>{X.set({room:Z,user:Y},_)},Q.env().store),_}}),P1=X0({key:"leaveRoom",do:(Q,Z,Y)=>{q0(z0,(G)=>{G.delete({room:Z,user:Y})},Q.env().store)}}),O1=X0({key:"destroyRoom",do:(Q,Z)=>{q0(z0,(Y)=>{Y.delete({room:Z})},Q.env().store),Q.set(y0,(Y)=>(Y.delete(Z),Y))}});var B1=_0({key:"redactor",default:{occlude:(Q)=>Q}}),j1=_0({key:"unacknowledgedUpdates",default:()=>[]}),V1=_0({key:"sockets",default:null}),$1=r({key:"socketsIndex",mutable:!0,default:()=>new f,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),F1=r({key:"usersIndex",mutable:!0,default:()=>new f,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),h1=M0({key:"usersOfSockets",between:["user","socket"],cardinality:"1:1",isAType:(Q)=>Q.startsWith("user::"),isBType:(Q)=>Q.startsWith("socket::")});var D0=new hQ;Object.assign(console,D0.logger,{log:D0.logger.info});D0.on("timeToStop",function Q(){D0.logger.info("\uD83D\uDEEC game worker exiting"),process.exit(0)});D0.logger.info("\uD83D\uDEEB game worker ready");
16
+ ${M.trace}`:`No previous disposal trace for ${q} was found.`),Y}let N=Q.moleculeGraph.getRelationEntries({downstreamMoleculeKey:W.stringKey}).filter(([,{source:M}])=>M!==_).map(([M])=>v(M));if(G)X.moleculeGraph.delete(_);X.moleculeGraph.set({upstreamMoleculeKey:H.stringKey,downstreamMoleculeKey:W.stringKey},{source:H.stringKey});let z={type:"molecule_transfer",key:W.key,from:N,to:[H.key]};if(x(X)&&X.transactionMeta.phase==="building")X.transactionMeta.update.updates.push(z);return Y}function tQ(Q,Z,Y){switch(Z){case"newValue":{BQ(Q,Y);break}case"oldValue":{a(Y,Q.token);break}}}function eQ(Q,Z,Y){switch(Z){case"newValue":{a(Y,Q.token);break}case"oldValue":{if(BQ(Q,Y),Q.subType==="atom")Y.valueMap.set(Q.token.key,Q.value);break}}}function BQ(Q,Z){let{family:Y}=Q.token;if(Y){let G=Z.families.get(Y.key);if(G)$(Z,G,v(Y.subKey))}}function QZ(Q,Z,Y){switch(Z){case"newValue":o(Y,Q.provenance,Q.key);break;case"oldValue":t(Y,Q.key);break}}function ZZ(Q,Z,Y){switch(Z){case"newValue":t(Y,Q.key);break;case"oldValue":{let G=Q.provenance.map(v);o(Y,G,Q.key);for(let[_,X]of Q.values){let W=Y.families.get(_);if(W){$(Y,W,Q.key);let q=`${_}(${h(Q.key)})`;Y.valueMap.set(q,X)}}}break}}function YZ(Q,Z,Y){switch(Z){case"newValue":{let G=Q.to.length===1?Q.to[0]:Q.to;q0(Y,G,Q.key,"exclusive")}break;case"oldValue":{let G=Q.from.length===1?Q.from[0]:Q.from;q0(Y,G,Q.key,"exclusive")}break}}function jQ(Q,Z,Y){let G=Q==="newValue"?Z.updates:[...Z.updates].reverse();for(let _ of G)switch(_.type){case"atom_update":case"selector_update":sQ(Q,_,Y);break;case"state_creation":tQ(_,Q,Y);break;case"state_disposal":eQ(_,Q,Y);break;case"molecule_creation":QZ(_,Q,Y);break;case"molecule_disposal":ZZ(_,Q,Y);break;case"molecule_transfer":YZ(_,Q,Y);break;case"transaction_update":jQ(Q,_,Y);break}}function VQ(Q,Z){return Q.transactionMeta.actionContinuities.getRelatedKey(Z)}function GZ(Q,Z){return Q.transactionMeta.epoch.get(Z)}function _Z(Q,Z){if(!y(Q))return;let G=VQ(Q,Z);if(G===void 0)return;return GZ(Q,G)}function XZ(Q,Z,Y){if(!y(Q))return;let _=VQ(Q,Z);if(_!==void 0)Q.transactionMeta.epoch.set(_,Y)}var WZ=(Q,Z)=>{let Y=O(Z),{parent:G}=Y;if(G===null||!x(Y)||Y.transactionMeta?.phase!=="building"){Z.logger.warn("\uD83D\uDC1E","transaction","???","applyTransaction called outside of a transaction. This is probably a bug in AtomIO.");return}Y.transactionMeta.phase="applying",Y.transactionMeta.update.output=Q,G.child=null,G.on.transactionApplying.next(Y.transactionMeta);let{updates:_}=Y.transactionMeta.update;if(Z.logger.info("\uD83D\uDEC4","transaction",Y.transactionMeta.update.key,`Applying transaction with ${_.length} updates:`,_),jQ("newValue",Y.transactionMeta.update,G),y(G))XZ(G,Y.transactionMeta.update.key,Y.transactionMeta.update.epoch),A(Z,{key:Y.transactionMeta.update.key,type:"transaction"})?.subject.next(Y.transactionMeta.update),Z.logger.info("\uD83D\uDEEC","transaction",Y.transactionMeta.update.key,"Finished applying transaction.");else if(x(G))G.transactionMeta.update.updates.push(Y.transactionMeta.update);G.on.transactionApplying.next(null)};function qZ(Q){return{store:Q}}function k(Q,...Z){let Y,G,_;if(Z.length===1)Y=Z[0];else G=Z[0],_=Z[1],Y=$(Q,G,_);if("counterfeit"in Y&&"family"in Y){G=Q.families.get(Y.family.key);let X=Y.family.subKey,W=Q.disposalTraces.buffer.find((q)=>q?.key===X);switch(Q.logger.error("\u274C",Y.type,Y.key,`could not be retrieved because it was not found in the store "${Q.config.name}".`,W?`This state was previously disposed:
17
+ ${W.trace}`:"No previous disposal trace was found."),G.type){case"atom_family":case"mutable_atom_family":return Q.defaults.get(G.key);case"readonly_pure_selector_family":case"writable_pure_selector_family":case"readonly_held_selector_family":case"writable_held_selector_family":{if(Q.defaults.has(G.key))return Q.defaults.get(Y.family.key);let q=A(Q,G).default(X);return Q.defaults.set(G.key,q),q}}}return O0(Q,A(Q,Y))}var c=class extends Map{deleted=new Set;source;constructor(Q){super();this.source=Q}get(Q){if(super.has(Q))return super.get(Q);if(!this.deleted.has(Q)&&this.source.has(Q))return this.source.get(Q);return}set(Q,Z){return this.deleted.delete(Q),super.set(Q,Z)}hasOwn(Q){return super.has(Q)}has(Q){return!this.deleted.has(Q)&&(super.has(Q)||this.source.has(Q))}delete(Q){return this.deleted.add(Q),super.delete(Q)}},HZ=(Q,Z,Y,G)=>{let _=O(Q),X={parent:_,child:null,on:_.on,loggers:_.loggers,logger:_.logger,config:_.config,atoms:new c(_.atoms),atomsThatAreDefault:new Set(_.atomsThatAreDefault),families:new c(_.families),joins:new c(_.joins),operation:{open:!1},readonlySelectors:new c(_.readonlySelectors),timelines:new c(_.timelines),timelineTopics:new S(_.timelineTopics.toJSON()),trackers:new Map,transactions:new c(_.transactions),selectorAtoms:new S(_.selectorAtoms.toJSON()),selectorGraph:new S(_.selectorGraph.toJSON(),{makeContentKey:(...N)=>N.sort().join(":")}),writableSelectors:new c(_.writableSelectors),valueMap:new c(_.valueMap),defaults:_.defaults,disposalTraces:Q.disposalTraces.copy(),molecules:new c(_.molecules),moleculeGraph:new S(_.moleculeGraph.toJSON(),{makeContentKey:_.moleculeGraph.makeContentKey}),moleculeData:new S(_.moleculeData.toJSON(),{makeContentKey:_.moleculeData.makeContentKey}),moleculeJoins:new S(_.moleculeJoins.toJSON(),{makeContentKey:_.moleculeJoins.makeContentKey}),miscResources:new c(_.miscResources)},W=_Z(Q,Z),q={phase:"building",update:{type:"transaction_update",key:Z,id:G,epoch:W===void 0?NaN:W+1,updates:[],params:Y,output:void 0},toolkit:{get:(...N)=>k(H,...N),set:(...N)=>{g(H,...N)},reset:(...N)=>{s(H,...N)},run:(N,z=e0())=>I0(H,N,z),find:(...N)=>$(Q,...N),json:(N)=>n(H,N),dispose:(...N)=>{a(H,...N)},env:()=>qZ(H)}},H=Object.assign(X,{transactionMeta:q});return _.child=H,Q.logger.info("\uD83D\uDEEB","transaction",Z,"Building transaction with params:",Y),H};function U0(Q,Z){let{key:Y}=Z,G=Q.transactions.has(Y),_={key:Y,type:"transaction",run:(q,H)=>{let N=HZ(Q,Y,q,H);try{let z=O(Q),{toolkit:L}=N.transactionMeta,M=Z.do(L,...q);return WZ(M,z),M}catch(z){throw mQ(X),Q.logger.warn("\uD83D\uDCA5","transaction",Y,"caught:",z),z}},install:(q)=>U0(q,Z),subject:new I},X=O(Q);X.transactions.set(Y,_);let W=Q0(_);if(!G)Q.on.transactionCreation.next(W);return W}var _Q=class{parent=null;child=null;valueMap=new Map;defaults=new Map;atoms=new Map;writableSelectors=new Map;readonlySelectors=new Map;atomsThatAreDefault=new Set;selectorAtoms=new S({between:["selectorKey","atomKey"],cardinality:"n:n"});selectorGraph=new S({between:["upstreamSelectorKey","downstreamSelectorKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});trackers=new Map;families=new Map;joins=new Map;transactions=new Map;transactionMeta={epoch:new Map,actionContinuities:new S({between:["continuity","action"],cardinality:"1:n"})};timelines=new Map;timelineTopics=new S({between:["timelineKey","topicKey"],cardinality:"1:n"});disposalTraces=new fQ(100);molecules=new Map;moleculeJoins=new S({between:["moleculeKey","joinKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});moleculeGraph=new S({between:["upstreamMoleculeKey","downstreamMoleculeKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});moleculeData=new S({between:["moleculeKey","stateFamilyKey"],cardinality:"n:n"},{makeContentKey:(...Q)=>Q.sort().join(":")});miscResources=new Map;on={atomCreation:new I,atomDisposal:new I,selectorCreation:new I,selectorDisposal:new I,timelineCreation:new I,transactionCreation:new I,transactionApplying:new dQ(null),operationClose:new I,moleculeCreation:new I,moleculeDisposal:new I};operation={open:!1};config={name:"IMPLICIT_STORE",lifespan:"ephemeral"};loggers=[new o0("warn",(Q,Z,Y)=>!JZ(Y))];logger={error:(...Q)=>{for(let Z of this.loggers)Z.error(...Q)},info:(...Q)=>{for(let Z of this.loggers)Z.info(...Q)},warn:(...Q)=>{for(let Z of this.loggers)Z.warn(...Q)}};constructor(Q,Z=null){if(this.config={...Z?.config,...Q},Z!==null){if(this.valueMap=new Map(Z?.valueMap),this.operation={...Z?.operation},y(Z))this.transactionMeta={epoch:new Map(Z?.transactionMeta.epoch),actionContinuities:new S(Z?.transactionMeta.actionContinuities.toJSON())};for(let[,G]of Z.families){if(G.internalRoles?.includes("mutable")||G.internalRoles?.includes("join"))continue;G.install(this)}let Y=new Set;for(let[,G]of Z.atoms){if(Y.has(G.key))continue;if(G.install(this),G.type==="mutable_atom"){let _=n(Z,G),X=u0(G);Y.add(_.key),Y.add(X.key)}}for(let[,G]of Z.readonlySelectors)G.install(this);for(let[,G]of Z.writableSelectors){if(Y.has(G.key))continue;G.install(this)}for(let[,G]of Z.transactions)G.install(this);for(let[,G]of Z.timelines)G.install(this)}}},w={get STORE(){return globalThis.ATOM_IO_IMPLICIT_STORE??=new _Q({name:"IMPLICIT_STORE",lifespan:"ephemeral"}),globalThis.ATOM_IO_IMPLICIT_STORE}};function A(Q,Z){let Y,G=Q;while(G!==null){switch(Z.type){case"atom":case"mutable_atom":Y=G.atoms.get(Z.key);break;case"writable_pure_selector":case"writable_held_selector":Y=G.writableSelectors.get(Z.key);break;case"readonly_pure_selector":case"readonly_held_selector":Y=G.readonlySelectors.get(Z.key);break;case"atom_family":case"mutable_atom_family":case"writable_pure_selector_family":case"readonly_pure_selector_family":case"writable_held_selector_family":case"readonly_held_selector_family":Y=G.families.get(Z.key);break;case"timeline":Y=G.timelines.get(Z.key);break;case"transaction":Y=G.transactions.get(Z.key);break}if(Y)return Y;G=G.child}throw new v0(Z,Q)}var NZ=(Q,Z)=>{let Y=O(Q);if(Y.operation.open)return Y.operation.prev.get(Z.key);return Y.valueMap.get(Z.key)};var NQ=(Q,Z)=>{let Y=O(Q);return JQ(Z,Q).map((_)=>{return _.subject.subscribe(`${Z.type}:${Z.key}`,(X)=>{Q.logger.info("\uD83D\uDCE2",Z.type,Z.key,"root",_.key,"went",X.oldValue,"->",X.newValue);let W=NZ(Y,Z),q=O0(Y,Z);Q.logger.info("\u2728",Z.type,Z.key,"went",W,"->",q),Z.subject.next({newValue:q,oldValue:W})})})};function N0(Q,Z,Y,G){function _(L){if(Q.operation.open){let M=Q.on.operationClose.subscribe(`state subscription ${Y}`,()=>{M(),G(L)})}else G(L)}let X=A(Q,Z);Q.logger.info("\uD83D\uDC40",X.type,X.key,`Adding subscription "${Y}"`);let W=X.type==="writable_pure_selector"||X.type==="readonly_pure_selector",q=null,H=_;if(W)q=NQ(Q,X),H=(L)=>{if(q)q.length=0,q.push(...NQ(Q,X));_(L)};let N=X.subject.subscribe(Y,H);return()=>{if(Q.logger.info("\uD83D\uDE48",X.type,X.key,`Removing subscription "${Y}"`),N(),q)for(let L of q)L()}}var zZ=(Q,Z,Y,G)=>{let _=A(Q,Z);Q.logger.info("\uD83D\uDC40","timeline",Z.key,`Adding subscription "${Y}"`);let X=_.subject.subscribe(Y,G);return()=>{Q.logger.info("\uD83D\uDE48","timeline",Z.key,`Removing subscription "${Y}" from timeline`),X()}};var m0=class{initializeState(Q,Z){let Y=`*${Q.key}`;Z.atoms.delete(Y),Z.valueMap.delete(Y);let G=Q.family?{key:`*${Q.family.key}`,subKey:Q.family.subKey}:void 0,_=V0(Z,{key:Y,default:null},G);if(Z.parent?.valueMap.has(Y)){let X=Z.parent.valueMap.get(Y);Z.valueMap.set(Y,X)}return _}unsubscribeFromInnerValue;unsubscribeFromState;observeCore(Q,Z,Y){let G=`tracker:${Y.config.name}:${x(Y)?Y.transactionMeta.update.key:"main"}:${Q.key}`,_=k(Y,Q);this.unsubscribeFromInnerValue=_.subscribe(G,(X)=>{g(Y,Z,X)}),this.unsubscribeFromState=N0(Y,Q,G,(X)=>{if(X.newValue!==X.oldValue)this.unsubscribeFromInnerValue(),this.unsubscribeFromInnerValue=X.newValue.subscribe(G,(W)=>{g(Y,Z,W)})})}updateCore(Q,Z,Y){let G=`tracker:${Y.config.name}:${x(Y)?Y.transactionMeta.update.key:"main"}:${Q.key}`;N0(Y,Z,G,({newValue:_,oldValue:X})=>{let W=Y.timelineTopics.getRelatedKey(Z.key);if(W){if(Y.timelines.get(W)?.timeTraveling){let N=zZ(Y,{key:W,type:"timeline"},G,(z)=>{N(),g(Y,Q,(L)=>{if(z==="redo"&&_)L.do(_);else if(z==="undo"&&X)L.undo(X);return L})});return}}let q=Y.on.operationClose.subscribe(G,()=>{q();let H=k(Y,Q),N=_===null?-1:H.getUpdateNumber(_),z=N-H.cacheUpdateNumber;if(_&&z===1)g(Y,Q,(L)=>(L.do(_),L));else Y.logger.info("\u274C","mutable_atom",Q.key,`could not be updated. Expected update number ${H.cacheUpdateNumber+1}, but got ${N}`)})})}mutableState;latestUpdateState;[Symbol.dispose];constructor(Q,Z){this.mutableState=Q;let Y=O(Z);this.latestUpdateState=this.initializeState(Q,Y),this.observeCore(Q,this.latestUpdateState,Y),this.updateCore(Q,this.latestUpdateState,Y),Y.trackers.set(Q.key,this),this[Symbol.dispose]=()=>{this.unsubscribeFromInnerValue(),this.unsubscribeFromState(),Y.trackers.delete(Q.key)}}};function k0(Q,Z,Y){Q.logger.info("\uD83D\uDD28","atom",Z.key,`creating in store "${Q.config.name}"`);let G=O(Q),{key:_,default:X}=Z,W=G.atoms.get(_),q="mutable_atom";if(W&&W.type===q)return Q.logger.error("\u274C",q,_,"Tried to create atom, but it already exists in the store."),Q0(W);let H=new I,N={...Z,type:q,install:(M)=>{return M.logger.info("\uD83D\uDEE0\uFE0F","atom",_,`installing in store "${M.config.name}"`),k0(M,Z,Y)},subject:H};if(Y)N.family=Y;let z=X();G.atoms.set(N.key,N),u(G,_,z,H);let L=Q0(N);if(Z.effects){let M=0,C=[];for(let E of Z.effects){let B=E({resetSelf:()=>{s(Q,L)},setSelf:(K)=>{g(Q,L,K)},onSet:(K)=>N0(Q,L,`effect[${M}]`,K)});if(B)C.push(B);++M}N.cleanup=()=>{for(let E of C)E()}}if(new m0(L,Q),!Y)r0(L,Z,Q);return L}var DZ=class{trackers=new Map;latestUpdateAtoms;mutableAtoms;constructor(Q,Z){let Y=B0(Z,{key:`*${Q.key}`,default:null},["mutable","updates"]);this.latestUpdateAtoms=A(Z,Y),this.mutableAtoms=Q,this.mutableAtoms.subject.subscribe(`store=${Z.config.name}::tracker-atom-family`,(G)=>{let{type:_,token:X}=G;if(X.family){let W=v(X.family.subKey);switch(_){case"state_creation":this.trackers.set(W,new m0(X,Z));break;case"state_disposal":{let q=this.trackers.get(W);if(q)q[Symbol.dispose](),this.trackers.delete(W)}break}}})}};function c0(Q,Z,Y){let G={key:Z.key,type:"mutable_atom_family"},_=Q.families.get(Z.key);if(_)Q.logger.error("\u2757","mutable_atom_family",Z.key,`Overwriting an existing ${i(_)} "${_.key}" in store "${Q.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);let X=new I,q=Object.assign((H)=>{let N=h(H),z={key:Z.key,subKey:N},L=`${Z.key}(${N})`,M=O(Q),C={key:L,default:()=>Z.default(H),toJson:Z.toJson,fromJson:Z.fromJson,mutable:!0};if(Z.effects)C.effects=Z.effects(H);let E=k0(M,C,z);return X.next({type:"state_creation",token:E}),E},G,{subject:X,install:(H)=>c0(H,Z),toJson:Z.toJson,fromJson:Z.fromJson,internalRoles:Y});return Q.families.set(Z.key,q),a0(Q,q,Z),new DZ(q,Q),G}var zQ=(Q,Z)=>{let Y=O(Z),G=`${Q.key}:JSON`;return Y.families.get(G)},n=(Q,Z)=>{if(Z.family){let G=O(Q),X={key:`${Z.family.key}:JSON`,type:"writable_pure_selector_family"},W=A(G,X),q=JSON.parse(Z.family.subKey);return $(Q,W,q)}return{type:"writable_pure_selector",key:`${Z.key}:JSON`}};var u0=(Q)=>{let Y={type:"atom",key:`*${Q.key}`};if(Q.family)Y.family={key:`*${Q.family.key}`,subKey:Q.family.subKey};return Y};function LZ(Q){return typeof Q==="object"&&Q!==null&&"do"in Q&&"undo"in Q&&"subscribe"in Q}function T0(Q,Z,Y){let G=Y.valueMap.get(Z.key),_=Q.valueMap.get(Z.key);if(G!==_)return _;if(G===void 0)return Z.default();Y.logger.info("\uD83D\uDCC3","atom",Z.key,"copying");let X=Z.toJson(G),W=Z.fromJson(X);return Q.valueMap.set(Z.key,W),new m0(Z,Y),W}function u(Q,Z,Y,G){let _=Q.valueMap.get(Z);if(_ instanceof w0){let X=_;if(Y instanceof Promise)return X;return Q.valueMap.set(Z,Y),Y}if(Y instanceof Promise){let X=new w0(Y);return Q.valueMap.set(Z,X),X.then((W)=>{if(Q.valueMap.get(Z)===X){u(Q,Z,W,G);let H=Q.atoms.get(Z);if(H)C0(Q,H),R0(Q,H),P0(Q);else{let N=Q.writableSelectors.get(Z)??Q.readonlySelectors.get(Z);if(N)C0(Q,N),cQ(Q,N),P0(Q)}G.next({newValue:W,oldValue:X})}}).catch((W)=>{Q.logger.error("\uD83D\uDCA5","state",Z,"rejected:",W)}),X}return Q.valueMap.set(Z,Y),Y}var MZ=(Q,Z)=>{let Y=Z.valueMap.get(Q.key);if(Q.type==="mutable_atom"&&x(Z)){let{parent:G}=Z;Y=T0(Z,Q,G)}return Y},$Q=(Q,Z)=>{let Y=Z.valueMap.get(Q);if(Y instanceof w0){let G=Y,_=Z.writableSelectors.get(Q)??Z.readonlySelectors.get(Q);if(_)G.use(_.get());return}if(Z.operation.open)Z.operation.prev.set(Q,Y);Z.valueMap.delete(Q),Z.logger.info("\uD83D\uDDD1","state",Q,"evicted")};function V0(Q,Z,Y){let{key:_,default:X}=Z;Q.logger.info("\uD83D\uDD28","atom",_,`creating in store "${Q.config.name}"`);let W=O(Q),q=W.atoms.get(_);if(q&&q.type==="atom")return Q.logger.error("\u274C","atom",_,"Tried to create atom, but it already exists in the store."),Q0(q);let H=new I,N={...Z,type:"atom",install:(M)=>{return M.logger.info("\uD83D\uDEE0\uFE0F","atom",_,`installing in store "${M.config.name}"`),V0(M,Z,Y)},subject:H};if(Y)N.family=Y;let z=X;if(X instanceof Function)z=X();W.atoms.set(_,N),u(W,_,z,H);let L=Q0(N);if(Z.effects){let M=0,C=[];for(let E of Z.effects){let B=E({resetSelf:()=>{s(Q,L)},setSelf:(K)=>{g(Q,L,K)},onSet:(K)=>N0(Q,L,`effect[${M}]`,K)});if(B)C.push(B);++M}N.cleanup=()=>{for(let E of C)E()}}return L}function XQ(Q,Z){if("mutable"in Z){let _=k0(Q,Z,void 0);return Q.on.atomCreation.next(_),_}let G=V0(Q,Z,void 0);return Q.on.atomCreation.next(G),G}function FQ(Q,Z){let Y=O(Q),{key:G,family:_}=Z,X=A(Y,Z);if(!_)Q.logger.error("\u274C","atom",G,"Standalone atoms cannot be disposed.");else{X.cleanup?.();let W=Q.valueMap.get(X.key),q=A(Q,{key:_.key,type:"atom_family"}),H={type:"state_disposal",subType:"atom",token:Z,value:W};q.subject.next(H);let N=x(Y);if(Y.atoms.delete(G),Y.valueMap.delete(G),Y.selectorAtoms.delete(G),Y.atomsThatAreDefault.delete(G),Q.timelineTopics.delete(G),Z.type==="mutable_atom"){let z=u0(Z);FQ(Q,z),Q.trackers.delete(G)}if(Q.logger.info("\uD83D\uDD25","atom",G,"deleted"),N&&Y.transactionMeta.phase==="building"){let z=Y.transactionMeta.update.updates.at(-1);if(!(z?.type==="molecule_disposal"&&z.values.some(([C])=>C===X.family?.key)))Y.transactionMeta.update.updates.push(H)}else Q.on.atomDisposal.next(Z)}}var A0=class{toolkit;options;defaultContent;molecules=new Map;relations;states;core;transact(Q,Z){let Y=this.toolkit;this.toolkit=Q,Z(this),this.toolkit=Y}store;realm;[Symbol.dispose](){}constructor(Q,Z,Y=w.STORE){this.store=Y,this.realm=new t0(Y),this.options=Q,this.defaultContent=Z,this.store.miscResources.set(`join:${Q.key}`,this),this.realm.allocate("root",Q.key),this.toolkit={get:(...D)=>k(Y,...D),set:(...D)=>{g(Y,...D)},find:(...D)=>$(Y,...D),json:(D)=>n(Y,D)};let G=Q.between[0],_=Q.between[1],X=c0(Y,{key:`${Q.key}/relatedKeys`,default:()=>new f,mutable:!0,fromJson:(D)=>f.fromJSON(D),toJson:(D)=>D.toJSON()},["join","relations"]);this.core={relatedKeysAtoms:X};let W=({get:D},J)=>D(X,J),q=({set:D},J,j)=>{if(!this.store.molecules.has(h(J)))this.realm.allocate(Q.key,J);D(X,J,(P)=>P.add(j)),D(X,j,(P)=>P.add(J))},H=({set:D},J,j)=>{D(X,J,(P)=>{return P.delete(j),P}),D(X,j,(P)=>{return P.delete(J),P})},N=(D,J,j)=>{let{find:P,get:V,set:F}=D,R=P(X,J),m=V(R);for(let b of m){if(j.includes(b))continue;F(X,b,(p)=>{return p.delete(J),p})}F(R,(b)=>{return b.transaction((Z0)=>{Z0.clear();for(let p of j){let Y0=W(D,p),i0=Y0.has(J);if(this.relations.cardinality==="1:n"){let n0=[];for(let G0 of Y0){if(G0===J)continue;let _0=W(D,G0);if(_0.delete(p),_0.size===0)n0.push(G0)}if(!i0&&Y0.size>0)Y0.clear();for(let G0 of n0){let _0=[p,G0].sort(),UQ=`"${_0[0]}:${_0[1]}"`;this.molecules.delete(UQ)}}if(!i0)Y0.add(J);Z0.add(p)}return!0}),b})},z=(D,J,j)=>{let{set:P}=D;P(X,J,(V)=>{return V.transaction((F)=>{for(let R of j)F.add(R);return!0}),V});for(let V of j)P(X,V,(F)=>{return F.add(J),F});return!0},L=(D,J,j)=>{let P=W(D,J);return j?P.has(j):P.size>0},M={getRelatedKeys:(D)=>W(this.toolkit,D),addRelation:(D,J)=>{this.store.moleculeJoins.set(D,Q.key),this.store.moleculeJoins.set(J,Q.key),q(this.toolkit,D,J)},deleteRelation:(D,J)=>{H(this.toolkit,D,J)},replaceRelationsSafely:(D,J)=>{N(this.toolkit,D,J)},replaceRelationsUnsafely:(D,J)=>{z(this.toolkit,D,J)},has:(D,J)=>L(this.toolkit,D,J)},C,E;if(Z){E=B0(Y,{key:`${Q.key}/content`,default:Z},["join","content"]);let D=({get:P},V)=>P(E,V),J=({set:P},V,F)=>{P(E,V,F)};C=Object.assign(M,{getContent:(P)=>{return D(this.toolkit,P)},setContent:(P,V)=>{J(this.toolkit,P,V)},deleteContent:(P)=>{this.realm.deallocate(P)}})}else C=M;let B=new S(Q,{externalStore:C,isAType:Q.isAType,isBType:Q.isBType,makeContentKey:(...D)=>{let[J,j]=D,P=D.sort(),V=`${P[0]}:${P[1]}`,F=Y.molecules.get(h(J)),R=Y.molecules.get(h(j));if(!F)this.realm.allocate(Q.key,J);if(!R)this.realm.allocate(Q.key,j);return this.realm.allocate(J,V,"all"),this.realm.claim(j,V),this.store.moleculeJoins.set(V,Q.key),V}}),K=()=>e(Y,{key:`${Q.key}/singleRelatedKey`,get:(D)=>({get:J})=>{let j=J(X,D);for(let P of j)return P;return null}},["join","keys"]),l=()=>{return e(Y,{key:`${Q.key}/multipleRelatedKeys`,get:(D)=>({get:J})=>{let j=zQ(X,Y);return J(j,D).members}},["join","keys"])},d=()=>e(Y,{key:`${Q.key}/singleRelatedEntry`,get:(D)=>({get:J})=>{let j=J(X,D);for(let P of j){let V=B.isAType?.(D)?D:void 0,F=V===void 0?D:void 0;V??=P,F??=P;let R=B.makeContentKey(V,F),m=J(E,R);return[P,m]}return null}},["join","entries"]),T=()=>e(Y,{key:`${Q.key}/multipleRelatedEntries`,get:(D)=>({get:J})=>{let j=zQ(X,Y);return J(j,D).members.map((V)=>{let F=B.isAType?.(D)?D:void 0,R=F===void 0?D:void 0;F??=V,R??=V;let m=B.makeContentKey(F,R),b=J(E,m);return[V,b]})}},["join","entries"]);switch(Q.cardinality){case"1:1":{let D=K(),J=`${G}KeyOf${U(_)}`,j=`${_}KeyOf${U(G)}`,P={[J]:D,[j]:D},V;if(Z){let F=d(),R=`${G}EntryOf${U(_)}`,m=`${_}EntryOf${U(G)}`,b={[R]:F,[m]:F};V=Object.assign(P,b)}else V=P;this.relations=B,this.states=V;break}case"1:n":{let D=K(),J=l(),j=`${G}KeyOf${U(_)}`,P=`${_}KeysOf${U(G)}`,V={[j]:D,[P]:J},F;if(Z){let R=d(),m=T(),b=`${G}EntryOf${U(_)}`,Z0=`${_}EntriesOf${U(G)}`,p={[b]:R,[Z0]:m};F=Object.assign(V,p)}else F=V;this.relations=B,this.states=F;break}case"n:n":{let D=l(),J=`${G}KeysOf${U(_)}`,j=`${_}KeysOf${U(G)}`,P={[J]:D,[j]:D},V;if(Z){let F=T(),R=`${G}EntriesOf${U(_)}`,m=`${_}EntriesOf${U(G)}`,b={[R]:F,[m]:F};V=Object.assign(P,b)}else V=P;this.relations=B,this.states=V}}}};function p0(Q,Z){let Y=Z.joins.get(Q.key);if(Y===void 0){let _=w.STORE.joins.get(Q.key);if(_===void 0)throw new Error(`Join "${Q.key}" not found in store "${Z.config.name}"`);Y=new A0(_.options,_.defaultContent,Z),Z.joins.set(Q.key,Y)}return Y}function H0(Q,Z,Y){let G=p0(Q,Y),_=O(Y);if(x(_)){let{toolkit:X}=_.transactionMeta;G.transact(X,({relations:W})=>{Z(W)})}else Z(G.relations)}function WQ(Q,Z,Y){let G=p0(Q,Y),_;switch(Q.cardinality){case"1:1":{let X=`${Q.a}KeyOf${U(Q.b)}`,W=`${Q.b}KeyOf${U(Q.a)}`;_={get[X](){let H=G.states[X];return $(Y,H,Z)},get[W](){let H=G.states[W];return $(Y,H,Z)}};let q=`${Q.a}EntryOf${U(Q.b)}`;if(q in G.states){let H=`${Q.b}EntryOf${U(Q.a)}`;Object.assign(_,{get[q](){let N=G.states[q];return $(Y,N,Z)},get[H](){let N=G.states[H];return $(Y,N,Z)}})}break}case"1:n":{let X=`${Q.a}KeyOf${U(Q.b)}`,W=`${Q.b}KeysOf${U(Q.a)}`;_={get[X](){let H=G.states[X];return $(Y,H,Z)},get[W](){let H=G.states[W];return $(Y,H,Z)}};let q=`${Q.a}EntryOf${U(Q.b)}`;if(q in G.states){let H=`${Q.b}EntriesOf${U(Q.a)}`;Object.assign(_,{get[q](){let N=G.states[q];return $(Y,N,Z)},get[H](){let N=G.states[H];return $(Y,N,Z)}})}break}case"n:n":{let X=`${Q.a}KeysOf${U(Q.b)}`,W=`${Q.b}KeysOf${U(Q.a)}`;_={get[X](){let H=G.states[X];return $(Y,H,Z)},get[W](){let H=G.states[W];return $(Y,H,Z)}};let q=`${Q.a}EntriesOf${U(Q.b)}`;if(q in G.states){let H=`${Q.b}EntriesOf${U(Q.a)}`;Object.assign(_,{get[q](){let N=G.states[q];return $(Y,N,Z)},get[H](){let N=G.states[H];return $(Y,N,Z)}})}}}return _}function qQ(Q,Z){return p0(Q,Z).core.relatedKeysAtoms}function JZ(Q){return Q.startsWith("\uD83D\uDD0D ")}var EZ=class extends Map{set(Q,Z){if(this.has(Q))return console.warn("Tried to set a key that already exists in an InvariantMap",{key:Q,value:Z}),this;return super.set(Q,Z)}clear(){throw new Error("Cannot clear an InvariantMap")}},G1=class Q{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(Z){this.key=Z}static existing=new EZ;static create(Z,Y){let G=new Q(Z),{type:_,globals:X,actions:W,perspectives:q}=Y(G),H={type:_,key:Z,globals:X,actions:W,perspectives:q};return Q.existing.set(Z,H),H}add(...Z){switch(Z[0].type){case"atom":case"mutable_atom":this.globals.push(...Z);break;case"transaction":this.actions.push(...Z);break;case"atom_family":case"mutable_atom_family":{let[G,_]=Z;this.perspectives.push({type:"realtime_perspective",resourceAtoms:G,viewAtoms:_})}break}return this}};var _1=r({key:"usersInRoomIndex",mutable:!0,default:()=>new f,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),y0=r({key:"roomIndex",default:()=>new f,mutable:!0,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),CZ={enteredAtEpoch:0},D0=J0({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(Q)=>typeof Q==="string",isBType:(Q)=>typeof Q==="string"},CZ),X1=E0({key:"usersInMyRoomView",get:(Q)=>({find:Z})=>{let Y=s0(D0);return[Z(Y,Q)]}});import{spawn as PZ}from"child_process";var l0=class{listeners;globalListeners;handleEvent(Q,...Z){for(let G of this.globalListeners)G(Q,...Z);let Y=this.listeners.get(Q);if(Y)for(let G of Y)G(...Z)}id="no_id_retrieved";emit;constructor(Q){this.emit=Q,this.listeners=new Map,this.globalListeners=new Set}on(Q,Z){let Y=this.listeners.get(Q);if(Y)Y.add(Z);else this.listeners.set(Q,new Set([Z]));return this}onAny(Q){return this.globalListeners.add(Q),this}off(Q,Z){let Y=this.listeners.get(Q);if(Y)if(Z)Y.delete(Z);else this.listeners.delete(Q);return this}offAny(Q){return this.globalListeners.delete(Q),this}},OZ=class extends l0{incompleteData="";unprocessedEvents=[];incompleteLog="";unprocessedLogs=[];id="#####";process;key;logger;handleLog(Q){if(Array.isArray(Q)){let[Z,...Y]=Q;switch(Z){case"i":this.logger.info(...Y);break;case"w":this.logger.warn(...Y);break;case"e":this.logger.error(...Y);break;default:return}}}constructor(Q,Z,Y){super((G,..._)=>{let X=JSON.stringify([G,..._])+"\x03",W=(q)=>{if(q.code==="EPIPE")console.error("EPIPE error during write",this.process.stdin);this.process.stdin.removeListener("error",W)};return this.process.stdin.once("error",W),this.process.stdin.write(X),this});if(this.process=Q,this.key=Z,this.logger=Y??{info:(...G)=>{console.info(this.id,this.key,...G)},warn:(...G)=>{console.warn(this.id,this.key,...G)},error:(...G)=>{console.error(this.id,this.key,...G)}},this.process.stdout.on("data",(G)=>{let _=G.toString();if(_==="ALIVE")return;this.unprocessedEvents.push(..._.split("\x03"));let X=this.unprocessedEvents.shift();this.incompleteData+=X??"";try{if(this.incompleteData.startsWith("error"))console.log("\u2757",this.incompleteData);let W=v(this.incompleteData);this.handleEvent(...W);while(this.unprocessedEvents.length>0){let q=this.unprocessedEvents.shift();if(q){if(this.unprocessedEvents.length===0)this.incompleteData=q;W=v(q),this.handleEvent(...W)}}this.incompleteData=""}catch(W){console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.warn(this.incompleteData),console.warn("\u26A0\uFE0F----------------\u26A0\uFE0F"),console.error(W)}}),this.process.stderr.on("data",(G)=>{let _=G.toString();this.unprocessedLogs.push(..._.split("\x03"));let X=this.unprocessedLogs.shift();this.incompleteLog+=X??"";try{let W=v(this.incompleteLog);this.handleLog(W);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)W=v(this.incompleteLog),this.handleLog(W)}catch(W){console.error("\u274C\u274C\u274C"),console.error(this.incompleteLog),console.error(W),console.error("\u274C\u274C\u274C\uFE0F")}}),Q.pid)this.id=Q.pid.toString()}},BZ=class extends l0{in;out;id="no_id_retrieved";disposalFunctions=[];constructor(Q){super((...Z)=>{return this.out.next(Z),this});this.id=Q,this.in=new I,this.out=new I,this.in.subscribe("socket",(Z)=>{this.handleEvent(...Z)})}dispose(){for(let Q of this.disposalFunctions)Q()}},hQ=class extends l0{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...Q){this.process.stderr.write(h(Q.map((Z)=>Z instanceof f?`{ ${Z.toJSON().members.join(" | ")} }`:Z))+"\x03")}logger={info:(...Q)=>{this.log("i",...Q)},warn:(...Q)=>{this.log("w",...Q)},error:(...Q)=>{this.log("e",...Q)}};constructor(){super((Q,...Z)=>{let Y=JSON.stringify([Q,...Z]);return this.process.stdout.write(Y+"\x03"),this});if(this.process=process,this.process.stdin.resume(),this.relays=new Map,this.relayServices=[],this.process.stdin.on("data",(Q)=>{let Z=Q.toString();this.unprocessedEvents.push(...Z.split("\x03"));let Y=this.unprocessedEvents.shift();this.incompleteData+=Y??"";try{let G=v(this.incompleteData);this.logger.info("\uD83C\uDFB0","received",G),this.handleEvent(...G);while(this.unprocessedEvents.length>0){let _=this.unprocessedEvents.shift();if(_){if(this.unprocessedEvents.length===0)this.incompleteData=_;let X=v(_);this.handleEvent(...X)}}this.incompleteData=""}catch(G){if(G instanceof Error)this.logger.error("\u2757",G.message,G.cause,G.stack)}}),this.on("exit",()=>{this.logger.info("\uD83D\uDD25",this.id,'received "exit"'),process.exit(0)}),process.on("exit",(Q)=>{this.logger.info("\uD83D\uDD25",this.id,`exited with code ${Q}`)}),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",(Q)=>{this.logger.info("\uD83D\uDC64","user",Q,"joined");let Z=new BZ(`user:${Q}`);this.relays.set(Q,Z),this.logger.info("\uD83D\uDD17","attaching services:",`[${[...this.relayServices.keys()].join(", ")}]`);for(let Y of this.relayServices){let G=Y(Z);if(G)Z.disposalFunctions.push(G)}this.on(`user:${Q}`,(...Y)=>{Z.in.next(Y)}),Z.out.subscribe("socket",(Y)=>{this.emit(...Y)})}),this.on("user-leaves",(Q)=>{let Z=this.relays.get(Q);if(this.off(`relay:${Q}`),Z)Z.dispose(),this.relays.delete(Q)}),process.stdout.write("ALIVE")}relay(Q){this.logger.info("\uD83D\uDD17","running relay method"),this.relayServices.push(Q)}},IQ=X0({key:"roomArguments",default:["echo",["Hello World!"]]}),jZ=E0({key:"room",get:(Q)=>async({get:Z,find:Y})=>{let G=Y(IQ,Q),_=Z(G),[X,W]=_,q=await new Promise((H)=>{let N=PZ(X,W,{env:process.env}),z=(L)=>{if(L.toString()==="ALIVE")N.stdout.off("data",z),H(N)};N.stdout.on("data",z)});return new OZ(q,Q)}}),E1=W0({key:"createRoom",do:({get:Q,set:Z,find:Y},G,_,X)=>{let W=X?[_,X]:[_],q=Y(IQ,G);Z(q,W),Z(y0,(z)=>z.add(G));let H=Y(jZ,G);return Q(H)}}),C1=W0({key:"joinRoom",do:(Q,Z,Y,G)=>{let _={enteredAtEpoch:G};return H0(D0,(X)=>{X.set({room:Z,user:Y},_)},Q.env().store),_}}),P1=W0({key:"leaveRoom",do:(Q,Z,Y)=>{H0(D0,(G)=>{G.delete({room:Z,user:Y})},Q.env().store)}}),O1=W0({key:"destroyRoom",do:(Q,Z)=>{H0(D0,(Y)=>{Y.delete({room:Z})},Q.env().store),Q.set(y0,(Y)=>(Y.delete(Z),Y))}});var B1=X0({key:"redactor",default:{occlude:(Q)=>Q}}),j1=X0({key:"unacknowledgedUpdates",default:()=>[]}),V1=X0({key:"sockets",default:null}),$1=r({key:"socketsIndex",mutable:!0,default:()=>new f,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),F1=r({key:"usersIndex",mutable:!0,default:()=>new f,toJson:(Q)=>Q.toJSON(),fromJson:(Q)=>f.fromJSON(Q)}),h1=J0({key:"usersOfSockets",between:["user","socket"],cardinality:"1:1",isAType:(Q)=>Q.startsWith("user::"),isBType:(Q)=>Q.startsWith("socket::")});var L0=new hQ;Object.assign(console,L0.logger,{log:L0.logger.info});L0.on("timeToStop",function Q(){L0.logger.info("\uD83D\uDEEC game worker exiting"),process.exit(0)});L0.logger.info("\uD83D\uDEEB game worker ready");