atom.io 0.15.6 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/data/dist/index.cjs +20 -22
  2. package/data/dist/index.cjs.map +1 -1
  3. package/data/dist/index.d.ts +6 -6
  4. package/data/dist/index.js +21 -23
  5. package/data/dist/index.js.map +1 -1
  6. package/data/src/dict.ts +6 -7
  7. package/data/src/join.ts +23 -23
  8. package/data/src/struct-family.ts +2 -2
  9. package/data/src/struct.ts +4 -5
  10. package/dist/index.cjs +12 -5
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.ts +67 -60
  13. package/dist/index.js +13 -6
  14. package/dist/index.js.map +1 -1
  15. package/internal/dist/index.cjs +910 -887
  16. package/internal/dist/index.cjs.map +1 -1
  17. package/internal/dist/index.d.ts +157 -162
  18. package/internal/dist/index.js +482 -458
  19. package/internal/dist/index.js.map +1 -1
  20. package/internal/src/atom/create-regular-atom.ts +9 -12
  21. package/internal/src/atom/create-standalone-atom.ts +33 -0
  22. package/internal/src/atom/delete-atom.ts +5 -2
  23. package/internal/src/atom/index.ts +1 -16
  24. package/internal/src/atom/is-default.ts +0 -1
  25. package/internal/src/caching.ts +6 -3
  26. package/internal/src/families/create-atom-family.ts +11 -7
  27. package/internal/src/families/create-readonly-selector-family.ts +4 -3
  28. package/internal/src/families/create-regular-atom-family.ts +12 -27
  29. package/internal/src/families/create-selector-family.ts +13 -49
  30. package/internal/src/families/create-writable-selector-family.ts +51 -0
  31. package/internal/src/index.ts +44 -3
  32. package/internal/src/lineage.ts +0 -7
  33. package/internal/src/mutable/create-mutable-atom-family.ts +61 -15
  34. package/internal/src/mutable/create-mutable-atom.ts +70 -25
  35. package/internal/src/mutable/get-json-family.ts +4 -5
  36. package/internal/src/mutable/get-json-token.ts +6 -3
  37. package/internal/src/mutable/get-update-token.ts +3 -3
  38. package/internal/src/mutable/index.ts +1 -7
  39. package/internal/src/mutable/is-mutable.ts +6 -7
  40. package/internal/src/mutable/tracker-family.ts +4 -4
  41. package/internal/src/mutable/tracker.ts +6 -6
  42. package/internal/src/read-or-compute-value.ts +6 -3
  43. package/internal/src/selector/create-readonly-selector.ts +2 -3
  44. package/internal/src/selector/create-standalone-selector.ts +32 -0
  45. package/internal/src/selector/{create-read-write-selector.ts → create-writable-selector.ts} +12 -9
  46. package/internal/src/selector/delete-selector.ts +2 -2
  47. package/internal/src/selector/index.ts +3 -1
  48. package/internal/src/selector/trace-selector-atoms.ts +3 -2
  49. package/internal/src/selector/update-selector-atoms.ts +1 -1
  50. package/internal/src/set-state/copy-mutable-if-needed.ts +5 -6
  51. package/internal/src/set-state/copy-mutable-in-transaction.ts +4 -36
  52. package/internal/src/set-state/emit-update.ts +2 -3
  53. package/internal/src/set-state/evict-downstream.ts +1 -1
  54. package/internal/src/set-state/set-atom-or-selector.ts +3 -3
  55. package/internal/src/set-state/set-atom.ts +1 -2
  56. package/internal/src/set-state/stow-update.ts +1 -1
  57. package/internal/src/store/deposit.ts +25 -13
  58. package/internal/src/store/store.ts +21 -21
  59. package/internal/src/store/withdraw-new-family-member.ts +16 -9
  60. package/internal/src/store/withdraw.ts +43 -19
  61. package/internal/src/subscribe/recall-state.ts +2 -6
  62. package/internal/src/subscribe/subscribe-to-root-atoms.ts +39 -41
  63. package/internal/src/subscribe/subscribe-to-state.ts +3 -1
  64. package/internal/src/timeline/add-atom-to-timeline.ts +5 -5
  65. package/internal/src/timeline/create-timeline.ts +19 -22
  66. package/introspection/dist/index.cjs +4 -8
  67. package/introspection/dist/index.cjs.map +1 -1
  68. package/introspection/dist/index.d.ts +5 -5
  69. package/introspection/dist/index.js +5 -9
  70. package/introspection/dist/index.js.map +1 -1
  71. package/introspection/src/attach-atom-index.ts +4 -5
  72. package/introspection/src/attach-selector-index.ts +4 -5
  73. package/introspection/src/attach-timeline-index.ts +6 -3
  74. package/introspection/src/attach-transaction-index.ts +6 -3
  75. package/introspection/src/index.ts +9 -5
  76. package/json/dist/index.cjs +3 -4
  77. package/json/dist/index.cjs.map +1 -1
  78. package/json/dist/index.d.ts +4 -3
  79. package/json/dist/index.js +4 -5
  80. package/json/dist/index.js.map +1 -1
  81. package/json/src/select-json-family.ts +24 -4
  82. package/json/src/select-json.ts +3 -4
  83. package/package.json +2 -2
  84. package/react-devtools/dist/index.cjs.map +1 -1
  85. package/react-devtools/dist/index.d.ts +9 -9
  86. package/react-devtools/dist/index.js.map +1 -1
  87. package/react-devtools/src/StateIndex.tsx +18 -10
  88. package/react-devtools/src/TimelineIndex.tsx +6 -2
  89. package/react-devtools/src/TransactionIndex.tsx +2 -2
  90. package/realtime-client/dist/index.cjs +27 -13
  91. package/realtime-client/dist/index.cjs.map +1 -1
  92. package/realtime-client/dist/index.d.ts +6 -4
  93. package/realtime-client/dist/index.js +20 -7
  94. package/realtime-client/dist/index.js.map +1 -1
  95. package/realtime-client/src/index.ts +4 -3
  96. package/realtime-client/src/server-action.ts +2 -55
  97. package/realtime-client/src/sync-server-action.ts +75 -0
  98. package/realtime-react/dist/index.cjs +22 -13
  99. package/realtime-react/dist/index.cjs.map +1 -1
  100. package/realtime-react/dist/index.d.ts +3 -1
  101. package/realtime-react/dist/index.js +20 -12
  102. package/realtime-react/dist/index.js.map +1 -1
  103. package/realtime-react/src/index.ts +1 -0
  104. package/realtime-react/src/use-server-action.ts +2 -4
  105. package/realtime-react/src/use-sync-server-action.ts +19 -0
  106. package/realtime-server/dist/index.cjs +83 -81
  107. package/realtime-server/dist/index.cjs.map +1 -1
  108. package/realtime-server/dist/index.d.ts +8 -8
  109. package/realtime-server/dist/index.js +58 -56
  110. package/realtime-server/dist/index.js.map +1 -1
  111. package/realtime-server/src/index.ts +15 -1
  112. package/realtime-server/src/{hook-composition/receive-transaction.ts → realtime-action-receiver.ts} +6 -2
  113. package/realtime-server/src/{hook-composition/sync-transaction.ts → realtime-action-synchronizer.ts} +10 -43
  114. package/realtime-server/src/{hook-composition/expose-family.ts → realtime-family-provider.ts} +9 -23
  115. package/realtime-server/src/{hook-composition/expose-mutable-family.ts → realtime-mutable-family-provider.ts} +4 -4
  116. package/realtime-server/src/{hook-composition/expose-mutable.ts → realtime-mutable-provider.ts} +4 -5
  117. package/realtime-server/src/realtime-server-store.ts +39 -0
  118. package/realtime-server/src/{hook-composition/expose-single.ts → realtime-state-provider.ts} +7 -8
  119. package/realtime-server/src/{hook-composition/receive-state.ts → realtime-state-receiver.ts} +7 -4
  120. package/src/atom.ts +39 -24
  121. package/src/find-state.ts +20 -19
  122. package/src/index.ts +41 -28
  123. package/src/logger.ts +1 -0
  124. package/src/selector.ts +31 -16
  125. package/src/silo.ts +45 -6
  126. package/src/subscribe.ts +1 -0
  127. package/src/validators.ts +35 -25
  128. package/internal/src/atom/create-atom.ts +0 -21
  129. package/internal/src/mutable/get-update-family.ts +0 -23
  130. package/internal/src/selector/create-selector.ts +0 -65
  131. package/realtime-server/src/hook-composition/index.ts +0 -15
  132. /package/realtime-client/src/{pull.ts → pull-state.ts} +0 -0
  133. /package/realtime-client/src/{push.ts → push-state.ts} +0 -0
  134. /package/realtime-client/src/{realtime-state.ts → realtime-client-store.ts} +0 -0
@@ -1,11 +1,12 @@
1
- import { FamilyMetadata as FamilyMetadata$1, SelectorOptions, SelectorToken, ReadonlySelectorOptions, ReadonlySelectorToken, Transactors, WritableToken, ƒn as _n, TransactionUpdate, TransactionOptions, TransactionToken, TransactorsWithRunAndEnv, AtomToken, ReadableToken, MutableAtomOptions, MutableAtomToken, MutableAtomFamilyOptions, MutableAtomFamily, SelectorFamily, AtomFamily, TimelineManageable, StateUpdate, TokenType, TimelineUpdate, TimelineOptions, TimelineToken, ReadonlySelectorFamily, AtomIOLogger, Logger, AtomOptions, AtomFamilyOptions, ReadonlySelectorFamilyOptions, SelectorFamilyOptions, KeyedStateUpdate, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
2
- import { Json } from 'atom.io/json';
1
+ import { ƒn as _n, TransactionUpdate, TransactionOptions, TransactionToken, TransactorsWithRunAndEnv, RegularAtomToken, MutableAtomToken, WritableSelectorToken, ReadonlySelectorToken, WritableToken, ReadableToken, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, TimelineUpdate, TimelineOptions, TimelineToken, AtomToken, WritableSelectorFamily, MutableAtomFamily, RegularAtomFamily, ReadonlySelectorFamily, AtomIOLogger, Logger, SelectorToken, MutableAtomOptions, MutableAtomFamilyOptions, AtomFamily, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, KeyedStateUpdate, ReadonlySelectorOptions, WritableSelectorOptions, Transactors, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
2
+ import { Json, JsonInterface } from 'atom.io/json';
3
3
  import { Store as Store$1 } from 'atom.io/internal';
4
4
 
5
- type FamilyMetadata = {
6
- key: string;
7
- subKey: string;
8
- };
5
+ declare const abortTransaction: (store: Store) => void;
6
+
7
+ declare const applyTransaction: <ƒ extends _n>(output: ReturnType<ƒ>, store: Store) => void;
8
+
9
+ declare const buildTransaction: (key: string, params: any[], store: Store, id?: string) => void;
9
10
 
10
11
  declare class Subject<T> {
11
12
  Subscriber: (value: T) => void;
@@ -20,67 +21,6 @@ declare class StatefulSubject<T> extends Subject<T> {
20
21
  next(value: T): void;
21
22
  }
22
23
 
23
- type Selector<T> = {
24
- key: string;
25
- type: `selector`;
26
- family?: FamilyMetadata$1;
27
- install: (store: Store) => void;
28
- subject: Subject<{
29
- newValue: T;
30
- oldValue: T;
31
- }>;
32
- get: () => T;
33
- set: (newValue: T | ((oldValue: T) => T)) => void;
34
- };
35
- type ReadonlySelector<T> = {
36
- key: string;
37
- type: `readonly_selector`;
38
- family?: FamilyMetadata$1;
39
- install: (store: Store) => void;
40
- subject: Subject<{
41
- newValue: T;
42
- oldValue: T;
43
- }>;
44
- get: () => T;
45
- };
46
- declare function createSelector<T>(options: SelectorOptions<T>, family: FamilyMetadata$1 | undefined, store: Store): SelectorToken<T>;
47
- declare function createSelector<T>(options: ReadonlySelectorOptions<T>, family: FamilyMetadata$1 | undefined, store: Store): ReadonlySelectorToken<T>;
48
-
49
- declare function deleteSelector(selectorToken: ReadonlySelectorToken<unknown> | SelectorToken<unknown>, store: Store): void;
50
-
51
- type AtomKey<T> = string & {
52
- __atomKey?: never;
53
- __brand?: T;
54
- };
55
- type SelectorKey<T> = string & {
56
- __selectorKey?: never;
57
- __brand?: T;
58
- };
59
- type ReadonlySelectorKey<T> = string & {
60
- __readonlySelectorKey?: never;
61
- __brand?: T;
62
- };
63
- declare const isAtomKey: (key: string, store: Store) => key is AtomKey<unknown>;
64
- declare const isSelectorKey: (key: string, store: Store) => key is SelectorKey<unknown>;
65
- declare const isReadonlySelectorKey: (key: string, store: Store) => key is ReadonlySelectorKey<unknown>;
66
- type StateKey<T> = AtomKey<T> | ReadonlySelectorKey<T> | SelectorKey<T>;
67
- declare const isStateKey: (key: string, store: Store) => key is StateKey<unknown>;
68
-
69
- declare const getSelectorDependencyKeys: (key: string, store: Store) => (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[];
70
-
71
- declare const registerSelector: (selectorKey: string, store: Store) => Transactors;
72
-
73
- declare const traceSelectorAtoms: (selectorKey: string, directDependencyKey: StateKey<unknown>, store: Store) => AtomKey<unknown>[];
74
- declare const traceAllSelectorAtoms: (selectorKey: string, store: Store) => AtomKey<unknown>[];
75
-
76
- declare const updateSelectorAtoms: (selectorKey: string, dependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>, store: Store) => void;
77
-
78
- declare const abortTransaction: (store: Store) => void;
79
-
80
- declare const applyTransaction: <ƒ extends _n>(output: ReturnType<ƒ>, store: Store) => void;
81
-
82
- declare const buildTransaction: (key: string, params: any[], store: Store, id?: string) => void;
83
-
84
24
  type Transaction<ƒ extends _n> = {
85
25
  key: string;
86
26
  type: `transaction`;
@@ -99,12 +39,13 @@ type TransactionMeta<ƒ extends _n> = {
99
39
  transactors: TransactorsWithRunAndEnv;
100
40
  };
101
41
 
102
- declare function deposit<T>(state: Atom<T>): AtomToken<T>;
103
- declare function deposit<T>(state: Selector<T>): SelectorToken<T>;
104
- declare function deposit<T>(state: Atom<T> | Selector<T>): WritableToken<T>;
42
+ declare function deposit<T>(state: RegularAtom<T>): RegularAtomToken<T>;
43
+ declare function deposit<T extends Transceiver<any>>(state: MutableAtom<T, any>): MutableAtomToken<T, any>;
44
+ declare function deposit<T>(state: WritableSelector<T>): WritableSelectorToken<T>;
105
45
  declare function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>;
46
+ declare function deposit<T>(state: WritableState<T>): WritableToken<T>;
106
47
  declare function deposit<T>(state: Transaction<T extends _n ? T : never>): TransactionToken<T>;
107
- declare function deposit<T>(state: StateNode<T>): ReadableToken<T>;
48
+ declare function deposit<T>(state: ReadableState<T>): ReadableToken<T>;
108
49
 
109
50
  type primitive = boolean | number | string | null;
110
51
 
@@ -185,59 +126,6 @@ interface Lineage {
185
126
  child: typeof this | null;
186
127
  }
187
128
  declare function newest<T extends Lineage>(scion: T): T;
188
- declare function eldest<T extends Lineage>(scion: T): T;
189
-
190
- interface Transceiver<Signal extends Json.Serializable> {
191
- do: (update: Signal) => void;
192
- undo: (update: Signal) => void;
193
- subscribe: (key: string, fn: (update: Signal) => void) => () => void;
194
- cacheUpdateNumber: number;
195
- getUpdateNumber: (update: Signal) => number;
196
- }
197
- declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
198
- type TransceiverMode = `playback` | `record` | `transaction`;
199
- type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<infer Signal> ? Signal : never;
200
-
201
- declare function createMutableAtom<Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(options: MutableAtomOptions<Core, SerializableCore>, family: FamilyMetadata$1 | undefined, store: Store): MutableAtomToken<Core, SerializableCore>;
202
-
203
- declare function createMutableAtomFamily<Core extends Transceiver<any>, SerializableCore extends Json.Serializable, Key extends string>(options: MutableAtomFamilyOptions<Core, SerializableCore, Key>, store: Store): MutableAtomFamily<Core, SerializableCore, Key>;
204
-
205
- declare const getJsonFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamily<Core, SerializableCore, Key>, store: Store) => SelectorFamily<SerializableCore, Key>;
206
-
207
- declare const getJsonToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => SelectorToken<SerializableCore>;
208
-
209
- declare const getUpdateToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => AtomToken<Signal<Core>>;
210
-
211
- declare const getUpdateFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamily<Core, SerializableCore, Key>, store: Store) => AtomFamily<Signal<Core> | null, Key>;
212
-
213
- /**
214
- * @internal Give the tracker a transceiver state and a store, and it will
215
- * subscribe to the transceiver's inner value. When the inner value changes,
216
- * the tracker will update its own state to reflect the change.
217
- */
218
- declare class Tracker<Mutable extends Transceiver<any>> {
219
- private Update;
220
- private initializeState;
221
- private unsubscribeFromInnerValue;
222
- private unsubscribeFromState;
223
- private observeCore;
224
- private updateCore;
225
- mutableState: MutableAtomToken<Mutable, Json.Serializable>;
226
- latestUpdateState: AtomToken<typeof this.Update | null>;
227
- dispose: () => void;
228
- constructor(mutableState: MutableAtomToken<Mutable, Json.Serializable>, store: Store);
229
- }
230
-
231
- declare class FamilyTracker<Core extends Transceiver<any>, FamilyMemberKey extends Json.Serializable> {
232
- private readonly Update;
233
- readonly findLatestUpdateState: AtomFamily<typeof this.Update | null, FamilyMemberKey>;
234
- readonly findMutableState: AtomFamily<Core, FamilyMemberKey>;
235
- constructor(findMutableState: AtomFamily<Core, FamilyMemberKey>, store: Store);
236
- }
237
-
238
- interface MutableAtom<T> extends Atom<T> {
239
- mutable: true;
240
- }
241
129
 
242
130
  type OperationProgress = {
243
131
  open: false;
@@ -257,7 +145,7 @@ type TimelineAtomUpdate<ManagedAtom extends TimelineManageable> = StateUpdate<To
257
145
  key: string;
258
146
  type: `atom_update`;
259
147
  timestamp: number;
260
- family?: FamilyMetadata$1;
148
+ family?: FamilyMetadata;
261
149
  };
262
150
  type TimelineSelectorUpdate<ManagedAtom extends TimelineManageable> = {
263
151
  key: string;
@@ -292,11 +180,11 @@ declare class Store implements Lineage {
292
180
  parent: Store | null;
293
181
  child: Store | null;
294
182
  valueMap: Map<string, any>;
295
- atoms: Map<string, Atom<any> | MutableAtom<any>>;
296
- selectors: Map<string, Selector<any>>;
183
+ atoms: Map<string, Atom<any>>;
184
+ selectors: Map<string, WritableSelector<any>>;
297
185
  readonlySelectors: Map<string, ReadonlySelector<any>>;
298
186
  trackers: Map<string, Tracker<Transceiver<any>>>;
299
- families: Map<string, AtomFamily<any, any> | ReadonlySelectorFamily<any, any> | SelectorFamily<any, any>>;
187
+ families: Map<string, WritableSelectorFamily<any, any> | MutableAtomFamily<any, any, any> | RegularAtomFamily<any, any> | ReadonlySelectorFamily<any, any>>;
300
188
  timelines: Map<string, Timeline<any>>;
301
189
  transactions: Map<string, Transaction<_n>>;
302
190
  atomsThatAreDefault: Set<string>;
@@ -307,7 +195,7 @@ declare class Store implements Lineage {
307
195
  }>;
308
196
  on: {
309
197
  atomCreation: Subject<AtomToken<unknown>>;
310
- selectorCreation: Subject<ReadonlySelectorToken<unknown> | SelectorToken<unknown>>;
198
+ selectorCreation: Subject<ReadonlySelectorToken<unknown> | WritableSelectorToken<unknown>>;
311
199
  transactionCreation: Subject<TransactionToken<_n>>;
312
200
  timelineCreation: Subject<TimelineToken<unknown>>;
313
201
  transactionApplying: StatefulSubject<TransactionMeta<_n> | null>;
@@ -328,44 +216,84 @@ declare const IMPLICIT: {
328
216
  };
329
217
  declare const clearStore: (store: Store) => void;
330
218
 
219
+ type Withdrawable = ReadableState<any> | Timeline<any> | Transaction<any>;
220
+ declare function withdraw<T>(token: RegularAtomToken<T>, store: Store): RegularAtom<T> | undefined;
221
+ declare function withdraw<T extends Transceiver<any>>(token: MutableAtomToken<T, any>, store: Store): MutableAtom<T, any> | undefined;
331
222
  declare function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T> | undefined;
332
- declare function withdraw<T>(token: SelectorToken<T>, store: Store): Selector<T> | undefined;
333
- declare function withdraw<T>(token: WritableToken<T>, store: Store): Atom<T> | Selector<T> | undefined;
223
+ declare function withdraw<T>(token: WritableSelectorToken<T>, store: Store): WritableSelector<T> | undefined;
334
224
  declare function withdraw<T>(token: ReadonlySelectorToken<T>, store: Store): ReadonlySelector<T> | undefined;
225
+ declare function withdraw<T>(token: SelectorToken<T>, store: Store): Selector<T> | undefined;
226
+ declare function withdraw<T>(token: WritableToken<T>, store: Store): WritableState<T> | undefined;
227
+ declare function withdraw<T>(token: ReadableToken<T>, store: Store): ReadableState<T> | undefined;
335
228
  declare function withdraw<T>(token: TransactionToken<T>, store: Store): Transaction<T extends _n ? T : never> | undefined;
336
- declare function withdraw<T>(token: ReadableToken<T>, store: Store): StateNode<T> | undefined;
337
229
  declare function withdraw<T>(token: TimelineToken<T>, store: Store): Timeline<T extends TimelineManageable ? T : never> | undefined;
338
230
 
339
- declare function withdrawNewFamilyMember<T>(token: AtomToken<T>, store: Store): Atom<T> | undefined;
340
- declare function withdrawNewFamilyMember<T>(token: SelectorToken<T>, store: Store): Selector<T> | undefined;
231
+ declare function withdrawNewFamilyMember<T>(token: RegularAtomToken<T>, store: Store): Atom<T> | undefined;
232
+ declare function withdrawNewFamilyMember<T>(token: WritableSelectorToken<T>, store: Store): WritableSelector<T> | undefined;
341
233
  declare function withdrawNewFamilyMember<T>(token: ReadonlySelectorToken<T>, store: Store): ReadonlySelector<T> | undefined;
342
- declare function withdrawNewFamilyMember<T>(token: WritableToken<T>, store: Store): Atom<T> | Selector<T> | undefined;
343
- declare function withdrawNewFamilyMember<T>(token: ReadableToken<T>, store: Store): StateNode<T> | undefined;
234
+ declare function withdrawNewFamilyMember<T>(token: WritableToken<T>, store: Store): WritableState<T> | undefined;
235
+ declare function withdrawNewFamilyMember<T>(token: ReadableToken<T>, store: Store): ReadableState<T> | undefined;
344
236
 
345
- declare function createAtom<T>(options: AtomOptions<T> | MutableAtomOptions<any, any>, family: FamilyMetadata$1 | undefined, store: Store): AtomToken<T>;
237
+ interface Transceiver<Signal extends Json.Serializable> {
238
+ do: (update: Signal) => void;
239
+ undo: (update: Signal) => void;
240
+ subscribe: (key: string, fn: (update: Signal) => void) => () => void;
241
+ cacheUpdateNumber: number;
242
+ getUpdateNumber: (update: Signal) => number;
243
+ }
244
+ declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
245
+ type TransceiverMode = `playback` | `record` | `transaction`;
246
+ type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<infer Signal> ? Signal : never;
247
+
248
+ declare function createMutableAtom<T extends Transceiver<any>, J extends Json.Serializable>(options: MutableAtomOptions<T, J>, family: FamilyMetadata | undefined, store: Store): MutableAtomToken<T, J>;
249
+
250
+ declare function createMutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends string>(options: MutableAtomFamilyOptions<T, J, K>, store: Store): MutableAtomFamily<T, J, K>;
251
+
252
+ declare const getJsonFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamily<Core, SerializableCore, Key>, store: Store) => WritableSelectorFamily<SerializableCore, Key>;
346
253
 
347
- declare function createRegularAtom<T>(options: AtomOptions<T> | MutableAtomOptions<any, any>, family: FamilyMetadata$1 | undefined, store: Store): AtomToken<T>;
254
+ declare const getJsonToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => WritableSelectorToken<SerializableCore>;
348
255
 
349
- declare function deleteAtom(atomToken: AtomToken<unknown>, store: Store): void;
256
+ declare const getUpdateToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => RegularAtomToken<Signal<Core>>;
257
+
258
+ declare function isMutable(atom: Atom<any>): atom is MutableAtom<any, any>;
259
+ declare function isMutable(family: AtomFamily<any, any>): family is MutableAtomFamily<any, any, any>;
260
+
261
+ /**
262
+ * @internal Give the tracker a transceiver state and a store, and it will
263
+ * subscribe to the transceiver's inner value. When the inner value changes,
264
+ * the tracker will update its own state to reflect the change.
265
+ */
266
+ declare class Tracker<Mutable extends Transceiver<any>> {
267
+ private Update;
268
+ private initializeState;
269
+ private unsubscribeFromInnerValue;
270
+ private unsubscribeFromState;
271
+ private observeCore;
272
+ private updateCore;
273
+ mutableState: MutableAtomToken<Mutable, Json.Serializable>;
274
+ latestUpdateState: RegularAtomToken<typeof this.Update | null>;
275
+ dispose: () => void;
276
+ constructor(mutableState: MutableAtomToken<Mutable, Json.Serializable>, store: Store);
277
+ }
278
+
279
+ declare class FamilyTracker<Core extends Transceiver<any>, FamilyMemberKey extends Json.Serializable> {
280
+ private readonly Update;
281
+ readonly findLatestUpdateState: RegularAtomFamily<typeof this.Update | null, FamilyMemberKey>;
282
+ readonly findMutableState: MutableAtomFamily<Core, any, FamilyMemberKey>;
283
+ constructor(findMutableState: MutableAtomFamily<Core, any, FamilyMemberKey>, store: Store);
284
+ }
285
+
286
+ declare function createStandaloneAtom<T>(options: RegularAtomOptions<T>, store: Store): RegularAtomToken<T>;
287
+ declare function createStandaloneAtom<T extends Transceiver<any>, J extends Json.Serializable>(options: MutableAtomOptions<T, J>, store: Store): MutableAtomToken<T, J>;
288
+
289
+ declare function createRegularAtom<T>(options: MutableAtomOptions<any, any> | RegularAtomOptions<T>, family: FamilyMetadata | undefined, store: Store): RegularAtomToken<T>;
290
+
291
+ declare function deleteAtom(atomToken: RegularAtomToken<unknown>, store: Store): void;
350
292
 
351
293
  declare const isAtomDefault: (key: string, store: Store) => boolean;
352
294
  declare const markAtomAsDefault: (key: string, store: Store) => void;
353
295
  declare const markAtomAsNotDefault: (key: string, store: Store) => void;
354
296
 
355
- type Atom<T> = {
356
- key: string;
357
- type: `atom`;
358
- mutable?: boolean;
359
- family?: FamilyMetadata;
360
- install: (store: Store) => void;
361
- subject: Subject<{
362
- newValue: T;
363
- oldValue: T;
364
- }>;
365
- default: T | (() => T);
366
- cleanup?: () => void;
367
- };
368
-
369
297
  /**
370
298
  * A Promise that can be canceled.
371
299
  * @internal
@@ -383,17 +311,17 @@ declare class Future<T> extends Promise<T> {
383
311
 
384
312
  declare function cacheValue<T>(key: string, value: T, subject: Subject<StateUpdate<unknown>>, store: Store): T;
385
313
  declare function cacheValue<T extends Promise<any>>(key: string, value: T, subject: Subject<StateUpdate<unknown>>, store: Store): Future<T>;
386
- declare const readCachedValue: <T>(token: StateNode<any>, target: Store) => T;
314
+ declare const readCachedValue: <T>(token: ReadableState<any>, target: Store) => T;
387
315
  declare const evictCachedValue: (key: string, target: Store) => void;
388
316
 
389
317
  declare function createAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable>(options: MutableAtomFamilyOptions<T, J, K>, store: Store): MutableAtomFamily<T, J, K>;
390
- declare function createAtomFamily<T, K extends Json.Serializable>(options: AtomFamilyOptions<T, K>, store: Store): AtomFamily<T, K>;
318
+ declare function createAtomFamily<T, K extends Json.Serializable>(options: RegularAtomFamilyOptions<T, K>, store: Store): RegularAtomFamily<T, K>;
391
319
 
392
- declare function createRegularAtomFamily<T, K extends Json.Serializable>(options: AtomFamilyOptions<T, K> | MutableAtomFamilyOptions<any, any, K>, store: Store): AtomFamily<T, K>;
320
+ declare function createRegularAtomFamily<T, K extends Json.Serializable>(options: RegularAtomFamilyOptions<T, K>, store: Store): RegularAtomFamily<T, K>;
393
321
 
394
322
  declare function createReadonlySelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store: Store): ReadonlySelectorFamily<T, K>;
395
323
 
396
- declare function createSelectorFamily<T, K extends Json.Serializable>(options: SelectorFamilyOptions<T, K>, store: Store): SelectorFamily<T, K>;
324
+ declare function createSelectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>, store: Store): WritableSelectorFamily<T, K>;
397
325
  declare function createSelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store: Store): ReadonlySelectorFamily<T, K>;
398
326
 
399
327
  type EnvironmentData = {
@@ -408,6 +336,24 @@ declare function ingestSelectorUpdate(applying: `newValue` | `oldValue`, selecto
408
336
 
409
337
  declare function ingestTransactionUpdate(applying: `newValue` | `oldValue`, transactionUpdate: TransactionUpdate<any>, store: Store): void;
410
338
 
339
+ type AtomKey<T> = string & {
340
+ __atomKey?: never;
341
+ __brand?: T;
342
+ };
343
+ type SelectorKey<T> = string & {
344
+ __selectorKey?: never;
345
+ __brand?: T;
346
+ };
347
+ type ReadonlySelectorKey<T> = string & {
348
+ __readonlySelectorKey?: never;
349
+ __brand?: T;
350
+ };
351
+ declare const isAtomKey: (key: string, store: Store) => key is AtomKey<unknown>;
352
+ declare const isSelectorKey: (key: string, store: Store) => key is SelectorKey<unknown>;
353
+ declare const isReadonlySelectorKey: (key: string, store: Store) => key is ReadonlySelectorKey<unknown>;
354
+ type StateKey<T> = AtomKey<T> | ReadonlySelectorKey<T> | SelectorKey<T>;
355
+ declare const isStateKey: (key: string, store: Store) => key is StateKey<unknown>;
356
+
411
357
  declare class LazyMap<K, V> extends Map<K, V> {
412
358
  protected readonly source: Map<K, V>;
413
359
  deleted: Set<K>;
@@ -423,14 +369,32 @@ declare class NotFoundError extends Error {
423
369
  constructor(token: ReadableToken<any>, store: Store);
424
370
  }
425
371
 
426
- declare const readOrComputeValue: <T>(state: StateNode<T>, target: Store) => T;
372
+ declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
373
+
374
+ declare const createReadonlySelector: <T>(options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined, store: Store) => ReadonlySelectorToken<T>;
375
+
376
+ declare function createStandaloneSelector<T>(options: WritableSelectorOptions<T>, store: Store): WritableSelectorToken<T>;
377
+ declare function createStandaloneSelector<T>(options: ReadonlySelectorOptions<T>, store: Store): ReadonlySelectorToken<T>;
378
+
379
+ declare const createWritableSelector: <T>(options: WritableSelectorOptions<T>, family: FamilyMetadata | undefined, store: Store) => WritableSelectorToken<T>;
380
+
381
+ declare function deleteSelector(selectorToken: ReadonlySelectorToken<unknown> | WritableSelectorToken<unknown>, store: Store): void;
382
+
383
+ declare const getSelectorDependencyKeys: (key: string, store: Store) => (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[];
384
+
385
+ declare const registerSelector: (selectorKey: string, store: Store) => Transactors;
386
+
387
+ declare const traceSelectorAtoms: (selectorKey: string, directDependencyKey: StateKey<unknown>, store: Store) => AtomKey<unknown>[];
388
+ declare const traceAllSelectorAtoms: (selector: Selector<any>, store: Store) => AtomKey<unknown>[];
389
+
390
+ declare const updateSelectorAtoms: (selectorKey: string, dependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>, store: Store) => void;
427
391
 
428
392
  type Modify<T> = (thing: T) => T;
429
393
  declare const become: <T>(nextVersionOfThing: T | Modify<T>) => (originalThing: T) => T;
430
394
 
431
- declare const setAtomOrSelector: <T>(state: Atom<T> | Selector<T>, value: T | ((oldValue: T) => T), store: Store) => void;
395
+ declare const setAtomOrSelector: <T>(state: WritableState<T>, value: T | ((oldValue: T) => T), store: Store) => void;
432
396
 
433
- declare const subscribeToRootAtoms: <T>(state: ReadonlySelector<T> | Selector<T>, store: Store) => (() => void)[] | null;
397
+ declare const subscribeToRootAtoms: <T>(selector: Selector<T>, store: Store) => (() => void)[] | null;
434
398
 
435
399
  declare function subscribeToState<T>(token: ReadableToken<T>, handleUpdate: UpdateHandler<T>, key: string, store: Store): () => void;
436
400
 
@@ -438,6 +402,37 @@ declare const subscribeToTimeline: <ManagedAtom extends TimelineManageable>(toke
438
402
 
439
403
  declare const subscribeToTransaction: <ƒ extends _n>(token: TransactionToken<ƒ>, handleUpdate: TransactionUpdateHandler<ƒ>, key: string, store: Store$1) => (() => void);
440
404
 
441
- type StateNode<T> = Atom<T> | ReadonlySelector<T> | Selector<T>;
405
+ type BaseStateData = {
406
+ key: string;
407
+ family?: FamilyMetadata;
408
+ install: (store: Store) => void;
409
+ subject: Subject<{
410
+ newValue: any;
411
+ oldValue: any;
412
+ }>;
413
+ };
414
+ type RegularAtom<T> = BaseStateData & {
415
+ type: `atom`;
416
+ default: T | (() => T);
417
+ cleanup?: () => void;
418
+ };
419
+ type MutableAtom<T extends Transceiver<any>, J extends Json.Serializable> = BaseStateData & JsonInterface<T, J> & {
420
+ type: `mutable_atom`;
421
+ default: T | (() => T);
422
+ cleanup?: () => void;
423
+ };
424
+ type Atom<T> = RegularAtom<T> | (T extends Transceiver<any> ? MutableAtom<T, any> : never);
425
+ type WritableSelector<T> = BaseStateData & {
426
+ type: `selector`;
427
+ get: () => T;
428
+ set: (newValue: T | ((oldValue: T) => T)) => void;
429
+ };
430
+ type ReadonlySelector<T> = BaseStateData & {
431
+ type: `readonly_selector`;
432
+ get: () => T;
433
+ };
434
+ type Selector<T> = ReadonlySelector<T> | WritableSelector<T>;
435
+ type WritableState<T> = Atom<T> | WritableSelector<T>;
436
+ type ReadableState<T> = Atom<T> | Selector<T>;
442
437
 
443
- export { type Atom, type AtomKey, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, type MutableAtom, NotFoundError, type OperationProgress, type ReadonlySelector, type ReadonlySelectorKey, type Selector, type SelectorKey, type Signal, type StateKey, type StateNode, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineSelectorUpdate, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionMeta, type TransactionPhase, type Transceiver, type TransceiverMode, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtom, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelector, createSelectorFamily, createTimeline, createTransaction, deleteAtom, deleteSelector, deposit, eldest, evictCachedValue, getEnvironmentData, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestSelectorUpdate, ingestTransactionUpdate, isAtomDefault, isAtomKey, isDone, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };
438
+ export { type Atom, type AtomKey, type BaseStateData, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineSelectorUpdate, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionMeta, type TransactionPhase, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deleteAtom, deleteSelector, deposit, evictCachedValue, getEnvironmentData, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, ingestAtomUpdate, ingestSelectorUpdate, ingestTransactionUpdate, isAtomDefault, isAtomKey, isDone, isMutable, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };