atom.io 0.24.8 → 0.25.1

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.
Files changed (38) hide show
  1. package/data/dist/index.cjs +40 -62
  2. package/data/dist/index.d.ts +3 -3
  3. package/data/dist/index.js +41 -63
  4. package/data/src/join.ts +47 -64
  5. package/dist/index.cjs +26 -8
  6. package/dist/index.d.ts +37 -15
  7. package/dist/index.js +27 -9
  8. package/internal/dist/index.cjs +223 -111
  9. package/internal/dist/index.d.ts +12 -6
  10. package/internal/dist/index.js +224 -113
  11. package/internal/src/families/dispose-from-store.ts +56 -3
  12. package/internal/src/get-state/get-from-store.ts +58 -25
  13. package/internal/src/lineage.ts +7 -0
  14. package/internal/src/molecule/make-molecule-in-store.ts +75 -31
  15. package/internal/src/not-found-error.ts +29 -6
  16. package/internal/src/selector/create-writable-selector.ts +5 -5
  17. package/internal/src/selector/register-selector.ts +58 -9
  18. package/internal/src/set-state/set-into-store.ts +48 -1
  19. package/internal/src/store/store.ts +4 -4
  20. package/internal/src/transaction/build-transaction.ts +10 -9
  21. package/internal/src/transaction/create-transaction.ts +2 -2
  22. package/internal/src/transaction/index.ts +2 -2
  23. package/package.json +5 -5
  24. package/react/dist/index.cjs +4 -1
  25. package/react/dist/index.js +5 -2
  26. package/react/src/use-o.ts +11 -3
  27. package/realtime/dist/index.cjs +0 -1
  28. package/realtime/dist/index.js +0 -1
  29. package/realtime/src/realtime-continuity.ts +0 -1
  30. package/realtime-server/dist/index.cjs +7 -7
  31. package/realtime-server/dist/index.js +7 -7
  32. package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +7 -7
  33. package/src/dispose-state.ts +32 -3
  34. package/src/get-state.ts +37 -4
  35. package/src/molecule.ts +20 -7
  36. package/src/set-state.ts +19 -2
  37. package/src/silo.ts +11 -4
  38. package/src/transaction.ts +9 -17
@@ -78,6 +78,12 @@ function newest(scion) {
78
78
  }
79
79
  return scion;
80
80
  }
81
+ function eldest(scion) {
82
+ while (scion.parent !== null) {
83
+ scion = scion.parent;
84
+ }
85
+ return scion;
86
+ }
81
87
 
82
88
  // internal/src/store/deposit.ts
83
89
  function deposit(state) {
@@ -407,8 +413,6 @@ var abortTransaction = (store) => {
407
413
  );
408
414
  target.parent.child = null;
409
415
  };
410
-
411
- // internal/src/not-found-error.ts
412
416
  var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
413
417
  function prettyPrintTokenType(token) {
414
418
  switch (token.type) {
@@ -427,10 +431,19 @@ function prettyPrintTokenType(token) {
427
431
  }
428
432
  }
429
433
  var NotFoundError = class extends Error {
430
- constructor(token, store) {
431
- super(
432
- `${prettyPrintTokenType(token)} "${token.key}" not found in store "${store.config.name}".`
433
- );
434
+ constructor(...params) {
435
+ const token = params[0];
436
+ const store = params.length === 2 ? params[1] : params[2];
437
+ if (params.length === 2) {
438
+ super(
439
+ `${prettyPrintTokenType(token)} ${json.stringifyJson(token.key)} not found in store "${store.config.name}".`
440
+ );
441
+ } else {
442
+ const key = params[1];
443
+ super(
444
+ `${prettyPrintTokenType(token)} "${token.key}" member ${json.stringifyJson(key)} not found in store "${store.config.name}".`
445
+ );
446
+ }
434
447
  }
435
448
  };
436
449
 
@@ -690,41 +703,6 @@ var setAtomOrSelector = (state, value, store) => {
690
703
  break;
691
704
  }
692
705
  };
693
-
694
- // internal/src/set-state/set-into-store.ts
695
- function setIntoStore(token, value, store) {
696
- const rejectionTime = openOperation(token, store);
697
- if (rejectionTime) {
698
- const unsubscribe = store.on.operationClose.subscribe(
699
- `waiting to set "${token.key}" at T-${rejectionTime}`,
700
- () => {
701
- unsubscribe();
702
- store.logger.info(
703
- `\u{1F7E2}`,
704
- token.type,
705
- token.key,
706
- `resuming deferred setState from T-${rejectionTime}`
707
- );
708
- setIntoStore(token, value, store);
709
- }
710
- );
711
- return;
712
- }
713
- const state = withdraw(token, store);
714
- setAtomOrSelector(state, value, store);
715
- closeOperation(store);
716
- }
717
-
718
- // internal/src/ingest-updates/ingest-atom-update.ts
719
- function ingestAtomUpdate(applying, atomUpdate, store) {
720
- const { key, newValue, oldValue } = atomUpdate;
721
- const value = applying === `newValue` ? newValue : oldValue;
722
- const token = { key, type: `atom` };
723
- if (atomUpdate.family) {
724
- Object.assign(token, { family: atomUpdate.family });
725
- }
726
- setIntoStore(token, value, store);
727
- }
728
706
  function createRegularAtomFamily(options, store) {
729
707
  const subject = new Subject();
730
708
  const atomFamily = Object.assign(
@@ -766,17 +744,31 @@ function createAtomFamily(options, store) {
766
744
  }
767
745
 
768
746
  // internal/src/get-state/get-from-store.ts
769
- function getFromStore(token, store) {
770
- if (token.type === `molecule`) {
771
- try {
772
- const molecule = withdraw(token, store);
773
- return molecule.instance;
774
- } catch (_) {
775
- return void 0;
747
+ function getFromStore(...params) {
748
+ let token;
749
+ let store;
750
+ if (params.length === 2) {
751
+ token = params[0];
752
+ store = params[1];
753
+ } else {
754
+ const family = params[0];
755
+ const key = params[1];
756
+ store = params[2];
757
+ const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
758
+ if (!maybeToken) {
759
+ throw new NotFoundError(family, key, store);
776
760
  }
761
+ token = maybeToken;
762
+ }
763
+ switch (token.type) {
764
+ case `atom`:
765
+ case `mutable_atom`:
766
+ case `selector`:
767
+ case `readonly_selector`:
768
+ return readOrComputeValue(withdraw(token, store), store);
769
+ case `molecule`:
770
+ return withdraw(token, store).instance;
777
771
  }
778
- const state = withdraw(token, store);
779
- return readOrComputeValue(state, store);
780
772
  }
781
773
 
782
774
  // internal/src/keys.ts
@@ -857,8 +849,16 @@ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
857
849
 
858
850
  // internal/src/selector/register-selector.ts
859
851
  var registerSelector = (selectorKey, covered, store) => ({
860
- get: (dependency) => {
852
+ get: (dependency, key) => {
861
853
  const target = newest(store);
854
+ if (key) {
855
+ switch (dependency.type) {
856
+ case `molecule_family`:
857
+ return getFromStore(dependency, key, store);
858
+ case `atom_family`:
859
+ dependency = seekInStore(dependency, key, store);
860
+ }
861
+ }
862
862
  if (dependency.type === `molecule`) {
863
863
  return getFromStore(dependency, store);
864
864
  }
@@ -884,10 +884,25 @@ var registerSelector = (selectorKey, covered, store) => ({
884
884
  updateSelectorAtoms(selectorKey, dependency, covered, store);
885
885
  return dependencyValue;
886
886
  },
887
- set: (WritableToken, newValue) => {
887
+ set: (...params) => {
888
+ let token;
889
+ let value;
890
+ if (params.length === 2) {
891
+ token = params[0];
892
+ value = params[1];
893
+ } else {
894
+ const family = params[0];
895
+ const key = params[1];
896
+ value = params[2];
897
+ const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
898
+ if (!maybeToken) {
899
+ throw new NotFoundError(family, key, store);
900
+ }
901
+ token = maybeToken;
902
+ }
888
903
  const target = newest(store);
889
- const state = withdraw(WritableToken, target);
890
- setAtomOrSelector(state, newValue, target);
904
+ const state = withdraw(token, target);
905
+ setAtomOrSelector(state, value, target);
891
906
  },
892
907
  find: (token, key) => findInStore(token, key, store),
893
908
  seek: (token, key) => seekInStore(token, key, store),
@@ -940,11 +955,11 @@ var createWritableSelector = (options, family, store) => {
940
955
  const target = newest(store);
941
956
  const subject = new Subject();
942
957
  const covered = /* @__PURE__ */ new Set();
943
- const transactors = registerSelector(options.key, covered, target);
944
- const { find, get, seek, json } = transactors;
945
- const readonlyTransactors = { find, get, seek, json };
958
+ const toolkit = registerSelector(options.key, covered, target);
959
+ const { find, get, seek, json } = toolkit;
960
+ const getterToolkit = { find, get, seek, json };
946
961
  const getSelf = (innerTarget = newest(store)) => {
947
- const value = options.get(readonlyTransactors);
962
+ const value = options.get(getterToolkit);
948
963
  cacheValue(options.key, value, subject, innerTarget);
949
964
  covered.clear();
950
965
  return value;
@@ -968,7 +983,7 @@ var createWritableSelector = (options, family, store) => {
968
983
  if (isRootStore(innerTarget)) {
969
984
  subject.next({ newValue, oldValue });
970
985
  }
971
- options.set(transactors, newValue);
986
+ options.set(toolkit, newValue);
972
987
  };
973
988
  const mySelector = __spreadValues(__spreadProps(__spreadValues({}, options), {
974
989
  subject,
@@ -1222,23 +1237,6 @@ function disposeMolecule(token, store) {
1222
1237
  }
1223
1238
  }
1224
1239
 
1225
- // internal/src/families/dispose-from-store.ts
1226
- function disposeFromStore(token, store = IMPLICIT.STORE) {
1227
- switch (token.type) {
1228
- case `atom`:
1229
- case `mutable_atom`:
1230
- disposeAtom(token, store);
1231
- break;
1232
- case `selector`:
1233
- case `readonly_selector`:
1234
- disposeSelector(token, store);
1235
- break;
1236
- case `molecule`:
1237
- disposeMolecule(token, store);
1238
- break;
1239
- }
1240
- }
1241
-
1242
1240
  // internal/src/families/init-family-member.ts
1243
1241
  function initFamilyMemberInStore(token, key, store) {
1244
1242
  const familyKey = token.key;
@@ -1312,6 +1310,91 @@ function findInStore(token, key, store) {
1312
1310
  return state;
1313
1311
  }
1314
1312
 
1313
+ // internal/src/families/dispose-from-store.ts
1314
+ function disposeFromStore(...params) {
1315
+ let token;
1316
+ let store;
1317
+ if (params.length === 2) {
1318
+ token = params[0];
1319
+ store = params[1];
1320
+ } else {
1321
+ const family = params[0];
1322
+ const key = params[1];
1323
+ store = params[2];
1324
+ const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
1325
+ if (!maybeToken) {
1326
+ throw new NotFoundError(family, key, store);
1327
+ }
1328
+ token = maybeToken;
1329
+ }
1330
+ switch (token.type) {
1331
+ case `atom`:
1332
+ case `mutable_atom`:
1333
+ disposeAtom(token, store);
1334
+ break;
1335
+ case `selector`:
1336
+ case `readonly_selector`:
1337
+ disposeSelector(token, store);
1338
+ break;
1339
+ case `molecule`:
1340
+ disposeMolecule(token, store);
1341
+ break;
1342
+ }
1343
+ }
1344
+
1345
+ // internal/src/set-state/set-into-store.ts
1346
+ function setIntoStore(...params) {
1347
+ let token;
1348
+ let value;
1349
+ let store;
1350
+ if (params.length === 3) {
1351
+ token = params[0];
1352
+ value = params[1];
1353
+ store = params[2];
1354
+ } else {
1355
+ const family = params[0];
1356
+ const key = params[1];
1357
+ value = params[2];
1358
+ store = params[3];
1359
+ const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
1360
+ if (!maybeToken) {
1361
+ throw new NotFoundError(family, key, store);
1362
+ }
1363
+ token = maybeToken;
1364
+ }
1365
+ const rejectionTime = openOperation(token, store);
1366
+ if (rejectionTime) {
1367
+ const unsubscribe = store.on.operationClose.subscribe(
1368
+ `waiting to set "${token.key}" at T-${rejectionTime}`,
1369
+ () => {
1370
+ unsubscribe();
1371
+ store.logger.info(
1372
+ `\u{1F7E2}`,
1373
+ token.type,
1374
+ token.key,
1375
+ `resuming deferred setState from T-${rejectionTime}`
1376
+ );
1377
+ setIntoStore(token, value, store);
1378
+ }
1379
+ );
1380
+ return;
1381
+ }
1382
+ const state = withdraw(token, store);
1383
+ setAtomOrSelector(state, value, store);
1384
+ closeOperation(store);
1385
+ }
1386
+
1387
+ // internal/src/ingest-updates/ingest-atom-update.ts
1388
+ function ingestAtomUpdate(applying, atomUpdate, store) {
1389
+ const { key, newValue, oldValue } = atomUpdate;
1390
+ const value = applying === `newValue` ? newValue : oldValue;
1391
+ const token = { key, type: `atom` };
1392
+ if (atomUpdate.family) {
1393
+ Object.assign(token, { family: atomUpdate.family });
1394
+ }
1395
+ setIntoStore(token, value, store);
1396
+ }
1397
+
1315
1398
  // internal/src/molecule/create-molecule-family.ts
1316
1399
  function createMoleculeFamily(options, store) {
1317
1400
  var _a;
@@ -1373,46 +1456,80 @@ var Molecule = class {
1373
1456
  };
1374
1457
 
1375
1458
  // internal/src/molecule/make-molecule-in-store.ts
1459
+ function capitalize2(string) {
1460
+ return string[0].toUpperCase() + string.slice(1);
1461
+ }
1376
1462
  function makeMoleculeInStore(store, context, familyToken, key, ...params) {
1463
+ const rootStore = eldest(store);
1377
1464
  const target = newest(store);
1378
- target.moleculeInProgress = key;
1465
+ const stringKey = json.stringifyJson(key);
1466
+ target.moleculeInProgress = stringKey;
1379
1467
  const contextArray = Array.isArray(context) ? context : [context];
1380
1468
  const owners = contextArray.map((ctx) => {
1381
1469
  if (ctx instanceof Molecule) {
1382
1470
  return ctx;
1383
1471
  }
1384
- const stringKey = json.stringifyJson(ctx.key);
1385
- const molecule2 = store.molecules.get(stringKey);
1472
+ const ctxStringKey = json.stringifyJson(ctx.key);
1473
+ const molecule2 = store.molecules.get(ctxStringKey);
1386
1474
  if (!molecule2) {
1387
1475
  throw new Error(
1388
- `Molecule ${stringKey} not found in store "${store.config.name}"`
1476
+ `Molecule ${ctxStringKey} not found in store "${store.config.name}"`
1389
1477
  );
1390
1478
  }
1391
1479
  return molecule2;
1392
1480
  });
1393
1481
  const molecule = new Molecule(owners, key, familyToken);
1394
- target.molecules.set(json.stringifyJson(key), molecule);
1482
+ target.molecules.set(stringKey, molecule);
1395
1483
  for (const owner of owners) {
1396
1484
  owner.below.set(molecule.stringKey, molecule);
1397
1485
  }
1398
- const transactors = {
1399
- get: (t) => getFromStore(t, newest(store)),
1400
- set: (t, newValue) => {
1401
- setIntoStore(t, newValue, newest(store));
1486
+ const toolkit = {
1487
+ get: (...ps) => getFromStore(...ps, newest(rootStore)),
1488
+ set: (...ps) => {
1489
+ setIntoStore(...ps, newest(rootStore));
1402
1490
  },
1403
- seek: (t, k) => seekInStore(t, k, newest(store)),
1404
- json: (t) => getJsonToken(t, newest(store)),
1491
+ seek: (t, k) => seekInStore(t, k, newest(rootStore)),
1492
+ json: (t) => getJsonToken(t, newest(rootStore)),
1405
1493
  run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
1406
- make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(store), ctx, f, k, ...args),
1494
+ make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
1407
1495
  dispose: (t) => {
1408
- disposeFromStore(t, newest(store));
1496
+ disposeFromStore(t, newest(rootStore));
1497
+ },
1498
+ env: () => getEnvironmentData(newest(rootStore)),
1499
+ bond: (token2, maybeRole) => {
1500
+ if (token2.type === `join`) {
1501
+ const { as: role } = maybeRole;
1502
+ const join = data.getJoin(token2, rootStore);
1503
+ join.molecules.set(stringKey, molecule);
1504
+ molecule.joins.set(token2.key, join);
1505
+ const unsubFromFamily = family.subject.subscribe(
1506
+ `join:${token2.key}-${stringKey}`,
1507
+ (event) => {
1508
+ if (event.type === `molecule_disposal` && json.stringifyJson(event.token.key) === stringKey) {
1509
+ unsubFromFamily();
1510
+ join.molecules.delete(stringKey);
1511
+ }
1512
+ }
1513
+ );
1514
+ if (role === null) {
1515
+ return;
1516
+ }
1517
+ const otherRole = token2.a === role ? token2.b : token2.a;
1518
+ const relations = data.findRelations(token2, key);
1519
+ const relatedKeys = relations[`${otherRole}KeysOf${capitalize2(role)}`];
1520
+ const relatedEntries = relations[`${otherRole}EntriesOf${capitalize2(role)}`];
1521
+ let tokens = { relatedKeys };
1522
+ if (relatedEntries) {
1523
+ tokens = Object.assign(tokens, { relatedEntries });
1524
+ }
1525
+ return tokens;
1526
+ }
1527
+ return growMoleculeInStore(
1528
+ molecule,
1529
+ withdraw(token2, rootStore),
1530
+ newest(rootStore)
1531
+ );
1409
1532
  },
1410
- env: () => getEnvironmentData(newest(store)),
1411
- bond: (f) => growMoleculeInStore(
1412
- molecule,
1413
- withdraw(f, store),
1414
- newest(store)
1415
- ),
1416
1533
  claim: (below, options) => {
1417
1534
  const { exclusive } = options;
1418
1535
  const belowMolecule = newest(store).molecules.get(json.stringifyJson(below.key));
@@ -1430,12 +1547,6 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
1430
1547
  }
1431
1548
  }
1432
1549
  },
1433
- join: (joinToken) => {
1434
- const join = data.getJoin(joinToken, store);
1435
- join.molecules.set(json.stringifyJson(key), molecule);
1436
- molecule.joins.set(joinToken.key, join);
1437
- return joinToken;
1438
- },
1439
1550
  spawn: (f, k, ...p) => makeMoleculeInStore(
1440
1551
  newest(store),
1441
1552
  [molecule],
@@ -1446,7 +1557,7 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
1446
1557
  };
1447
1558
  const family = withdraw(familyToken, store);
1448
1559
  const Constructor = family.new;
1449
- molecule.instance = new Constructor(transactors, key, ...params);
1560
+ molecule.instance = new Constructor(toolkit, key, ...params);
1450
1561
  const token = {
1451
1562
  type: `molecule`,
1452
1563
  key,
@@ -1747,18 +1858,18 @@ var buildTransaction = (key, params, store, id) => {
1747
1858
  params,
1748
1859
  output: void 0
1749
1860
  },
1750
- transactors: {
1751
- get: (token) => getFromStore(token, child),
1752
- set: (token, value) => {
1753
- setIntoStore(token, value, child);
1861
+ toolkit: {
1862
+ get: (...ps) => getFromStore(...ps, child),
1863
+ set: (...ps) => {
1864
+ setIntoStore(...ps, child);
1754
1865
  },
1755
1866
  run: (token, identifier = arbitrary()) => actUponStore(token, identifier, child),
1756
1867
  find: (token, k) => findInStore(token, k, child),
1757
1868
  seek: (token, k) => seekInStore(token, k, child),
1758
1869
  json: (token) => getJsonToken(token, child),
1759
1870
  make: (context, family, k, ...args) => makeMoleculeInStore(child, context, family, k, ...args),
1760
- dispose: (token) => {
1761
- disposeFromStore(token, child);
1871
+ dispose: (...ps) => {
1872
+ disposeFromStore(...ps, child);
1762
1873
  },
1763
1874
  env: () => getEnvironmentData(child)
1764
1875
  }
@@ -1786,8 +1897,8 @@ function createTransaction(options, store) {
1786
1897
  const childStore = buildTransaction(options.key, params, store, id);
1787
1898
  try {
1788
1899
  const target2 = newest(store);
1789
- const { transactors } = childStore.transactionMeta;
1790
- const output = options.do(transactors, ...params);
1900
+ const { toolkit } = childStore.transactionMeta;
1901
+ const output = options.do(toolkit, ...params);
1791
1902
  applyTransaction(output, target2);
1792
1903
  return output;
1793
1904
  } catch (thrown) {
@@ -1903,6 +2014,7 @@ var Store = class {
1903
2014
  for (const logger of this.loggers) logger.warn(...messages);
1904
2015
  }
1905
2016
  };
2017
+ this.config = __spreadValues(__spreadValues({}, store == null ? void 0 : store.config), config);
1906
2018
  if (store !== null) {
1907
2019
  this.valueMap = new Map(store == null ? void 0 : store.valueMap);
1908
2020
  this.operation = __spreadValues({}, store == null ? void 0 : store.operation);
@@ -1914,7 +2026,6 @@ var Store = class {
1914
2026
  )
1915
2027
  };
1916
2028
  }
1917
- this.config = __spreadValues(__spreadValues({}, store == null ? void 0 : store.config), config);
1918
2029
  for (const [, family] of store.families) {
1919
2030
  family.install(this);
1920
2031
  }
@@ -3224,6 +3335,7 @@ exports.disposeAtom = disposeAtom;
3224
3335
  exports.disposeFromStore = disposeFromStore;
3225
3336
  exports.disposeMolecule = disposeMolecule;
3226
3337
  exports.disposeSelector = disposeSelector;
3338
+ exports.eldest = eldest;
3227
3339
  exports.evictCachedValue = evictCachedValue;
3228
3340
  exports.findInStore = findInStore;
3229
3341
  exports.getContinuityKey = getContinuityKey;
@@ -1,5 +1,5 @@
1
1
  import * as atom_io from 'atom.io';
2
- import { Func, TransactionToken, TransactionUpdate, TransactionOptions, TransactorsWithRunAndEnv, RegularAtomToken, MutableAtomToken, AtomToken, WritableSelectorToken, ReadonlySelectorToken, SelectorToken, WritableToken, MoleculeToken, MoleculeFamily, MoleculeFamilyToken, ReadableToken, TimelineManageable, Flat, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeConstructor, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, WritableSelectorFamily, MutableAtomFamily, RegularAtomFamily, ReadonlySelectorFamily, AtomIOLogger, Logger, AtomFamily, ReadableFamily, SelectorFamily, WritableFamily, RegularAtomFamilyToken, MutableAtomFamilyToken, AtomFamilyToken, ReadonlySelectorFamilyToken, WritableSelectorFamilyToken, SelectorFamilyToken, ReadableFamilyToken, WritableFamilyToken, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, MoleculeKey, KeyedStateUpdate, MoleculeFamilyOptions, MK, MoleculeParams, ReadonlySelectorOptions, WritableSelectorOptions, Transactors, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
2
+ import { Func, TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, RegularAtomToken, MutableAtomToken, AtomToken, WritableSelectorToken, ReadonlySelectorToken, SelectorToken, WritableToken, MoleculeToken, MoleculeFamily, MoleculeFamilyToken, ReadableToken, TimelineManageable, Flat, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeConstructor, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, WritableSelectorFamily, MutableAtomFamily, RegularAtomFamily, ReadonlySelectorFamily, AtomIOLogger, Logger, AtomFamily, ReadableFamily, SelectorFamily, WritableFamily, RegularAtomFamilyToken, MutableAtomFamilyToken, AtomFamilyToken, ReadonlySelectorFamilyToken, WritableSelectorFamilyToken, SelectorFamilyToken, ReadableFamilyToken, WritableFamilyToken, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, MoleculeKey, KeyedStateUpdate, MoleculeFamilyOptions, MK, MoleculeParams, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
3
3
  import { Json, JsonInterface } from 'atom.io/json';
4
4
  import { Join } from 'atom.io/data';
5
5
 
@@ -134,7 +134,7 @@ type TransactionPhase = (typeof TRANSACTION_PHASES)[number];
134
134
  type TransactionProgress<F extends Func> = {
135
135
  phase: `applying` | `building`;
136
136
  update: TransactionUpdate<F>;
137
- transactors: TransactorsWithRunAndEnv;
137
+ toolkit: ActorToolkit;
138
138
  };
139
139
  type TransactionEpoch = {
140
140
  epoch: Map<string, number>;
@@ -162,6 +162,7 @@ interface Lineage {
162
162
  child: typeof this | null;
163
163
  }
164
164
  declare function newest<T extends Lineage>(scion: T): T;
165
+ declare function eldest<T extends Lineage>(scion: T): T;
165
166
 
166
167
  type OperationProgress = {
167
168
  open: false;
@@ -397,7 +398,9 @@ declare function createRegularAtomFamily<T, K extends Json.Serializable>(options
397
398
  declare function createSelectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>, store: Store): WritableSelectorFamily<T, K>;
398
399
  declare function createSelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store: Store): ReadonlySelectorFamily<T, K>;
399
400
 
400
- declare function disposeFromStore(token: MoleculeToken<any> | ReadableToken<any>, store?: Store): void;
401
+ declare function disposeFromStore(token: MoleculeToken<any> | ReadableToken<any>, store: Store): void;
402
+ declare function disposeFromStore<K extends Json.Serializable>(token: ReadableFamilyToken<any, K>, key: K, store: Store): void;
403
+ declare function disposeFromStore<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>, store: Store): void;
401
404
 
402
405
  declare function findInStore<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key, store: Store): MutableAtomToken<T, J>;
403
406
  declare function findInStore<T, K extends Json.Serializable, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key, store: Store): RegularAtomToken<T>;
@@ -434,7 +437,8 @@ declare function getEnvironmentData(store: Store): EnvironmentData;
434
437
 
435
438
  declare function getFromStore<T>(token: ReadableToken<T>, store: Store): T;
436
439
  declare function getFromStore<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): InstanceType<M> | undefined;
437
- declare function getFromStore<T, M extends MoleculeConstructor, Token extends MoleculeToken<M> | ReadableToken<T>>(token: Token, store: Store): InstanceType<M> | T | undefined;
440
+ declare function getFromStore<T, K extends Json.Serializable>(token: ReadableFamilyToken<T, K>, key: K, store: Store): T;
441
+ declare function getFromStore<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>, store: Store): InstanceType<M>;
438
442
 
439
443
  declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
440
444
 
@@ -510,6 +514,7 @@ declare function makeMoleculeInStore<M extends MoleculeConstructor>(store: Store
510
514
  type AtomIOToken = MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
511
515
  declare class NotFoundError extends Error {
512
516
  constructor(token: AtomIOToken, store: Store);
517
+ constructor(familyToken: AtomIOToken, key: Json.Serializable, store: Store);
513
518
  }
514
519
 
515
520
  declare const createReadonlySelector: <T>(options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined, store: Store) => ReadonlySelectorToken<T>;
@@ -523,7 +528,7 @@ declare function disposeSelector(selectorToken: ReadonlySelectorToken<unknown> |
523
528
 
524
529
  declare const getSelectorDependencyKeys: (key: string, store: Store) => (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[];
525
530
 
526
- declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) => Transactors;
531
+ declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) => SetterToolkit;
527
532
 
528
533
  declare const traceSelectorAtoms: (directDependencyKey: StateKey<unknown>, covered: Set<string>, store: Store) => AtomKey<unknown>[];
529
534
  declare const traceAllSelectorAtoms: (selector: Selector<any>, store: Store) => AtomKey<unknown>[];
@@ -536,6 +541,7 @@ declare const become: <T>(nextVersionOfThing: Modify<T> | T) => (originalThing:
536
541
  declare const setAtomOrSelector: <T>(state: WritableState<T>, value: T | ((oldValue: T) => T), store: Store) => void;
537
542
 
538
543
  declare function setIntoStore<T, New extends T>(token: WritableToken<T>, value: New | ((oldValue: T) => New), store: Store): void;
544
+ declare function setIntoStore<T, K extends Json.Serializable, New extends T>(token: WritableFamilyToken<T, K>, key: K, value: New | ((oldValue: T) => New), store: Store): void;
539
545
 
540
546
  declare const subscribeToRootAtoms: <T>(selector: Selector<T>, store: Store) => (() => void)[];
541
547
 
@@ -578,4 +584,4 @@ type Selector<T> = ReadonlySelector<T> | WritableSelector<T>;
578
584
  type WritableState<T> = Atom<T> | WritableSelector<T>;
579
585
  type ReadableState<T> = Atom<T> | Selector<T>;
580
586
 
581
- export { type Atom, type AtomIOState, type AtomKey, type ChildStore, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type RootStore, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineMoleculeCreation, type TimelineMoleculeDisposal, type TimelineSelectorUpdate, type TimelineStateCreation, type TimelineStateDisposal, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionEpoch, type TransactionPhase, type TransactionProgress, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isMutable, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
587
+ export { type Atom, type AtomIOState, type AtomKey, type ChildStore, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type RootStore, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineMoleculeCreation, type TimelineMoleculeDisposal, type TimelineSelectorUpdate, type TimelineStateCreation, type TimelineStateDisposal, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionEpoch, type TransactionPhase, type TransactionProgress, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isMutable, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };