tempest.games 0.2.52 → 0.2.54

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