tempest.games 0.2.62 → 0.2.63

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