atom.io 0.6.8 → 0.7.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 (214) hide show
  1. package/README.md +21 -2
  2. package/dist/index.d.mts +42 -461
  3. package/dist/index.d.ts +42 -461
  4. package/dist/index.js +128 -1792
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +75 -1742
  7. package/dist/index.mjs.map +1 -1
  8. package/internal/dist/index.d.mts +342 -0
  9. package/internal/dist/index.d.ts +342 -0
  10. package/internal/dist/index.js +1873 -0
  11. package/internal/dist/index.js.map +1 -0
  12. package/internal/dist/index.mjs +1798 -0
  13. package/internal/dist/index.mjs.map +1 -0
  14. package/internal/package.json +15 -0
  15. package/internal/src/atom/create-atom.ts +75 -0
  16. package/internal/src/atom/delete-atom.ts +10 -0
  17. package/internal/src/atom/index.ts +3 -0
  18. package/{src/internal → internal/src/atom}/is-default.ts +4 -2
  19. package/internal/src/caching.ts +21 -0
  20. package/internal/src/families/create-atom-family.ts +59 -0
  21. package/internal/src/families/create-readonly-selector-family.ts +45 -0
  22. package/internal/src/families/create-selector-family.ts +67 -0
  23. package/internal/src/families/index.ts +3 -0
  24. package/internal/src/get-state-internal.ts +23 -0
  25. package/internal/src/index.ts +13 -0
  26. package/internal/src/mutable/create-mutable-atom-family.ts +25 -0
  27. package/internal/src/mutable/create-mutable-atom.ts +49 -0
  28. package/internal/src/mutable/get-json-token.ts +22 -0
  29. package/internal/src/mutable/get-update-token.ts +20 -0
  30. package/internal/src/mutable/index.ts +17 -0
  31. package/internal/src/mutable/is-atom-token-mutable.ts +7 -0
  32. package/internal/src/mutable/tracker-family.ts +61 -0
  33. package/internal/src/mutable/tracker.ts +164 -0
  34. package/internal/src/mutable/transceiver.ts +110 -0
  35. package/internal/src/operation.ts +68 -0
  36. package/{src/internal → internal/src}/selector/create-read-write-selector.ts +10 -13
  37. package/{src/internal → internal/src}/selector/create-readonly-selector.ts +9 -8
  38. package/internal/src/selector/create-selector.ts +65 -0
  39. package/{src/internal → internal/src}/selector/index.ts +1 -0
  40. package/internal/src/selector/lookup-selector-sources.ts +20 -0
  41. package/{src/internal → internal/src}/selector/register-selector.ts +13 -9
  42. package/{src/internal → internal/src}/selector/trace-selector-atoms.ts +4 -2
  43. package/{src/internal → internal/src}/selector/update-selector-atoms.ts +4 -3
  44. package/internal/src/set-state/become.ts +10 -0
  45. package/internal/src/set-state/copy-mutable-if-needed.ts +23 -0
  46. package/internal/src/set-state/copy-mutable-in-transaction.ts +59 -0
  47. package/internal/src/set-state/copy-mutable-into-new-store.ts +34 -0
  48. package/internal/src/set-state/emit-update.ts +23 -0
  49. package/internal/src/set-state/evict-downstream.ts +39 -0
  50. package/internal/src/set-state/index.ts +2 -0
  51. package/internal/src/set-state/set-atom-state.ts +38 -0
  52. package/internal/src/set-state/set-selector-state.ts +19 -0
  53. package/internal/src/set-state/set-state-internal.ts +18 -0
  54. package/internal/src/set-state/stow-update.ts +42 -0
  55. package/internal/src/store/deposit.ts +43 -0
  56. package/internal/src/store/index.ts +5 -0
  57. package/internal/src/store/lookup.ts +26 -0
  58. package/internal/src/store/store.ts +154 -0
  59. package/internal/src/store/withdraw-new-family-member.ts +53 -0
  60. package/internal/src/store/withdraw.ts +113 -0
  61. package/internal/src/subject.ts +21 -0
  62. package/internal/src/subscribe/index.ts +1 -0
  63. package/internal/src/subscribe/recall-state.ts +19 -0
  64. package/internal/src/subscribe/subscribe-to-root-atoms.ts +47 -0
  65. package/{src/internal → internal/src}/timeline/add-atom-to-timeline.ts +50 -29
  66. package/internal/src/timeline/index.ts +3 -0
  67. package/{src/internal → internal/src/timeline}/time-travel-internal.ts +6 -6
  68. package/{src/internal → internal/src/timeline}/timeline-internal.ts +20 -12
  69. package/{src/internal → internal/src}/transaction/abort-transaction.ts +1 -1
  70. package/{src/internal → internal/src}/transaction/apply-transaction.ts +25 -18
  71. package/{src/internal → internal/src}/transaction/build-transaction.ts +12 -6
  72. package/{src/internal → internal/src}/transaction/index.ts +3 -2
  73. package/{src/internal → internal/src}/transaction/redo-transaction.ts +4 -5
  74. package/{src/internal → internal/src/transaction}/transaction-internal.ts +16 -13
  75. package/{src/internal → internal/src}/transaction/undo-transaction.ts +4 -5
  76. package/introspection/dist/index.d.mts +12 -260
  77. package/introspection/dist/index.d.ts +12 -260
  78. package/introspection/dist/index.js +125 -140
  79. package/introspection/dist/index.js.map +1 -1
  80. package/introspection/dist/index.mjs +103 -116
  81. package/introspection/dist/index.mjs.map +1 -1
  82. package/{src/introspection → introspection/src}/attach-atom-index.ts +41 -30
  83. package/{src/introspection → introspection/src}/attach-introspection-states.ts +6 -10
  84. package/introspection/src/attach-selector-index.ts +90 -0
  85. package/{src/introspection → introspection/src}/attach-timeline-family.ts +16 -16
  86. package/introspection/src/attach-timeline-index.ts +38 -0
  87. package/introspection/src/attach-transaction-index.ts +40 -0
  88. package/{src/introspection → introspection/src}/attach-transaction-logs.ts +11 -8
  89. package/json/dist/index.d.mts +41 -2
  90. package/json/dist/index.d.ts +41 -2
  91. package/json/dist/index.js +88 -48
  92. package/json/dist/index.js.map +1 -1
  93. package/json/dist/index.mjs +76 -13
  94. package/json/dist/index.mjs.map +1 -1
  95. package/json/src/index.ts +5 -0
  96. package/json/src/select-json-family.ts +35 -0
  97. package/json/src/select-json.ts +22 -0
  98. package/package.json +105 -57
  99. package/react/dist/index.d.mts +9 -17
  100. package/react/dist/index.d.ts +9 -17
  101. package/react/dist/index.js +45 -77
  102. package/react/dist/index.js.map +1 -1
  103. package/react/dist/index.mjs +18 -34
  104. package/react/dist/index.mjs.map +1 -1
  105. package/react/src/store-context.tsx +12 -0
  106. package/react/src/store-hooks.ts +36 -0
  107. package/react-devtools/dist/index.css +1 -1
  108. package/react-devtools/dist/index.css.map +1 -1
  109. package/react-devtools/dist/index.d.mts +199 -230
  110. package/react-devtools/dist/index.d.ts +199 -230
  111. package/react-devtools/dist/index.js +610 -2466
  112. package/react-devtools/dist/index.js.map +1 -1
  113. package/react-devtools/dist/index.mjs +543 -2401
  114. package/react-devtools/dist/index.mjs.map +1 -1
  115. package/{src/react-devtools → react-devtools/src}/AtomIODevtools.tsx +5 -3
  116. package/{src/react-devtools → react-devtools/src}/Button.tsx +2 -3
  117. package/{src/react-devtools → react-devtools/src}/StateEditor.tsx +3 -2
  118. package/{src/react-devtools → react-devtools/src}/StateIndex.tsx +7 -4
  119. package/{src/react-devtools → react-devtools/src}/TimelineIndex.tsx +7 -11
  120. package/{src/react-devtools → react-devtools/src}/TransactionIndex.tsx +4 -4
  121. package/{src/react-devtools → react-devtools/src}/Updates.tsx +9 -4
  122. package/{src/react-devtools → react-devtools/src}/index.ts +5 -5
  123. package/realtime-react/dist/index.d.mts +9 -25
  124. package/realtime-react/dist/index.d.ts +9 -25
  125. package/realtime-react/dist/index.js +75 -193
  126. package/realtime-react/dist/index.js.map +1 -1
  127. package/realtime-react/dist/index.mjs +44 -148
  128. package/realtime-react/dist/index.mjs.map +1 -1
  129. package/realtime-react/src/index.ts +7 -0
  130. package/{src/realtime-react → realtime-react/src}/realtime-context.tsx +3 -4
  131. package/realtime-react/src/use-pull-family-member.ts +15 -0
  132. package/realtime-react/src/use-pull-mutable-family-member.ts +20 -0
  133. package/realtime-react/src/use-pull-mutable.ts +17 -0
  134. package/realtime-react/src/use-pull.ts +15 -0
  135. package/realtime-react/src/use-push.ts +19 -0
  136. package/realtime-react/src/use-server-action.ts +18 -0
  137. package/realtime-testing/dist/index.d.mts +49 -0
  138. package/realtime-testing/dist/index.d.ts +49 -0
  139. package/realtime-testing/dist/index.js +147 -0
  140. package/realtime-testing/dist/index.js.map +1 -0
  141. package/realtime-testing/dist/index.mjs +116 -0
  142. package/realtime-testing/dist/index.mjs.map +1 -0
  143. package/{src/realtime-testing → realtime-testing/src}/setup-realtime-test.tsx +10 -8
  144. package/src/atom.ts +64 -8
  145. package/src/index.ts +36 -29
  146. package/src/logger.ts +7 -7
  147. package/src/selector.ts +5 -5
  148. package/src/silo.ts +49 -43
  149. package/src/subscribe.ts +27 -22
  150. package/src/timeline.ts +9 -4
  151. package/src/transaction.ts +3 -4
  152. package/transceivers/set-rtx/dist/index.d.mts +39 -0
  153. package/transceivers/set-rtx/dist/index.d.ts +39 -0
  154. package/transceivers/set-rtx/dist/index.js +213 -0
  155. package/transceivers/set-rtx/dist/index.js.map +1 -0
  156. package/transceivers/set-rtx/dist/index.mjs +211 -0
  157. package/transceivers/set-rtx/dist/index.mjs.map +1 -0
  158. package/{realtime → transceivers/set-rtx}/package.json +1 -1
  159. package/transceivers/set-rtx/src/index.ts +1 -0
  160. package/transceivers/set-rtx/src/set-rtx.ts +242 -0
  161. package/realtime/dist/index.d.mts +0 -25
  162. package/realtime/dist/index.d.ts +0 -25
  163. package/realtime/dist/index.js +0 -190
  164. package/realtime/dist/index.js.map +0 -1
  165. package/realtime/dist/index.mjs +0 -151
  166. package/realtime/dist/index.mjs.map +0 -1
  167. package/src/internal/atom-internal.ts +0 -54
  168. package/src/internal/families-internal.ts +0 -144
  169. package/src/internal/get.ts +0 -129
  170. package/src/internal/index.ts +0 -15
  171. package/src/internal/operation.ts +0 -139
  172. package/src/internal/selector/lookup-selector-sources.ts +0 -16
  173. package/src/internal/selector-internal.ts +0 -58
  174. package/src/internal/set.ts +0 -99
  175. package/src/internal/store.ts +0 -151
  176. package/src/internal/subscribe-internal.ts +0 -88
  177. package/src/internal/timeline/index.ts +0 -1
  178. package/src/introspection/attach-selector-index.ts +0 -77
  179. package/src/introspection/attach-timeline-index.ts +0 -36
  180. package/src/introspection/attach-transaction-index.ts +0 -38
  181. package/src/json/index.ts +0 -1
  182. package/src/json/select-json.ts +0 -18
  183. package/src/react/store-context.tsx +0 -13
  184. package/src/react/store-hooks.ts +0 -47
  185. package/src/react-explorer/AtomIOExplorer.tsx +0 -218
  186. package/src/react-explorer/explorer-effects.ts +0 -20
  187. package/src/react-explorer/explorer-states.ts +0 -217
  188. package/src/react-explorer/index.ts +0 -23
  189. package/src/react-explorer/space-states.ts +0 -72
  190. package/src/react-explorer/view-states.ts +0 -41
  191. package/src/realtime/README.md +0 -33
  192. package/src/realtime/hook-composition/expose-family.ts +0 -101
  193. package/src/realtime/hook-composition/expose-single.ts +0 -38
  194. package/src/realtime/hook-composition/expose-timeline.ts +0 -60
  195. package/src/realtime/hook-composition/index.ts +0 -12
  196. package/src/realtime/hook-composition/receive-state.ts +0 -29
  197. package/src/realtime/hook-composition/receive-transaction.ts +0 -18
  198. package/src/realtime/index.ts +0 -1
  199. package/src/realtime-react/index.ts +0 -3
  200. package/src/realtime-react/realtime-hooks.ts +0 -39
  201. package/src/realtime-react/realtime-state.ts +0 -10
  202. package/src/realtime-react/use-pull-family-member.ts +0 -26
  203. package/src/realtime-react/use-pull-family.ts +0 -24
  204. package/src/realtime-react/use-pull.ts +0 -24
  205. package/src/realtime-react/use-push.ts +0 -27
  206. package/src/realtime-react/use-server-action.ts +0 -33
  207. package/src/tracker/index.ts +0 -3
  208. package/src/tracker/tracker.ts +0 -61
  209. package/src/web-effects/index.ts +0 -1
  210. package/src/web-effects/storage.ts +0 -30
  211. /package/{src/introspection → introspection/src}/index.ts +0 -0
  212. /package/{src/react → react/src}/index.ts +0 -0
  213. /package/{src/react-devtools → react-devtools/src}/devtools.scss +0 -0
  214. /package/{src/realtime-testing → realtime-testing/src}/index.ts +0 -0
@@ -0,0 +1,342 @@
1
+ import * as AtomIO from 'atom.io';
2
+ import { AtomToken, ReadonlySelectorToken, SelectorToken, Transactors, FamilyMetadata, SelectorOptions, ReadonlySelectorOptions, StateToken, ƒn, TransactionUpdate, TransactionOptions, TransactionToken, MutableAtomToken, StateUpdate, TimelineUpdate, TimelineOptions, TimelineToken, AtomFamily, ReadonlySelectorFamily, SelectorFamily, Logger, AtomOptions, MutableAtomOptions, AtomFamilyOptions, ReadonlySelectorFamilyOptions, SelectorFamilyOptions } from 'atom.io';
3
+ import { Json } from 'atom.io/json';
4
+
5
+ declare const lookupSelectorSources: (key: string, store: Store) => (AtomToken<unknown> | ReadonlySelectorToken<unknown> | SelectorToken<unknown>)[];
6
+
7
+ declare const registerSelector: (selectorKey: string, store?: Store) => Transactors;
8
+
9
+ declare class Subject<T> {
10
+ Subscriber: (value: T) => void;
11
+ subscribers: Map<string, this[`Subscriber`]>;
12
+ subscribe(key: string, subscriber: this[`Subscriber`]): () => void;
13
+ private unsubscribe;
14
+ next(value: T): void;
15
+ }
16
+
17
+ type Selector<T> = {
18
+ key: string;
19
+ type: `selector`;
20
+ family?: FamilyMetadata;
21
+ install: (store: Store) => void;
22
+ subject: Subject<{
23
+ newValue: T;
24
+ oldValue: T;
25
+ }>;
26
+ get: () => T;
27
+ set: (newValue: T | ((oldValue: T) => T)) => void;
28
+ };
29
+ type ReadonlySelector<T> = {
30
+ key: string;
31
+ type: `readonly_selector`;
32
+ family?: FamilyMetadata;
33
+ install: (store: Store) => void;
34
+ subject: Subject<{
35
+ newValue: T;
36
+ oldValue: T;
37
+ }>;
38
+ get: () => T;
39
+ };
40
+ declare function createSelector<T>(options: SelectorOptions<T>, family?: FamilyMetadata, store?: Store): SelectorToken<T>;
41
+ declare function createSelector<T>(options: ReadonlySelectorOptions<T>, family?: FamilyMetadata, store?: Store): ReadonlySelectorToken<T>;
42
+
43
+ declare const traceSelectorAtoms: (selectorKey: string, dependency: ReadonlySelectorToken<unknown> | StateToken<unknown>, store: Store) => AtomToken<unknown>[];
44
+ declare const traceAllSelectorAtoms: (selectorKey: string, store: Store) => AtomToken<unknown>[];
45
+
46
+ declare const updateSelectorAtoms: (selectorKey: string, dependency: ReadonlySelectorToken<unknown> | StateToken<unknown>, store: Store) => void;
47
+
48
+ type Transaction<ƒ extends ƒn> = {
49
+ key: string;
50
+ type: `transaction`;
51
+ install: (store: Store) => void;
52
+ subject: Subject<TransactionUpdate<ƒ>>;
53
+ run: (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
54
+ };
55
+ declare function transaction__INTERNAL<ƒ extends ƒn>(options: TransactionOptions<ƒ>, store?: Store): TransactionToken<ƒ>;
56
+ declare const target: (store?: Store) => StoreCore;
57
+
58
+ declare const abortTransaction: (store: Store) => void;
59
+
60
+ declare const applyTransaction: <ƒ extends ƒn>(output: ReturnType<ƒ>, store: Store) => void;
61
+
62
+ declare const buildTransaction: (key: string, params: any[], store: Store) => void;
63
+
64
+ declare const redoTransactionUpdate: <ƒ extends ƒn>(update: TransactionUpdate<ƒ>, store: Store) => void;
65
+
66
+ declare const undoTransactionUpdate: <ƒ extends ƒn>(update: TransactionUpdate<ƒ>, store: Store) => void;
67
+
68
+ declare const TRANSACTION_PHASES: readonly ["idle", "building", "applying"];
69
+ type TransactionPhase = typeof TRANSACTION_PHASES[number];
70
+ type TransactionUpdateInProgress<ƒ extends ƒn> = TransactionUpdate<ƒ> & {
71
+ phase: `applying` | `building`;
72
+ time: number;
73
+ core: StoreCore;
74
+ };
75
+ type TransactionIdle = {
76
+ phase: `idle`;
77
+ };
78
+ type TransactionStatus<ƒ extends ƒn> = TransactionIdle | TransactionUpdateInProgress<ƒ>;
79
+
80
+ declare function deposit<T>(state: Atom<T>): AtomToken<T>;
81
+ declare function deposit<T>(state: Selector<T>): SelectorToken<T>;
82
+ declare function deposit<T>(state: Atom<T> | Selector<T>): StateToken<T>;
83
+ declare function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>;
84
+ declare function deposit<T>(state: Transaction<T extends ƒn ? T : never>): TransactionToken<T>;
85
+ declare function deposit<T>(state: Atom<T> | ReadonlySelector<T> | Selector<T>): ReadonlySelectorToken<T> | StateToken<T>;
86
+
87
+ type primitive = boolean | number | string | null;
88
+
89
+ type Serializable = primitive | Readonly<{
90
+ [key: string]: Serializable;
91
+ }> | ReadonlyArray<Serializable>;
92
+ type Object$1<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
93
+
94
+ type Refinement<Unrefined, Refined extends Unrefined> = (value: Unrefined) => value is Refined;
95
+ type Cardinality = `1:1` | `1:n` | `n:n`;
96
+
97
+ interface JunctionEntries<Content extends Object$1 | null> extends Object$1 {
98
+ readonly relations: [string, string[]][];
99
+ readonly contents: [string, Content][];
100
+ }
101
+ interface JunctionSchema<ASide extends string, BSide extends string> extends Object$1 {
102
+ readonly between: [a: ASide, b: BSide];
103
+ readonly cardinality: Cardinality;
104
+ }
105
+ type JunctionAdvancedConfiguration<Content extends Object$1 | null> = {
106
+ externalStore?: (Content extends null ? {
107
+ getContent?: undefined;
108
+ setContent?: undefined;
109
+ deleteContent?: undefined;
110
+ } : {
111
+ getContent: (contentKey: string) => Content | undefined;
112
+ setContent: (contentKey: string, content: Content) => void;
113
+ deleteContent: (contentKey: string) => void;
114
+ }) & {
115
+ addRelation: (a: string, b: string) => void;
116
+ deleteRelation: (a: string, b: string) => void;
117
+ getRelatedKeys: (key: string) => Set<string> | undefined;
118
+ has: (a: string, b?: string) => boolean;
119
+ };
120
+ isContent?: Refinement<unknown, Content>;
121
+ makeContentKey?: (a: string, b: string) => string;
122
+ };
123
+ type JunctionJSON<ASide extends string, BSide extends string, Content extends Object$1 | null> = JunctionEntries<Content> & JunctionSchema<ASide, BSide>;
124
+ declare class Junction<ASide extends string, BSide extends string, Content extends Object$1 | null = null> {
125
+ readonly a: ASide;
126
+ readonly b: BSide;
127
+ readonly cardinality: Cardinality;
128
+ readonly relations: Map<string, Set<string>>;
129
+ readonly contents: Map<string, Content>;
130
+ isContent: Refinement<unknown, Content> | null;
131
+ makeContentKey: (a: string, b: string) => string;
132
+ getRelatedKeys(key: string): Set<string> | undefined;
133
+ protected addRelation(a: string, b: string): void;
134
+ protected deleteRelation(a: string, b: string): void;
135
+ protected getContentInternal(contentKey: string): Content | undefined;
136
+ protected setContent(contentKey: string, content: Content): void;
137
+ protected deleteContent(contentKey: string): void;
138
+ constructor(data: JunctionSchema<ASide, BSide> & Partial<JunctionEntries<Content>>, config?: JunctionAdvancedConfiguration<Content>);
139
+ toJSON(): JunctionJSON<ASide, BSide, Content>;
140
+ set(a: string, ...rest: Content extends null ? [b: string] : [b: string, content: Content]): this;
141
+ set(relation: {
142
+ [Key in ASide | BSide]: string;
143
+ }, ...rest: Content extends null ? [] | [b?: undefined] : [content: Content]): this;
144
+ delete(a: string, b?: string): this;
145
+ delete(relation: Record<ASide | BSide, string> | Record<ASide, string> | Record<BSide, string>, b?: undefined): this;
146
+ getRelatedKey(key: string): string | undefined;
147
+ getContent(a: string, b: string): Content | undefined;
148
+ getRelationEntries(input: Record<ASide, string> | Record<BSide, string>): [string, Content][];
149
+ has(a: string, b?: string): boolean;
150
+ }
151
+
152
+ interface Transceiver<Signal extends Json.Serializable> {
153
+ do: (update: Signal) => void;
154
+ undo: (update: Signal) => void;
155
+ subscribe: (key: string, fn: (update: Signal) => void) => () => void;
156
+ }
157
+ declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
158
+ type TransceiverMode = `playback` | `record` | `transaction`;
159
+ type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<infer Signal> ? Signal : never;
160
+
161
+ declare function createMutableAtom<Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(options: AtomIO.MutableAtomOptions<Core, SerializableCore>, store?: Store): AtomIO.MutableAtomToken<Core, SerializableCore>;
162
+
163
+ declare function createMutableAtomFamily<Core extends Transceiver<any>, SerializableCore extends Json.Serializable, Key extends string>(options: AtomIO.MutableAtomFamilyOptions<Core, SerializableCore, Key>, store?: Store): AtomIO.MutableAtomFamily<Core, SerializableCore, Key>;
164
+
165
+ declare const getJsonToken: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => SelectorToken<SerializableCore>;
166
+
167
+ declare const getUpdateToken: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => AtomToken<Signal<Core>>;
168
+
169
+ declare function isAtomTokenMutable(token: AtomIO.AtomToken<any>): token is AtomIO.MutableAtomToken<any, any>;
170
+
171
+ /**
172
+ * @internal Give the tracker a transceiver state and a store, and it will
173
+ * subscribe to the transceiver's inner value. When the inner value changes,
174
+ * the tracker will update its own state to reflect the change.
175
+ */
176
+ declare class Tracker<Mutable extends Transceiver<any>> {
177
+ private Update;
178
+ private initializeState;
179
+ private unsubscribeFromInnerValue;
180
+ private observeCore;
181
+ private updateCore;
182
+ mutableState: AtomIO.MutableAtomToken<Mutable, Json.Serializable>;
183
+ latestUpdateState: AtomIO.AtomToken<typeof this$1.Update | null>;
184
+ constructor(mutableState: AtomIO.MutableAtomToken<Mutable, Json.Serializable>, store?: Store);
185
+ }
186
+
187
+ declare class FamilyTracker<Core extends Transceiver<any>, FamilyMemberKey extends Json.Serializable> {
188
+ private readonly Update;
189
+ readonly findLatestUpdateState: AtomIO.AtomFamily<typeof this$1.Update | null, FamilyMemberKey>;
190
+ readonly findMutableState: AtomIO.AtomFamily<Core, FamilyMemberKey>;
191
+ constructor(findMutableState: AtomIO.AtomFamily<Core, FamilyMemberKey>, store?: Store);
192
+ }
193
+
194
+ interface MutableAtom<T> extends Atom<T> {
195
+ mutable: true;
196
+ }
197
+ declare const isAtomMutable: <T>(atom: Atom<T>) => atom is MutableAtom<T>;
198
+
199
+ type OperationProgress = {
200
+ open: false;
201
+ } | {
202
+ open: true;
203
+ done: Set<string>;
204
+ prev: Map<string, any>;
205
+ time: number;
206
+ token: StateToken<any>;
207
+ };
208
+ declare const openOperation: (token: StateToken<any>, store: Store) => void;
209
+ declare const closeOperation: (store: Store) => void;
210
+ declare const isDone: (key: string, store?: Store) => boolean;
211
+ declare const markDone: (key: string, store?: Store) => void;
212
+
213
+ type TimelineAtomUpdate = StateUpdate<unknown> & {
214
+ key: string;
215
+ type: `atom_update`;
216
+ timestamp: number;
217
+ family?: FamilyMetadata;
218
+ };
219
+ type TimelineSelectorUpdate = {
220
+ key: string;
221
+ type: `selector_update`;
222
+ timestamp: number;
223
+ atomUpdates: Omit<TimelineAtomUpdate, `timestamp`>[];
224
+ };
225
+ type TimelineTransactionUpdate = TransactionUpdate<ƒn> & {
226
+ key: string;
227
+ type: `transaction_update`;
228
+ timestamp: number;
229
+ };
230
+ type Timeline = {
231
+ type: `timeline`;
232
+ key: string;
233
+ at: number;
234
+ timeTraveling: `into_future` | `into_past` | null;
235
+ history: TimelineUpdate[];
236
+ selectorTime: number | null;
237
+ transactionKey: string | null;
238
+ install: (store: Store) => void;
239
+ subject: Subject<TimelineAtomUpdate | TimelineSelectorUpdate | TimelineTransactionUpdate | `redo` | `undo`>;
240
+ };
241
+ declare function timeline__INTERNAL(options: TimelineOptions, store?: Store, data?: Timeline | null): TimelineToken;
242
+
243
+ declare const addAtomToTimeline: (atomToken: AtomToken<any>, tl: Timeline, store?: Store) => void;
244
+
245
+ declare const redo__INTERNAL: (token: TimelineToken, store?: Store) => void;
246
+ declare const undo__INTERNAL: (token: TimelineToken, store?: Store) => void;
247
+
248
+ type StoreCore = Pick<Store, `atoms` | `atomsThatAreDefault` | `families` | `operation` | `readonlySelectors` | `selectorAtoms` | `selectorGraph` | `selectors` | `timelineAtoms` | `timelines` | `trackers` | `transactions` | `valueMap`>;
249
+ declare class Store {
250
+ valueMap: Map<string, any>;
251
+ atoms: Map<string, Atom<any> | MutableAtom<any>>;
252
+ selectors: Map<string, Selector<any>>;
253
+ readonlySelectors: Map<string, ReadonlySelector<any>>;
254
+ trackers: Map<string, Tracker<Transceiver<any>>>;
255
+ families: Map<string, AtomFamily<any, any> | ReadonlySelectorFamily<any, any> | SelectorFamily<any, any>>;
256
+ timelines: Map<string, Timeline>;
257
+ transactions: Map<string, Transaction<ƒn>>;
258
+ atomsThatAreDefault: Set<string>;
259
+ timelineAtoms: Junction<"timelineKey", "atomKey", null>;
260
+ selectorAtoms: Junction<"selectorKey", "atomKey", null>;
261
+ selectorGraph: Junction<"upstreamSelectorKey", "downstreamSelectorKey", {
262
+ source: string;
263
+ }>;
264
+ subject: {
265
+ atomCreation: Subject<AtomToken<unknown>>;
266
+ selectorCreation: Subject<SelectorToken<unknown> | ReadonlySelectorToken<unknown>>;
267
+ transactionCreation: Subject<TransactionToken<ƒn>>;
268
+ timelineCreation: Subject<TimelineToken>;
269
+ operationStatus: Subject<OperationProgress>;
270
+ };
271
+ operation: OperationProgress;
272
+ transactionStatus: TransactionStatus<ƒn>;
273
+ config: {
274
+ name: string;
275
+ logger: Logger | null;
276
+ logger__INTERNAL: Logger;
277
+ };
278
+ constructor(name: string, store?: Store | null);
279
+ }
280
+ declare const IMPLICIT: {
281
+ STORE_INTERNAL: Store | undefined;
282
+ readonly STORE: Store;
283
+ };
284
+ declare const clearStore: (store?: Store) => void;
285
+
286
+ declare function lookup(key: string, store: Store): AtomToken<unknown> | ReadonlySelectorToken<unknown> | SelectorToken<unknown>;
287
+
288
+ declare function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T> | null;
289
+ declare function withdraw<T>(token: SelectorToken<T>, store: Store): Selector<T> | null;
290
+ declare function withdraw<T>(token: StateToken<T>, store: Store): Atom<T> | Selector<T> | null;
291
+ declare function withdraw<T>(token: ReadonlySelectorToken<T>, store: Store): ReadonlySelector<T> | null;
292
+ declare function withdraw<T>(token: TransactionToken<T>, store: Store): Transaction<T extends ƒn ? T : never> | null;
293
+ declare function withdraw<T>(token: ReadonlySelectorToken<T> | StateToken<T>, store: Store): Atom<T> | ReadonlySelector<T> | Selector<T> | null;
294
+ declare function withdraw<T>(token: TimelineToken, store: Store): Timeline | null;
295
+
296
+ declare function withdrawNewFamilyMember<T>(token: AtomToken<T>, store: Store): Atom<T> | null;
297
+ declare function withdrawNewFamilyMember<T>(token: SelectorToken<T>, store: Store): Selector<T> | null;
298
+ declare function withdrawNewFamilyMember<T>(token: ReadonlySelectorToken<T>, store: Store): ReadonlySelector<T> | null;
299
+ declare function withdrawNewFamilyMember<T>(token: StateToken<T>, store: Store): Atom<T> | Selector<T> | null;
300
+ declare function withdrawNewFamilyMember<T>(token: ReadonlySelectorToken<T> | StateToken<T>, store: Store): Atom<T> | ReadonlySelector<T> | Selector<T> | null;
301
+
302
+ type Atom<T> = {
303
+ key: string;
304
+ type: `atom`;
305
+ family?: FamilyMetadata;
306
+ install: (store: Store) => void;
307
+ subject: Subject<{
308
+ newValue: T;
309
+ oldValue: T;
310
+ }>;
311
+ default: T;
312
+ };
313
+ declare function createAtom<T>(options: AtomOptions<T> | MutableAtomOptions<any, any>, family?: FamilyMetadata, store?: Store): AtomToken<T>;
314
+
315
+ declare function deleteAtom(key: string, core?: StoreCore): void;
316
+
317
+ declare const isAtomDefault: (key: string, store?: Store) => boolean;
318
+ declare const markAtomAsDefault: (key: string, store?: Store) => void;
319
+ declare const markAtomAsNotDefault: (key: string, store?: Store) => void;
320
+ declare const isSelectorDefault: (key: string, store?: Store) => boolean;
321
+
322
+ declare const cacheValue: (key: string, value: unknown, store?: Store) => void;
323
+ declare const readCachedValue: <T>(key: string, store?: Store) => T;
324
+ declare const isValueCached: (key: string, store?: Store) => boolean;
325
+
326
+ declare function createAtomFamily<T, K extends Json.Serializable>(options: AtomFamilyOptions<T, K>, store?: Store): AtomFamily<T, K>;
327
+
328
+ declare function createReadonlySelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store?: Store): ReadonlySelectorFamily<T, K>;
329
+
330
+ declare function createSelectorFamily<T, K extends Json.Serializable>(options: SelectorFamilyOptions<T, K>, store?: Store): SelectorFamily<T, K>;
331
+ declare function createSelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store?: Store): ReadonlySelectorFamily<T, K>;
332
+
333
+ declare const getState__INTERNAL: <T>(state: Atom<T> | ReadonlySelector<T> | Selector<T>, store?: Store) => T;
334
+
335
+ type Modify<T> = (thing: T) => T;
336
+ declare const become: <T>(nextVersionOfThing: T | Modify<T>) => (originalThing: T) => T;
337
+
338
+ declare const setState__INTERNAL: <T>(state: Atom<T> | Selector<T>, value: T | ((oldValue: T) => T), store?: Store) => void;
339
+
340
+ declare const subscribeToRootAtoms: <T>(state: ReadonlySelector<T> | Selector<T>, store: Store) => (() => void)[] | null;
341
+
342
+ export { Atom, FamilyTracker, IMPLICIT, Modify, MutableAtom, OperationProgress, ReadonlySelector, Selector, Signal, Store, StoreCore, Subject, TRANSACTION_PHASES, Timeline, TimelineAtomUpdate, TimelineSelectorUpdate, TimelineTransactionUpdate, Tracker, Transaction, TransactionIdle, TransactionPhase, TransactionStatus, TransactionUpdateInProgress, Transceiver, TransceiverMode, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtom, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelectorFamily, createSelector, createSelectorFamily, deleteAtom, deposit, getJsonToken, getState__INTERNAL, getUpdateToken, isAtomDefault, isAtomMutable, isAtomTokenMutable, isDone, isSelectorDefault, isTransceiver, isValueCached, lookup, lookupSelectorSources, markAtomAsDefault, markAtomAsNotDefault, markDone, openOperation, readCachedValue, redoTransactionUpdate, redo__INTERNAL, registerSelector, setState__INTERNAL, subscribeToRootAtoms, target, timeline__INTERNAL, traceAllSelectorAtoms, traceSelectorAtoms, transaction__INTERNAL, undoTransactionUpdate, undo__INTERNAL, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };