atom.io 0.44.15 → 0.45.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/eslint-plugin/index.js +1 -1
  2. package/dist/introspection/index.d.ts +3 -2
  3. package/dist/introspection/index.d.ts.map +1 -1
  4. package/dist/introspection/index.js.map +1 -1
  5. package/dist/json/index.d.ts +34 -20
  6. package/dist/json/index.d.ts.map +1 -1
  7. package/dist/json/index.js +40 -2
  8. package/dist/json/index.js.map +1 -1
  9. package/dist/main/index.d.ts +1 -1
  10. package/dist/main/index.d.ts.map +1 -1
  11. package/dist/react/index.d.ts +4 -4
  12. package/dist/react/index.d.ts.map +1 -1
  13. package/dist/react/index.js +13 -1
  14. package/dist/react/index.js.map +1 -1
  15. package/dist/react-devtools/index.d.ts.map +1 -1
  16. package/dist/react-devtools/index.js.map +1 -1
  17. package/dist/realtime-client/index.d.ts +1 -1
  18. package/dist/realtime-client/index.d.ts.map +1 -1
  19. package/dist/realtime-client/index.js.map +1 -1
  20. package/dist/realtime-react/index.js.map +1 -1
  21. package/dist/realtime-testing/index.js +1 -1
  22. package/dist/transceivers/o-list/index.d.ts +1 -2
  23. package/dist/transceivers/o-list/index.d.ts.map +1 -1
  24. package/dist/transceivers/o-list/index.js +23 -24
  25. package/dist/transceivers/o-list/index.js.map +1 -1
  26. package/dist/transceivers/u-list/index.d.ts +1 -2
  27. package/dist/transceivers/u-list/index.d.ts.map +1 -1
  28. package/dist/transceivers/u-list/index.js +5 -6
  29. package/dist/transceivers/u-list/index.js.map +1 -1
  30. package/package.json +4 -12
  31. package/src/introspection/attach-introspection-states.ts +1 -1
  32. package/src/introspection/attach-transaction-logs.ts +2 -2
  33. package/src/introspection/index.ts +3 -0
  34. package/src/json/canonical.ts +42 -0
  35. package/src/json/enumeration.ts +36 -0
  36. package/src/json/index.ts +3 -132
  37. package/src/json/json.ts +128 -0
  38. package/src/main/index.ts +9 -2
  39. package/src/react/use-loadable.ts +10 -5
  40. package/src/react/use-o.ts +33 -1
  41. package/src/react-devtools/TransactionIndex.tsx +1 -1
  42. package/src/react-devtools/store.ts +3 -3
  43. package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +2 -2
  44. package/src/realtime-react/use-pull-selector-family-member.ts +0 -1
  45. package/src/transceivers/o-list/o-list.ts +27 -28
  46. package/src/transceivers/u-list/u-list.ts +7 -8
  47. package/dist/data/index.d.ts +0 -23
  48. package/dist/data/index.d.ts.map +0 -1
  49. package/dist/data/index.js +0 -63
  50. package/dist/data/index.js.map +0 -1
  51. package/dist/struct/index.d.ts +0 -14
  52. package/dist/struct/index.d.ts.map +0 -1
  53. package/dist/struct/index.js +0 -37
  54. package/dist/struct/index.js.map +0 -1
  55. package/src/data/dict.ts +0 -31
  56. package/src/data/index.ts +0 -3
  57. package/src/data/struct-family.ts +0 -53
  58. package/src/data/struct.ts +0 -54
  59. package/src/struct/index.ts +0 -1
  60. package/src/struct/micro.ts +0 -72
  61. /package/dist/{chunk-D8lmAICg.js → chunk-CKcAJnC7.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { t as __export } from "../chunk-D8lmAICg.js";
1
+ import { t as __export } from "../chunk-CKcAJnC7.js";
2
2
  import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
3
3
 
4
4
  //#region src/eslint-plugin/rules/exact-catch-types.ts
@@ -13,7 +13,7 @@ type IntrospectionStates = {
13
13
  atomIndex: AtomToken<AtomTokenIndex>;
14
14
  selectorIndex: AtomToken<SelectorTokenIndex>;
15
15
  transactionIndex: AtomToken<TransactionToken<Fn>[]>;
16
- transactionLogSelectors: ReadonlyPureSelectorFamilyToken<TransactionOutcomeEvent<TransactionToken<Fn>>[], string>;
16
+ transactionLogSelectors: ReadonlyPureSelectorFamilyToken<readonly TransactionOutcomeEvent<TransactionToken<Fn>>[], string>;
17
17
  timelineIndex: AtomToken<TimelineToken<any>[]>;
18
18
  timelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>;
19
19
  typeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>;
@@ -138,7 +138,8 @@ type FamilyNode<Token extends ReadableToken<unknown, any, any>> = {
138
138
  key: string;
139
139
  familyMembers: Map<string, Token>;
140
140
  };
141
+ type ReadonlyTokenIndex<Token extends ReadableToken<unknown, any, any>> = ReadonlyMap<string, FamilyNode<Token> | Token>;
141
142
  type WritableTokenIndex<Token extends ReadableToken<unknown, any, any>> = Map<string, FamilyNode<Token> | Token>;
142
143
  //#endregion
143
- export { Auditor, ClassSignature, Differ, FamilyNode, InspectNode, InspectionResult, IntrospectionStates, JsonType, ListResourcesParam, RefinementStrategy, RefinementSupport, Refinery, Supported, WritableTokenIndex, attachIntrospectionStates, diffArray, diffBoolean, diffNumber, diffObject, diffString, discoverType, isPlainObject, jsonRefinery, jsonTreeRefinery, prettyJson, primitiveRefinery, sprawl };
144
+ export { Auditor, ClassSignature, Differ, FamilyNode, InspectNode, InspectionResult, IntrospectionStates, JsonType, ListResourcesParam, ReadonlyTokenIndex, RefinementStrategy, RefinementSupport, Refinery, Supported, WritableTokenIndex, attachIntrospectionStates, diffArray, diffBoolean, diffNumber, diffObject, diffString, discoverType, isPlainObject, jsonRefinery, jsonTreeRefinery, prettyJson, primitiveRefinery, sprawl };
144
145
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/refinery.ts","../../src/introspection/differ.ts","../../src/introspection/sprawl.ts","../../src/introspection/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/refinery.ts","../../src/introspection/differ.ts","../../src/introspection/sprawl.ts","../../src/introspection/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["base: AtomTokenIndex","base: SelectorTokenIndex","tokens: TransactionToken<Fn>[]","primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","state: unknown","resources: (readonly [ReadableToken<unknown>, number])[]","result","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-timeline-family.ts","../../src/introspection/attach-timeline-index.ts","../../src/introspection/attach-transaction-index.ts","../../src/introspection/attach-transaction-logs.ts","../../src/introspection/refinery.ts","../../src/introspection/attach-type-selectors.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/sprawl.ts","../../src/introspection/differ.ts"],"sourcesContent":["import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: AtomTokenIndex = new Map()\n\t\t\t\tfor (const [key, val] of store.atoms) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(atomToken.key)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, atomToken)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.set(atomToken.key, atomToken)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tstore.on.atomDisposal.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<\n\tSelectorToken<unknown, any, any>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Selector Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log (Internal)`,\n\t\tdefault: (key) =>\n\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\ttype: `timeline`,\n\t\t\t\tkey: ``,\n\t\t\t\tat: 0,\n\t\t\t\ttimeTraveling: null,\n\t\t\t\thistory: [],\n\t\t\t\tselectorTime: null,\n\t\t\t\ttransactionKey: null,\n\t\t\t\tinstall: () => {},\n\t\t\t\tsubject: new Subject(),\n\t\t\t\tsubscriptions: new Map(),\n\t\t\t},\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\tsetSelf({ ...tl })\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTimelineLogState = createSelectorFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t})\n\treturn findTimelineLogState\n}\n","import type { AtomToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): AtomToken<TimelineToken<any>[]> => {\n\treturn createRegularAtom<TimelineToken<any>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken<any> => {\n\t\t\t\t\treturn { key, type: `timeline` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.timelineCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(timelineToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, timelineToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, TransactionToken } from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Fn>[]> => {\n\treturn createRegularAtom<TransactionToken<Fn>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Fn>[] = []\n\t\t\t\tfor (const [key] of store.transactions) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({ key, type: `transaction` })\n\t\t\t\t}\n\t\t\t\treturn tokens\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(transactionToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type {\n\tReadonlyPureSelectorFamilyToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<\n\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\tstring\n> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log (Internal)`,\n\t\tdefault: () => [],\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\tif (transactionUpdate.token.key === key) {\n\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(transactionUpdateLogAtoms, key),\n\t})\n\treturn findTransactionUpdateLogState\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}> = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import type { Loadable, ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 State Type`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\tasync ({ get }) => {\n\t\t\t\tlet state: unknown\n\t\t\t\ttry {\n\t\t\t\t\tconst token =\n\t\t\t\t\t\tstore.atoms.get(key) ??\n\t\t\t\t\t\tstore.writableSelectors.get(key) ??\n\t\t\t\t\t\tstore.readonlySelectors.get(key)\n\t\t\t\t\tif (token === undefined) {\n\t\t\t\t\t\tthrow new Error(`Could not find state with key \"${key}\"`)\n\t\t\t\t\t}\n\t\t\t\t\tstate = get(token)\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn `error`\n\t\t\t\t}\n\t\t\t\tif (state instanceof Promise) {\n\t\t\t\t\tstate = await state\n\t\t\t\t}\n\t\t\t\tconst typeOfState = discoverType(state)\n\t\t\t\treturn typeOfState\n\t\t\t},\n\t})\n\treturn typeSelectors\n}\n","import type {\n\tAtomToken,\n\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tTimelineToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { Fn, RootStore, Store, Timeline } from \"atom.io/internal\"\n\nimport { type AtomTokenIndex, attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\nimport { attachTimelineFamily } from \"./attach-timeline-family\"\nimport { attachTimelineIndex } from \"./attach-timeline-index\"\nimport { attachTransactionIndex } from \"./attach-transaction-index\"\nimport { attachTransactionLogs } from \"./attach-transaction-logs\"\nimport { attachTypeSelectors } from \"./attach-type-selectors\"\n\nexport type IntrospectionStates = {\n\tatomIndex: AtomToken<AtomTokenIndex>\n\tselectorIndex: AtomToken<SelectorTokenIndex>\n\ttransactionIndex: AtomToken<TransactionToken<Fn>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\tTransactionOutcomeEvent<TransactionToken<Fn>>[],\n\t\tstring\n\t>\n\ttimelineIndex: AtomToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (\n\tstore: RootStore,\n): IntrospectionStates => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\ttransactionLogSelectors: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\ttimelineSelectors: attachTimelineFamily(store),\n\t\ttypeSelectors: attachTypeSelectors(store),\n\t}\n}\n","import {\n\ttype AtomToken,\n\tgetState,\n\ttype ReadableToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport { IMPLICIT, type Store } from \"atom.io/internal\"\n\nimport type { FamilyNode } from \".\"\nimport type { AtomTokenIndex } from \"./attach-atom-index\"\nimport { attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\n\nexport type ListResourcesParam = {\n\tatomFamilies: boolean\n\tselectorFamilies: boolean\n}\n\n/**\n * Auditor is a tool for identifying lingering resources in your store that may result in memory leaks.\n * @experimental\n */\nexport class Auditor {\n\tpublic readonly store: Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: AtomToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: AtomToken<SelectorTokenIndex>\n\tpublic disposed = false\n\n\tprivate readonly unsubscribeFromAtomCreation: () => void\n\tprivate readonly unsubscribeFromAtomDisposal: () => void\n\tprivate readonly unsubscribeFromSelectorCreation: () => void\n\tprivate readonly unsubscribeFromSelectorDisposal: () => void\n\n\t/**\n\t * @param {Store} store - The store to audit.\n\t */\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.atomIndex = attachAtomIndex(this.store)\n\t\tthis.selectorIndex = attachSelectorIndex(this.store)\n\t\tthis.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromSelectorCreation =\n\t\t\tthis.store.on.selectorCreation.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.set(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tperformance.now() - this.auditorCreatedAt,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\t\tthis.unsubscribeFromSelectorDisposal =\n\t\t\tthis.store.on.selectorDisposal.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t\t},\n\t\t\t)\n\t}\n\n\tpublic static readonly DEFAULT_LIST_RESOURCES_PARAM: ListResourcesParam = {\n\t\tatomFamilies: true,\n\t\tselectorFamilies: true,\n\t} satisfies ListResourcesParam\n\t/**\n\t * Lists all resources in the store, along with their creation time.\n\t *\n\t * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.\n\t * @returns {readonly [ReadableToken<unknown>, number]}[] - An array of tuples, where each tuple contains a state token belonging to a family in the store and that state's creation time.\n\t */\n\tpublic listResources(\n\t\tparam: ListResourcesParam = Auditor.DEFAULT_LIST_RESOURCES_PARAM,\n\t): (readonly [ReadableToken<unknown>, number])[] {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error(`This Auditor has been disposed`)\n\t\t}\n\t\tconst atoms = getState(this.atomIndex)\n\t\tconst selectors = getState(this.selectorIndex)\n\t\tconst atomFamilyNodes = [...atoms.values()].filter(\n\t\t\t(node): node is FamilyNode<AtomToken<unknown>> => `familyMembers` in node,\n\t\t)\n\t\tconst selectorFamilyNodes = [...selectors.values()].filter(\n\t\t\t(node): node is FamilyNode<SelectorToken<unknown>> =>\n\t\t\t\t`familyMembers` in node,\n\t\t)\n\t\tconst currentTime = performance.now()\n\t\tconst resources: (readonly [ReadableToken<unknown>, number])[] = []\n\t\tif (param.atomFamilies) {\n\t\t\tfor (const familyNode of atomFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (param.selectorFamilies) {\n\t\t\tfor (const familyNode of selectorFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn resources\n\t}\n\n\tpublic [Symbol.dispose](): void {\n\t\tthis.unsubscribeFromAtomCreation()\n\t\tthis.unsubscribeFromAtomDisposal()\n\t\tthis.unsubscribeFromSelectorCreation()\n\t\tthis.unsubscribeFromSelectorDisposal()\n\t\tthis.disposed = true\n\t}\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n> = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["base: AtomTokenIndex","base: SelectorTokenIndex","tokens: TransactionToken<Fn>[]","primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}>","jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}>","state: unknown","resources: (readonly [ReadableToken<unknown>, number])[]","result","added: Delta[`added`]","removed: Delta[`removed`]","changed: Delta[`changed`]","key: string","prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n>"],"sources":["../../src/introspection/attach-atom-index.ts","../../src/introspection/attach-selector-index.ts","../../src/introspection/attach-timeline-family.ts","../../src/introspection/attach-timeline-index.ts","../../src/introspection/attach-transaction-index.ts","../../src/introspection/attach-transaction-logs.ts","../../src/introspection/refinery.ts","../../src/introspection/attach-type-selectors.ts","../../src/introspection/attach-introspection-states.ts","../../src/introspection/auditor.ts","../../src/introspection/sprawl.ts","../../src/introspection/differ.ts"],"sourcesContent":["import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type AtomTokenIndex = WritableTokenIndex<AtomToken<unknown, any, unknown>>\n\nexport const attachAtomIndex = (store: Store): AtomToken<AtomTokenIndex> => {\n\treturn createRegularAtom<AtomTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Atom Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: AtomTokenIndex = new Map()\n\t\t\t\tfor (const [key, val] of store.atoms) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(atomToken.key)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, atomToken)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.set(atomToken.key, atomToken)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tstore.on.atomDisposal.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\tif (atomToken.family) {\n\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = atomToken.family\n\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtom,\n\tdeposit,\n\tisReservedIntrospectionKey,\n} from \"atom.io/internal\"\n\nimport type { WritableTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = WritableTokenIndex<\n\tSelectorToken<unknown, any, any>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store,\n): AtomToken<SelectorTokenIndex> => {\n\treturn createRegularAtom<SelectorTokenIndex, never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Selector Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst base: SelectorTokenIndex = new Map()\n\t\t\t\tfor (const map of [store.readonlySelectors, store.writableSelectors]) {\n\t\t\t\t\tfor (const [key, val] of map) {\n\t\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = deposit(val)\n\t\t\t\t\t\tif (val.family) {\n\t\t\t\t\t\t\tlet familyNode = base.get(val.family.key)\n\t\t\t\t\t\t\tif (!familyNode || !(`familyMembers` in familyNode)) {\n\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\tkey: val.family.key,\n\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbase.set(val.family.key, familyNode)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfamilyNode.familyMembers.set(val.family.subKey, token)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbase.set(key, token)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn base\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.selectorCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(selectorToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tlet familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tfamilyNode === undefined ||\n\t\t\t\t\t\t\t\t\t\t!(`familyMembers` in familyNode)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode = {\n\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: new Map(),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.set(familyKey, familyNode)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.set(subKey, selectorToken)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.set(selectorToken.key, selectorToken)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\tstore.on.selectorDisposal.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\tsetSelf((self) => {\n\t\t\t\t\t\t\t\tif (selectorToken.family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = selectorToken.family\n\t\t\t\t\t\t\t\t\tconst familyNode = self.get(familyKey)\n\t\t\t\t\t\t\t\t\tif (familyNode && `familyMembers` in familyNode) {\n\t\t\t\t\t\t\t\t\t\tfamilyNode.familyMembers.delete(subKey)\n\t\t\t\t\t\t\t\t\t\tif (familyNode.familyMembers.size === 0) {\n\t\t\t\t\t\t\t\t\t\t\tself.delete(familyKey)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.delete(selectorToken.key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Map(self)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore, Timeline } from \"atom.io/internal\"\nimport {\n\tcreateRegularAtomFamily,\n\tcreateSelectorFamily,\n\tSubject,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Timeline<any>, string> => {\n\tconst findTimelineLogState__INTERNAL = createRegularAtomFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log (Internal)`,\n\t\tdefault: (key) =>\n\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\ttype: `timeline`,\n\t\t\t\tkey: ``,\n\t\t\t\tat: 0,\n\t\t\t\ttimeTraveling: null,\n\t\t\t\thistory: [],\n\t\t\t\tselectorTime: null,\n\t\t\t\ttransactionKey: null,\n\t\t\t\tinstall: () => {},\n\t\t\t\tsubject: new Subject(),\n\t\t\t\tsubscriptions: new Map(),\n\t\t\t},\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\tsetSelf({ ...tl })\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTimelineLogState = createSelectorFamily<\n\t\tTimeline<any>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Timeline Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(findTimelineLogState__INTERNAL, key),\n\t})\n\treturn findTimelineLogState\n}\n","import type { AtomToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createRegularAtom } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store,\n): AtomToken<TimelineToken<any>[]> => {\n\treturn createRegularAtom<TimelineToken<any>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Timeline Token Index`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken<any> => {\n\t\t\t\t\treturn { key, type: `timeline` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.timelineCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(timelineToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, timelineToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type { AtomToken, TransactionToken } from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { createRegularAtom, isReservedIntrospectionKey } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store,\n): AtomToken<TransactionToken<Fn>[]> => {\n\treturn createRegularAtom<TransactionToken<Fn>[], never, never>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `🔍 Transaction Token Index`,\n\t\t\tdefault: () => {\n\t\t\t\tconst tokens: TransactionToken<Fn>[] = []\n\t\t\t\tfor (const [key] of store.transactions) {\n\t\t\t\t\tif (isReservedIntrospectionKey(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({ key, type: `transaction` })\n\t\t\t\t}\n\t\t\t\treturn tokens\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.on.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tif (isReservedIntrospectionKey(transactionToken.key)) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t)\n}\n","import type {\n\tReadonlyPureSelectorFamilyToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createRegularAtomFamily, createSelectorFamily } from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<\n\treadonly TransactionOutcomeEvent<TransactionToken<any>>[],\n\tstring\n> => {\n\tconst transactionUpdateLogAtoms = createRegularAtomFamily<\n\t\tTransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log (Internal)`,\n\t\tdefault: () => [],\n\t\teffects: (key) => [\n\t\t\t({ setSelf }) => {\n\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\tif (transactionUpdate.token.key === key) {\n\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t],\n\t})\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\treadonly TransactionOutcomeEvent<TransactionToken<any>>[],\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 Transaction Update Log`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\t({ get }) =>\n\t\t\t\tget(transactionUpdateLogAtoms, key),\n\t})\n\treturn findTransactionUpdateLogState\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery: Refinery<{\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n}> = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery: Refinery<{\n\tobject: (input: unknown) => input is Json.Tree.Object\n\tarray: (input: unknown) => input is Json.Tree.Array\n\tnumber: (input: unknown) => input is number\n\tstring: (input: unknown) => input is string\n\tboolean: (input: unknown) => input is boolean\n\tnull: (input: unknown) => input is null\n}> = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import type { Loadable, ReadonlyPureSelectorFamilyToken } from \"atom.io\"\nimport type { RootStore } from \"atom.io/internal\"\nimport { createReadonlyPureSelectorFamily } from \"atom.io/internal\"\n\nimport { discoverType } from \"./refinery\"\n\nexport const attachTypeSelectors = (\n\tstore: RootStore,\n): ReadonlyPureSelectorFamilyToken<Loadable<string>, string> => {\n\tconst typeSelectors = createReadonlyPureSelectorFamily<\n\t\tLoadable<string>,\n\t\tstring,\n\t\tnever\n\t>(store, {\n\t\tkey: `🔍 State Type`,\n\t\tget:\n\t\t\t(key) =>\n\t\t\tasync ({ get }) => {\n\t\t\t\tlet state: unknown\n\t\t\t\ttry {\n\t\t\t\t\tconst token =\n\t\t\t\t\t\tstore.atoms.get(key) ??\n\t\t\t\t\t\tstore.writableSelectors.get(key) ??\n\t\t\t\t\t\tstore.readonlySelectors.get(key)\n\t\t\t\t\tif (token === undefined) {\n\t\t\t\t\t\tthrow new Error(`Could not find state with key \"${key}\"`)\n\t\t\t\t\t}\n\t\t\t\t\tstate = get(token)\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn `error`\n\t\t\t\t}\n\t\t\t\tif (state instanceof Promise) {\n\t\t\t\t\tstate = await state\n\t\t\t\t}\n\t\t\t\tconst typeOfState = discoverType(state)\n\t\t\t\treturn typeOfState\n\t\t\t},\n\t})\n\treturn typeSelectors\n}\n","import type {\n\tAtomToken,\n\tLoadable,\n\tReadonlyPureSelectorFamilyToken,\n\tTimelineToken,\n\tTransactionOutcomeEvent,\n\tTransactionToken,\n} from \"atom.io\"\nimport type { Fn, RootStore, Store, Timeline } from \"atom.io/internal\"\n\nimport { type AtomTokenIndex, attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\nimport { attachTimelineFamily } from \"./attach-timeline-family\"\nimport { attachTimelineIndex } from \"./attach-timeline-index\"\nimport { attachTransactionIndex } from \"./attach-transaction-index\"\nimport { attachTransactionLogs } from \"./attach-transaction-logs\"\nimport { attachTypeSelectors } from \"./attach-type-selectors\"\n\nexport type IntrospectionStates = {\n\tatomIndex: AtomToken<AtomTokenIndex>\n\tselectorIndex: AtomToken<SelectorTokenIndex>\n\ttransactionIndex: AtomToken<TransactionToken<Fn>[]>\n\ttransactionLogSelectors: ReadonlyPureSelectorFamilyToken<\n\t\treadonly TransactionOutcomeEvent<TransactionToken<Fn>>[],\n\t\tstring\n\t>\n\ttimelineIndex: AtomToken<TimelineToken<any>[]>\n\ttimelineSelectors: ReadonlyPureSelectorFamilyToken<Timeline<any>, string>\n\ttypeSelectors: ReadonlyPureSelectorFamilyToken<Loadable<string>, string>\n}\n\nexport const attachIntrospectionStates = (\n\tstore: RootStore,\n): IntrospectionStates => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\ttransactionLogSelectors: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\ttimelineSelectors: attachTimelineFamily(store),\n\t\ttypeSelectors: attachTypeSelectors(store),\n\t}\n}\n","import {\n\ttype AtomToken,\n\tgetState,\n\ttype ReadableToken,\n\ttype SelectorToken,\n} from \"atom.io\"\nimport { IMPLICIT, type Store } from \"atom.io/internal\"\n\nimport type { FamilyNode } from \".\"\nimport type { AtomTokenIndex } from \"./attach-atom-index\"\nimport { attachAtomIndex } from \"./attach-atom-index\"\nimport type { SelectorTokenIndex } from \"./attach-selector-index\"\nimport { attachSelectorIndex } from \"./attach-selector-index\"\n\nexport type ListResourcesParam = {\n\tatomFamilies: boolean\n\tselectorFamilies: boolean\n}\n\n/**\n * Auditor is a tool for identifying lingering resources in your store that may result in memory leaks.\n * @experimental\n */\nexport class Auditor {\n\tpublic readonly store: Store\n\tpublic auditorCreatedAt: number = performance.now()\n\tpublic statesCreatedAt: Map<string, number> = new Map()\n\tpublic readonly atomIndex: AtomToken<AtomTokenIndex>\n\tpublic readonly selectorIndex: AtomToken<SelectorTokenIndex>\n\tpublic disposed = false\n\n\tprivate readonly unsubscribeFromAtomCreation: () => void\n\tprivate readonly unsubscribeFromAtomDisposal: () => void\n\tprivate readonly unsubscribeFromSelectorCreation: () => void\n\tprivate readonly unsubscribeFromSelectorDisposal: () => void\n\n\t/**\n\t * @param {Store} store - The store to audit.\n\t */\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.atomIndex = attachAtomIndex(this.store)\n\t\tthis.selectorIndex = attachSelectorIndex(this.store)\n\t\tthis.unsubscribeFromAtomCreation = this.store.on.atomCreation.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.set(key, performance.now() - this.auditorCreatedAt)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromAtomDisposal = this.store.on.atomDisposal.subscribe(\n\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t({ key }) => {\n\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromSelectorCreation =\n\t\t\tthis.store.on.selectorCreation.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.set(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tperformance.now() - this.auditorCreatedAt,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\t\tthis.unsubscribeFromSelectorDisposal =\n\t\t\tthis.store.on.selectorDisposal.subscribe(\n\t\t\t\t`auditor-${this.auditorCreatedAt}`,\n\t\t\t\t({ key }) => {\n\t\t\t\t\tthis.statesCreatedAt.delete(key)\n\t\t\t\t},\n\t\t\t)\n\t}\n\n\tpublic static readonly DEFAULT_LIST_RESOURCES_PARAM: ListResourcesParam = {\n\t\tatomFamilies: true,\n\t\tselectorFamilies: true,\n\t} satisfies ListResourcesParam\n\t/**\n\t * Lists all resources in the store, along with their creation time.\n\t *\n\t * @param {ListResourcesParam} [param] - Optional parameters for filtering the list of resources.\n\t * @returns {readonly [ReadableToken<unknown>, number]}[] - An array of tuples, where each tuple contains a state token belonging to a family in the store and that state's creation time.\n\t */\n\tpublic listResources(\n\t\tparam: ListResourcesParam = Auditor.DEFAULT_LIST_RESOURCES_PARAM,\n\t): (readonly [ReadableToken<unknown>, number])[] {\n\t\tif (this.disposed) {\n\t\t\tthrow new Error(`This Auditor has been disposed`)\n\t\t}\n\t\tconst atoms = getState(this.atomIndex)\n\t\tconst selectors = getState(this.selectorIndex)\n\t\tconst atomFamilyNodes = [...atoms.values()].filter(\n\t\t\t(node): node is FamilyNode<AtomToken<unknown>> => `familyMembers` in node,\n\t\t)\n\t\tconst selectorFamilyNodes = [...selectors.values()].filter(\n\t\t\t(node): node is FamilyNode<SelectorToken<unknown>> =>\n\t\t\t\t`familyMembers` in node,\n\t\t)\n\t\tconst currentTime = performance.now()\n\t\tconst resources: (readonly [ReadableToken<unknown>, number])[] = []\n\t\tif (param.atomFamilies) {\n\t\t\tfor (const familyNode of atomFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (param.selectorFamilies) {\n\t\t\tfor (const familyNode of selectorFamilyNodes) {\n\t\t\t\tconst tokens = familyNode.familyMembers.values()\n\t\t\t\tfor (const token of tokens) {\n\t\t\t\t\tconst storedTime = this.statesCreatedAt.get(token.key)\n\t\t\t\t\tconst creationTime = storedTime ?? this.auditorCreatedAt\n\t\t\t\t\tconst age = currentTime - creationTime\n\t\t\t\t\tresources.push([token, age])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn resources\n\t}\n\n\tpublic [Symbol.dispose](): void {\n\t\tthis.unsubscribeFromAtomCreation()\n\t\tthis.unsubscribeFromAtomDisposal()\n\t\tthis.unsubscribeFromSelectorCreation()\n\t\tthis.unsubscribeFromSelectorDisposal()\n\t\tthis.disposed = true\n\t}\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson: Differ<\n\t{\n\t\tnumber: (input: unknown) => input is number\n\t\tstring: (input: unknown) => input is string\n\t\tboolean: (input: unknown) => input is boolean\n\t\tnull: (input: unknown) => input is null\n\t},\n\t{\n\t\tobject: (input: unknown) => input is Json.Tree.Object\n\t\tarray: (input: unknown) => input is Json.Tree.Array\n\t}\n> = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n"],"mappings":"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"}
@@ -1,23 +1,7 @@
1
1
  import { Count, Flat } from "atom.io/internal";
2
2
  import { ViewOf } from "atom.io";
3
3
 
4
- //#region src/json/entries.d.ts
5
- /** Tuples of `[key, value]` pairs, as returned from `Object.entries` */
6
- type Entries<K$1 extends PropertyKey = PropertyKey, V$1 = any> = [K$1, V$1][];
7
- /** The collective or "union" type of the keys in a set of entries */
8
- type KeyOfEntries<E extends Entries> = E extends [infer K, any][] ? K : never;
9
- /** The type of the value of entry `K` in a set of entries `E` */
10
- type ValueOfEntry<E extends Entries, K$1 extends KeyOfEntries<E>> = { [P in Count<E[`length`]>]: E[P] extends [K$1, infer V] ? V : never }[Count<E[`length`]>];
11
- /** The type of a set of entries `E` in object form */
12
- type FromEntries<E extends Entries> = Flat<{ [K in KeyOfEntries<E>]: ValueOfEntry<E, K> }>;
13
- /** Typed form of `Object.fromEntries` */
14
- declare function fromEntries<E extends Entries>(entries: E): FromEntries<E>;
15
- /** The type of an object T in {@link Entries} form */
16
- type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>;
17
- /** Typed form of `Object.entries` */
18
- declare function toEntries<T extends object>(obj: T): ToEntries<T>;
19
- //#endregion
20
- //#region src/json/index.d.ts
4
+ //#region src/json/json.d.ts
21
5
  type primitive = boolean | number | string | null;
22
6
  declare namespace Json {
23
7
  namespace Tree {
@@ -45,8 +29,6 @@ declare function parseJson<J extends Json.Serializable>(str: stringified<J>): J;
45
29
  declare function parseJson(str: string): Json.Serializable;
46
30
  /** Type-safe wrapper for {@link JSON.stringify} */
47
31
  declare const stringifyJson: <J extends Json.Serializable>(json: J) => stringified<J>;
48
- /** Only Canonical values should be used for keys because they always serialize to the same string */
49
- type Canonical = primitive | ReadonlyArray<Canonical>;
50
32
  /** A function whose parameters and return value are {@link Json.Serializable} */
51
33
  type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void;
52
34
  type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {
@@ -66,5 +48,37 @@ interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {
66
48
  }
67
49
  declare const JSON_DEFAULTS: JsonTypes;
68
50
  //#endregion
69
- export { Canonical, Entries, FromEntries, JSON_DEFAULTS, JSON_TYPE_NAMES, Json, JsonIO, JsonInterface, JsonTypeName, JsonTypes, KeyOfEntries, ToEntries, ValueOfEntry, fromEntries, isJson, parseJson, primitive, stringified, stringifyJson, toEntries };
51
+ //#region src/json/canonical.d.ts
52
+ /** Only Canonical values should be used for keys because they always serialize to the same string */
53
+ type Canonical = primitive | ReadonlyArray<Canonical>;
54
+ type packed<C extends Canonical> = string & {
55
+ __canonical?: C;
56
+ };
57
+ declare const packCanonical: <C extends Canonical>(value: Canonical) => packed<C>;
58
+ declare const unpackCanonical: <C extends Canonical>(value: packed<C>) => C;
59
+ //#endregion
60
+ //#region src/json/entries.d.ts
61
+ /** Tuples of `[key, value]` pairs, as returned from `Object.entries` */
62
+ type Entries<K$1 extends PropertyKey = PropertyKey, V$1 = any> = [K$1, V$1][];
63
+ /** The collective or "union" type of the keys in a set of entries */
64
+ type KeyOfEntries<E extends Entries> = E extends [infer K, any][] ? K : never;
65
+ /** The type of the value of entry `K` in a set of entries `E` */
66
+ type ValueOfEntry<E extends Entries, K$1 extends KeyOfEntries<E>> = { [P in Count<E[`length`]>]: E[P] extends [K$1, infer V] ? V : never }[Count<E[`length`]>];
67
+ /** The type of a set of entries `E` in object form */
68
+ type FromEntries<E extends Entries> = Flat<{ [K in KeyOfEntries<E>]: ValueOfEntry<E, K> }>;
69
+ /** Typed form of `Object.fromEntries` */
70
+ declare function fromEntries<E extends Entries>(entries: E): FromEntries<E>;
71
+ /** The type of an object T in {@link Entries} form */
72
+ type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>;
73
+ /** Typed form of `Object.entries` */
74
+ declare function toEntries<T extends object>(obj: T): ToEntries<T>;
75
+ //#endregion
76
+ //#region src/json/enumeration.d.ts
77
+ type IndexOf<T extends readonly unknown[], E, A extends unknown[] = []> = T extends readonly [infer Head, ...infer Tail] ? (<U>() => U extends Head ? 1 : 2) extends (<U>() => U extends E ? 1 : 2) ? A[`length`] : IndexOf<Tail, E, [...A, unknown]> : never;
78
+ type Flip<T extends Record<string, number | string>> = { [K in keyof T as T[K]]: K };
79
+ type TwoWay<T extends Record<string, number | string>> = Flip<T> & T;
80
+ type Enumeration<T extends readonly string[]> = Flat<TwoWay<{ [K in T[number]]: IndexOf<T, K> }>>;
81
+ declare function enumeration<T extends readonly string[]>(values: T): Enumeration<T>;
82
+ //#endregion
83
+ export { Canonical, Entries, Enumeration, Flip, FromEntries, IndexOf, JSON_DEFAULTS, JSON_TYPE_NAMES, Json, JsonIO, JsonInterface, JsonTypeName, JsonTypes, KeyOfEntries, ToEntries, TwoWay, ValueOfEntry, enumeration, fromEntries, isJson, packCanonical, packed, parseJson, primitive, stringified, stringifyJson, toEntries, unpackCanonical };
70
84
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/json.ts","../../src/json/canonical.ts","../../src/json/entries.ts","../../src/json/enumeration.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,3 +1,28 @@
1
+ //#region src/json/canonical.ts
2
+ const BOOL = `\u0001`;
3
+ const NULL = `\u0002`;
4
+ const STRING = `\u0003`;
5
+ const NUMBER = `\u0004`;
6
+ const packCanonical = (value) => {
7
+ if (value === null) return NULL;
8
+ switch (typeof value) {
9
+ case `string`: return STRING + value;
10
+ case `number`: return NUMBER + value;
11
+ case `boolean`: return BOOL + +value;
12
+ case `object`: return JSON.stringify(value);
13
+ }
14
+ };
15
+ const unpackCanonical = (value) => {
16
+ switch (value[0]) {
17
+ case STRING: return value.slice(1);
18
+ case NUMBER: return +value.slice(1);
19
+ case BOOL: return value.slice(1) === `1`;
20
+ case NULL: return null;
21
+ case `[`: return JSON.parse(value);
22
+ }
23
+ };
24
+
25
+ //#endregion
1
26
  //#region src/json/entries.ts
2
27
  /** Typed form of `Object.fromEntries` */
3
28
  function fromEntries(entries) {
@@ -9,7 +34,20 @@ function toEntries(obj) {
9
34
  }
10
35
 
11
36
  //#endregion
12
- //#region src/json/index.ts
37
+ //#region src/json/enumeration.ts
38
+ function enumeration(values) {
39
+ const result = {};
40
+ let i = 0;
41
+ for (const value of values) {
42
+ result[value] = i;
43
+ result[i] = value;
44
+ ++i;
45
+ }
46
+ return result;
47
+ }
48
+
49
+ //#endregion
50
+ //#region src/json/json.ts
13
51
  function parseJson(str) {
14
52
  return JSON.parse(str);
15
53
  }
@@ -46,5 +84,5 @@ const JSON_DEFAULTS = {
46
84
  };
47
85
 
48
86
  //#endregion
49
- export { JSON_DEFAULTS, JSON_TYPE_NAMES, fromEntries, isJson, parseJson, stringifyJson, toEntries };
87
+ export { JSON_DEFAULTS, JSON_TYPE_NAMES, enumeration, fromEntries, isJson, packCanonical, parseJson, stringifyJson, toEntries, unpackCanonical };
50
88
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/entries.ts","../../src/json/index.ts"],"sourcesContent":["import type { Count, Flat } from \"atom.io/internal\"\n\n/** Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** The collective or \"union\" type of the keys in a set of entries */\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\n/** The type of the value of entry `K` in a set of entries `E` */\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\n/** The type of a set of entries `E` in object form */\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\n/** Typed form of `Object.fromEntries` */\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\n/** The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** Typed form of `Object.entries` */\nexport function toEntries<T extends object>(obj: T): ToEntries<T> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type { ViewOf } from \"atom.io\"\n\nexport * from \"./entries\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\t/** A value can survive being {@link JSON.stringify}-ed and {@link JSON.parse}-d fully intact */\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\n/** A generic that retains the type information of a {@link Json.Serializable} value while in string form */\n// biome-ignore format: long silly ternary\nexport type stringified<J extends Json.Serializable> = (\n J extends string\n ? `\"${J}\"`\n : J extends number\n ? `${J}`\n : J extends true\n ? `true`\n : J extends false\n ? `false`\n : J extends boolean\n ? `false` | `true`\n : J extends null\n ? `null`\n : J extends []\n ? `[]`\n : J extends [infer Element extends Json.Serializable]\n ? `[${stringified<Element>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t\tinfer Element3 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}, ${stringified<Element3>}]`\n : J extends any[]\n ? `[${string}]` & { __json?: J }\n : string & { __json?: J }\n )\n\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson<J extends Json.Serializable>(str: stringified<J>): J\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson(str: string): Json.Serializable\nexport function parseJson(str: string): Json.Serializable {\n\treturn JSON.parse(str)\n}\n\n/** Type-safe wrapper for {@link JSON.stringify} */\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\n/** Only Canonical values should be used for keys because they always serialize to the same string */\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\n/** A function whose parameters and return value are {@link Json.Serializable} */\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: ViewOf<T>) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n"],"mappings":";;AAqBA,SAAgB,YAA+B,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;;;AAOnC,SAAgB,UAA4B,KAAsB;AACjE,QAAO,OAAO,QAAQ,IAAI;;;;;ACyC3B,SAAgB,UAAU,KAAgC;AACzD,QAAO,KAAK,MAAM,IAAI;;;AAIvB,MAAa,iBACZ,SACoB,KAAK,UAAU,KAAK;AAazC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;CACP;AACD,MAAa,UAAU,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;;AAG3C,MAAa,kBAAkB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;AAaD,MAAaA,gBAA2B;CACvC,OAAO,EAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,EAAE;CACV,QAAQ;CACR"}
1
+ {"version":3,"file":"index.js","names":["result: Record<any, any>","JSON_DEFAULTS: JsonTypes"],"sources":["../../src/json/canonical.ts","../../src/json/entries.ts","../../src/json/enumeration.ts","../../src/json/json.ts"],"sourcesContent":["import type { primitive } from \"./json\"\n\n/** Only Canonical values should be used for keys because they always serialize to the same string */\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\nexport type packed<C extends Canonical> = string & { __canonical?: C }\n\nconst BOOL = `\\u0001`\nconst NULL = `\\u0002`\nconst STRING = `\\u0003`\nconst NUMBER = `\\u0004`\nexport const packCanonical = <C extends Canonical>(\n\tvalue: Canonical,\n): packed<C> => {\n\tif (value === null) return NULL\n\t// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n\tswitch (typeof value) {\n\t\tcase `string`:\n\t\t\treturn STRING + value\n\t\tcase `number`:\n\t\t\treturn NUMBER + value\n\t\tcase `boolean`:\n\t\t\treturn BOOL + +value\n\t\tcase `object`: // array\n\t\t\treturn JSON.stringify(value)\n\t}\n}\nexport const unpackCanonical = <C extends Canonical>(value: packed<C>): C => {\n\tconst type = value[0] as `[` | `\\u0001` | `\\u0002` | `\\u0003` | `\\u0004`\n\tswitch (type) {\n\t\tcase STRING:\n\t\t\treturn value.slice(1) as C\n\t\tcase NUMBER:\n\t\t\treturn +value.slice(1) as C\n\t\tcase BOOL:\n\t\t\treturn (value.slice(1) === `1`) as C\n\t\tcase NULL:\n\t\t\treturn null as C\n\t\tcase `[`:\n\t\t\treturn JSON.parse(value)\n\t}\n}\n","import type { Count, Flat } from \"atom.io/internal\"\n\n/** Tuples of `[key, value]` pairs, as returned from `Object.entries` */\nexport type Entries<K extends PropertyKey = PropertyKey, V = any> = [K, V][]\n\n/** The collective or \"union\" type of the keys in a set of entries */\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\n/** The type of the value of entry `K` in a set of entries `E` */\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\n/** The type of a set of entries `E` in object form */\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\n/** Typed form of `Object.fromEntries` */\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\n/** The type of an object T in {@link Entries} form */\nexport type ToEntries<T extends object> = Entries<keyof T, T[keyof T]>\n\n/** Typed form of `Object.entries` */\nexport function toEntries<T extends object>(obj: T): ToEntries<T> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type { Flat } from \"atom.io/internal\"\n\nexport type IndexOf<\n\tT extends readonly unknown[],\n\tE,\n\tA extends unknown[] = [],\n> = T extends readonly [infer Head, ...infer Tail]\n\t? (<U>() => U extends Head ? 1 : 2) extends <U>() => U extends E ? 1 : 2\n\t\t? A[`length`]\n\t\t: IndexOf<Tail, E, [...A, unknown]>\n\t: never\n\nexport type Flip<T extends Record<string, number | string>> = {\n\t[K in keyof T as T[K]]: K\n}\n\nexport type TwoWay<T extends Record<string, number | string>> = Flip<T> & T\n\nexport type Enumeration<T extends readonly string[]> = Flat<\n\tTwoWay<{\n\t\t[K in T[number]]: IndexOf<T, K>\n\t}>\n>\n\nexport function enumeration<T extends readonly string[]>(\n\tvalues: T,\n): Enumeration<T> {\n\tconst result: Record<any, any> = {}\n\tlet i = 0\n\tfor (const value of values) {\n\t\tresult[value] = i\n\t\tresult[i] = value\n\t\t++i\n\t}\n\treturn result as Enumeration<T>\n}\n","import type { ViewOf } from \"atom.io\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\t/** A value can survive being {@link JSON.stringify}-ed and {@link JSON.parse}-d fully intact */\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\n/** A generic that retains the type information of a {@link Json.Serializable} value while in string form */\n// biome-ignore format: long silly ternary\nexport type stringified<J extends Json.Serializable> = (\n J extends string\n ? `\"${J}\"`\n : J extends number\n ? `${J}`\n : J extends true\n ? `true`\n : J extends false\n ? `false`\n : J extends boolean\n ? `false` | `true`\n : J extends null\n ? `null`\n : J extends []\n ? `[]`\n : J extends [infer Element extends Json.Serializable]\n ? `[${stringified<Element>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}]`\n : J extends [\n\t\t\t\t\tinfer Element1 extends Json.Serializable,\n\t\t\t\t\tinfer Element2 extends Json.Serializable,\n\t\t\t\t\tinfer Element3 extends Json.Serializable,\n\t\t\t\t]\n ? `[${stringified<Element1>}, ${stringified<Element2>}, ${stringified<Element3>}]`\n : J extends any[]\n ? `[${string}]` & { __json?: J }\n : string & { __json?: J }\n )\n\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson<J extends Json.Serializable>(str: stringified<J>): J\n/** Type-safe wrapper for {@link JSON.parse} */\nexport function parseJson(str: string): Json.Serializable\nexport function parseJson(str: string): Json.Serializable {\n\treturn JSON.parse(str)\n}\n\n/** Type-safe wrapper for {@link JSON.stringify} */\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\n/** A function whose parameters and return value are {@link Json.Serializable} */\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: ViewOf<T>) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n"],"mappings":";AAOA,MAAM,OAAO;AACb,MAAM,OAAO;AACb,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAa,iBACZ,UACe;AACf,KAAI,UAAU,KAAM,QAAO;AAE3B,SAAQ,OAAO,OAAf;EACC,KAAK,SACJ,QAAO,SAAS;EACjB,KAAK,SACJ,QAAO,SAAS;EACjB,KAAK,UACJ,QAAO,OAAO,CAAC;EAChB,KAAK,SACJ,QAAO,KAAK,UAAU,MAAM;;;AAG/B,MAAa,mBAAwC,UAAwB;AAE5E,SADa,MAAM,IACnB;EACC,KAAK,OACJ,QAAO,MAAM,MAAM,EAAE;EACtB,KAAK,OACJ,QAAO,CAAC,MAAM,MAAM,EAAE;EACvB,KAAK,KACJ,QAAQ,MAAM,MAAM,EAAE,KAAK;EAC5B,KAAK,KACJ,QAAO;EACR,KAAK,IACJ,QAAO,KAAK,MAAM,MAAM;;;;;;;AClB3B,SAAgB,YAA+B,SAA4B;AAC1E,QAAO,OAAO,YAAY,QAAQ;;;AAOnC,SAAgB,UAA4B,KAAsB;AACjE,QAAO,OAAO,QAAQ,IAAI;;;;;ACN3B,SAAgB,YACf,QACiB;CACjB,MAAMA,SAA2B,EAAE;CACnC,IAAI,IAAI;AACR,MAAK,MAAM,SAAS,QAAQ;AAC3B,SAAO,SAAS;AAChB,SAAO,KAAK;AACZ,IAAE;;AAEH,QAAO;;;;;ACmCR,SAAgB,UAAU,KAAgC;AACzD,QAAO,KAAK,MAAM,IAAI;;;AAIvB,MAAa,iBACZ,SACoB,KAAK,UAAU,KAAK;AAUzC,MAAM,kBAAkB;CACvB,MAAM;CACN,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;CACP;AACD,MAAa,UAAU,UAA4C;AAClE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,UAAU,OAAW,QAAO;CAChC,MAAM,YAAY,OAAO,eAAe,MAAM;AAC9C,QAAO,gBAAgB,SAAS,UAAU;;AAG3C,MAAa,kBAAkB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;AAaD,MAAaC,gBAA2B;CACvC,OAAO,EAAE;CACT,SAAS;CACT,MAAM;CACN,QAAQ;CACR,QAAQ,EAAE;CACV,QAAQ;CACR"}
@@ -1149,7 +1149,7 @@ declare function subscribe<M extends TimelineManageable>(token: TimelineToken<M>
1149
1149
  type Loadable<T> = Promise<T> | T;
1150
1150
  type ViewOf<T> = T extends {
1151
1151
  READONLY_VIEW: infer View;
1152
- } ? View : T;
1152
+ } ? View : T extends Array<any> ? readonly [...T] : T extends Set<infer U> ? ReadonlySet<ViewOf<U>> : T extends Map<infer K, infer V> ? ReadonlyMap<ViewOf<K>, ViewOf<V>> : T;
1153
1153
  //#endregion
1154
1154
  export { $validatedKey, Above, ActorToolkit, Anarchy, AtomDisposalEvent, AtomEffect, AtomFamilyToken, AtomIOLogger, AtomIOToken, AtomOnly, AtomToken, AtomUpdateEvent, Below, CompoundFrom, CompoundTypedKey, Effectors, EntityDenomination, FamilyMetadata, HeldSelectorFamilyToken, HeldSelectorToken, Hierarchy, JoinOptions, JoinStates, JoinToken, LOG_LEVELS, Loadable, LogFilter, LogFn, LogLevel, Logger, LoggerIcon, MoleculeCreationEvent, MoleculeDisposalEvent, MoleculeTransferEvent, MutableAtomFamilyOptions, MutableAtomFamilyToken, MutableAtomOptions, MutableAtomToken, Mutuals, PRETTY_ENTITY_NAMES, PureSelectorFamilyToken, PureSelectorToken, Read, ReadableFamilyToken, ReadableStateCreationEvent, ReadableToken, ReaderToolkit, ReadonlyHeldSelectorFamilyOptions, ReadonlyHeldSelectorFamilyToken, ReadonlyHeldSelectorOptions, ReadonlyHeldSelectorToken, ReadonlyPureSelectorFamilyOptions, ReadonlyPureSelectorFamilyToken, ReadonlyPureSelectorOptions, ReadonlyPureSelectorToken, ReadonlySelectorFamilyToken, ReadonlySelectorToken, Realm, RegularAtomFamilyOptions, RegularAtomFamilyToken, RegularAtomOptions, RegularAtomToken, SelectorDisposalEvent, SelectorFamilyToken, SelectorToken, SelectorUpdateSubEvent, Setter, Silo, SingularTypedKey, StateCreationEvent, StateDisposalEvent, StateLifecycleEvent, StateUpdate, T$, TimelineEvent, TimelineManageable, TimelineOptions, TimelineSelectorUpdateEvent, TimelineToken, TokenType, Transact, TransactionIO, TransactionOptions, TransactionOutcomeEvent, TransactionSubEvent, TransactionToken, TransactionUpdateHandler, TypeTag, TypedKey, UpdateHandler, ValidKey, Vassal, ViewOf, WritableFamilyToken, WritableHeldSelectorFamilyOptions, WritableHeldSelectorFamilyToken, WritableHeldSelectorOptions, WritableHeldSelectorToken, WritablePureSelectorFamilyOptions, WritablePureSelectorFamilyToken, WritablePureSelectorOptions, WritablePureSelectorToken, WritableSelectorFamilyToken, WritableSelectorToken, WritableStateCreationEvent, WritableToken, Write, WriterToolkit, atom, atomFamily, belongsTo, decomposeCompound, disposeState, editRelations, findRelations, findState, getInternalRelations, getState, isToken, join, mutableAtom, mutableAtomFamily, redo, resetState, runTransaction, selector, selectorFamily, setState, simpleCompound, simpleLog, simpleLogger, subscribe, timeline, transaction, undo };
1155
1155
  //# sourceMappingURL=index.d.ts.map