tempest.games 0.2.56 → 0.2.57

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