tempest.games 0.2.49 → 0.2.50

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