tempest.games 0.2.101 → 0.2.103

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.
@@ -981,23 +981,23 @@ var Store = class {
981
981
  family.install(this);
982
982
  }
983
983
  const mutableHelpers = /* @__PURE__ */ new Set;
984
- for (const [, atom] of store.atoms) {
985
- if (mutableHelpers.has(atom.key))
984
+ for (const [, atom$1] of store.atoms) {
985
+ if (mutableHelpers.has(atom$1.key))
986
986
  continue;
987
- atom.install(this);
988
- if (atom.type === `mutable_atom`) {
989
- const originalJsonToken = getJsonToken(store, atom);
990
- const originalUpdateToken = getUpdateToken(atom);
987
+ atom$1.install(this);
988
+ if (atom$1.type === `mutable_atom`) {
989
+ const originalJsonToken = getJsonToken(store, atom$1);
990
+ const originalUpdateToken = getUpdateToken(atom$1);
991
991
  mutableHelpers.add(originalJsonToken.key);
992
992
  mutableHelpers.add(originalUpdateToken.key);
993
993
  }
994
994
  }
995
- for (const [, selector] of store.readonlySelectors)
996
- selector.install(this);
997
- for (const [, selector] of store.writableSelectors) {
998
- if (mutableHelpers.has(selector.key))
995
+ for (const [, selector$1] of store.readonlySelectors)
996
+ selector$1.install(this);
997
+ for (const [, selector$1] of store.writableSelectors) {
998
+ if (mutableHelpers.has(selector$1.key))
999
999
  continue;
1000
- selector.install(this);
1000
+ selector$1.install(this);
1001
1001
  }
1002
1002
  for (const [, tx] of store.transactions)
1003
1003
  tx.install(this);
@@ -1675,26 +1675,26 @@ function dispatchOrDeferStateUpdate(target, state, proto, stateIsNewlyCreated, f
1675
1675
  }
1676
1676
  }
1677
1677
  var UNSET = Symbol(`UNSET`);
1678
- var setAtom = (target, atom, next) => {
1678
+ var setAtom = (target, atom$1, next) => {
1679
1679
  let oldValue;
1680
1680
  let newValue;
1681
1681
  if (isFn(next)) {
1682
- const prev = readOrComputeValue(target, atom, `mut`);
1682
+ const prev = readOrComputeValue(target, atom$1, `mut`);
1683
1683
  oldValue = prev;
1684
1684
  newValue = next(prev);
1685
1685
  } else {
1686
- if (target.valueMap.has(atom.key))
1687
- oldValue = readFromCache(target, atom, `mut`);
1688
- else if (atom.type === `atom` && !isFn(atom.default))
1689
- oldValue = atom.default;
1686
+ if (target.valueMap.has(atom$1.key))
1687
+ oldValue = readFromCache(target, atom$1, `mut`);
1688
+ else if (atom$1.type === `atom` && !isFn(atom$1.default))
1689
+ oldValue = atom$1.default;
1690
1690
  else
1691
1691
  oldValue = UNSET;
1692
1692
  newValue = next;
1693
1693
  }
1694
- target.logger.info(`\u2B50`, `atom`, atom.key, `setting value`, newValue);
1695
- newValue = writeToCache(target, atom, newValue);
1696
- markDone(target, atom.key);
1697
- evictDownstreamFromAtom(target, atom);
1694
+ target.logger.info(`\u2B50`, `atom`, atom$1.key, `setting value`, newValue);
1695
+ newValue = writeToCache(target, atom$1, newValue);
1696
+ markDone(target, atom$1.key);
1697
+ evictDownstreamFromAtom(target, atom$1);
1698
1698
  if (oldValue === UNSET)
1699
1699
  return { newValue };
1700
1700
  return {
@@ -1702,17 +1702,17 @@ var setAtom = (target, atom, next) => {
1702
1702
  newValue
1703
1703
  };
1704
1704
  };
1705
- function resetAtom(target, atom) {
1706
- switch (atom.type) {
1705
+ function resetAtom(target, atom$1) {
1706
+ switch (atom$1.type) {
1707
1707
  case `mutable_atom`:
1708
- return setAtom(target, atom, new atom.class);
1708
+ return setAtom(target, atom$1, new atom$1.class);
1709
1709
  case `atom`: {
1710
1710
  let def;
1711
- if (isFn(atom.default))
1712
- def = safeCompute(target, atom);
1711
+ if (isFn(atom$1.default))
1712
+ def = safeCompute(target, atom$1);
1713
1713
  else
1714
- def = atom.default;
1715
- return setAtom(target, atom, def);
1714
+ def = atom$1.default;
1715
+ return setAtom(target, atom$1, def);
1716
1716
  }
1717
1717
  }
1718
1718
  }
@@ -1726,8 +1726,8 @@ function resetAtomOrSelector(target, state) {
1726
1726
  case `writable_held_selector`:
1727
1727
  {
1728
1728
  const atoms = traceRootSelectorAtoms(target, state.key);
1729
- for (const atom of atoms.values())
1730
- dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom), false);
1729
+ for (const atom$1 of atoms.values())
1730
+ dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom$1), false);
1731
1731
  const value = state.getFrom(target);
1732
1732
  protoUpdate = {
1733
1733
  oldValue: value,
@@ -1739,8 +1739,8 @@ function resetAtomOrSelector(target, state) {
1739
1739
  {
1740
1740
  const oldValue = safeCompute(target, state);
1741
1741
  const atoms = traceRootSelectorAtoms(target, state.key);
1742
- for (const atom of atoms.values())
1743
- dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom), false);
1742
+ for (const atom$1 of atoms.values())
1743
+ dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom$1), false);
1744
1744
  protoUpdate = {
1745
1745
  oldValue,
1746
1746
  newValue: safeCompute(target, state)
@@ -1757,26 +1757,26 @@ var RESET_STATE = Symbol(`RESET`);
1757
1757
  function resetInStore(store, ...params) {
1758
1758
  setIntoStore(store, ...[...params, RESET_STATE]);
1759
1759
  }
1760
- function setSelector(target, selector, next) {
1760
+ function setSelector(target, selector$1, next) {
1761
1761
  let oldValue;
1762
1762
  let newValue;
1763
1763
  let constant;
1764
- const { type, key } = selector;
1765
- switch (selector.type) {
1764
+ const { type, key } = selector$1;
1765
+ switch (selector$1.type) {
1766
1766
  case `writable_pure_selector`:
1767
- oldValue = readOrComputeValue(target, selector, `mut`);
1767
+ oldValue = readOrComputeValue(target, selector$1, `mut`);
1768
1768
  newValue = become(next, oldValue);
1769
- newValue = writeToCache(target, selector, newValue);
1769
+ newValue = writeToCache(target, selector$1, newValue);
1770
1770
  break;
1771
1771
  case `writable_held_selector`:
1772
- constant = selector.const;
1772
+ constant = selector$1.const;
1773
1773
  become(next, constant);
1774
1774
  oldValue = constant;
1775
1775
  newValue = constant;
1776
1776
  }
1777
1777
  target.logger.info(`\u2B50`, type, key, `setting to`, newValue);
1778
1778
  markDone(target, key);
1779
- selector.setSelf(newValue);
1779
+ selector$1.setSelf(newValue);
1780
1780
  return {
1781
1781
  oldValue,
1782
1782
  newValue
@@ -1875,8 +1875,8 @@ function traceRootSelectorAtoms(store, selectorKey, covered = /* @__PURE__ */ ne
1875
1875
  continue;
1876
1876
  covered.add(dependencyKey);
1877
1877
  if (isAtomKey(store, dependencyKey)) {
1878
- const atom = store.atoms.get(dependencyKey);
1879
- roots.set(atom.key, atom);
1878
+ const atom$1 = store.atoms.get(dependencyKey);
1879
+ roots.set(atom$1.key, atom$1);
1880
1880
  } else
1881
1881
  dependencies.push(...getSelectorDependencyKeys(store, dependencyKey));
1882
1882
  }
@@ -2134,13 +2134,13 @@ var recallState = (store, state) => {
2134
2134
  return target.operation.prev.get(state.key);
2135
2135
  return target.valueMap.get(state.key);
2136
2136
  };
2137
- var subscribeToRootDependency = (target, selector, atom) => {
2138
- return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
2139
- target.logger.info(`\uD83D\uDCE2`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2140
- const oldValue = recallState(target, selector);
2141
- const newValue = readOrComputeValue(target, selector);
2142
- target.logger.info(`\u2728`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
2143
- selector.subject.next({
2137
+ var subscribeToRootDependency = (target, selector$1, atom$1) => {
2138
+ return atom$1.subject.subscribe(`${selector$1.type}:${selector$1.key}`, (atomChange) => {
2139
+ target.logger.info(`\uD83D\uDCE2`, selector$1.type, selector$1.key, `root`, atom$1.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2140
+ const oldValue = recallState(target, selector$1);
2141
+ const newValue = readOrComputeValue(target, selector$1);
2142
+ target.logger.info(`\u2728`, selector$1.type, selector$1.key, `went`, oldValue, `->`, newValue);
2143
+ selector$1.subject.next({
2144
2144
  newValue,
2145
2145
  oldValue
2146
2146
  });
@@ -2160,8 +2160,8 @@ function subscribeToState(store, token, key, handleUpdate) {
2160
2160
  let updateHandler = safelyHandleUpdate;
2161
2161
  if (isSelector) {
2162
2162
  readOrComputeValue(store, state);
2163
- for (const [atomKey, atom] of traceRootSelectorAtoms(store, state.key))
2164
- rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom));
2163
+ for (const [atomKey, atom$1] of traceRootSelectorAtoms(store, state.key))
2164
+ rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom$1));
2165
2165
  updateHandler = function updateRootsBeforeHandlingUpdate(update) {
2166
2166
  const dependencies = traceRootSelectorAtoms(store, state.key);
2167
2167
  for (const [previousRootKey, unsub] of rootSubs)
@@ -2171,8 +2171,8 @@ function subscribeToState(store, token, key, handleUpdate) {
2171
2171
  unsub();
2172
2172
  rootSubs.delete(previousRootKey);
2173
2173
  }
2174
- for (const [atomKey, atom] of dependencies)
2175
- rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom));
2174
+ for (const [atomKey, atom$1] of dependencies)
2175
+ rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom$1));
2176
2176
  safelyHandleUpdate(update);
2177
2177
  };
2178
2178
  }
@@ -2507,9 +2507,9 @@ function evictCachedValue(target, key) {
2507
2507
  target.valueMap.delete(key);
2508
2508
  target.logger.info(`\uD83D\uDDD1`, `state`, key, `evicted`);
2509
2509
  }
2510
- function evictDownstreamFromAtom(store, atom) {
2510
+ function evictDownstreamFromAtom(store, atom$1) {
2511
2511
  const target = newest(store);
2512
- const { key, type } = atom;
2512
+ const { key, type } = atom$1;
2513
2513
  const downstreamKeys = target.selectorAtoms.getRelatedKeys(key);
2514
2514
  target.logger.info(`\uD83E\uDDF9`, type, key, downstreamKeys ? `evicting ${downstreamKeys.size} states downstream:` : `no downstream states`, downstreamKeys ?? `to evict`);
2515
2515
  if (downstreamKeys) {
@@ -2587,10 +2587,10 @@ function createRegularAtom(store, options, family, internalRoles) {
2587
2587
  store.on.atomCreation.next(token);
2588
2588
  return token;
2589
2589
  }
2590
- function hasRole(atom, role) {
2591
- if (`internalRoles` in atom === false)
2590
+ function hasRole(atom$1, role) {
2591
+ if (`internalRoles` in atom$1 === false)
2592
2592
  return false;
2593
- return atom.internalRoles.includes(role);
2593
+ return atom$1.internalRoles.includes(role);
2594
2594
  }
2595
2595
  function capitalize(string) {
2596
2596
  return string[0].toUpperCase() + string.slice(1);
@@ -3051,7 +3051,7 @@ var SubjectSocket = class extends CustomSocket {
3051
3051
  in;
3052
3052
  out;
3053
3053
  id = `no_id_retrieved`;
3054
- disposalFunctions = [];
3054
+ disposalEffects = [];
3055
3055
  constructor(id) {
3056
3056
  super((...args) => {
3057
3057
  this.out.next(args);
@@ -3065,7 +3065,7 @@ var SubjectSocket = class extends CustomSocket {
3065
3065
  });
3066
3066
  }
3067
3067
  dispose() {
3068
- for (const dispose of this.disposalFunctions)
3068
+ for (const dispose of this.disposalEffects)
3069
3069
  dispose();
3070
3070
  }
3071
3071
  };
@@ -3157,18 +3157,30 @@ var ParentSocket = class extends CustomSocket {
3157
3157
  this.id = this.proc.pid?.toString();
3158
3158
  this.on(`user-joins`, (userKey) => {
3159
3159
  this.logger.info(`\uD83D\uDC64`, userKey, `joined`);
3160
- if (this.relays.get(userKey))
3160
+ const existingRelay = this.relays.get(userKey);
3161
+ if (existingRelay) {
3162
+ this.logger.info(`\uD83D\uDD17`, `reattaching relay services for`, userKey);
3163
+ const cleanupRelay$1 = this.initRelay(existingRelay, userKey);
3164
+ if (cleanupRelay$1)
3165
+ existingRelay.disposalEffects.push(cleanupRelay$1);
3166
+ this.on(userKey, (...data) => {
3167
+ relay.in.next(data);
3168
+ });
3169
+ existingRelay.disposalEffects.push(existingRelay.out.subscribe(`socket`, (data) => {
3170
+ this.emit(userKey, ...data);
3171
+ }));
3161
3172
  return;
3173
+ }
3162
3174
  const relay = new SubjectSocket(userKey);
3163
3175
  this.relays.set(userKey, relay);
3164
3176
  this.logger.info(`\uD83D\uDD17`, `attaching relay services for`, userKey);
3165
3177
  const cleanupRelay = this.initRelay(relay, userKey);
3166
3178
  if (cleanupRelay)
3167
- relay.disposalFunctions.push(cleanupRelay);
3179
+ relay.disposalEffects.push(cleanupRelay);
3168
3180
  this.on(userKey, (...data) => {
3169
3181
  relay.in.next(data);
3170
3182
  });
3171
- relay.disposalFunctions.push(relay.out.subscribe(`socket`, (data) => {
3183
+ relay.disposalEffects.push(relay.out.subscribe(`socket`, (data) => {
3172
3184
  this.emit(userKey, ...data);
3173
3185
  }));
3174
3186
  });
@@ -1099,23 +1099,23 @@ var Store = class {
1099
1099
  family.install(this);
1100
1100
  }
1101
1101
  const mutableHelpers = /* @__PURE__ */ new Set;
1102
- for (const [, atom] of store.atoms) {
1103
- if (mutableHelpers.has(atom.key))
1102
+ for (const [, atom$1] of store.atoms) {
1103
+ if (mutableHelpers.has(atom$1.key))
1104
1104
  continue;
1105
- atom.install(this);
1106
- if (atom.type === `mutable_atom`) {
1107
- const originalJsonToken = getJsonToken(store, atom);
1108
- const originalUpdateToken = getUpdateToken(atom);
1105
+ atom$1.install(this);
1106
+ if (atom$1.type === `mutable_atom`) {
1107
+ const originalJsonToken = getJsonToken(store, atom$1);
1108
+ const originalUpdateToken = getUpdateToken(atom$1);
1109
1109
  mutableHelpers.add(originalJsonToken.key);
1110
1110
  mutableHelpers.add(originalUpdateToken.key);
1111
1111
  }
1112
1112
  }
1113
- for (const [, selector] of store.readonlySelectors)
1114
- selector.install(this);
1115
- for (const [, selector] of store.writableSelectors) {
1116
- if (mutableHelpers.has(selector.key))
1113
+ for (const [, selector$1] of store.readonlySelectors)
1114
+ selector$1.install(this);
1115
+ for (const [, selector$1] of store.writableSelectors) {
1116
+ if (mutableHelpers.has(selector$1.key))
1117
1117
  continue;
1118
- selector.install(this);
1118
+ selector$1.install(this);
1119
1119
  }
1120
1120
  for (const [, tx] of store.transactions)
1121
1121
  tx.install(this);
@@ -1793,26 +1793,26 @@ function dispatchOrDeferStateUpdate(target, state, proto, stateIsNewlyCreated, f
1793
1793
  }
1794
1794
  }
1795
1795
  var UNSET = Symbol(`UNSET`);
1796
- var setAtom = (target, atom, next) => {
1796
+ var setAtom = (target, atom$1, next) => {
1797
1797
  let oldValue;
1798
1798
  let newValue;
1799
1799
  if (isFn(next)) {
1800
- const prev = readOrComputeValue(target, atom, `mut`);
1800
+ const prev = readOrComputeValue(target, atom$1, `mut`);
1801
1801
  oldValue = prev;
1802
1802
  newValue = next(prev);
1803
1803
  } else {
1804
- if (target.valueMap.has(atom.key))
1805
- oldValue = readFromCache(target, atom, `mut`);
1806
- else if (atom.type === `atom` && !isFn(atom.default))
1807
- oldValue = atom.default;
1804
+ if (target.valueMap.has(atom$1.key))
1805
+ oldValue = readFromCache(target, atom$1, `mut`);
1806
+ else if (atom$1.type === `atom` && !isFn(atom$1.default))
1807
+ oldValue = atom$1.default;
1808
1808
  else
1809
1809
  oldValue = UNSET;
1810
1810
  newValue = next;
1811
1811
  }
1812
- target.logger.info(`\u2B50`, `atom`, atom.key, `setting value`, newValue);
1813
- newValue = writeToCache(target, atom, newValue);
1814
- markDone(target, atom.key);
1815
- evictDownstreamFromAtom(target, atom);
1812
+ target.logger.info(`\u2B50`, `atom`, atom$1.key, `setting value`, newValue);
1813
+ newValue = writeToCache(target, atom$1, newValue);
1814
+ markDone(target, atom$1.key);
1815
+ evictDownstreamFromAtom(target, atom$1);
1816
1816
  if (oldValue === UNSET)
1817
1817
  return { newValue };
1818
1818
  return {
@@ -1820,17 +1820,17 @@ var setAtom = (target, atom, next) => {
1820
1820
  newValue
1821
1821
  };
1822
1822
  };
1823
- function resetAtom(target, atom) {
1824
- switch (atom.type) {
1823
+ function resetAtom(target, atom$1) {
1824
+ switch (atom$1.type) {
1825
1825
  case `mutable_atom`:
1826
- return setAtom(target, atom, new atom.class);
1826
+ return setAtom(target, atom$1, new atom$1.class);
1827
1827
  case `atom`: {
1828
1828
  let def;
1829
- if (isFn(atom.default))
1830
- def = safeCompute(target, atom);
1829
+ if (isFn(atom$1.default))
1830
+ def = safeCompute(target, atom$1);
1831
1831
  else
1832
- def = atom.default;
1833
- return setAtom(target, atom, def);
1832
+ def = atom$1.default;
1833
+ return setAtom(target, atom$1, def);
1834
1834
  }
1835
1835
  }
1836
1836
  }
@@ -1844,8 +1844,8 @@ function resetAtomOrSelector(target, state) {
1844
1844
  case `writable_held_selector`:
1845
1845
  {
1846
1846
  const atoms = traceRootSelectorAtoms(target, state.key);
1847
- for (const atom of atoms.values())
1848
- dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom), false);
1847
+ for (const atom$1 of atoms.values())
1848
+ dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom$1), false);
1849
1849
  const value = state.getFrom(target);
1850
1850
  protoUpdate = {
1851
1851
  oldValue: value,
@@ -1857,8 +1857,8 @@ function resetAtomOrSelector(target, state) {
1857
1857
  {
1858
1858
  const oldValue = safeCompute(target, state);
1859
1859
  const atoms = traceRootSelectorAtoms(target, state.key);
1860
- for (const atom of atoms.values())
1861
- dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom), false);
1860
+ for (const atom$1 of atoms.values())
1861
+ dispatchOrDeferStateUpdate(target, state, resetAtom(target, atom$1), false);
1862
1862
  protoUpdate = {
1863
1863
  oldValue,
1864
1864
  newValue: safeCompute(target, state)
@@ -1875,26 +1875,26 @@ var RESET_STATE = Symbol(`RESET`);
1875
1875
  function resetInStore(store, ...params) {
1876
1876
  setIntoStore(store, ...[...params, RESET_STATE]);
1877
1877
  }
1878
- function setSelector(target, selector, next) {
1878
+ function setSelector(target, selector$1, next) {
1879
1879
  let oldValue;
1880
1880
  let newValue;
1881
1881
  let constant;
1882
- const { type, key } = selector;
1883
- switch (selector.type) {
1882
+ const { type, key } = selector$1;
1883
+ switch (selector$1.type) {
1884
1884
  case `writable_pure_selector`:
1885
- oldValue = readOrComputeValue(target, selector, `mut`);
1885
+ oldValue = readOrComputeValue(target, selector$1, `mut`);
1886
1886
  newValue = become(next, oldValue);
1887
- newValue = writeToCache(target, selector, newValue);
1887
+ newValue = writeToCache(target, selector$1, newValue);
1888
1888
  break;
1889
1889
  case `writable_held_selector`:
1890
- constant = selector.const;
1890
+ constant = selector$1.const;
1891
1891
  become(next, constant);
1892
1892
  oldValue = constant;
1893
1893
  newValue = constant;
1894
1894
  }
1895
1895
  target.logger.info(`\u2B50`, type, key, `setting to`, newValue);
1896
1896
  markDone(target, key);
1897
- selector.setSelf(newValue);
1897
+ selector$1.setSelf(newValue);
1898
1898
  return {
1899
1899
  oldValue,
1900
1900
  newValue
@@ -1993,8 +1993,8 @@ function traceRootSelectorAtoms(store, selectorKey, covered = /* @__PURE__ */ ne
1993
1993
  continue;
1994
1994
  covered.add(dependencyKey);
1995
1995
  if (isAtomKey(store, dependencyKey)) {
1996
- const atom = store.atoms.get(dependencyKey);
1997
- roots.set(atom.key, atom);
1996
+ const atom$1 = store.atoms.get(dependencyKey);
1997
+ roots.set(atom$1.key, atom$1);
1998
1998
  } else
1999
1999
  dependencies.push(...getSelectorDependencyKeys(store, dependencyKey));
2000
2000
  }
@@ -2252,13 +2252,13 @@ var recallState = (store, state) => {
2252
2252
  return target.operation.prev.get(state.key);
2253
2253
  return target.valueMap.get(state.key);
2254
2254
  };
2255
- var subscribeToRootDependency = (target, selector, atom) => {
2256
- return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
2257
- target.logger.info(`\uD83D\uDCE2`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2258
- const oldValue = recallState(target, selector);
2259
- const newValue = readOrComputeValue(target, selector);
2260
- target.logger.info(`\u2728`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
2261
- selector.subject.next({
2255
+ var subscribeToRootDependency = (target, selector$1, atom$1) => {
2256
+ return atom$1.subject.subscribe(`${selector$1.type}:${selector$1.key}`, (atomChange) => {
2257
+ target.logger.info(`\uD83D\uDCE2`, selector$1.type, selector$1.key, `root`, atom$1.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2258
+ const oldValue = recallState(target, selector$1);
2259
+ const newValue = readOrComputeValue(target, selector$1);
2260
+ target.logger.info(`\u2728`, selector$1.type, selector$1.key, `went`, oldValue, `->`, newValue);
2261
+ selector$1.subject.next({
2262
2262
  newValue,
2263
2263
  oldValue
2264
2264
  });
@@ -2278,8 +2278,8 @@ function subscribeToState(store, token, key, handleUpdate) {
2278
2278
  let updateHandler = safelyHandleUpdate;
2279
2279
  if (isSelector) {
2280
2280
  readOrComputeValue(store, state);
2281
- for (const [atomKey, atom] of traceRootSelectorAtoms(store, state.key))
2282
- rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom));
2281
+ for (const [atomKey, atom$1] of traceRootSelectorAtoms(store, state.key))
2282
+ rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom$1));
2283
2283
  updateHandler = function updateRootsBeforeHandlingUpdate(update) {
2284
2284
  const dependencies = traceRootSelectorAtoms(store, state.key);
2285
2285
  for (const [previousRootKey, unsub] of rootSubs)
@@ -2289,8 +2289,8 @@ function subscribeToState(store, token, key, handleUpdate) {
2289
2289
  unsub();
2290
2290
  rootSubs.delete(previousRootKey);
2291
2291
  }
2292
- for (const [atomKey, atom] of dependencies)
2293
- rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom));
2292
+ for (const [atomKey, atom$1] of dependencies)
2293
+ rootSubs.set(atomKey, subscribeToRootDependency(store, state, atom$1));
2294
2294
  safelyHandleUpdate(update);
2295
2295
  };
2296
2296
  }
@@ -2625,9 +2625,9 @@ function evictCachedValue(target, key) {
2625
2625
  target.valueMap.delete(key);
2626
2626
  target.logger.info(`\uD83D\uDDD1`, `state`, key, `evicted`);
2627
2627
  }
2628
- function evictDownstreamFromAtom(store, atom) {
2628
+ function evictDownstreamFromAtom(store, atom$1) {
2629
2629
  const target = newest(store);
2630
- const { key, type } = atom;
2630
+ const { key, type } = atom$1;
2631
2631
  const downstreamKeys = target.selectorAtoms.getRelatedKeys(key);
2632
2632
  target.logger.info(`\uD83E\uDDF9`, type, key, downstreamKeys ? `evicting ${downstreamKeys.size} states downstream:` : `no downstream states`, downstreamKeys ?? `to evict`);
2633
2633
  if (downstreamKeys) {
@@ -2705,10 +2705,10 @@ function createRegularAtom(store, options, family, internalRoles) {
2705
2705
  store.on.atomCreation.next(token);
2706
2706
  return token;
2707
2707
  }
2708
- function hasRole(atom, role) {
2709
- if (`internalRoles` in atom === false)
2708
+ function hasRole(atom$1, role) {
2709
+ if (`internalRoles` in atom$1 === false)
2710
2710
  return false;
2711
- return atom.internalRoles.includes(role);
2711
+ return atom$1.internalRoles.includes(role);
2712
2712
  }
2713
2713
  function capitalize(string) {
2714
2714
  return string[0].toUpperCase() + string.slice(1);
@@ -3169,7 +3169,7 @@ var SubjectSocket = class extends CustomSocket {
3169
3169
  in;
3170
3170
  out;
3171
3171
  id = `no_id_retrieved`;
3172
- disposalFunctions = [];
3172
+ disposalEffects = [];
3173
3173
  constructor(id) {
3174
3174
  super((...args) => {
3175
3175
  this.out.next(args);
@@ -3183,7 +3183,7 @@ var SubjectSocket = class extends CustomSocket {
3183
3183
  });
3184
3184
  }
3185
3185
  dispose() {
3186
- for (const dispose of this.disposalFunctions)
3186
+ for (const dispose of this.disposalEffects)
3187
3187
  dispose();
3188
3188
  }
3189
3189
  };
@@ -3275,18 +3275,30 @@ var ParentSocket = class extends CustomSocket {
3275
3275
  this.id = this.proc.pid?.toString();
3276
3276
  this.on(`user-joins`, (userKey) => {
3277
3277
  this.logger.info(`\uD83D\uDC64`, userKey, `joined`);
3278
- if (this.relays.get(userKey))
3278
+ const existingRelay = this.relays.get(userKey);
3279
+ if (existingRelay) {
3280
+ this.logger.info(`\uD83D\uDD17`, `reattaching relay services for`, userKey);
3281
+ const cleanupRelay$1 = this.initRelay(existingRelay, userKey);
3282
+ if (cleanupRelay$1)
3283
+ existingRelay.disposalEffects.push(cleanupRelay$1);
3284
+ this.on(userKey, (...data) => {
3285
+ relay.in.next(data);
3286
+ });
3287
+ existingRelay.disposalEffects.push(existingRelay.out.subscribe(`socket`, (data) => {
3288
+ this.emit(userKey, ...data);
3289
+ }));
3279
3290
  return;
3291
+ }
3280
3292
  const relay = new SubjectSocket(userKey);
3281
3293
  this.relays.set(userKey, relay);
3282
3294
  this.logger.info(`\uD83D\uDD17`, `attaching relay services for`, userKey);
3283
3295
  const cleanupRelay = this.initRelay(relay, userKey);
3284
3296
  if (cleanupRelay)
3285
- relay.disposalFunctions.push(cleanupRelay);
3297
+ relay.disposalEffects.push(cleanupRelay);
3286
3298
  this.on(userKey, (...data) => {
3287
3299
  relay.in.next(data);
3288
3300
  });
3289
- relay.disposalFunctions.push(relay.out.subscribe(`socket`, (data) => {
3301
+ relay.disposalEffects.push(relay.out.subscribe(`socket`, (data) => {
3290
3302
  this.emit(userKey, ...data);
3291
3303
  }));
3292
3304
  });
@@ -16901,7 +16913,7 @@ function date4(params) {
16901
16913
 
16902
16914
  // ../../node_modules/.pnpm/zod@4.2.1/node_modules/zod/v4/classic/external.js
16903
16915
  config(en_default());
16904
- // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__73d64c8a7d5609e68956a108f5015724/node_modules/safegen/dist/safegen-DHhNOdib.js
16916
+ // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__e4a61318744067d8702021155ca480a3/node_modules/safegen/dist/safegen-DHhNOdib.js
16905
16917
  function createSafeDataGenerator(gen, logger) {
16906
16918
  return function generateFromSchema({ schema, fallback, toJsonSchema = exports_external.toJSONSchema }) {
16907
16919
  const jsonSchema = toJsonSchema(schema);
@@ -16933,7 +16945,7 @@ function jsonSchemaToInstruction(jsonSchema) {
16933
16945
  `);
16934
16946
  }
16935
16947
 
16936
- // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__73d64c8a7d5609e68956a108f5015724/node_modules/safegen/dist/primitives-DeHVhToL.js
16948
+ // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__e4a61318744067d8702021155ca480a3/node_modules/safegen/dist/primitives-DeHVhToL.js
16937
16949
  function formatIssue(prompt, actual, issue2, consequence) {
16938
16950
  const lines = [
16939
16951
  `SafeGen saw that invalid data was produced for the prompt:`,
@@ -24079,7 +24091,7 @@ var _deployments_endpoints = new Set([
24079
24091
  "/batches",
24080
24092
  "/images/edits"
24081
24093
  ]);
24082
- // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__73d64c8a7d5609e68956a108f5015724/node_modules/safegen/dist/openai/index.js
24094
+ // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__e4a61318744067d8702021155ca480a3/node_modules/safegen/dist/openai/index.js
24083
24095
  function buildOpenAiRequestParams(model, ...params) {
24084
24096
  const [instruction, jsonSchema, _, previouslyFailedResponses] = params;
24085
24097
  const messages = [{
@@ -46118,7 +46130,7 @@ async function getLogs(logger, logFilePath = `/var/log/nginx/access.log`, now =
46118
46130
  });
46119
46131
  }
46120
46132
 
46121
- // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__73d64c8a7d5609e68956a108f5015724/node_modules/safegen/dist/arktype/index.js
46133
+ // ../../node_modules/.pnpm/safegen@0.8.3_@floating-ui+react-dom@2.1.6_react-dom@19.2.3_react@19.2.3__react@19.2.3__e4a61318744067d8702021155ca480a3/node_modules/safegen/dist/arktype/index.js
46122
46134
  function arktypeToJsonSchema(type2) {
46123
46135
  return type2.toJsonSchema();
46124
46136
  }