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