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