atom.io 0.31.1 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/data/dist/index.d.ts +3 -154
  2. package/data/dist/index.js +11 -559
  3. package/data/src/index.ts +0 -2
  4. package/data/src/struct-family.ts +1 -1
  5. package/data/src/struct.ts +1 -2
  6. package/dist/chunk-3PQTWLQQ.js +83 -0
  7. package/dist/chunk-3ZFTRSNG.js +523 -0
  8. package/dist/chunk-4LWKCEW3.js +14 -0
  9. package/dist/chunk-KVI5OBF2.js +153 -0
  10. package/dist/{chunk-Y5MBNTVU.js → chunk-UQEYZ3OI.js} +1814 -721
  11. package/dist/chunk-UYYKOGZQ.js +1034 -0
  12. package/dist/chunk-VRJP2PCU.js +631 -0
  13. package/dist/chunk-X7SD2NXU.js +108 -0
  14. package/dist/index.d.ts +137 -12
  15. package/dist/index.js +1 -228
  16. package/eslint-plugin/dist/index.d.ts +1 -30
  17. package/eslint-plugin/dist/index.js +3 -149
  18. package/eslint-plugin/src/index.ts +0 -1
  19. package/eslint-plugin/src/rules/explicit-state-types.ts +1 -0
  20. package/eslint-plugin/src/rules/index.ts +0 -1
  21. package/eslint-plugin/src/rules/synchronous-selector-dependencies.ts +1 -0
  22. package/eslint-plugin/src/walk.ts +1 -0
  23. package/internal/dist/index.d.ts +129 -58
  24. package/internal/dist/index.js +1 -1
  25. package/internal/src/atom/create-regular-atom.ts +3 -3
  26. package/internal/src/atom/dispose-atom.ts +4 -13
  27. package/internal/src/atom/is-default.ts +3 -3
  28. package/internal/src/caching.ts +5 -5
  29. package/internal/src/capitalize.ts +3 -0
  30. package/internal/src/families/create-readonly-selector-family.ts +5 -6
  31. package/internal/src/families/create-writable-selector-family.ts +1 -4
  32. package/internal/src/families/dispose-from-store.ts +3 -13
  33. package/internal/src/get-state/get-from-store.ts +2 -2
  34. package/internal/src/get-state/read-or-compute-value.ts +1 -1
  35. package/internal/src/index.ts +2 -0
  36. package/internal/src/install-into-store.ts +1 -1
  37. package/internal/src/join/edit-relations-in-store.ts +32 -0
  38. package/internal/src/join/find-relations-in-store.ts +124 -0
  39. package/internal/src/join/get-internal-relations-from-store.ts +14 -0
  40. package/internal/src/join/get-join.ts +31 -0
  41. package/internal/src/join/index.ts +5 -0
  42. package/{data/src/join.ts → internal/src/join/join-internal.ts} +21 -430
  43. package/internal/src/junction.ts +7 -4
  44. package/internal/src/keys.ts +7 -7
  45. package/internal/src/mutable/create-mutable-atom-family.ts +1 -1
  46. package/internal/src/mutable/create-mutable-atom.ts +3 -3
  47. package/internal/src/mutable/get-json-token.ts +1 -1
  48. package/internal/src/mutable/tracker-family.ts +19 -17
  49. package/internal/src/mutable/tracker.ts +8 -8
  50. package/internal/src/pretty-print.ts +1 -1
  51. package/internal/src/selector/create-readonly-selector.ts +3 -7
  52. package/internal/src/selector/create-writable-selector.ts +4 -4
  53. package/internal/src/selector/dispose-selector.ts +20 -11
  54. package/internal/src/selector/get-selector-dependency-keys.ts +1 -1
  55. package/internal/src/selector/register-selector.ts +6 -9
  56. package/internal/src/selector/trace-selector-atoms.ts +2 -2
  57. package/internal/src/set-state/copy-mutable-if-needed.ts +1 -1
  58. package/internal/src/set-state/emit-update.ts +4 -2
  59. package/internal/src/set-state/evict-downstream.ts +1 -1
  60. package/internal/src/set-state/set-atom-or-selector.ts +1 -1
  61. package/internal/src/set-state/set-atom.ts +10 -10
  62. package/internal/src/set-state/set-into-store.ts +2 -2
  63. package/internal/src/set-state/stow-update.ts +1 -1
  64. package/internal/src/store/store.ts +1 -1
  65. package/internal/src/store/withdraw.ts +22 -22
  66. package/internal/src/subscribe/recall-state.ts +1 -1
  67. package/internal/src/subscribe/subscribe-in-store.ts +3 -3
  68. package/internal/src/subscribe/subscribe-to-root-atoms.ts +3 -3
  69. package/internal/src/subscribe/subscribe-to-state.ts +5 -5
  70. package/internal/src/subscribe/subscribe-to-timeline.ts +3 -3
  71. package/internal/src/subscribe/subscribe-to-transaction.ts +3 -3
  72. package/internal/src/timeline/create-timeline.ts +19 -38
  73. package/internal/src/timeline/time-travel.ts +2 -1
  74. package/internal/src/transaction/act-upon-store.ts +2 -2
  75. package/internal/src/transaction/apply-transaction.ts +5 -5
  76. package/internal/src/transaction/assign-transaction-to-continuity.ts +1 -1
  77. package/internal/src/transaction/build-transaction.ts +5 -8
  78. package/internal/src/transaction/create-transaction.ts +3 -3
  79. package/internal/src/transaction/get-epoch-number.ts +3 -3
  80. package/internal/src/transaction/set-epoch-number.ts +2 -2
  81. package/introspection/dist/index.js +2 -620
  82. package/json/dist/index.d.ts +2 -2
  83. package/json/dist/index.js +1 -80
  84. package/json/src/select-json-family.ts +3 -14
  85. package/package.json +31 -49
  86. package/react/dist/index.js +2 -82
  87. package/react/src/use-o.ts +1 -1
  88. package/react/src/use-tl.ts +2 -2
  89. package/react-devtools/dist/index.css +16 -14
  90. package/react-devtools/dist/index.js +31 -18
  91. package/react-devtools/src/Updates.tsx +12 -0
  92. package/react-devtools/src/devtools.scss +16 -14
  93. package/react-devtools/src/json-editor/editors-by-type/utilities/cast-to-json.ts +2 -1
  94. package/realtime/dist/index.d.ts +1 -2
  95. package/realtime/dist/index.js +2 -107
  96. package/realtime/src/realtime-continuity.ts +3 -2
  97. package/realtime/src/shared-room-store.ts +1 -2
  98. package/realtime-client/dist/index.d.ts +9 -9
  99. package/realtime-client/dist/index.js +3 -509
  100. package/realtime-client/src/continuity/register-and-attempt-confirmed-update.ts +3 -3
  101. package/realtime-client/src/continuity/use-conceal-state.ts +1 -1
  102. package/realtime-client/src/pull-atom-family-member.ts +2 -2
  103. package/realtime-client/src/pull-atom.ts +2 -2
  104. package/realtime-client/src/pull-mutable-atom-family-member.ts +2 -2
  105. package/realtime-client/src/pull-mutable-atom.ts +2 -2
  106. package/realtime-client/src/pull-selector-family-member.ts +4 -4
  107. package/realtime-client/src/pull-selector.ts +4 -4
  108. package/realtime-client/src/push-state.ts +5 -10
  109. package/realtime-client/src/server-action.ts +4 -4
  110. package/realtime-client/src/sync-continuity.ts +6 -6
  111. package/realtime-react/dist/index.js +5 -154
  112. package/realtime-react/src/use-pull-atom-family-member.ts +1 -1
  113. package/realtime-react/src/use-pull-atom.ts +1 -1
  114. package/realtime-react/src/use-pull-mutable-atom.ts +1 -1
  115. package/realtime-react/src/use-pull-mutable-family-member.ts +1 -1
  116. package/realtime-react/src/use-pull-selector-family-member.ts +1 -1
  117. package/realtime-react/src/use-pull-selector.ts +1 -1
  118. package/realtime-react/src/use-push.ts +1 -1
  119. package/realtime-react/src/use-server-action.ts +2 -2
  120. package/realtime-react/src/use-sync-continuity.ts +1 -1
  121. package/realtime-server/dist/index.d.ts +2 -4
  122. package/realtime-server/dist/index.js +3 -1001
  123. package/realtime-server/src/continuity/prepare-to-serve-transaction-request.ts +1 -1
  124. package/realtime-server/src/continuity/prepare-to-sync-realtime-continuity.ts +3 -3
  125. package/realtime-server/src/continuity/subscribe-to-continuity-actions.ts +2 -2
  126. package/realtime-server/src/continuity/subscribe-to-continuity-perpectives.ts +2 -2
  127. package/realtime-server/src/ipc-sockets/child-socket.ts +2 -0
  128. package/realtime-server/src/realtime-action-receiver.ts +1 -1
  129. package/realtime-server/src/realtime-family-provider.ts +2 -2
  130. package/realtime-server/src/realtime-mutable-family-provider.ts +2 -2
  131. package/realtime-server/src/realtime-mutable-provider.ts +2 -2
  132. package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +2 -1
  133. package/realtime-server/src/realtime-server-stores/server-room-external-store.ts +1 -1
  134. package/realtime-server/src/realtime-server-stores/server-sync-store.ts +10 -2
  135. package/realtime-server/src/realtime-server-stores/server-user-store.ts +1 -2
  136. package/realtime-server/src/realtime-state-provider.ts +2 -2
  137. package/realtime-testing/dist/index.js +20 -22
  138. package/realtime-testing/src/setup-realtime-test.tsx +2 -1
  139. package/src/index.ts +4 -0
  140. package/src/join.ts +218 -0
  141. package/src/silo.ts +4 -4
  142. package/src/timeline.ts +1 -1
  143. package/src/transaction.ts +4 -8
  144. package/transceivers/set-rtx/dist/index.d.ts +4 -3
  145. package/transceivers/set-rtx/dist/index.js +1 -215
  146. package/transceivers/set-rtx/src/set-rtx.ts +4 -7
  147. package/web/dist/index.js +1 -15
  148. package/data/src/until.ts +0 -15
  149. package/ephemeral/dist/index.d.ts +0 -67
  150. package/ephemeral/dist/index.js +0 -9
  151. package/ephemeral/package.json +0 -13
  152. package/ephemeral/src/index.ts +0 -1
  153. package/eslint-plugin/src/rules/lifespan.ts +0 -203
  154. package/immortal/dist/index.d.ts +0 -12
  155. package/immortal/dist/index.js +0 -9
  156. package/immortal/package.json +0 -13
  157. package/immortal/src/index.ts +0 -1
  158. package/immortal/src/seek-state.ts +0 -60
  159. package/react-devtools/src/json-editor/assets/Untitled-1.ai +2 -1436
  160. package/react-devtools/src/json-editor/assets/data-vis.ai +1 -1548
  161. package/react-devtools/src/json-editor/comp/json-editor-sketches.ai +5 -1449
  162. /package/{ephemeral/src → src}/find-state.ts +0 -0
@@ -1,621 +1,3 @@
1
+ export { Auditor, Differ, Refinery, attachIntrospectionStates, diffArray, diffBoolean, diffNumber, diffObject, diffString, discoverType, isPlainObject, jsonRefinery, jsonTreeRefinery, prettyJson, primitiveRefinery, sprawl } from '../../dist/chunk-VRJP2PCU.js';
2
+ import '../../dist/chunk-UQEYZ3OI.js';
1
3
  import '../../dist/chunk-XWL6SNVU.js';
2
- import * as Internal from 'atom.io/internal';
3
- import { createRegularAtom, deposit, createStandaloneSelector, createRegularAtomFamily, Subject, createSelectorFamily, createReadonlySelectorFamily } from 'atom.io/internal';
4
- import { getState } from 'atom.io';
5
-
6
- var attachAtomIndex = (store) => {
7
- const atomTokenIndexState__INTERNAL = createRegularAtom(
8
- store,
9
- {
10
- key: `\u{1F50D} Atom Token Index (Internal)`,
11
- default: () => {
12
- const base = /* @__PURE__ */ new Map();
13
- for (const [key, val] of store.atoms) {
14
- if (!key.includes(`\u{1F50D}`)) {
15
- const token = deposit(val);
16
- if (val.family) {
17
- let familyNode = base.get(val.family.key);
18
- if (!familyNode || !(`familyMembers` in familyNode)) {
19
- familyNode = {
20
- key: val.family.key,
21
- familyMembers: /* @__PURE__ */ new Map()
22
- };
23
- base.set(val.family.key, familyNode);
24
- }
25
- familyNode.familyMembers.set(val.family.subKey, token);
26
- } else {
27
- base.set(key, token);
28
- }
29
- }
30
- }
31
- return base;
32
- },
33
- effects: [
34
- ({ setSelf }) => {
35
- store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
36
- if (atomToken.key.includes(`\u{1F50D}`)) {
37
- return;
38
- }
39
- setSelf((self) => {
40
- if (atomToken.family) {
41
- const { key: familyKey, subKey } = atomToken.family;
42
- let familyNode = self.get(familyKey);
43
- if (familyNode === undefined || !(`familyMembers` in familyNode)) {
44
- familyNode = {
45
- key: familyKey,
46
- familyMembers: /* @__PURE__ */ new Map()
47
- };
48
- self.set(familyKey, familyNode);
49
- }
50
- familyNode.familyMembers.set(subKey, atomToken);
51
- } else {
52
- self.set(atomToken.key, atomToken);
53
- }
54
- return self;
55
- });
56
- });
57
- store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
58
- setSelf((self) => {
59
- if (atomToken.family) {
60
- const { key: familyKey, subKey } = atomToken.family;
61
- const familyNode = self.get(familyKey);
62
- if (familyNode && `familyMembers` in familyNode) {
63
- familyNode.familyMembers.delete(subKey);
64
- if (familyNode.familyMembers.size === 0) {
65
- self.delete(familyKey);
66
- }
67
- }
68
- } else {
69
- self.delete(atomToken.key);
70
- }
71
- return self;
72
- });
73
- });
74
- }
75
- ]
76
- },
77
- undefined
78
- );
79
- return createStandaloneSelector(store, {
80
- key: `\u{1F50D} Atom Token Index`,
81
- get: ({ get }) => get(atomTokenIndexState__INTERNAL)
82
- });
83
- };
84
- var attachSelectorIndex = (store) => {
85
- const readonlySelectorTokenIndexState__INTERNAL = createRegularAtom(
86
- store,
87
- {
88
- key: `\u{1F50D} Selector Token Index (Internal)`,
89
- default: () => {
90
- const base = /* @__PURE__ */ new Map();
91
- for (const map of [store.readonlySelectors, store.selectors]) {
92
- for (const [key, val] of map) {
93
- if (!key.includes(`\u{1F50D}`)) {
94
- const token = deposit(val);
95
- if (val.family) {
96
- let familyNode = base.get(val.family.key);
97
- if (!familyNode || !(`familyMembers` in familyNode)) {
98
- familyNode = {
99
- key: val.family.key,
100
- familyMembers: /* @__PURE__ */ new Map()
101
- };
102
- base.set(val.family.key, familyNode);
103
- }
104
- familyNode.familyMembers.set(val.family.subKey, token);
105
- } else {
106
- base.set(key, token);
107
- }
108
- }
109
- }
110
- }
111
- return base;
112
- },
113
- effects: [
114
- ({ setSelf }) => {
115
- store.on.selectorCreation.subscribe(
116
- `introspection`,
117
- (selectorToken) => {
118
- if (selectorToken.key.includes(`\u{1F50D}`)) {
119
- return;
120
- }
121
- setSelf((self) => {
122
- if (selectorToken.family) {
123
- const { key: familyKey, subKey } = selectorToken.family;
124
- let familyNode = self.get(familyKey);
125
- if (familyNode === undefined || !(`familyMembers` in familyNode)) {
126
- familyNode = {
127
- key: familyKey,
128
- familyMembers: /* @__PURE__ */ new Map()
129
- };
130
- self.set(familyKey, familyNode);
131
- }
132
- familyNode.familyMembers.set(subKey, selectorToken);
133
- } else {
134
- self.set(selectorToken.key, selectorToken);
135
- }
136
- return self;
137
- });
138
- }
139
- );
140
- store.on.selectorDisposal.subscribe(
141
- `introspection`,
142
- (selectorToken) => {
143
- setSelf((self) => {
144
- if (selectorToken.family) {
145
- const { key: familyKey, subKey } = selectorToken.family;
146
- const familyNode = self.get(familyKey);
147
- if (familyNode && `familyMembers` in familyNode) {
148
- familyNode.familyMembers.delete(subKey);
149
- if (familyNode.familyMembers.size === 0) {
150
- self.delete(familyKey);
151
- }
152
- }
153
- } else {
154
- self.delete(selectorToken.key);
155
- }
156
- return self;
157
- });
158
- }
159
- );
160
- }
161
- ]
162
- },
163
- undefined
164
- );
165
- return createStandaloneSelector(store, {
166
- key: `\u{1F50D} Selector Token Index`,
167
- get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL)
168
- });
169
- };
170
- var attachTimelineFamily = (store) => {
171
- const findTimelineLogState__INTERNAL = createRegularAtomFamily(store, {
172
- key: `\u{1F50D} Timeline Update Log (Internal)`,
173
- default: (key) => store.timelines.get(key) ?? {
174
- type: `timeline`,
175
- key: ``,
176
- at: 0,
177
- timeTraveling: null,
178
- history: [],
179
- selectorTime: null,
180
- transactionKey: null,
181
- install: () => {
182
- },
183
- subject: new Subject(),
184
- subscriptions: /* @__PURE__ */ new Map()
185
- },
186
- effects: (key) => [
187
- ({ setSelf }) => {
188
- const tl = store.timelines.get(key);
189
- tl?.subject.subscribe(`introspection`, (_) => {
190
- setSelf({ ...tl });
191
- });
192
- }
193
- ]
194
- });
195
- const findTimelineLogState = createSelectorFamily(
196
- store,
197
- {
198
- key: `\u{1F50D} Timeline Update Log`,
199
- get: (key) => ({ get }) => get(findTimelineLogState__INTERNAL, key)
200
- }
201
- );
202
- return findTimelineLogState;
203
- };
204
- var attachTimelineIndex = (store) => {
205
- const timelineTokenIndexState__INTERNAL = createRegularAtom(
206
- store,
207
- {
208
- key: `\u{1F50D} Timeline Token Index (Internal)`,
209
- default: () => [...store.timelines].map(([key]) => {
210
- return { key, type: `timeline` };
211
- }),
212
- effects: [
213
- ({ setSelf }) => {
214
- store.on.timelineCreation.subscribe(
215
- `introspection`,
216
- (timelineToken) => {
217
- setSelf((state) => [...state, timelineToken]);
218
- }
219
- );
220
- }
221
- ]
222
- },
223
- undefined
224
- );
225
- const timelineTokenIndex = createStandaloneSelector(store, {
226
- key: `\u{1F50D} Timeline Token Index`,
227
- get: ({ get }) => get(timelineTokenIndexState__INTERNAL)
228
- });
229
- return timelineTokenIndex;
230
- };
231
- var attachTransactionIndex = (store) => {
232
- const transactionTokenIndexState__INTERNAL = createRegularAtom(
233
- store,
234
- {
235
- key: `\u{1F50D} Transaction Token Index (Internal)`,
236
- default: () => [...store.transactions].map(([key]) => {
237
- return { key, type: `transaction` };
238
- }),
239
- effects: [
240
- ({ setSelf }) => {
241
- store.on.transactionCreation.subscribe(
242
- `introspection`,
243
- (transactionToken) => {
244
- setSelf((state) => [...state, transactionToken]);
245
- }
246
- );
247
- }
248
- ]
249
- },
250
- undefined
251
- );
252
- const transactionTokenIndex = createStandaloneSelector(store, {
253
- key: `\u{1F50D} Transaction Token Index`,
254
- get: ({ get }) => get(transactionTokenIndexState__INTERNAL)
255
- });
256
- return transactionTokenIndex;
257
- };
258
- var attachTransactionLogs = (store) => {
259
- const transactionUpdateLogAtoms = createRegularAtomFamily(store, {
260
- key: `\u{1F50D} Transaction Update Log (Internal)`,
261
- default: () => [],
262
- effects: (key) => [
263
- ({ setSelf }) => {
264
- const tx = store.transactions.get(key);
265
- tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
266
- if (transactionUpdate.key === key) {
267
- setSelf((state) => [...state, transactionUpdate]);
268
- }
269
- });
270
- }
271
- ]
272
- });
273
- const findTransactionUpdateLogState = createSelectorFamily(store, {
274
- key: `\u{1F50D} Transaction Update Log`,
275
- get: (key) => ({ get }) => get(transactionUpdateLogAtoms, key)
276
- });
277
- return findTransactionUpdateLogState;
278
- };
279
-
280
- // introspection/src/refinery.ts
281
- var Refinery = class {
282
- supported;
283
- constructor(supported) {
284
- this.supported = supported;
285
- }
286
- refine(input) {
287
- for (const [key, refiner] of Object.entries(this.supported)) {
288
- try {
289
- if (
290
- // @ts-expect-error that's the point
291
- refiner(input) === true && refiner !== Boolean
292
- ) {
293
- return { type: key, data: input };
294
- }
295
- } catch (_) {
296
- try {
297
- if (input instanceof refiner) {
298
- return { type: key, data: input };
299
- }
300
- } catch (__) {
301
- }
302
- }
303
- }
304
- return null;
305
- }
306
- };
307
- var primitiveRefinery = new Refinery({
308
- number: (input) => typeof input === `number`,
309
- string: (input) => typeof input === `string`,
310
- boolean: (input) => typeof input === `boolean`,
311
- null: (input) => input === null
312
- });
313
- function isPlainObject(input) {
314
- if (!input) {
315
- return false;
316
- }
317
- const prototype = Object.getPrototypeOf(input);
318
- return prototype === Object.prototype;
319
- }
320
- var jsonTreeRefinery = new Refinery({
321
- object: isPlainObject,
322
- array: (input) => Array.isArray(input)
323
- });
324
- var jsonRefinery = new Refinery({
325
- ...primitiveRefinery.supported,
326
- ...jsonTreeRefinery.supported
327
- });
328
- var discoverType = (input) => {
329
- if (input === undefined) {
330
- return `undefined`;
331
- }
332
- const refined = jsonRefinery.refine(input);
333
- if (refined) {
334
- return refined.type;
335
- }
336
- return Object.getPrototypeOf(input).constructor.name;
337
- };
338
-
339
- // introspection/src/attach-type-selectors.ts
340
- var attachTypeSelectors = (store) => {
341
- const typeSelectors = createReadonlySelectorFamily(store, {
342
- key: `\u{1F50D} State Type`,
343
- get: (key) => ({ get }) => {
344
- let state;
345
- try {
346
- const token = store.atoms.get(key) ?? store.selectors.get(key) ?? store.readonlySelectors.get(key);
347
- if (token === void 0) {
348
- throw new Error(`Could not find state with key "${key}"`);
349
- }
350
- state = get(token);
351
- } catch (thrown) {
352
- return `error`;
353
- }
354
- const typeOfState = discoverType(state);
355
- return typeOfState;
356
- }
357
- });
358
- return typeSelectors;
359
- };
360
-
361
- // introspection/src/attach-introspection-states.ts
362
- var attachIntrospectionStates = (store) => {
363
- return {
364
- atomIndex: attachAtomIndex(store),
365
- selectorIndex: attachSelectorIndex(store),
366
- transactionIndex: attachTransactionIndex(store),
367
- transactionLogSelectors: attachTransactionLogs(store),
368
- timelineIndex: attachTimelineIndex(store),
369
- timelineSelectors: attachTimelineFamily(store),
370
- typeSelectors: attachTypeSelectors(store)
371
- };
372
- };
373
- var Auditor = class _Auditor {
374
- /**
375
- * @param {Store} store - The store to audit.
376
- */
377
- constructor(store = Internal.IMPLICIT.STORE) {
378
- this.store = store;
379
- this.atomIndex = attachAtomIndex(this.store);
380
- this.selectorIndex = attachSelectorIndex(this.store);
381
- this.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(
382
- `auditor-${this.auditorCreatedAt}`,
383
- ({ key }) => {
384
- this.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt);
385
- }
386
- );
387
- this.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(
388
- `auditor-${this.auditorCreatedAt}`,
389
- ({ key }) => {
390
- this.statesCreatedAt.delete(key);
391
- }
392
- );
393
- this.unsubscribeFromSelectorCreation = this.store.on.selectorCreation.subscribe(
394
- `auditor-${this.auditorCreatedAt}`,
395
- ({ key }) => {
396
- this.statesCreatedAt.set(
397
- key,
398
- performance.now() - this.auditorCreatedAt
399
- );
400
- }
401
- );
402
- this.unsubscribeFromSelectorDisposal = this.store.on.selectorDisposal.subscribe(
403
- `auditor-${this.auditorCreatedAt}`,
404
- ({ key }) => {
405
- this.statesCreatedAt.delete(key);
406
- }
407
- );
408
- }
409
- auditorCreatedAt = performance.now();
410
- statesCreatedAt = /* @__PURE__ */ new Map();
411
- atomIndex;
412
- selectorIndex;
413
- disposed = false;
414
- unsubscribeFromAtomCreation;
415
- unsubscribeFromAtomDisposal;
416
- unsubscribeFromSelectorCreation;
417
- unsubscribeFromSelectorDisposal;
418
- static DEFAULT_LIST_RESOURCES_PARAM = {
419
- atomFamilies: true,
420
- selectorFamilies: true
421
- };
422
- /**
423
- * Lists all resources in the store, along with their creation time.
424
- *
425
- * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.
426
- * @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.
427
- */
428
- listResources(param = _Auditor.DEFAULT_LIST_RESOURCES_PARAM) {
429
- if (this.disposed) {
430
- throw new Error(`This Auditor has been disposed`);
431
- }
432
- const atoms = getState(this.atomIndex);
433
- const selectors = getState(this.selectorIndex);
434
- const atomFamilyNodes = [...atoms.values()].filter(
435
- (node) => `familyMembers` in node
436
- );
437
- const selectorFamilyNodes = [...selectors.values()].filter(
438
- (node) => `familyMembers` in node
439
- );
440
- const currentTime = performance.now();
441
- const resources = [];
442
- if (param.atomFamilies) {
443
- for (const familyNode of atomFamilyNodes) {
444
- const tokens = familyNode.familyMembers.values();
445
- for (const token of tokens) {
446
- const storedTime = this.statesCreatedAt.get(token.key);
447
- const creationTime = storedTime ?? this.auditorCreatedAt;
448
- const age = currentTime - creationTime;
449
- resources.push([token, age]);
450
- }
451
- }
452
- }
453
- if (param.selectorFamilies) {
454
- for (const familyNode of selectorFamilyNodes) {
455
- const tokens = familyNode.familyMembers.values();
456
- for (const token of tokens) {
457
- const storedTime = this.statesCreatedAt.get(token.key);
458
- const creationTime = storedTime ?? this.auditorCreatedAt;
459
- const age = currentTime - creationTime;
460
- resources.push([token, age]);
461
- }
462
- }
463
- }
464
- return resources;
465
- }
466
- [Symbol.dispose]() {
467
- this.unsubscribeFromAtomCreation();
468
- this.unsubscribeFromAtomDisposal();
469
- this.unsubscribeFromSelectorCreation();
470
- this.unsubscribeFromSelectorDisposal();
471
- this.disposed = true;
472
- }
473
- };
474
-
475
- // introspection/src/sprawl.ts
476
- var sprawl = (tree, inspector) => {
477
- const walk = (path, node) => {
478
- const inspect = (p, n) => {
479
- const result2 = inspector(p, n);
480
- if (result2) return result2;
481
- return null;
482
- };
483
- const result = inspect(path, node);
484
- if (result?.jobComplete ?? result?.pathComplete) {
485
- return result;
486
- }
487
- const childEntries = Array.isArray(node) ? node.map((v, i) => [i, v]) : isPlainObject(node) ? Object.entries(node) : [];
488
- for (const [k, v] of childEntries) {
489
- const subResult = walk([...path, k], v);
490
- if (subResult?.jobComplete) {
491
- return subResult;
492
- }
493
- }
494
- return {};
495
- };
496
- walk([], tree);
497
- };
498
-
499
- // introspection/src/differ.ts
500
- function diffNumber(a, b) {
501
- const sign = a < b ? `+` : `-`;
502
- return {
503
- summary: `${sign}${Math.abs(a - b)} (${a} \u2192 ${b})`
504
- };
505
- }
506
- function diffString(a, b) {
507
- const sign = a.length < b.length ? `+` : `-`;
508
- return {
509
- summary: `${sign}${Math.abs(a.length - b.length)} ("${a}" \u2192 "${b}")`
510
- };
511
- }
512
- function diffBoolean(a, b) {
513
- return {
514
- summary: `${a} \u2192 ${b}`
515
- };
516
- }
517
- function diffObject(a, b, recurse) {
518
- let summary = ``;
519
- const added = [];
520
- const removed = [];
521
- const changed = [];
522
- sprawl(a, (path, nodeA) => {
523
- let key;
524
- for (key of path) {
525
- const nodeB = b[key];
526
- if (nodeB === undefined) {
527
- removed.push([key, JSON.stringify(nodeA)]);
528
- } else {
529
- const delta = recurse(nodeA, nodeB);
530
- if (delta.summary !== `No Change`) {
531
- changed.push([key, delta]);
532
- }
533
- }
534
- }
535
- });
536
- sprawl(b, (path, nodeB) => {
537
- let key;
538
- for (key of path) {
539
- const nodeA = a[key];
540
- if (nodeA === undefined) {
541
- added.push([key, JSON.stringify(nodeB)]);
542
- }
543
- }
544
- });
545
- summary = `\uFF5E${changed.length} \uFF0B${added.length} \uFF0D${removed.length}`;
546
- return {
547
- summary,
548
- added,
549
- removed,
550
- changed
551
- };
552
- }
553
- function diffArray(a, b, recurse) {
554
- return diffObject(a, b, recurse);
555
- }
556
- var Differ = class {
557
- leafRefinery;
558
- treeRefinery;
559
- leafDiffers;
560
- treeDiffers;
561
- constructor(leafRefinery, treeRefinery, diffFunctions) {
562
- this.leafRefinery = leafRefinery;
563
- this.treeRefinery = treeRefinery;
564
- this.leafDiffers = {};
565
- this.treeDiffers = {};
566
- for (const key of Object.keys(leafRefinery.supported)) {
567
- const diffFunction = diffFunctions[key];
568
- this.leafDiffers[key] = diffFunction;
569
- }
570
- for (const key of Object.keys(treeRefinery.supported)) {
571
- const diffFunction = diffFunctions[key];
572
- this.treeDiffers[key] = diffFunction;
573
- }
574
- }
575
- diff(a, b) {
576
- if (a === b) {
577
- return { summary: `No Change` };
578
- }
579
- const aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a);
580
- const bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b);
581
- if (aRefined !== null && bRefined !== null) {
582
- if (aRefined.type === bRefined.type) {
583
- if (aRefined.type in this.leafDiffers) {
584
- const delta = this.leafDiffers[aRefined.type](
585
- aRefined.data,
586
- bRefined.data
587
- );
588
- return delta;
589
- }
590
- if (aRefined.type in this.treeDiffers) {
591
- const delta = this.treeDiffers[aRefined.type](
592
- aRefined.data,
593
- bRefined.data,
594
- (x, y) => this.diff(x, y)
595
- );
596
- return delta;
597
- }
598
- }
599
- }
600
- const typeA = discoverType(a);
601
- const typeB = discoverType(b);
602
- if (typeA === typeB) {
603
- return {
604
- summary: `${typeA} \u2192 ${typeB}`
605
- };
606
- }
607
- return {
608
- summary: `Type change: ${typeA} \u2192 ${typeB}`
609
- };
610
- }
611
- };
612
- var prettyJson = new Differ(primitiveRefinery, jsonTreeRefinery, {
613
- number: diffNumber,
614
- string: diffString,
615
- boolean: diffBoolean,
616
- null: () => ({ summary: `No Change` }),
617
- object: diffObject,
618
- array: diffArray
619
- });
620
-
621
- export { Auditor, Differ, Refinery, attachIntrospectionStates, diffArray, diffBoolean, diffNumber, diffObject, diffString, discoverType, isPlainObject, jsonRefinery, jsonTreeRefinery, prettyJson, primitiveRefinery, sprawl };
@@ -14,8 +14,8 @@ declare function toEntries<T extends object>(obj: T): Entries<keyof T, T[keyof T
14
14
 
15
15
  declare const selectJson: <T, J extends Json.Serializable>(atom: AtomIO.AtomToken<T>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.WritableSelectorToken<J>;
16
16
 
17
- declare function selectJsonFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(atomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, transform: JsonInterface<T, J>, store: Store): AtomIO.WritableSelectorFamilyToken<J, K>;
18
- declare function selectJsonFamily<T, J extends Json.Serializable, K extends Canonical>(atomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>, transform: JsonInterface<T, J>, store: Store): AtomIO.WritableSelectorFamilyToken<J, K>;
17
+ declare function selectJsonFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(store: Store, atomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, transform: JsonInterface<T, J>): AtomIO.WritableSelectorFamilyToken<J, K>;
18
+ declare function selectJsonFamily<T, J extends Json.Serializable, K extends Canonical>(store: Store, atomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>, transform: JsonInterface<T, J>): AtomIO.WritableSelectorFamilyToken<J, K>;
19
19
 
20
20
  type primitive = boolean | number | string | null;
21
21
  declare namespace Json {
@@ -1,81 +1,2 @@
1
- import { createWritableSelectorFamily } from '../../dist/chunk-Y5MBNTVU.js';
1
+ export { JSON_DEFAULTS, JSON_TYPE_NAMES, fromEntries, isJson, parseJson, selectJson, selectJsonFamily, stringifyJson, toEntries } from '../../dist/chunk-UQEYZ3OI.js';
2
2
  import '../../dist/chunk-XWL6SNVU.js';
3
- import { createStandaloneSelector, IMPLICIT, withdraw, seekInStore } from 'atom.io/internal';
4
-
5
- // json/src/entries.ts
6
- function fromEntries(entries) {
7
- return Object.fromEntries(entries);
8
- }
9
- function toEntries(obj) {
10
- return Object.entries(obj);
11
- }
12
- var selectJson = (atom, transform, store = IMPLICIT.STORE) => {
13
- return createStandaloneSelector(store, {
14
- key: `${atom.key}:JSON`,
15
- get: ({ get }) => transform.toJson(get(atom)),
16
- set: ({ set }, newValue) => {
17
- set(atom, transform.fromJson(newValue));
18
- }
19
- });
20
- };
21
- function selectJsonFamily(atomFamilyToken, transform, store = IMPLICIT.STORE) {
22
- const jsonFamily = createWritableSelectorFamily(
23
- store,
24
- {
25
- key: `${atomFamilyToken.key}:JSON`,
26
- get: (key) => ({ get }) => {
27
- const baseState = get(atomFamilyToken, key);
28
- return transform.toJson(baseState);
29
- },
30
- set: (key) => ({ set }, newValue) => {
31
- set(atomFamilyToken, key, transform.fromJson(newValue));
32
- }
33
- },
34
- [`mutable`, `json`]
35
- );
36
- const atomFamily = withdraw(atomFamilyToken, store);
37
- atomFamily.subject.subscribe(
38
- `store=${store.config.name}::json-selector-family`,
39
- (event) => {
40
- if (event.token.family) {
41
- seekInStore(store, jsonFamily, parseJson(event.token.family.subKey));
42
- }
43
- }
44
- );
45
- return jsonFamily;
46
- }
47
-
48
- // json/src/index.ts
49
- var parseJson = (str) => JSON.parse(str);
50
- var stringifyJson = (json) => JSON.stringify(json);
51
- var JSON_PROTOTYPES = [
52
- Array.prototype,
53
- Boolean.prototype,
54
- Number.prototype,
55
- Object.prototype,
56
- String.prototype
57
- ];
58
- var isJson = (input) => {
59
- if (input === null) return true;
60
- if (input === undefined) return false;
61
- const prototype = Object.getPrototypeOf(input);
62
- return JSON_PROTOTYPES.includes(prototype);
63
- };
64
- var JSON_TYPE_NAMES = [
65
- `array`,
66
- `boolean`,
67
- `null`,
68
- `number`,
69
- `object`,
70
- `string`
71
- ];
72
- var JSON_DEFAULTS = {
73
- array: [],
74
- boolean: false,
75
- null: null,
76
- number: 0,
77
- object: {},
78
- string: ``
79
- };
80
-
81
- export { JSON_DEFAULTS, JSON_TYPE_NAMES, fromEntries, isJson, parseJson, selectJson, selectJsonFamily, stringifyJson, toEntries };