atom.io 0.40.6 → 0.40.8

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 (186) hide show
  1. package/README.md +1 -1
  2. package/dist/data/index.d.ts +1 -1
  3. package/dist/data/index.js +1 -2
  4. package/dist/data/index.js.map +1 -1
  5. package/dist/employ-socket-D6wgByWh.js +12 -0
  6. package/dist/employ-socket-D6wgByWh.js.map +1 -0
  7. package/dist/eslint-plugin/index.js.map +1 -1
  8. package/dist/has-role-CMlaUlaf.js +1133 -0
  9. package/dist/has-role-CMlaUlaf.js.map +1 -0
  10. package/dist/internal/index.d.ts +248 -248
  11. package/dist/internal/index.d.ts.map +1 -1
  12. package/dist/internal/index.js +590 -1803
  13. package/dist/internal/index.js.map +1 -1
  14. package/dist/introspection/index.d.ts +1 -1
  15. package/dist/introspection/index.d.ts.map +1 -1
  16. package/dist/introspection/index.js +13 -32
  17. package/dist/introspection/index.js.map +1 -1
  18. package/dist/is-fn-DY1wZ-md.js +10 -0
  19. package/dist/is-fn-DY1wZ-md.js.map +1 -0
  20. package/dist/json/index.d.ts.map +1 -1
  21. package/dist/json/index.js.map +1 -1
  22. package/dist/main/index.d.ts +33 -33
  23. package/dist/main/index.d.ts.map +1 -1
  24. package/dist/main/index.js +3 -4
  25. package/dist/main/index.js.map +1 -1
  26. package/dist/mutex-store-CSvxY9i3.js +11 -0
  27. package/dist/mutex-store-CSvxY9i3.js.map +1 -0
  28. package/dist/react/index.d.ts +5 -5
  29. package/dist/react/index.d.ts.map +1 -1
  30. package/dist/react/index.js.map +1 -1
  31. package/dist/react-devtools/index.d.ts.map +1 -1
  32. package/dist/react-devtools/index.js +9 -11
  33. package/dist/react-devtools/index.js.map +1 -1
  34. package/dist/realtime/index.d.ts +7 -15
  35. package/dist/realtime/index.d.ts.map +1 -1
  36. package/dist/realtime/index.js +4 -35
  37. package/dist/realtime/index.js.map +1 -1
  38. package/dist/realtime-client/index.d.ts +6 -9
  39. package/dist/realtime-client/index.d.ts.map +1 -1
  40. package/dist/realtime-client/index.js +96 -88
  41. package/dist/realtime-client/index.js.map +1 -1
  42. package/dist/realtime-react/index.d.ts +17 -13
  43. package/dist/realtime-react/index.d.ts.map +1 -1
  44. package/dist/realtime-react/index.js +39 -50
  45. package/dist/realtime-react/index.js.map +1 -1
  46. package/dist/realtime-server/index.d.ts +83 -84
  47. package/dist/realtime-server/index.d.ts.map +1 -1
  48. package/dist/realtime-server/index.js +604 -543
  49. package/dist/realtime-server/index.js.map +1 -1
  50. package/dist/realtime-testing/index.d.ts +5 -4
  51. package/dist/realtime-testing/index.d.ts.map +1 -1
  52. package/dist/realtime-testing/index.js +35 -22
  53. package/dist/realtime-testing/index.js.map +1 -1
  54. package/dist/shared-room-store-BfW3nWif.js +31 -0
  55. package/dist/shared-room-store-BfW3nWif.js.map +1 -0
  56. package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
  57. package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
  58. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  59. package/dist/transceivers/set-rtx/index.js +4 -8
  60. package/dist/transceivers/set-rtx/index.js.map +1 -1
  61. package/dist/web/index.d.ts +3 -3
  62. package/dist/web/index.d.ts.map +1 -1
  63. package/dist/web/index.js +4 -3
  64. package/dist/web/index.js.map +1 -1
  65. package/package.json +13 -13
  66. package/src/internal/atom/create-regular-atom.ts +5 -4
  67. package/src/internal/atom/dispose-atom.ts +7 -2
  68. package/src/internal/atom/has-role.ts +3 -3
  69. package/src/internal/caching.ts +4 -2
  70. package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
  71. package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
  72. package/src/internal/families/create-regular-atom-family.ts +2 -1
  73. package/src/internal/families/create-writable-held-selector-family.ts +2 -1
  74. package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
  75. package/src/internal/families/dispose-from-store.ts +4 -4
  76. package/src/internal/families/find-in-store.ts +10 -10
  77. package/src/internal/families/get-family-of-token.ts +2 -2
  78. package/src/internal/families/index.ts +1 -0
  79. package/src/internal/families/mint-in-store.ts +54 -19
  80. package/src/internal/families/seek-in-store.ts +1 -1
  81. package/src/internal/get-state/get-fallback.ts +2 -2
  82. package/src/internal/get-state/get-from-store.ts +5 -5
  83. package/src/internal/get-state/read-or-compute-value.ts +1 -1
  84. package/src/internal/get-state/reduce-reference.ts +8 -6
  85. package/src/internal/index.ts +2 -220
  86. package/src/internal/molecule.ts +1 -2
  87. package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
  88. package/src/internal/mutable/create-mutable-atom.ts +4 -2
  89. package/src/internal/mutable/get-json-family.ts +1 -1
  90. package/src/internal/mutable/get-update-family.ts +1 -1
  91. package/src/internal/mutable/tracker-family.ts +2 -1
  92. package/src/internal/mutable/tracker.ts +71 -59
  93. package/src/internal/safe-compute.ts +1 -1
  94. package/src/internal/selector/create-readonly-held-selector.ts +2 -1
  95. package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
  96. package/src/internal/selector/create-writable-held-selector.ts +2 -1
  97. package/src/internal/selector/create-writable-pure-selector.ts +2 -1
  98. package/src/internal/selector/dispose-selector.ts +3 -2
  99. package/src/internal/selector/register-selector.ts +8 -5
  100. package/src/internal/selector/trace-selector-atoms.ts +2 -1
  101. package/src/internal/set-state/dispatch-state-update.ts +3 -2
  102. package/src/internal/set-state/evict-downstream.ts +1 -1
  103. package/src/internal/set-state/operate-on-store.ts +16 -22
  104. package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
  105. package/src/internal/set-state/reset-in-store.ts +5 -5
  106. package/src/internal/set-state/set-atom-or-selector.ts +2 -2
  107. package/src/internal/set-state/set-atom.ts +4 -2
  108. package/src/internal/set-state/set-into-store.ts +21 -39
  109. package/src/internal/set-state/set-selector.ts +3 -2
  110. package/src/internal/state-types.ts +228 -0
  111. package/src/internal/store/deposit.ts +4 -4
  112. package/src/internal/store/index.ts +0 -1
  113. package/src/internal/store/store.ts +9 -9
  114. package/src/internal/store/withdraw.ts +4 -4
  115. package/src/internal/subscribe/recall-state.ts +1 -1
  116. package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
  117. package/src/internal/subscribe/subscribe-to-state.ts +9 -0
  118. package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
  119. package/src/internal/transaction/build-transaction.ts +3 -2
  120. package/src/internal/transaction/index.ts +1 -23
  121. package/src/internal/transaction/is-root-store.ts +4 -1
  122. package/src/internal/transaction/transaction-meta-progress.ts +22 -0
  123. package/src/main/atom.ts +1 -2
  124. package/src/main/find-state.ts +5 -5
  125. package/src/main/get-state.ts +4 -4
  126. package/src/main/realm.ts +2 -2
  127. package/src/main/set-state.ts +10 -10
  128. package/src/react/parse-state-overloads.ts +3 -3
  129. package/src/react/use-i.ts +6 -4
  130. package/src/react/use-loadable.ts +4 -10
  131. package/src/react/use-o.ts +6 -4
  132. package/src/react-devtools/store.ts +6 -6
  133. package/src/realtime/index.ts +1 -0
  134. package/src/realtime/mutex-store.ts +11 -0
  135. package/src/realtime/realtime-continuity.ts +1 -5
  136. package/src/realtime-client/index.ts +0 -1
  137. package/src/realtime-client/pull-atom-family-member.ts +14 -17
  138. package/src/realtime-client/pull-atom.ts +1 -1
  139. package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
  140. package/src/realtime-client/pull-selector-family-member.ts +8 -35
  141. package/src/realtime-client/pull-selector-roots.ts +90 -0
  142. package/src/realtime-client/pull-selector.ts +2 -27
  143. package/src/realtime-client/push-state.ts +33 -5
  144. package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
  145. package/src/realtime-react/index.ts +2 -2
  146. package/src/realtime-react/realtime-context.tsx +9 -5
  147. package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
  148. package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
  149. package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
  150. package/src/realtime-react/use-push.ts +7 -3
  151. package/src/realtime-react/use-realtime-service.ts +11 -11
  152. package/src/realtime-react/use-single-effect.ts +11 -14
  153. package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +2 -27
  154. package/src/realtime-server/continuity/provide-continuity.ts +50 -0
  155. package/src/realtime-server/continuity/{subscribe-to-continuity-actions.ts → provide-outcomes.ts} +15 -13
  156. package/src/realtime-server/continuity/{subscribe-to-continuity-perpectives.ts → provide-perspectives.ts} +10 -8
  157. package/src/realtime-server/continuity/{prepare-to-send-initial-payload.ts → provide-startup-payloads.ts} +6 -4
  158. package/src/realtime-server/continuity/receive-action-requests.ts +68 -0
  159. package/src/realtime-server/continuity/track-acknowledgements.ts +46 -0
  160. package/src/realtime-server/employ-socket.ts +14 -0
  161. package/src/realtime-server/index.ts +3 -22
  162. package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
  163. package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
  164. package/src/realtime-server/ipc-sockets/parent-socket.ts +98 -69
  165. package/src/realtime-server/realtime-family-provider.ts +78 -29
  166. package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
  167. package/src/realtime-server/realtime-mutable-provider.ts +30 -22
  168. package/src/realtime-server/realtime-server-stores/index.ts +0 -2
  169. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
  170. package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
  171. package/src/realtime-server/realtime-state-provider.ts +30 -29
  172. package/src/realtime-server/realtime-state-receiver.ts +62 -16
  173. package/src/realtime-server/server-config.ts +8 -0
  174. package/src/realtime-server/socket-interface.ts +14 -0
  175. package/src/realtime-testing/setup-realtime-test.tsx +70 -31
  176. package/src/web/index.ts +1 -1
  177. package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
  178. package/src/internal/store/mint-or-counterfeit.ts +0 -108
  179. package/src/realtime-client/server-action.ts +0 -23
  180. package/src/realtime-react/on-mount.ts +0 -5
  181. package/src/realtime-react/use-server-action.ts +0 -19
  182. package/src/realtime-server/continuity/prepare-to-serve-transaction-request.ts +0 -59
  183. package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +0 -145
  184. package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +0 -41
  185. package/src/realtime-server/realtime-action-receiver.ts +0 -40
  186. package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
@@ -1,6 +1,6 @@
1
1
  import { Flat, Fn, Refinement, RootStore, Store, Timeline } from "atom.io/internal";
2
- import { Json } from "atom.io/json";
3
2
  import { AtomToken, Loadable, ReadableToken, ReadonlyPureSelectorFamilyToken, SelectorToken, TimelineToken, TransactionOutcomeEvent, TransactionToken } from "atom.io";
3
+ import { Json } from "atom.io/json";
4
4
 
5
5
  //#region src/introspection/attach-atom-index.d.ts
6
6
  type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/refinery.ts","../../src/introspection/differ.ts","../../src/introspection/sprawl.ts","../../src/introspection/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/refinery.ts","../../src/introspection/differ.ts","../../src/introspection/sprawl.ts","../../src/introspection/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -144,11 +144,10 @@ const attachTimelineFamily = (store) => {
144
144
  });
145
145
  }]
146
146
  });
147
- const findTimelineLogState = createSelectorFamily(store, {
147
+ return createSelectorFamily(store, {
148
148
  key: `🔍 Timeline Update Log`,
149
149
  get: (key) => ({ get }) => get(findTimelineLogState__INTERNAL, key)
150
150
  });
151
- return findTimelineLogState;
152
151
  };
153
152
 
154
153
  //#endregion
@@ -202,17 +201,15 @@ const attachTransactionLogs = (store) => {
202
201
  key: `🔍 Transaction Update Log (Internal)`,
203
202
  default: () => [],
204
203
  effects: (key) => [({ setSelf }) => {
205
- const tx = store.transactions.get(key);
206
- tx?.subject.subscribe(`introspection`, (transactionUpdate) => {
204
+ store.transactions.get(key)?.subject.subscribe(`introspection`, (transactionUpdate) => {
207
205
  if (transactionUpdate.token.key === key) setSelf((state) => [...state, transactionUpdate]);
208
206
  });
209
207
  }]
210
208
  });
211
- const findTransactionUpdateLogState = createSelectorFamily(store, {
209
+ return createSelectorFamily(store, {
212
210
  key: `🔍 Transaction Update Log`,
213
211
  get: (key) => ({ get }) => get(transactionUpdateLogAtoms, key)
214
212
  });
215
- return findTransactionUpdateLogState;
216
213
  };
217
214
 
218
215
  //#endregion
@@ -247,8 +244,7 @@ const primitiveRefinery = new Refinery({
247
244
  });
248
245
  function isPlainObject(input) {
249
246
  if (!input) return false;
250
- const prototype = Object.getPrototypeOf(input);
251
- return prototype === Object.prototype;
247
+ return Object.getPrototypeOf(input) === Object.prototype;
252
248
  }
253
249
  const jsonTreeRefinery = new Refinery({
254
250
  object: isPlainObject,
@@ -268,7 +264,7 @@ const discoverType = (input) => {
268
264
  //#endregion
269
265
  //#region src/introspection/attach-type-selectors.ts
270
266
  const attachTypeSelectors = (store) => {
271
- const typeSelectors = createReadonlyPureSelectorFamily(store, {
267
+ return createReadonlyPureSelectorFamily(store, {
272
268
  key: `🔍 State Type`,
273
269
  get: (key) => async ({ get }) => {
274
270
  let state;
@@ -280,11 +276,9 @@ const attachTypeSelectors = (store) => {
280
276
  return `error`;
281
277
  }
282
278
  if (state instanceof Promise) state = await state;
283
- const typeOfState = discoverType(state);
284
- return typeOfState;
279
+ return discoverType(state);
285
280
  }
286
281
  });
287
- return typeSelectors;
288
282
  };
289
283
 
290
284
  //#endregion
@@ -359,8 +353,7 @@ var Auditor = class Auditor {
359
353
  if (param.atomFamilies) for (const familyNode of atomFamilyNodes) {
360
354
  const tokens = familyNode.familyMembers.values();
361
355
  for (const token of tokens) {
362
- const storedTime = this.statesCreatedAt.get(token.key);
363
- const creationTime = storedTime ?? this.auditorCreatedAt;
356
+ const creationTime = this.statesCreatedAt.get(token.key) ?? this.auditorCreatedAt;
364
357
  const age = currentTime - creationTime;
365
358
  resources.push([token, age]);
366
359
  }
@@ -368,8 +361,7 @@ var Auditor = class Auditor {
368
361
  if (param.selectorFamilies) for (const familyNode of selectorFamilyNodes) {
369
362
  const tokens = familyNode.familyMembers.values();
370
363
  for (const token of tokens) {
371
- const storedTime = this.statesCreatedAt.get(token.key);
372
- const creationTime = storedTime ?? this.auditorCreatedAt;
364
+ const creationTime = this.statesCreatedAt.get(token.key) ?? this.auditorCreatedAt;
373
365
  const age = currentTime - creationTime;
374
366
  resources.push([token, age]);
375
367
  }
@@ -409,12 +401,10 @@ const sprawl = (tree, inspector) => {
409
401
  //#endregion
410
402
  //#region src/introspection/differ.ts
411
403
  function diffNumber(a, b) {
412
- const sign = a < b ? `+` : `-`;
413
- return { summary: `${sign}${Math.abs(a - b)} (${a} → ${b})` };
404
+ return { summary: `${a < b ? `+` : `-`}${Math.abs(a - b)} (${a} → ${b})` };
414
405
  }
415
406
  function diffString(a, b) {
416
- const sign = a.length < b.length ? `+` : `-`;
417
- return { summary: `${sign}${Math.abs(a.length - b.length)} ("${a}" → "${b}")` };
407
+ return { summary: `${a.length < b.length ? `+` : `-`}${Math.abs(a.length - b.length)} ("${a}" → "${b}")` };
418
408
  }
419
409
  function diffBoolean(a, b) {
420
410
  return { summary: `${a} → ${b}` };
@@ -437,10 +427,7 @@ function diffObject(a, b, recurse) {
437
427
  });
438
428
  sprawl(b, (path, nodeB) => {
439
429
  let key;
440
- for (key of path) {
441
- const nodeA = a[key];
442
- if (nodeA === void 0) added.push([key, JSON.stringify(nodeB)]);
443
- }
430
+ for (key of path) if (a[key] === void 0) added.push([key, JSON.stringify(nodeB)]);
444
431
  });
445
432
  summary = `~${changed.length} +${added.length} -${removed.length}`;
446
433
  return {
@@ -478,14 +465,8 @@ var Differ = class {
478
465
  const bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b);
479
466
  if (aRefined !== null && bRefined !== null) {
480
467
  if (aRefined.type === bRefined.type) {
481
- if (aRefined.type in this.leafDiffers) {
482
- const delta = this.leafDiffers[aRefined.type](aRefined.data, bRefined.data);
483
- return delta;
484
- }
485
- if (aRefined.type in this.treeDiffers) {
486
- const delta = this.treeDiffers[aRefined.type](aRefined.data, bRefined.data, (x, y) => this.diff(x, y));
487
- return delta;
488
- }
468
+ if (aRefined.type in this.leafDiffers) return this.leafDiffers[aRefined.type](aRefined.data, bRefined.data);
469
+ if (aRefined.type in this.treeDiffers) return this.treeDiffers[aRefined.type](aRefined.data, bRefined.data, (x, y) => this.diff(x, y));
489
470
  }
490
471
  }
491
472
  const typeA = discoverType(a);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["base: AtomTokenIndex","base: SelectorTokenIndex","tokens: TransactionToken<Fn>[]","primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","state: unknown","resources: (readonly [ReadableToken<unknown>, number])[]","result","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-timeline-family.ts","../../src/introspection/attach-timeline-index.ts","../../src/introspection/attach-transaction-index.ts","../../src/introspection/attach-transaction-logs.ts","../../src/introspection/refinery.ts","../../src/introspection/attach-type-selectors.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/sprawl.ts","../../src/introspection/differ.ts"],"sourcesContent":["import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: AtomTokenIndex = new Map()\n\t\t\t\tfor (const [key, val] of store.atoms) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(atomToken.key)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, atomToken)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.set(atomToken.key, atomToken)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tstore.on.atomDisposal.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<\n\tSelectorToken<unknown, any, any>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Selector Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log (Internal)`,\n\t\tdefault: (key) =>\n\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\ttype: `timeline`,\n\t\t\t\tkey: ``,\n\t\t\t\tat: 0,\n\t\t\t\ttimeTraveling: null,\n\t\t\t\thistory: [],\n\t\t\t\tselectorTime: null,\n\t\t\t\ttransactionKey: null,\n\t\t\t\tinstall: () => {},\n\t\t\t\tsubject: new Subject(),\n\t\t\t\tsubscriptions: new Map(),\n\t\t\t},\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\tsetSelf({ ...tl })\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTimelineLogState = createSelectorFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t})\n\treturn findTimelineLogState\n}\n","import type { AtomToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): AtomToken<TimelineToken<any>[]> => {\n\treturn createRegularAtom<TimelineToken<any>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken<any> => {\n\t\t\t\t\treturn { key, type: `timeline` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.timelineCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(timelineToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, timelineToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, TransactionToken } from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Fn>[]> => {\n\treturn createRegularAtom<TransactionToken<Fn>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Fn>[] = []\n\t\t\t\tfor (const [key] of store.transactions) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({ key, type: `transaction` })\n\t\t\t\t}\n\t\t\t\treturn tokens\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(transactionToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type {\n\tReadonlyPureSelectorFamilyToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<\n\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\tstring\n> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log (Internal)`,\n\t\tdefault: () => [],\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\tif (transactionUpdate.token.key === key) {\n\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(transactionUpdateLogAtoms, key),\n\t})\n\treturn findTransactionUpdateLogState\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}> = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import type { Loadable, ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 State Type`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\tasync ({ get }) => {\n\t\t\t\tlet state: unknown\n\t\t\t\ttry {\n\t\t\t\t\tconst token =\n\t\t\t\t\t\tstore.atoms.get(key) ??\n\t\t\t\t\t\tstore.writableSelectors.get(key) ??\n\t\t\t\t\t\tstore.readonlySelectors.get(key)\n\t\t\t\t\tif (token === undefined) {\n\t\t\t\t\t\tthrow new Error(`Could not find state with key \"${key}\"`)\n\t\t\t\t\t}\n\t\t\t\t\tstate = get(token)\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn `error`\n\t\t\t\t}\n\t\t\t\tif (state instanceof Promise) {\n\t\t\t\t\tstate = await state\n\t\t\t\t}\n\t\t\t\tconst typeOfState = discoverType(state)\n\t\t\t\treturn typeOfState\n\t\t\t},\n\t})\n\treturn typeSelectors\n}\n","import type {\n\tAtomToken,\n\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tTimelineToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { Fn, RootStore, Store, Timeline } from \"atom.io/internal\"\n\nimport { type AtomTokenIndex, attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\nimport { attachTimelineFamily } from \"./attach-timeline-family\"\nimport { attachTimelineIndex } from \"./attach-timeline-index\"\nimport { attachTransactionIndex } from \"./attach-transaction-index\"\nimport { attachTransactionLogs } from \"./attach-transaction-logs\"\nimport { attachTypeSelectors } from \"./attach-type-selectors\"\n\nexport type IntrospectionStates = {\n\tatomIndex: AtomToken<AtomTokenIndex>\n\tselectorIndex: AtomToken<SelectorTokenIndex>\n\ttransactionIndex: AtomToken<TransactionToken<Fn>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[],\n\t\tstring\n\t>\n\ttimelineIndex: AtomToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (\n\tstore: RootStore,\n): IntrospectionStates => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\ttransactionLogSelectors: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\ttimelineSelectors: attachTimelineFamily(store),\n\t\ttypeSelectors: attachTypeSelectors(store),\n\t}\n}\n","import {\n\ttype AtomToken,\n\tgetState,\n\ttype ReadableToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport { IMPLICIT, type Store } from \"atom.io/internal\"\n\nimport type { FamilyNode } from \".\"\nimport type { AtomTokenIndex } from \"./attach-atom-index\"\nimport { attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\n\nexport type ListResourcesParam = {\n\tatomFamilies: boolean\n\tselectorFamilies: boolean\n}\n\n/**\n * Auditor is a tool for identifying lingering resources in your store that may result in memory leaks.\n * @experimental\n */\nexport class Auditor {\n\tpublic readonly store: Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: AtomToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: AtomToken<SelectorTokenIndex>\n\tpublic disposed = false\n\n\tprivate readonly unsubscribeFromAtomCreation: () => void\n\tprivate readonly unsubscribeFromAtomDisposal: () => void\n\tprivate readonly unsubscribeFromSelectorCreation: () => void\n\tprivate readonly unsubscribeFromSelectorDisposal: () => void\n\n\t/**\n\t * @param {Store} store - The store to audit.\n\t */\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.atomIndex = attachAtomIndex(this.store)\n\t\tthis.selectorIndex = attachSelectorIndex(this.store)\n\t\tthis.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromSelectorCreation =\n\t\t\tthis.store.on.selectorCreation.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.set(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tperformance.now() - this.auditorCreatedAt,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\t\tthis.unsubscribeFromSelectorDisposal =\n\t\t\tthis.store.on.selectorDisposal.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t\t},\n\t\t\t)\n\t}\n\n\tpublic static readonly DEFAULT_LIST_RESOURCES_PARAM: ListResourcesParam = {\n\t\tatomFamilies: true,\n\t\tselectorFamilies: true,\n\t} satisfies ListResourcesParam\n\t/**\n\t * Lists all resources in the store, along with their creation time.\n\t *\n\t * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.\n\t * @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.\n\t */\n\tpublic listResources(\n\t\tparam: ListResourcesParam = Auditor.DEFAULT_LIST_RESOURCES_PARAM,\n\t): (readonly [ReadableToken<unknown>, number])[] {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error(`This Auditor has been disposed`)\n\t\t}\n\t\tconst atoms = getState(this.atomIndex)\n\t\tconst selectors = getState(this.selectorIndex)\n\t\tconst atomFamilyNodes = [...atoms.values()].filter(\n\t\t\t(node): node is FamilyNode<AtomToken<unknown>> => `familyMembers` in node,\n\t\t)\n\t\tconst selectorFamilyNodes = [...selectors.values()].filter(\n\t\t\t(node): node is FamilyNode<SelectorToken<unknown>> =>\n\t\t\t\t`familyMembers` in node,\n\t\t)\n\t\tconst currentTime = performance.now()\n\t\tconst resources: (readonly [ReadableToken<unknown>, number])[] = []\n\t\tif (param.atomFamilies) {\n\t\t\tfor (const familyNode of atomFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (param.selectorFamilies) {\n\t\t\tfor (const familyNode of selectorFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn resources\n\t}\n\n\tpublic [Symbol.dispose](): void {\n\t\tthis.unsubscribeFromAtomCreation()\n\t\tthis.unsubscribeFromAtomDisposal()\n\t\tthis.unsubscribeFromSelectorCreation()\n\t\tthis.unsubscribeFromSelectorDisposal()\n\t\tthis.disposed = true\n\t}\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n> = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n"],"mappings":";;;;AAYA,MAAa,mBAAmB,UAA4C;AAC3E,QAAO,kBACN,OACA;EACC,KAAK;EACL,eAAe;GACd,MAAMA,uBAAuB,IAAI;AACjC,QAAK,MAAM,CAAC,KAAK,QAAQ,MAAM,OAAO;AACrC,QAAI,2BAA2B,KAC9B;IAED,MAAM,QAAQ,QAAQ;AACtB,QAAI,IAAI,QAAQ;KACf,IAAI,aAAa,KAAK,IAAI,IAAI,OAAO;AACrC,SAAI,CAAC,cAAc,EAAE,mBAAmB,aAAa;AACpD,mBAAa;OACZ,KAAK,IAAI,OAAO;OAChB,+BAAe,IAAI;;AAEpB,WAAK,IAAI,IAAI,OAAO,KAAK;;AAE1B,gBAAW,cAAc,IAAI,IAAI,OAAO,QAAQ;UAEhD,MAAK,IAAI,KAAK;;AAGhB,UAAO;;EAER,SAAS,EACP,EAAE,cAAc;AAChB,SAAM,GAAG,aAAa,UAAU,kBAAkB,cAAc;AAC/D,QAAI,2BAA2B,UAAU,KACxC;AAGD,aAAS,SAAS;AACjB,SAAI,UAAU,QAAQ;MACrB,MAAM,EAAE,KAAK,WAAW,WAAW,UAAU;MAC7C,IAAI,aAAa,KAAK,IAAI;AAC1B,UACC,eAAe,UACf,EAAE,mBAAmB,aACpB;AACD,oBAAa;QACZ,KAAK;QACL,+BAAe,IAAI;;AAEpB,YAAK,IAAI,WAAW;;AAErB,iBAAW,cAAc,IAAI,QAAQ;WAErC,MAAK,IAAI,UAAU,KAAK;AAEzB,YAAO,IAAI,IAAI;;;AAGjB,SAAM,GAAG,aAAa,UAAU,kBAAkB,cAAc;AAC/D,aAAS,SAAS;AACjB,SAAI,UAAU,QAAQ;MACrB,MAAM,EAAE,KAAK,WAAW,WAAW,UAAU;MAC7C,MAAM,aAAa,KAAK,IAAI;AAC5B,UAAI,cAAc,mBAAmB,YAAY;AAChD,kBAAW,cAAc,OAAO;AAChC,WAAI,WAAW,cAAc,SAAS,EACrC,MAAK,OAAO;;;AAIf,YAAO,IAAI,IAAI;;;;IAMpB;;;;;ACxEF,MAAa,uBACZ,UACmC;AACnC,QAAO,kBACN,OACA;EACC,KAAK;EACL,eAAe;GACd,MAAMC,uBAA2B,IAAI;AACrC,QAAK,MAAM,OAAO,CAAC,MAAM,mBAAmB,MAAM,mBACjD,MAAK,MAAM,CAAC,KAAK,QAAQ,KAAK;AAC7B,QAAI,2BAA2B,KAC9B;IAED,MAAM,QAAQ,QAAQ;AACtB,QAAI,IAAI,QAAQ;KACf,IAAI,aAAa,KAAK,IAAI,IAAI,OAAO;AACrC,SAAI,CAAC,cAAc,EAAE,mBAAmB,aAAa;AACpD,mBAAa;OACZ,KAAK,IAAI,OAAO;OAChB,+BAAe,IAAI;;AAEpB,WAAK,IAAI,IAAI,OAAO,KAAK;;AAE1B,gBAAW,cAAc,IAAI,IAAI,OAAO,QAAQ;UAEhD,MAAK,IAAI,KAAK;;AAIjB,UAAO;;EAER,SAAS,EACP,EAAE,cAAc;AAChB,SAAM,GAAG,iBAAiB,UACzB,kBACC,kBAAkB;AAClB,QAAI,2BAA2B,cAAc,KAC5C;AAGD,aAAS,SAAS;AACjB,SAAI,cAAc,QAAQ;MACzB,MAAM,EAAE,KAAK,WAAW,WAAW,cAAc;MACjD,IAAI,aAAa,KAAK,IAAI;AAC1B,UACC,eAAe,UACf,EAAE,mBAAmB,aACpB;AACD,oBAAa;QACZ,KAAK;QACL,+BAAe,IAAI;;AAEpB,YAAK,IAAI,WAAW;;AAErB,iBAAW,cAAc,IAAI,QAAQ;WAErC,MAAK,IAAI,cAAc,KAAK;AAE7B,YAAO,IAAI,IAAI;;;AAKlB,SAAM,GAAG,iBAAiB,UACzB,kBACC,kBAAkB;AAClB,aAAS,SAAS;AACjB,SAAI,cAAc,QAAQ;MACzB,MAAM,EAAE,KAAK,WAAW,WAAW,cAAc;MACjD,MAAM,aAAa,KAAK,IAAI;AAC5B,UAAI,cAAc,mBAAmB,YAAY;AAChD,kBAAW,cAAc,OAAO;AAChC,WAAI,WAAW,cAAc,SAAS,EACrC,MAAK,OAAO;;WAId,MAAK,OAAO,cAAc;AAE3B,YAAO,IAAI,IAAI;;;;IAOrB;;;;;AC7FF,MAAa,wBACZ,UAC4D;CAC5D,MAAM,iCAAiC,wBAIrC,OAAO;EACR,KAAK;EACL,UAAU,QACT,MAAM,UAAU,IAAI,QAAQ;GAC3B,MAAM;GACN,KAAK;GACL,IAAI;GACJ,eAAe;GACf,SAAS;GACT,cAAc;GACd,gBAAgB;GAChB,eAAe;GACf,SAAS,IAAI;GACb,+BAAe,IAAI;;EAErB,UAAU,QAAQ,EAChB,EAAE,cAAc;GAChB,MAAM,KAAK,MAAM,UAAU,IAAI;AAC/B,OAAI,QAAQ,UAAU,kBAAkB,MAAM;AAC7C,YAAQ,EAAE,GAAG;;;;CAKjB,MAAM,uBAAuB,qBAI3B,OAAO;EACR,KAAK;EACL,MACE,SACA,EAAE,UACF,IAAI,gCAAgC;;AAEvC,QAAO;;;;;AC9CR,MAAa,uBACZ,UACqC;AACrC,QAAO,kBACN,OACA;EACC,KAAK;EACL,eACC,CAAC,GAAG,MAAM,WAAW,KAAK,CAAC,SAA6B;AACvD,UAAO;IAAE;IAAK,MAAM;;;EAEtB,SAAS,EACP,EAAE,cAAc;AAChB,SAAM,GAAG,iBAAiB,UACzB,kBACC,kBAAkB;AAClB,aAAS,UAAU,CAAC,GAAG,OAAO;;;IAMnC;;;;;ACtBF,MAAa,0BACZ,UACuC;AACvC,QAAO,kBACN,OACA;EACC,KAAK;EACL,eAAe;GACd,MAAMC,SAAiC;AACvC,QAAK,MAAM,CAAC,QAAQ,MAAM,cAAc;AACvC,QAAI,2BAA2B,KAC9B;AAED,WAAO,KAAK;KAAE;KAAK,MAAM;;;AAE1B,UAAO;;EAER,SAAS,EACP,EAAE,cAAc;AAChB,SAAM,GAAG,oBAAoB,UAC5B,kBACC,qBAAqB;AACrB,QAAI,2BAA2B,iBAAiB,KAC/C;AAED,aAAS,UAAU,CAAC,GAAG,OAAO;;;IAMnC;;;;;AC3BF,MAAa,yBACZ,UAII;CACJ,MAAM,4BAA4B,wBAIhC,OAAO;EACR,KAAK;EACL,eAAe;EACf,UAAU,QAAQ,EAChB,EAAE,cAAc;GAChB,MAAM,KAAK,MAAM,aAAa,IAAI;AAClC,OAAI,QAAQ,UAAU,kBAAkB,sBAAsB;AAC7D,QAAI,kBAAkB,MAAM,QAAQ,IACnC,UAAS,UAAU,CAAC,GAAG,OAAO;;;;CAMnC,MAAM,gCAAgC,qBAIpC,OAAO;EACR,KAAK;EACL,MACE,SACA,EAAE,UACF,IAAI,2BAA2B;;AAElC,QAAO;;;;;AC3BR,IAAa,WAAb,MAAgE;CAC/D,AAAO;CAEP,AAAO,YAAY,WAA2B;AAC7C,OAAK,YAAY;;CAGlB,AAAO,OAAU,OAgBN;AACV,OAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,KAAK,WAChD,KAAI;AACH,OAEC,QAAQ,WAAW,QACnB,YAAY,QAEZ,QAAO;IAAE,MAAM;IAAK,MAAM;;WAEnB,GAAG;AACX,OAAI;AACH,QAAI,iBAAiB,QACpB,QAAO;KAAE,MAAM;KAAK,MAAM;;YAEnB,IAAI;;AAGf,SAAO;;;AAIT,MAAaC,oBAKR,IAAI,SAAS;CACjB,SAAS,UAAoC,OAAO,UAAU;CAC9D,SAAS,UAAoC,OAAO,UAAU;CAC9D,UAAU,UAAqC,OAAO,UAAU;CAChE,OAAO,UAAkC,UAAU;;AAGpD,SAAgB,cAAc,OAA2C;AACxE,KAAI,CAAC,MACJ,QAAO;CAER,MAAM,YAAY,OAAO,eAAe;AACxC,QAAO,cAAc,OAAO;;AAG7B,MAAaC,mBAGR,IAAI,SAAS;CACjB,QAAQ;CACR,QAAQ,UAA6C,MAAM,QAAQ;;AAGpE,MAAaC,eAOR,IAAI,SAAS;CACjB,GAAG,kBAAkB;CACrB,GAAG,iBAAiB;;AAKrB,MAAa,gBACZ,UAC4D;AAC5D,KAAI,UAAU,OACb,QAAO;CAER,MAAM,UAAU,aAAa,OAAO;AACpC,KAAI,QACH,QAAO,QAAQ;AAEhB,QAAO,OAAO,eAAe,OAAO,YAAY;;;;;AC3GjD,MAAa,uBACZ,UAC+D;CAC/D,MAAM,gBAAgB,iCAIpB,OAAO;EACR,KAAK;EACL,MACE,QACD,OAAO,EAAE,UAAU;GAClB,IAAIC;AACJ,OAAI;IACH,MAAM,QACL,MAAM,MAAM,IAAI,QAChB,MAAM,kBAAkB,IAAI,QAC5B,MAAM,kBAAkB,IAAI;AAC7B,QAAI,UAAU,OACb,OAAM,IAAI,MAAM,kCAAkC,IAAI;AAEvD,YAAQ,IAAI;YACJ,GAAG;AACX,WAAO;;AAER,OAAI,iBAAiB,QACpB,SAAQ,MAAM;GAEf,MAAM,cAAc,aAAa;AACjC,UAAO;;;AAGV,QAAO;;;;;ACNR,MAAa,6BACZ,UACyB;AACzB,QAAO;EACN,WAAW,gBAAgB;EAC3B,eAAe,oBAAoB;EACnC,kBAAkB,uBAAuB;EACzC,yBAAyB,sBAAsB;EAC/C,eAAe,oBAAoB;EACnC,mBAAmB,qBAAqB;EACxC,eAAe,oBAAoB;;;;;;;;;;ACnBrC,IAAa,UAAb,MAAa,QAAQ;CACpB,AAAgB;CAChB,AAAO,mBAA2B,YAAY;CAC9C,AAAO,kCAAuC,IAAI;CAClD,AAAgB;CAChB,AAAgB;CAChB,AAAO,WAAW;CAElB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;CACjB,AAAiB;;;;CAKjB,AAAO,YAAY,QAAe,SAAS,OAAO;AACjD,OAAK,QAAQ;AACb,OAAK,YAAY,gBAAgB,KAAK;AACtC,OAAK,gBAAgB,oBAAoB,KAAK;AAC9C,OAAK,8BAA8B,KAAK,MAAM,GAAG,aAAa,UAC7D,WAAW,KAAK,qBACf,EAAE,UAAU;AACZ,QAAK,gBAAgB,IAAI,KAAK,YAAY,QAAQ,KAAK;;AAGzD,OAAK,8BAA8B,KAAK,MAAM,GAAG,aAAa,UAC7D,WAAW,KAAK,qBACf,EAAE,UAAU;AACZ,QAAK,gBAAgB,OAAO;;AAG9B,OAAK,kCACJ,KAAK,MAAM,GAAG,iBAAiB,UAC9B,WAAW,KAAK,qBACf,EAAE,UAAU;AACZ,QAAK,gBAAgB,IACpB,KACA,YAAY,QAAQ,KAAK;;AAI7B,OAAK,kCACJ,KAAK,MAAM,GAAG,iBAAiB,UAC9B,WAAW,KAAK,qBACf,EAAE,UAAU;AACZ,QAAK,gBAAgB,OAAO;;;CAKhC,OAAuB,+BAAmD;EACzE,cAAc;EACd,kBAAkB;;;;;;;;CAQnB,AAAO,cACN,QAA4B,QAAQ,8BACY;AAChD,MAAI,KAAK,SACR,OAAM,IAAI,MAAM;EAEjB,MAAM,QAAQ,SAAS,KAAK;EAC5B,MAAM,YAAY,SAAS,KAAK;EAChC,MAAM,kBAAkB,CAAC,GAAG,MAAM,UAAU,QAC1C,SAAiD,mBAAmB;EAEtE,MAAM,sBAAsB,CAAC,GAAG,UAAU,UAAU,QAClD,SACA,mBAAmB;EAErB,MAAM,cAAc,YAAY;EAChC,MAAMC,YAA2D;AACjE,MAAI,MAAM,aACT,MAAK,MAAM,cAAc,iBAAiB;GACzC,MAAM,SAAS,WAAW,cAAc;AACxC,QAAK,MAAM,SAAS,QAAQ;IAC3B,MAAM,aAAa,KAAK,gBAAgB,IAAI,MAAM;IAClD,MAAM,eAAe,cAAc,KAAK;IACxC,MAAM,MAAM,cAAc;AAC1B,cAAU,KAAK,CAAC,OAAO;;;AAI1B,MAAI,MAAM,iBACT,MAAK,MAAM,cAAc,qBAAqB;GAC7C,MAAM,SAAS,WAAW,cAAc;AACxC,QAAK,MAAM,SAAS,QAAQ;IAC3B,MAAM,aAAa,KAAK,gBAAgB,IAAI,MAAM;IAClD,MAAM,eAAe,cAAc,KAAK;IACxC,MAAM,MAAM,cAAc;AAC1B,cAAU,KAAK,CAAC,OAAO;;;AAI1B,SAAO;;CAGR,CAAQ,OAAO,WAAiB;AAC/B,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK,WAAW;;;;;;ACvHlB,MAAa,UACZ,MACA,cACU;CACV,MAAM,QAAQ,MAAgB,SAAoC;EACjE,MAAM,WAAW,GAAa,MAAwC;GAErE,MAAMC,WAAS,UAAU,GAAG;AAC5B,OAAIA,SAAQ,QAAOA;AACnB,UAAO;;EAER,MAAM,SAAS,QAAQ,MAAM;AAC7B,MAAI,QAAQ,eAAe,QAAQ,aAClC,QAAO;EAER,MAAM,eAAe,MAAM,QAAQ,QAChC,KAAK,KAAK,GAAG,MAAM,CAAC,GAAG,MACvB,cAAc,QACb,OAAO,QAAQ,QACf;AACJ,OAAK,MAAM,CAAC,GAAG,MAAM,cAAc;GAClC,MAAM,YAAY,KAAK,CAAC,GAAG,MAAM,IAAI;AACrC,OAAI,WAAW,YACd,QAAO;;AAGT,SAAO;;AAER,MAAK,IAAI;;;;;AClCV,SAAgB,WAAW,GAAW,GAAkB;CACvD,MAAM,OAAO,IAAI,IAAI,MAAM;AAC3B,QAAO,EACN,SAAS,GAAG,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE;;AAIlD,SAAgB,WAAW,GAAW,GAAkB;CACvD,MAAM,OAAO,EAAE,SAAS,EAAE,SAAS,MAAM;AACzC,QAAO,EACN,SAAS,GAAG,OAAO,KAAK,IAAI,EAAE,SAAS,EAAE,QAAQ,KAAK,EAAE,OAAO,EAAE;;AAInE,SAAgB,YAAY,GAAY,GAAmB;AAC1D,QAAO,EACN,SAAS,GAAG,EAAE,KAAK;;AAIrB,SAAgB,WACf,GACA,GACA,SACQ;CACR,IAAI,UAAU;CACd,MAAMC,QAAwB;CAC9B,MAAMC,UAA4B;CAClC,MAAMC,UAA4B;AAElC,QAAO,IAAI,MAAM,UAAU;EAC1B,IAAIC;AACJ,OAAK,OAAO,MAAM;GACjB,MAAM,QAAQ,EAAE;AAChB,OAAI,UAAU,OACb,SAAQ,KAAK,CAAC,KAAK,KAAK,UAAU;QAC5B;IACN,MAAM,QAAQ,QAAQ,OAAO;AAC7B,QAAI,MAAM,YAAY,YACrB,SAAQ,KAAK,CAAC,KAAK;;;;AAMvB,QAAO,IAAI,MAAM,UAAU;EAC1B,IAAIA;AACJ,OAAK,OAAO,MAAM;GACjB,MAAM,QAAQ,EAAE;AAChB,OAAI,UAAU,OACb,OAAM,KAAK,CAAC,KAAK,KAAK,UAAU;;;AAKnC,WAAU,IAAI,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI,QAAQ;AAE1D,QAAO;EACN;EACA;EACA;EACA;;;AAIF,SAAgB,UACf,GACA,GACA,SACQ;AACR,QAAO,WAAW,GAAU,GAAU;;AAavC,IAAa,SAAb,MAGE;CACD,AAAO;CACP,AAAO;CACP,AAAO;CACP,AAAO;CAEP,AAAO,YACN,cACA,cACA,eAGC;AACD,OAAK,eAAe;AACpB,OAAK,eAAe;AACpB,OAAK,cAAc;AACnB,OAAK,cAAc;AACnB,OAAK,MAAM,OAAO,OAAO,KAAK,aAAa,YAAY;GACtD,MAAM,eAAe,cAAc;AACnC,QAAK,YAAY,OAAqB;;AAEvC,OAAK,MAAM,OAAO,OAAO,KAAK,aAAa,YAAY;GACtD,MAAM,eAAe,cAAc;AACnC,QAAK,YAAY,OAAqB;;;CAIxC,AAAO,KAAK,GAAY,GAAmB;AAC1C,MAAI,MAAM,EACT,QAAO,EAAE,SAAS;EAGnB,MAAM,WAAW,KAAK,aAAa,OAAO,MAAM,KAAK,aAAa,OAAO;EACzE,MAAM,WAAW,KAAK,aAAa,OAAO,MAAM,KAAK,aAAa,OAAO;AAEzE,MAAI,aAAa,QAAQ,aAAa,MACrC;OAAI,SAAS,SAAS,SAAS,MAAM;AACpC,QAAI,SAAS,QAAQ,KAAK,aAAa;KACtC,MAAM,QAAQ,KAAK,YAAY,SAAS,MACvC,SAAS,MACT,SAAS;AAEV,YAAO;;AAER,QAAI,SAAS,QAAQ,KAAK,aAAa;KACtC,MAAM,QAAQ,KAAK,YAAY,SAAS,MACvC,SAAS,MACT,SAAS,OACR,GAAG,MAAM,KAAK,KAAK,GAAG;AAExB,YAAO;;;;EAIV,MAAM,QAAQ,aAAa;EAC3B,MAAM,QAAQ,aAAa;AAC3B,MAAI,UAAU,MACb,QAAO,EACN,SAAS,GAAG,MAAM,KAAK;AAGzB,SAAO,EACN,SAAS,gBAAgB,MAAM,KAAK;;;AAKvC,MAAaC,aAWT,IAAI,OAAO,mBAAmB,kBAAkB;CACnD,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,aAAa,EAAE,SAAS;CACxB,QAAQ;CACR,OAAO"}
1
+ {"version":3,"file":"index.js","names":["base: AtomTokenIndex","base: SelectorTokenIndex","tokens: TransactionToken<Fn>[]","primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","state: unknown","resources: (readonly [ReadableToken<unknown>, number])[]","result","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-timeline-family.ts","../../src/introspection/attach-timeline-index.ts","../../src/introspection/attach-transaction-index.ts","../../src/introspection/attach-transaction-logs.ts","../../src/introspection/refinery.ts","../../src/introspection/attach-type-selectors.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/sprawl.ts","../../src/introspection/differ.ts"],"sourcesContent":["import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: AtomTokenIndex = new Map()\n\t\t\t\tfor (const [key, val] of store.atoms) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(atomToken.key)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, atomToken)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.set(atomToken.key, atomToken)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tstore.on.atomDisposal.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<\n\tSelectorToken<unknown, any, any>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Selector Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log (Internal)`,\n\t\tdefault: (key) =>\n\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\ttype: `timeline`,\n\t\t\t\tkey: ``,\n\t\t\t\tat: 0,\n\t\t\t\ttimeTraveling: null,\n\t\t\t\thistory: [],\n\t\t\t\tselectorTime: null,\n\t\t\t\ttransactionKey: null,\n\t\t\t\tinstall: () => {},\n\t\t\t\tsubject: new Subject(),\n\t\t\t\tsubscriptions: new Map(),\n\t\t\t},\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\tsetSelf({ ...tl })\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTimelineLogState = createSelectorFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t})\n\treturn findTimelineLogState\n}\n","import type { AtomToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): AtomToken<TimelineToken<any>[]> => {\n\treturn createRegularAtom<TimelineToken<any>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken<any> => {\n\t\t\t\t\treturn { key, type: `timeline` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.timelineCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(timelineToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, timelineToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, TransactionToken } from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Fn>[]> => {\n\treturn createRegularAtom<TransactionToken<Fn>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Fn>[] = []\n\t\t\t\tfor (const [key] of store.transactions) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({ key, type: `transaction` })\n\t\t\t\t}\n\t\t\t\treturn tokens\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(transactionToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type {\n\tReadonlyPureSelectorFamilyToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<\n\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\tstring\n> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log (Internal)`,\n\t\tdefault: () => [],\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\tif (transactionUpdate.token.key === key) {\n\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(transactionUpdateLogAtoms, key),\n\t})\n\treturn findTransactionUpdateLogState\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}> = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import type { Loadable, ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 State Type`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\tasync ({ get }) => {\n\t\t\t\tlet state: unknown\n\t\t\t\ttry {\n\t\t\t\t\tconst token =\n\t\t\t\t\t\tstore.atoms.get(key) ??\n\t\t\t\t\t\tstore.writableSelectors.get(key) ??\n\t\t\t\t\t\tstore.readonlySelectors.get(key)\n\t\t\t\t\tif (token === undefined) {\n\t\t\t\t\t\tthrow new Error(`Could not find state with key \"${key}\"`)\n\t\t\t\t\t}\n\t\t\t\t\tstate = get(token)\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn `error`\n\t\t\t\t}\n\t\t\t\tif (state instanceof Promise) {\n\t\t\t\t\tstate = await state\n\t\t\t\t}\n\t\t\t\tconst typeOfState = discoverType(state)\n\t\t\t\treturn typeOfState\n\t\t\t},\n\t})\n\treturn typeSelectors\n}\n","import type {\n\tAtomToken,\n\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tTimelineToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { Fn, RootStore, Store, Timeline } from \"atom.io/internal\"\n\nimport { type AtomTokenIndex, attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\nimport { attachTimelineFamily } from \"./attach-timeline-family\"\nimport { attachTimelineIndex } from \"./attach-timeline-index\"\nimport { attachTransactionIndex } from \"./attach-transaction-index\"\nimport { attachTransactionLogs } from \"./attach-transaction-logs\"\nimport { attachTypeSelectors } from \"./attach-type-selectors\"\n\nexport type IntrospectionStates = {\n\tatomIndex: AtomToken<AtomTokenIndex>\n\tselectorIndex: AtomToken<SelectorTokenIndex>\n\ttransactionIndex: AtomToken<TransactionToken<Fn>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[],\n\t\tstring\n\t>\n\ttimelineIndex: AtomToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (\n\tstore: RootStore,\n): IntrospectionStates => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\ttransactionLogSelectors: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\ttimelineSelectors: attachTimelineFamily(store),\n\t\ttypeSelectors: attachTypeSelectors(store),\n\t}\n}\n","import {\n\ttype AtomToken,\n\tgetState,\n\ttype ReadableToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport { IMPLICIT, type Store } from \"atom.io/internal\"\n\nimport type { FamilyNode } from \".\"\nimport type { AtomTokenIndex } from \"./attach-atom-index\"\nimport { attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\n\nexport type ListResourcesParam = {\n\tatomFamilies: boolean\n\tselectorFamilies: boolean\n}\n\n/**\n * Auditor is a tool for identifying lingering resources in your store that may result in memory leaks.\n * @experimental\n */\nexport class Auditor {\n\tpublic readonly store: Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: AtomToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: AtomToken<SelectorTokenIndex>\n\tpublic disposed = false\n\n\tprivate readonly unsubscribeFromAtomCreation: () => void\n\tprivate readonly unsubscribeFromAtomDisposal: () => void\n\tprivate readonly unsubscribeFromSelectorCreation: () => void\n\tprivate readonly unsubscribeFromSelectorDisposal: () => void\n\n\t/**\n\t * @param {Store} store - The store to audit.\n\t */\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.atomIndex = attachAtomIndex(this.store)\n\t\tthis.selectorIndex = attachSelectorIndex(this.store)\n\t\tthis.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromSelectorCreation =\n\t\t\tthis.store.on.selectorCreation.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.set(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tperformance.now() - this.auditorCreatedAt,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\t\tthis.unsubscribeFromSelectorDisposal =\n\t\t\tthis.store.on.selectorDisposal.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t\t},\n\t\t\t)\n\t}\n\n\tpublic static readonly DEFAULT_LIST_RESOURCES_PARAM: ListResourcesParam = {\n\t\tatomFamilies: true,\n\t\tselectorFamilies: true,\n\t} satisfies ListResourcesParam\n\t/**\n\t * Lists all resources in the store, along with their creation time.\n\t *\n\t * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.\n\t * @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.\n\t */\n\tpublic listResources(\n\t\tparam: ListResourcesParam = Auditor.DEFAULT_LIST_RESOURCES_PARAM,\n\t): (readonly [ReadableToken<unknown>, number])[] {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error(`This Auditor has been disposed`)\n\t\t}\n\t\tconst atoms = getState(this.atomIndex)\n\t\tconst selectors = getState(this.selectorIndex)\n\t\tconst atomFamilyNodes = [...atoms.values()].filter(\n\t\t\t(node): node is FamilyNode<AtomToken<unknown>> => `familyMembers` in node,\n\t\t)\n\t\tconst selectorFamilyNodes = [...selectors.values()].filter(\n\t\t\t(node): node is FamilyNode<SelectorToken<unknown>> =>\n\t\t\t\t`familyMembers` in node,\n\t\t)\n\t\tconst currentTime = performance.now()\n\t\tconst resources: (readonly [ReadableToken<unknown>, number])[] = []\n\t\tif (param.atomFamilies) {\n\t\t\tfor (const familyNode of atomFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (param.selectorFamilies) {\n\t\t\tfor (const familyNode of selectorFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn resources\n\t}\n\n\tpublic [Symbol.dispose](): void {\n\t\tthis.unsubscribeFromAtomCreation()\n\t\tthis.unsubscribeFromAtomDisposal()\n\t\tthis.unsubscribeFromSelectorCreation()\n\t\tthis.unsubscribeFromSelectorDisposal()\n\t\tthis.disposed = true\n\t}\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n> = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ //#region src/internal/is-fn.ts
2
+ const NON_CTOR_FN_REGEX = /^\[object (?:Async|Generator|AsyncGenerator)?Function\]$/;
3
+ function isFn(input) {
4
+ const protoString = Object.prototype.toString.call(input);
5
+ return NON_CTOR_FN_REGEX.test(protoString);
6
+ }
7
+
8
+ //#endregion
9
+ export { isFn };
10
+ //# sourceMappingURL=is-fn-DY1wZ-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-fn-DY1wZ-md.js","names":[],"sources":["../src/internal/is-fn.ts"],"sourcesContent":["import type { Fn } from \"./utility-types\"\n\nconst NON_CTOR_FN_REGEX =\n\t/^\\[object (?:Async|Generator|AsyncGenerator)?Function\\]$/\n\nexport function isFn(input: unknown): input is Fn {\n\tconst protoString = Object.prototype.toString.call(input)\n\treturn NON_CTOR_FN_REGEX.test(protoString)\n}\n"],"mappings":";AAEA,MAAM,oBACL;AAED,SAAgB,KAAK,OAA6B;CACjD,MAAM,cAAc,OAAO,UAAU,SAAS,KAAK,MAAM;AACzD,QAAO,kBAAkB,KAAK,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\n/** Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** The collective or \"union\" type of the keys in a set of entries */\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\n/** The type of the value of entry `K` in a set of entries `E` */\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\n/** The type of a set of entries `E` in object form */\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\n/** Typed form of `Object.fromEntries` */\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\n/** The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** Typed form of `Object.entries` */\nexport function toEntries<T extends object>(obj: T): ToEntries<T> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type { ViewOf } from \"atom.io\"\n\nexport * from \"./entries\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\t/** A value can survive being {@link JSON.stringify}-ed and {@link JSON.parse}-d fully intact */\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\n/** A generic that retains the type information of a {@link Json.Serializable} value while in string form */\n// biome-ignore format: long silly ternary\nexport type stringified<J extends Json.Serializable> = (\n J extends string\n ? `\"${J}\"`\n : J extends number\n ? `${J}`\n : J extends true\n ? `true`\n : J extends false\n ? `false`\n : J extends boolean\n ? `false` | `true`\n : J extends null\n ? `null`\n : J extends []\n ? `[]`\n : J extends [infer Element extends Json.Serializable]\n ? `[${stringified<Element>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t\tinfer Element3 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}, ${stringified<Element3>}]`\n : J extends any[]\n ? `[${string}]` & { __json?: J }\n : string & { __json?: J }\n )\n\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson<J extends Json.Serializable>(str: stringified<J>): J\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson(str: string): Json.Serializable\nexport function parseJson(str: string): Json.Serializable {\n\treturn JSON.parse(str)\n}\n\n/** Type-safe wrapper for {@link JSON.stringify} */\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\n/** Only Canonical values should be used for keys because they always serialize to the same string */\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\n/** A function whose parameters and return value are {@link Json.Serializable} */\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: ViewOf<T>) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n"],"mappings":";;AAqBA,SAAgB,YAA+B,SAA4B;AAC1E,QAAO,OAAO,YAAY;;;AAO3B,SAAgB,UAA4B,KAAsB;AACjE,QAAO,OAAO,QAAQ;;;;;ACyCvB,SAAgB,UAAU,KAAgC;AACzD,QAAO,KAAK,MAAM;;;AAInB,MAAa,iBACZ,SACoB,KAAK,UAAU;AAapC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;;AAER,MAAa,UAAU,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe;AACxC,QAAO,gBAAgB,SAAS;;AAGjC,MAAa,kBAAkB;CAC9B;CACA;CACA;CACA;CACA;CACA;;AAcD,MAAaA,gBAA2B;CACvC,OAAO;CACP,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,QAAQ"}
1
+ {"version":3,"file":"index.js","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\n/** Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** The collective or \"union\" type of the keys in a set of entries */\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\n/** The type of the value of entry `K` in a set of entries `E` */\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\n/** The type of a set of entries `E` in object form */\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\n/** Typed form of `Object.fromEntries` */\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\n/** The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** Typed form of `Object.entries` */\nexport function toEntries<T extends object>(obj: T): ToEntries<T> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type { ViewOf } from \"atom.io\"\n\nexport * from \"./entries\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\t/** A value can survive being {@link JSON.stringify}-ed and {@link JSON.parse}-d fully intact */\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\n/** A generic that retains the type information of a {@link Json.Serializable} value while in string form */\n// biome-ignore format: long silly ternary\nexport type stringified<J extends Json.Serializable> = (\n J extends string\n ? `\"${J}\"`\n : J extends number\n ? `${J}`\n : J extends true\n ? `true`\n : J extends false\n ? `false`\n : J extends boolean\n ? `false` | `true`\n : J extends null\n ? `null`\n : J extends []\n ? `[]`\n : J extends [infer Element extends Json.Serializable]\n ? `[${stringified<Element>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t\tinfer Element3 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}, ${stringified<Element3>}]`\n : J extends any[]\n ? `[${string}]` & { __json?: J }\n : string & { __json?: J }\n )\n\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson<J extends Json.Serializable>(str: stringified<J>): J\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson(str: string): Json.Serializable\nexport function parseJson(str: string): Json.Serializable {\n\treturn JSON.parse(str)\n}\n\n/** Type-safe wrapper for {@link JSON.stringify} */\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\n/** Only Canonical values should be used for keys because they always serialize to the same string */\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\n/** A function whose parameters and return value are {@link Json.Serializable} */\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: ViewOf<T>) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n"],"mappings":";;AAqBA,SAAgB,YAA+B,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;;;AAOnC,SAAgB,UAA4B,KAAsB;AACjE,QAAO,OAAO,QAAQ,IAAI;;;;;ACyC3B,SAAgB,UAAU,KAAgC;AACzD,QAAO,KAAK,MAAM,IAAI;;;AAIvB,MAAa,iBACZ,SACoB,KAAK,UAAU,KAAK;AAazC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;CACP;AACD,MAAa,UAAU,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;;AAG3C,MAAa,kBAAkB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;AAaD,MAAaA,gBAA2B;CACvC,OAAO,EAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,EAAE;CACV,QAAQ;CACR"}
@@ -1,6 +1,6 @@
1
1
  import { AsJSON, ConstructorOf, Ctor, Each, EnvironmentData, Flat, Fn as Fn$1, Junction, JunctionEntriesBase, JunctionSchemaBase, Refinement, RootStore, Store, Transceiver } from "atom.io/internal";
2
- import { Canonical, Json, stringified } from "atom.io/json";
3
2
  import { MutableAtomFamilyToken as MutableAtomFamilyToken$1, MutableAtomToken as MutableAtomToken$1, ReadableFamilyToken as ReadableFamilyToken$1, ReadableToken as ReadableToken$1, ReadonlyPureSelectorToken as ReadonlyPureSelectorToken$1, ReadonlySelectorFamilyToken as ReadonlySelectorFamilyToken$1, ReadonlySelectorToken as ReadonlySelectorToken$1, RegularAtomToken as RegularAtomToken$1, ViewOf as ViewOf$1, WritableFamilyToken as WritableFamilyToken$1, WritableSelectorFamilyToken as WritableSelectorFamilyToken$1, WritableSelectorToken as WritableSelectorToken$1, WritableToken as WritableToken$1, findState as findState$1 } from "atom.io";
3
+ import { Canonical, Json, stringified } from "atom.io/json";
4
4
  import { SetRTX } from "atom.io/transceivers/set-rtx";
5
5
 
6
6
  //#region src/main/timeline.d.ts
@@ -320,31 +320,6 @@ type TimelineEvent<ManagedAtom extends TimelineManageable> = {
320
320
  checkpoint?: true;
321
321
  } & (AtomUpdateEvent<AtomOnly<ManagedAtom>> | StateCreationEvent<AtomOnly<ManagedAtom>> | StateDisposalEvent<AtomOnly<ManagedAtom>> | TimelineSelectorUpdateEvent<ManagedAtom> | TransactionOutcomeEvent<TransactionToken<any>>);
322
322
  //#endregion
323
- //#region src/main/set-state.d.ts
324
- /**
325
- * A function that sets the value of a state.
326
- * @param oldValue - The current value of the state.
327
- * @returns
328
- * The new value of the state.
329
- */
330
- type Setter<T, New extends T> = (oldValue: T) => New;
331
- /**
332
- * Set the value of a state into the implicit store.
333
- * @param token - An atom or writable selector token.
334
- * @param value - The new value of the state.
335
- * @overload Default
336
- * @default
337
- */
338
- declare function setState<T, New extends T>(token: WritableToken<T, any, any>, value: New | Setter<T, New>): void;
339
- /**
340
- * Set the value of a state into the implicit store.
341
- * @param token - An atom family or writable selector family token.
342
- * @param key - The unique key of the state to set.
343
- * @param value - The new value of the state.
344
- * @overload Streamlined
345
- */
346
- declare function setState<T, K extends Canonical, New extends T, Key extends K>(token: WritableFamilyToken<T, K, any>, key: Key, value: New | Setter<T, New>): void;
347
- //#endregion
348
323
  //#region src/main/atom.d.ts
349
324
  type RegularAtomOptions<T, E = never> = {
350
325
  /** The unique identifier of the atom */
@@ -397,7 +372,7 @@ type Effectors<T> = {
397
372
  * Set the value of the atom
398
373
  * @param next - The new value of the atom, or a setter function
399
374
  */
400
- setSelf: <New extends T>(next: New | Setter<T, New>) => void;
375
+ setSelf: <New extends T>(next: New | ((old: T) => New)) => void;
401
376
  /** Subscribe to changes to the atom */
402
377
  onSet: (callback: (options: StateUpdate<T>) => void) => void;
403
378
  };
@@ -486,7 +461,7 @@ declare function findState<T extends Transceiver<any, any, any>, K extends Canon
486
461
  * The current value of the state
487
462
  * @overload Regular Atom
488
463
  */
489
- declare function findState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken$1<T, K>;
464
+ declare function findState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken$1<T, Key>;
490
465
  /**
491
466
  * Finds a {@link WritableSelectorToken} in the store, without accessing its value.
492
467
  *
@@ -500,7 +475,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Regular
500
475
  * The current value of the state
501
476
  * @overload Writable Selector
502
477
  */
503
- declare function findState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken$1<T, K>, key: Key): WritableSelectorToken$1<T, K>;
478
+ declare function findState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken$1<T, K>, key: Key): WritableSelectorToken$1<T, Key>;
504
479
  /**
505
480
  * Finds a {@link ReadonlySelectorToken} in the store, without accessing its value.
506
481
  *
@@ -514,7 +489,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Writabl
514
489
  * The current value of the state
515
490
  * @overload Readonly Selector
516
491
  */
517
- declare function findState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken$1<T, K>, key: Key): ReadonlySelectorToken$1<T, K>;
492
+ declare function findState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken$1<T, K>, key: Key): ReadonlySelectorToken$1<T, Key>;
518
493
  /**
519
494
  * Finds a {@link WritableToken} in the store, without accessing its value.
520
495
  *
@@ -528,7 +503,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Readonl
528
503
  * The current value of the state
529
504
  * @overload Writable State
530
505
  */
531
- declare function findState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken$1<T, K>, key: Key): WritableToken$1<T, K>;
506
+ declare function findState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken$1<T, K>, key: Key): WritableToken$1<T, Key>;
532
507
  /**
533
508
  * Finds a {@link MutableAtomToken} in the store, without accessing its value.
534
509
  *
@@ -543,7 +518,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Writabl
543
518
  * @overload Unknown
544
519
  * @default
545
520
  */
546
- declare function findState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken$1<T, K>, key: Key): ReadableToken$1<T, K>;
521
+ declare function findState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken$1<T, K>, key: Key): ReadableToken$1<T, Key>;
547
522
  //#endregion
548
523
  //#region src/main/get-state.d.ts
549
524
  /**
@@ -561,7 +536,7 @@ declare function getState<T, E = never>(token: ReadableToken<T, any, E>): ViewOf
561
536
  * @return The current value of the state
562
537
  * @overload Streamlined
563
538
  */
564
- declare function getState<T, K extends Canonical, Key extends K, E = never>(token: ReadableFamilyToken<T, K, E>, key: Key): ViewOf$1<E | T>;
539
+ declare function getState<T, K extends Canonical, E = never>(token: ReadableFamilyToken<T, K, E>, key: NoInfer<K>): ViewOf$1<E | T>;
565
540
  //#endregion
566
541
  //#region src/main/join.d.ts
567
542
  type JoinOptions<ASide extends string, AType extends string, BSide extends string, BType extends string, Cardinality extends `1:1` | `1:n` | `n:n`, Content extends Json.Object | null> = Flat<JunctionSchemaBase<ASide, BSide> & {
@@ -837,6 +812,31 @@ declare function resetState(token: WritableToken<any, any, any>): void;
837
812
  */
838
813
  declare function resetState<K extends Canonical>(token: WritableFamilyToken<any, K, any>, key: K): void;
839
814
  //#endregion
815
+ //#region src/main/set-state.d.ts
816
+ /**
817
+ * A function that sets the value of a state.
818
+ * @param oldValue - The current value of the state.
819
+ * @returns
820
+ * The new value of the state.
821
+ */
822
+ type Setter<T> = (oldValue: T) => T;
823
+ /**
824
+ * Set the value of a state into the implicit store.
825
+ * @param token - An atom or writable selector token.
826
+ * @param value - The new value of the state.
827
+ * @overload Default
828
+ * @default
829
+ */
830
+ declare function setState<T, TT extends T>(token: WritableToken<T, any, any>, value: Setter<TT> | TT): void;
831
+ /**
832
+ * Set the value of a state into the implicit store.
833
+ * @param token - An atom family or writable selector family token.
834
+ * @param key - The unique key of the state to set.
835
+ * @param value - The new value of the state.
836
+ * @overload Streamlined
837
+ */
838
+ declare function setState<T, TT extends T, K extends Canonical>(token: WritableFamilyToken<T, K, any>, key: NoInfer<K>, value: Setter<TT> | TT): void;
839
+ //#endregion
840
840
  //#region src/main/transaction.d.ts
841
841
  type ReaderToolkit = Pick<ActorToolkit, `find` | `get` | `json`>;
842
842
  type WriterToolkit = Pick<ActorToolkit, `find` | `get` | `json` | `set`>;