tempest.games 0.2.33 → 0.2.35

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