atom.io 0.30.7 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) 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-Y5MBNTVU.js} +582 -762
  5. package/dist/index.d.ts +254 -173
  6. package/dist/index.js +91 -14
  7. package/ephemeral/dist/index.d.ts +35 -25
  8. package/ephemeral/src/find-state.ts +35 -25
  9. package/eslint-plugin/dist/index.d.ts +22 -3
  10. package/eslint-plugin/dist/index.js +7 -7
  11. package/immortal/dist/index.d.ts +1 -2
  12. package/immortal/dist/index.js +0 -3
  13. package/immortal/src/seek-state.ts +2 -14
  14. package/internal/dist/index.d.ts +57 -88
  15. package/internal/dist/index.js +1 -2
  16. package/internal/src/atom/dispose-atom.ts +31 -15
  17. package/internal/src/families/dispose-from-store.ts +15 -44
  18. package/internal/src/families/find-in-store.ts +9 -7
  19. package/internal/src/families/init-family-member.ts +1 -1
  20. package/internal/src/families/seek-in-store.ts +2 -14
  21. package/internal/src/get-state/get-from-store.ts +13 -79
  22. package/internal/src/get-trace.ts +7 -0
  23. package/internal/src/index.ts +17 -8
  24. package/internal/src/ingest-updates/ingest-creation-disposal.ts +65 -73
  25. package/internal/src/ingest-updates/ingest-transaction-update.ts +4 -0
  26. package/internal/src/install-into-store.ts +48 -0
  27. package/internal/src/junction.ts +52 -12
  28. package/internal/src/lineage.ts +0 -7
  29. package/internal/src/molecule.ts +306 -0
  30. package/internal/src/mutable/transceiver.ts +5 -5
  31. package/internal/src/not-found-error.ts +8 -30
  32. package/internal/src/pretty-print.ts +1 -16
  33. package/internal/src/selector/dispose-selector.ts +3 -5
  34. package/internal/src/selector/register-selector.ts +3 -34
  35. package/internal/src/set-state/set-into-store.ts +3 -2
  36. package/internal/src/store/counterfeit.ts +11 -25
  37. package/internal/src/store/deposit.ts +10 -42
  38. package/internal/src/store/store.ts +51 -12
  39. package/internal/src/store/withdraw.ts +18 -60
  40. package/internal/src/timeline/create-timeline.ts +133 -237
  41. package/internal/src/timeline/time-travel.ts +1 -8
  42. package/internal/src/transaction/build-transaction.ts +10 -5
  43. package/internal/src/transaction/index.ts +1 -1
  44. package/internal/src/utility-types.ts +2 -0
  45. package/introspection/dist/index.d.ts +2 -3
  46. package/introspection/dist/index.js +9 -9
  47. package/introspection/src/refinery.ts +1 -3
  48. package/json/dist/index.js +8 -40
  49. package/json/src/index.ts +2 -0
  50. package/json/src/select-json-family.ts +7 -44
  51. package/package.json +33 -28
  52. package/react/dist/index.js +2 -10
  53. package/react/src/parse-state-overloads.ts +3 -11
  54. package/react-devtools/dist/index.js +13 -13
  55. package/react-devtools/src/Updates.tsx +2 -0
  56. package/realtime-client/dist/index.d.ts +20 -12
  57. package/realtime-client/dist/index.js +241 -244
  58. package/realtime-client/src/continuity/index.ts +3 -0
  59. package/realtime-client/src/continuity/register-and-attempt-confirmed-update.ts +231 -0
  60. package/realtime-client/src/continuity/use-conceal-state.ts +11 -0
  61. package/realtime-client/src/continuity/use-reveal-state.ts +19 -0
  62. package/realtime-client/src/index.ts +1 -0
  63. package/realtime-client/src/sync-continuity.ts +18 -262
  64. package/realtime-react/dist/index.js +2 -2
  65. package/realtime-server/dist/index.d.ts +1 -1
  66. package/realtime-server/dist/index.js +2 -2
  67. package/realtime-server/src/index.ts +1 -1
  68. package/realtime-server/src/ipc-sockets/child-socket.ts +0 -1
  69. package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +1 -1
  70. package/realtime-testing/dist/index.js +5 -7
  71. package/realtime-testing/src/setup-realtime-test.tsx +5 -6
  72. package/src/atom.ts +53 -29
  73. package/src/dispose-state.ts +17 -23
  74. package/src/get-state.ts +19 -21
  75. package/src/index.ts +73 -3
  76. package/src/realm.ts +169 -0
  77. package/src/selector.ts +20 -0
  78. package/src/set-state.ts +16 -8
  79. package/src/silo.ts +9 -14
  80. package/src/timeline.ts +2 -3
  81. package/src/transaction.ts +25 -38
  82. package/transceivers/set-rtx/dist/index.js +4 -1
  83. package/transceivers/set-rtx/src/set-rtx.ts +4 -1
  84. package/dist/chunk-ADMEAXYU.js +0 -167
  85. package/internal/src/molecule/create-molecule-family.ts +0 -30
  86. package/internal/src/molecule/dispose-molecule.ts +0 -79
  87. package/internal/src/molecule/grow-molecule-in-store.ts +0 -95
  88. package/internal/src/molecule/index.ts +0 -5
  89. package/internal/src/molecule/make-molecule-in-store.ts +0 -191
  90. package/internal/src/molecule/molecule-internal.ts +0 -52
  91. package/src/allocate.ts +0 -277
  92. package/src/molecule.ts +0 -138
@@ -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, TimelineToken, AtomIOToken, Hierarchy, Vassal, Above, Claim, CompoundFrom, CompoundTypedKey, SingularTypedKey, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, 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,26 @@ 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<M extends TimelineManageable>(state: Timeline<M>): TimelineToken<M>;
225
+ declare function deposit(resource: AtomIOInternalResource): AtomIOToken;
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
+ };
238
+ declare function makeRootMoleculeInStore<S extends string>(key: S, store?: Store): S;
239
+ declare function allocateIntoStore<H extends Hierarchy, V extends Vassal<H>, A extends Above<V, H>>(store: Store, provenance: A, key: V, dependsOn?: `all` | `any`): Claim<V>;
240
+ declare function fuseWithinStore<H extends Hierarchy, C extends CompoundFrom<H>, T extends C extends CompoundTypedKey<infer t, any, any> ? t : never, A extends C extends CompoundTypedKey<any, infer a, any> ? a : never, B extends C extends CompoundTypedKey<any, any, infer b> ? b : never>(store: Store, type: T, sideA: SingularTypedKey<A>, sideB: SingularTypedKey<B>): Claim<CompoundTypedKey<T, A, B>>;
241
+ declare function deallocateFromStore<H extends Hierarchy, V extends Vassal<H>>(store: Store, claim: Claim<V>): void;
242
+ declare function claimWithinStore<H extends Hierarchy, V extends Exclude<Vassal<H>, CompoundTypedKey>, A extends Above<V, H>>(store: Store, newProvenance: A, claim: Claim<V>, exclusive?: `exclusive`): Claim<V>;
268
243
 
269
244
  type OperationProgress = {
270
245
  open: false;
@@ -303,7 +278,7 @@ type TimelineStateCreation<T extends ReadableToken<any>> = Flat<StateCreation<T>
303
278
  type TimelineStateDisposal<T extends ReadableToken<any>> = Flat<StateDisposal<T> & {
304
279
  timestamp: number;
305
280
  }>;
306
- type TimelineMoleculeCreation<M extends MoleculeConstructor> = Flat<MoleculeCreation<M> & {
281
+ type TimelineMoleculeCreation = Flat<MoleculeCreation & {
307
282
  timestamp: number;
308
283
  }>;
309
284
  type TimelineMoleculeDisposal = Flat<MoleculeDisposal & {
@@ -340,7 +315,8 @@ declare class Store implements Lineage {
340
315
  source: string;
341
316
  }>;
342
317
  trackers: Map<string, Tracker<Transceiver<any>>>;
343
- families: Map<string, MutableAtomFamily<any, any, any> | ReadonlySelectorFamily<any, any> | RegularAtomFamily<any, any> | WritableSelectorFamily<any, any>>;
318
+ families: Map<string, MutableAtomFamily<any, any, any> | RegularAtomFamily<any, any> | ReadonlySelectorFamily<any, any> | WritableSelectorFamily<any, any>>;
319
+ joins: Map<string, Join<any, any, any, any, any, any, `T$--content==${any}::${string}++${any}::${string}`>>;
344
320
  transactions: Map<string, Transaction<Func>>;
345
321
  transactionMeta: TransactionEpoch | TransactionProgress<Func>;
346
322
  timelines: Map<string, Timeline<any>>;
@@ -351,13 +327,12 @@ declare class Store implements Lineage {
351
327
  key: string;
352
328
  trace: string;
353
329
  }>;
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;
330
+ molecules: Map<string, Molecule<Canonical>>;
331
+ moleculeJoins: Junction<"moleculeKey", stringified<Canonical>, "joinKey", string, null>;
332
+ moleculeGraph: Junction<"upstreamMoleculeKey", stringified<Canonical> | "root", "downstreamMoleculeKey", stringified<Canonical>, {
333
+ source: stringified<Canonical>;
334
+ }>;
335
+ moleculeData: Junction<"moleculeKey", stringified<Canonical>, "stateFamilyKey", string, null>;
361
336
  miscResources: Map<string, Disposable>;
362
337
  on: {
363
338
  atomCreation: Subject<AtomToken<unknown>>;
@@ -368,9 +343,8 @@ declare class Store implements Lineage {
368
343
  transactionCreation: Subject<TransactionToken<Func>>;
369
344
  transactionApplying: StatefulSubject<TransactionProgress<Func> | null>;
370
345
  operationClose: Subject<OperationProgress>;
371
- moleculeCreationStart: Subject<MoleculeToken<any> | MoleculeCreationModern>;
372
- moleculeCreationDone: Subject<MoleculeToken<any>>;
373
- moleculeDisposal: Subject<MoleculeToken<any> | MoleculeDisposalModern>;
346
+ moleculeCreation: Subject<MoleculeCreation>;
347
+ moleculeDisposal: Subject<MoleculeDisposal>;
374
348
  };
375
349
  operation: OperationProgress;
376
350
  config: {
@@ -386,7 +360,6 @@ declare const IMPLICIT: {
386
360
  };
387
361
  declare const clearStore: (store: Store) => void;
388
362
 
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>;
390
363
  declare function withdraw<T>(token: RegularAtomToken<T>, store: Store): RegularAtom<T>;
391
364
  declare function withdraw<T extends Transceiver<any>>(token: MutableAtomToken<T, any>, store: Store): MutableAtom<T, any>;
392
365
  declare function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T>;
@@ -403,18 +376,18 @@ declare function withdraw<T, K extends Canonical>(token: WritableSelectorFamilyT
403
376
  declare function withdraw<T, K extends Canonical>(token: SelectorFamilyToken<T, K>, store: Store): SelectorFamily<T, any>;
404
377
  declare function withdraw<T, K extends Canonical>(token: ReadableFamilyToken<T, K>, store: Store): ReadableFamily<T, any>;
405
378
  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
379
  declare function withdraw<T extends Func>(token: TransactionToken<T>, store: Store): Transaction<T extends Func ? T : never>;
409
380
  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>;
381
+ declare function withdraw<T>(token: WritableToken<T>, store: Store): WritableState<T>;
382
+ declare function withdraw<T>(token: ReadableToken<T>, store: Store): ReadableState<T>;
383
+ declare function withdraw(token: AtomIOToken, store: Store): AtomIOInternalResource;
411
384
 
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;
385
+ interface Transceiver<S extends Json.Serializable> {
386
+ do: (update: S) => number | `OUT_OF_RANGE` | null;
387
+ undo: (update: S) => void;
388
+ subscribe: (key: string, fn: (update: S) => void) => () => void;
416
389
  cacheUpdateNumber: number;
417
- getUpdateNumber: (update: Signal) => number;
390
+ getUpdateNumber: (update: S) => number;
418
391
  }
419
392
  declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
420
393
  type TransceiverMode = `playback` | `record` | `transaction`;
@@ -505,9 +478,8 @@ declare function createRegularAtomFamily<T, K extends Canonical>(store: Store, o
505
478
  declare function createSelectorFamily<T, K extends Canonical>(store: Store, options: WritableSelectorFamilyOptions<T, K>): WritableSelectorFamilyToken<T, K>;
506
479
  declare function createSelectorFamily<T, K extends Canonical>(store: Store, options: ReadonlySelectorFamilyOptions<T, K>): ReadonlySelectorFamilyToken<T, K>;
507
480
 
508
- declare function disposeFromStore(store: Store, token: MoleculeToken<any> | ReadableToken<any>): void;
481
+ declare function disposeFromStore(store: Store, token: ReadableToken<any>): void;
509
482
  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
483
 
512
484
  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
485
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K>;
@@ -535,7 +507,6 @@ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store
535
507
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T, K> | undefined;
536
508
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K> | undefined;
537
509
  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
510
 
540
511
  type EnvironmentData = {
541
512
  store: Store;
@@ -543,20 +514,19 @@ type EnvironmentData = {
543
514
  declare function getEnvironmentData(store: Store): EnvironmentData;
544
515
 
545
516
  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
517
  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
518
 
552
519
  declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
553
520
 
521
+ declare function getTrace(error: Error): string;
522
+
554
523
  declare function ingestAtomUpdate(applying: `newValue` | `oldValue`, atomUpdate: KeyedStateUpdate<any>, store: Store): void;
555
524
 
556
525
  declare function ingestCreationEvent(update: StateCreation<any>, applying: `newValue` | `oldValue`, store: Store): void;
557
526
  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;
527
+ declare function ingestMoleculeCreationEvent(update: MoleculeCreation, applying: `newValue` | `oldValue`, store: Store): void;
559
528
  declare function ingestMoleculeDisposalEvent(update: MoleculeDisposal, applying: `newValue` | `oldValue`, store: Store): void;
529
+ declare function ingestMoleculeTransferEvent(update: MoleculeTransfer, applying: `newValue` | `oldValue`, store: Store): void;
560
530
 
561
531
  declare function ingestSelectorUpdate(applying: `newValue` | `oldValue`, selectorUpdate: TimelineSelectorUpdate<any>, store: Store): void;
562
532
 
@@ -591,14 +561,12 @@ declare class LazyMap<K, V> extends Map<K, V> {
591
561
  delete(key: K): boolean;
592
562
  }
593
563
 
594
- type AtomIOToken = MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
595
- declare function prettyPrintTokenType(token: AtomIOToken): string;
596
-
597
564
  declare class NotFoundError extends Error {
598
565
  constructor(token: AtomIOToken, store: Store);
599
- constructor(familyToken: AtomIOToken, key: Json.Serializable, store: Store);
600
566
  }
601
567
 
568
+ declare function prettyPrintTokenType(token: AtomIOToken): string;
569
+
602
570
  declare const createReadonlySelector: <T>(store: Store, options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined) => ReadonlySelectorToken<T>;
603
571
 
604
572
  declare function createStandaloneSelector<T>(store: Store, options: WritableSelectorOptions<T>): WritableSelectorToken<T>;
@@ -700,5 +668,6 @@ type ReadonlySelectorFamily<T, K extends Canonical> = ReadonlySelectorFamilyToke
700
668
  type SelectorFamily<T, K extends Canonical> = ReadonlySelectorFamily<T, K> | WritableSelectorFamily<T, K>;
701
669
  type WritableFamily<T, K extends Canonical> = AtomFamily<T, K> | WritableSelectorFamily<T, K>;
702
670
  type ReadableFamily<T, K extends Canonical> = AtomFamily<T, K> | SelectorFamily<T, K>;
671
+ type AtomIOInternalResource = ReadableFamily<any, any> | ReadableState<any> | Timeline<any> | Transaction<any>;
703
672
 
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 };
673
+ export { type Atom, type AtomFamily, type AtomIOInternalResource, type AtomIOState, 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 WritableFamily, type WritableSelector, type WritableSelectorFamily, type WritableState, abortTransaction, actUponStore, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, claimWithinStore, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deallocateFromStore, deposit, disposeAtom, disposeFromStore, disposeSelector, evictCachedValue, findInStore, fuseWithinStore, 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, makeRootMoleculeInStore, 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,2 @@
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, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, claimWithinStore, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deallocateFromStore, deposit, disposeAtom, disposeFromStore, disposeSelector, evictCachedValue, findInStore, fuseWithinStore, 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, makeRootMoleculeInStore, 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-Y5MBNTVU.js';
3
2
  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
  }
@@ -18,7 +18,7 @@ import type {
18
18
  } from "atom.io"
19
19
  import { type Canonical, type Json, stringifyJson } from "atom.io/json"
20
20
 
21
- import { growMoleculeInStore } from "../molecule"
21
+ import { newest } from "../lineage"
22
22
  import type { Transceiver } from "../mutable"
23
23
  import { counterfeit, type Store } from "../store"
24
24
  import { initFamilyMemberInStore } from "./init-family-member"
@@ -80,17 +80,15 @@ export function findInStore<T, K extends Canonical, Key extends K>(
80
80
  export function findInStore(
81
81
  store: Store,
82
82
  token: ReadableFamilyToken<any, any>,
83
- key: Json.Serializable,
83
+ key: Canonical,
84
84
  ): ReadableToken<any> {
85
85
  let state = seekInStore(store, token, key)
86
86
  if (state) {
87
87
  return state
88
88
  }
89
- const molecule = store.molecules.get(stringifyJson(key))
90
- if (molecule) {
91
- return growMoleculeInStore(molecule, token, store)
92
- }
93
- if (store.config.lifespan === `immortal`) {
89
+ const stringKey = stringifyJson(key)
90
+ const molecule = store.molecules.get(stringKey)
91
+ if (!molecule && store.config.lifespan === `immortal`) {
94
92
  const fakeToken = counterfeit(token, key)
95
93
  store.logger.error(
96
94
  `❌`,
@@ -101,5 +99,9 @@ export function findInStore(
101
99
  return fakeToken
102
100
  }
103
101
  state = initFamilyMemberInStore(store, token, key)
102
+ if (molecule) {
103
+ const target = newest(store)
104
+ target.moleculeData.set(stringKey, token.key)
105
+ }
104
106
  return state
105
107
  }
@@ -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)