atom.io 0.27.5 → 0.28.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 (73) hide show
  1. package/data/dist/index.d.ts +31 -29
  2. package/data/dist/index.js +16 -17
  3. package/data/src/join.ts +17 -19
  4. package/dist/{chunk-6ABWLAGY.js → chunk-6WL4RQMQ.js} +314 -249
  5. package/dist/chunk-D52JNVER.js +721 -0
  6. package/dist/chunk-YQ46F5O2.js +95 -0
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.js +3 -1
  9. package/internal/dist/index.d.ts +72 -36
  10. package/internal/dist/index.js +1 -1
  11. package/internal/src/atom/dispose-atom.ts +2 -9
  12. package/internal/src/families/dispose-from-store.ts +29 -18
  13. package/internal/src/families/find-in-store.ts +17 -7
  14. package/internal/src/get-state/get-from-store.ts +41 -32
  15. package/internal/src/ingest-updates/ingest-creation-disposal.ts +10 -1
  16. package/internal/src/molecule/dispose-molecule.ts +6 -17
  17. package/internal/src/pretty-print.ts +1 -16
  18. package/internal/src/selector/dispose-selector.ts +2 -9
  19. package/internal/src/set-state/set-into-store.ts +17 -19
  20. package/internal/src/store/circular-buffer.ts +34 -0
  21. package/internal/src/store/counterfeit.ts +109 -0
  22. package/internal/src/store/deposit.ts +14 -0
  23. package/internal/src/store/index.ts +1 -0
  24. package/internal/src/store/store.ts +3 -0
  25. package/internal/src/store/withdraw.ts +15 -10
  26. package/internal/src/transaction/build-transaction.ts +1 -0
  27. package/introspection/dist/index.d.ts +84 -4
  28. package/introspection/dist/index.js +1 -392
  29. package/introspection/src/attach-introspection-states.ts +7 -4
  30. package/introspection/src/attach-type-selectors.ts +26 -0
  31. package/introspection/src/differ.ts +167 -0
  32. package/introspection/src/index.ts +2 -0
  33. package/introspection/src/refinery.ts +100 -0
  34. package/json/dist/index.d.ts +31 -30
  35. package/json/dist/index.js +2 -77
  36. package/json/src/entries.ts +6 -0
  37. package/json/src/index.ts +53 -6
  38. package/package.json +18 -9
  39. package/react-devtools/dist/index.d.ts +1 -91
  40. package/react-devtools/dist/index.js +285 -414
  41. package/react-devtools/src/AtomIODevtools.tsx +2 -2
  42. package/react-devtools/src/StateEditor.tsx +20 -12
  43. package/react-devtools/src/StateIndex.tsx +10 -27
  44. package/react-devtools/src/TimelineIndex.tsx +3 -3
  45. package/react-devtools/src/TransactionIndex.tsx +6 -6
  46. package/react-devtools/src/Updates.tsx +2 -3
  47. package/react-devtools/src/index.ts +0 -71
  48. package/react-devtools/src/store.ts +51 -0
  49. package/realtime/dist/index.d.ts +7 -7
  50. package/realtime/dist/index.js +18 -22
  51. package/realtime/src/realtime-continuity.ts +30 -37
  52. package/realtime-client/dist/index.js +24 -10
  53. package/realtime-client/src/pull-atom-family-member.ts +2 -0
  54. package/realtime-client/src/pull-mutable-atom-family-member.ts +2 -0
  55. package/realtime-client/src/pull-selector-family-member.ts +2 -0
  56. package/realtime-client/src/realtime-client-stores/client-main-store.ts +6 -6
  57. package/realtime-client/src/sync-continuity.ts +28 -6
  58. package/realtime-server/dist/index.js +41 -5
  59. package/realtime-server/src/ipc-sockets/child-socket.ts +2 -0
  60. package/realtime-server/src/realtime-continuity-synchronizer.ts +42 -78
  61. package/realtime-testing/dist/index.d.ts +2 -0
  62. package/realtime-testing/dist/index.js +50 -8
  63. package/realtime-testing/src/setup-realtime-test.tsx +61 -9
  64. package/src/logger.ts +1 -0
  65. package/src/silo.ts +7 -3
  66. package/transceivers/set-rtx/src/set-rtx.ts +1 -0
  67. package/web/dist/index.d.ts +9 -0
  68. package/{dist/chunk-H6EDLPKH.js → web/dist/index.js} +5 -4
  69. package/web/package.json +13 -0
  70. package/web/src/index.ts +1 -0
  71. package/web/src/persist-sync.ts +25 -0
  72. package/dist/chunk-AK23DRMD.js +0 -21
  73. package/dist/chunk-IW6WYRS7.js +0 -140
@@ -0,0 +1,95 @@
1
+ import { createWritableSelectorFamily } from './chunk-6WL4RQMQ.js';
2
+ import { createStandaloneSelector, IMPLICIT, growMoleculeInStore, initFamilyMemberInStore, withdraw, seekInStore } from 'atom.io/internal';
3
+
4
+ // json/src/entries.ts
5
+ function fromEntries(entries) {
6
+ return Object.fromEntries(entries);
7
+ }
8
+ function toEntries(obj) {
9
+ return Object.entries(obj);
10
+ }
11
+ var selectJson = (atom, transform, store = IMPLICIT.STORE) => {
12
+ return createStandaloneSelector(store, {
13
+ key: `${atom.key}:JSON`,
14
+ get: ({ get }) => transform.toJson(get(atom)),
15
+ set: ({ set }, newValue) => {
16
+ set(atom, transform.fromJson(newValue));
17
+ }
18
+ });
19
+ };
20
+ function selectJsonFamily(atomFamilyToken, transform, store = IMPLICIT.STORE) {
21
+ const jsonFamily = createWritableSelectorFamily(
22
+ store,
23
+ {
24
+ key: `${atomFamilyToken.key}:JSON`,
25
+ get: (key) => ({ seek, get }) => {
26
+ const existingState = seek(atomFamilyToken, key);
27
+ if (existingState) {
28
+ return transform.toJson(get(existingState));
29
+ }
30
+ const stringKey = stringifyJson(key);
31
+ const molecule = store.molecules.get(stringKey);
32
+ if (molecule) {
33
+ const atom = growMoleculeInStore(molecule, atomFamilyToken, store);
34
+ return transform.toJson(get(atom));
35
+ }
36
+ if (store.config.lifespan === `immortal`) {
37
+ throw new Error(`No molecule found for key "${stringKey}"`);
38
+ }
39
+ const newToken = initFamilyMemberInStore(store, atomFamilyToken, key);
40
+ return transform.toJson(get(newToken));
41
+ },
42
+ set: (key) => ({ seek, set }, newValue) => {
43
+ const existingState = seek(atomFamilyToken, key);
44
+ if (existingState) {
45
+ set(existingState, transform.fromJson(newValue));
46
+ } else {
47
+ const stringKey = stringifyJson(key);
48
+ const molecule = store.molecules.get(stringKey);
49
+ if (molecule) {
50
+ const atom = growMoleculeInStore(molecule, atomFamilyToken, store);
51
+ set(atom, transform.fromJson(newValue));
52
+ } else {
53
+ if (store.config.lifespan === `immortal`) {
54
+ throw new Error(`No molecule found for key "${stringKey}"`);
55
+ }
56
+ set(
57
+ initFamilyMemberInStore(store, atomFamilyToken, key),
58
+ transform.fromJson(newValue)
59
+ );
60
+ }
61
+ }
62
+ }
63
+ },
64
+ [`mutable`, `json`]
65
+ );
66
+ const atomFamily = withdraw(atomFamilyToken, store);
67
+ atomFamily.subject.subscribe(
68
+ `store=${store.config.name}::json-selector-family`,
69
+ (event) => {
70
+ if (event.token.family) {
71
+ seekInStore(store, jsonFamily, parseJson(event.token.family.subKey));
72
+ }
73
+ }
74
+ );
75
+ return jsonFamily;
76
+ }
77
+
78
+ // json/src/index.ts
79
+ var parseJson = (str) => JSON.parse(str);
80
+ var stringifyJson = (json) => JSON.stringify(json);
81
+ var JSON_PROTOTYPES = [
82
+ Array.prototype,
83
+ Boolean.prototype,
84
+ Number.prototype,
85
+ Object.prototype,
86
+ String.prototype
87
+ ];
88
+ var isJson = (input) => {
89
+ if (input === null) return true;
90
+ if (input === void 0) return false;
91
+ const prototype = Object.getPrototypeOf(input);
92
+ return JSON_PROTOTYPES.includes(prototype);
93
+ };
94
+
95
+ export { fromEntries, isJson, parseJson, selectJson, selectJsonFamily, stringifyJson, toEntries };
package/dist/index.d.ts CHANGED
@@ -341,6 +341,7 @@ declare class Silo {
341
341
  redo: typeof redo;
342
342
  moleculeFamily: typeof moleculeFamily;
343
343
  makeMolecule: typeof makeMolecule;
344
+ runTransaction: typeof runTransaction;
344
345
  constructor(config: Store[`config`], fromStore?: Store | null);
345
346
  }
346
347
 
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import './chunk-XWL6SNVU.js';
2
2
  import * as Internal from 'atom.io/internal';
3
- import { createStandaloneAtom, IMPLICIT, createAtomFamily, createMoleculeFamily, makeMoleculeInStore, Molecule, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, findInStore, getFromStore, setIntoStore, disposeFromStore, subscribeInStore, timeTravel, arbitrary, actUponStore } from 'atom.io/internal';
3
+ import { createStandaloneAtom, IMPLICIT, createAtomFamily, createMoleculeFamily, makeMoleculeInStore, Molecule, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, findInStore, getFromStore, setIntoStore, disposeFromStore, subscribeInStore, timeTravel, actUponStore, arbitrary } from 'atom.io/internal';
4
4
  import { stringifyJson } from 'atom.io/json';
5
5
 
6
6
  function atom(options) {
@@ -102,6 +102,7 @@ var Silo = class {
102
102
  redo;
103
103
  moleculeFamily;
104
104
  makeMolecule;
105
+ runTransaction;
105
106
  constructor(config, fromStore = null) {
106
107
  const s = new Store(config, fromStore);
107
108
  this.store = s;
@@ -132,6 +133,7 @@ var Silo = class {
132
133
  this.makeMolecule = (...params) => {
133
134
  return makeMoleculeInStore(s, ...params);
134
135
  };
136
+ this.runTransaction = (token, id = arbitrary()) => actUponStore(token, id, s);
135
137
  }
136
138
  };
137
139
  function subscribe(token, handleUpdate, key = arbitrary()) {
@@ -1,24 +1,43 @@
1
1
  import * as atom_io from 'atom.io';
2
- import { TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, RegularAtomToken, MutableAtomToken, AtomToken, WritableSelectorToken, ReadonlySelectorToken, SelectorToken, WritableToken, ReadableToken, RegularAtomFamilyToken, MutableAtomFamilyToken, AtomFamilyToken, WritableSelectorFamilyToken, ReadonlySelectorFamilyToken, SelectorFamilyToken, WritableFamilyToken, ReadableFamilyToken, MoleculeConstructor, MoleculeFamily, MoleculeFamilyToken, MoleculeToken, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, AtomIOLogger, Logger, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, MoleculeKey, KeyedStateUpdate, MoleculeFamilyOptions, MoleculeParams, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
3
- import { Canonical, Json, JsonInterface } from 'atom.io/json';
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, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, AtomIOLogger, Logger, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, KeyedStateUpdate, MoleculeFamilyOptions, MoleculeParams, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
3
+ import { Json as Json$1, Canonical, JsonInterface } from 'atom.io/json';
4
4
  import { Join } from 'atom.io/data';
5
5
  import { Store as Store$1, Func as Func$1 } from 'atom.io/internal';
6
6
 
7
- type primitive = boolean | number | string | null;
7
+ declare const FAMILY_MEMBER_TOKEN_TYPES: {
8
+ readonly atom_family: "atom";
9
+ readonly mutable_atom_family: "mutable_atom";
10
+ readonly selector_family: "selector";
11
+ readonly readonly_selector_family: "readonly_selector";
12
+ readonly molecule_family: "molecule";
13
+ };
14
+ declare function counterfeit<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
15
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
16
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
17
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
18
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T>;
19
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
20
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
21
+ declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
22
+ declare function counterfeit<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeKey<M>;
8
23
 
9
- type Serializable = primitive | Readonly<{
10
- [key: string]: Serializable;
11
- }> | ReadonlyArray<Serializable>;
12
- type Object$1<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
24
+ type primitive = boolean | number | string | null;
25
+ declare namespace Json {
26
+ type Serializable = primitive | Readonly<{
27
+ [key: string]: Serializable;
28
+ }> | ReadonlyArray<Serializable>;
29
+ type Object<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
30
+ type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
31
+ }
13
32
 
14
33
  type Refinement<Unrefined, Refined extends Unrefined> = (value: Unrefined) => value is Refined;
15
34
  type Cardinality = `1:1` | `1:n` | `n:n`;
16
35
 
17
- interface JunctionEntries<Content extends Object$1 | null> extends Object$1 {
36
+ interface JunctionEntries<Content extends Json.Object | null> extends Json.Object {
18
37
  readonly relations: [string, string[]][];
19
38
  readonly contents: [string, Content][];
20
39
  }
21
- interface JunctionSchema<ASide extends string, BSide extends string> extends Object$1 {
40
+ interface JunctionSchema<ASide extends string, BSide extends string> extends Json.Object {
22
41
  readonly between: [a: ASide, b: BSide];
23
42
  readonly cardinality: Cardinality;
24
43
  }
@@ -30,7 +49,7 @@ type BaseExternalStoreConfiguration = {
30
49
  getRelatedKeys: (key: string) => Set<string> | undefined;
31
50
  has: (a: string, b?: string) => boolean;
32
51
  };
33
- type ExternalStoreWithContentConfiguration<Content extends Object$1> = {
52
+ type ExternalStoreWithContentConfiguration<Content extends Json.Object> = {
34
53
  getContent: (contentKey: string) => Content | undefined;
35
54
  setContent: (contentKey: string, content: Content) => void;
36
55
  deleteContent: (contentKey: string) => void;
@@ -38,14 +57,14 @@ type ExternalStoreWithContentConfiguration<Content extends Object$1> = {
38
57
  type Empty<Obj extends object> = {
39
58
  [Key in keyof Obj]?: undefined;
40
59
  };
41
- type ExternalStoreConfiguration<Content extends Object$1 | null> = Content extends Object$1 ? BaseExternalStoreConfiguration & ExternalStoreWithContentConfiguration<Content> : BaseExternalStoreConfiguration & Empty<ExternalStoreWithContentConfiguration<Object$1>>;
42
- type JunctionAdvancedConfiguration<Content extends Object$1 | null> = {
60
+ type ExternalStoreConfiguration<Content extends Json.Object | null> = Content extends Json.Object ? BaseExternalStoreConfiguration & ExternalStoreWithContentConfiguration<Content> : BaseExternalStoreConfiguration & Empty<ExternalStoreWithContentConfiguration<Json.Object>>;
61
+ type JunctionAdvancedConfiguration<Content extends Json.Object | null> = {
43
62
  externalStore?: ExternalStoreConfiguration<Content>;
44
63
  isContent?: Refinement<unknown, Content>;
45
64
  makeContentKey?: (a: string, b: string) => string;
46
65
  };
47
- type JunctionJSON<ASide extends string, BSide extends string, Content extends Object$1 | null> = JunctionEntries<Content> & JunctionSchema<ASide, BSide>;
48
- declare class Junction<const ASide extends string, const BSide extends string, const Content extends Object$1 | null = null> {
66
+ type JunctionJSON<ASide extends string, BSide extends string, Content extends Json.Object | null> = JunctionEntries<Content> & JunctionSchema<ASide, BSide>;
67
+ declare class Junction<const ASide extends string, const BSide extends string, const Content extends Json.Object | null = null> {
49
68
  readonly a: ASide;
50
69
  readonly b: BSide;
51
70
  readonly cardinality: Cardinality;
@@ -159,7 +178,7 @@ declare function deposit<T>(state: Selector<T>): SelectorToken<T>;
159
178
  declare function deposit<T>(state: WritableState<T>): WritableToken<T>;
160
179
  declare function deposit<T>(state: ReadableState<T>): ReadableToken<T>;
161
180
  declare function deposit<T, K extends Canonical>(state: RegularAtomFamily<T, K>): RegularAtomFamilyToken<T, K>;
162
- declare function deposit<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(state: MutableAtomFamily<T, J, K>): MutableAtomFamilyToken<T, J, K>;
181
+ declare function deposit<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(state: MutableAtomFamily<T, J, K>): MutableAtomFamilyToken<T, J, K>;
163
182
  declare function deposit<T>(state: AtomFamily<T, any>): AtomFamilyToken<T, any>;
164
183
  declare function deposit<T>(state: WritableSelectorFamily<T, any>): WritableSelectorFamilyToken<T, any>;
165
184
  declare function deposit<T>(state: ReadonlySelectorFamily<T, any>): ReadonlySelectorFamilyToken<T, any>;
@@ -170,6 +189,7 @@ declare function deposit<M extends MoleculeConstructor>(state: MoleculeFamily<M>
170
189
  declare function deposit<M extends MoleculeConstructor>(state: Molecule<M>): MoleculeToken<M>;
171
190
  declare function deposit<T extends Func>(state: Transaction<T>): TransactionToken<T>;
172
191
  declare function deposit(state: Molecule<any> | ReadableState<any>): MoleculeToken<any> | ReadableToken<any>;
192
+ 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>;
173
193
 
174
194
  interface Lineage {
175
195
  parent: typeof this | null;
@@ -238,6 +258,17 @@ declare function createTimeline<ManagedAtom extends TimelineManageable>(options:
238
258
 
239
259
  declare const timeTravel: (store: Store, action: `redo` | `undo`, token: TimelineToken<any>) => void;
240
260
 
261
+ declare class CircularBuffer<T> {
262
+ protected _buffer: T[];
263
+ protected _index: number;
264
+ constructor(array: T[]);
265
+ constructor(length: number);
266
+ get buffer(): ReadonlyArray<T | undefined>;
267
+ get index(): number;
268
+ add(item: T): void;
269
+ copy(): CircularBuffer<T>;
270
+ }
271
+
241
272
  declare class Store implements Lineage {
242
273
  parent: Store | null;
243
274
  child: Store | null;
@@ -259,6 +290,10 @@ declare class Store implements Lineage {
259
290
  timelineTopics: Junction<"timelineKey", "topicKey", {
260
291
  topicType: `atom_family` | `atom` | `molecule_family` | `molecule`;
261
292
  }>;
293
+ disposalTraces: CircularBuffer<{
294
+ key: string;
295
+ trace: string;
296
+ }>;
262
297
  molecules: Map<string, Molecule<any>>;
263
298
  moleculeFamilies: Map<string, Flat<atom_io.MoleculeFamilyToken<any> & {
264
299
  subject: Subject<atom_io.MoleculeCreation<any> | atom_io.MoleculeDisposal>;
@@ -304,7 +339,7 @@ declare function withdraw<T>(token: SelectorToken<T>, store: Store): Selector<T>
304
339
  declare function withdraw<T>(token: WritableToken<T>, store: Store): WritableState<T>;
305
340
  declare function withdraw<T>(token: ReadableToken<T>, store: Store): ReadableState<T>;
306
341
  declare function withdraw<T, K extends Canonical>(token: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomFamily<T, K>;
307
- declare function withdraw<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(token: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomFamily<T, J, K>;
342
+ declare function withdraw<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(token: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomFamily<T, J, K>;
308
343
  declare function withdraw<T, K extends Canonical>(token: AtomFamilyToken<T>, store: Store): AtomFamily<T, any>;
309
344
  declare function withdraw<T, K extends Canonical>(token: ReadonlySelectorFamilyToken<T, K>, store: Store): ReadonlySelectorFamily<T, any>;
310
345
  declare function withdraw<T, K extends Canonical>(token: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorFamily<T, any>;
@@ -315,29 +350,30 @@ declare function withdraw<M extends MoleculeConstructor>(token: MoleculeToken<M>
315
350
  declare function withdraw<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, store: Store): MoleculeFamily<M>;
316
351
  declare function withdraw<T extends Func>(token: TransactionToken<T>, store: Store): Transaction<T extends Func ? T : never>;
317
352
  declare function withdraw<T>(token: TimelineToken<T>, store: Store): Timeline<T extends TimelineManageable ? T : never>;
353
+ declare function withdraw<T, M extends MoleculeConstructor>(token: MoleculeToken<M> | ReadableToken<T>, store: Store): Molecule<M> | ReadableState<T>;
318
354
 
319
- interface Transceiver<Signal extends Json.Serializable> {
355
+ interface Transceiver<Signal extends Json$1.Serializable> {
320
356
  do: (update: Signal) => number | `OUT_OF_RANGE` | null;
321
357
  undo: (update: Signal) => void;
322
358
  subscribe: (key: string, fn: (update: Signal) => void) => () => void;
323
359
  cacheUpdateNumber: number;
324
360
  getUpdateNumber: (update: Signal) => number;
325
361
  }
326
- declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
362
+ declare function isTransceiver(value: unknown): value is Transceiver<Json$1.Serializable>;
327
363
  type TransceiverMode = `playback` | `record` | `transaction`;
328
364
  type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<infer S> ? S : never;
329
365
 
330
- declare function createMutableAtom<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, options: MutableAtomOptions<T, J>, family: FamilyMetadata | undefined): MutableAtomToken<T, J>;
366
+ declare function createMutableAtom<T extends Transceiver<any>, J extends Json$1.Serializable>(store: Store, options: MutableAtomOptions<T, J>, family: FamilyMetadata | undefined): MutableAtomToken<T, J>;
331
367
 
332
- declare function createMutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends string>(store: Store, options: MutableAtomFamilyOptions<T, J, K>, internalRoles?: string[]): MutableAtomFamilyToken<T, J, K>;
368
+ declare function createMutableAtomFamily<T extends Transceiver<any>, J extends Json$1.Serializable, K extends string>(store: Store, options: MutableAtomFamilyOptions<T, J, K>, internalRoles?: string[]): MutableAtomFamilyToken<T, J, K>;
333
369
 
334
- declare const getJsonFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => WritableSelectorFamily<SerializableCore, Key>;
370
+ declare const getJsonFamily: <Core extends Transceiver<Json$1.Serializable>, SerializableCore extends Json$1.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => WritableSelectorFamily<SerializableCore, Key>;
335
371
 
336
- declare const getJsonToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(store: Store, mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => WritableSelectorToken<SerializableCore>;
372
+ declare const getJsonToken: <Core extends Transceiver<any>, SerializableCore extends Json$1.Serializable>(store: Store, mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => WritableSelectorToken<SerializableCore>;
337
373
 
338
- declare const getUpdateFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => AtomFamily<Signal<Core>, Key>;
374
+ declare const getUpdateFamily: <Core extends Transceiver<Json$1.Serializable>, SerializableCore extends Json$1.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => AtomFamily<Signal<Core>, Key>;
339
375
 
340
- declare const getUpdateToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => RegularAtomToken<Signal<Core>>;
376
+ declare const getUpdateToken: <Core extends Transceiver<any>, SerializableCore extends Json$1.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => RegularAtomToken<Signal<Core>>;
341
377
 
342
378
  /**
343
379
  * @internal Give the tracker a transceiver state and a store, and it will
@@ -351,10 +387,10 @@ declare class Tracker<Mutable extends Transceiver<any>> {
351
387
  private unsubscribeFromState;
352
388
  private observeCore;
353
389
  private updateCore;
354
- mutableState: MutableAtomToken<Mutable, Json.Serializable>;
390
+ mutableState: MutableAtomToken<Mutable, Json$1.Serializable>;
355
391
  latestUpdateState: RegularAtomToken<typeof this.Update | null>;
356
392
  dispose: () => void;
357
- constructor(mutableState: MutableAtomToken<Mutable, Json.Serializable>, store: Store);
393
+ constructor(mutableState: MutableAtomToken<Mutable, Json$1.Serializable>, store: Store);
358
394
  }
359
395
 
360
396
  declare class FamilyTracker<Core extends Transceiver<any>, FamilyMemberKey extends Canonical> {
@@ -369,7 +405,7 @@ declare function arbitrary(random?: () => number): string;
369
405
  declare function createRegularAtom<T>(store: Store, options: RegularAtomOptions<T>, family: FamilyMetadata | undefined): RegularAtomToken<T>;
370
406
 
371
407
  declare function createStandaloneAtom<T>(store: Store, options: RegularAtomOptions<T>): RegularAtomToken<T>;
372
- declare function createStandaloneAtom<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, options: MutableAtomOptions<T, J>): MutableAtomToken<T, J>;
408
+ declare function createStandaloneAtom<T extends Transceiver<any>, J extends Json$1.Serializable>(store: Store, options: MutableAtomOptions<T, J>): MutableAtomToken<T, J>;
373
409
 
374
410
  declare function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void;
375
411
 
@@ -401,7 +437,7 @@ declare function cacheValue<T extends Promise<any>>(key: string, value: T, subje
401
437
  declare const readCachedValue: <T>(token: ReadableState<any>, target: Store) => T;
402
438
  declare const evictCachedValue: (key: string, target: Store) => void;
403
439
 
404
- declare function createAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(store: Store, options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamilyToken<T, J, K>;
440
+ declare function createAtomFamily<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(store: Store, options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamilyToken<T, J, K>;
405
441
  declare function createAtomFamily<T, K extends Canonical>(store: Store, options: RegularAtomFamilyOptions<T, K>): RegularAtomFamilyToken<T, K>;
406
442
 
407
443
  declare function createReadonlySelectorFamily<T, K extends Canonical>(store: Store, options: ReadonlySelectorFamilyOptions<T, K>, internalRoles?: string[]): ReadonlySelectorFamilyToken<T, K>;
@@ -415,7 +451,7 @@ declare function disposeFromStore(store: Store, token: MoleculeToken<any> | Read
415
451
  declare function disposeFromStore<K extends Canonical>(store: Store, token: ReadableFamilyToken<any, K>, key: K): void;
416
452
  declare function disposeFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): void;
417
453
 
418
- 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>;
454
+ declare function findInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
419
455
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
420
456
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
421
457
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
@@ -424,7 +460,7 @@ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store
424
460
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
425
461
  declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
426
462
 
427
- declare function initFamilyMemberInStore<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>;
463
+ declare function initFamilyMemberInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
428
464
  declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
429
465
  declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
430
466
  declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
@@ -433,7 +469,7 @@ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
433
469
  declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
434
470
  declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
435
471
 
436
- declare function seekInStore<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> | undefined;
472
+ declare function seekInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J> | undefined;
437
473
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T> | undefined;
438
474
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T> | undefined;
439
475
  declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T> | undefined;
@@ -515,7 +551,7 @@ declare class Molecule<M extends MoleculeConstructor> implements MoleculeToken<M
515
551
  constructor(ctx: Molecule<any> | Molecule<any>[] | undefined, key: MoleculeKey<M>, family?: MoleculeFamilyToken<M>);
516
552
  }
517
553
 
518
- 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>;
554
+ declare function growMoleculeInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(molecule: Molecule<any>, family: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomToken<T, J>;
519
555
  declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomToken<T>;
520
556
  declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: AtomFamilyToken<T, K>, store: Store): AtomToken<T>;
521
557
  declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorToken<T>;
@@ -531,7 +567,7 @@ declare function prettyPrintTokenType(token: AtomIOToken): string;
531
567
 
532
568
  declare class NotFoundError extends Error {
533
569
  constructor(token: AtomIOToken, store: Store);
534
- constructor(familyToken: AtomIOToken, key: Json.Serializable, store: Store);
570
+ constructor(familyToken: AtomIOToken, key: Json$1.Serializable, store: Store);
535
571
  }
536
572
 
537
573
  declare const createReadonlySelector: <T>(store: Store, options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined) => ReadonlySelectorToken<T>;
@@ -589,7 +625,7 @@ type RegularAtom<T> = AtomIOState & {
589
625
  default: T | (() => T);
590
626
  cleanup?: () => void;
591
627
  };
592
- type MutableAtom<T extends Transceiver<any>, J extends Json.Serializable> = AtomIOState & JsonInterface<T, J> & {
628
+ type MutableAtom<T extends Transceiver<any>, J extends Json$1.Serializable> = AtomIOState & JsonInterface<T, J> & {
593
629
  type: `mutable_atom`;
594
630
  default: T | (() => T);
595
631
  cleanup?: () => void;
@@ -613,7 +649,7 @@ type RegularAtomFamily<T, K extends Canonical> = RegularAtomFamilyToken<T, K> &
613
649
  install: (store: Store) => void;
614
650
  internalRoles: string[] | undefined;
615
651
  };
616
- type MutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical> = JsonInterface<T, J> & MutableAtomFamilyToken<T, J, K> & {
652
+ type MutableAtomFamily<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical> = JsonInterface<T, J> & MutableAtomFamilyToken<T, J, K> & {
617
653
  (key: K): MutableAtomToken<T, J>;
618
654
  subject: Subject<StateCreation<MutableAtomToken<T, J>> | StateDisposal<MutableAtomToken<T, J>>>;
619
655
  install: (store: Store) => void;
@@ -636,4 +672,4 @@ type SelectorFamily<T, K extends Canonical> = ReadonlySelectorFamily<T, K> | Wri
636
672
  type WritableFamily<T, K extends Canonical> = AtomFamily<T, K> | WritableSelectorFamily<T, K>;
637
673
  type ReadableFamily<T, K extends Canonical> = AtomFamily<T, K> | SelectorFamily<T, K>;
638
674
 
639
- export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type ChildStore, type EnvironmentData, FamilyTracker, type Flat, type Func, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type Range, 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, 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 };
675
+ export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type ChildStore, type EnvironmentData, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, type Flat, type Func, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type Range, 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 };
@@ -1,3 +1,3 @@
1
- export { FamilyTracker, Future, IMPLICIT, LazyMap, Molecule, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, 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-6ABWLAGY.js';
1
+ export { FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, 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-6WL4RQMQ.js';
2
2
  import '../../dist/chunk-IBTHB2PI.js';
3
3
  import '../../dist/chunk-XWL6SNVU.js';
@@ -12,15 +12,8 @@ import {
12
12
  export function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void {
13
13
  const target = newest(store)
14
14
  const { key } = atomToken
15
- const atom = target.atoms.get(key)
16
- if (!atom) {
17
- store.logger.error(
18
- `❌`,
19
- `atom`,
20
- key,
21
- `Tried to dispose atom, but it does not exist in the store.`,
22
- )
23
- } else if (!atom.family) {
15
+ const atom = withdraw(atomToken, target)
16
+ if (!atom.family) {
24
17
  store.logger.error(`❌`, `atom`, key, `Standalone atoms cannot be disposed.`)
25
18
  } else {
26
19
  atom.cleanup?.()
@@ -6,12 +6,12 @@ import type {
6
6
  ReadableFamilyToken,
7
7
  ReadableToken,
8
8
  } from "atom.io"
9
- import { type Canonical, stringifyJson } from "atom.io/json"
9
+ import type { Canonical } from "atom.io/json"
10
10
 
11
11
  import { disposeAtom } from "../atom"
12
12
  import { disposeMolecule } from "../molecule/dispose-molecule"
13
13
  import { disposeSelector } from "../selector"
14
- import type { Store } from "../store"
14
+ import { counterfeit, type Store, withdraw } from "../store"
15
15
  import { findInStore } from "./find-in-store"
16
16
  import { seekInStore } from "./seek-in-store"
17
17
 
@@ -40,31 +40,36 @@ export function disposeFromStore(
40
40
  | [token: ReadableFamilyToken<any, any>, key: Canonical]
41
41
  ): void {
42
42
  let token: MoleculeToken<any> | ReadableToken<any>
43
+ let fullKey: string
43
44
  if (params.length === 1) {
44
45
  token = params[0]
46
+ fullKey = token.key
45
47
  } else {
46
48
  const family = params[0]
47
49
  const key = params[1]
48
50
  const maybeToken =
49
51
  family.type === `molecule_family`
50
- ? seekInStore(store, family, key)
51
- : store.config.lifespan === `immortal`
52
- ? seekInStore(store, family, key)
53
- : findInStore(store, family, key)
54
- if (!maybeToken) {
55
- store.logger.error(
56
- `❗`,
57
- family.type,
58
- family.key,
59
- `tried to dispose of member`,
60
- stringifyJson(key),
61
- `but it was not found in store`,
62
- store.config.name,
63
- )
64
- return
65
- }
52
+ ? seekInStore(store, family, key) ?? counterfeit(family, key)
53
+ : findInStore(store, family, key)
66
54
  token = maybeToken
67
55
  }
56
+ try {
57
+ withdraw(token, store)
58
+ } catch (thrown) {
59
+ const disposal = store.disposalTraces.buffer.find(
60
+ (item) => item?.key === token.key,
61
+ )
62
+ store.logger.error(
63
+ `❌`,
64
+ token.type,
65
+ token.key,
66
+ `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.`,
70
+ )
71
+ return
72
+ }
68
73
  switch (token.type) {
69
74
  case `atom`:
70
75
  case `mutable_atom`:
@@ -78,4 +83,10 @@ export function disposeFromStore(
78
83
  disposeMolecule(token, store)
79
84
  break
80
85
  }
86
+
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
+ }
81
92
  }
@@ -16,10 +16,11 @@ import type {
16
16
  WritableSelectorToken,
17
17
  WritableToken,
18
18
  } from "atom.io"
19
- import type { Canonical, Json } from "atom.io/json"
19
+ import { type Canonical, type Json, stringifyJson } from "atom.io/json"
20
20
 
21
+ import { growMoleculeInStore } from "../molecule"
21
22
  import type { Transceiver } from "../mutable"
22
- import type { Store } from "../store"
23
+ import { counterfeit, type Store } from "../store"
23
24
  import { initFamilyMemberInStore } from "./init-family-member"
24
25
  import { seekInStore } from "./seek-in-store"
25
26
 
@@ -81,15 +82,24 @@ export function findInStore(
81
82
  token: ReadableFamilyToken<any, any>,
82
83
  key: Json.Serializable,
83
84
  ): ReadableToken<any> {
84
- if (store.config.lifespan === `immortal`) {
85
- throw new Error(
86
- `Do not use \`find\` or \`findState\` in an immortal store. Prefer \`seek\` or \`seekState\`.`,
87
- )
88
- }
89
85
  let state = seekInStore(store, token, key)
90
86
  if (state) {
91
87
  return state
92
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`) {
94
+ const fakeToken = counterfeit(token, key)
95
+ store.logger.error(
96
+ `❌`,
97
+ fakeToken.type,
98
+ fakeToken.key,
99
+ `was not found in store "${store.config.name}"; returned a counterfeit token.`,
100
+ )
101
+ return fakeToken
102
+ }
93
103
  state = initFamilyMemberInStore(store, token, key)
94
104
  return state
95
105
  }