atom.io 0.21.1 → 0.23.0

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 (116) hide show
  1. package/data/dist/index.cjs +152 -63
  2. package/data/dist/index.d.ts +6 -0
  3. package/data/dist/index.js +3 -3
  4. package/data/src/join.ts +164 -51
  5. package/data/src/struct-family.ts +2 -2
  6. package/dist/chunk-6MLFYN32.js +18 -0
  7. package/dist/{chunk-HITX3MO4.js → chunk-7DT3PVS3.js} +151 -62
  8. package/dist/{chunk-RT43TVKP.js → chunk-GVHKIJ3G.js} +1 -1
  9. package/dist/chunk-OAYGID5B.js +27 -0
  10. package/dist/index.cjs +4 -18
  11. package/dist/index.d.ts +71 -28
  12. package/dist/index.js +6 -19
  13. package/ephemeral/dist/index.cjs +11 -0
  14. package/ephemeral/dist/index.js +9 -0
  15. package/ephemeral/package.json +16 -0
  16. package/ephemeral/src/index.ts +1 -0
  17. package/eslint-plugin/dist/index.cjs +155 -1
  18. package/eslint-plugin/dist/index.js +155 -1
  19. package/eslint-plugin/src/rules/index.ts +1 -0
  20. package/eslint-plugin/src/rules/lifespan.ts +203 -0
  21. package/eslint-plugin/src/rules/synchronous-selector-dependencies.ts +1 -65
  22. package/eslint-plugin/src/walk.ts +73 -0
  23. package/immortal/dist/index.cjs +260 -0
  24. package/immortal/dist/index.js +212 -0
  25. package/immortal/package.json +16 -0
  26. package/immortal/src/index.ts +3 -0
  27. package/immortal/src/make-molecule.ts +222 -0
  28. package/immortal/src/molecule.ts +167 -0
  29. package/immortal/src/seek-state.ts +73 -0
  30. package/internal/dist/index.cjs +1242 -837
  31. package/internal/dist/index.d.ts +135 -22
  32. package/internal/dist/index.js +1215 -838
  33. package/internal/src/atom/create-regular-atom.ts +0 -2
  34. package/internal/src/atom/create-standalone-atom.ts +6 -2
  35. package/internal/src/atom/dispose-atom.ts +26 -3
  36. package/internal/src/families/create-readonly-selector-family.ts +15 -10
  37. package/internal/src/families/create-regular-atom-family.ts +20 -21
  38. package/internal/src/families/create-writable-selector-family.ts +13 -9
  39. package/{src/dispose.ts → internal/src/families/dispose-from-store.ts} +7 -4
  40. package/internal/src/families/find-in-store.ts +11 -6
  41. package/internal/src/families/index.ts +3 -0
  42. package/internal/src/families/init-family-member.ts +112 -0
  43. package/internal/src/families/seek-in-store.ts +123 -0
  44. package/internal/src/get-state/get-from-store.ts +2 -2
  45. package/internal/src/ingest-updates/index.ts +1 -0
  46. package/internal/src/ingest-updates/ingest-creation-disposal.ts +104 -0
  47. package/internal/src/ingest-updates/ingest-transaction-update.ts +26 -4
  48. package/internal/src/mutable/create-mutable-atom-family.ts +22 -24
  49. package/internal/src/mutable/create-mutable-atom.ts +3 -3
  50. package/internal/src/mutable/get-json-family.ts +2 -2
  51. package/internal/src/mutable/get-json-token.ts +26 -12
  52. package/internal/src/mutable/tracker-family.ts +21 -19
  53. package/internal/src/not-found-error.ts +16 -3
  54. package/internal/src/selector/create-readonly-selector.ts +2 -3
  55. package/internal/src/selector/create-standalone-selector.ts +6 -2
  56. package/internal/src/selector/create-writable-selector.ts +2 -3
  57. package/internal/src/selector/dispose-selector.ts +68 -24
  58. package/internal/src/selector/register-selector.ts +10 -5
  59. package/internal/src/set-state/set-into-store.ts +2 -2
  60. package/internal/src/set-state/stow-update.ts +5 -1
  61. package/internal/src/store/deposit.ts +41 -7
  62. package/internal/src/store/index.ts +0 -1
  63. package/internal/src/store/store.ts +29 -5
  64. package/internal/src/store/withdraw.ts +28 -1
  65. package/internal/src/subscribe/subscribe-to-state.ts +2 -2
  66. package/internal/src/timeline/add-atom-to-timeline.ts +206 -182
  67. package/internal/src/timeline/create-timeline.ts +181 -60
  68. package/internal/src/timeline/time-travel.ts +20 -0
  69. package/internal/src/transaction/apply-transaction.ts +2 -12
  70. package/internal/src/transaction/build-transaction.ts +16 -2
  71. package/introspection/dist/index.cjs +40 -53
  72. package/introspection/dist/index.js +40 -53
  73. package/introspection/src/attach-atom-index.ts +38 -48
  74. package/introspection/src/attach-selector-index.ts +45 -50
  75. package/introspection/src/attach-timeline-family.ts +1 -0
  76. package/json/dist/index.cjs +40 -6
  77. package/json/dist/index.js +44 -9
  78. package/json/src/select-json-family.ts +47 -9
  79. package/package.json +30 -10
  80. package/react/dist/index.cjs +1 -1
  81. package/react/dist/index.js +1 -1
  82. package/react/src/use-json.ts +1 -1
  83. package/react-devtools/dist/index.cjs +69 -57
  84. package/react-devtools/dist/index.js +62 -49
  85. package/react-devtools/src/StateIndex.tsx +2 -1
  86. package/react-devtools/src/TimelineIndex.tsx +17 -14
  87. package/react-devtools/src/TransactionIndex.tsx +7 -7
  88. package/react-devtools/src/Updates.tsx +41 -32
  89. package/realtime-client/dist/index.cjs +3 -3
  90. package/realtime-client/dist/index.js +3 -3
  91. package/realtime-client/src/pull-mutable-atom-family-member.ts +1 -1
  92. package/realtime-client/src/pull-mutable-atom.ts +1 -1
  93. package/realtime-client/src/sync-continuity.ts +1 -2
  94. package/realtime-react/dist/index.cjs +1 -1
  95. package/realtime-react/dist/index.js +1 -1
  96. package/realtime-server/dist/index.cjs +39 -27
  97. package/realtime-server/dist/index.d.ts +1 -1
  98. package/realtime-server/dist/index.js +27 -16
  99. package/realtime-server/src/realtime-continuity-synchronizer.ts +5 -3
  100. package/realtime-server/src/realtime-mutable-family-provider.ts +2 -1
  101. package/realtime-server/src/realtime-mutable-provider.ts +1 -1
  102. package/realtime-server/src/realtime-server-stores/server-sync-store.ts +21 -11
  103. package/realtime-testing/dist/index.cjs +7 -2
  104. package/realtime-testing/dist/index.js +8 -5
  105. package/realtime-testing/src/setup-realtime-test.tsx +5 -2
  106. package/src/atom.ts +19 -7
  107. package/src/dispose-state.ts +10 -0
  108. package/src/index.ts +5 -2
  109. package/src/selector.ts +13 -7
  110. package/src/silo.ts +3 -3
  111. package/src/subscribe.ts +8 -4
  112. package/src/timeline.ts +18 -1
  113. package/src/transaction.ts +59 -4
  114. package/dist/chunk-BF4MVQF6.js +0 -44
  115. package/internal/src/store/withdraw-new-family-member.ts +0 -69
  116. /package/{src → ephemeral/src}/find-state.ts +0 -0
@@ -2,6 +2,8 @@
2
2
 
3
3
  var internal = require('atom.io/internal');
4
4
  var atom_io = require('atom.io');
5
+ var immortal = require('atom.io/immortal');
6
+ var json = require('atom.io/json');
5
7
  var setRtx = require('atom.io/transceivers/set-rtx');
6
8
 
7
9
  // data/src/dict.ts
@@ -284,34 +286,36 @@ function capitalize(string) {
284
286
  return string[0].toUpperCase() + string.slice(1);
285
287
  }
286
288
  var Join = class _Join {
287
- transact(transactors, run) {
288
- const originalTransactors = this.transactors;
289
- this.transactors = transactors;
290
- run(this);
291
- this.transactors = originalTransactors;
292
- }
293
- in(store) {
294
- const key = store.config.name;
295
- const alternate = this.alternates.get(key);
296
- if (alternate) {
297
- return alternate;
298
- }
299
- const join2 = new _Join(this.options, this.defaultContent, store);
300
- this.alternates.set(key, join2);
301
- join2.alternates = this.alternates;
302
- return join2;
303
- }
304
289
  constructor(options, defaultContent, store = internal.IMPLICIT.STORE) {
290
+ this.molecules = /* @__PURE__ */ new Map();
291
+ this.store = store;
305
292
  this.options = options;
306
293
  this.defaultContent = defaultContent;
307
294
  this.alternates = /* @__PURE__ */ new Map();
308
295
  this.alternates.set(store.config.name, this);
296
+ this.store.miscResources.set(`join:${options.key}`, this);
309
297
  this.transactors = {
310
298
  get: (token) => internal.getFromStore(token, store),
311
299
  set: (token, value) => {
312
300
  internal.setIntoStore(token, value, store);
313
301
  },
314
- find: (token, key) => internal.findInStore(token, key, store)
302
+ find: (token, key) => internal.findInStore(token, key, store),
303
+ seek: (token, key) => internal.seekInStore(token, key, store),
304
+ json: (token) => internal.getJsonToken(token, store)
305
+ };
306
+ this.retrieve = (token, key) => {
307
+ const maybeToken = this.transactors.seek(token, key);
308
+ if (maybeToken) {
309
+ return maybeToken;
310
+ }
311
+ const molecule = this.molecules.get(json.stringifyJson(key));
312
+ if (!molecule) {
313
+ if (store.config.lifespan === `immortal`) {
314
+ throw new Error(`No molecule found for key "${json.stringifyJson(key)}"`);
315
+ }
316
+ return internal.initFamilyMember(token, key, store);
317
+ }
318
+ return molecule.bond(token);
315
319
  };
316
320
  const aSide = options.between[0];
317
321
  const bSide = options.between[1];
@@ -326,31 +330,57 @@ var Join = class _Join {
326
330
  store
327
331
  );
328
332
  this.core = { findRelatedKeysState: relatedKeysAtoms };
329
- const getRelatedKeys = ({ find, get }, key) => get(find(relatedKeysAtoms, key));
333
+ const getRelatedKeys = ({ get }, key) => get(this.retrieve(relatedKeysAtoms, key));
330
334
  const addRelation = (transactors, a, b) => {
331
- const { set, find } = transactors;
332
- const aKeysState = find(relatedKeysAtoms, a);
333
- const bKeysState = find(relatedKeysAtoms, b);
335
+ const { set } = transactors;
336
+ const aKeysState = this.retrieve(relatedKeysAtoms, a);
337
+ const bKeysState = this.retrieve(relatedKeysAtoms, b);
334
338
  set(aKeysState, (aKeys) => aKeys.add(b));
335
339
  set(bKeysState, (bKeys) => bKeys.add(a));
336
340
  };
337
341
  const deleteRelation = (transactors, a, b) => {
338
- const { find, set } = transactors;
339
- const aKeysState = find(relatedKeysAtoms, a);
340
- const bKeysState = find(relatedKeysAtoms, b);
341
- set(aKeysState, (aKeys) => (aKeys.delete(b), aKeys));
342
- set(bKeysState, (bKeys) => (bKeys.delete(a), bKeys));
342
+ var _a, _b;
343
+ const { set } = transactors;
344
+ const aKeysState = this.retrieve(relatedKeysAtoms, a);
345
+ const bKeysState = this.retrieve(relatedKeysAtoms, b);
346
+ let stringA;
347
+ let stringB;
348
+ set(aKeysState, (aKeys) => {
349
+ aKeys.delete(b);
350
+ if (aKeys.size === 0) {
351
+ stringA = `"${a}"`;
352
+ }
353
+ return aKeys;
354
+ });
355
+ set(bKeysState, (bKeys) => {
356
+ bKeys.delete(a);
357
+ if (bKeys.size === 0) {
358
+ stringB = `"${b}"`;
359
+ }
360
+ return bKeys;
361
+ });
362
+ if (stringA && this.molecules.has(stringA)) {
363
+ (_a = this.molecules.get(stringA)) == null ? void 0 : _a.clear();
364
+ this.molecules.delete(stringA);
365
+ }
366
+ if (stringB && this.molecules.has(stringB)) {
367
+ (_b = this.molecules.get(stringB)) == null ? void 0 : _b.clear();
368
+ this.molecules.delete(stringB);
369
+ }
343
370
  };
344
371
  const replaceRelationsSafely = (transactors, a, newRelationsOfA) => {
345
- const { find, get, set } = transactors;
346
- const relationsOfAState = find(relatedKeysAtoms, a);
372
+ const { get, set } = transactors;
373
+ const relationsOfAState = this.retrieve(relatedKeysAtoms, a);
347
374
  const currentRelationsOfA = get(relationsOfAState);
348
375
  for (const currentRelationB of currentRelationsOfA) {
349
376
  const remainsRelated = newRelationsOfA.includes(currentRelationB);
350
377
  if (remainsRelated) {
351
378
  continue;
352
379
  }
353
- const relationsOfBState = find(relatedKeysAtoms, currentRelationB);
380
+ const relationsOfBState = this.retrieve(
381
+ relatedKeysAtoms,
382
+ currentRelationB
383
+ );
354
384
  set(relationsOfBState, (relationsOfB) => {
355
385
  relationsOfB.delete(a);
356
386
  return relationsOfB;
@@ -363,6 +393,7 @@ var Join = class _Join {
363
393
  const relationsOfB = getRelatedKeys(transactors, newRelationB);
364
394
  const newRelationBIsAlreadyRelated = relationsOfB.has(a);
365
395
  if (this.relations.cardinality === `1:n`) {
396
+ const previousOwnersToDispose = [];
366
397
  for (const previousOwner of relationsOfB) {
367
398
  if (previousOwner === a) {
368
399
  continue;
@@ -372,10 +403,21 @@ var Join = class _Join {
372
403
  previousOwner
373
404
  );
374
405
  previousOwnerRelations.delete(newRelationB);
406
+ if (previousOwnerRelations.size === 0) {
407
+ previousOwnersToDispose.push(previousOwner);
408
+ }
375
409
  }
376
410
  if (!newRelationBIsAlreadyRelated && relationsOfB.size > 0) {
377
411
  relationsOfB.clear();
378
412
  }
413
+ for (const previousOwner of previousOwnersToDispose) {
414
+ const molecule = this.molecules.get(previousOwner);
415
+ molecule == null ? void 0 : molecule.clear();
416
+ this.molecules.delete(previousOwner);
417
+ const sorted = [newRelationB, previousOwner].sort();
418
+ const compositeKey = `"${sorted[0]}:${sorted[1]}"`;
419
+ this.molecules.delete(compositeKey);
420
+ }
379
421
  }
380
422
  if (!newRelationBIsAlreadyRelated) {
381
423
  relationsOfB.add(a);
@@ -388,8 +430,8 @@ var Join = class _Join {
388
430
  });
389
431
  };
390
432
  const replaceRelationsUnsafely = (transactors, a, newRelationsOfA) => {
391
- const { find, set } = transactors;
392
- const relationsOfAState = find(relatedKeysAtoms, a);
433
+ const { set } = transactors;
434
+ const relationsOfAState = this.retrieve(relatedKeysAtoms, a);
393
435
  set(relationsOfAState, (relationsOfA) => {
394
436
  relationsOfA.transaction((nextRelationsOfA) => {
395
437
  for (const newRelationB of newRelationsOfA) {
@@ -400,7 +442,7 @@ var Join = class _Join {
400
442
  return relationsOfA;
401
443
  });
402
444
  for (const newRelationB of newRelationsOfA) {
403
- const newRelationsBState = find(relatedKeysAtoms, newRelationB);
445
+ const newRelationsBState = this.retrieve(relatedKeysAtoms, newRelationB);
404
446
  set(newRelationsBState, (newRelationsB) => {
405
447
  newRelationsB.add(a);
406
448
  return newRelationsB;
@@ -430,6 +472,7 @@ var Join = class _Join {
430
472
  };
431
473
  let externalStore;
432
474
  let contentAtoms;
475
+ let contentMolecules;
433
476
  if (defaultContent) {
434
477
  contentAtoms = internal.createRegularAtomFamily(
435
478
  {
@@ -438,12 +481,24 @@ var Join = class _Join {
438
481
  },
439
482
  store
440
483
  );
441
- const getContent = ({ find, get }, key) => get(find(contentAtoms, key));
442
- const setContent = ({ find, set }, key, content) => {
443
- set(find(contentAtoms, key), content);
484
+ contentMolecules = immortal.createMoleculeFamily(
485
+ {
486
+ key: `${options.key}/content-molecules`,
487
+ new: (s) => class ContentMolecule extends immortal.Molecule {
488
+ constructor(context, token) {
489
+ super(s, context, token);
490
+ }
491
+ }
492
+ },
493
+ store
494
+ );
495
+ const getContent = ({ get }, key) => get(this.retrieve(contentAtoms, key));
496
+ const setContent = ({ set }, key, content) => {
497
+ set(this.retrieve(contentAtoms, key), content);
444
498
  };
445
- const deleteContent = ({ find }, key) => {
446
- atom_io.disposeState(find(contentAtoms, key));
499
+ const deleteContent = (_, compositeKey) => {
500
+ atom_io.disposeState(this.retrieve(contentAtoms, compositeKey));
501
+ this.molecules.delete(`"${compositeKey}"`);
447
502
  };
448
503
  const externalStoreWithContentConfiguration = {
449
504
  getContent: (contentKey) => {
@@ -466,13 +521,26 @@ var Join = class _Join {
466
521
  }
467
522
  const relations = new Junction(options, {
468
523
  externalStore,
469
- makeContentKey: (...args) => args.sort().join(`:`)
524
+ makeContentKey: (...args) => {
525
+ const sorted = args.sort();
526
+ const compositeKey = `${sorted[0]}:${sorted[1]}`;
527
+ const [m0, m1] = sorted.map(
528
+ (key) => this.molecules.get(json.stringifyJson(key))
529
+ );
530
+ if (store.config.lifespan === `immortal` && m0 && m1) {
531
+ const composite = m0.with(m1)(compositeKey);
532
+ this.molecules.set(`"${compositeKey}"`, composite);
533
+ const target = internal.newest(store);
534
+ immortal.makeMoleculeInStore(target, [m0, m1], contentMolecules, compositeKey);
535
+ }
536
+ return compositeKey;
537
+ }
470
538
  });
471
539
  const createSingleKeyStateFamily = () => internal.createSelectorFamily(
472
540
  {
473
541
  key: `${options.key}/singleRelatedKey`,
474
- get: (key) => ({ find, get }) => {
475
- const relatedKeysState = find(relatedKeysAtoms, key);
542
+ get: (key) => ({ get }) => {
543
+ const relatedKeysState = this.retrieve(relatedKeysAtoms, key);
476
544
  const relatedKeys = get(relatedKeysState);
477
545
  for (const relatedKey of relatedKeys) {
478
546
  return relatedKey;
@@ -486,9 +554,9 @@ var Join = class _Join {
486
554
  return internal.createSelectorFamily(
487
555
  {
488
556
  key: `${options.key}/multipleRelatedKeys`,
489
- get: (key) => ({ find, get }) => {
557
+ get: (key) => ({ get }) => {
490
558
  const jsonFamily = internal.getJsonFamily(relatedKeysAtoms, store);
491
- const jsonState = find(jsonFamily, key);
559
+ const jsonState = this.retrieve(jsonFamily, key);
492
560
  const json = get(jsonState);
493
561
  return json.members;
494
562
  }
@@ -499,12 +567,12 @@ var Join = class _Join {
499
567
  const createSingleEntryStateFamily = () => internal.createSelectorFamily(
500
568
  {
501
569
  key: `${options.key}/singleRelatedEntry`,
502
- get: (key) => ({ find, get }) => {
503
- const relatedKeysState = find(relatedKeysAtoms, key);
570
+ get: (key) => ({ get }) => {
571
+ const relatedKeysState = this.retrieve(relatedKeysAtoms, key);
504
572
  const relatedKeys = get(relatedKeysState);
505
573
  for (const relatedKey of relatedKeys) {
506
574
  const contentKey = relations.makeContentKey(key, relatedKey);
507
- const contentState = find(contentAtoms, contentKey);
575
+ const contentState = this.retrieve(contentAtoms, contentKey);
508
576
  const content = get(contentState);
509
577
  return [relatedKey, content];
510
578
  }
@@ -516,12 +584,13 @@ var Join = class _Join {
516
584
  const getMultipleEntryStateFamily = () => internal.createSelectorFamily(
517
585
  {
518
586
  key: `${options.key}/multipleRelatedEntries`,
519
- get: (key) => ({ find, get }) => {
587
+ get: (key) => ({ get }) => {
520
588
  const jsonFamily = internal.getJsonFamily(relatedKeysAtoms, store);
521
- const json = get(jsonFamily(key));
589
+ const jsonState = this.retrieve(jsonFamily, key);
590
+ const json = get(jsonState);
522
591
  return json.members.map((relatedKey) => {
523
592
  const contentKey = relations.makeContentKey(key, relatedKey);
524
- const contentState = find(contentAtoms, contentKey);
593
+ const contentState = this.retrieve(contentAtoms, contentKey);
525
594
  const content = get(contentState);
526
595
  return [relatedKey, content];
527
596
  });
@@ -614,6 +683,26 @@ var Join = class _Join {
614
683
  }
615
684
  }
616
685
  }
686
+ transact(transactors, run) {
687
+ const originalTransactors = this.transactors;
688
+ this.transactors = transactors;
689
+ run(this);
690
+ this.transactors = originalTransactors;
691
+ }
692
+ [Symbol.dispose]() {
693
+ this.alternates.delete(this.store.config.name);
694
+ }
695
+ in(store) {
696
+ const key = store.config.name;
697
+ const alternate = this.alternates.get(key);
698
+ if (alternate) {
699
+ return alternate;
700
+ }
701
+ const join2 = new _Join(this.options, this.defaultContent, store);
702
+ this.alternates.set(key, join2);
703
+ join2.alternates = this.alternates;
704
+ return join2;
705
+ }
617
706
  };
618
707
  function join(options, defaultContent, store = internal.IMPLICIT.STORE) {
619
708
  const joins = getJoinMap(store);
@@ -661,12 +750,12 @@ function findRelationsInStore(token, key, store) {
661
750
  relations = {
662
751
  get [keyAB]() {
663
752
  const familyAB = myJoin.states[keyAB];
664
- const state = internal.findInStore(familyAB, key, store);
753
+ const state = myJoin.retrieve(familyAB, key);
665
754
  return state;
666
755
  },
667
756
  get [keyBA]() {
668
757
  const familyBA = myJoin.states[keyBA];
669
- const state = internal.findInStore(familyBA, key, store);
758
+ const state = myJoin.retrieve(familyBA, key);
670
759
  return state;
671
760
  }
672
761
  };
@@ -676,12 +765,12 @@ function findRelationsInStore(token, key, store) {
676
765
  Object.assign(relations, {
677
766
  get [entryAB]() {
678
767
  const familyAB = myJoin.states[entryAB];
679
- const state = internal.findInStore(familyAB, key, store);
768
+ const state = myJoin.retrieve(familyAB, key);
680
769
  return state;
681
770
  },
682
771
  get [entryBA]() {
683
772
  const familyBA = myJoin.states[entryBA];
684
- const state = internal.findInStore(familyBA, key, store);
773
+ const state = myJoin.retrieve(familyBA, key);
685
774
  return state;
686
775
  }
687
776
  });
@@ -694,12 +783,12 @@ function findRelationsInStore(token, key, store) {
694
783
  relations = {
695
784
  get [keyAB]() {
696
785
  const familyAB = myJoin.states[keyAB];
697
- const state = internal.findInStore(familyAB, key, store);
786
+ const state = myJoin.retrieve(familyAB, key);
698
787
  return state;
699
788
  },
700
789
  get [keysBA]() {
701
790
  const familyBA = myJoin.states[keysBA];
702
- const state = internal.findInStore(familyBA, key, store);
791
+ const state = myJoin.retrieve(familyBA, key);
703
792
  return state;
704
793
  }
705
794
  };
@@ -709,12 +798,12 @@ function findRelationsInStore(token, key, store) {
709
798
  Object.assign(relations, {
710
799
  get [entryAB]() {
711
800
  const familyAB = myJoin.states[entryAB];
712
- const state = internal.findInStore(familyAB, key, store);
801
+ const state = myJoin.retrieve(familyAB, key);
713
802
  return state;
714
803
  },
715
804
  get [entriesBA]() {
716
805
  const familyBA = myJoin.states[entriesBA];
717
- const state = internal.findInStore(familyBA, key, store);
806
+ const state = myJoin.retrieve(familyBA, key);
718
807
  return state;
719
808
  }
720
809
  });
@@ -727,12 +816,12 @@ function findRelationsInStore(token, key, store) {
727
816
  relations = {
728
817
  get [keysAB]() {
729
818
  const familyAB = myJoin.states[keysAB];
730
- const state = internal.findInStore(familyAB, key, store);
819
+ const state = myJoin.retrieve(familyAB, key);
731
820
  return state;
732
821
  },
733
822
  get [keysBA]() {
734
823
  const familyBA = myJoin.states[keysBA];
735
- const state = internal.findInStore(familyBA, key, store);
824
+ const state = myJoin.retrieve(familyBA, key);
736
825
  return state;
737
826
  }
738
827
  };
@@ -742,12 +831,12 @@ function findRelationsInStore(token, key, store) {
742
831
  Object.assign(relations, {
743
832
  get [entriesAB]() {
744
833
  const familyAB = myJoin.states[entriesAB];
745
- const state = internal.findInStore(familyAB, key, store);
834
+ const state = myJoin.retrieve(familyAB, key);
746
835
  return state;
747
836
  },
748
837
  get [entriesBA]() {
749
838
  const familyBA = myJoin.states[entriesBA];
750
- const state = internal.findInStore(familyBA, key, store);
839
+ const state = myJoin.retrieve(familyBA, key);
751
840
  return state;
752
841
  }
753
842
  });
@@ -827,10 +916,10 @@ function structFamily(options) {
827
916
  const findStructState = internal.createSelectorFamily(
828
917
  {
829
918
  key: options.key,
830
- get: (id) => ({ get }) => {
919
+ get: (id) => ({ find, get }) => {
831
920
  return Object.keys(options.default).reduce((acc, subKey) => {
832
921
  acc[subKey] = get(
833
- atoms[nameFamily(options.key, subKey)](id)
922
+ find(atoms[nameFamily(options.key, subKey)], id)
834
923
  );
835
924
  return acc;
836
925
  }, {});
@@ -2,6 +2,8 @@ import * as AtomIO from 'atom.io';
2
2
  import { ReadonlySelectorFamily, MutableAtomFamily, Transactors, ReadonlySelectorToken, MutableAtomFamilyToken } from 'atom.io';
3
3
  import { Store } from 'atom.io/internal';
4
4
  import { Json, Stringified } from 'atom.io/json';
5
+ import { findState } from 'atom.io/ephemeral';
6
+ import { Molecule } from 'atom.io/immortal';
5
7
  import { SetRTX, SetRTXJson } from 'atom.io/transceivers/set-rtx';
6
8
 
7
9
  declare function dict<State, Key extends Json.Serializable>(findState: AtomIO.ReadonlySelectorFamilyToken<State, Key> | AtomIO.RegularAtomFamilyToken<State, Key> | AtomIO.WritableSelectorFamily<State, Key>, index: AtomIO.ReadonlySelectorToken<Key[]> | AtomIO.RegularAtomToken<Key[]> | AtomIO.WritableSelectorToken<Key[]>, store?: Store): AtomIO.ReadonlySelectorToken<{
@@ -119,13 +121,17 @@ declare class Join<const ASide extends string, const BSide extends string, const
119
121
  private options;
120
122
  private defaultContent;
121
123
  private transactors;
124
+ retrieve: typeof findState;
125
+ molecules: Map<string, Molecule<any>>;
122
126
  relations: Junction<ASide, BSide, Content>;
123
127
  states: JoinStateFamilies<ASide, BSide, Cardinality, Content>;
124
128
  core: {
125
129
  findRelatedKeysState: MutableAtomFamily<SetRTX<string>, SetRTXJson<string>, string>;
126
130
  };
127
131
  transact(transactors: Transactors, run: (join: Join<ASide, BSide, Cardinality, Content>) => void): void;
132
+ store: Store;
128
133
  alternates: Map<string, Join<ASide, BSide, Cardinality, Content>>;
134
+ [Symbol.dispose](): void;
129
135
  in(store: Store): Join<ASide, BSide, Cardinality, Content>;
130
136
  constructor(options: JoinOptions<ASide, BSide, Cardinality, Content>, defaultContent: Content | undefined, store?: Store);
131
137
  }
@@ -1,4 +1,4 @@
1
- export { Join, editRelations, editRelationsInStore, findRelations, findRelationsInStore, getInternalRelations, getInternalRelationsFromStore, getJoin, getJoinMap, join } from '../../dist/chunk-HITX3MO4.js';
1
+ export { Join, editRelations, editRelationsInStore, findRelations, findRelationsInStore, getInternalRelations, getInternalRelationsFromStore, getJoin, getJoinMap, join } from '../../dist/chunk-7DT3PVS3.js';
2
2
  import '../../dist/chunk-FTONNX2R.js';
3
3
  import '../../dist/chunk-F2X4B4VY.js';
4
4
  import { createStandaloneSelector, findInStore, IMPLICIT, createRegularAtom, createRegularAtomFamily, createSelectorFamily } from 'atom.io/internal';
@@ -63,10 +63,10 @@ function structFamily(options) {
63
63
  const findStructState = createSelectorFamily(
64
64
  {
65
65
  key: options.key,
66
- get: (id) => ({ get }) => {
66
+ get: (id) => ({ find, get }) => {
67
67
  return Object.keys(options.default).reduce((acc, subKey) => {
68
68
  acc[subKey] = get(
69
- atoms[nameFamily(options.key, subKey)](id)
69
+ find(atoms[nameFamily(options.key, subKey)], id)
70
70
  );
71
71
  return acc;
72
72
  }, {});