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