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