atom.io 0.30.6 → 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 (81) 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-LSCRHXLI.js → chunk-42UH5F5Q.js} +385 -773
  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 +59 -95
  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/index.ts +1 -0
  36. package/internal/src/store/store.ts +51 -12
  37. package/internal/src/store/withdraw.ts +3 -26
  38. package/internal/src/timeline/create-timeline.ts +133 -237
  39. package/internal/src/timeline/time-travel.ts +1 -8
  40. package/internal/src/transaction/build-transaction.ts +10 -5
  41. package/internal/src/transaction/index.ts +1 -1
  42. package/internal/src/utility-types.ts +2 -0
  43. package/introspection/dist/index.d.ts +2 -3
  44. package/introspection/dist/index.js +9 -9
  45. package/introspection/src/refinery.ts +1 -3
  46. package/json/dist/index.js +9 -40
  47. package/json/src/index.ts +2 -0
  48. package/json/src/select-json-family.ts +7 -44
  49. package/package.json +34 -29
  50. package/react/dist/index.js +2 -10
  51. package/react/src/parse-state-overloads.ts +3 -11
  52. package/react-devtools/dist/index.js +13 -13
  53. package/react-devtools/src/Updates.tsx +2 -0
  54. package/realtime-client/dist/index.d.ts +20 -12
  55. package/realtime-client/dist/index.js +241 -244
  56. package/realtime-client/src/continuity/index.ts +3 -0
  57. package/realtime-client/src/continuity/register-and-attempt-confirmed-update.ts +231 -0
  58. package/realtime-client/src/continuity/use-conceal-state.ts +11 -0
  59. package/realtime-client/src/continuity/use-reveal-state.ts +19 -0
  60. package/realtime-client/src/index.ts +1 -0
  61. package/realtime-client/src/sync-continuity.ts +18 -262
  62. package/realtime-react/dist/index.js +2 -2
  63. package/realtime-server/dist/index.d.ts +1 -1
  64. package/realtime-server/dist/index.js +2 -2
  65. package/realtime-server/src/index.ts +1 -1
  66. package/realtime-testing/dist/index.js +2 -3
  67. package/realtime-testing/src/setup-realtime-test.tsx +1 -2
  68. package/src/allocate.ts +311 -145
  69. package/src/dispose-state.ts +5 -21
  70. package/src/get-state.ts +3 -21
  71. package/src/molecule.ts +11 -133
  72. package/src/silo.ts +1 -12
  73. package/src/timeline.ts +2 -3
  74. package/src/transaction.ts +25 -38
  75. package/dist/chunk-ADMEAXYU.js +0 -167
  76. package/internal/src/molecule/create-molecule-family.ts +0 -30
  77. package/internal/src/molecule/dispose-molecule.ts +0 -79
  78. package/internal/src/molecule/grow-molecule-in-store.ts +0 -95
  79. package/internal/src/molecule/index.ts +0 -5
  80. package/internal/src/molecule/make-molecule-in-store.ts +0 -191
  81. 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,10 +1,19 @@
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
 
6
+ declare class CircularBuffer<T> {
7
+ protected _buffer: T[];
8
+ protected _index: number;
9
+ constructor(array: T[]);
10
+ constructor(length: number);
11
+ get buffer(): ReadonlyArray<T | undefined>;
12
+ get index(): number;
13
+ add(item: T): void;
14
+ copy(): CircularBuffer<T>;
15
+ }
16
+
8
17
  declare const FAMILY_MEMBER_TOKEN_TYPES: {
9
18
  readonly atom_family: "atom";
10
19
  readonly mutable_atom_family: "mutable_atom";
@@ -20,7 +29,21 @@ declare function counterfeit<T, K extends Canonical, Key extends K>(token: Reado
20
29
  declare function counterfeit<T, K extends Canonical, Key extends K>(token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
21
30
  declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
22
31
  declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
23
- 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;
24
47
 
25
48
  type JunctionEntriesBase<AType extends string, BType extends string, Content extends Json.Object | null> = {
26
49
  readonly relations: ([AType, BType[]] | [BType, AType[]])[];
@@ -117,20 +140,6 @@ declare class Junction<const ASide extends string, const AType extends string, c
117
140
  has(b: BType, a?: AType): boolean;
118
141
  }
119
142
 
120
- type Func = (...parameters: any[]) => any;
121
- type Flat<R extends {
122
- [K in PropertyKey]: any;
123
- }> = {
124
- [K in keyof R]: R[K];
125
- };
126
- type Count<N extends number, A extends any[] = []> = [
127
- ...A,
128
- any
129
- ][`length`] extends N ? A[`length`] : A[`length`] | Count<N, [...A, any]>;
130
- type Each<E extends any[]> = {
131
- [P in Count<E[`length`]>]: E[P];
132
- };
133
-
134
143
  declare const abortTransaction: (store: Store) => void;
135
144
 
136
145
  declare function actUponStore<F extends Func>(token: TransactionToken<F>, id: string, store: Store): (...parameters: Parameters<F>) => ReturnType<F>;
@@ -211,49 +220,21 @@ declare function deposit<T>(state: ReadonlySelectorFamily<T, any>): ReadonlySele
211
220
  declare function deposit<T>(state: SelectorFamily<T, any>): SelectorFamilyToken<T, any>;
212
221
  declare function deposit<T>(state: WritableFamily<T, any>): WritableFamilyToken<T, any>;
213
222
  declare function deposit<T>(state: ReadableFamily<T, any>): ReadableFamilyToken<T, any>;
214
- declare function deposit<M extends MoleculeConstructor>(state: MoleculeFamily<M>): MoleculeFamilyToken<M>;
215
- declare function deposit<M extends MoleculeConstructor>(state: Molecule<M>): MoleculeToken<M>;
216
223
  declare function deposit<T extends Func>(state: Transaction<T>): TransactionToken<T>;
217
- declare function deposit(state: Molecule<any> | ReadableState<any>): MoleculeToken<any> | ReadableToken<any>;
218
- 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>;
219
226
 
220
227
  interface Lineage {
221
228
  parent: typeof this | null;
222
229
  child: typeof this | null;
223
230
  }
224
231
  declare function newest<T extends Lineage>(scion: T): T;
225
- declare function eldest<T extends Lineage>(scion: T): T;
226
-
227
- declare function createMoleculeFamily<M extends MoleculeConstructor>(store: Store, options: MoleculeFamilyOptions<M>): MoleculeFamilyToken<M>;
228
-
229
- declare function disposeMolecule<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): void;
230
-
231
- declare class Molecule<M extends MoleculeConstructor> implements MoleculeToken<M> {
232
- readonly key: MoleculeKey<M>;
233
- readonly type = "molecule";
234
- stringKey: string;
235
- family?: MoleculeFamilyToken<M>;
236
- _dependsOn: `all` | `any`;
237
- get dependsOn(): `all` | `any`;
238
- readonly subject: Subject<StateCreation<any> | StateDisposal<any>>;
239
- tokens: Map<string, ReadableToken<any>>;
240
- above: Map<string, Molecule<any>>;
241
- below: Map<string, Molecule<any>>;
242
- joins: Map<string, Join<any, any, any, any, any, any>>;
243
- instance: InstanceType<M>;
244
- constructor(ctx: Molecule<any>[] | undefined, key: MoleculeKey<M>, family?: MoleculeFamilyToken<M>);
245
- }
246
-
247
- 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>;
248
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomToken<T>;
249
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: AtomFamilyToken<T, K>, store: Store): AtomToken<T>;
250
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorToken<T>;
251
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: ReadonlySelectorFamilyToken<T, K>, store: Store): ReadonlySelectorToken<T>;
252
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: SelectorFamilyToken<T, K>, store: Store): SelectorToken<T>;
253
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableFamilyToken<T, K>, store: Store): WritableToken<T>;
254
- declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: ReadableFamilyToken<T, K>, store: Store): ReadableToken<T>;
255
232
 
256
- 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
+ };
257
238
 
258
239
  type OperationProgress = {
259
240
  open: false;
@@ -292,7 +273,7 @@ type TimelineStateCreation<T extends ReadableToken<any>> = Flat<StateCreation<T>
292
273
  type TimelineStateDisposal<T extends ReadableToken<any>> = Flat<StateDisposal<T> & {
293
274
  timestamp: number;
294
275
  }>;
295
- type TimelineMoleculeCreation<M extends MoleculeConstructor> = Flat<MoleculeCreation<M> & {
276
+ type TimelineMoleculeCreation = Flat<MoleculeCreation & {
296
277
  timestamp: number;
297
278
  }>;
298
279
  type TimelineMoleculeDisposal = Flat<MoleculeDisposal & {
@@ -315,17 +296,6 @@ declare function createTimeline<ManagedAtom extends TimelineManageable>(options:
315
296
 
316
297
  declare const timeTravel: (store: Store, action: `redo` | `undo`, token: TimelineToken<any>) => void;
317
298
 
318
- declare class CircularBuffer<T> {
319
- protected _buffer: T[];
320
- protected _index: number;
321
- constructor(array: T[]);
322
- constructor(length: number);
323
- get buffer(): ReadonlyArray<T | undefined>;
324
- get index(): number;
325
- add(item: T): void;
326
- copy(): CircularBuffer<T>;
327
- }
328
-
329
299
  declare class Store implements Lineage {
330
300
  parent: Store | null;
331
301
  child: Store | null;
@@ -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, 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 { 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-LSCRHXLI.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)