tempest.games 0.2.59 → 0.2.60

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