atom.io 0.27.4 → 0.28.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.d.ts +31 -29
  2. package/data/dist/index.js +65 -81
  3. package/data/src/dict.ts +9 -12
  4. package/data/src/join.ts +30 -33
  5. package/data/src/struct-family.ts +17 -23
  6. package/data/src/struct.ts +9 -12
  7. package/dist/{chunk-JRENM6KL.js → chunk-BX3MTH2Z.js} +482 -385
  8. package/dist/chunk-D52JNVER.js +721 -0
  9. package/dist/chunk-EUVKUTW3.js +89 -0
  10. package/dist/index.d.ts +4 -3
  11. package/dist/index.js +35 -53
  12. package/ephemeral/dist/index.js +1 -1
  13. package/ephemeral/src/find-state.ts +1 -1
  14. package/immortal/dist/index.js +2 -2
  15. package/immortal/src/seek-state.ts +2 -2
  16. package/internal/dist/index.d.ts +141 -87
  17. package/internal/dist/index.js +1 -1
  18. package/internal/src/atom/create-regular-atom.ts +3 -3
  19. package/internal/src/atom/create-standalone-atom.ts +7 -5
  20. package/internal/src/atom/dispose-atom.ts +2 -9
  21. package/internal/src/families/create-atom-family.ts +5 -5
  22. package/internal/src/families/create-readonly-selector-family.ts +20 -9
  23. package/internal/src/families/create-regular-atom-family.ts +15 -6
  24. package/internal/src/families/create-selector-family.ts +5 -5
  25. package/internal/src/families/create-writable-selector-family.ts +20 -10
  26. package/internal/src/families/dispose-from-store.ts +43 -29
  27. package/internal/src/families/find-in-store.ts +28 -18
  28. package/internal/src/families/init-family-member.ts +9 -9
  29. package/internal/src/families/seek-in-store.ts +10 -10
  30. package/internal/src/get-state/get-from-store.ts +70 -47
  31. package/internal/src/ingest-updates/ingest-atom-update.ts +1 -1
  32. package/internal/src/ingest-updates/ingest-creation-disposal.ts +15 -6
  33. package/internal/src/molecule/create-molecule-family.ts +1 -1
  34. package/internal/src/molecule/dispose-molecule.ts +7 -18
  35. package/internal/src/molecule/grow-molecule-in-store.ts +1 -1
  36. package/internal/src/molecule/make-molecule-in-store.ts +5 -5
  37. package/internal/src/mutable/create-mutable-atom-family.ts +15 -6
  38. package/internal/src/mutable/create-mutable-atom.ts +3 -3
  39. package/internal/src/mutable/get-json-token.ts +2 -2
  40. package/internal/src/mutable/tracker-family.ts +3 -3
  41. package/internal/src/mutable/tracker.ts +14 -18
  42. package/internal/src/pretty-print.ts +1 -16
  43. package/internal/src/selector/create-readonly-selector.ts +2 -2
  44. package/internal/src/selector/create-standalone-selector.ts +5 -5
  45. package/internal/src/selector/create-writable-selector.ts +2 -2
  46. package/internal/src/selector/dispose-selector.ts +2 -9
  47. package/internal/src/selector/register-selector.ts +9 -9
  48. package/internal/src/set-state/set-into-store.ts +23 -33
  49. package/internal/src/store/circular-buffer.ts +34 -0
  50. package/internal/src/store/counterfeit.ts +109 -0
  51. package/internal/src/store/deposit.ts +67 -13
  52. package/internal/src/store/index.ts +1 -0
  53. package/internal/src/store/store.ts +4 -1
  54. package/internal/src/store/withdraw.ts +15 -10
  55. package/internal/src/subscribe/index.ts +2 -0
  56. package/internal/src/subscribe/subscribe-in-store.ts +62 -0
  57. package/internal/src/timeline/time-travel.ts +1 -1
  58. package/internal/src/transaction/build-transaction.ts +7 -6
  59. package/introspection/dist/index.d.ts +84 -4
  60. package/introspection/dist/index.js +1 -413
  61. package/introspection/src/attach-atom-index.ts +5 -8
  62. package/introspection/src/attach-introspection-states.ts +7 -4
  63. package/introspection/src/attach-selector-index.ts +6 -8
  64. package/introspection/src/attach-timeline-family.ts +25 -28
  65. package/introspection/src/attach-timeline-index.ts +5 -8
  66. package/introspection/src/attach-transaction-index.ts +5 -8
  67. package/introspection/src/attach-transaction-logs.ts +21 -27
  68. package/introspection/src/attach-type-selectors.ts +26 -0
  69. package/introspection/src/differ.ts +167 -0
  70. package/introspection/src/index.ts +2 -0
  71. package/introspection/src/refinery.ts +100 -0
  72. package/json/dist/index.d.ts +31 -30
  73. package/json/dist/index.js +2 -80
  74. package/json/src/entries.ts +6 -0
  75. package/json/src/index.ts +47 -6
  76. package/json/src/select-json-family.ts +4 -4
  77. package/json/src/select-json.ts +6 -9
  78. package/package.json +17 -8
  79. package/react/dist/index.js +7 -7
  80. package/react/src/parse-state-overloads.ts +2 -2
  81. package/react/src/use-i.ts +1 -1
  82. package/react/src/use-json.ts +2 -2
  83. package/react/src/use-o.ts +2 -2
  84. package/react-devtools/dist/index.d.ts +1 -91
  85. package/react-devtools/dist/index.js +285 -414
  86. package/react-devtools/src/AtomIODevtools.tsx +2 -2
  87. package/react-devtools/src/StateEditor.tsx +20 -12
  88. package/react-devtools/src/StateIndex.tsx +8 -26
  89. package/react-devtools/src/TimelineIndex.tsx +3 -3
  90. package/react-devtools/src/TransactionIndex.tsx +6 -6
  91. package/react-devtools/src/Updates.tsx +1 -4
  92. package/react-devtools/src/index.ts +0 -71
  93. package/react-devtools/src/store.ts +51 -0
  94. package/realtime/dist/index.d.ts +7 -7
  95. package/realtime/dist/index.js +18 -22
  96. package/realtime/src/realtime-continuity.ts +27 -35
  97. package/realtime-client/dist/index.js +59 -65
  98. package/realtime-client/src/pull-atom-family-member.ts +1 -1
  99. package/realtime-client/src/pull-atom.ts +1 -1
  100. package/realtime-client/src/pull-mutable-atom-family-member.ts +3 -3
  101. package/realtime-client/src/pull-mutable-atom.ts +3 -3
  102. package/realtime-client/src/realtime-client-stores/client-main-store.ts +6 -6
  103. package/realtime-client/src/sync-continuity.ts +55 -53
  104. package/realtime-react/dist/index.js +3 -3
  105. package/realtime-react/src/use-pull-atom-family-member.ts +1 -1
  106. package/realtime-react/src/use-pull-mutable-family-member.ts +1 -1
  107. package/realtime-react/src/use-pull-selector-family-member.ts +1 -1
  108. package/realtime-server/dist/index.js +72 -36
  109. package/realtime-server/src/realtime-continuity-synchronizer.ts +57 -93
  110. package/realtime-server/src/realtime-family-provider.ts +3 -3
  111. package/realtime-server/src/realtime-mutable-family-provider.ts +5 -5
  112. package/realtime-server/src/realtime-mutable-provider.ts +2 -2
  113. package/realtime-server/src/realtime-state-provider.ts +1 -1
  114. package/realtime-server/src/realtime-state-receiver.ts +1 -1
  115. package/realtime-testing/dist/index.d.ts +2 -0
  116. package/realtime-testing/dist/index.js +57 -15
  117. package/realtime-testing/src/setup-realtime-test.tsx +66 -16
  118. package/src/atom.ts +2 -2
  119. package/src/dispose-state.ts +2 -2
  120. package/src/get-state.ts +9 -13
  121. package/src/molecule.ts +1 -1
  122. package/src/selector.ts +2 -2
  123. package/src/set-state.ts +10 -7
  124. package/src/silo.ts +29 -55
  125. package/src/subscribe.ts +3 -23
  126. package/src/timeline.ts +2 -2
  127. package/web/dist/index.d.ts +9 -0
  128. package/{dist/chunk-H6EDLPKH.js → web/dist/index.js} +5 -4
  129. package/web/package.json +13 -0
  130. package/web/src/index.ts +1 -0
  131. package/web/src/persist-sync.ts +25 -0
  132. package/dist/chunk-AK23DRMD.js +0 -21
  133. package/dist/chunk-IW6WYRS7.js +0 -140
  134. package/internal/src/families/throw-in-case-of-conflicting-family.ts +0 -18
@@ -1,414 +1,2 @@
1
+ export { Auditor, Differ, Refinery, attachIntrospectionStates, diffArray, diffBoolean, diffNumber, diffObject, diffString, discoverType, jsonRefinery, jsonTreeRefinery, prettyJson, primitiveRefinery } from '../../dist/chunk-D52JNVER.js';
1
2
  import '../../dist/chunk-XWL6SNVU.js';
2
- import * as Internal from 'atom.io/internal';
3
- import { createRegularAtom, deposit, createStandaloneSelector, IMPLICIT, createRegularAtomFamily, Subject, createSelectorFamily } from 'atom.io/internal';
4
- import { getState } from 'atom.io';
5
-
6
- var attachAtomIndex = (store = IMPLICIT.STORE) => {
7
- const atomTokenIndexState__INTERNAL = createRegularAtom(
8
- {
9
- key: `\u{1F441}\u200D\u{1F5E8} Atom Token Index (Internal)`,
10
- default: () => {
11
- const base = /* @__PURE__ */ new Map();
12
- for (const [key, val] of store.atoms) {
13
- if (!key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
14
- const token = deposit(val);
15
- if (val.family) {
16
- let familyNode = base.get(val.family.key);
17
- if (!familyNode || !(`familyMembers` in familyNode)) {
18
- familyNode = {
19
- key: val.family.key,
20
- familyMembers: /* @__PURE__ */ new Map()
21
- };
22
- base.set(val.family.key, familyNode);
23
- }
24
- familyNode.familyMembers.set(val.family.subKey, token);
25
- } else {
26
- base.set(key, token);
27
- }
28
- }
29
- }
30
- return base;
31
- },
32
- effects: [
33
- ({ setSelf }) => {
34
- store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
35
- if (atomToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
36
- return;
37
- }
38
- setSelf((self) => {
39
- if (atomToken.family) {
40
- const { key: familyKey, subKey } = atomToken.family;
41
- let familyNode = self.get(familyKey);
42
- if (familyNode === void 0 || !(`familyMembers` in familyNode)) {
43
- familyNode = {
44
- key: familyKey,
45
- familyMembers: /* @__PURE__ */ new Map()
46
- };
47
- self.set(familyKey, familyNode);
48
- }
49
- familyNode.familyMembers.set(subKey, atomToken);
50
- } else {
51
- self.set(atomToken.key, atomToken);
52
- }
53
- return self;
54
- });
55
- });
56
- store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
57
- setSelf((self) => {
58
- if (atomToken.family) {
59
- const { key: familyKey, subKey } = atomToken.family;
60
- const familyNode = self.get(familyKey);
61
- if (familyNode && `familyMembers` in familyNode) {
62
- familyNode.familyMembers.delete(subKey);
63
- if (familyNode.familyMembers.size === 0) {
64
- self.delete(familyKey);
65
- }
66
- }
67
- } else {
68
- self.delete(atomToken.key);
69
- }
70
- return self;
71
- });
72
- });
73
- }
74
- ]
75
- },
76
- void 0,
77
- store
78
- );
79
- return createStandaloneSelector(
80
- {
81
- key: `\u{1F441}\u200D\u{1F5E8} Atom Token Index`,
82
- get: ({ get }) => get(atomTokenIndexState__INTERNAL)
83
- },
84
- store
85
- );
86
- };
87
- var attachSelectorIndex = (store = IMPLICIT.STORE) => {
88
- const readonlySelectorTokenIndexState__INTERNAL = createRegularAtom(
89
- {
90
- key: `\u{1F441}\u200D\u{1F5E8} Selector Token Index (Internal)`,
91
- default: () => {
92
- const base = /* @__PURE__ */ new Map();
93
- for (const map of [store.readonlySelectors, store.selectors]) {
94
- for (const [key, val] of map) {
95
- if (!key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
96
- const token = deposit(val);
97
- if (val.family) {
98
- let familyNode = base.get(val.family.key);
99
- if (!familyNode || !(`familyMembers` in familyNode)) {
100
- familyNode = {
101
- key: val.family.key,
102
- familyMembers: /* @__PURE__ */ new Map()
103
- };
104
- base.set(val.family.key, familyNode);
105
- }
106
- familyNode.familyMembers.set(val.family.subKey, token);
107
- } else {
108
- base.set(key, token);
109
- }
110
- }
111
- }
112
- }
113
- return base;
114
- },
115
- effects: [
116
- ({ setSelf }) => {
117
- store.on.selectorCreation.subscribe(
118
- `introspection`,
119
- (selectorToken) => {
120
- if (selectorToken.key.includes(`\u{1F441}\u200D\u{1F5E8}`)) {
121
- return;
122
- }
123
- setSelf((self) => {
124
- if (selectorToken.family) {
125
- const { key: familyKey, subKey } = selectorToken.family;
126
- let familyNode = self.get(familyKey);
127
- if (familyNode === void 0 || !(`familyMembers` in familyNode)) {
128
- familyNode = {
129
- key: familyKey,
130
- familyMembers: /* @__PURE__ */ new Map()
131
- };
132
- self.set(familyKey, familyNode);
133
- }
134
- familyNode.familyMembers.set(subKey, selectorToken);
135
- } else {
136
- self.set(selectorToken.key, selectorToken);
137
- }
138
- return self;
139
- });
140
- }
141
- );
142
- store.on.selectorDisposal.subscribe(
143
- `introspection`,
144
- (selectorToken) => {
145
- setSelf((self) => {
146
- if (selectorToken.family) {
147
- const { key: familyKey, subKey } = selectorToken.family;
148
- const familyNode = self.get(familyKey);
149
- if (familyNode && `familyMembers` in familyNode) {
150
- familyNode.familyMembers.delete(subKey);
151
- if (familyNode.familyMembers.size === 0) {
152
- self.delete(familyKey);
153
- }
154
- }
155
- } else {
156
- self.delete(selectorToken.key);
157
- }
158
- return self;
159
- });
160
- }
161
- );
162
- }
163
- ]
164
- },
165
- void 0,
166
- store
167
- );
168
- return createStandaloneSelector(
169
- {
170
- key: `\u{1F441}\u200D\u{1F5E8} Selector Token Index`,
171
- get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL)
172
- },
173
- IMPLICIT.STORE
174
- );
175
- };
176
- var attachTimelineFamily = (store = IMPLICIT.STORE) => {
177
- const findTimelineLogState__INTERNAL = createRegularAtomFamily(
178
- {
179
- key: `\u{1F441}\u200D\u{1F5E8} Timeline Update Log (Internal)`,
180
- default: (key) => store.timelines.get(key) ?? {
181
- type: `timeline`,
182
- key: ``,
183
- at: 0,
184
- timeTraveling: null,
185
- history: [],
186
- selectorTime: null,
187
- transactionKey: null,
188
- install: () => {
189
- },
190
- subject: new Subject(),
191
- subscriptions: /* @__PURE__ */ new Map()
192
- },
193
- effects: (key) => [
194
- ({ setSelf }) => {
195
- const tl = store.timelines.get(key);
196
- tl?.subject.subscribe(`introspection`, (_) => {
197
- setSelf({ ...tl });
198
- });
199
- }
200
- ]
201
- },
202
- store
203
- );
204
- const findTimelineLogState = createSelectorFamily(
205
- {
206
- key: `\u{1F441}\u200D\u{1F5E8} Timeline Update Log`,
207
- get: (key) => ({ get }) => get(findTimelineLogState__INTERNAL, key)
208
- },
209
- store
210
- );
211
- return findTimelineLogState;
212
- };
213
- var attachTimelineIndex = (store = IMPLICIT.STORE) => {
214
- const timelineTokenIndexState__INTERNAL = createRegularAtom(
215
- {
216
- key: `\u{1F441}\u200D\u{1F5E8} Timeline Token Index (Internal)`,
217
- default: () => [...store.timelines].map(([key]) => {
218
- return { key, type: `timeline` };
219
- }),
220
- effects: [
221
- ({ setSelf }) => {
222
- store.on.timelineCreation.subscribe(
223
- `introspection`,
224
- (timelineToken) => {
225
- setSelf((state) => [...state, timelineToken]);
226
- }
227
- );
228
- }
229
- ]
230
- },
231
- void 0,
232
- store
233
- );
234
- const timelineTokenIndex = createStandaloneSelector(
235
- {
236
- key: `\u{1F441}\u200D\u{1F5E8} Timeline Token Index`,
237
- get: ({ get }) => get(timelineTokenIndexState__INTERNAL)
238
- },
239
- store
240
- );
241
- return timelineTokenIndex;
242
- };
243
- var attachTransactionIndex = (store = IMPLICIT.STORE) => {
244
- const transactionTokenIndexState__INTERNAL = createRegularAtom(
245
- {
246
- key: `\u{1F441}\u200D\u{1F5E8} Transaction Token Index (Internal)`,
247
- default: () => [...store.transactions].map(([key]) => {
248
- return { key, type: `transaction` };
249
- }),
250
- effects: [
251
- ({ setSelf }) => {
252
- store.on.transactionCreation.subscribe(
253
- `introspection`,
254
- (transactionToken) => {
255
- setSelf((state) => [...state, transactionToken]);
256
- }
257
- );
258
- }
259
- ]
260
- },
261
- void 0,
262
- store
263
- );
264
- const transactionTokenIndex = createStandaloneSelector(
265
- {
266
- key: `\u{1F441}\u200D\u{1F5E8} Transaction Token Index`,
267
- get: ({ get }) => get(transactionTokenIndexState__INTERNAL)
268
- },
269
- store
270
- );
271
- return transactionTokenIndex;
272
- };
273
- var attachTransactionLogs = (store = IMPLICIT.STORE) => {
274
- const transactionUpdateLogAtoms = createRegularAtomFamily(
275
- {
276
- key: `\u{1F441}\u200D\u{1F5E8} Transaction Update Log (Internal)`,
277
- default: () => [],
278
- effects: (key) => [
279
- ({ setSelf }) => {
280
- const tx = store.transactions.get(key);
281
- tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
282
- if (transactionUpdate.key === key) {
283
- setSelf((state) => [...state, transactionUpdate]);
284
- }
285
- });
286
- }
287
- ]
288
- },
289
- store
290
- );
291
- const findTransactionUpdateLogState = createSelectorFamily(
292
- {
293
- key: `\u{1F441}\u200D\u{1F5E8} Transaction Update Log`,
294
- get: (key) => ({ get }) => get(transactionUpdateLogAtoms, key)
295
- },
296
- store
297
- );
298
- return findTransactionUpdateLogState;
299
- };
300
-
301
- // introspection/src/attach-introspection-states.ts
302
- var attachIntrospectionStates = (store = Internal.IMPLICIT.STORE) => {
303
- return {
304
- atomIndex: attachAtomIndex(store),
305
- selectorIndex: attachSelectorIndex(store),
306
- transactionIndex: attachTransactionIndex(store),
307
- findTransactionLogState: attachTransactionLogs(store),
308
- timelineIndex: attachTimelineIndex(store),
309
- findTimelineState: attachTimelineFamily(store)
310
- };
311
- };
312
- var Auditor = class _Auditor {
313
- /**
314
- * @param {Store} store - The store to audit.
315
- */
316
- constructor(store = Internal.IMPLICIT.STORE) {
317
- this.store = store;
318
- this.atomIndex = attachAtomIndex(this.store);
319
- this.selectorIndex = attachSelectorIndex(this.store);
320
- this.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(
321
- `auditor-${this.auditorCreatedAt}`,
322
- ({ key }) => {
323
- this.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt);
324
- }
325
- );
326
- this.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(
327
- `auditor-${this.auditorCreatedAt}`,
328
- ({ key }) => {
329
- this.statesCreatedAt.delete(key);
330
- }
331
- );
332
- this.unsubscribeFromSelectorCreation = this.store.on.selectorCreation.subscribe(
333
- `auditor-${this.auditorCreatedAt}`,
334
- ({ key }) => {
335
- this.statesCreatedAt.set(
336
- key,
337
- performance.now() - this.auditorCreatedAt
338
- );
339
- }
340
- );
341
- this.unsubscribeFromSelectorDisposal = this.store.on.selectorDisposal.subscribe(
342
- `auditor-${this.auditorCreatedAt}`,
343
- ({ key }) => {
344
- this.statesCreatedAt.delete(key);
345
- }
346
- );
347
- }
348
- auditorCreatedAt = performance.now();
349
- statesCreatedAt = /* @__PURE__ */ new Map();
350
- atomIndex;
351
- selectorIndex;
352
- disposed = false;
353
- unsubscribeFromAtomCreation;
354
- unsubscribeFromAtomDisposal;
355
- unsubscribeFromSelectorCreation;
356
- unsubscribeFromSelectorDisposal;
357
- static DEFAULT_LIST_RESOURCES_PARAM = {
358
- atomFamilies: true,
359
- selectorFamilies: true
360
- };
361
- /**
362
- * Lists all resources in the store, along with their creation time.
363
- *
364
- * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.
365
- * @returns {readonly [ReadableToken<unknown>, number]}[] - An array of tuples, where each tuple contains a state token belonging to a family in the store and that state's creation time.
366
- */
367
- listResources(param = _Auditor.DEFAULT_LIST_RESOURCES_PARAM) {
368
- if (this.disposed) {
369
- throw new Error(`This Auditor has been disposed`);
370
- }
371
- const atoms = getState(this.atomIndex);
372
- const selectors = getState(this.selectorIndex);
373
- const atomFamilyNodes = [...atoms.values()].filter(
374
- (node) => `familyMembers` in node
375
- );
376
- const selectorFamilyNodes = [...selectors.values()].filter(
377
- (node) => `familyMembers` in node
378
- );
379
- const currentTime = performance.now();
380
- const resources = [];
381
- if (param.atomFamilies) {
382
- for (const familyNode of atomFamilyNodes) {
383
- const tokens = familyNode.familyMembers.values();
384
- for (const token of tokens) {
385
- const storedTime = this.statesCreatedAt.get(token.key);
386
- const creationTime = storedTime ?? this.auditorCreatedAt;
387
- const age = currentTime - creationTime;
388
- resources.push([token, age]);
389
- }
390
- }
391
- }
392
- if (param.selectorFamilies) {
393
- for (const familyNode of selectorFamilyNodes) {
394
- const tokens = familyNode.familyMembers.values();
395
- for (const token of tokens) {
396
- const storedTime = this.statesCreatedAt.get(token.key);
397
- const creationTime = storedTime ?? this.auditorCreatedAt;
398
- const age = currentTime - creationTime;
399
- resources.push([token, age]);
400
- }
401
- }
402
- }
403
- return resources;
404
- }
405
- [Symbol.dispose]() {
406
- this.unsubscribeFromAtomCreation();
407
- this.unsubscribeFromAtomDisposal();
408
- this.unsubscribeFromSelectorCreation();
409
- this.unsubscribeFromSelectorDisposal();
410
- this.disposed = true;
411
- }
412
- };
413
-
414
- export { Auditor, attachIntrospectionStates };
@@ -15,6 +15,7 @@ export const attachAtomIndex = (
15
15
  store: Store = IMPLICIT.STORE,
16
16
  ): ReadonlySelectorToken<AtomTokenIndex> => {
17
17
  const atomTokenIndexState__INTERNAL = createRegularAtom<AtomTokenIndex>(
18
+ store,
18
19
  {
19
20
  key: `👁‍🗨 Atom Token Index (Internal)`,
20
21
  default: () => {
@@ -88,13 +89,9 @@ export const attachAtomIndex = (
88
89
  ],
89
90
  },
90
91
  undefined,
91
- store,
92
- )
93
- return createStandaloneSelector(
94
- {
95
- key: `👁‍🗨 Atom Token Index`,
96
- get: ({ get }) => get(atomTokenIndexState__INTERNAL),
97
- },
98
- store,
99
92
  )
93
+ return createStandaloneSelector(store, {
94
+ key: `👁‍🗨 Atom Token Index`,
95
+ get: ({ get }) => get(atomTokenIndexState__INTERNAL),
96
+ })
100
97
  }
@@ -15,6 +15,7 @@ import { attachTimelineFamily } from "./attach-timeline-family"
15
15
  import { attachTimelineIndex } from "./attach-timeline-index"
16
16
  import { attachTransactionIndex } from "./attach-transaction-index"
17
17
  import { attachTransactionLogs } from "./attach-transaction-logs"
18
+ import { attachTypeSelectors } from "./attach-type-selectors"
18
19
 
19
20
  export const attachIntrospectionStates = (
20
21
  store: Internal.Store = Internal.IMPLICIT.STORE,
@@ -22,19 +23,21 @@ export const attachIntrospectionStates = (
22
23
  atomIndex: ReadonlySelectorToken<AtomTokenIndex>
23
24
  selectorIndex: ReadonlySelectorToken<SelectorTokenIndex>
24
25
  transactionIndex: ReadonlySelectorToken<TransactionToken<Func>[]>
25
- findTransactionLogState: ReadonlySelectorFamilyToken<
26
+ transactionLogSelectors: ReadonlySelectorFamilyToken<
26
27
  TransactionUpdate<Func>[],
27
28
  string
28
29
  >
29
30
  timelineIndex: ReadonlySelectorToken<TimelineToken<any>[]>
30
- findTimelineState: ReadonlySelectorFamilyToken<Timeline<any>, string>
31
+ timelineSelectors: ReadonlySelectorFamilyToken<Timeline<any>, string>
32
+ typeSelectors: ReadonlySelectorFamilyToken<string, string>
31
33
  } => {
32
34
  return {
33
35
  atomIndex: attachAtomIndex(store),
34
36
  selectorIndex: attachSelectorIndex(store),
35
37
  transactionIndex: attachTransactionIndex(store),
36
- findTransactionLogState: attachTransactionLogs(store),
38
+ transactionLogSelectors: attachTransactionLogs(store),
37
39
  timelineIndex: attachTimelineIndex(store),
38
- findTimelineState: attachTimelineFamily(store),
40
+ timelineSelectors: attachTimelineFamily(store),
41
+ typeSelectors: attachTypeSelectors(store),
39
42
  }
40
43
  }
@@ -16,6 +16,8 @@ export const attachSelectorIndex = (
16
16
  ): ReadonlySelectorToken<SelectorTokenIndex> => {
17
17
  const readonlySelectorTokenIndexState__INTERNAL =
18
18
  createRegularAtom<SelectorTokenIndex>(
19
+ store,
20
+
19
21
  {
20
22
  key: `👁‍🗨 Selector Token Index (Internal)`,
21
23
  default: () => {
@@ -98,13 +100,9 @@ export const attachSelectorIndex = (
98
100
  ],
99
101
  },
100
102
  undefined,
101
- store,
102
103
  )
103
- return createStandaloneSelector(
104
- {
105
- key: `👁‍🗨 Selector Token Index`,
106
- get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),
107
- },
108
- IMPLICIT.STORE,
109
- )
104
+ return createStandaloneSelector(IMPLICIT.STORE, {
105
+ key: `👁‍🗨 Selector Token Index`,
106
+ get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),
107
+ })
110
108
  }
@@ -13,34 +13,32 @@ export const attachTimelineFamily = (
13
13
  const findTimelineLogState__INTERNAL = createRegularAtomFamily<
14
14
  Timeline<any>,
15
15
  string
16
- >(
17
- {
18
- key: `👁‍🗨 Timeline Update Log (Internal)`,
19
- default: (key) =>
20
- store.timelines.get(key) ?? {
21
- type: `timeline`,
22
- key: ``,
23
- at: 0,
24
- timeTraveling: null,
25
- history: [],
26
- selectorTime: null,
27
- transactionKey: null,
28
- install: () => {},
29
- subject: new Subject(),
30
- subscriptions: new Map(),
31
- },
32
- effects: (key) => [
33
- ({ setSelf }) => {
34
- const tl = store.timelines.get(key)
35
- tl?.subject.subscribe(`introspection`, (_) => {
36
- setSelf({ ...tl })
37
- })
38
- },
39
- ],
40
- },
41
- store,
42
- )
16
+ >(store, {
17
+ key: `👁‍🗨 Timeline Update Log (Internal)`,
18
+ default: (key) =>
19
+ store.timelines.get(key) ?? {
20
+ type: `timeline`,
21
+ key: ``,
22
+ at: 0,
23
+ timeTraveling: null,
24
+ history: [],
25
+ selectorTime: null,
26
+ transactionKey: null,
27
+ install: () => {},
28
+ subject: new Subject(),
29
+ subscriptions: new Map(),
30
+ },
31
+ effects: (key) => [
32
+ ({ setSelf }) => {
33
+ const tl = store.timelines.get(key)
34
+ tl?.subject.subscribe(`introspection`, (_) => {
35
+ setSelf({ ...tl })
36
+ })
37
+ },
38
+ ],
39
+ })
43
40
  const findTimelineLogState = createSelectorFamily<Timeline<any>, string>(
41
+ store,
44
42
  {
45
43
  key: `👁‍🗨 Timeline Update Log`,
46
44
  get:
@@ -48,7 +46,6 @@ export const attachTimelineFamily = (
48
46
  ({ get }) =>
49
47
  get(findTimelineLogState__INTERNAL, key),
50
48
  },
51
- store,
52
49
  )
53
50
  return findTimelineLogState
54
51
  }
@@ -12,6 +12,7 @@ export const attachTimelineIndex = (
12
12
  const timelineTokenIndexState__INTERNAL = createRegularAtom<
13
13
  TimelineToken<any>[]
14
14
  >(
15
+ store,
15
16
  {
16
17
  key: `👁‍🗨 Timeline Token Index (Internal)`,
17
18
  default: () =>
@@ -30,14 +31,10 @@ export const attachTimelineIndex = (
30
31
  ],
31
32
  },
32
33
  undefined,
33
- store,
34
- )
35
- const timelineTokenIndex = createStandaloneSelector(
36
- {
37
- key: `👁‍🗨 Timeline Token Index`,
38
- get: ({ get }) => get(timelineTokenIndexState__INTERNAL),
39
- },
40
- store,
41
34
  )
35
+ const timelineTokenIndex = createStandaloneSelector(store, {
36
+ key: `👁‍🗨 Timeline Token Index`,
37
+ get: ({ get }) => get(timelineTokenIndexState__INTERNAL),
38
+ })
42
39
  return timelineTokenIndex
43
40
  }
@@ -12,6 +12,7 @@ export const attachTransactionIndex = (
12
12
  const transactionTokenIndexState__INTERNAL = createRegularAtom<
13
13
  TransactionToken<Func>[]
14
14
  >(
15
+ store,
15
16
  {
16
17
  key: `👁‍🗨 Transaction Token Index (Internal)`,
17
18
  default: () =>
@@ -30,14 +31,10 @@ export const attachTransactionIndex = (
30
31
  ],
31
32
  },
32
33
  undefined,
33
- store,
34
- )
35
- const transactionTokenIndex = createStandaloneSelector(
36
- {
37
- key: `👁‍🗨 Transaction Token Index`,
38
- get: ({ get }) => get(transactionTokenIndexState__INTERNAL),
39
- },
40
- store,
41
34
  )
35
+ const transactionTokenIndex = createStandaloneSelector(store, {
36
+ key: `👁‍🗨 Transaction Token Index`,
37
+ get: ({ get }) => get(transactionTokenIndexState__INTERNAL),
38
+ })
42
39
  return transactionTokenIndex
43
40
  }
@@ -12,35 +12,29 @@ export const attachTransactionLogs = (
12
12
  const transactionUpdateLogAtoms = createRegularAtomFamily<
13
13
  TransactionUpdate<Func>[],
14
14
  string
15
- >(
16
- {
17
- key: `👁‍🗨 Transaction Update Log (Internal)`,
18
- default: () => [],
19
- effects: (key) => [
20
- ({ setSelf }) => {
21
- const tx = store.transactions.get(key)
22
- tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
23
- if (transactionUpdate.key === key) {
24
- setSelf((state) => [...state, transactionUpdate])
25
- }
26
- })
27
- },
28
- ],
29
- },
30
- store,
31
- )
15
+ >(store, {
16
+ key: `👁‍🗨 Transaction Update Log (Internal)`,
17
+ default: () => [],
18
+ effects: (key) => [
19
+ ({ setSelf }) => {
20
+ const tx = store.transactions.get(key)
21
+ tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
22
+ if (transactionUpdate.key === key) {
23
+ setSelf((state) => [...state, transactionUpdate])
24
+ }
25
+ })
26
+ },
27
+ ],
28
+ })
32
29
  const findTransactionUpdateLogState = createSelectorFamily<
33
30
  TransactionUpdate<Func>[],
34
31
  string
35
- >(
36
- {
37
- key: `👁‍🗨 Transaction Update Log`,
38
- get:
39
- (key) =>
40
- ({ get }) =>
41
- get(transactionUpdateLogAtoms, key),
42
- },
43
- store,
44
- )
32
+ >(store, {
33
+ key: `👁‍🗨 Transaction Update Log`,
34
+ get:
35
+ (key) =>
36
+ ({ get }) =>
37
+ get(transactionUpdateLogAtoms, key),
38
+ })
45
39
  return findTransactionUpdateLogState
46
40
  }