tempest.games 0.2.20 → 0.2.22

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