atom.io 0.30.7 → 0.31.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 (80) hide show
  1. package/data/dist/index.d.ts +20 -18
  2. package/data/dist/index.js +104 -172
  3. package/data/src/join.ts +138 -210
  4. package/dist/{chunk-UDHCFTYT.js → chunk-42UH5F5Q.js} +356 -744
  5. package/dist/chunk-ICGFFQ3H.js +272 -0
  6. package/dist/index.d.ts +52 -103
  7. package/dist/index.js +3 -11
  8. package/eslint-plugin/dist/index.d.ts +22 -3
  9. package/eslint-plugin/dist/index.js +7 -7
  10. package/immortal/dist/index.d.ts +1 -2
  11. package/immortal/dist/index.js +0 -3
  12. package/immortal/src/seek-state.ts +2 -14
  13. package/internal/dist/index.d.ts +48 -84
  14. package/internal/dist/index.js +2 -2
  15. package/internal/src/atom/dispose-atom.ts +31 -15
  16. package/internal/src/families/dispose-from-store.ts +15 -44
  17. package/internal/src/families/find-in-store.ts +15 -8
  18. package/internal/src/families/init-family-member.ts +1 -1
  19. package/internal/src/families/seek-in-store.ts +2 -14
  20. package/internal/src/get-state/get-from-store.ts +13 -79
  21. package/internal/src/get-trace.ts +7 -0
  22. package/internal/src/index.ts +2 -1
  23. package/internal/src/ingest-updates/ingest-creation-disposal.ts +63 -70
  24. package/internal/src/ingest-updates/ingest-transaction-update.ts +4 -0
  25. package/internal/src/junction.ts +52 -12
  26. package/internal/src/lineage.ts +0 -7
  27. package/internal/src/molecule.ts +7 -0
  28. package/internal/src/mutable/transceiver.ts +5 -5
  29. package/internal/src/pretty-print.ts +0 -4
  30. package/internal/src/selector/dispose-selector.ts +3 -5
  31. package/internal/src/selector/register-selector.ts +2 -26
  32. package/internal/src/set-state/set-into-store.ts +3 -2
  33. package/internal/src/store/counterfeit.ts +11 -25
  34. package/internal/src/store/deposit.ts +5 -39
  35. package/internal/src/store/store.ts +51 -12
  36. package/internal/src/store/withdraw.ts +3 -26
  37. package/internal/src/timeline/create-timeline.ts +133 -237
  38. package/internal/src/timeline/time-travel.ts +1 -8
  39. package/internal/src/transaction/build-transaction.ts +10 -5
  40. package/internal/src/transaction/index.ts +1 -1
  41. package/internal/src/utility-types.ts +2 -0
  42. package/introspection/dist/index.d.ts +2 -3
  43. package/introspection/dist/index.js +9 -9
  44. package/introspection/src/refinery.ts +1 -3
  45. package/json/dist/index.js +9 -40
  46. package/json/src/index.ts +2 -0
  47. package/json/src/select-json-family.ts +7 -44
  48. package/package.json +33 -28
  49. package/react/dist/index.js +2 -10
  50. package/react/src/parse-state-overloads.ts +3 -11
  51. package/react-devtools/dist/index.js +13 -13
  52. package/react-devtools/src/Updates.tsx +2 -0
  53. package/realtime-client/dist/index.d.ts +20 -12
  54. package/realtime-client/dist/index.js +241 -244
  55. package/realtime-client/src/continuity/index.ts +3 -0
  56. package/realtime-client/src/continuity/register-and-attempt-confirmed-update.ts +231 -0
  57. package/realtime-client/src/continuity/use-conceal-state.ts +11 -0
  58. package/realtime-client/src/continuity/use-reveal-state.ts +19 -0
  59. package/realtime-client/src/index.ts +1 -0
  60. package/realtime-client/src/sync-continuity.ts +18 -262
  61. package/realtime-react/dist/index.js +2 -2
  62. package/realtime-server/dist/index.d.ts +1 -1
  63. package/realtime-server/dist/index.js +2 -2
  64. package/realtime-server/src/index.ts +1 -1
  65. package/realtime-testing/dist/index.js +2 -3
  66. package/realtime-testing/src/setup-realtime-test.tsx +1 -2
  67. package/src/allocate.ts +311 -145
  68. package/src/dispose-state.ts +5 -21
  69. package/src/get-state.ts +3 -21
  70. package/src/molecule.ts +11 -133
  71. package/src/silo.ts +1 -12
  72. package/src/timeline.ts +2 -3
  73. package/src/transaction.ts +25 -38
  74. package/dist/chunk-ADMEAXYU.js +0 -167
  75. package/internal/src/molecule/create-molecule-family.ts +0 -30
  76. package/internal/src/molecule/dispose-molecule.ts +0 -79
  77. package/internal/src/molecule/grow-molecule-in-store.ts +0 -95
  78. package/internal/src/molecule/index.ts +0 -5
  79. package/internal/src/molecule/make-molecule-in-store.ts +0 -191
  80. package/internal/src/molecule/molecule-internal.ts +0 -52
@@ -2,9 +2,6 @@ import '../../dist/chunk-XWL6SNVU.js';
2
2
  import { seekInStore, IMPLICIT } from 'atom.io/internal';
3
3
 
4
4
  function seekState(token, key) {
5
- if (token.type === `molecule_family`) {
6
- return seekInStore(IMPLICIT.STORE, token, key);
7
- }
8
5
  const state = seekInStore(IMPLICIT.STORE, token, key);
9
6
  return state;
10
7
  }
@@ -1,8 +1,4 @@
1
1
  import type {
2
- MoleculeConstructor,
3
- MoleculeFamilyToken,
4
- MoleculeKey,
5
- MoleculeToken,
6
2
  MutableAtomFamilyToken,
7
3
  MutableAtomToken,
8
4
  ReadableFamilyToken,
@@ -55,18 +51,10 @@ export function seekState<T, K extends Canonical, Key extends K>(
55
51
  key: Key,
56
52
  ): ReadableToken<T, K> | undefined
57
53
 
58
- export function seekState<M extends MoleculeConstructor>(
59
- token: MoleculeFamilyToken<M>,
60
- key: MoleculeKey<M>,
61
- ): MoleculeToken<M> | undefined
62
-
63
54
  export function seekState(
64
- token: MoleculeFamilyToken<any> | ReadableFamilyToken<any, any>,
55
+ token: ReadableFamilyToken<any, any>,
65
56
  key: Canonical,
66
- ): MoleculeToken<any> | ReadableToken<any> | undefined {
67
- if (token.type === `molecule_family`) {
68
- return seekInStore(IMPLICIT.STORE, token, key)
69
- }
57
+ ): ReadableToken<any> | undefined {
70
58
  const state = seekInStore(IMPLICIT.STORE, token, key)
71
59
  return state
72
60
  }
@@ -1,8 +1,6 @@
1
- import * as atom_io from 'atom.io';
2
- import { MutableAtomFamilyToken, MutableAtomToken, RegularAtomFamilyToken, RegularAtomToken, AtomFamilyToken, AtomToken, WritableSelectorFamilyToken, WritableSelectorToken, ReadonlySelectorFamilyToken, ReadonlySelectorToken, SelectorFamilyToken, SelectorToken, WritableFamilyToken, WritableToken, ReadableFamilyToken, ReadableToken, MoleculeConstructor, MoleculeFamilyToken, MoleculeKey, TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, MoleculeFamily, MoleculeToken, MoleculeFamilyOptions, StateCreation, StateDisposal, MoleculeParams, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, MoleculeCreationModern, MoleculeDisposalModern, AtomIOLogger, Logger, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, KeyedStateUpdate, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
3
- import { Json, Canonical, JsonInterface } from 'atom.io/json';
1
+ import { MutableAtomFamilyToken, MutableAtomToken, RegularAtomFamilyToken, RegularAtomToken, AtomFamilyToken, AtomToken, WritableSelectorFamilyToken, WritableSelectorToken, ReadonlySelectorFamilyToken, ReadonlySelectorToken, SelectorFamilyToken, SelectorToken, WritableFamilyToken, WritableToken, ReadableFamilyToken, ReadableToken, TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, AtomIOLogger, Logger, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, KeyedStateUpdate, MoleculeTransfer, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
2
+ import { Json, Canonical, stringified, JsonInterface } from 'atom.io/json';
4
3
  import { Join } from 'atom.io/data';
5
- import { Refinement } from 'atom.io/introspection';
6
4
  import { Store as Store$1, Func as Func$1 } from 'atom.io/internal';
7
5
 
8
6
  declare class CircularBuffer<T> {
@@ -31,7 +29,21 @@ declare function counterfeit<T, K extends Canonical, Key extends K>(token: Reado
31
29
  declare function counterfeit<T, K extends Canonical, Key extends K>(token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
32
30
  declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
33
31
  declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
34
- declare function counterfeit<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeKey<M>;
32
+
33
+ type Func = (...parameters: any[]) => any;
34
+ type Flat<R extends {
35
+ [K in PropertyKey]: any;
36
+ }> = {
37
+ [K in keyof R]: R[K];
38
+ };
39
+ type Count<N extends number, A extends any[] = []> = [
40
+ ...A,
41
+ any
42
+ ][`length`] extends N ? A[`length`] : A[`length`] | Count<N, [...A, any]>;
43
+ type Each<E extends any[]> = {
44
+ [P in Count<E[`length`]>]: E[P];
45
+ };
46
+ type Refinement<A, B extends A> = (a: A) => a is B;
35
47
 
36
48
  type JunctionEntriesBase<AType extends string, BType extends string, Content extends Json.Object | null> = {
37
49
  readonly relations: ([AType, BType[]] | [BType, AType[]])[];
@@ -128,20 +140,6 @@ declare class Junction<const ASide extends string, const AType extends string, c
128
140
  has(b: BType, a?: AType): boolean;
129
141
  }
130
142
 
131
- type Func = (...parameters: any[]) => any;
132
- type Flat<R extends {
133
- [K in PropertyKey]: any;
134
- }> = {
135
- [K in keyof R]: R[K];
136
- };
137
- type Count<N extends number, A extends any[] = []> = [
138
- ...A,
139
- any
140
- ][`length`] extends N ? A[`length`] : A[`length`] | Count<N, [...A, any]>;
141
- type Each<E extends any[]> = {
142
- [P in Count<E[`length`]>]: E[P];
143
- };
144
-
145
143
  declare const abortTransaction: (store: Store) => void;
146
144
 
147
145
  declare function actUponStore<F extends Func>(token: TransactionToken<F>, id: string, store: Store): (...parameters: Parameters<F>) => ReturnType<F>;
@@ -222,49 +220,21 @@ declare function deposit<T>(state: ReadonlySelectorFamily<T, any>): ReadonlySele
222
220
  declare function deposit<T>(state: SelectorFamily<T, any>): SelectorFamilyToken<T, any>;
223
221
  declare function deposit<T>(state: WritableFamily<T, any>): WritableFamilyToken<T, any>;
224
222
  declare function deposit<T>(state: ReadableFamily<T, any>): ReadableFamilyToken<T, any>;
225
- declare function deposit<M extends MoleculeConstructor>(state: MoleculeFamily<M>): MoleculeFamilyToken<M>;
226
- declare function deposit<M extends MoleculeConstructor>(state: Molecule<M>): MoleculeToken<M>;
227
223
  declare function deposit<T extends Func>(state: Transaction<T>): TransactionToken<T>;
228
- declare function deposit(state: Molecule<any> | ReadableState<any>): MoleculeToken<any> | ReadableToken<any>;
229
- declare function deposit(state: Molecule<any> | MoleculeFamily<any> | ReadableFamily<any, any> | ReadableState<any> | Transaction<Func>): MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TransactionToken<Func>;
224
+ declare function deposit(state: ReadableState<any>): ReadableToken<any>;
225
+ declare function deposit(state: ReadableFamily<any, any> | ReadableState<any> | Transaction<Func>): ReadableFamilyToken<any, any> | ReadableToken<any> | TransactionToken<Func>;
230
226
 
231
227
  interface Lineage {
232
228
  parent: typeof this | null;
233
229
  child: typeof this | null;
234
230
  }
235
231
  declare function newest<T extends Lineage>(scion: T): T;
236
- declare function eldest<T extends Lineage>(scion: T): T;
237
-
238
- declare function createMoleculeFamily<M extends MoleculeConstructor>(store: Store, options: MoleculeFamilyOptions<M>): MoleculeFamilyToken<M>;
239
-
240
- declare function disposeMolecule<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): void;
241
-
242
- declare class Molecule<M extends MoleculeConstructor> implements MoleculeToken<M> {
243
- readonly key: MoleculeKey<M>;
244
- readonly type = "molecule";
245
- stringKey: string;
246
- family?: MoleculeFamilyToken<M>;
247
- _dependsOn: `all` | `any`;
248
- get dependsOn(): `all` | `any`;
249
- readonly subject: Subject<StateCreation<any> | StateDisposal<any>>;
250
- tokens: Map<string, ReadableToken<any>>;
251
- above: Map<string, Molecule<any>>;
252
- below: Map<string, Molecule<any>>;
253
- joins: Map<string, Join<any, any, any, any, any, any>>;
254
- instance: InstanceType<M>;
255
- constructor(ctx: Molecule<any>[] | undefined, key: MoleculeKey<M>, family?: MoleculeFamilyToken<M>);
256
- }
257
-
258
- declare function growMoleculeInStore<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(molecule: Molecule<any>, family: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomToken<T, J>;
259
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomToken<T>;
260
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: AtomFamilyToken<T, K>, store: Store): AtomToken<T>;
261
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorToken<T>;
262
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: ReadonlySelectorFamilyToken<T, K>, store: Store): ReadonlySelectorToken<T>;
263
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: SelectorFamilyToken<T, K>, store: Store): SelectorToken<T>;
264
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableFamilyToken<T, K>, store: Store): WritableToken<T>;
265
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: ReadableFamilyToken<T, K>, store: Store): ReadableToken<T>;
266
232
 
267
- declare function makeMoleculeInStore<M extends MoleculeConstructor>(store: Store, context: MoleculeToken<M> | MoleculeToken<M>[], familyToken: MoleculeFamilyToken<M>, key: MoleculeKey<M>, ...params: MoleculeParams<M>): MoleculeToken<M>;
233
+ type Molecule<K extends Canonical> = {
234
+ readonly key: K;
235
+ readonly stringKey: stringified<K>;
236
+ readonly dependsOn: `all` | `any`;
237
+ };
268
238
 
269
239
  type OperationProgress = {
270
240
  open: false;
@@ -303,7 +273,7 @@ type TimelineStateCreation<T extends ReadableToken<any>> = Flat<StateCreation<T>
303
273
  type TimelineStateDisposal<T extends ReadableToken<any>> = Flat<StateDisposal<T> & {
304
274
  timestamp: number;
305
275
  }>;
306
- type TimelineMoleculeCreation<M extends MoleculeConstructor> = Flat<MoleculeCreation<M> & {
276
+ type TimelineMoleculeCreation = Flat<MoleculeCreation & {
307
277
  timestamp: number;
308
278
  }>;
309
279
  type TimelineMoleculeDisposal = Flat<MoleculeDisposal & {
@@ -341,6 +311,7 @@ declare class Store implements Lineage {
341
311
  }>;
342
312
  trackers: Map<string, Tracker<Transceiver<any>>>;
343
313
  families: Map<string, MutableAtomFamily<any, any, any> | ReadonlySelectorFamily<any, any> | RegularAtomFamily<any, any> | WritableSelectorFamily<any, any>>;
314
+ joins: Map<string, Join<any, any, any, any, any, any, `T$--content==${any}::${string}++${any}::${string}`>>;
344
315
  transactions: Map<string, Transaction<Func>>;
345
316
  transactionMeta: TransactionEpoch | TransactionProgress<Func>;
346
317
  timelines: Map<string, Timeline<any>>;
@@ -351,13 +322,12 @@ declare class Store implements Lineage {
351
322
  key: string;
352
323
  trace: string;
353
324
  }>;
354
- molecules: Map<string, Molecule<any>>;
355
- moleculeFamilies: Map<string, Flat<atom_io.MoleculeFamilyToken<any> & {
356
- subject: Subject<atom_io.MoleculeCreationClassic<any> | atom_io.MoleculeDisposalClassic>;
357
- dependsOn: `all` | `any`;
358
- new: any;
359
- }>>;
360
- moleculeInProgress: string | null;
325
+ molecules: Map<string, Molecule<Canonical>>;
326
+ moleculeJoins: Junction<"moleculeKey", stringified<Canonical>, "joinKey", string, null>;
327
+ moleculeGraph: Junction<"upstreamMoleculeKey", stringified<Canonical> | "root", "downstreamMoleculeKey", stringified<Canonical>, {
328
+ source: stringified<Canonical>;
329
+ }>;
330
+ moleculeData: Junction<"moleculeKey", stringified<Canonical>, "stateFamilyKey", string, null>;
361
331
  miscResources: Map<string, Disposable>;
362
332
  on: {
363
333
  atomCreation: Subject<AtomToken<unknown>>;
@@ -368,9 +338,8 @@ declare class Store implements Lineage {
368
338
  transactionCreation: Subject<TransactionToken<Func>>;
369
339
  transactionApplying: StatefulSubject<TransactionProgress<Func> | null>;
370
340
  operationClose: Subject<OperationProgress>;
371
- moleculeCreationStart: Subject<MoleculeToken<any> | MoleculeCreationModern>;
372
- moleculeCreationDone: Subject<MoleculeToken<any>>;
373
- moleculeDisposal: Subject<MoleculeToken<any> | MoleculeDisposalModern>;
341
+ moleculeCreation: Subject<MoleculeCreation>;
342
+ moleculeDisposal: Subject<MoleculeDisposal>;
374
343
  };
375
344
  operation: OperationProgress;
376
345
  config: {
@@ -386,7 +355,7 @@ declare const IMPLICIT: {
386
355
  };
387
356
  declare const clearStore: (store: Store) => void;
388
357
 
389
- type Withdrawable = Atom<any> | AtomFamily<any, any> | Molecule<any> | MoleculeFamily<any> | MutableAtom<any, any> | MutableAtomFamily<any, any, any> | ReadableFamily<any, any> | ReadableState<any> | ReadonlySelector<any> | ReadonlySelectorFamily<any, any> | RegularAtom<any> | RegularAtomFamily<any, any> | Selector<any> | SelectorFamily<any, any> | Timeline<any> | Transaction<any> | WritableFamily<any, any> | WritableSelector<any> | WritableSelectorFamily<any, any> | WritableState<any>;
358
+ type Withdrawable = Atom<any> | AtomFamily<any, any> | Molecule<any> | MutableAtom<any, any> | MutableAtomFamily<any, any, any> | ReadableFamily<any, any> | ReadableState<any> | ReadonlySelector<any> | ReadonlySelectorFamily<any, any> | RegularAtom<any> | RegularAtomFamily<any, any> | Selector<any> | SelectorFamily<any, any> | Timeline<any> | Transaction<any> | WritableFamily<any, any> | WritableSelector<any> | WritableSelectorFamily<any, any> | WritableState<any>;
390
359
  declare function withdraw<T>(token: RegularAtomToken<T>, store: Store): RegularAtom<T>;
391
360
  declare function withdraw<T extends Transceiver<any>>(token: MutableAtomToken<T, any>, store: Store): MutableAtom<T, any>;
392
361
  declare function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T>;
@@ -403,18 +372,16 @@ declare function withdraw<T, K extends Canonical>(token: WritableSelectorFamilyT
403
372
  declare function withdraw<T, K extends Canonical>(token: SelectorFamilyToken<T, K>, store: Store): SelectorFamily<T, any>;
404
373
  declare function withdraw<T, K extends Canonical>(token: ReadableFamilyToken<T, K>, store: Store): ReadableFamily<T, any>;
405
374
  declare function withdraw<T, K extends Canonical>(token: WritableFamilyToken<T, K>, store: Store): WritableFamily<T, any>;
406
- declare function withdraw<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): Molecule<M>;
407
- declare function withdraw<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, store: Store): MoleculeFamily<M>;
408
375
  declare function withdraw<T extends Func>(token: TransactionToken<T>, store: Store): Transaction<T extends Func ? T : never>;
409
376
  declare function withdraw<T>(token: TimelineToken<T>, store: Store): Timeline<T extends TimelineManageable ? T : never>;
410
- declare function withdraw<T, M extends MoleculeConstructor>(token: MoleculeToken<M> | ReadableToken<T>, store: Store): Molecule<M> | ReadableState<T>;
377
+ declare function withdraw<T>(token: ReadableToken<T>, store: Store): ReadableState<T>;
411
378
 
412
- interface Transceiver<Signal extends Json.Serializable> {
413
- do: (update: Signal) => number | `OUT_OF_RANGE` | null;
414
- undo: (update: Signal) => void;
415
- subscribe: (key: string, fn: (update: Signal) => void) => () => void;
379
+ interface Transceiver<S extends Json.Serializable> {
380
+ do: (update: S) => number | `OUT_OF_RANGE` | null;
381
+ undo: (update: S) => void;
382
+ subscribe: (key: string, fn: (update: S) => void) => () => void;
416
383
  cacheUpdateNumber: number;
417
- getUpdateNumber: (update: Signal) => number;
384
+ getUpdateNumber: (update: S) => number;
418
385
  }
419
386
  declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
420
387
  type TransceiverMode = `playback` | `record` | `transaction`;
@@ -505,9 +472,8 @@ declare function createRegularAtomFamily<T, K extends Canonical>(store: Store, o
505
472
  declare function createSelectorFamily<T, K extends Canonical>(store: Store, options: WritableSelectorFamilyOptions<T, K>): WritableSelectorFamilyToken<T, K>;
506
473
  declare function createSelectorFamily<T, K extends Canonical>(store: Store, options: ReadonlySelectorFamilyOptions<T, K>): ReadonlySelectorFamilyToken<T, K>;
507
474
 
508
- declare function disposeFromStore(store: Store, token: MoleculeToken<any> | ReadableToken<any>): void;
475
+ declare function disposeFromStore(store: Store, token: ReadableToken<any>): void;
509
476
  declare function disposeFromStore<K extends Canonical>(store: Store, token: ReadableFamilyToken<any, K>, key: K): void;
510
- declare function disposeFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): void;
511
477
 
512
478
  declare function findInStore<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J, K>;
513
479
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K>;
@@ -535,7 +501,6 @@ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store
535
501
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T, K> | undefined;
536
502
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K> | undefined;
537
503
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K> | undefined;
538
- declare function seekInStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeKey<M> | undefined;
539
504
 
540
505
  type EnvironmentData = {
541
506
  store: Store;
@@ -543,20 +508,19 @@ type EnvironmentData = {
543
508
  declare function getEnvironmentData(store: Store): EnvironmentData;
544
509
 
545
510
  declare function getFromStore<T>(store: Store, token: ReadableToken<T>): T;
546
- declare function getFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeToken<M>): InstanceType<M>;
547
511
  declare function getFromStore<T, K extends Canonical>(store: Store, token: ReadableFamilyToken<T, K>, key: K): T;
548
- declare function getFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): InstanceType<M>;
549
- declare function getFromStore(store: Store, token: MoleculeToken<any> | ReadableToken<any>): any;
550
- declare function getFromStore(store: Store, token: MoleculeFamilyToken<any> | ReadableFamilyToken<any, any>, key: Canonical): any;
551
512
 
552
513
  declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
553
514
 
515
+ declare function getTrace(error: Error): string;
516
+
554
517
  declare function ingestAtomUpdate(applying: `newValue` | `oldValue`, atomUpdate: KeyedStateUpdate<any>, store: Store): void;
555
518
 
556
519
  declare function ingestCreationEvent(update: StateCreation<any>, applying: `newValue` | `oldValue`, store: Store): void;
557
520
  declare function ingestDisposalEvent(update: StateDisposal<ReadableToken<any>>, applying: `newValue` | `oldValue`, store: Store): void;
558
- declare function ingestMoleculeCreationEvent(update: MoleculeCreation<any>, applying: `newValue` | `oldValue`, store: Store): void;
521
+ declare function ingestMoleculeCreationEvent(update: MoleculeCreation, applying: `newValue` | `oldValue`, store: Store): void;
559
522
  declare function ingestMoleculeDisposalEvent(update: MoleculeDisposal, applying: `newValue` | `oldValue`, store: Store): void;
523
+ declare function ingestMoleculeTransferEvent(update: MoleculeTransfer, applying: `newValue` | `oldValue`, store: Store): void;
560
524
 
561
525
  declare function ingestSelectorUpdate(applying: `newValue` | `oldValue`, selectorUpdate: TimelineSelectorUpdate<any>, store: Store): void;
562
526
 
@@ -591,7 +555,7 @@ declare class LazyMap<K, V> extends Map<K, V> {
591
555
  delete(key: K): boolean;
592
556
  }
593
557
 
594
- type AtomIOToken = MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
558
+ type AtomIOToken = ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
595
559
  declare function prettyPrintTokenType(token: AtomIOToken): string;
596
560
 
597
561
  declare class NotFoundError extends Error {
@@ -701,4 +665,4 @@ type SelectorFamily<T, K extends Canonical> = ReadonlySelectorFamily<T, K> | Wri
701
665
  type WritableFamily<T, K extends Canonical> = AtomFamily<T, K> | WritableSelectorFamily<T, K>;
702
666
  type ReadableFamily<T, K extends Canonical> = AtomFamily<T, K> | SelectorFamily<T, K>;
703
667
 
704
- export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type BaseExternalStoreConfiguration, type ChildStore, CircularBuffer, type Count, type Each, type Empty, type EnvironmentData, type ExternalStoreConfiguration, type ExternalStoreWithContentConfiguration, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, type Flat, type Func, Future, IMPLICIT, Junction, type JunctionAdvancedConfiguration, type JunctionEntries, type JunctionEntriesBase, type JunctionJSON, type JunctionSchema, type JunctionSchemaBase, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type ReadableFamily, type ReadableState, type ReadonlySelector, type ReadonlySelectorFamily, type ReadonlySelectorKey, type RegularAtom, type RegularAtomFamily, type RootStore, type Selector, type SelectorFamily, 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 WritableFamily, type WritableSelector, type WritableSelectorFamily, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, 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, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
668
+ export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type BaseExternalStoreConfiguration, type ChildStore, CircularBuffer, type Count, type Each, type Empty, type EnvironmentData, type ExternalStoreConfiguration, type ExternalStoreWithContentConfiguration, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, type Flat, type Func, Future, IMPLICIT, Junction, type JunctionAdvancedConfiguration, type JunctionEntries, type JunctionEntriesBase, type JunctionJSON, type JunctionSchema, type JunctionSchemaBase, LazyMap, type Lineage, type Modify, type Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type ReadableFamily, type ReadableState, type ReadonlySelector, type ReadonlySelectorFamily, type ReadonlySelectorKey, type Refinement, type RegularAtom, type RegularAtomFamily, type RootStore, type Selector, type SelectorFamily, 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 WritableFamily, type WritableSelector, type WritableSelectorFamily, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
@@ -1,3 +1,3 @@
1
- export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Junction, LazyMap, Molecule, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, 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, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw } from '../../dist/chunk-UDHCFTYT.js';
2
- import '../../dist/chunk-ADMEAXYU.js';
1
+ export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Junction, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw } from '../../dist/chunk-42UH5F5Q.js';
2
+ import '../../dist/chunk-ICGFFQ3H.js';
3
3
  import '../../dist/chunk-XWL6SNVU.js';
@@ -1,28 +1,39 @@
1
- import type { AtomToken } from "atom.io"
1
+ import type { AtomDisposal, AtomToken } from "atom.io"
2
2
 
3
3
  import type { Store } from ".."
4
4
  import { getUpdateToken, isChildStore, newest, withdraw } from ".."
5
5
 
6
6
  export function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void {
7
7
  const target = newest(store)
8
- const { key } = atomToken
8
+ const { key, family } = atomToken
9
9
  const atom = withdraw(atomToken, target)
10
- if (!atom.family) {
10
+ if (!family) {
11
11
  store.logger.error(`❌`, `atom`, key, `Standalone atoms cannot be disposed.`)
12
12
  } else {
13
13
  atom.cleanup?.()
14
14
  const lastValue = store.valueMap.get(atom.key)
15
- const family = withdraw({ key: atom.family.key, type: `atom_family` }, store)
16
- family.subject.next({
15
+ const atomFamily = withdraw({ key: family.key, type: `atom_family` }, store)
16
+
17
+ const disposal: AtomDisposal<AtomToken<unknown>> = {
17
18
  type: `state_disposal`,
19
+ subType: `atom`,
18
20
  token: atomToken,
19
21
  value: lastValue,
20
- })
21
-
22
- const molecule = target.molecules.get(atom.family.subKey)
23
- if (molecule) {
24
- molecule.tokens.delete(key)
25
22
  }
23
+
24
+ atomFamily.subject.next(disposal)
25
+
26
+ const isChild = isChildStore(target)
27
+ // let molecule = target.molecules.get(family.subKey)
28
+ // if (molecule && isChild) {
29
+ // const parentMolecule = target.parent.molecules.get(family.subKey)
30
+ // if (parentMolecule === molecule) {
31
+ // molecule = parentMolecule.copy()
32
+ // target.molecules.set(family.subKey, molecule)
33
+ // }
34
+ // }
35
+ // molecule?.tokens.delete(family.key)
36
+
26
37
  target.atoms.delete(key)
27
38
  target.valueMap.delete(key)
28
39
  target.selectorAtoms.delete(key)
@@ -35,11 +46,16 @@ export function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void {
35
46
  store.trackers.delete(key)
36
47
  }
37
48
  store.logger.info(`🔥`, `atom`, key, `deleted`)
38
- if (isChildStore(target) && target.transactionMeta.phase === `building`) {
39
- target.transactionMeta.update.updates.push({
40
- type: `state_disposal`,
41
- token: atomToken,
42
- })
49
+ if (isChild && target.transactionMeta.phase === `building`) {
50
+ const mostRecentUpdate = target.transactionMeta.update.updates.at(-1)
51
+ const wasMoleculeDisposal = mostRecentUpdate?.type === `molecule_disposal`
52
+ const updateAlreadyCaptured =
53
+ wasMoleculeDisposal &&
54
+ mostRecentUpdate.values.some(([k]) => k === atom.family?.key)
55
+
56
+ if (!updateAlreadyCaptured) {
57
+ target.transactionMeta.update.updates.push(disposal)
58
+ }
43
59
  } else {
44
60
  store.on.atomDisposal.next(atomToken)
45
61
  }
@@ -1,24 +1,13 @@
1
- import type {
2
- MoleculeConstructor,
3
- MoleculeFamilyToken,
4
- MoleculeKey,
5
- MoleculeToken,
6
- ReadableFamilyToken,
7
- ReadableToken,
8
- } from "atom.io"
1
+ import type { ReadableFamilyToken, ReadableToken } from "atom.io"
9
2
  import type { Canonical } from "atom.io/json"
10
3
 
11
4
  import { disposeAtom } from "../atom"
12
- import { disposeMolecule } from "../molecule/dispose-molecule"
5
+ import { getTrace } from "../get-trace"
13
6
  import { disposeSelector } from "../selector"
14
- import { counterfeit, type Store, withdraw } from "../store"
7
+ import { type Store, withdraw } from "../store"
15
8
  import { findInStore } from "./find-in-store"
16
- import { seekInStore } from "./seek-in-store"
17
9
 
18
- export function disposeFromStore(
19
- store: Store,
20
- token: MoleculeToken<any> | ReadableToken<any>,
21
- ): void
10
+ export function disposeFromStore(store: Store, token: ReadableToken<any>): void
22
11
 
23
12
  export function disposeFromStore<K extends Canonical>(
24
13
  store: Store,
@@ -26,47 +15,35 @@ export function disposeFromStore<K extends Canonical>(
26
15
  key: K,
27
16
  ): void
28
17
 
29
- export function disposeFromStore<M extends MoleculeConstructor>(
30
- store: Store,
31
- token: MoleculeFamilyToken<M>,
32
- key: MoleculeKey<M>,
33
- ): void
34
-
35
18
  export function disposeFromStore(
36
19
  store: Store,
37
20
  ...params:
38
- | [token: MoleculeFamilyToken<any>, key: MoleculeKey<any>]
39
- | [token: MoleculeToken<any> | ReadableToken<any>]
40
21
  | [token: ReadableFamilyToken<any, any>, key: Canonical]
22
+ | [token: ReadableToken<any>]
41
23
  ): void {
42
- let token: MoleculeToken<any> | ReadableToken<any>
43
- let fullKey: string
24
+ let token: ReadableToken<any>
44
25
  if (params.length === 1) {
45
26
  token = params[0]
46
- fullKey = token.key
47
27
  } else {
48
28
  const family = params[0]
49
29
  const key = params[1]
50
- const maybeToken =
51
- family.type === `molecule_family`
52
- ? (seekInStore(store, family, key) ?? counterfeit(family, key))
53
- : findInStore(store, family, key)
30
+ const maybeToken = findInStore(store, family, key)
54
31
  token = maybeToken
55
32
  }
56
33
  try {
57
34
  withdraw(token, store)
58
35
  } catch (thrown) {
59
- const disposal = store.disposalTraces.buffer.find(
60
- (item) => item?.key === token.key,
61
- )
36
+ // const disposal = store.disposalTraces.buffer.find(
37
+ // (item) => item?.key === token.key,
38
+ // )
62
39
  store.logger.error(
63
40
  `❌`,
64
41
  token.type,
65
42
  token.key,
66
43
  `could not be disposed because it was not found in the store "${store.config.name}".`,
67
- disposal
68
- ? `\n This state was most recently disposed\n${disposal.trace}`
69
- : `No previous disposal trace was found.`,
44
+ // disposal
45
+ // ? `\n This state was most recently disposed\n${disposal.trace}`
46
+ // : `No previous disposal trace was found.`,
70
47
  )
71
48
  return
72
49
  }
@@ -79,14 +56,8 @@ export function disposeFromStore(
79
56
  case `readonly_selector`:
80
57
  disposeSelector(token, store)
81
58
  break
82
- case `molecule`:
83
- disposeMolecule(token, store)
84
- break
85
59
  }
86
60
 
87
- const { stack } = new Error()
88
- if (stack) {
89
- const trace = stack?.split(`\n`)?.slice(3)?.join(`\n`)
90
- store.disposalTraces.add({ key: token.key, trace })
91
- }
61
+ // const trace = getTrace(new Error())
62
+ // store.disposalTraces.add({ key: token.key, trace })
92
63
  }
@@ -16,9 +16,14 @@ import type {
16
16
  WritableSelectorToken,
17
17
  WritableToken,
18
18
  } from "atom.io"
19
- import { type Canonical, type Json, stringifyJson } from "atom.io/json"
19
+ import {
20
+ type Canonical,
21
+ type Json,
22
+ stringified,
23
+ stringifyJson,
24
+ } from "atom.io/json"
20
25
 
21
- import { growMoleculeInStore } from "../molecule"
26
+ import { newest } from "../lineage"
22
27
  import type { Transceiver } from "../mutable"
23
28
  import { counterfeit, type Store } from "../store"
24
29
  import { initFamilyMemberInStore } from "./init-family-member"
@@ -80,17 +85,15 @@ export function findInStore<T, K extends Canonical, Key extends K>(
80
85
  export function findInStore(
81
86
  store: Store,
82
87
  token: ReadableFamilyToken<any, any>,
83
- key: Json.Serializable,
88
+ key: Canonical,
84
89
  ): ReadableToken<any> {
85
90
  let state = seekInStore(store, token, key)
86
91
  if (state) {
87
92
  return state
88
93
  }
89
- const molecule = store.molecules.get(stringifyJson(key))
90
- if (molecule) {
91
- return growMoleculeInStore(molecule, token, store)
92
- }
93
- if (store.config.lifespan === `immortal`) {
94
+ const stringKey = stringifyJson(key)
95
+ const molecule = store.molecules.get(stringKey)
96
+ if (!molecule && store.config.lifespan === `immortal`) {
94
97
  const fakeToken = counterfeit(token, key)
95
98
  store.logger.error(
96
99
  `❌`,
@@ -101,5 +104,9 @@ export function findInStore(
101
104
  return fakeToken
102
105
  }
103
106
  state = initFamilyMemberInStore(store, token, key)
107
+ if (molecule) {
108
+ const target = newest(store)
109
+ target.moleculeData.set(stringKey, token.key)
110
+ }
104
111
  return state
105
112
  }
@@ -88,7 +88,7 @@ export function initFamilyMemberInStore(
88
88
  }
89
89
  const state = family(key)
90
90
  const target = newest(store)
91
- if (state.family && target.moleculeInProgress === null) {
91
+ if (state.family) {
92
92
  if (isRootStore(target)) {
93
93
  switch (state.type) {
94
94
  case `atom`:
@@ -1,10 +1,6 @@
1
1
  import type {
2
2
  AtomFamilyToken,
3
3
  AtomToken,
4
- MoleculeConstructor,
5
- MoleculeFamilyToken,
6
- MoleculeKey,
7
- MoleculeToken,
8
4
  MutableAtomFamilyToken,
9
5
  MutableAtomToken,
10
6
  ReadableFamilyToken,
@@ -81,17 +77,11 @@ export function seekInStore<T, K extends Canonical, Key extends K>(
81
77
  key: Key,
82
78
  ): ReadableToken<T, K> | undefined
83
79
 
84
- export function seekInStore<M extends MoleculeConstructor>(
85
- store: Store,
86
- token: MoleculeFamilyToken<M>,
87
- key: MoleculeKey<M>,
88
- ): MoleculeKey<M> | undefined
89
-
90
80
  export function seekInStore(
91
81
  store: Store,
92
- token: MoleculeFamilyToken<any> | ReadableFamilyToken<any, any>,
82
+ token: ReadableFamilyToken<any, any>,
93
83
  key: Canonical,
94
- ): MoleculeToken<any> | ReadableToken<any> | undefined {
84
+ ): ReadableToken<any> | undefined {
95
85
  const subKey = stringifyJson(key)
96
86
  const fullKey = `${token.key}(${subKey})`
97
87
  const target = newest(store)
@@ -107,8 +97,6 @@ export function seekInStore(
107
97
  case `readonly_selector_family`:
108
98
  state = target.readonlySelectors.get(fullKey)
109
99
  break
110
- case `molecule_family`:
111
- state = target.molecules.get(stringifyJson(key))
112
100
  }
113
101
  if (state) {
114
102
  return deposit(state)