tempest.games 0.2.55 → 0.2.56

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