atom.io 0.33.13 → 0.33.14

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 (37) hide show
  1. package/dist/data/index.js.map +1 -1
  2. package/dist/eslint-plugin/index.js.map +1 -1
  3. package/dist/internal/index.js +25 -23
  4. package/dist/internal/index.js.map +1 -1
  5. package/dist/introspection/index.d.ts +7 -7
  6. package/dist/introspection/index.d.ts.map +1 -1
  7. package/dist/introspection/index.js +26 -38
  8. package/dist/introspection/index.js.map +1 -1
  9. package/dist/json/index.js.map +1 -1
  10. package/dist/main/index.js +11 -11
  11. package/dist/main/index.js.map +1 -1
  12. package/dist/react/index.js.map +1 -1
  13. package/dist/react-devtools/index.css +110 -56
  14. package/dist/react-devtools/index.css.map +1 -1
  15. package/dist/react-devtools/index.js +38 -14
  16. package/dist/react-devtools/index.js.map +1 -1
  17. package/dist/realtime/index.js.map +1 -1
  18. package/dist/realtime-client/index.js.map +1 -1
  19. package/dist/realtime-react/index.js.map +1 -1
  20. package/dist/realtime-server/index.js.map +1 -1
  21. package/dist/realtime-testing/index.js.map +1 -1
  22. package/dist/transceivers/set-rtx/index.js.map +1 -1
  23. package/dist/use-o-BrXc7Qro.js.map +1 -1
  24. package/dist/web/index.js.map +1 -1
  25. package/package.json +6 -6
  26. package/src/internal/transaction/create-transaction.ts +9 -5
  27. package/src/introspection/attach-atom-index.ts +6 -15
  28. package/src/introspection/attach-introspection-states.ts +5 -5
  29. package/src/introspection/attach-selector-index.ts +78 -85
  30. package/src/introspection/attach-timeline-index.ts +5 -12
  31. package/src/introspection/attach-transaction-index.ts +18 -16
  32. package/src/introspection/auditor.ts +2 -3
  33. package/src/react-devtools/StateIndex.tsx +44 -20
  34. package/src/react-devtools/TimelineIndex.tsx +16 -12
  35. package/src/react-devtools/TransactionIndex.tsx +22 -18
  36. package/src/react-devtools/devtools.css +110 -56
  37. package/src/react-devtools/store.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  import * as Internal from "atom.io/internal";
2
2
  import { Flat, Func, Refinement, Store, Timeline } from "atom.io/internal";
3
3
  import { Json } from "atom.io/json";
4
- import { AtomToken, Loadable, ReadableToken, ReadonlyPureSelectorFamilyToken, ReadonlyPureSelectorToken, SelectorToken, TimelineToken, TransactionToken, TransactionUpdate } from "atom.io";
4
+ import { AtomToken, Loadable, ReadableToken, ReadonlyPureSelectorFamilyToken, SelectorToken, TimelineToken, TransactionToken, TransactionUpdate } from "atom.io";
5
5
 
6
6
  //#region src/introspection/attach-atom-index.d.ts
7
7
  type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown>>;
@@ -11,11 +11,11 @@ type SelectorTokenIndex = WritableTokenIndex<SelectorToken<unknown>>;
11
11
  //#endregion
12
12
  //#region src/introspection/attach-introspection-states.d.ts
13
13
  type IntrospectionStates = {
14
- atomIndex: ReadonlyPureSelectorToken<AtomTokenIndex>;
15
- selectorIndex: ReadonlyPureSelectorToken<SelectorTokenIndex>;
16
- transactionIndex: ReadonlyPureSelectorToken<TransactionToken<Func>[]>;
14
+ atomIndex: AtomToken<AtomTokenIndex>;
15
+ selectorIndex: AtomToken<SelectorTokenIndex>;
16
+ transactionIndex: AtomToken<TransactionToken<Func>[]>;
17
17
  transactionLogSelectors: ReadonlyPureSelectorFamilyToken<TransactionUpdate<Func>[], string>;
18
- timelineIndex: ReadonlyPureSelectorToken<TimelineToken<any>[]>;
18
+ timelineIndex: AtomToken<TimelineToken<any>[]>;
19
19
  timelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>;
20
20
  typeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>;
21
21
  };
@@ -34,8 +34,8 @@ declare class Auditor {
34
34
  readonly store: Internal.Store;
35
35
  auditorCreatedAt: number;
36
36
  statesCreatedAt: Map<string, number>;
37
- readonly atomIndex: ReadonlyPureSelectorToken<AtomTokenIndex>;
38
- readonly selectorIndex: ReadonlyPureSelectorToken<SelectorTokenIndex>;
37
+ readonly atomIndex: AtomToken<AtomTokenIndex>;
38
+ readonly selectorIndex: AtomToken<SelectorTokenIndex>;
39
39
  disposed: boolean;
40
40
  private readonly unsubscribeFromAtomCreation;
41
41
  private readonly unsubscribeFromAtomDisposal;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["store: Store","store: Store","store: Store","store: Internal.Store","param: ListResourcesParam","supported: SupportedTypes","input: T","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}>","input: unknown","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}>","a: number","b: number","a: string","b: string","a: boolean","b: boolean","a: Json.Tree.Object","b: Json.Tree.Object","recurse: Diff<unknown>","a: Json.Tree.Array","b: Json.Tree.Array","a: T","b: T","recurse: Differ<any, any>[`diff`]","leafRefinery: Refinery<Leaf>","treeRefinery: Refinery<Tree>","diffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }","a: unknown","b: unknown","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>","input: unknown","path: string[]","node: unknown","tree: Array<unknown> | object","inspector: InspectNode"],"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":["store: Store","store: Store","store: Store","store: Internal.Store","param: ListResourcesParam","supported: SupportedTypes","input: T","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}>","input: unknown","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}>","a: number","b: number","a: string","b: string","a: boolean","b: boolean","a: Json.Tree.Object","b: Json.Tree.Object","recurse: Diff<unknown>","a: Json.Tree.Array","b: Json.Tree.Array","a: T","b: T","recurse: Differ<any, any>[`diff`]","leafRefinery: Refinery<Leaf>","treeRefinery: Refinery<Tree>","diffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }","a: unknown","b: unknown","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>","input: unknown","path: string[]","node: unknown","tree: Array<unknown> | object","inspector: InspectNode"],"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,11 +1,11 @@
1
1
  import * as Internal from "atom.io/internal";
2
- import { Subject, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneSelector, deposit, isReservedIntrospectionKey } from "atom.io/internal";
2
+ import { Subject, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, deposit, isReservedIntrospectionKey } from "atom.io/internal";
3
3
  import { getState } from "atom.io";
4
4
 
5
5
  //#region src/introspection/attach-atom-index.ts
6
6
  const attachAtomIndex = (store) => {
7
- const atomTokenIndexState__INTERNAL = createRegularAtom(store, {
8
- key: `🔍 Atom Token Index (Internal)`,
7
+ return createRegularAtom(store, {
8
+ key: `🔍 Atom Token Index`,
9
9
  default: () => {
10
10
  const base = /* @__PURE__ */ new Map();
11
11
  for (const [key, val] of store.atoms) {
@@ -41,7 +41,7 @@ const attachAtomIndex = (store) => {
41
41
  }
42
42
  familyNode.familyMembers.set(subKey, atomToken);
43
43
  } else self.set(atomToken.key, atomToken);
44
- return self;
44
+ return new Map(self);
45
45
  });
46
46
  });
47
47
  store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
@@ -53,23 +53,19 @@ const attachAtomIndex = (store) => {
53
53
  familyNode.familyMembers.delete(subKey);
54
54
  if (familyNode.familyMembers.size === 0) self.delete(familyKey);
55
55
  }
56
- } else self.delete(atomToken.key);
57
- return self;
56
+ }
57
+ return new Map(self);
58
58
  });
59
59
  });
60
60
  }]
61
61
  }, void 0);
62
- return createStandaloneSelector(store, {
63
- key: `🔍 Atom Token Index`,
64
- get: ({ get }) => get(atomTokenIndexState__INTERNAL)
65
- });
66
62
  };
67
63
 
68
64
  //#endregion
69
65
  //#region src/introspection/attach-selector-index.ts
70
66
  const attachSelectorIndex = (store) => {
71
- const readonlySelectorTokenIndexState__INTERNAL = createRegularAtom(store, {
72
- key: `🔍 Selector Token Index (Internal)`,
67
+ return createRegularAtom(store, {
68
+ key: `🔍 Selector Token Index`,
73
69
  default: () => {
74
70
  const base = /* @__PURE__ */ new Map();
75
71
  for (const map of [store.readonlySelectors, store.writableSelectors]) for (const [key, val] of map) {
@@ -105,7 +101,7 @@ const attachSelectorIndex = (store) => {
105
101
  }
106
102
  familyNode.familyMembers.set(subKey, selectorToken);
107
103
  } else self.set(selectorToken.key, selectorToken);
108
- return self;
104
+ return new Map(self);
109
105
  });
110
106
  });
111
107
  store.on.selectorDisposal.subscribe(`introspection`, (selectorToken) => {
@@ -118,15 +114,11 @@ const attachSelectorIndex = (store) => {
118
114
  if (familyNode.familyMembers.size === 0) self.delete(familyKey);
119
115
  }
120
116
  } else self.delete(selectorToken.key);
121
- return self;
117
+ return new Map(self);
122
118
  });
123
119
  });
124
120
  }]
125
121
  }, void 0);
126
- return createStandaloneSelector(store, {
127
- key: `🔍 Selector Token Index`,
128
- get: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL)
129
- });
130
122
  };
131
123
 
132
124
  //#endregion
@@ -163,8 +155,8 @@ const attachTimelineFamily = (store) => {
163
155
  //#endregion
164
156
  //#region src/introspection/attach-timeline-index.ts
165
157
  const attachTimelineIndex = (store) => {
166
- const timelineTokenIndexState__INTERNAL = createRegularAtom(store, {
167
- key: `🔍 Timeline Token Index (Internal)`,
158
+ return createRegularAtom(store, {
159
+ key: `🔍 Timeline Token Index`,
168
160
  default: () => [...store.timelines].map(([key]) => {
169
161
  return {
170
162
  key,
@@ -177,35 +169,31 @@ const attachTimelineIndex = (store) => {
177
169
  });
178
170
  }]
179
171
  }, void 0);
180
- const timelineTokenIndex = createStandaloneSelector(store, {
181
- key: `🔍 Timeline Token Index`,
182
- get: ({ get }) => get(timelineTokenIndexState__INTERNAL)
183
- });
184
- return timelineTokenIndex;
185
172
  };
186
173
 
187
174
  //#endregion
188
175
  //#region src/introspection/attach-transaction-index.ts
189
176
  const attachTransactionIndex = (store) => {
190
- const transactionTokenIndexState__INTERNAL = createRegularAtom(store, {
191
- key: `🔍 Transaction Token Index (Internal)`,
192
- default: () => [...store.transactions].map(([key]) => {
193
- return {
194
- key,
195
- type: `transaction`
196
- };
197
- }),
177
+ return createRegularAtom(store, {
178
+ key: `🔍 Transaction Token Index`,
179
+ default: () => {
180
+ const tokens = [];
181
+ for (const [key] of store.transactions) {
182
+ if (isReservedIntrospectionKey(key)) continue;
183
+ tokens.push({
184
+ key,
185
+ type: `transaction`
186
+ });
187
+ }
188
+ return tokens;
189
+ },
198
190
  effects: [({ setSelf }) => {
199
191
  store.on.transactionCreation.subscribe(`introspection`, (transactionToken) => {
192
+ if (isReservedIntrospectionKey(transactionToken.key)) return;
200
193
  setSelf((state) => [...state, transactionToken]);
201
194
  });
202
195
  }]
203
196
  }, void 0);
204
- const transactionTokenIndex = createStandaloneSelector(store, {
205
- key: `🔍 Transaction Token Index`,
206
- get: ({ get }) => get(transactionTokenIndexState__INTERNAL)
207
- });
208
- return transactionTokenIndex;
209
197
  };
210
198
 
211
199
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["store: Store","base: AtomTokenIndex","store: Store","base: SelectorTokenIndex","store: Store","store: Store","store: Store","store: Store","supported: SupportedTypes","input: T","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}>","input: unknown","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}>","store: Store","state: unknown","store: Store","store: Internal.Store","param: ListResourcesParam","resources: (readonly [ReadableToken<unknown>, number])[]","tree: Array<unknown> | object","inspector: InspectNode","path: string[]","node: unknown","p: string[]","n: unknown","result","a: number","b: number","a: string","b: string","a: boolean","b: boolean","a: Json.Tree.Object","b: Json.Tree.Object","recurse: Diff<unknown>","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","a: Json.Tree.Array","b: Json.Tree.Array","leafRefinery: Refinery<Leaf>","treeRefinery: Refinery<Tree>","diffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }","a: unknown","b: unknown","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, ReadonlyPureSelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tcreateStandaloneSelector,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown>>\n\nexport const attachAtomIndex = (\n\tstore: Store,\n): ReadonlyPureSelectorToken<AtomTokenIndex> => {\n\tconst atomTokenIndexState__INTERNAL = createRegularAtom<AtomTokenIndex>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index (Internal)`,\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 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} else {\n\t\t\t\t\t\t\t\tself.delete(atomToken.key)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn 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\treturn createStandaloneSelector(store, {\n\t\tkey: `🔍 Atom Token Index`,\n\t\tget: ({ get }) => get(atomTokenIndexState__INTERNAL),\n\t})\n}\n","import type { ReadonlyPureSelectorToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tcreateStandaloneSelector,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<SelectorToken<unknown>>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): ReadonlyPureSelectorToken<SelectorTokenIndex> => {\n\tconst readonlySelectorTokenIndexState__INTERNAL =\n\t\tcreateRegularAtom<SelectorTokenIndex>(\n\t\t\tstore,\n\n\t\t\t{\n\t\t\t\tkey: `🔍 Selector Token Index (Internal)`,\n\t\t\t\tdefault: () => {\n\t\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: val.family.key,\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\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbase.set(key, token)\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\treturn base\n\t\t\t\t},\n\t\t\t\teffects: [\n\t\t\t\t\t({ setSelf }) => {\n\t\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn self\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\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\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn self\n\t\t\t\t\t\t\t\t})\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\tundefined,\n\t\t)\n\treturn createStandaloneSelector(store, {\n\t\tkey: `🔍 Selector Token Index`,\n\t\tget: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),\n\t})\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { Store, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: Store,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring\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<Timeline<any>, string>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Update Log`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) =>\n\t\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t\t},\n\t)\n\treturn findTimelineLogState\n}\n","import type { ReadonlyPureSelectorToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom, createStandaloneSelector } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): ReadonlyPureSelectorToken<TimelineToken<any>[]> => {\n\tconst timelineTokenIndexState__INTERNAL = createRegularAtom<\n\t\tTimelineToken<any>[]\n\t>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index (Internal)`,\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\tconst timelineTokenIndex = createStandaloneSelector(store, {\n\t\tkey: `🔍 Timeline Token Index`,\n\t\tget: ({ get }) => get(timelineTokenIndexState__INTERNAL),\n\t})\n\treturn timelineTokenIndex\n}\n","import type { ReadonlyPureSelectorToken, TransactionToken } from \"atom.io\"\nimport type { Func, Store } from \"atom.io/internal\"\nimport { createRegularAtom, createStandaloneSelector } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): ReadonlyPureSelectorToken<TransactionToken<Func>[]> => {\n\tconst transactionTokenIndexState__INTERNAL = createRegularAtom<\n\t\tTransactionToken<Func>[]\n\t>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index (Internal)`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.transactions].map(([key]): TransactionToken<Func> => {\n\t\t\t\t\treturn { key, type: `transaction` }\n\t\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\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\tconst transactionTokenIndex = createStandaloneSelector(store, {\n\t\tkey: `🔍 Transaction Token Index`,\n\t\tget: ({ get }) => get(transactionTokenIndexState__INTERNAL),\n\t})\n\treturn transactionTokenIndex\n}\n","import type { ReadonlyPureSelectorFamilyToken, TransactionUpdate } from \"atom.io\"\nimport type { Func, Store } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: Store,\n): ReadonlyPureSelectorFamilyToken<TransactionUpdate<Func>[], string> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionUpdate<Func>[],\n\t\tstring\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.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\tTransactionUpdate<Func>[],\n\t\tstring\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 { Store } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: Store,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring\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\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tReadonlyPureSelectorToken,\n\tTimelineToken,\n\tTransactionToken,\n\tTransactionUpdate,\n} from \"atom.io\"\nimport type { Func, 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: ReadonlyPureSelectorToken<AtomTokenIndex>\n\tselectorIndex: ReadonlyPureSelectorToken<SelectorTokenIndex>\n\ttransactionIndex: ReadonlyPureSelectorToken<TransactionToken<Func>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionUpdate<Func>[],\n\t\tstring\n\t>\n\ttimelineIndex: ReadonlyPureSelectorToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (store: Store): 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 ReadonlyPureSelectorToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport * as Internal 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: Internal.Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: ReadonlyPureSelectorToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: ReadonlyPureSelectorToken<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: Internal.Store = Internal.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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"}
1
+ {"version":3,"file":"index.js","names":["store: Store","base: AtomTokenIndex","store: Store","base: SelectorTokenIndex","store: Store","store: Store","store: Store","tokens: TransactionToken<Func>[]","store: Store","supported: SupportedTypes","input: T","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}>","input: unknown","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}>","store: Store","state: unknown","store: Store","store: Internal.Store","param: ListResourcesParam","resources: (readonly [ReadableToken<unknown>, number])[]","tree: Array<unknown> | object","inspector: InspectNode","path: string[]","node: unknown","p: string[]","n: unknown","result","a: number","b: number","a: string","b: string","a: boolean","b: boolean","a: Json.Tree.Object","b: Json.Tree.Object","recurse: Diff<unknown>","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","a: Json.Tree.Array","b: Json.Tree.Array","leafRefinery: Refinery<Leaf>","treeRefinery: Refinery<Tree>","diffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }","a: unknown","b: unknown","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>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex>(\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<SelectorToken<unknown>>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex>(\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 { Store, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: Store,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring\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<Timeline<any>, string>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Update Log`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) =>\n\t\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t\t},\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>[]>(\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 { Func, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Func>[]> => {\n\treturn createRegularAtom<TransactionToken<Func>[]>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Func>[] = []\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 { ReadonlyPureSelectorFamilyToken, TransactionUpdate } from \"atom.io\"\nimport type { Func, Store } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: Store,\n): ReadonlyPureSelectorFamilyToken<TransactionUpdate<Func>[], string> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionUpdate<Func>[],\n\t\tstring\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.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\tTransactionUpdate<Func>[],\n\t\tstring\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 { Store } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: Store,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring\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\tTransactionToken,\n\tTransactionUpdate,\n} from \"atom.io\"\nimport type { Func, 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<Func>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionUpdate<Func>[],\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 = (store: Store): 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 * as Internal 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: Internal.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: Internal.Store = Internal.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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["entries: E","obj: T","atom: AtomIO.AtomToken<T>","transform: JsonInterface<T, J>","store: Store","store: Store","atomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>","transform: JsonInterface<T, J>","str: S | string","json: J","input: unknown","JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/select-json.ts","../../src/json/select-json-family.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\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\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\nexport function toEntries<T extends object>(\n\tobj: T,\n): Entries<keyof T, T[keyof T]> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createStandaloneSelector, IMPLICIT } from \"atom.io/internal\"\n\nimport type { Json, JsonInterface } from \".\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.WritablePureSelectorToken<J> => {\n\treturn createStandaloneSelector(store, {\n\t\tkey: `${atom.key}:JSON`,\n\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\tset: ({ set }, newValue) => {\n\t\t\tset(atom, transform.fromJson(newValue))\n\t\t},\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store, Transceiver } from \"atom.io/internal\"\nimport { createWritablePureSelectorFamily } from \"atom.io/internal\"\n\nimport type { Canonical, Json, JsonInterface } from \".\"\n\nexport function selectJsonFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K> {\n\tconst jsonFamily = createWritablePureSelectorFamily<J, K>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `${atomFamilyToken.key}:JSON`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) => {\n\t\t\t\t\tconst baseState = get(atomFamilyToken, key)\n\t\t\t\t\treturn transform.toJson(baseState)\n\t\t\t\t},\n\t\t\tset:\n\t\t\t\t(key) =>\n\t\t\t\t({ set }, newValue) => {\n\t\t\t\t\tset(atomFamilyToken, key, transform.fromJson(newValue))\n\t\t\t\t},\n\t\t},\n\t\t[`mutable`, `json`],\n\t)\n\treturn jsonFamily\n}\n","export * from \"./entries\"\nexport * from \"./select-json\"\nexport * from \"./select-json-family\"\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\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\nexport type stringified<J extends Json.Serializable> = J extends string\n\t? `\"${J}\"`\n\t: J extends number\n\t\t? `${J}`\n\t\t: J extends true\n\t\t\t? `true`\n\t\t\t: J extends false\n\t\t\t\t? `false`\n\t\t\t\t: J extends boolean\n\t\t\t\t\t? `false` | `true`\n\t\t\t\t\t: J extends null\n\t\t\t\t\t\t? `null`\n\t\t\t\t\t\t: string & { __json?: J }\n\nexport const parseJson = <S extends stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: 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":";;;AAgBA,SAAgB,YAA+BA,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;AAClC;AAED,SAAgB,UACfC,KAC+B;AAC/B,QAAO,OAAO,QAAQ,IAAI;AAC1B;;;;AClBD,MAAa,aAAa,CACzBC,MACAC,WACAC,QAAe,SAAS,UACiB;AACzC,QAAO,yBAAyB,OAAO;EACtC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;EACvB,KAAK,CAAC,EAAE,KAAK,KAAK,UAAU,OAAO,IAAI,KAAK,CAAC;EAC7C,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa;AAC3B,OAAI,MAAM,UAAU,SAAS,SAAS,CAAC;EACvC;CACD,EAAC;AACF;;;;ACMD,SAAgB,iBAKfC,OACAC,iBAGAC,WAC+C;CAC/C,MAAM,aAAa,iCAClB,OACA;EACC,KAAK,GAAG,gBAAgB,IAAI,KAAK,CAAC;EAClC,KACC,CAAC,QACD,CAAC,EAAE,KAAK,KAAK;GACZ,MAAM,YAAY,IAAI,iBAAiB,IAAI;AAC3C,UAAO,UAAU,OAAO,UAAU;EAClC;EACF,KACC,CAAC,QACD,CAAC,EAAE,KAAK,EAAE,aAAa;AACtB,OAAI,iBAAiB,KAAK,UAAU,SAAS,SAAS,CAAC;EACvD;CACF,GACD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,AAAC,EACnB;AACD,QAAO;AACP;;;;ACTD,MAAa,YAAY,CACxBC,QAC4D,KAAK,MAAM,IAAI;AAE5E,MAAa,gBAAgB,CAC5BC,SACoB,KAAK,UAAU,KAAK;AAWzC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;AACP;AACD,MAAa,SAAS,CAACC,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,iBAAqB,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;AAC1C;AAED,MAAa,kBAAkB;CAC9B,CAAC,KAAK,CAAC;CACP,CAAC,OAAO,CAAC;CACT,CAAC,IAAI,CAAC;CACN,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;AACR;AAaD,MAAaC,gBAA2B;CACvC,OAAO,CAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,CAAE;CACV,QAAQ,EAAE;AACV"}
1
+ {"version":3,"file":"index.js","names":["entries: E","obj: T","atom: AtomIO.AtomToken<T>","transform: JsonInterface<T, J>","store: Store","store: Store","atomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>","transform: JsonInterface<T, J>","str: S | string","json: J","input: unknown","JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/select-json.ts","../../src/json/select-json-family.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\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\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\nexport function toEntries<T extends object>(\n\tobj: T,\n): Entries<keyof T, T[keyof T]> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createStandaloneSelector, IMPLICIT } from \"atom.io/internal\"\n\nimport type { Json, JsonInterface } from \".\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.WritablePureSelectorToken<J> => {\n\treturn createStandaloneSelector(store, {\n\t\tkey: `${atom.key}:JSON`,\n\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\tset: ({ set }, newValue) => {\n\t\t\tset(atom, transform.fromJson(newValue))\n\t\t},\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store, Transceiver } from \"atom.io/internal\"\nimport { createWritablePureSelectorFamily } from \"atom.io/internal\"\n\nimport type { Canonical, Json, JsonInterface } from \".\"\n\nexport function selectJsonFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritablePureSelectorFamilyToken<J, K> {\n\tconst jsonFamily = createWritablePureSelectorFamily<J, K>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `${atomFamilyToken.key}:JSON`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) => {\n\t\t\t\t\tconst baseState = get(atomFamilyToken, key)\n\t\t\t\t\treturn transform.toJson(baseState)\n\t\t\t\t},\n\t\t\tset:\n\t\t\t\t(key) =>\n\t\t\t\t({ set }, newValue) => {\n\t\t\t\t\tset(atomFamilyToken, key, transform.fromJson(newValue))\n\t\t\t\t},\n\t\t},\n\t\t[`mutable`, `json`],\n\t)\n\treturn jsonFamily\n}\n","export * from \"./entries\"\nexport * from \"./select-json\"\nexport * from \"./select-json-family\"\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\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\nexport type stringified<J extends Json.Serializable> = J extends string\n\t? `\"${J}\"`\n\t: J extends number\n\t\t? `${J}`\n\t\t: J extends true\n\t\t\t? `true`\n\t\t\t: J extends false\n\t\t\t\t? `false`\n\t\t\t\t: J extends boolean\n\t\t\t\t\t? `false` | `true`\n\t\t\t\t\t: J extends null\n\t\t\t\t\t\t? `null`\n\t\t\t\t\t\t: string & { __json?: J }\n\nexport const parseJson = <S extends stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: 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":";;;AAgBA,SAAgB,YAA+BA,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;AAClC;AAED,SAAgB,UACfC,KAC+B;AAC/B,QAAO,OAAO,QAAQ,IAAI;AAC1B;;;;AClBD,MAAa,aAAa,CACzBC,MACAC,WACAC,QAAe,SAAS,UACiB;AACzC,QAAO,yBAAyB,OAAO;EACtC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;EACvB,KAAK,CAAC,EAAE,KAAK,KAAK,UAAU,OAAO,IAAI,KAAK,CAAC;EAC7C,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa;GAC3B,IAAI,MAAM,UAAU,SAAS,SAAS,CAAC;EACvC;CACD,EAAC;AACF;;;;ACMD,SAAgB,iBAKfC,OACAC,iBAGAC,WAC+C;CAC/C,MAAM,aAAa,iCAClB,OACA;EACC,KAAK,GAAG,gBAAgB,IAAI,KAAK,CAAC;EAClC,KACC,CAAC,QACD,CAAC,EAAE,KAAK,KAAK;GACZ,MAAM,YAAY,IAAI,iBAAiB,IAAI;AAC3C,UAAO,UAAU,OAAO,UAAU;EAClC;EACF,KACC,CAAC,QACD,CAAC,EAAE,KAAK,EAAE,aAAa;GACtB,IAAI,iBAAiB,KAAK,UAAU,SAAS,SAAS,CAAC;EACvD;CACF,GACD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,AAAC,EACnB;AACD,QAAO;AACP;;;;ACTD,MAAa,YAAY,CACxBC,QAC4D,KAAK,MAAM,IAAI;AAE5E,MAAa,gBAAgB,CAC5BC,SACoB,KAAK,UAAU,KAAK;AAWzC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;AACP;AACD,MAAa,SAAS,CAACC,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;AAC1C;AAED,MAAa,kBAAkB;CAC9B,CAAC,KAAK,CAAC;CACP,CAAC,OAAO,CAAC;CACT,CAAC,IAAI,CAAC;CACN,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;CACR,CAAC,MAAM,CAAC;AACR;AAaD,MAAaC,gBAA2B;CACvC,OAAO,CAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,CAAE;CACV,QAAQ,EAAE;AACV"}
@@ -178,21 +178,21 @@ var Silo = class {
178
178
  install;
179
179
  constructor(config, fromStore = null) {
180
180
  const s = this.store = new Store(config, fromStore);
181
- this.atom = (options) => createStandaloneAtom(s, options);
182
- this.atomFamily = (options) => createAtomFamily(s, options);
183
- this.selector = (options) => createStandaloneSelector(s, options);
184
- this.selectorFamily = (options) => createSelectorFamily(s, options);
181
+ this.atom = ((options) => createStandaloneAtom(s, options));
182
+ this.atomFamily = ((options) => createAtomFamily(s, options));
183
+ this.selector = ((options) => createStandaloneSelector(s, options));
184
+ this.selectorFamily = ((options) => createSelectorFamily(s, options));
185
185
  this.transaction = (options) => createTransaction(s, options);
186
186
  this.timeline = (options) => createTimeline(s, options);
187
- this.findState = (...params) => findInStore(s, ...params);
188
- this.getState = (...params) => getFromStore(s, ...params);
189
- this.setState = (...params) => {
187
+ this.findState = ((...params) => findInStore(s, ...params));
188
+ this.getState = ((...params) => getFromStore(s, ...params));
189
+ this.setState = ((...params) => {
190
190
  setIntoStore(s, ...params);
191
- };
192
- this.disposeState = (...params) => {
191
+ });
192
+ this.disposeState = ((...params) => {
193
193
  disposeFromStore(s, ...params);
194
- };
195
- this.subscribe = (...params) => subscribeInStore(s, ...params);
194
+ });
195
+ this.subscribe = ((...params) => subscribeInStore(s, ...params));
196
196
  this.undo = (token) => {
197
197
  timeTravel(s, `undo`, token);
198
198
  };