tempest.games 0.2.34 → 0.2.36

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