tempest.games 0.2.45 → 0.2.46

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