tempest.games 0.2.38 → 0.2.40
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-BDBfAroO.js +109 -0
- package/app/index.html +1 -1
- package/bin/backend.bun.js +170 -170
- package/bin/backend.worker.game.bun.js +8 -8
- package/bin/backend.worker.tribunal.bun.js +78 -78
- package/bin/frontend.bun.js +35 -35
- package/package.json +5 -5
- package/app/assets/index-B04_csD_.js +0 -109
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
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_pure_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),j={...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,j,K);return z.logger.info("\u2728","readonly_pure_selector",H,"=",b),G.clear(),b},...Z&&{family:Z}};Y.readonlySelectors.set(H,j);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`
|
|
3
|
+
var Rz=Object.create;var{getPrototypeOf:Az,defineProperty:C0,getOwnPropertyNames:vz}=Object;var Iz=Object.prototype.hasOwnProperty;var LQ=(z,Q,Z)=>{Z=z!=null?Rz(Az(z)):{};let Y=Q||!z||!z.__esModule?C0(Z,"default",{value:z,enumerable:!0}):Z;for(let W of vz(z))if(!Iz.call(Y,W))C0(Y,W,{get:()=>z[W],enumerable:!0});return Y};var OQ=(z,Q)=>()=>(Q||z((Q={exports:{}}).exports,Q),Q.exports);var CQ=(z,Q)=>{for(var Z in Q)C0(z,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:(Y)=>Q[Z]=()=>Y})};var BQ=(z,Q)=>()=>(z&&(Q=z(z=0)),Q);var UQ=import.meta.require;var I=(z)=>JSON.parse(z),B=(z)=>JSON.stringify(z),wQ=[Array.prototype,Boolean.prototype,Number.prototype,Object.prototype,String.prototype];function n(z){return E0(f.STORE,z,void 0)}function W0(z){return X0(f.STORE,z)}function AQ(...z){if(z.length===2)return m(f.STORE,...z);return m(f.STORE,...z)}function j0(z,Q){return Zz(f.STORE,z,Q)}function r0(z){return Wz(z,f.STORE)}var B0=(z)=>(Q,Z,Y,W,...G)=>{console[z](`${Q} ${Z} "${Y}" ${W}`,...G)},Tz={error:B0("error"),info:B0("info"),warn:B0("warn")},a0=class{logLevel;filter;logger;constructor(z,Q,Z=Tz){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 fz=class{store;constructor(z=f.STORE){this.store=z,o0("root",z)}allocate(z,Q,Z){return s(this.store,z,Q,Z)}fuse(z,Q,Z){return t0(this.store,z,Q,Z)}deallocate(z){o(this.store,z)}claim(z,Q,Z){return H0(this.store,z,Q,Z)}},n0=class{store;realm;constructor(z=f.STORE){this.store=z,this.realm=new fz(z)}allocate(z,Q,Z){s(this.store,z,Q,Z)}deallocate(z){o(this.store,z)}claim(z,Q,Z){H0(this.store,z,Q,Z)}};function V0(z){return zz(f.STORE,z)}function G0(z){return F0(f.STORE,z)}var k=class z extends Set{mode="record";subject=new U;cacheLimit=0;cache=[];cacheIdx=-1;cacheUpdateNumber=-1;constructor(Q,Z=0){super(Q);if(Q instanceof z)this.parent=Q,this.cacheUpdateNumber=Q.cacheUpdateNumber;if(Z)this.cacheLimit=Z,this.cache=new Array(Z),this.subscribe("auto cache",(Y)=>{this.cacheIdx++,this.cacheIdx%=this.cacheLimit,this.cache[this.cacheIdx]=Y})}READONLY_VIEW=this;toJSON(){return{members:[...this],cache:this.cache,cacheLimit:this.cacheLimit,cacheIdx:this.cacheIdx,cacheUpdateNumber:this.cacheUpdateNumber}}static fromJSON(Q){let Z=new z(Q.members,Q.cacheLimit);return Z.cache=Q.cache,Z.cacheIdx=Q.cacheIdx,Z.cacheUpdateNumber=Q.cacheUpdateNumber,Z}add(Q){let Z=super.add(Q);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`add:${B(Q)}`);return Z}clear(){let Q=this.mode==="record"?[...this]:null;if(super.clear(),Q)this.cacheUpdateNumber++,this.emit(`clear:${JSON.stringify(Q)}`)}delete(Q){let Z=super.delete(Q);if(this.mode==="record")this.cacheUpdateNumber++,this.emit(`del:${B(Q)}`);return Z}parent=null;child=null;transactionUpdates=null;transaction(Q){this.mode="transaction",this.transactionUpdates=[],this.child=new z(this);let Z=this.child._subscribe("transaction",(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 s0(z=Math.random){return z().toString(36).slice(2)}function P(z){while(z.child!==null)z=z.child;return z}var Kz=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}},bz={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 gz(z,Q){let Z=B(Q),Y=`${z.key}(${Z})`,W=bz[z.type],G={key:Y,type:W};return Object.assign(G,{family:{key:z.key,subKey:Z}}),Object.assign(G,{counterfeit:!0}),G}function l(z){let Q={key:z.key,type:z.type};if("family"in z)Q.family=z.family;return Q}var S=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)}},U=class{Subscriber;subscribers=new Map;subscribe(z,Q){return this.subscribers.set(z,Q),()=>{this.unsubscribe(z)}}unsubscribe(z){this.subscribers.delete(z)}next(z){let Q=this.subscribers.values();for(let Z of Q)Z(z)}},dz=class extends U{state;constructor(z){super();this.state=z}next(z){this.state=z,super.next(z)}},mz=(z,Q)=>{let Z=P(z);if(Z.operation.open)return Z.operation.prev.get(Q.key);return Z.valueMap.get(Q.key)},R0=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 i(z){return"epoch"in z.transactionMeta}function K(z){return"phase"in z.transactionMeta}function $z(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}return z.operation={open:!0,done:new Set,prev:new Map,timestamp:Date.now(),token:Q},z.logger.info("\u2B55",Q.type,Q.key,`operation start in store "${z.config.name}"${K(z)?` ${z.transactionMeta.phase} "${z.transactionMeta.update.token.key}"`:""}`),z}function Nz(z){if(z.operation.open)z.logger.info("\uD83D\uDD34",z.operation.token.type,z.operation.token.key,`operation done in store "${z.config.name}"`);z.operation={open:!1},z.on.operationClose.next(z.operation)}var qz=(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)},L0=(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 f0(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(qz(Z,H))continue;jz(Z,H),L0(Z,H)}}}function Dz(z,Q){let Z=P(z),Y=Z.selectorGraph.getRelationEntries({upstreamSelectorKey:Q}).filter(([W,{source:G}])=>G===Q);for(let[W]of Y){if(qz(Z,W))continue;jz(Z,W),L0(Z,W),Dz(z,W)}}function y(z,Q,Z){let{key:Y,subject:W,type:G}=Q,H=z.valueMap.get(Y);if(H instanceof R0&&!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 R0(Z);return z.valueMap.set(Y,X),X.then(function _($){if(z.valueMap.get(Y)===X){switch($z(z,Q),y(z,Q,$),G){case"atom":case"mutable_atom":f0(z,Q);break;case"readonly_pure_selector":case"writable_pure_selector":Dz(z,Y);break}Nz(z),W.next({newValue:$,oldValue:X})}}).catch((_)=>{z.logger.error("\uD83D\uDCA5","state",Y,"rejected:",_)}),X}return z.valueMap.set(Y,Z),Z}function cz(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"&&K(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 c0(G,H),Y=$}return Y}function jz(z,Q){let Z=z.valueMap.get(Q);if(Z instanceof R0){let Y=z.writableSelectors.get(Q)??z.readonlySelectors.get(Q);if(Y)Y.getFrom(z);return}if(z.operation.open)z.operation.prev.set(Q,Z);z.valueMap.delete(Q),z.logger.info("\uD83D\uDDD1","state",Q,"evicted")}function e(z,Q,Z){if(z.valueMap.has(Q.key))return cz(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.getFrom(z);case"atom":{let W;if(Q.default instanceof Function)W=Q.default();else W=Q.default;let G=y(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=y(z,Q,W);return z.logger.info("\uD83D\uDC81","mutable_atom",Q.key,"could not find cached value; using default",W),G}}}function Vz(z,Q){if(Q.family){let Z=z.families.get(Q.family.key);if(Z)return Z}}var pz=(z)=>{let Q=P(z);if(!K(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.token.key,"Aborting transaction"),Q.parent.child=null};function w(z){return z[0].toUpperCase()+z.slice(1)}function r(z){return z.type.split("_").map(w).join(" ")}var Jz=class extends Error{constructor(z,Q){super(`${r(z)} ${B(z.key)} not found in store "${Q.config.name}".`)}};function U0(z,Q,Z){return(...Y)=>{let W=R(z,Q);if(W)return W.run(Y,Z);throw new Jz(Q,z)}}var A0=(z)=>(Q)=>z instanceof Function?z(Q):z;function Ez(z,Q,[Z,Y],W){let{key:G,subject:H,type:X}=Q,_={oldValue:x0(Z)?Z.READONLY_VIEW:Z,newValue:x0(Y)?Y.READONLY_VIEW:Y};if(i(z)){switch(X){case"mutable_atom":z.logger.info("\uD83D\uDCE2",X,G,"is now (",Y,") subscribers:",H.subscribers);break;case"atom":case"writable_pure_selector":case"writable_held_selector":z.logger.info("\uD83D\uDCE2",X,G,"went (",Z,"->",Y,") subscribers:",H.subscribers)}H.next(_)}if(K(z)&&(X==="mutable_atom"||X==="atom")){if(z.on.transactionApplying.state===null){let $=l(Q);if(x0(Y))return;let{timestamp:N}=z.operation,q={type:"atom_update",token:$,timestamp:N,update:_};z.transactionMeta.update.subEvents.push(q),z.logger.info("\uD83D\uDCC1","atom",G,"stowed (",Z,"->",Y,")");return}if(DQ(Q,"tracker:signal")){let $=G.slice(1),N=z.atoms.get($);if(e(z,N,"mut").do(_.newValue)===null===!0)f0(z,N)}}}var v0=(z,Q,Z)=>{let Y=e(z,Q,"mut"),W=A0(Z)(Y);return z.logger.info("\uD83D\uDCDD","atom",Q.key,"set to",W),W=y(z,Q,W),L0(z,Q.key),f0(z,Q),[Y,W]};function Gz(z,Q){switch(Q.type){case"mutable_atom":return v0(z,Q,new Q.class);case"atom":{let Z=Q.default;if(Z instanceof Function)Z=Z();return v0(z,Q,Z)}}}function kz(z,Q){let Z;switch(Q.type){case"atom":case"mutable_atom":Z=Gz(z,Q);break;case"writable_pure_selector":case"writable_held_selector":{let Y=Q.getFrom(z),W=P0(z,Q.key);for(let H of W.values()){let X=Gz(z,H);Ez(z,Q,X,!1)}let G=Q.getFrom(z);Z=[Y,G]}break}return Z}function g(z,...Q){S0(z,!0,...Q)}var h0=Symbol("RESET");function J0(z,...Q){let Z,Y,W;if(Q.length===1)Z=Q[0],g(z,Z,h0);else Y=Q[0],W=Q[1],g(z,Y,W,h0)}function yz(z,Q,Z){let Y,W,G,{type:H,key:X}=Q;switch(Q.type){case"writable_pure_selector":Y=Q.getFrom(z),W=A0(Z)(Y),y(z,Q,W);break;case"writable_held_selector":G=Q.const,A0(Z)(G),Y=G,W=G}return z.logger.info("\uD83D\uDCDD",H,X,"setting to",W),L0(z,X),Q.setSelf(W),[Y,W]}var uz=(z,Q,Z)=>{let Y;switch(Q.type){case"atom":case"mutable_atom":Y=v0(z,Q,Z);break;case"writable_pure_selector":case"writable_held_selector":Y=yz(z,Q,Z);break}return Y};function lz(z,Q,Z){let{token:Y,update:{newValue:W,oldValue:G}}=Q;g(Z,Y,z==="newValue"?W:G)}function iz(z){let{stack:Q}=z;if(Q)return`
|
|
5
4
|
`+Q.split(`
|
|
6
5
|
`)?.slice(1)?.join(`
|
|
7
|
-
`);return""}function
|
|
6
|
+
`);return""}function o0(z,Q=f.STORE){let Z={key:z,stringKey:B(z),dependsOn:"any"};return Q.molecules.set(B(z),Z),z}function s(z,Q,Z,Y="any"){let W=Q,G=B(Z),H=[],X=P(z);if(Array.isArray(W))for(let N of W){let q=B(N);if(X.molecules.get(q))z.moleculeGraph.set(q,G,{source:q});else H.push(q)}else{let N=B(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,timestamp:Date.now()};if(K(X)&&X.transactionMeta.phase==="building")X.transactionMeta.update.subEvents.push(_);else X.on.moleculeCreation.next(_);for(let N of H){let q=z.disposalTraces.buffer.find((D)=>D?.key===N);z.logger.error("\u274C","molecule",Z,"allocation failed:",`Could not allocate to ${N} in store "${z.config.name}".`,q?`
|
|
8
7
|
${N} was most recently disposed
|
|
9
|
-
${q.trace}`:`No previous disposal trace for ${N} was found.`)}return Z}function
|
|
8
|
+
${q.trace}`:`No previous disposal trace for ${N} was found.`)}return Z}function t0(z,Q,Z,Y){let W=`T$--${Q}==${Z}++${Y}`;return s(z,[Z,Y],W,"all"),W}function o(z,Q){let Z=B(Q),Y=z.molecules.get(Z);if(!Y){let J=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}".`,J?`
|
|
10
9
|
This state was most recently deallocated
|
|
11
|
-
${
|
|
10
|
+
${J.trace}`:`No previous disposal trace for ${Z} was found.`);return}let W=z.moleculeJoins.getRelatedKeys(Y.key);if(W)for(let J of W){let j=z.joins.get(J);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,timestamp:Date.now()},_=P(z);_.molecules.delete(Z);let $=K(_)&&_.transactionMeta.phase==="building";if($)_.transactionMeta.update.subEvents.push(X);let N=z.moleculeGraph.getRelationEntries({downstreamMoleculeKey:Y.stringKey});if(N)for(let[J,{source:j}]of N)if(j===Y.stringKey){let M=I(J);o(z,M)}else G.push(j);let q=_.moleculeData.getRelatedKeys(Y.stringKey);if(q)for(let J of q){let j=_.families.get(J),M=F(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 D=iz(new Error);z.disposalTraces.add({key:Z,trace:D})}function H0(z,Q,Z,Y){let W=B(Z),G=P(z),H=G.molecules.get(W);if(!H){let D=z.disposalTraces.buffer.find((J)=>J?.key===W);return z.logger.error("\u274C","molecule",Z,"claim failed:",`Could not allocate to ${W} in store "${z.config.name}".`,D?`
|
|
12
11
|
${W} was most recently disposed
|
|
13
|
-
${
|
|
12
|
+
${D.trace}`:`No previous disposal trace for ${W} was found.`),Z}let X=B(Q),_=G.molecules.get(X);if(!_){let D=z.disposalTraces.buffer.find((J)=>J?.key===X);return z.logger.error("\u274C","molecule",Z,"claim failed:",`Could not allocate to ${X} in store "${z.config.name}".`,D?`
|
|
14
13
|
${X} was most recently disposed
|
|
15
|
-
${j.trace}`:`No previous disposal trace for ${X} was found.`),Z}let $=z.moleculeGraph.getRelationEntries({downstreamMoleculeKey:H.stringKey}).filter(([,{source:j}])=>j!==W).map(([j])=>S(j));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,j=Q.do(q,...X);return QQ(j,N),j}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:j}=$,E={find:N,get:q,json:j},J=(R=Q.get,x=P(z))=>{let D=x.selectorGraph.getRelationEntries({downstreamSelectorKey:H});for(let[V,{source:O}]of D)if(O!==H)x.selectorGraph.delete(V,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),V=A0(R)(D);if(z.logger.info("\uD83D\uDCDD","writable_held_selector",H,"set (",D,"->",V,")"),p(x,K,V),q0(x,H),l(x))W.next({newValue:V,oldValue:D});Q.set($,V)},...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}=_,j={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 V=R(j),O=p(x,M,V);return z.logger.info("\u2728","writable_pure_selector",H,"=",O),G.clear(),O},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),V=A0(R)(D);if(z.logger.info("\uD83D\uDCDD","writable_pure_selector",H,"set (",D,"->",V,")"),p(x,M,V),q0(x,Q.key),l(x))W.next({newValue:V,oldValue:D});Q.set(_,V)},...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),j={key:Y,subKey:q},E=`${Y}(${q})`,J=P(z),M=T0(J,{key:E,get:Q.get(N)},j);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:(...j)=>c(z,...j),find:(...j)=>C(z,...j),json:(j)=>r(z,j)})}});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}(${$})`,j=P(z),E=Q.default,J={key:q,default:E instanceof Function?()=>E(_):E};if(Q.effects)J.effects=Q.effects(_);let M=h0(j,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),j={key:Y,subKey:q},E=`${Y}(${q})`,J=P(z),M=I0(J,{key:E,const:Q.const(N),get:Q.get(N)},j);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),j={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)},j);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),j={key:Y,subKey:q},E=`${Y}(${q})`,J=P(z),M=K0(J,{key:E,get:Q.get(N),set:Q.set(N)},j);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:(...j)=>c(z,...j),find:(...j)=>C(z,...j),json:(j)=>r(z,j)})}});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 j=z.on.operationClose.subscribe(`state subscription ${Z}`,()=>{j(),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,j]of L0(z,G.key))X.set(q,Wz(z,G,j));_=function q(j){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(j)}}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 j(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 j of Q.effects){let E=j({resetSelf:()=>{E0(z,$)},setSelf:(J)=>{d(z,$,J)},onSet:(J)=>N0(z,$,`effect[${N}]`,J)});if(E)q.push(E);++N}_.cleanup=()=>{for(let j of q)j()}}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}(${$})`,j=P(z),E={key:q,class:Q.class};if(Q.effects)E.effects=Q.effects(_);let J=M0(j,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,j=[];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)j.push(J);++q}$.cleanup=()=>{for(let E of j)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},V)=>D(G,V),X=({set:D},V,O)=>{if(!this.store.molecules.has(U(V)))this.realm.allocate(z.key,V);D(G,V,(h)=>h.add(O)),D(G,O,(h)=>h.add(V))},_=({set:D},V,O)=>{D(G,V,(h)=>{return h.delete(O),h}),D(G,O,(h)=>{return h.delete(V),h})},$=(D,V,O)=>{let{find:h,get:L,set:B}=D,A=h(G,V),m=L(A);for(let g of m){if(O.includes(g))continue;B(G,g,(y)=>{return y.delete(V),y})}B(A,(g)=>{return g.transaction((z0)=>{z0.clear();for(let y of O){let Q0=H(D,y),p0=Q0.has(V);if(this.relations.cardinality==="1:n"){let y0=[];for(let Z0 of Q0){if(Z0===V)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(V);z0.add(y)}return!0}),g})},N=(D,V,O)=>{let{set:h}=D;h(G,V,(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(V),B});return!0},q=(D,V,O)=>{let h=H(D,V);return O?h.has(O):h.size>0},j={getRelatedKeys:(D)=>H(this.toolkit,D),addRelation:(D,V)=>{this.store.moleculeJoins.set(D,z.key),this.store.moleculeJoins.set(V,z.key),X(this.toolkit,D,V)},deleteRelation:(D,V)=>{_(this.toolkit,D,V)},replaceRelationsSafely:(D,V)=>{$(this.toolkit,D,V)},replaceRelationsUnsafely:(D,V)=>{N(this.toolkit,D,V)},has:(D,V)=>q(this.toolkit,D,V)},E,J;if(Q){J=X0(Z,{key:`${z.key}/content`,default:Q},["join","content"]);let D=({get:h},L)=>h(J,L),V=({set:h},L,B)=>{h(J,L,B)};E=Object.assign(j,{getContent:(h)=>{return D(this.toolkit,h)},setContent:(h,L)=>{V(this.toolkit,h,L)},deleteContent:(h)=>{this.realm.deallocate(h)}})}else E=j;let M=new T(z,{externalStore:E,isAType:z.isAType,isBType:z.isBType,makeContentKey:(...D)=>{let[V,O]=D,h=D.sort(),L=`${h[0]}:${h[1]}`,B=Z.molecules.get(U(V)),A=Z.molecules.get(U(O));if(!B)this.realm.allocate(z.key,V);if(!A)this.realm.allocate(z.key,O);return this.realm.allocate(V,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:V})=>{let O=V(G,D);for(let h of O)return h;return null}},["join","keys"]),b=()=>{return o(Z,{key:`${z.key}/multipleRelatedKeys`,get:(D)=>({get:V})=>{let O=Gz(G,Z);return V(O,D).members}},["join","keys"])},R=()=>o(Z,{key:`${z.key}/singleRelatedEntry`,get:(D)=>({get:V})=>{let O=V(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=V(J,A);return[h,m]}return null}},["join","entries"]),x=()=>o(Z,{key:`${z.key}/multipleRelatedEntries`,get:(D)=>({get:V})=>{let O=Gz(G,Z);return V(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=V(J,m);return[L,g]})}},["join","entries"]);switch(z.cardinality){case"1:1":{let D=K(),V=`${Y}KeyOf${w(W)}`,O=`${W}KeyOf${w(Y)}`,h={[V]: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(),V=b(),O=`${Y}KeyOf${w(W)}`,h=`${W}KeysOf${w(Y)}`,L={[O]:D,[h]:V},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(),V=`${Y}KeysOf${w(W)}`,O=`${W}KeysOf${w(Y)}`,h={[V]: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");
|
|
14
|
+
${D.trace}`:`No previous disposal trace for ${X} was found.`),Z}let $=z.moleculeGraph.getRelationEntries({downstreamMoleculeKey:H.stringKey}).filter(([,{source:D}])=>D!==W).map(([D])=>I(D));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],timestamp:Date.now()};if(K(G)&&G.transactionMeta.phase==="building")G.transactionMeta.update.subEvents.push(N);return Z}function rz(z,Q,Z){switch(Q){case"newValue":Mz(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(Mz(z,Z),z.subType==="atom")Z.valueMap.set(z.token.key,z.value);break}}function Mz(z,Q){let{family:Z}=z.token;if(Z){let Y=Q.families.get(Z.key);if(Y)F(Q,Y,I(Z.subKey))}}function nz(z,Q,Z){switch(Q){case"newValue":s(Z,z.provenance,z.key);break;case"oldValue":o(Z,z.key);break}}function sz(z,Q,Z){switch(Q){case"newValue":o(Z,z.key);break;case"oldValue":{let Y=z.provenance.map(I);s(Z,Y,z.key);for(let[W,G]of z.values){let H=Z.families.get(W);if(H){F(Z,H,z.key);let X=`${W}(${B(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 hz(z,Q,Z){let Y=z==="newValue"?Q.subEvents:[...Q.subEvents].reverse();for(let W of Y)switch(W.type){case"atom_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_outcome":hz(z,W,Z);break}}function Pz(z,Q){return z.transactionMeta.actionContinuities.getRelatedKey(Q)}function tz(z,Q){return z.transactionMeta.epoch.get(Q)}function ez(z,Q){if(!i(z))return;let Y=Pz(z,Q);if(Y===void 0)return;return tz(z,Y)}function zQ(z,Q,Z){if(!i(z))return;let W=Pz(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||!K(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{subEvents:W}=Z.transactionMeta.update;if(Q.logger.info("\uD83D\uDEC4","transaction",Z.transactionMeta.update.token.key,`Applying transaction with ${W.length} updates:`,W),hz("newValue",Z.transactionMeta.update,Y),i(Y))zQ(Y,Z.transactionMeta.update.token.key,Z.transactionMeta.update.epoch),R(Q,{key:Z.transactionMeta.update.token.key,type:"transaction"})?.subject.next(Z.transactionMeta.update),Q.logger.info("\uD83D\uDEEC","transaction",Z.transactionMeta.update.token.key,"Finished applying transaction.");else if(K(Y))Y.transactionMeta.update.subEvents.push(Z.transactionMeta.update);Y.on.transactionApplying.next(null)};function ZQ(z){return{store:z}}var c=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 c(W.atoms),atomsThatAreDefault:new Set(W.atomsThatAreDefault),families:new c(W.families),joins:new c(W.joins),operation:{open:!1},readonlySelectors:new c(W.readonlySelectors),timelines:new c(W.timelines),timelineTopics:new S(W.timelineTopics.toJSON()),trackers:new Map,transactions:new c(W.transactions),selectorAtoms:new S(W.selectorAtoms.toJSON()),selectorGraph:new S(W.selectorGraph.toJSON(),{makeContentKey:(...$)=>$.sort().join(":")}),writableSelectors:new c(W.writableSelectors),valueMap:new c(W.valueMap),defaults:W.defaults,disposalTraces:z.disposalTraces.copy(),molecules:new c(W.molecules),moleculeGraph:new S(W.moleculeGraph.toJSON(),{makeContentKey:W.moleculeGraph.makeContentKey}),moleculeData:new S(W.moleculeData.toJSON(),{makeContentKey:W.moleculeData.makeContentKey}),moleculeJoins:new S(W.moleculeJoins.toJSON(),{makeContentKey:W.moleculeJoins.makeContentKey}),miscResources:new c(W.miscResources)},H=ez(z,Q.key),X={phase:"building",update:{type:"transaction_outcome",token:Q,id:Y,epoch:H===void 0?NaN:H+1,timestamp:Date.now(),subEvents:[],params:Z,output:void 0},toolkit:{get:(...$)=>m(_,...$),set:(...$)=>{g(_,...$)},reset:(...$)=>{J0(_,...$)},run:($,N=s0())=>U0(_,$,N),find:(...$)=>F(z,...$),json:($)=>a(_,$),dispose:(...$)=>{_0(_,...$)},env:()=>ZQ(_)}},_=Object.assign(G,{transactionMeta:X});return W.child=_,z.logger.info("\uD83D\uDEEB","transaction",Q.key,"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 $=l(W),N=YQ(z,$,X,_);try{let q=P(z),{toolkit:D}=N.transactionMeta,J=Q.do(D,...X);return QQ(J,q),J}catch(q){throw pz(G),z.logger.warn("\uD83D\uDCA5","transaction",Z,"caught:",q),q}},install:(X)=>F0(X,Q),subject:new U},G=P(z);G.transactions.set(Z,W);let H=l(W);if(!Y)z.on.transactionCreation.next(H);return H}function WQ(z,Q,Z){return R(z,Q)(Z)}function I0(z,Q,Z){let Y=B(Z),W=z.molecules.get(Y);if(!W&&z.config.lifespan==="immortal"){let X=gz(Q,Z);return z.logger.error("\u274C",X.type,X.key,`was not found in store "${z.config.name}"; returned a counterfeit token.`),X}let G=WQ(z,Q,Z),H=P(z);if(G.family){if(i(H))switch(G.type){case"atom":case"mutable_atom":z.on.atomCreation.next(G);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":z.on.selectorCreation.next(G);break}else if(K(H)&&H.on.transactionApplying.state===null)H.transactionMeta.update.subEvents.push({type:"state_creation",token:G,timestamp:Date.now()})}if(W)H.moleculeData.set(Y,Q.key);return G}function S0(z,Q,...Z){let Y,W,G,H,X,_;if(Z.length===2){if(G=Z[0],_=Z[1],G.family)if(H=Vz(z,G),X=I(G.family.subKey),Y=T0(z,H,X),!Y)W=I0(z,H,X),G=W;else G=Y}else if(H=Z[0],X=Z[1],_=Z[2],Y=T0(z,H,X),!Y)W=I0(z,H,X),G=W;else G=Y;let $=_===h0?"reset":"set",N;if(Q){let j=$z(z,G);if(typeof j==="number"){let A=j,T=z.on.operationClose.subscribe(`waiting to ${$} "${G.key}" at T-${A}`,function x(){T(),z.logger.info("\uD83D\uDFE2",G.type,G.key,"resuming deferred",$,`from T-${A}`),S0(z,Q,G,_)});return}N=j}else N=z;if("counterfeit"in G&&"family"in G){let j=G.family.subKey,M=z.disposalTraces.buffer.find((A)=>A?.key===j);z.logger.error("\u274C",G.type,G.key,"could not be",$,`because it was not found in the store "${z.config.name}".`,M?`This state was previously disposed:
|
|
15
|
+
${M.trace}`:"No previous disposal trace was found.");return}let q=R(N,G),D;if(_===h0)D=kz(N,q);else D=uz(N,q,_);let J=Boolean(W);if(Ez(N,q,D,J),Q)Nz(N)}var Lz=(z,Q)=>P(z).atoms.has(Q),GQ=(z,Q)=>P(z).writableSelectors.has(Q),HQ=(z,Q)=>P(z).readonlySelectors.has(Q),XQ=(z,Q)=>Lz(z,Q)||GQ(z,Q)||HQ(z,Q);function Hz(z,Q){return P(z).selectorGraph.getRelationEntries({downstreamSelectorKey:Q}).filter(([Y,{source:W}])=>W!==Q).map(([Y,{source:W}])=>W).filter((Y)=>XQ(z,Y))}function P0(z,Q,Z=new Set){let Y=Hz(z,Q),W=new Map;while(Y.length>0){let G=Y.pop();if(Z.has(G))continue;if(Z.add(G),Lz(z,G)){let H=z.atoms.get(G);W.set(H.key,H)}else Y.push(...Hz(z,G))}return W}function _Q(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 _=P0(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)}function O0(z,Q,Z,Y){return{get:(...W)=>{let G=P(z),H;if(W.length===2){let[N,q]=W;H=F(z,N,q)}else[H]=W;let X=R(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}),_Q(z,Q,Z,H,Y),_},set:(...W)=>{let G=P(z);S0(G,!1,...W)},find:(...W)=>F(z,...W),json:(W)=>a(z,W)}}function K0(z,Q,Z){let Y=P(z),W=new U,G=new Set,{key:H,const:X}=Q,_="readonly_held_selector",{get:$,find:N,json:q}=O0(Y,"readonly_held_selector",H,G),J={...Q,type:"readonly_held_selector",subject:W,getFrom:(M)=>{let A=M.selectorGraph.getRelationEntries({downstreamSelectorKey:H});for(let[T,{source:x}]of A)if(x!==H)M.selectorGraph.delete(T,H);return M.selectorAtoms.delete(H),Q.get({get:$,find:N,json:q},X),y(M,J,X),G.clear(),X},install:(M)=>K0(M,Q,Z)};if(Z)J.family=Z;Y.readonlySelectors.set(H,J),z.logger.info("\u2728","readonly_held_selector",H,"=",X);let j={key:H,type:"readonly_held_selector"};if(Z)j.family=Z;return j}function b0(z,Q,Z){let Y=P(z),W=new U,G=new Set,H=Q.key,X="readonly_pure_selector",{get:_,find:$,json:N}=O0(Y,"readonly_pure_selector",H,G),D={...Q,type:"readonly_pure_selector",subject:W,getFrom:()=>{let j=P(z),M=j.selectorGraph.getRelationEntries({downstreamSelectorKey:H});for(let[x,{source:u}]of M)if(u!==H)j.selectorGraph.delete(x,H);j.selectorAtoms.delete(H);let A=Q.get({get:_,find:$,json:N}),T=y(j,D,A);return z.logger.info("\u2728","readonly_pure_selector",H,"=",T),G.clear(),T},install:(j)=>b0(j,Q,Z)};if(Z)D.family=Z;Y.readonlySelectors.set(H,D);let J={key:H,type:"readonly_pure_selector"};if(Z)J.family=Z;return J}function g0(z,Q,Z){let Y=P(z),W=new U,G=new Set,{key:H,const:X}=Q,_="writable_held_selector",$=O0(Y,"writable_held_selector",H,G),{find:N,get:q,json:D}=$,J={find:N,get:q,json:D},A={...Q,type:"writable_held_selector",subject:W,getFrom:(x)=>{let u=x.selectorGraph.getRelationEntries({downstreamSelectorKey:H});for(let[V,{source:E}]of u)if(E!==H)x.selectorGraph.delete(V,H);return x.selectorAtoms.delete(H),Q.get(J,X),y(x,A,X),z.logger.info("\u2728","writable_held_selector",H,"=",X),G.clear(),X},setSelf:()=>{Q.set($,X)},install:(x)=>g0(x,Q,Z)};if(Z)A.family=Z;Y.writableSelectors.set(H,A);let T={key:H,type:"writable_held_selector"};if(Z)T.family=Z;return T}function d0(z,Q,Z){let Y=P(z),W=new U,G=new Set,H=Q.key,X="writable_pure_selector",_=O0(Y,"writable_pure_selector",H,G),{find:$,get:N,json:q}=_,D={find:$,get:N,json:q},J=(x)=>{let u=x.selectorGraph.getRelationEntries({downstreamSelectorKey:H});for(let[O,{source:h}]of u)if(h!==H)x.selectorGraph.delete(O,H);x.selectorAtoms.delete(H);let V=Q.get(D),E=y(x,M,V);return z.logger.info("\u2728","writable_pure_selector",H,"=",E),G.clear(),E},M={...Q,type:"writable_pure_selector",subject:W,getFrom:J,setSelf:(x)=>{Q.set(_,x)},install:(x)=>d0(x,Q,Z)};if(Z)M.family=Z;Y.writableSelectors.set(H,M);let A=J(Y);z.logger.info("\u2728",M.type,M.key,"=",A);let T={key:H,type:"writable_pure_selector"};if(Z)T.family=Z;return T}function e0(z,Q){let Z="set"in Q,Y="const"in Q;if(Y&&Z){let G=g0(z,Q,void 0);return z.on.selectorCreation.next(G),G}if(Y){let G=K0(z,Q,void 0);return z.on.selectorCreation.next(G),G}if(Z){let G=d0(z,Q,void 0);return z.on.selectorCreation.next(G),G}let W=b0(z,Q,void 0);return z.on.selectorCreation.next(W),W}function $Q(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"},R(z,X).subject.next({type:"state_disposal",subType:"selector",token:Q,timestamp:Date.now()});break;case"writable_pure_selector":Z.writableSelectors.delete(Y),X={key:G.key,type:"writable_pure_selector_family"},R(z,X).subject.next({type:"state_disposal",subType:"selector",token:Q,timestamp:Date.now()});break;case"readonly_held_selector":Z.readonlySelectors.delete(Y),X={key:G.key,type:"readonly_held_selector_family"},R(z,X).subject.next({type:"state_disposal",subType:"selector",token:Q,timestamp:Date.now()});break;case"readonly_pure_selector":Z.readonlySelectors.delete(Y),X={key:G.key,type:"readonly_pure_selector_family"},R(z,X).subject.next({type:"state_disposal",subType:"selector",token:Q,timestamp:Date.now()});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"),K(Z)&&Z.transactionMeta.phase==="building")Z.transactionMeta.update.subEvents.push({type:"state_disposal",subType:"selector",token:Q,timestamp:Date.now()});else z.on.selectorDisposal.next(Q)}}function t(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 ${r(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 U,$=Object.assign((N)=>{let q=B(N),D={key:Y,subKey:q},J=`${Y}(${q})`,j=P(z),M=b0(j,{key:J,get:Q.get(N)},D);return X.next({type:"state_creation",token:M,timestamp:Date.now()}),M},G,{internalRoles:Z,subject:X,install:(N)=>t(N,Q),default:(N)=>{return Q.get(N)({get:(...D)=>m(z,...D),find:(...D)=>F(z,...D),json:(D)=>a(z,D)})}});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 ${r(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 U,X=Object.assign((_)=>{let $=B(_),N={key:Q.key,subKey:$},q=`${Q.key}(${$})`,D=P(z),J=Q.default,j={key:q,default:J instanceof Function?()=>J(_):J};if(Q.effects)j.effects=Q.effects(_);let M=M0(D,j,N);return G.next({type:"state_creation",token:M,timestamp:Date.now()}),M},Y,{default:Q.default,subject:G,install:(_)=>X0(_,Q),internalRoles:Z});if(z.families.set(Q.key,X),Q.default instanceof Function===!1)z.defaults.set(Q.key,Q.default);return Y}function Oz(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 ${r(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 U,$=Object.assign((N)=>{let q=B(N),D={key:Y,subKey:q},J=`${Y}(${q})`,j=P(z),M=K0(j,{key:J,const:Q.const(N),get:Q.get(N)},D);return X.next({type:"state_creation",token:M,timestamp:Date.now()}),M},G,{internalRoles:Z,subject:X,install:(N)=>Oz(N,Q),default:Q.const});return z.families.set(Y,$),G}function Cz(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 ${r(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 U,$=Object.assign((N)=>{let q=B(N),D={key:Y,subKey:q},J=`${Y}(${q})`,j=P(z),M=g0(j,{key:J,const:Q.const(N),get:Q.get(N),set:Q.set(N)},D);return X.next({type:"state_creation",token:M,timestamp:Date.now()}),M},G,{internalRoles:Z,subject:X,install:(N)=>Cz(N,Q),default:Q.const});return z.families.set(Y,$),G}function m0(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 ${r(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 U,$=Object.assign((N)=>{let q=B(N),D={key:Y,subKey:q},J=`${Y}(${q})`,j=P(z),M=d0(j,{key:J,get:Q.get(N),set:Q.set(N)},D);return X.next({type:"state_creation",token:M,timestamp:Date.now()}),M},G,{internalRoles:Z,subject:X,install:(N)=>m0(N,Q),default:(N)=>{return Q.get(N)({get:(...D)=>m(z,...D),find:(...D)=>F(z,...D),json:(D)=>a(z,D)})}});return z.families.set(Y,$),G}function zz(z,Q){let Z="set"in Q,Y="const"in Q;if(Y&&Z)return Cz(z,Q,void 0);if(Y)return Oz(z,Q,void 0);if(Z)return m0(z,Q);return t(z,Q)}function T0(z,Q,Z){let Y=B(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 l(H);return H}function F(z,Q,Z){let Y=T0(z,Q,Z);if(Y)return Y;return I0(z,Q,Z)}function _0(z,...Q){let Z;if(Q.length===1)Z=Q[0];else{let Y=Q[0],W=Q[1];Z=F(z,Y,W)}try{R(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":Bz(z,Z);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":$Q(z,Z);break}}function m(z,...Q){let Z,Y,W;if(Q.length===1)Z=Q[0];else Y=Q[0],W=Q[1],Z=F(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"mutable_atom_family":{if(z.defaults.has(Y.key))return z.defaults.get(Y.key);let _=new(R(z,Y)).class;return z.defaults.set(Y.key,_),_}case"atom_family":{if(z.defaults.has(Y.key))return z.defaults.get(Z.family.key);let X=R(z,Y).default(I(G));return z.defaults.set(Y.key,X),X}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=R(z,Y).default(I(G));return z.defaults.set(Y.key,X),X}}}return e(z,R(z,Z))}var Xz=(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=mz(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 D=z.on.operationClose.subscribe(`state subscription ${Z}`,()=>{D(),Y(q)})}else Y(q)}let G=R(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,D]of P0(z,G.key))X.set(q,Xz(z,G,D));_=function q(D){let J=P0(z,G.key);for(let[j,M]of X)if(J.get(j))J.delete(j);else M(),X.delete(j);for(let[j,M]of J)X.set(j,Xz(z,G,M));W(D)}}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 R(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 Jz(Q,z)}var NQ=(z,Q,Z,Y)=>{let W=R(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 c0=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=M0(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=K(Z)?Z.transactionMeta.update.token.key:"main",H=`tracker:${W}:${G}:${Y}`,X=($)=>{g(Z,Q,$)},_=m(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}:${K(Z)?Z.transactionMeta.update.token.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=NQ(Z,{key:X,type:"timeline"},Y,function D(J){q(),g(Z,z,(j)=>{if(J==="redo"&&G)j.do(G);else if(J==="undo"&&H)j.undo(H);return j})});return}let _=m(Z,z),$=_.getUpdateNumber(G),N=$-_.cacheUpdateNumber;if(G&&N===1)g(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 E0(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."),l(G);let X=new U,_={...Q,type:H,install:(N)=>{return N.logger.info("\uD83D\uDEE0\uFE0F","atom",W,`installing in store "${N.config.name}"`),E0(N,Q,Z)},subject:X};if(Z)_.family=Z;Y.atoms.set(_.key,_);let $=l(_);if(Q.effects){let N=0,q=[];for(let D of Q.effects){let J=D({resetSelf:()=>{J0(z,$)},setSelf:(j)=>{g(z,$,j)},onSet:(j)=>N0(z,$,`effect[${N}]`,j)});if(J)q.push(J);++N}_.cleanup=()=>{for(let D of q)D()}}if(new c0($,z),!Z)e0(z,{key:`${W}:JSON`,get:({get:N})=>N($).toJSON(),set:({set:N},q)=>{N($,Q.class.fromJSON(q))}});return z.on.atomCreation.next($),$}var qQ=class{trackers=new Map;latestSignalAtoms;mutableAtoms;constructor(z,Q){let Z=X0(Q,{key:`*${z.key}`,default:null},["mutable","updates"]);this.latestSignalAtoms=R(Q,Z),this.mutableAtoms=z;let Y=(W)=>{let{type:G,token:H}=W;if(H.family){let X=I(H.family.subKey);switch(G){case"state_creation":this.trackers.set(X,new c0(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 ${r(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 U,X=Object.assign((_)=>{let $=B(_),N={key:Q.key,subKey:$},q=`${Q.key}(${$})`,D=P(z),J={key:q,class:Q.class};if(Q.effects)J.effects=Q.effects(_);let j=E0(D,J,N);return G.next({type:"state_creation",token:j,timestamp:Date.now()}),j},Y,{class:Q.class,subject:G,install:(_)=>w0(_,Q),internalRoles:Z});return z.families.set(Q.key,X),m0(z,{key:`${Q.key}:JSON`,get:(_)=>({get:$})=>$(Y,_).toJSON(),set:(_)=>({set:$},N)=>{$(Y,_,Q.class.fromJSON(N))}},["mutable","json"]),new qQ(X,z),Y}var _z=(z,Q)=>{let Z=P(Q),Y=`${z.key}:JSON`;return Z.families.get(Y)},a=(z,Q)=>{if(Q.family){let Y=P(z),G={key:`${Q.family.key}:JSON`,type:"writable_pure_selector_family"},H=R(Y,G),X=JSON.parse(Q.family.subKey);return F(z,H,X)}return{type:"writable_pure_selector",key:`${Q.key}:JSON`}};var p0=(z)=>{let Z={type:"atom",key:`*${z.key}`};if(z.family)Z.family={key:`*${z.family.key}`,subKey:z.family.subKey};return Z};function x0(z){return typeof z==="object"&&z!==null&&"do"in z&&"undo"in z&&"subscribe"in z&&"cacheUpdateNumber"in z&&"getUpdateNumber"in z&&"READONLY_VIEW"in z&&"toJSON"in z}var Qz=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 S({between:["selectorKey","atomKey"],cardinality:"n:n"});selectorGraph=new S({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 S({between:["continuity","action"],cardinality:"1:n"})};timelines=new Map;timelineTopics=new S({between:["timelineKey","topicKey"],cardinality:"1:n"});disposalTraces=new Kz(100);molecules=new Map;moleculeJoins=new S({between:["moleculeKey","joinKey"],cardinality:"n:n"},{makeContentKey:(...z)=>z.sort().join(":")});moleculeGraph=new S({between:["upstreamMoleculeKey","downstreamMoleculeKey"],cardinality:"n:n"},{makeContentKey:(...z)=>z.sort().join(":")});moleculeData=new S({between:["moleculeKey","stateFamilyKey"],cardinality:"n:n"},{makeContentKey:(...z)=>z.sort().join(":")});miscResources=new Map;on={atomCreation:new U,atomDisposal:new U,selectorCreation:new U,selectorDisposal:new U,timelineCreation:new U,transactionCreation:new U,transactionApplying:new dz(null),operationClose:new U,moleculeCreation:new U,moleculeDisposal:new U};operation={open:!1};config={name:"IMPLICIT_STORE",lifespan:"ephemeral"};loggers=[new a0("warn",(z,Q,Z)=>!jQ(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},i(Q))this.transactionMeta={epoch:new Map(Q?.transactionMeta.epoch),actionContinuities:new S(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=a(Q,Y),G=p0(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)}}},f={get STORE(){return globalThis.ATOM_IO_IMPLICIT_STORE??=new Qz({name:"IMPLICIT_STORE",lifespan:"ephemeral"}),globalThis.ATOM_IO_IMPLICIT_STORE}};function M0(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."),l(X);let _=new U,$={...Q,type:"atom",install:(q)=>{return q.logger.info("\uD83D\uDEE0\uFE0F","atom",G,`installing in store "${q.config.name}"`),M0(q,Q,Z)},subject:_};if(Z)$.family=Z;if(Y)$.internalRoles=Y;H.atoms.set(G,$);let N=l($);if(Q.effects){let q=0,D=[];for(let J of Q.effects){let j=J({resetSelf:()=>{J0(z,N)},setSelf:(M)=>{g(z,N,M)},onSet:(M)=>N0(z,N,`effect[${q}]`,M)});if(j)D.push(j);++q}$.cleanup=()=>{for(let J of D)J()}}return z.on.atomCreation.next(N),N}function Bz(z,Q){let Z=P(z),{key:Y,family:W}=Q,G=R(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=Vz(z,Q),$=R(z,X).subject,N={type:"state_disposal",subType:"atom",token:Q,value:H,timestamp:Date.now()};$.next(N);let q=K(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 D=p0(Q);Bz(z,D),z.trackers.delete(Y)}if(z.logger.info("\uD83D\uDD25","atom",Y,"deleted"),q&&Z.transactionMeta.phase==="building"){let D=Z.transactionMeta.update.subEvents.at(-1);if(!(D?.type==="molecule_disposal"&&D.values.some(([M])=>M===G.family?.key)))Z.transactionMeta.update.subEvents.push(N)}else z.on.atomDisposal.next(Q)}}function DQ(z,Q){if("internalRoles"in z===!1)return!1;return z.internalRoles.includes(Q)}var Uz=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=f.STORE){this.store=Z,this.realm=new n0(Z),this.options=z,this.defaultContent=Q,this.store.miscResources.set(`join:${z.key}`,this),this.realm.allocate("root",z.key),this.toolkit={get:(...V)=>m(Z,...V),set:(...V)=>{g(Z,...V)},find:(...V)=>F(Z,...V),json:(V)=>a(Z,V)};let Y=z.between[0],W=z.between[1],G=w0(Z,{key:`${z.key}/relatedKeys`,class:k},["join","relations"]);this.core={relatedKeysAtoms:G};let H=({get:V},E)=>V(G,E),X=({set:V},E,O)=>{if(!this.store.molecules.has(B(E)))this.realm.allocate(z.key,E);V(G,E,(h)=>h.add(O)),V(G,O,(h)=>h.add(E))},_=({set:V},E,O)=>{V(G,E,(h)=>{return h.delete(O),h}),V(G,O,(h)=>{return h.delete(E),h})},$=(V,E,O)=>{let{find:h,get:L,set:C}=V,v=h(G,E),d=L(v);for(let b of d){if(O.includes(b))continue;C(G,b,(p)=>{return p.delete(E),p})}C(v,(b)=>{return b.transaction((z0)=>{z0.clear();for(let p of O){let Q0=H(V,p),l0=Q0.has(E);if(this.relations.cardinality==="1:n"){let i0=[];for(let Z0 of Q0){if(Z0===E)continue;let Y0=H(V,Z0);if(Y0.delete(p),Y0.size===0)i0.push(Z0)}if(!l0&&Q0.size>0)Q0.clear();for(let Z0 of i0){let Y0=[p,Z0].sort(),xz=`"${Y0[0]}:${Y0[1]}"`;this.molecules.delete(xz)}}if(!l0)Q0.add(E);z0.add(p)}return!0}),b})},N=(V,E,O)=>{let{set:h}=V;h(G,E,(L)=>{return L.transaction((C)=>{for(let v of O)C.add(v);return!0}),L});for(let L of O)h(G,L,(C)=>{return C.add(E),C});return!0},q=(V,E,O)=>{let h=H(V,E);return O?h.has(O):h.size>0},D={getRelatedKeys:(V)=>H(this.toolkit,V),addRelation:(V,E)=>{this.store.moleculeJoins.set(V,z.key),this.store.moleculeJoins.set(E,z.key),X(this.toolkit,V,E)},deleteRelation:(V,E)=>{_(this.toolkit,V,E)},replaceRelationsSafely:(V,E)=>{$(this.toolkit,V,E)},replaceRelationsUnsafely:(V,E)=>{N(this.toolkit,V,E)},has:(V,E)=>q(this.toolkit,V,E)},J,j;if(Q){j=X0(Z,{key:`${z.key}/content`,default:Q},["join","content"]);let V=({get:h},L)=>h(j,L),E=({set:h},L,C)=>{h(j,L,C)};J=Object.assign(D,{getContent:(h)=>{return V(this.toolkit,h)},setContent:(h,L)=>{E(this.toolkit,h,L)},deleteContent:(h)=>{this.realm.deallocate(h)}})}else J=D;let M=new S(z,{externalStore:J,isAType:z.isAType,isBType:z.isBType,makeContentKey:(...V)=>{let[E,O]=V,h=V.sort(),L=`${h[0]}:${h[1]}`,C=Z.molecules.get(B(E)),v=Z.molecules.get(B(O));if(!C)this.realm.allocate(z.key,E);if(!v)this.realm.allocate(z.key,O);return this.realm.allocate(E,L,"all"),this.realm.claim(O,L),this.store.moleculeJoins.set(L,z.key),L}}),A=()=>t(Z,{key:`${z.key}/singleRelatedKey`,get:(V)=>({get:E})=>{let O=E(G,V);for(let h of O)return h;return null}},["join","keys"]),T=()=>{return t(Z,{key:`${z.key}/multipleRelatedKeys`,get:(V)=>({get:E})=>{let O=_z(G,Z);return E(O,V).members}},["join","keys"])},x=()=>t(Z,{key:`${z.key}/singleRelatedEntry`,get:(V)=>({get:E})=>{let O=E(G,V);for(let h of O){let L=M.isAType?.(V)?V:void 0,C=L===void 0?V:void 0;L??=h,C??=h;let v=M.makeContentKey(L,C),d=E(j,v);return[h,d]}return null}},["join","entries"]),u=()=>t(Z,{key:`${z.key}/multipleRelatedEntries`,get:(V)=>({get:E})=>{let O=_z(G,Z);return E(O,V).members.map((L)=>{let C=M.isAType?.(V)?V:void 0,v=C===void 0?V:void 0;C??=L,v??=L;let d=M.makeContentKey(C,v),b=E(j,d);return[L,b]})}},["join","entries"]);switch(z.cardinality){case"1:1":{let V=A(),E=`${Y}KeyOf${w(W)}`,O=`${W}KeyOf${w(Y)}`,h={[E]:V,[O]:V},L;if(Q){let C=x(),v=`${Y}EntryOf${w(W)}`,d=`${W}EntryOf${w(Y)}`,b={[v]:C,[d]:C};L=Object.assign(h,b)}else L=h;this.relations=M,this.states=L;break}case"1:n":{let V=A(),E=T(),O=`${Y}KeyOf${w(W)}`,h=`${W}KeysOf${w(Y)}`,L={[O]:V,[h]:E},C;if(Q){let v=x(),d=u(),b=`${Y}EntryOf${w(W)}`,z0=`${W}EntriesOf${w(Y)}`,p={[b]:v,[z0]:d};C=Object.assign(L,p)}else C=L;this.relations=M,this.states=C;break}case"n:n":{let V=T(),E=`${Y}KeysOf${w(W)}`,O=`${W}KeysOf${w(Y)}`,h={[E]:V,[O]:V},L;if(Q){let C=u(),v=`${Y}EntriesOf${w(W)}`,d=`${W}EntriesOf${w(Y)}`,b={[v]:C,[d]:C};L=Object.assign(h,b)}else L=h;this.relations=M,this.states=L}}}};function Zz(z,Q,Z){return z.joins.set(Q.key,new Uz(Q,Z,z)),{key:Q.key,type:"join",a:Q.between[0],b:Q.between[1],cardinality:Q.cardinality}}function k0(z,Q){let Z=Q.joins.get(z.key);if(Z===void 0){let W=f.STORE.joins.get(z.key);if(W===void 0)throw new Error(`Join "${z.key}" not found in store "${Q.config.name}"`);Z=new Uz(W.options,W.defaultContent,Q),Q.joins.set(z.key,Z)}return Z}function $0(z,Q,Z){let Y=k0(z,Z),W=P(Z);if(K(W)){let{toolkit:G}=W.transactionMeta;Y.transact(G,({relations:H})=>{Q(H)})}else Q(Y.relations)}function Yz(z,Q,Z){let Y=k0(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 F(Z,_,Q)},get[H](){let _=Y.states[H];return F(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 F(Z,$,Q)},get[_](){let $=Y.states[_];return F(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 F(Z,_,Q)},get[H](){let _=Y.states[H];return F(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 F(Z,$,Q)},get[_](){let $=Y.states[_];return F(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 F(Z,_,Q)},get[H](){let _=Y.states[H];return F(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 F(Z,$,Q)},get[_](){let $=Y.states[_];return F(Z,$,Q)}})}}}return W}function Wz(z,Q){return k0(z,Q).core.relatedKeysAtoms}function jQ(z){return z.startsWith("\uD83D\uDD0D ")}var VQ=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")}},ZZ=class z{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(Q){this.key=Q}static existing=new VQ;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 YZ=n({key:"usersInRoomIndex",class:k}),y0=n({key:"roomIndex",class:k}),JQ={enteredAtEpoch:0},q0=j0({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:(z)=>typeof z==="string",isBType:(z)=>typeof z==="string"},JQ),WZ=V0({key:"usersInMyRoomView",get:(z)=>({find:Q})=>{let Z=r0(q0);return[Q(Z,z)]}});import{spawn as EQ}from"child_process";var u0=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}},MQ=class extends u0{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=I(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=I(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=I(this.incompleteLog);this.handleLog(H);while(this.unprocessedLogs.length>0)if(this.incompleteLog=this.unprocessedLogs.shift()??"",this.incompleteLog)H=I(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()}},hQ=class extends u0{in;out;id="no_id_retrieved";disposalFunctions=[];constructor(z){super((...Q)=>{return this.out.next(Q),this});this.id=z,this.in=new U,this.out=new U,this.in.subscribe("socket",(Q)=>{this.handleEvent(...Q)})}dispose(){for(let z of this.disposalFunctions)z()}},Fz=class extends u0{incompleteData="";unprocessedEvents=[];relays;relayServices;process;id="#####";log(...z){this.process.stderr.write(B(z.map((Q)=>Q instanceof k?`{ ${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=I(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=I(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 hQ(`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)}},wz=W0({key:"roomArguments",default:["echo",["Hello World!"]]}),PQ=V0({key:"room",get:(z)=>async({get:Q,find:Z})=>{let Y=Z(wz,z),W=Q(Y),[G,H]=W,X=await new Promise((_)=>{let $=EQ(G,H,{env:process.env}),N=(q)=>{if(q.toString()==="ALIVE")$.stdout.off("data",N),_($)};$.stdout.on("data",N)});return new MQ(X,z)}}),VZ=G0({key:"createRoom",do:({get:z,set:Q,find:Z},Y,W,G)=>{let H=G?[W,G]:[W],X=Z(wz,Y);Q(X,H),Q(y0,(N)=>N.add(Y));let _=Z(PQ,Y);return z(_)}}),JZ=G0({key:"joinRoom",do:(z,Q,Z,Y)=>{let W={enteredAtEpoch:Y};return $0(q0,(G)=>{G.set({room:Q,user:Z},W)},z.env().store),W}}),EZ=G0({key:"leaveRoom",do:(z,Q,Z)=>{$0(q0,(Y)=>{Y.delete({room:Q,user:Z})},z.env().store)}}),MZ=G0({key:"destroyRoom",do:(z,Q)=>{$0(q0,(Z)=>{Z.delete({room:Q})},z.env().store),z.set(y0,(Z)=>(Z.delete(Q),Z))}});var hZ=W0({key:"redactor",default:{occlude:(z)=>z}}),PZ=W0({key:"unacknowledgedUpdates",default:()=>[]}),LZ=W0({key:"sockets",default:null}),OZ=n({key:"socketsIndex",class:k}),CZ=n({key:"usersIndex",class:k}),BZ=j0({key:"usersOfSockets",between:["user","socket"],cardinality:"1:1",isAType:(z)=>z.startsWith("user::"),isBType:(z)=>z.startsWith("socket::")});var D0=new Fz;Object.assign(console,D0.logger,{log:D0.logger.info});D0.on("timeToStop",function z(){D0.logger.info("\uD83D\uDEEC game worker exiting"),process.exit(0)});D0.logger.info("\uD83D\uDEEB game worker ready");
|