atom.io 0.11.0 → 0.12.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 (174) hide show
  1. package/data/dist/index.cjs +614 -0
  2. package/data/dist/index.cjs.map +1 -0
  3. package/data/dist/index.d.cts +158 -0
  4. package/data/dist/index.d.ts +118 -1
  5. package/data/dist/index.js +551 -30
  6. package/data/dist/index.js.map +1 -1
  7. package/data/dist/metafile-cjs.json +1 -0
  8. package/data/dist/metafile-esm.json +1 -0
  9. package/data/package.json +4 -3
  10. package/data/src/index.ts +1 -0
  11. package/data/src/join.ts +450 -0
  12. package/data/src/struct-family.ts +34 -24
  13. package/data/src/struct.ts +6 -8
  14. package/dist/index.cjs +257 -0
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/{index.d.mts → index.d.cts} +10 -11
  17. package/dist/index.d.ts +10 -11
  18. package/dist/index.js +63 -104
  19. package/dist/index.js.map +1 -1
  20. package/dist/metafile-cjs.json +1 -0
  21. package/dist/metafile-esm.json +1 -0
  22. package/internal/dist/{index.mjs → index.cjs} +716 -495
  23. package/internal/dist/index.cjs.map +1 -0
  24. package/internal/dist/{index.d.mts → index.d.cts} +124 -105
  25. package/internal/dist/index.d.ts +124 -105
  26. package/internal/dist/index.js +651 -555
  27. package/internal/dist/index.js.map +1 -1
  28. package/internal/dist/metafile-cjs.json +1 -0
  29. package/internal/dist/metafile-esm.json +1 -0
  30. package/internal/package.json +4 -3
  31. package/internal/src/atom/create-atom.ts +29 -16
  32. package/internal/src/atom/delete-atom.ts +25 -6
  33. package/internal/src/atom/is-default.ts +4 -17
  34. package/internal/src/caching.ts +28 -23
  35. package/internal/src/families/create-atom-family.ts +3 -2
  36. package/internal/src/families/create-readonly-selector-family.ts +1 -1
  37. package/internal/src/families/create-selector-family.ts +4 -4
  38. package/internal/src/index.ts +4 -2
  39. package/internal/src/lazy-map.ts +33 -0
  40. package/internal/src/mutable/create-mutable-atom-family.ts +2 -2
  41. package/internal/src/mutable/create-mutable-atom.ts +1 -2
  42. package/internal/src/mutable/get-json-family.ts +22 -0
  43. package/internal/src/mutable/get-json-token.ts +1 -0
  44. package/internal/src/mutable/index.ts +1 -0
  45. package/internal/src/mutable/tracker-family.ts +1 -2
  46. package/internal/src/mutable/tracker.ts +8 -6
  47. package/internal/src/mutable/transceiver.ts +2 -0
  48. package/internal/src/not-found-error.ts +27 -0
  49. package/internal/src/operation.ts +2 -3
  50. package/internal/src/{get-state-internal.ts → read-or-compute-value.ts} +13 -6
  51. package/internal/src/selector/create-selector.ts +6 -7
  52. package/internal/src/selector/delete-selector.ts +37 -0
  53. package/internal/src/selector/index.ts +2 -1
  54. package/internal/src/selector/register-selector.ts +7 -7
  55. package/internal/src/set-state/copy-mutable-in-transaction.ts +3 -2
  56. package/internal/src/set-state/emit-update.ts +1 -3
  57. package/internal/src/set-state/evict-downstream.ts +6 -8
  58. package/internal/src/set-state/index.ts +1 -1
  59. package/internal/src/set-state/{set-state-internal.ts → set-atom-or-selector.ts} +2 -3
  60. package/internal/src/set-state/set-atom.ts +5 -6
  61. package/internal/src/store/store.ts +1 -1
  62. package/internal/src/store/withdraw-new-family-member.ts +6 -6
  63. package/internal/src/subscribe/recall-state.ts +1 -2
  64. package/internal/src/subscribe/subscribe-to-root-atoms.ts +2 -2
  65. package/internal/src/timeline/add-atom-to-timeline.ts +5 -16
  66. package/internal/src/timeline/{timeline-internal.ts → create-timeline.ts} +4 -5
  67. package/internal/src/timeline/index.ts +2 -2
  68. package/internal/src/timeline/time-travel.ts +89 -0
  69. package/internal/src/transaction/build-transaction.ts +8 -7
  70. package/internal/src/transaction/{transaction-internal.ts → create-transaction.ts} +6 -5
  71. package/internal/src/transaction/index.ts +2 -3
  72. package/introspection/dist/{index.mjs → index.cjs} +54 -29
  73. package/introspection/dist/index.cjs.map +1 -0
  74. package/introspection/dist/{index.d.mts → index.d.cts} +2 -2
  75. package/introspection/dist/index.d.ts +2 -2
  76. package/introspection/dist/index.js +32 -49
  77. package/introspection/dist/index.js.map +1 -1
  78. package/introspection/dist/metafile-cjs.json +1 -0
  79. package/introspection/dist/metafile-esm.json +1 -0
  80. package/introspection/package.json +4 -3
  81. package/introspection/src/attach-introspection-states.ts +2 -2
  82. package/introspection/src/attach-selector-index.ts +8 -4
  83. package/json/dist/{index.mjs → index.cjs} +20 -7
  84. package/json/dist/{index.mjs.map → index.cjs.map} +1 -1
  85. package/json/dist/{index.d.mts → index.d.cts} +1 -1
  86. package/json/dist/index.d.ts +1 -1
  87. package/json/dist/index.js +6 -19
  88. package/json/dist/index.js.map +1 -1
  89. package/json/dist/metafile-cjs.json +1 -0
  90. package/json/dist/metafile-esm.json +1 -0
  91. package/json/package.json +4 -3
  92. package/package.json +48 -47
  93. package/react/dist/index.cjs +59 -0
  94. package/react/dist/index.cjs.map +1 -0
  95. package/react/dist/index.js +20 -42
  96. package/react/dist/index.js.map +1 -1
  97. package/react/dist/metafile-cjs.json +1 -0
  98. package/react/dist/metafile-esm.json +1 -0
  99. package/react/package.json +4 -3
  100. package/react/src/store-hooks.ts +8 -2
  101. package/react-devtools/dist/{index.mjs → index.cjs} +286 -240
  102. package/react-devtools/dist/index.cjs.map +1 -0
  103. package/react-devtools/dist/{index.d.mts → index.d.cts} +29 -17
  104. package/react-devtools/dist/index.d.ts +29 -17
  105. package/react-devtools/dist/index.js +251 -273
  106. package/react-devtools/dist/index.js.map +1 -1
  107. package/react-devtools/dist/metafile-cjs.json +1 -0
  108. package/react-devtools/dist/metafile-esm.json +1 -0
  109. package/react-devtools/package.json +4 -3
  110. package/react-devtools/src/StateEditor.tsx +8 -8
  111. package/realtime-client/dist/{index.mjs → index.cjs} +50 -21
  112. package/realtime-client/dist/index.js +20 -49
  113. package/realtime-client/dist/metafile-cjs.json +1 -0
  114. package/realtime-client/dist/metafile-esm.json +1 -0
  115. package/realtime-client/package.json +4 -3
  116. package/realtime-react/dist/index.cjs +99 -0
  117. package/realtime-react/dist/index.js +35 -66
  118. package/realtime-react/dist/metafile-cjs.json +1 -0
  119. package/realtime-react/dist/metafile-esm.json +1 -0
  120. package/realtime-react/package.json +4 -3
  121. package/realtime-server/dist/{index.mjs → index.cjs} +67 -40
  122. package/realtime-server/dist/index.js +39 -66
  123. package/realtime-server/dist/metafile-cjs.json +1 -0
  124. package/realtime-server/dist/metafile-esm.json +1 -0
  125. package/realtime-server/package.json +4 -3
  126. package/realtime-testing/dist/{index.mjs → index.cjs} +54 -23
  127. package/realtime-testing/dist/index.js +22 -53
  128. package/realtime-testing/dist/metafile-cjs.json +1 -0
  129. package/realtime-testing/dist/metafile-esm.json +1 -0
  130. package/realtime-testing/package.json +4 -3
  131. package/src/atom.ts +6 -8
  132. package/src/dispose.ts +18 -0
  133. package/src/get-state.ts +16 -0
  134. package/src/index.ts +3 -1
  135. package/src/logger.ts +1 -1
  136. package/src/selector.ts +3 -3
  137. package/src/set-state.ts +22 -0
  138. package/src/silo.ts +7 -8
  139. package/src/timeline.ts +6 -11
  140. package/src/transaction.ts +2 -2
  141. package/transceivers/set-rtx/dist/{index.mjs → index.cjs} +40 -36
  142. package/transceivers/set-rtx/dist/index.cjs.map +1 -0
  143. package/transceivers/set-rtx/dist/{index.d.mts → index.d.cts} +2 -1
  144. package/transceivers/set-rtx/dist/index.d.ts +2 -1
  145. package/transceivers/set-rtx/dist/index.js +37 -37
  146. package/transceivers/set-rtx/dist/index.js.map +1 -1
  147. package/transceivers/set-rtx/dist/metafile-cjs.json +1 -0
  148. package/transceivers/set-rtx/dist/metafile-esm.json +1 -0
  149. package/transceivers/set-rtx/package.json +4 -3
  150. package/transceivers/set-rtx/src/set-rtx.ts +29 -26
  151. package/data/dist/index.d.mts +0 -41
  152. package/data/dist/index.mjs +0 -82
  153. package/data/dist/index.mjs.map +0 -1
  154. package/dist/index.mjs +0 -215
  155. package/dist/index.mjs.map +0 -1
  156. package/internal/dist/index.mjs.map +0 -1
  157. package/internal/src/set-state/set-selector-state.ts +0 -8
  158. package/internal/src/timeline/time-travel-internal.ts +0 -109
  159. package/introspection/dist/index.mjs.map +0 -1
  160. package/react/dist/index.mjs +0 -29
  161. package/react/dist/index.mjs.map +0 -1
  162. package/react-devtools/dist/index.mjs.map +0 -1
  163. package/realtime-react/dist/index.mjs +0 -68
  164. package/src/get-set.ts +0 -48
  165. package/transceivers/set-rtx/dist/index.mjs.map +0 -1
  166. /package/react/dist/{index.d.mts → index.d.cts} +0 -0
  167. /package/realtime-client/dist/{index.mjs.map → index.cjs.map} +0 -0
  168. /package/realtime-client/dist/{index.d.mts → index.d.cts} +0 -0
  169. /package/realtime-react/dist/{index.mjs.map → index.cjs.map} +0 -0
  170. /package/realtime-react/dist/{index.d.mts → index.d.cts} +0 -0
  171. /package/realtime-server/dist/{index.mjs.map → index.cjs.map} +0 -0
  172. /package/realtime-server/dist/{index.d.mts → index.d.cts} +0 -0
  173. /package/realtime-testing/dist/{index.mjs.map → index.cjs.map} +0 -0
  174. /package/realtime-testing/dist/{index.d.mts → index.d.cts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/atom.ts","../src/get-set.ts","../src/logger.ts","../src/selector.ts","../src/silo.ts","../src/subscribe.ts","../src/timeline.ts","../src/transaction.ts"],"names":["createAtom","createAtomFamily","createMutableAtom","createMutableAtomFamily","createSelector","createSelectorFamily","IMPLICIT","withdraw","redo__INTERNAL","timeline__INTERNAL","undo__INTERNAL","transaction__INTERNAL"],"mappings":"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","sourcesContent":["import type { Subject, Transceiver } from \"atom.io/internal\"\nimport {\n\tcreateAtom,\n\tcreateAtomFamily,\n\tcreateMutableAtom,\n\tcreateMutableAtomFamily,\n\tdeleteAtom,\n} from \"atom.io/internal\"\nimport type { Json, JsonInterface } from \"atom.io/json\"\n\nimport type { AtomToken, MutableAtomToken } from \".\"\n\nexport { deleteAtom }\n\nexport type Effectors<T> = {\n\tsetSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void\n\tonSet: (callback: (options: { newValue: T; oldValue: T }) => void) => void\n}\n\nexport type AtomEffect<T> = (tools: Effectors<T>) => void\n\nexport type AtomOptions<T> = {\n\tkey: string\n\tdefault: T | (() => T)\n\teffects?: AtomEffect<T>[]\n}\n// biome-ignore format: complex intersection\nexport type MutableAtomOptions<T extends Transceiver<any>, J extends Json.Serializable> = \n\t& JsonInterface<T, J>\n\t& Omit<AtomOptions<T>, `default`> \n\t& { \n\t\t\tdefault: ()\t=> T\n\t\t\tmutable: true\n\t\t}\n\nexport function atom<T extends Transceiver<any>, J extends Json.Serializable>(\n\toptions: MutableAtomOptions<T, J>,\n): MutableAtomToken<T, J>\nexport function atom<T>(options: AtomOptions<T>): AtomToken<T>\nexport function atom<T>(\n\toptions: AtomOptions<any> | MutableAtomOptions<any, any>,\n): AtomToken<any> {\n\tif (`mutable` in options) {\n\t\treturn createMutableAtom(options)\n\t}\n\treturn createAtom<T>(options)\n}\n\nexport type AtomFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tdefault: T | ((key: K) => T)\n\teffects?: (key: K) => AtomEffect<T>[]\n}\n\nexport type AtomFamily<T, K extends Json.Serializable = Json.Serializable> = ((\n\tkey: K,\n) => AtomToken<T>) & {\n\tkey: string\n\ttype: `atom_family`\n\tsubject: Subject<AtomToken<T>>\n}\n// biome-ignore format: intersection\nexport type MutableAtomFamilyOptions<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = \n\t& AtomFamilyOptions<T, K>\n\t& JsonInterface<T, J>\n\t& { mutable: true }\n\n// biome-ignore format: intersection\nexport type MutableAtomFamily<\n\tCore extends Transceiver<any>,\n\tSerializableCore extends Json.Serializable,\n\tKey extends Json.Serializable,\n> = \n\t& JsonInterface<Core, SerializableCore>\n\t& ((key: Key) => MutableAtomToken<Core, SerializableCore>) \n\t& {\n\t\t\tkey: `${string}::mutable`\n\t\t\ttype: `atom_family`\n\t\t\tsubject: Subject<MutableAtomToken<Core, SerializableCore>>\n\t\t}\n\nexport function atomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n>(options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamily<T, J, K>\nexport function atomFamily<T, K extends Json.Serializable>(\n\toptions: AtomFamilyOptions<T, K>,\n): AtomFamily<T, K>\nexport function atomFamily<T, K extends Json.Serializable>(\n\toptions: AtomFamilyOptions<T, K> | MutableAtomFamilyOptions<any, any, any>,\n): AtomFamily<T, K> | MutableAtomFamily<any, any, any> {\n\tif (`mutable` in options) {\n\t\treturn createMutableAtomFamily(options)\n\t}\n\treturn createAtomFamily<T, K>(options)\n}\n","import * as Internal from \"atom.io/internal\"\nimport type { ReadonlySelectorToken, StateToken } from \".\"\n\nexport const getState = <T>(\n\ttoken: ReadonlySelectorToken<T> | StateToken<T>,\n\tstore: Internal.Store = Internal.IMPLICIT.STORE,\n): T => {\n\tconst state =\n\t\tInternal.withdraw(token, store) ??\n\t\tInternal.withdrawNewFamilyMember(token, store)\n\tif (state === undefined) {\n\t\tthrow new NotFoundError(token, store)\n\t}\n\treturn Internal.getState__INTERNAL(state, store)\n}\n\nexport const setState = <T, New extends T>(\n\ttoken: StateToken<T>,\n\tvalue: New | ((oldValue: T) => New),\n\tstore: Internal.Store = Internal.IMPLICIT.STORE,\n): void => {\n\tconst rejection = Internal.openOperation(token, store)\n\tif (rejection) {\n\t\treturn\n\t}\n\tconst state =\n\t\tInternal.withdraw(token, store) ??\n\t\tInternal.withdrawNewFamilyMember(token, store)\n\tif (state === undefined) {\n\t\tthrow new NotFoundError(token, store)\n\t}\n\tInternal.setState__INTERNAL(state, value, store)\n\tInternal.closeOperation(store)\n}\n\nconst capitalize = (str: string) => str[0].toUpperCase() + str.slice(1)\nexport class NotFoundError extends Error {\n\tpublic constructor(\n\t\ttoken: ReadonlySelectorToken<any> | StateToken<any>,\n\t\tstore: Internal.Store,\n\t) {\n\t\tsuper(\n\t\t\t`${capitalize(token.type)} \"${token.key}\" not found in store \"${\n\t\t\t\tstore.config.name\n\t\t\t}\".`,\n\t\t)\n\t}\n}\n","const LoggerIconDictionary = {\n\t\"⌛\": `Timeline event fully captured`,\n\t\"⏩\": `Timeline redo`,\n\t\"⏪\": `Timeline undo`,\n\t\"⏭️\": `Transaction redo`,\n\t\"⏮️\": `Transaction undo`,\n\t\"⏳\": `Timeline event partially captured`,\n\t\"⏹️\": `Time-travel complete`,\n\t\"💁\": `Notice`,\n\t\"🔄\": `Realtime transaction synchronized`,\n\t\"✅\": `Realtime transaction success`,\n\t\"✨\": `Computation complete`,\n\t\"❌\": `Conflict prevents attempted action`,\n\t\"⭕\": `Operation start`,\n\t\"🐞\": `Possible bug in AtomIO`,\n\t\"👀\": `Subscription added`,\n\t\"👪\": `Family member added`,\n\t\"📁\": `Stow update`,\n\t\"📃\": `Copy mutable`,\n\t\"📖\": `Read state`,\n\t\"📝\": `Write state`,\n\t\"📢\": `Notify subscribers`,\n\t\"🔌\": `Register dependency`,\n\t\"🔍\": `Discover root`,\n\t\"🔥\": `Delete state`,\n\t\"🔧\": `Create mutable atom`,\n\t\"🔨\": `Create immutable atom`,\n\t\"🔴\": `Operation complete`,\n\t\"🗑\": `Evict cached value`,\n\t\"💥\": `Caught`,\n\t\"🙈\": `Subscription canceled`,\n\t\"🛄\": `Apply transaction`,\n\t\"🛠️\": `Install atom into store`,\n\t\"🛫\": `Begin transaction`,\n\t\"🛬\": `Complete transaction`,\n\t\"🧮\": `Computing selector`,\n\t\"🧹\": `Prepare to evict`,\n\t\"🪂\": `Abort transaction`,\n} as const\nexport type LoggerIcon = keyof typeof LoggerIconDictionary\n\nexport const LOG_LEVELS = [`info`, `warn`, `error`] as const\nexport type LogLevel = typeof LOG_LEVELS[number]\n\nexport type LogFn = (\n\ticon: LoggerIcon,\n\ttokenType:\n\t\t| `atom`\n\t\t| `readonly_selector`\n\t\t| `selector`\n\t\t| `state`\n\t\t| `timeline`\n\t\t| `transaction`\n\t\t| `unknown`,\n\ttokenKey: string,\n\tmessage: string,\n\t...rest: unknown[]\n) => void\nexport type LogFilter = (...params: Parameters<LogFn>) => boolean\n\nexport type Logger = Record<LogLevel, LogFn>\n\nexport const simpleLog =\n\t(logLevel: keyof Logger): LogFn =>\n\t(icon, tokenType, tokenKey, message, ...rest) => {\n\t\tconsole[logLevel](`${icon} ${tokenType} \"${tokenKey}\" ${message}`, ...rest)\n\t}\nexport const simpleLogger: Logger = {\n\terror: simpleLog(`error`),\n\tinfo: simpleLog(`info`),\n\twarn: simpleLog(`warn`),\n}\n\nexport class AtomIOLogger implements Logger {\n\tpublic constructor(\n\t\tpublic logLevel: `error` | `info` | `warn` | null,\n\t\tprivate readonly filter?: LogFilter,\n\t\tprivate readonly logger: Logger = simpleLogger,\n\t) {}\n\n\tpublic error: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel !== null) {\n\t\t\tthis.logger.error(...args)\n\t\t}\n\t}\n\tpublic info: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel === `info`) {\n\t\t\tthis.logger.info(...args)\n\t\t}\n\t}\n\tpublic warn: LogFn = (...args) => {\n\t\tif (\n\t\t\t(this.filter?.(...args) ?? true) &&\n\t\t\tthis.logLevel !== `error` &&\n\t\t\tthis.logLevel !== null\n\t\t) {\n\t\t\tthis.logger.warn(...args)\n\t\t}\n\t}\n}\n","import type { Subject } from \"atom.io/internal\"\nimport { createSelector, createSelectorFamily } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { ReadonlySelectorToken, SelectorToken } from \".\"\nimport type { Read, Write } from \"./transaction\"\n\nexport type SelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n\tset: Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n}\n\nexport function selector<T>(options: SelectorOptions<T>): SelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T>,\n): ReadonlySelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T> | SelectorOptions<T>,\n): ReadonlySelectorToken<T> | SelectorToken<T> {\n\treturn createSelector(options)\n}\n\nexport type SelectorFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n\tset: (key: K) => Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n}\n\nexport type SelectorFamily<\n\tT,\n\tK extends Json.Serializable = Json.Serializable,\n> = ((key: K) => SelectorToken<T>) & {\n\tkey: string\n\ttype: `selector_family`\n\tsubject: Subject<SelectorToken<T>>\n}\n\nexport type ReadonlySelectorFamily<\n\tT,\n\tK extends Json.Serializable = Json.Serializable,\n> = ((key: K) => ReadonlySelectorToken<T>) & {\n\tkey: string\n\ttype: `readonly_selector_family`\n\tsubject: Subject<ReadonlySelectorToken<T>>\n}\n\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: SelectorFamilyOptions<T, K>,\n): SelectorFamily<T, K>\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamily<T, K>\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K> | SelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamily<T, K> | SelectorFamily<T, K> {\n\treturn createSelectorFamily(options)\n}\n","import {\n\tStore,\n\tcreateAtom,\n\tcreateAtomFamily,\n\tcreateMutableAtom,\n\tcreateMutableAtomFamily,\n\tcreateSelector,\n\tcreateSelectorFamily,\n\tredo__INTERNAL,\n\ttimeline__INTERNAL,\n\ttransaction__INTERNAL,\n\tundo__INTERNAL,\n} from \"atom.io/internal\"\n\nimport type { redo, timeline, undo } from \".\"\nimport { getState, setState, subscribe } from \".\"\nimport type { atom, atomFamily } from \"./atom\"\nimport type { selector, selectorFamily } from \"./selector\"\nimport type { transaction } from \"./transaction\"\n\nexport class Silo {\n\tpublic store: Store\n\tpublic atom: typeof atom\n\tpublic atomFamily: typeof atomFamily\n\tpublic selector: typeof selector\n\tpublic selectorFamily: typeof selectorFamily\n\tpublic transaction: typeof transaction\n\tpublic timeline: typeof timeline\n\tpublic getState: typeof getState\n\tpublic setState: typeof setState\n\tpublic subscribe: typeof subscribe\n\tpublic undo: typeof undo\n\tpublic redo: typeof redo\n\tpublic constructor(name: string, fromStore: Store | null = null) {\n\t\tconst s = new Store(name, fromStore)\n\t\tthis.store = s\n\t\tthis.atom = (options) => {\n\t\t\tif (`mutable` in options) {\n\t\t\t\treturn createMutableAtom(options, s)\n\t\t\t}\n\t\t\treturn createAtom(options, undefined, s)\n\t\t}\n\t\tthis.atomFamily = (options) => {\n\t\t\tif (`mutable` in options) {\n\t\t\t\treturn createMutableAtomFamily(options, s) as any\n\t\t\t}\n\t\t\treturn createAtomFamily(options, s)\n\t\t}\n\t\tthis.selector = (options) => createSelector(options, undefined, s) as any\n\t\tthis.selectorFamily = (options) => createSelectorFamily(options, s) as any\n\t\tthis.transaction = (options) => transaction__INTERNAL(options, s)\n\t\tthis.timeline = (options) => timeline__INTERNAL(options, s)\n\t\tthis.getState = (token) => getState(token, s)\n\t\tthis.setState = (token, newValue) => setState(token, newValue, s)\n\t\tthis.subscribe = (token, handler, key) => subscribe(token, handler, key, s)\n\t\tthis.undo = (token) => undo__INTERNAL(token, s)\n\t\tthis.redo = (token) => redo__INTERNAL(token, s)\n\t}\n}\n","import type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, subscribeToRootAtoms, withdraw } from \"atom.io/internal\"\n\nimport type {\n\tFamilyMetadata,\n\tReadonlySelectorToken,\n\tStateToken,\n\tTimelineToken,\n\tTimelineUpdate,\n\tTransactionToken,\n\tTransactionUpdate,\n\tƒn,\n} from \".\"\n\nexport type StateUpdate<T> = { newValue: T; oldValue: T }\nexport type KeyedStateUpdate<T> = StateUpdate<T> & {\n\tkey: string\n\tfamily?: FamilyMetadata\n}\nexport type UpdateHandler<T> = (update: StateUpdate<T>) => void\n\nexport function subscribe<T>(\n\ttoken: ReadonlySelectorToken<T> | StateToken<T>,\n\thandleUpdate: UpdateHandler<T>,\n\tkey: string = Math.random().toString(36).slice(2),\n\tstore: Store = IMPLICIT.STORE,\n): () => void {\n\tconst state = withdraw<T>(token, store)\n\tif (state === undefined) {\n\t\tthrow new Error(\n\t\t\t`State \"${token.key}\" not found in this store. Did you forget to initialize with the \"atom\" or \"selector\" function?`,\n\t\t)\n\t}\n\tconst unsubFunction = state.subject.subscribe(key, handleUpdate)\n\tstore.logger.info(`👀`, state.type, state.key, `Adding subscription \"${key}\"`)\n\tconst dependencyUnsubFunctions =\n\t\tstate.type !== `atom` ? subscribeToRootAtoms(state, store) : null\n\n\tconst unsubscribe =\n\t\tdependencyUnsubFunctions === null\n\t\t\t? () => {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🙈`,\n\t\t\t\t\t\tstate.type,\n\t\t\t\t\t\tstate.key,\n\t\t\t\t\t\t`Removing subscription \"${key}\"`,\n\t\t\t\t\t)\n\t\t\t\t\tunsubFunction()\n\t\t\t }\n\t\t\t: () => {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🙈`,\n\t\t\t\t\t\tstate.type,\n\t\t\t\t\t\tstate.key,\n\t\t\t\t\t\t`Removing subscription \"${key}\"`,\n\t\t\t\t\t)\n\t\t\t\t\tunsubFunction()\n\t\t\t\t\tfor (const unsubFromDependency of dependencyUnsubFunctions) {\n\t\t\t\t\t\tunsubFromDependency()\n\t\t\t\t\t}\n\t\t\t }\n\n\treturn unsubscribe\n}\n\nexport type TransactionUpdateHandler<ƒ extends ƒn> = (\n\tdata: TransactionUpdate<ƒ>,\n) => void\n\nexport const subscribeToTransaction = <ƒ extends ƒn>(\n\ttoken: TransactionToken<ƒ>,\n\thandleUpdate: TransactionUpdateHandler<ƒ>,\n\tkey: string = Math.random().toString(36).slice(2),\n\tstore = IMPLICIT.STORE,\n): (() => void) => {\n\tconst tx = withdraw(token, store)\n\tif (tx === undefined) {\n\t\tthrow new Error(\n\t\t\t`Cannot subscribe to transaction \"${token.key}\": transaction not found in store \"${store.config.name}\".`,\n\t\t)\n\t}\n\tstore.logger.info(\n\t\t`👀`,\n\t\t`transaction`,\n\t\ttoken.key,\n\t\t`Adding subscription \"${key}\"`,\n\t)\n\tconst unsubscribe = tx.subject.subscribe(key, handleUpdate)\n\treturn () => {\n\t\tstore.logger.info(\n\t\t\t`🙈`,\n\t\t\t`transaction`,\n\t\t\ttoken.key,\n\t\t\t`Removing subscription \"${key}\"`,\n\t\t)\n\t\tunsubscribe()\n\t}\n}\n\nexport const subscribeToTimeline = (\n\ttoken: TimelineToken,\n\thandleUpdate: (update: TimelineUpdate | `redo` | `undo`) => void,\n\tkey: string = Math.random().toString(36).slice(2),\n\tstore = IMPLICIT.STORE,\n): (() => void) => {\n\tconst tl = withdraw(token, store)\n\tif (tl === undefined) {\n\t\tthrow new Error(\n\t\t\t`Cannot subscribe to timeline \"${token.key}\": timeline not found in store \"${store.config.name}\".`,\n\t\t)\n\t}\n\tstore.logger.info(`👀`, `timeline`, token.key, `Adding subscription \"${key}\"`)\n\tconst unsubscribe = tl.subject.subscribe(key, handleUpdate)\n\treturn () => {\n\t\tstore.logger.info(\n\t\t\t`🙈`,\n\t\t\t`timeline`,\n\t\t\ttoken.key,\n\t\t\t`Removing subscription \"${key}\" from timeline`,\n\t\t)\n\t\tunsubscribe()\n\t}\n}\n","import type {\n\tTimeline,\n\tTimelineAtomUpdate,\n\tTimelineSelectorUpdate,\n\tTimelineTransactionUpdate,\n} from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tredo__INTERNAL,\n\ttimeline__INTERNAL,\n\tundo__INTERNAL,\n} from \"atom.io/internal\"\n\nimport type { AtomFamily, AtomToken } from \".\"\n\nexport type TimelineToken = {\n\tkey: string\n\ttype: `timeline`\n}\n\nexport type TimelineOptions = {\n\tkey: string\n\tatoms: (AtomFamily<any, any> | AtomToken<any>)[]\n\tshouldCapture?: (update: TimelineUpdate, timeline: Timeline) => boolean\n}\n\nexport type TimelineUpdate =\n\t| TimelineAtomUpdate\n\t| TimelineSelectorUpdate\n\t| TimelineTransactionUpdate\n\nexport const timeline = (options: TimelineOptions): TimelineToken => {\n\treturn timeline__INTERNAL(options)\n}\n\nexport const redo = (token: TimelineToken): void => {\n\tredo__INTERNAL(token, IMPLICIT.STORE)\n}\n\nexport const undo = (token: TimelineToken): void => {\n\tundo__INTERNAL(token, IMPLICIT.STORE)\n}\n","import type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, transaction__INTERNAL, withdraw } from \"atom.io/internal\"\n\nimport type { KeyedStateUpdate, ReadonlySelectorToken, StateToken, ƒn } from \".\"\n\nexport type TransactionToken<_> = {\n\tkey: string\n\ttype: `transaction`\n\t__brand?: _\n}\n\nexport type TransactionUpdate<ƒ extends ƒn> = {\n\tkey: string\n\tatomUpdates: KeyedStateUpdate<unknown>[]\n\tparams: Parameters<ƒ>\n\toutput: ReturnType<ƒ>\n}\n\nexport type Transactors = {\n\tget: <S>(state: ReadonlySelectorToken<S> | StateToken<S>) => S\n\tset: <S>(state: StateToken<S>, newValue: S | ((oldValue: S) => S)) => void\n}\nexport type ReadonlyTransactors = Pick<Transactors, `get`>\n\nexport type Read<ƒ extends ƒn> = (\n\ttransactors: ReadonlyTransactors,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Write<ƒ extends ƒn> = (\n\ttransactors: Transactors,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type TransactionOptions<ƒ extends ƒn> = {\n\tkey: string\n\tdo: Write<ƒ>\n}\n\nexport type TransactionIO<Token extends TransactionToken<any>> =\n\tToken extends TransactionToken<infer ƒ> ? ƒ : never\n\nexport function transaction<ƒ extends ƒn>(\n\toptions: TransactionOptions<ƒ>,\n): TransactionToken<ƒ> {\n\treturn transaction__INTERNAL(options)\n}\n\nexport const runTransaction =\n\t<ƒ extends ƒn>(token: TransactionToken<ƒ>, store: Store = IMPLICIT.STORE) =>\n\t(...parameters: Parameters<ƒ>): ReturnType<ƒ> => {\n\t\tconst tx = withdraw(token, store)\n\t\tif (tx) {\n\t\t\treturn tx.run(...parameters)\n\t\t}\n\t\tthrow new Error(\n\t\t\t`Cannot run transaction \"${token.key}\": transaction not found in store \"${store.config.name}\".`,\n\t\t)\n\t}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/atom/create-atom.ts","../src/future.ts","../src/store/deposit.ts","../src/store/store.ts","../../../rel8/junction/src/junction.ts","../src/subject.ts","../src/transaction/transaction-internal.ts","../src/transaction/abort-transaction.ts","../src/transaction/apply-transaction.ts","../src/transaction/build-transaction.ts","../src/transaction/redo-transaction.ts","../src/transaction/undo-transaction.ts","../src/transaction/index.ts","../src/timeline/add-atom-to-timeline.ts","../src/timeline/time-travel-internal.ts","../src/timeline/timeline-internal.ts","../src/store/withdraw.ts","../src/store/withdraw-new-family-member.ts","../src/caching.ts","../src/mutable/create-mutable-atom.ts","../src/mutable/tracker.ts","../src/mutable/create-mutable-atom-family.ts","../src/mutable/tracker-family.ts","../src/families/create-atom-family.ts","../src/families/create-readonly-selector-family.ts","../src/keys.ts","../src/selector/get-selector-dependency-keys.ts","../src/get-state-internal.ts","../src/set-state/become.ts","../src/operation.ts","../src/set-state/copy-mutable-if-needed.ts","../src/set-state/copy-mutable-in-transaction.ts","../src/set-state/emit-update.ts","../src/set-state/evict-downstream.ts","../src/set-state/stow-update.ts","../src/set-state/set-atom.ts","../src/set-state/set-state-internal.ts","../src/selector/trace-selector-atoms.ts","../src/selector/update-selector-atoms.ts","../src/selector/register-selector.ts","../src/selector/create-read-write-selector.ts","../src/selector/create-readonly-selector.ts","../src/selector/create-selector.ts","../src/families/create-selector-family.ts","../src/mutable/get-json-token.ts","../src/mutable/get-update-token.ts","../src/mutable/is-atom-token-mutable.ts","../src/mutable/transceiver.ts","../src/mutable/index.ts","../src/atom/is-default.ts","../src/atom/delete-atom.ts","../src/subscribe/recall-state.ts","../src/subscribe/subscribe-to-root-atoms.ts"],"names":["setState","subscribe","a","b","token","store","update","_a","_b","value","getState","unsubscribe","stringifyJson","target"],"mappings":"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","sourcesContent":["import type {\n\tAtomOptions,\n\tAtomToken,\n\tFamilyMetadata,\n\tMutableAtomOptions,\n\tUpdateHandler,\n} from \"atom.io\"\nimport { setState, subscribe } from \"atom.io\"\n\nimport { cacheValue } from \"../caching\"\nimport { createMutableAtom } from \"../mutable\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT, deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { target } from \"../transaction\"\nimport { markAtomAsDefault } from \"./is-default\"\n\nexport type Atom<T> = {\n\tkey: string\n\ttype: `atom`\n\tfamily?: FamilyMetadata\n\tinstall: (store: Store) => void\n\tsubject: Subject<{ newValue: T; oldValue: T }>\n\tdefault: T\n}\n\nexport function createAtom<T>(\n\toptions: AtomOptions<T> | MutableAtomOptions<any, any>,\n\tfamily?: FamilyMetadata,\n\tstore: Store = IMPLICIT.STORE,\n): AtomToken<T> {\n\tstore.logger.info(\n\t\t`🔨`,\n\t\t`atom`,\n\t\toptions.key,\n\t\t`creating in store \"${store.config.name}\"`,\n\t)\n\tconst core = target(store)\n\tconst existing = core.atoms.get(options.key)\n\tif (existing) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`atom`,\n\t\t\toptions.key,\n\t\t\t`Tried to create atom, but it already exists in the store.`,\n\t\t\t`(Ignore if you are in development using hot module replacement.)`,\n\t\t)\n\t\treturn deposit(existing)\n\t}\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\tconst newAtom = {\n\t\t...options,\n\t\ttype: `atom`,\n\t\tinstall: (store: Store) => {\n\t\t\t// store.logger.info(\n\t\t\t// \t`🛠️ installing atom \"${options.key}\" in store \"${store.config.name}\"`,\n\t\t\t// )\n\t\t\tstore.logger.info(\n\t\t\t\t`🛠️`,\n\t\t\t\t`atom`,\n\t\t\t\toptions.key,\n\t\t\t\t`installing in store \"${store.config.name}\"`,\n\t\t\t)\n\t\t\treturn `mutable` in options\n\t\t\t\t? createMutableAtom(options, store)\n\t\t\t\t: createAtom(options, undefined, store)\n\t\t},\n\t\tsubject,\n\t\t...(family && { family }),\n\t} as const\n\tconst initialValue =\n\t\toptions.default instanceof Function ? options.default() : options.default\n\tcore.atoms.set(newAtom.key, newAtom)\n\tmarkAtomAsDefault(options.key, store)\n\tcacheValue(options.key, initialValue, subject, store)\n\tconst token = deposit(newAtom)\n\tfor (const effect of options.effects ?? []) {\n\t\teffect({\n\t\t\tsetSelf: (next) => setState(token, next, store),\n\t\t\tonSet: (handle: UpdateHandler<T>) =>\n\t\t\t\tsubscribe(token, handle, `effect[${subject.subscribers.size}]`, store),\n\t\t})\n\t}\n\tstore.subject.atomCreation.next(token)\n\treturn token as AtomToken<T>\n}\n","/**\n * A Promise that can be canceled.\n * @internal\n * @private\n * @typeParam T The type of the value that the promise will resolve to.\n *\n * @remarks\n * Can be constructed like a Promise, or from an existing Promise.\n */\nexport class Future<T> extends Promise<T> {\n\tpublic isCanceled = false\n\n\tpublic constructor(\n\t\texecutor:\n\t\t\t| Promise<T>\n\t\t\t| ((resolve: (value: T) => void, reject: (reason?: any) => void) => void),\n\t) {\n\t\tsuper((resolve, reject) => {\n\t\t\tconst pass = (value: T) =>\n\t\t\t\tthis.isCanceled ? reject(`canceled`) : resolve(value)\n\t\t\tconst fail = (reason: any) =>\n\t\t\t\tthis.isCanceled ? reject(`canceled`) : reject(reason)\n\t\t\tif (typeof executor === `function`) {\n\t\t\t\texecutor(pass, fail)\n\t\t\t} else {\n\t\t\t\texecutor.then(pass, fail)\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic cancel(): void {\n\t\tthis.isCanceled = true\n\t}\n}\n","import type {\n\tAtomToken,\n\tReadonlySelectorToken,\n\tSelectorToken,\n\tStateToken,\n\tTransactionToken,\n\tƒn,\n} from \"atom.io\"\n\nimport type { Atom } from \"../atom\"\nimport type { ReadonlySelector, Selector } from \"../selector\"\nimport type { Transaction } from \"../transaction\"\n\nexport function deposit<T>(state: Atom<T>): AtomToken<T>\nexport function deposit<T>(state: Selector<T>): SelectorToken<T>\nexport function deposit<T>(state: Atom<T> | Selector<T>): StateToken<T>\nexport function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>\nexport function deposit<T>(\n\tstate: Transaction<T extends ƒn ? T : never>,\n): TransactionToken<T>\nexport function deposit<T>(\n\tstate: Atom<T> | ReadonlySelector<T> | Selector<T>,\n): ReadonlySelectorToken<T> | StateToken<T>\nexport function deposit<T>(\n\tstate:\n\t\t| Atom<T>\n\t\t| ReadonlySelector<T>\n\t\t| Selector<T>\n\t\t| Transaction<T extends ƒn ? T : never>,\n):\n\t| AtomToken<T>\n\t| ReadonlySelectorToken<T>\n\t| SelectorToken<T>\n\t| TransactionToken<T> {\n\tconst token = {\n\t\tkey: state.key,\n\t\ttype: state.type,\n\t} as any\n\tif (`family` in state) {\n\t\ttoken.family = state.family\n\t}\n\treturn token\n}\n","import { AtomIOLogger, simpleLogger } from \"atom.io\"\nimport type {\n\tAtomFamily,\n\tAtomToken,\n\tLogger,\n\tReadonlySelectorFamily,\n\tReadonlySelectorToken,\n\tSelectorFamily,\n\tSelectorToken,\n\tTimelineToken,\n\tTransactionToken,\n\tƒn,\n} from \"atom.io\"\n\nimport { Junction } from \"~/packages/rel8/junction/src\"\n\nimport type { Atom } from \"../atom\"\nimport type { MutableAtom, Tracker, Transceiver } from \"../mutable\"\nimport type { OperationProgress } from \"../operation\"\nimport type { ReadonlySelector, Selector } from \"../selector\"\nimport { Subject } from \"../subject\"\nimport type { Timeline } from \"../timeline\"\nimport type { Transaction, TransactionStatus } from \"../transaction\"\n\nexport type StoreCore = Pick<\n\tStore,\n\t| `atoms`\n\t| `atomsThatAreDefault`\n\t| `families`\n\t| `operation`\n\t| `readonlySelectors`\n\t| `selectorAtoms`\n\t| `selectorGraph`\n\t| `selectors`\n\t| `timelineAtoms`\n\t| `timelines`\n\t| `trackers`\n\t| `transactions`\n\t| `valueMap`\n>\n\nexport class Store {\n\tpublic valueMap = new Map<string, any>()\n\n\tpublic atoms = new Map<string, Atom<any> | MutableAtom<any>>()\n\tpublic selectors = new Map<string, Selector<any>>()\n\tpublic readonlySelectors = new Map<string, ReadonlySelector<any>>()\n\n\tpublic trackers = new Map<string, Tracker<Transceiver<any>>>()\n\tpublic families = new Map<\n\t\tstring,\n\t\t| AtomFamily<any, any>\n\t\t| ReadonlySelectorFamily<any, any>\n\t\t| SelectorFamily<any, any>\n\t>()\n\n\tpublic timelines = new Map<string, Timeline>()\n\tpublic transactions = new Map<string, Transaction<ƒn>>()\n\n\tpublic atomsThatAreDefault = new Set<string>()\n\n\tpublic timelineAtoms = new Junction({\n\t\tbetween: [`timelineKey`, `atomKey`],\n\t\tcardinality: `1:n`,\n\t})\n\tpublic selectorAtoms = new Junction({\n\t\tbetween: [`selectorKey`, `atomKey`],\n\t\tcardinality: `n:n`,\n\t})\n\tpublic selectorGraph = new Junction<\n\t\t`upstreamSelectorKey`,\n\t\t`downstreamSelectorKey`,\n\t\t{ source: string }\n\t>(\n\t\t{\n\t\t\tbetween: [`upstreamSelectorKey`, `downstreamSelectorKey`],\n\t\t\tcardinality: `n:n`,\n\t\t},\n\t\t{\n\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t},\n\t)\n\n\tpublic subject = {\n\t\tatomCreation: new Subject<AtomToken<unknown>>(),\n\t\tselectorCreation: new Subject<\n\t\t\tReadonlySelectorToken<unknown> | SelectorToken<unknown>\n\t\t>(),\n\t\ttransactionCreation: new Subject<TransactionToken<ƒn>>(),\n\t\ttimelineCreation: new Subject<TimelineToken>(),\n\t\toperationStatus: new Subject<OperationProgress>(),\n\t}\n\tpublic operation: OperationProgress = { open: false }\n\tpublic transactionStatus: TransactionStatus<ƒn> = { phase: `idle` }\n\n\tpublic config: {\n\t\tname: string\n\t} = {\n\t\tname: `IMPLICIT_STORE`,\n\t}\n\n\tpublic loggers: AtomIOLogger[] = [\n\t\tnew AtomIOLogger(`warn`, (_, __, key) => !key.includes(`👁‍🗨`)),\n\t]\n\tpublic logger: Logger = {\n\t\terror: (...messages) => {\n\t\t\tfor (const logger of this.loggers) logger.error(...messages)\n\t\t},\n\t\tinfo: (...messages) => {\n\t\t\tfor (const logger of this.loggers) logger.info(...messages)\n\t\t},\n\t\twarn: (...messages) => {\n\t\t\tfor (const logger of this.loggers) logger.warn(...messages)\n\t\t},\n\t}\n\n\tpublic constructor(name: string, store: Store | null = null) {\n\t\tif (store !== null) {\n\t\t\tthis.valueMap = new Map(store?.valueMap)\n\t\t\tthis.operation = { ...store?.operation }\n\t\t\tthis.transactionStatus = { ...store?.transactionStatus }\n\t\t\tthis.config = {\n\t\t\t\t...store?.config,\n\t\t\t\tname,\n\t\t\t}\n\n\t\t\tfor (const [, atom] of store.atoms) {\n\t\t\t\tatom.install(this)\n\t\t\t}\n\t\t\tfor (const [, selector] of store.readonlySelectors) {\n\t\t\t\tselector.install(this)\n\t\t\t}\n\t\t\tfor (const [, selector] of store.selectors) {\n\t\t\t\tselector.install(this)\n\t\t\t}\n\t\t\tfor (const [, tx] of store.transactions) {\n\t\t\t\ttx.install(this)\n\t\t\t}\n\t\t\tfor (const [, timeline] of store.timelines) {\n\t\t\t\ttimeline.install(this)\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const IMPLICIT = {\n\tSTORE_INTERNAL: undefined as Store | undefined,\n\tget STORE(): Store {\n\t\treturn (\n\t\t\tthis.STORE_INTERNAL ?? (this.STORE_INTERNAL = new Store(`IMPLICIT_STORE`))\n\t\t)\n\t},\n}\n\nexport const clearStore = (store: Store = IMPLICIT.STORE): void => {\n\tconst { config } = store\n\tObject.assign(store, new Store(config.name))\n\tstore.config = config\n}\n","import type { Cardinality, Json, Refinement } from \"rel8\"\n\nexport interface JunctionEntries<Content extends Json.Object | null,>\n\textends Json.Object {\n\treadonly relations: [string, string[]][]\n\treadonly contents: [string, Content][]\n}\nexport interface JunctionSchema<ASide extends string, BSide extends string>\n\textends Json.Object {\n\treadonly between: [a: ASide, b: BSide]\n\treadonly cardinality: Cardinality\n}\n\nexport type JunctionAdvancedConfiguration<Content extends Json.Object | null> = {\n\texternalStore?: (Content extends null\n\t\t? {\n\t\t\t\tgetContent?: undefined\n\t\t\t\tsetContent?: undefined\n\t\t\t\tdeleteContent?: undefined\n\t\t }\n\t\t: {\n\t\t\t\tgetContent: (contentKey: string) => Content | undefined\n\t\t\t\tsetContent: (contentKey: string, content: Content) => void\n\t\t\t\tdeleteContent: (contentKey: string) => void\n\t\t }) & {\n\t\taddRelation: (a: string, b: string) => void\n\t\tdeleteRelation: (a: string, b: string) => void\n\t\tgetRelatedKeys: (key: string) => Set<string> | undefined\n\t\thas: (a: string, b?: string) => boolean\n\t}\n\tisContent?: Refinement<unknown, Content>\n\tmakeContentKey?: (a: string, b: string) => string\n}\n\nexport type JunctionJSON<\n\tASide extends string,\n\tBSide extends string,\n\tContent extends Json.Object | null,\n> = JunctionEntries<Content> & JunctionSchema<ASide, BSide>\n\nexport class Junction<\n\tASide extends string,\n\tBSide extends string,\n\tContent extends Json.Object | null = null,\n> {\n\tpublic readonly a: ASide\n\tpublic readonly b: BSide\n\tpublic readonly cardinality: Cardinality\n\tpublic readonly relations = new Map<string, Set<string>>()\n\tpublic readonly contents = new Map<string, Content>()\n\n\tpublic isContent: Refinement<unknown, Content> | null\n\tpublic makeContentKey = (a: string, b: string): string => `${a}:${b}`\n\n\tpublic getRelatedKeys(key: string): Set<string> | undefined {\n\t\treturn this.relations.get(key)\n\t}\n\tprotected addRelation(a: string, b: string): void {\n\t\tconst aRelations = this.relations.get(a)\n\t\tconst bRelations = this.relations.get(b)\n\t\tif (aRelations) {\n\t\t\taRelations.add(b)\n\t\t} else {\n\t\t\tthis.relations.set(a, new Set([b]))\n\t\t}\n\t\tif (bRelations) {\n\t\t\tbRelations.add(a)\n\t\t} else {\n\t\t\tthis.relations.set(b, new Set([a]))\n\t\t}\n\t}\n\tprotected deleteRelation(a: string, b: string): void {\n\t\tconst aRelations = this.relations.get(a)\n\t\tif (aRelations) {\n\t\t\taRelations.delete(b)\n\t\t\tif (aRelations.size === 0) {\n\t\t\t\tthis.relations.delete(a)\n\t\t\t}\n\t\t\tconst bRelations = this.relations.get(b)\n\t\t\tif (bRelations) {\n\t\t\t\tbRelations.delete(a)\n\t\t\t\tif (bRelations.size === 0) {\n\t\t\t\t\tthis.relations.delete(b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected getContentInternal(contentKey: string): Content | undefined {\n\t\treturn this.contents.get(contentKey)\n\t}\n\tprotected setContent(contentKey: string, content: Content): void {\n\t\tthis.contents.set(contentKey, content)\n\t}\n\tprotected deleteContent(contentKey: string): void {\n\t\tthis.contents.delete(contentKey)\n\t}\n\n\tpublic constructor(\n\t\tdata: JunctionSchema<ASide, BSide> & Partial<JunctionEntries<Content>>,\n\t\tconfig?: JunctionAdvancedConfiguration<Content>,\n\t) {\n\t\tthis.a = data.between[0]\n\t\tthis.b = data.between[1]\n\n\t\tthis.cardinality = data.cardinality\n\t\tthis.relations = new Map(data.relations?.map(([a, b]) => [a, new Set(b)]))\n\t\tthis.contents = new Map(data.contents)\n\t\tthis.isContent = config?.isContent ?? null\n\t\tif (config?.makeContentKey) {\n\t\t\tthis.makeContentKey = config.makeContentKey\n\t\t}\n\t\tif (config?.externalStore) {\n\t\t\tconst externalStore = config.externalStore\n\t\t\tthis.has = (a, b) => externalStore.has(a, b)\n\t\t\tthis.addRelation = (a, b) => {\n\t\t\t\texternalStore.addRelation(a, b)\n\t\t\t\treturn this\n\t\t\t}\n\t\t\tthis.deleteRelation = (a, b) => {\n\t\t\t\texternalStore.deleteRelation(a, b)\n\t\t\t\treturn this\n\t\t\t}\n\t\t\tthis.getRelatedKeys = (key) => externalStore.getRelatedKeys(key)\n\t\t\tif (externalStore.getContent) {\n\t\t\t\tthis.getContentInternal = (contentKey) => {\n\t\t\t\t\treturn externalStore.getContent(contentKey) as any\n\t\t\t\t}\n\t\t\t\tthis.setContent = (contentKey, content) => {\n\t\t\t\t\texternalStore.setContent(contentKey, content as any)\n\t\t\t\t\treturn this\n\t\t\t\t}\n\t\t\t\tthis.deleteContent = (contentKey) => {\n\t\t\t\t\texternalStore.deleteContent(contentKey)\n\t\t\t\t\treturn this\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tpublic toJSON(): JunctionJSON<ASide, BSide, Content> {\n\t\treturn {\n\t\t\tbetween: [this.a, this.b],\n\t\t\tcardinality: this.cardinality,\n\t\t\trelations: [...this.relations.entries()].map(([a, b]) => [a, [...b]]),\n\t\t\tcontents: [...this.contents.entries()],\n\t\t}\n\t}\n\n\tpublic set(\n\t\ta: string,\n\t\t...rest: Content extends null ? [b: string] : [b: string, content: Content]\n\t): this\n\tpublic set(\n\t\trelation: { [Key in ASide | BSide]: string },\n\t\t...rest: Content extends null ? [] | [b?: undefined] : [content: Content]\n\t): this\n\tpublic set(\n\t\ta: string | { [Key in ASide | BSide]: string },\n\t\t...rest: Content extends null\n\t\t\t? [] | [b?: string | undefined]\n\t\t\t: [b: string, content: Content] | [content: Content]\n\t): this {\n\t\tconst b: string =\n\t\t\t// @ts-expect-error we deduce hereby that this.b may index a\n\t\t\ttypeof rest[0] === `string` ? rest[0] : (a[this.b] as string)\n\t\tconst content: Content | undefined =\n\t\t\trest[1] ?? typeof rest[0] === `string` ? undefined : (rest[0] as Content)\n\t\ta = typeof a === `string` ? a : a[this.a]\n\t\tswitch (this.cardinality) {\n\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: perfect here\n\t\t\tcase `1:1`: {\n\t\t\t\tconst bPrev = this.getRelatedKey(a)\n\t\t\t\tif (bPrev && bPrev !== b) this.delete(bPrev, a)\n\t\t\t}\n\t\t\tcase `1:n`: {\n\t\t\t\tconst aPrev = this.getRelatedKey(b)\n\t\t\t\tif (aPrev && aPrev !== a) this.delete(aPrev, b)\n\t\t\t}\n\t\t}\n\t\tthis.addRelation(a, b)\n\t\tif (content) {\n\t\t\tconst contentKey = this.makeContentKey(a, b)\n\t\t\tthis.setContent(contentKey, content)\n\t\t}\n\t\treturn this\n\t}\n\n\tpublic delete(a: string, b?: string): this\n\tpublic delete(\n\t\trelation:\n\t\t\t| Record<ASide | BSide, string>\n\t\t\t| Record<ASide, string>\n\t\t\t| Record<BSide, string>,\n\t\tb?: undefined,\n\t): this\n\tpublic delete(\n\t\tx:\n\t\t\t| Record<ASide | BSide, string>\n\t\t\t| Record<ASide, string>\n\t\t\t| Record<BSide, string>\n\t\t\t| string,\n\t\tb?: string | undefined,\n\t): this {\n\t\t// @ts-expect-error we deduce that this.b may index x\n\t\tb = typeof b === `string` ? b : (x[this.b] as string | undefined)\n\t\t// @ts-expect-error we deduce that this.a may index x\n\t\tconst a = typeof x === `string` ? x : (x[this.a] as string | undefined)\n\n\t\tif (a === undefined && typeof b === `string`) {\n\t\t\tconst bRelations = this.getRelatedKeys(b)\n\t\t\tif (bRelations) {\n\t\t\t\tfor (const a of bRelations) {\n\t\t\t\t\tthis.delete(a, b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (typeof a === `string` && b === undefined) {\n\t\t\tconst aRelations = this.getRelatedKeys(a)\n\t\t\tif (aRelations) {\n\t\t\t\tfor (const b of aRelations) {\n\t\t\t\t\tthis.delete(a, b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (typeof a === `string` && typeof b === `string`) {\n\t\t\tthis.deleteRelation(a, b)\n\t\t\tconst contentKey = this.makeContentKey(a, b)\n\t\t\tthis.deleteContent(contentKey)\n\t\t}\n\t\treturn this\n\t}\n\n\tpublic getRelatedKey(key: string): string | undefined {\n\t\tconst relations = this.getRelatedKeys(key)\n\t\tif (relations) {\n\t\t\tif (relations.size > 1) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${relations.size} related keys were found for key \"${key}\": (${[\n\t\t\t\t\t\t...relations,\n\t\t\t\t\t]\n\t\t\t\t\t\t.map((k) => `\"${k}\"`)\n\t\t\t\t\t\t.join(`, `)}). Only one related key was expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tfor (const relation of relations) {\n\t\t\t\treturn relation\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getContent(a: string, b: string): Content | undefined {\n\t\tconst contentKey = this.makeContentKey(a, b)\n\t\treturn this.getContentInternal(contentKey)\n\t}\n\n\tpublic getRelationEntries(\n\t\tinput: Record<ASide, string> | Record<BSide, string>,\n\t): [string, Content][] {\n\t\tconst a: string | undefined = (input as any)[this.a]\n\t\tconst b: string | undefined = (input as any)[this.b]\n\t\tif (a !== undefined && b === undefined) {\n\t\t\tconst aRelations = this.getRelatedKeys(a)\n\t\t\tif (aRelations) {\n\t\t\t\treturn [...aRelations].map((b) => {\n\t\t\t\t\treturn [b, this.getContent(a, b) ?? (null as Content)]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (a === undefined && b !== undefined) {\n\t\t\tconst bRelations = this.getRelatedKeys(b)\n\t\t\tif (bRelations) {\n\t\t\t\treturn [...bRelations].map((a) => {\n\t\t\t\t\treturn [a, this.getContent(a, b) ?? (null as Content)]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn []\n\t}\n\n\tpublic has(a: string, b?: string): boolean {\n\t\tif (b) {\n\t\t\tconst setA = this.getRelatedKeys(a)\n\t\t\treturn setA?.has(b) ?? false\n\t\t}\n\t\treturn this.relations.has(a)\n\t}\n}\n","export class Subject<T> {\n\tpublic Subscriber: (value: T) => void\n\n\tpublic subscribers: Map<string, this[`Subscriber`]> = new Map()\n\n\tpublic subscribe(key: string, subscriber: this[`Subscriber`]): () => void {\n\t\tthis.subscribers.set(key, subscriber)\n\t\tconst unsubscribe = () => this.unsubscribe(key)\n\t\treturn unsubscribe\n\t}\n\n\tprivate unsubscribe(key: string) {\n\t\tthis.subscribers.delete(key)\n\t}\n\n\tpublic next(value: T): void {\n\t\tfor (const subscriber of this.subscribers.values()) {\n\t\t\tsubscriber(value)\n\t\t}\n\t}\n}\n","import type {\n\tTransactionOptions,\n\tTransactionToken,\n\tTransactionUpdate,\n\tƒn,\n} from \"atom.io\"\nimport { getState, setState } from \"atom.io\"\n\nimport { IMPLICIT, type Store, type StoreCore, deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { abortTransaction } from \"./abort-transaction\"\nimport { applyTransaction } from \"./apply-transaction\"\nimport { buildTransaction } from \"./build-transaction\"\n\nexport type Transaction<ƒ extends ƒn> = {\n\tkey: string\n\ttype: `transaction`\n\tinstall: (store: Store) => void\n\tsubject: Subject<TransactionUpdate<ƒ>>\n\trun: (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n}\n\nexport function transaction__INTERNAL<ƒ extends ƒn>(\n\toptions: TransactionOptions<ƒ>,\n\tstore: Store = IMPLICIT.STORE,\n): TransactionToken<ƒ> {\n\tconst newTransaction: Transaction<ƒ> = {\n\t\tkey: options.key,\n\t\ttype: `transaction`,\n\t\trun: (...params: Parameters<ƒ>) => {\n\t\t\tbuildTransaction(options.key, params, store)\n\t\t\ttry {\n\t\t\t\tconst output = options.do(\n\t\t\t\t\t{\n\t\t\t\t\t\tget: (token) => getState(token, store),\n\t\t\t\t\t\tset: (token, value) => setState(token, value, store),\n\t\t\t\t\t},\n\t\t\t\t\t...params,\n\t\t\t\t)\n\t\t\t\tapplyTransaction(output, store)\n\t\t\t\treturn output\n\t\t\t} catch (thrown) {\n\t\t\t\tabortTransaction(store)\n\t\t\t\tstore.logger.warn(`💥`, `transaction`, options.key, `caught:`, thrown)\n\t\t\t\tthrow thrown\n\t\t\t}\n\t\t},\n\t\tinstall: (store) => transaction__INTERNAL(options, store),\n\t\tsubject: new Subject(),\n\t}\n\tconst core = target(store)\n\tcore.transactions.set(newTransaction.key, newTransaction)\n\tconst token = deposit(newTransaction)\n\tstore.subject.transactionCreation.next(token)\n\treturn token\n}\n\nexport const target = (store: Store = IMPLICIT.STORE): StoreCore =>\n\tstore.transactionStatus.phase === `building`\n\t\t? store.transactionStatus.core\n\t\t: store\n","import type { Store } from \"../store\"\n\nexport const abortTransaction = (store: Store): void => {\n\tif (store.transactionStatus.phase === `idle`) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\t`transaction`,\n\t\t\t`???`,\n\t\t\t`abortTransaction called outside of a transaction. This is probably a bug in AtomIO.`,\n\t\t)\n\t\treturn\n\t}\n\tstore.logger.info(\n\t\t`🪂`,\n\t\t`transaction`,\n\t\tstore.transactionStatus.key,\n\t\t`Aborting transaction`,\n\t)\n\tstore.transactionStatus = { phase: `idle` }\n}\n","import type { AtomToken, ƒn } from \"atom.io\"\nimport { setState, transaction } from \"atom.io\"\n\nimport { withdraw } from \"../store\"\nimport type { Store } from \"../store\"\n\nexport const applyTransaction = <ƒ extends ƒn>(\n\toutput: ReturnType<ƒ>,\n\tstore: Store,\n): void => {\n\tif (store.transactionStatus.phase !== `building`) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\t`transaction`,\n\t\t\t`???`,\n\t\t\t`applyTransaction called outside of a transaction. This is probably a bug in AtomIO.`,\n\t\t)\n\t\treturn\n\t}\n\tstore.transactionStatus.phase = `applying`\n\tstore.transactionStatus.output = output\n\tconst { atomUpdates } = store.transactionStatus\n\tstore.logger.info(\n\t\t`🛄`,\n\t\t`transaction`,\n\t\tstore.transactionStatus.key,\n\t\t`Applying transaction with ${atomUpdates.length} updates:`,\n\t\tatomUpdates,\n\t)\n\n\tfor (const { key, newValue } of atomUpdates) {\n\t\tconst token: AtomToken<unknown> = { key, type: `atom` }\n\t\tif (!store.valueMap.has(token.key)) {\n\t\t\tif (token.family) {\n\t\t\t\tconst family = store.families.get(token.family.key)\n\t\t\t\tif (family) {\n\t\t\t\t\tfamily(token.family.subKey)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst newAtom = store.transactionStatus.core.atoms.get(token.key)\n\t\t\t\tif (!newAtom) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Absurd Error: Atom \"${token.key}\" not found while copying updates from transaction \"${store.transactionStatus.key}\" to store \"${store.config.name}\"`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tstore.atoms.set(newAtom.key, newAtom)\n\t\t\t\tstore.valueMap.set(newAtom.key, newAtom.default)\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🔨`,\n\t\t\t\t\t`transaction`,\n\t\t\t\t\tstore.transactionStatus.key,\n\t\t\t\t\t`Adding atom \"${newAtom.key}\"`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t// if (store.transactionStatus.key === `dealCards`) debugger\n\t\tsetState(token, newValue, store)\n\t}\n\tconst myTransaction = withdraw<ƒ>(\n\t\t{ key: store.transactionStatus.key, type: `transaction` },\n\t\tstore,\n\t)\n\tif (myTransaction === undefined) {\n\t\tthrow new Error(\n\t\t\t`Transaction \"${store.transactionStatus.key}\" not found. Absurd. How is this running?`,\n\t\t)\n\t}\n\tmyTransaction.subject.next({\n\t\tkey: store.transactionStatus.key,\n\t\tatomUpdates,\n\t\toutput,\n\t\tparams: store.transactionStatus.params as Parameters<ƒ>,\n\t})\n\tstore.logger.info(\n\t\t`🛬`,\n\t\t`transaction`,\n\t\tstore.transactionStatus.key,\n\t\t`Finished applying transaction.`,\n\t)\n\tstore.transactionStatus = { phase: `idle` }\n}\n","import { Junction } from \"~/packages/rel8/junction/src\"\n\nimport type { Store } from \"../store\"\n\nexport const buildTransaction = (\n\tkey: string,\n\tparams: any[],\n\tstore: Store,\n): void => {\n\tstore.transactionStatus = {\n\t\tkey,\n\t\tphase: `building`,\n\t\ttime: Date.now(),\n\t\tcore: {\n\t\t\tatoms: new Map(store.atoms),\n\t\t\tatomsThatAreDefault: new Set(store.atomsThatAreDefault),\n\t\t\tfamilies: new Map(store.families),\n\t\t\toperation: { open: false },\n\t\t\treadonlySelectors: new Map(store.readonlySelectors),\n\t\t\ttimelines: new Map(store.timelines),\n\t\t\ttimelineAtoms: new Junction(store.timelineAtoms.toJSON()),\n\t\t\ttrackers: new Map(),\n\t\t\ttransactions: new Map(store.transactions),\n\t\t\tselectorAtoms: new Junction(store.selectorAtoms.toJSON()),\n\t\t\tselectorGraph: new Junction(store.selectorGraph.toJSON(), {\n\t\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t\t}),\n\t\t\tselectors: new Map(store.selectors),\n\t\t\tvalueMap: new Map(store.valueMap),\n\t\t},\n\t\tatomUpdates: [],\n\t\tparams,\n\t\toutput: undefined,\n\t}\n\tstore.logger.info(\n\t\t`🛫`,\n\t\t`transaction`,\n\t\tkey,\n\t\t`Building transaction with params:`,\n\t\tparams,\n\t)\n}\n","import type { AtomToken, TransactionUpdate, ƒn } from \"atom.io\"\nimport { setState } from \"atom.io\"\n\nimport { withdraw } from \"../store\"\nimport type { Store } from \"../store\"\n\nexport const redoTransactionUpdate = <ƒ extends ƒn>(\n\tupdate: TransactionUpdate<ƒ>,\n\tstore: Store,\n): void => {\n\tstore.logger.info(`⏭️`, `transaction`, update.key, `Redo`)\n\tfor (const { key, newValue } of update.atomUpdates) {\n\t\tconst token: AtomToken<unknown> = { key, type: `atom` }\n\t\tconst state = withdraw(token, store)\n\t\tif (state === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`State \"${token.key}\" not found in this store. This is surprising, because we are navigating the history of the store.`,\n\t\t\t)\n\t\t}\n\t\tsetState(state, newValue, store)\n\t}\n}\n","import type { AtomToken, TransactionUpdate, ƒn } from \"atom.io\"\nimport { setState } from \"atom.io\"\n\nimport { withdraw } from \"../store\"\nimport type { Store } from \"../store\"\n\nexport const undoTransactionUpdate = <ƒ extends ƒn>(\n\tupdate: TransactionUpdate<ƒ>,\n\tstore: Store,\n): void => {\n\tstore.logger.info(\n\t\t`⏮️`,\n\t\t`transaction`,\n\t\tupdate.key,\n\t\t`Undoing transaction update`,\n\t\tupdate,\n\t)\n\tfor (const { key, oldValue } of update.atomUpdates) {\n\t\tconst token: AtomToken<unknown> = { key, type: `atom` }\n\t\tconst state = withdraw(token, store)\n\t\tif (state === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`State \"${token.key}\" not found in this store. This is surprising, because we are navigating the history of the store.`,\n\t\t\t)\n\t\t}\n\t\tsetState(state, oldValue, store)\n\t}\n}\n","import type { TransactionUpdate, ƒn } from \"atom.io\"\n\nimport type { StoreCore } from \"..\"\n\nexport * from \"./transaction-internal\"\n\nexport * from \"./abort-transaction\"\nexport * from \"./apply-transaction\"\nexport * from \"./build-transaction\"\nexport * from \"./redo-transaction\"\nexport * from \"./undo-transaction\"\n\nexport const TRANSACTION_PHASES = [`idle`, `building`, `applying`] as const\nexport type TransactionPhase = typeof TRANSACTION_PHASES[number]\n\nexport type TransactionUpdateInProgress<ƒ extends ƒn> = TransactionUpdate<ƒ> & {\n\tphase: `applying` | `building`\n\ttime: number\n\tcore: StoreCore\n}\nexport type TransactionIdle = {\n\tphase: `idle`\n}\nexport type TransactionStatus<ƒ extends ƒn> =\n\t| TransactionIdle\n\t| TransactionUpdateInProgress<ƒ>\n","import type { AtomToken, TimelineUpdate } from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { IMPLICIT, withdraw } from \"../store\"\nimport { target } from \"../transaction\"\nimport type {\n\tTimeline,\n\tTimelineAtomUpdate,\n\tTimelineTransactionUpdate,\n} from \"./timeline-internal\"\n\nexport const addAtomToTimeline = (\n\tatomToken: AtomToken<any>,\n\ttl: Timeline,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst atom = withdraw(atomToken, store)\n\tif (atom === undefined) {\n\t\tthrow new Error(\n\t\t\t`Cannot subscribe to atom \"${atomToken.key}\" because it has not been initialized in store \"${store.config.name}\"`,\n\t\t)\n\t}\n\tatom.subject.subscribe(`timeline`, (update) => {\n\t\tconst currentSelectorKey =\n\t\t\tstore.operation.open && store.operation.token.type === `selector`\n\t\t\t\t? store.operation.token.key\n\t\t\t\t: null\n\t\tconst currentSelectorTime =\n\t\t\tstore.operation.open && store.operation.token.type === `selector`\n\t\t\t\t? store.operation.time\n\t\t\t\t: null\n\t\tconst currentTransactionKey =\n\t\t\tstore.transactionStatus.phase === `applying`\n\t\t\t\t? store.transactionStatus.key\n\t\t\t\t: null\n\t\tconst currentTransactionTime =\n\t\t\tstore.transactionStatus.phase === `applying`\n\t\t\t\t? store.transactionStatus.time\n\t\t\t\t: null\n\n\t\t// store.logger.info(\n\t\t// \t`⏳ timeline \"${tl.key}\" saw atom \"${atomToken.key}\" go (`,\n\t\t// \tupdate.oldValue,\n\t\t// \t`->`,\n\t\t// \tupdate.newValue,\n\t\t// \tcurrentTransactionKey\n\t\t// \t\t? `) in transaction \"${currentTransactionKey}\"`\n\t\t// \t\t: currentSelectorKey\n\t\t// \t\t? `) in selector \"${currentSelectorKey}\"`\n\t\t// \t\t: `)`,\n\t\t// )\n\t\tstore.logger.info(\n\t\t\t`⏳`,\n\t\t\t`timeline`,\n\t\t\ttl.key,\n\t\t\t`atom`,\n\t\t\tatomToken.key,\n\t\t\t`went`,\n\t\t\tupdate.oldValue,\n\t\t\t`->`,\n\t\t\tupdate.newValue,\n\t\t\tcurrentTransactionKey\n\t\t\t\t? `in transaction \"${currentTransactionKey}\"`\n\t\t\t\t: currentSelectorKey\n\t\t\t\t? `in selector \"${currentSelectorKey}\"`\n\t\t\t\t: ``,\n\t\t)\n\n\t\tif (tl.timeTraveling === null) {\n\t\t\tif (tl.selectorTime && tl.selectorTime !== currentSelectorTime) {\n\t\t\t\tconst mostRecentUpdate: TimelineUpdate | undefined = tl.history.at(-1)\n\t\t\t\tif (mostRecentUpdate === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Timeline \"${tl.key}\" has a selectorTime, but no history. This is most likely a bug in AtomIO.`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tcurrentTransactionKey &&\n\t\t\t\tstore.transactionStatus.phase === `applying`\n\t\t\t) {\n\t\t\t\tconst currentTransaction = withdraw(\n\t\t\t\t\t{ key: currentTransactionKey, type: `transaction` },\n\t\t\t\t\tstore,\n\t\t\t\t)\n\t\t\t\tif (currentTransaction === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Transaction \"${currentTransactionKey}\" not found in store \"${store.config.name}\". This is surprising, because we are in the application phase of \"${currentTransactionKey}\".`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (tl.transactionKey !== currentTransactionKey) {\n\t\t\t\t\tif (tl.transactionKey) {\n\t\t\t\t\t\tstore.logger.error(\n\t\t\t\t\t\t\t`🐞`,\n\t\t\t\t\t\t\t`timeline`,\n\t\t\t\t\t\t\ttl.key,\n\t\t\t\t\t\t\t`unable to resolve transaction \"${tl.transactionKey}. This is probably a bug in AtomIO.`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\ttl.transactionKey = currentTransactionKey\n\t\t\t\t\tconst unsubscribe = currentTransaction.subject.subscribe(\n\t\t\t\t\t\t`timeline:${tl.key}`,\n\t\t\t\t\t\t(update) => {\n\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\tif (tl.timeTraveling === null && currentTransactionTime) {\n\t\t\t\t\t\t\t\tif (tl.at !== tl.history.length) {\n\t\t\t\t\t\t\t\t\ttl.history.splice(tl.at)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst atomUpdates = update.atomUpdates.filter((atomUpdate) => {\n\t\t\t\t\t\t\t\t\tconst core = target(store)\n\t\t\t\t\t\t\t\t\tconst atomOrFamilyKeys = core.timelineAtoms.getRelatedKeys(\n\t\t\t\t\t\t\t\t\t\ttl.key,\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\treturn atomOrFamilyKeys\n\t\t\t\t\t\t\t\t\t\t? [...atomOrFamilyKeys].some(\n\t\t\t\t\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey === atomUpdate.key ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey === atomUpdate.family?.key,\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tconst timelineTransactionUpdate: TimelineTransactionUpdate = {\n\t\t\t\t\t\t\t\t\ttype: `transaction_update`,\n\t\t\t\t\t\t\t\t\ttimestamp: currentTransactionTime,\n\t\t\t\t\t\t\t\t\t...update,\n\t\t\t\t\t\t\t\t\tatomUpdates,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst willCapture =\n\t\t\t\t\t\t\t\t\ttl.shouldCapture?.(timelineTransactionUpdate, tl) ?? true\n\t\t\t\t\t\t\t\tif (willCapture) {\n\t\t\t\t\t\t\t\t\ttl.history.push(timelineTransactionUpdate)\n\t\t\t\t\t\t\t\t\ttl.at = tl.history.length\n\t\t\t\t\t\t\t\t\ttl.subject.next(timelineTransactionUpdate)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl.transactionKey = null\n\t\t\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t\t\t`⌛`,\n\t\t\t\t\t\t\t\t`timeline`,\n\t\t\t\t\t\t\t\ttl.key,\n\t\t\t\t\t\t\t\t`got a transaction_update \"${update.key}\"`,\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} else if (currentSelectorKey && currentSelectorTime) {\n\t\t\t\tlet latestUpdate: TimelineUpdate | undefined = tl.history.at(-1)\n\n\t\t\t\tif (currentSelectorTime !== tl.selectorTime) {\n\t\t\t\t\tlatestUpdate = {\n\t\t\t\t\t\ttype: `selector_update`,\n\t\t\t\t\t\ttimestamp: currentSelectorTime,\n\t\t\t\t\t\tkey: currentSelectorKey,\n\t\t\t\t\t\tatomUpdates: [],\n\t\t\t\t\t}\n\t\t\t\t\tlatestUpdate.atomUpdates.push({\n\t\t\t\t\t\tkey: atom.key,\n\t\t\t\t\t\ttype: `atom_update`,\n\t\t\t\t\t\t...update,\n\t\t\t\t\t})\n\t\t\t\t\tif (tl.at !== tl.history.length) {\n\t\t\t\t\t\ttl.history.splice(tl.at)\n\t\t\t\t\t}\n\n\t\t\t\t\ttl.history.push(latestUpdate)\n\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`⌛`,\n\t\t\t\t\t\t`timeline`,\n\t\t\t\t\t\ttl.key,\n\t\t\t\t\t\t`got a selector_update \"${currentSelectorKey}\" with`,\n\t\t\t\t\t\tlatestUpdate.atomUpdates.map((atomUpdate) => atomUpdate.key),\n\t\t\t\t\t)\n\n\t\t\t\t\ttl.at = tl.history.length\n\t\t\t\t\ttl.selectorTime = currentSelectorTime\n\t\t\t\t} else {\n\t\t\t\t\tif (latestUpdate?.type === `selector_update`) {\n\t\t\t\t\t\tlatestUpdate.atomUpdates.push({\n\t\t\t\t\t\t\tkey: atom.key,\n\t\t\t\t\t\t\ttype: `atom_update`,\n\t\t\t\t\t\t\t...update,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t\t`⌛`,\n\t\t\t\t\t\t\t`timeline`,\n\t\t\t\t\t\t\ttl.key,\n\t\t\t\t\t\t\t`set selector_update \"${currentSelectorKey}\" to`,\n\t\t\t\t\t\t\tlatestUpdate?.atomUpdates.map((atomUpdate) => atomUpdate.key),\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (latestUpdate) {\n\t\t\t\t\tconst willCaptureSelectorUpdate =\n\t\t\t\t\t\ttl.shouldCapture?.(latestUpdate, tl) ?? true\n\t\t\t\t\tif (willCaptureSelectorUpdate) {\n\t\t\t\t\t\ttl.subject.next(latestUpdate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttl.history.pop()\n\t\t\t\t\t\ttl.at = tl.history.length\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst timestamp = Date.now()\n\t\t\t\ttl.selectorTime = null\n\t\t\t\tif (tl.at !== tl.history.length) {\n\t\t\t\t\ttl.history.splice(tl.at)\n\t\t\t\t}\n\t\t\t\tconst atomUpdate: TimelineAtomUpdate = {\n\t\t\t\t\ttype: `atom_update`,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\tkey: atom.key,\n\t\t\t\t\toldValue: update.oldValue,\n\t\t\t\t\tnewValue: update.newValue,\n\t\t\t\t}\n\t\t\t\tif (atom.family) {\n\t\t\t\t\tatomUpdate.family = atom.family\n\t\t\t\t}\n\t\t\t\tconst willCapture = tl.shouldCapture?.(atomUpdate, tl) ?? true\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`⌛`,\n\t\t\t\t\t`timeline`,\n\t\t\t\t\ttl.key,\n\t\t\t\t\t`got an atom_update to \"${atom.key}\"`,\n\t\t\t\t)\n\t\t\t\tif (willCapture) {\n\t\t\t\t\ttl.history.push(atomUpdate)\n\t\t\t\t\ttl.at = tl.history.length\n\t\t\t\t\ttl.subject.next(atomUpdate)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import type { TimelineToken } from \"atom.io\"\nimport { setState } from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\n\nexport const redo__INTERNAL = (\n\ttoken: TimelineToken,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tstore.logger.info(`⏩`, `timeline`, token.key, `redo`)\n\tconst timelineData = store.timelines.get(token.key)\n\tif (!timelineData) {\n\t\tstore.logger.error(\n\t\t\t`🐞`,\n\t\t\t`timeline`,\n\t\t\ttoken.key,\n\t\t\t`Failed to redo. This timeline has not been initialized.`,\n\t\t)\n\t\treturn\n\t}\n\tif (timelineData.at === timelineData.history.length) {\n\t\tstore.logger.warn(\n\t\t\t`💁`,\n\t\t\t`timeline`,\n\t\t\ttoken.key,\n\t\t\t`Failed to redo at the end of timeline \"${token.key}\". There is nothing to redo.`,\n\t\t)\n\t\treturn\n\t}\n\ttimelineData.timeTraveling = `into_future`\n\tconst update = timelineData.history[timelineData.at]\n\tswitch (update.type) {\n\t\tcase `atom_update`: {\n\t\t\tconst { key, newValue } = update\n\t\t\tsetState({ key, type: `atom` }, newValue, store)\n\t\t\tbreak\n\t\t}\n\t\tcase `selector_update`:\n\t\tcase `transaction_update`: {\n\t\t\tfor (const atomUpdate of update.atomUpdates) {\n\t\t\t\tconst { key, newValue } = atomUpdate\n\t\t\t\tsetState({ key, type: `atom` }, newValue, store)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\t++timelineData.at\n\ttimelineData.subject.next(`redo`)\n\ttimelineData.timeTraveling = null\n\tstore.logger.info(\n\t\t`⏹️`,\n\t\t`timeline`,\n\t\ttoken.key,\n\t\t`\"${token.key}\" is now at ${timelineData.at} / ${timelineData.history.length}`,\n\t)\n}\n\nexport const undo__INTERNAL = (\n\ttoken: TimelineToken,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tstore.logger.info(`⏪`, `timeline`, token.key, `undo`)\n\tconst timelineData = store.timelines.get(token.key)\n\tif (!timelineData) {\n\t\tstore.logger.error(\n\t\t\t`🐞`,\n\t\t\t`timeline`,\n\t\t\ttoken.key,\n\t\t\t`Failed to undo. This timeline has not been initialized.`,\n\t\t)\n\t\treturn\n\t}\n\tif (timelineData.at === 0) {\n\t\tstore.logger.warn(\n\t\t\t`💁`,\n\t\t\t`timeline`,\n\t\t\ttoken.key,\n\t\t\t`Failed to undo at the beginning of timeline \"${token.key}\". There is nothing to undo.`,\n\t\t)\n\t\treturn\n\t}\n\ttimelineData.timeTraveling = `into_past`\n\t--timelineData.at\n\tconst update = timelineData.history[timelineData.at]\n\tswitch (update.type) {\n\t\tcase `atom_update`: {\n\t\t\tconst { key, oldValue } = update\n\t\t\tsetState({ key, type: `atom` }, oldValue, store)\n\t\t\tbreak\n\t\t}\n\t\tcase `selector_update`:\n\t\tcase `transaction_update`: {\n\t\t\tfor (const atomUpdate of [...update.atomUpdates].reverse()) {\n\t\t\t\tconst { key, oldValue } = atomUpdate\n\t\t\t\tsetState({ key, type: `atom` }, oldValue, store)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\ttimelineData.subject.next(`undo`)\n\ttimelineData.timeTraveling = null\n\tstore.logger.info(\n\t\t`⏹️`,\n\t\t`timeline`,\n\t\ttoken.key,\n\t\t`\"${token.key}\" is now at ${timelineData.at} / ${timelineData.history.length}`,\n\t)\n}\n","import type {\n\tFamilyMetadata,\n\tStateUpdate,\n\tTimelineOptions,\n\tTimelineToken,\n\tTimelineUpdate,\n\tTransactionUpdate,\n\tƒn,\n} from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { target } from \"../transaction\"\nimport { addAtomToTimeline } from \"./add-atom-to-timeline\"\n\nexport type TimelineAtomUpdate = StateUpdate<unknown> & {\n\tkey: string\n\ttype: `atom_update`\n\ttimestamp: number\n\tfamily?: FamilyMetadata\n}\nexport type TimelineSelectorUpdate = {\n\tkey: string\n\ttype: `selector_update`\n\ttimestamp: number\n\tatomUpdates: Omit<TimelineAtomUpdate, `timestamp`>[]\n}\nexport type TimelineTransactionUpdate = TransactionUpdate<ƒn> & {\n\tkey: string\n\ttype: `transaction_update`\n\ttimestamp: number\n}\n\nexport type Timeline = {\n\ttype: `timeline`\n\tkey: string\n\tat: number\n\tshouldCapture?: (update: TimelineUpdate, timeline: Timeline) => boolean\n\ttimeTraveling: `into_future` | `into_past` | null\n\thistory: TimelineUpdate[]\n\tselectorTime: number | null\n\ttransactionKey: string | null\n\tinstall: (store: Store) => void\n\tsubject: Subject<\n\t\t| TimelineAtomUpdate\n\t\t| TimelineSelectorUpdate\n\t\t| TimelineTransactionUpdate\n\t\t| `redo`\n\t\t| `undo`\n\t>\n}\n\nexport function timeline__INTERNAL(\n\toptions: TimelineOptions,\n\tstore: Store = IMPLICIT.STORE,\n\tdata: Timeline | null = null,\n): TimelineToken {\n\tconst tl: Timeline = {\n\t\ttype: `timeline`,\n\t\tkey: options.key,\n\t\tat: 0,\n\t\ttimeTraveling: null,\n\t\tselectorTime: null,\n\t\ttransactionKey: null,\n\t\t...data,\n\t\thistory: data?.history.map((update) => ({ ...update })) ?? [],\n\t\tinstall: (store) => timeline__INTERNAL(options, store, tl),\n\t\tsubject: new Subject(),\n\t}\n\tif (options.shouldCapture) {\n\t\ttl.shouldCapture = options.shouldCapture\n\t}\n\n\tconst core = target(store)\n\tfor (const tokenOrFamily of options.atoms) {\n\t\tconst timelineKey = core.timelineAtoms.getRelatedKey(tokenOrFamily.key)\n\t\tif (timelineKey) {\n\t\t\tstore.logger.error(\n\t\t\t\t`❌`,\n\t\t\t\t`timeline`,\n\t\t\t\toptions.key,\n\t\t\t\t`Failed to add atom \"${tokenOrFamily.key}\" because it already belongs to timeline \"${timelineKey}\"`,\n\t\t\t)\n\t\t\tcontinue\n\t\t}\n\t\tif (tokenOrFamily.type === `atom_family`) {\n\t\t\tconst family = tokenOrFamily\n\t\t\tfamily.subject.subscribe(`timeline:${options.key}`, (token) => {\n\t\t\t\t// if (!core.atoms.has(token.key)) {\n\t\t\t\taddAtomToTimeline(token, tl, store)\n\t\t\t\t// }\n\t\t\t})\n\t\t\tfor (const atom of core.atoms.values()) {\n\t\t\t\tif (atom.family?.key === family.key) {\n\t\t\t\t\taddAtomToTimeline(atom, tl, store)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst token = tokenOrFamily\n\t\t\tif (`family` in token && token.family) {\n\t\t\t\tconst familyTimelineKey = core.timelineAtoms.getRelatedKey(\n\t\t\t\t\ttoken.family.key,\n\t\t\t\t)\n\t\t\t\tif (familyTimelineKey) {\n\t\t\t\t\tstore.logger.error(\n\t\t\t\t\t\t`❌`,\n\t\t\t\t\t\t`timeline`,\n\t\t\t\t\t\toptions.key,\n\t\t\t\t\t\t`Failed to add atom \"${token.key}\" because its family \"${token.family.key}\" already belongs to timeline \"${familyTimelineKey}\"`,\n\t\t\t\t\t)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\taddAtomToTimeline(token, tl, store)\n\t\t}\n\t\tcore.timelineAtoms = core.timelineAtoms.set({\n\t\t\tatomKey: tokenOrFamily.key,\n\t\t\ttimelineKey: options.key,\n\t\t})\n\t}\n\n\tstore.timelines.set(options.key, tl)\n\tconst token: TimelineToken = {\n\t\tkey: options.key,\n\t\ttype: `timeline`,\n\t}\n\tstore.subject.timelineCreation.next(token)\n\treturn token\n}\n","import type {\n\tAtomToken,\n\tReadonlySelectorToken,\n\tSelectorToken,\n\tStateToken,\n\tTimelineToken,\n\tTransactionToken,\n\tƒn,\n} from \"atom.io\"\n\nimport type { Atom } from \"../atom\"\nimport type { ReadonlySelector, Selector } from \"../selector\"\nimport { addAtomToTimeline } from \"../timeline\"\nimport type { Timeline } from \"../timeline\"\nimport type { Transaction } from \"../transaction\"\nimport { target } from \"../transaction\"\nimport type { Store } from \"./store\"\n\nexport function withdraw<T>(\n\ttoken: AtomToken<T>,\n\tstore: Store,\n): Atom<T> | undefined\nexport function withdraw<T>(\n\ttoken: SelectorToken<T>,\n\tstore: Store,\n): Selector<T> | undefined\nexport function withdraw<T>(\n\ttoken: StateToken<T>,\n\tstore: Store,\n): Atom<T> | Selector<T> | undefined\nexport function withdraw<T>(\n\ttoken: ReadonlySelectorToken<T>,\n\tstore: Store,\n): ReadonlySelector<T> | undefined\nexport function withdraw<T>(\n\ttoken: TransactionToken<T>,\n\tstore: Store,\n): Transaction<T extends ƒn ? T : never> | undefined\nexport function withdraw<T>(\n\ttoken: ReadonlySelectorToken<T> | StateToken<T>,\n\tstore: Store,\n): Atom<T> | ReadonlySelector<T> | Selector<T> | undefined\nexport function withdraw<T>(\n\ttoken: TimelineToken,\n\tstore: Store,\n): Timeline | undefined\nexport function withdraw<T>(\n\ttoken:\n\t\t| ReadonlySelectorToken<T>\n\t\t| StateToken<T>\n\t\t| TimelineToken\n\t\t| TransactionToken<T>,\n\tstore: Store,\n):\n\t| Atom<T>\n\t| ReadonlySelector<T>\n\t| Selector<T>\n\t| Timeline\n\t| Transaction<T extends ƒn ? T : never>\n\t| undefined {\n\tlet core = target(store)\n\tlet state =\n\t\tcore.atoms.get(token.key) ??\n\t\tcore.selectors.get(token.key) ??\n\t\tcore.readonlySelectors.get(token.key) ??\n\t\tcore.transactions.get(token.key) ??\n\t\tcore.timelines.get(token.key)\n\tif (state) {\n\t\treturn state\n\t}\n\tif (store.transactionStatus.phase === `applying`) {\n\t\tcore = store.transactionStatus.core\n\t\tstate =\n\t\t\tcore.atoms.get(token.key) ??\n\t\t\tcore.selectors.get(token.key) ??\n\t\t\tcore.readonlySelectors.get(token.key) ??\n\t\t\tcore.transactions.get(token.key) ??\n\t\t\tcore.timelines.get(token.key)\n\n\t\tif (state) {\n\t\t\tstore.logger.info(\n\t\t\t\t`🛠️`,\n\t\t\t\ttoken.type,\n\t\t\t\ttoken.key,\n\t\t\t\t`add ${token.type} \"${token.key}\"`,\n\t\t\t)\n\t\t\tswitch (state.type) {\n\t\t\t\tcase `atom`: {\n\t\t\t\t\tstore.atoms.set(token.key, state)\n\t\t\t\t\tstore.valueMap.set(token.key, state.default)\n\t\t\t\t\tconst stateKey = state.key\n\t\t\t\t\tconst familyKey = state.family?.key\n\t\t\t\t\tlet timelineKey = core.timelineAtoms.getRelatedKey(stateKey)\n\t\t\t\t\tif (timelineKey === undefined && typeof familyKey === `string`) {\n\t\t\t\t\t\ttimelineKey = core.timelineAtoms.getRelatedKey(familyKey)\n\t\t\t\t\t}\n\t\t\t\t\tconst timeline =\n\t\t\t\t\t\ttypeof timelineKey === `string`\n\t\t\t\t\t\t\t? store.timelines.get(timelineKey)\n\t\t\t\t\t\t\t: undefined\n\n\t\t\t\t\tif (timeline) {\n\t\t\t\t\t\taddAtomToTimeline(state, timeline, store)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase `selector`:\n\t\t\t\t\tcore.selectors.set(token.key, state)\n\t\t\t\t\tbreak\n\t\t\t\tcase `readonly_selector`:\n\t\t\t\t\tcore.readonlySelectors.set(token.key, state)\n\t\t\t\t\tbreak\n\t\t\t\tcase `transaction`:\n\t\t\t\t\tcore.transactions.set(token.key, state)\n\t\t\t\t\tbreak\n\t\t\t\tcase `timeline`:\n\t\t\t\t\tcore.timelines.set(token.key, state)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn state\n\t\t}\n\t}\n\treturn undefined\n}\n","import type {\n\tAtomToken,\n\tReadonlySelectorToken,\n\tSelectorToken,\n\tStateToken,\n} from \"atom.io\"\nimport type { Atom, ReadonlySelector, Selector, Store } from \"..\"\nimport { withdraw } from \"..\"\nimport { target } from \"../transaction\"\n\nexport function withdrawNewFamilyMember<T>(\n\ttoken: AtomToken<T>,\n\tstore: Store,\n): Atom<T> | undefined\nexport function withdrawNewFamilyMember<T>(\n\ttoken: SelectorToken<T>,\n\tstore: Store,\n): Selector<T> | undefined\nexport function withdrawNewFamilyMember<T>(\n\ttoken: ReadonlySelectorToken<T>,\n\tstore: Store,\n): ReadonlySelector<T> | undefined\nexport function withdrawNewFamilyMember<T>(\n\ttoken: StateToken<T>,\n\tstore: Store,\n): Atom<T> | Selector<T> | undefined\nexport function withdrawNewFamilyMember<T>(\n\ttoken: ReadonlySelectorToken<T> | StateToken<T>,\n\tstore: Store,\n): Atom<T> | ReadonlySelector<T> | Selector<T> | undefined\nexport function withdrawNewFamilyMember<T>(\n\ttoken:\n\t\t| AtomToken<T>\n\t\t| ReadonlySelectorToken<T>\n\t\t| SelectorToken<T>\n\t\t| StateToken<T>,\n\tstore: Store,\n): Atom<T> | ReadonlySelector<T> | Selector<T> | undefined {\n\tstore.logger.info(\n\t\t`👪`,\n\t\ttoken.type,\n\t\ttoken.key,\n\t\t`creating new family member in store \"${store.config.name}\"`,\n\t)\n\tif (token.family) {\n\t\tconst core = target(store)\n\t\tconst family = core.families.get(token.family.key)\n\t\tif (family) {\n\t\t\tconst jsonSubKey = JSON.parse(token.family.subKey)\n\t\t\tfamily(jsonSubKey)\n\t\t\tconst state = withdraw(token, store)\n\t\t\treturn state\n\t\t}\n\t}\n\treturn undefined\n}\n","import type { StateUpdate } from \"atom.io\"\nimport { Future } from \"./future\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport type { Subject } from \"./subject\"\nimport { target } from \"./transaction\"\n\nexport const cacheValue = (\n\tkey: string,\n\tvalue: unknown,\n\tsubject: Subject<StateUpdate<unknown>>,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst currentValue = target(store).valueMap.get(key)\n\tif (currentValue instanceof Future) {\n\t\tcurrentValue.cancel()\n\t}\n\tif (value instanceof Promise) {\n\t\tconst future = new Future(value)\n\t\ttarget(store).valueMap.set(key, future)\n\t\tfuture\n\t\t\t.then((value) => {\n\t\t\t\tif (future.isCanceled) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcacheValue(key, value, subject, store)\n\t\t\t\tsubject.next({ newValue: value, oldValue: value })\n\t\t\t})\n\t\t\t.catch((thrown) => {\n\t\t\t\tif (thrown !== `canceled`) {\n\t\t\t\t\tstore.logger.error(`💥`, `state`, key, `rejected:`, thrown)\n\t\t\t\t}\n\t\t\t})\n\t} else {\n\t\ttarget(store).valueMap.set(key, value)\n\t}\n}\n\nexport const readCachedValue = <T>(\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): T => target(store).valueMap.get(key)\n\nexport const isValueCached = (\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): boolean => target(store).valueMap.has(key)\n\nexport const evictCachedValue = (\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst core = target(store)\n\tconst currentValue = core.valueMap.get(key)\n\tif (currentValue instanceof Future) {\n\t\tcurrentValue.cancel()\n\t}\n\tif (core.operation.open) {\n\t\tcore.operation.prev.set(key, currentValue)\n\t}\n\tcore.valueMap.delete(key)\n\tstore.logger.info(`🗑`, `state`, key, `evicted`)\n}\n","import type { MutableAtomOptions, MutableAtomToken } from \"atom.io\"\nimport { subscribe } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { selectJson } from \"atom.io/json\"\n\nimport { createAtom } from \"../atom\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { target } from \"../transaction\"\nimport { Tracker } from \"./tracker\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport function createMutableAtom<\n\tCore extends Transceiver<any>,\n\tSerializableCore extends Json.Serializable,\n>(\n\toptions: MutableAtomOptions<Core, SerializableCore>,\n\tstore: Store = IMPLICIT.STORE,\n): MutableAtomToken<Core, SerializableCore> {\n\tstore.logger.info(\n\t\t`🔧`,\n\t\t`atom`,\n\t\toptions.key,\n\t\t`creating in store \"${store.config.name}\"`,\n\t)\n\tconst coreState = createAtom<Core>(options, undefined, store)\n\tnew Tracker(coreState, store)\n\tconst jsonState = selectJson(coreState, options, store)\n\tsubscribe(\n\t\tjsonState,\n\t\t() => {\n\t\t\tconst trackerHasBeenInitialized = target(store).trackers.has(coreState.key)\n\t\t\tif (!trackerHasBeenInitialized) {\n\t\t\t\tnew Tracker(coreState, store)\n\t\t\t}\n\t\t},\n\t\t`tracker-initializer:${store?.config.name}:${\n\t\t\tstore.transactionStatus.phase === `idle`\n\t\t\t\t? `main`\n\t\t\t\t: store.transactionStatus.key\n\t\t}`,\n\t)\n\treturn coreState as MutableAtomToken<Core, SerializableCore>\n}\n","import type { AtomToken, FamilyMetadata, MutableAtomToken } from \"atom.io\"\nimport { getState, setState, subscribe, subscribeToTimeline } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { Store } from \"..\"\nimport { IMPLICIT } from \"..\"\nimport { createAtom, deleteAtom } from \"../atom\"\nimport { target } from \"../transaction\"\nimport type { Transceiver } from \"./transceiver\"\n\n/**\n * @internal Give the tracker a transceiver state and a store, and it will\n * subscribe to the transceiver's inner value. When the inner value changes,\n * the tracker will update its own state to reflect the change.\n */\nexport class Tracker<Mutable extends Transceiver<any>> {\n\tprivate Update: Mutable extends Transceiver<infer Signal> ? Signal : never\n\n\tprivate initializeState(\n\t\tmutableState: MutableAtomToken<Mutable, Json.Serializable>,\n\t\tstore: Store = IMPLICIT.STORE,\n\t): AtomToken<typeof this.Update | null> {\n\t\tconst latestUpdateStateKey = `*${mutableState.key}`\n\t\tdeleteAtom({ type: `atom`, key: latestUpdateStateKey }, store)\n\t\tconst familyMetaData: FamilyMetadata | undefined = mutableState.family\n\t\t\t? {\n\t\t\t\t\tkey: `*${mutableState.family.key}`,\n\t\t\t\t\tsubKey: mutableState.family.subKey,\n\t\t\t }\n\t\t\t: undefined\n\t\tconst latestUpdateState = createAtom<\n\t\t\t(Mutable extends Transceiver<infer Signal> ? Signal : never) | null\n\t\t>(\n\t\t\t{\n\t\t\t\tkey: latestUpdateStateKey,\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t\tfamilyMetaData,\n\t\t\tstore,\n\t\t)\n\n\t\treturn latestUpdateState\n\t}\n\n\tprivate unsubscribeFromInnerValue: (() => void) | null = null\n\tprivate observeCore(\n\t\tmutableState: MutableAtomToken<Mutable, Json.Serializable>,\n\t\tlatestUpdateState: AtomToken<typeof this.Update | null>,\n\t\tstore: Store = IMPLICIT.STORE,\n\t): void {\n\t\tconst originalInnerValue = getState(mutableState, store)\n\t\tthis.unsubscribeFromInnerValue = originalInnerValue.subscribe(\n\t\t\t`tracker:${store.config.name}:${\n\t\t\t\tstore.transactionStatus.phase === `idle`\n\t\t\t\t\t? `main`\n\t\t\t\t\t: store.transactionStatus.key\n\t\t\t}`,\n\t\t\t(update) => {\n\t\t\t\tconst unsubscribe = store.subject.operationStatus.subscribe(\n\t\t\t\t\tmutableState.key,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\tsetState(latestUpdateState, update, store)\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t},\n\t\t)\n\t\tsubscribe(\n\t\t\tmutableState,\n\t\t\t(update) => {\n\t\t\t\tif (update.newValue !== update.oldValue) {\n\t\t\t\t\tthis.unsubscribeFromInnerValue?.()\n\t\t\t\t\tthis.unsubscribeFromInnerValue = update.newValue.subscribe(\n\t\t\t\t\t\t`tracker:${store.config.name}:${\n\t\t\t\t\t\t\tstore.transactionStatus.phase === `idle`\n\t\t\t\t\t\t\t\t? `main`\n\t\t\t\t\t\t\t\t: store.transactionStatus.key\n\t\t\t\t\t\t}`,\n\t\t\t\t\t\t(update) => {\n\t\t\t\t\t\t\tconst unsubscribe = store.subject.operationStatus.subscribe(\n\t\t\t\t\t\t\t\tmutableState.key,\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\t\t\tsetState(latestUpdateState, update, store)\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t\t`${store.config.name}: tracker observing inner value`,\n\t\t\tstore,\n\t\t)\n\t}\n\n\tprivate updateCore<Core extends Transceiver<any>>(\n\t\tmutableState: MutableAtomToken<Core, Json.Serializable>,\n\t\tlatestUpdateState: AtomToken<typeof this.Update | null>,\n\t\tstore: Store = IMPLICIT.STORE,\n\t): void {\n\t\tsubscribe(\n\t\t\tlatestUpdateState,\n\t\t\t({ newValue, oldValue }) => {\n\t\t\t\tconst timelineId = store.timelineAtoms.getRelatedKey(\n\t\t\t\t\tlatestUpdateState.key,\n\t\t\t\t)\n\t\t\t\tif (timelineId) {\n\t\t\t\t\tconst timelineData = store.timelines.get(timelineId)\n\t\t\t\t\tif (timelineData?.timeTraveling) {\n\t\t\t\t\t\tconst unsubscribe = subscribeToTimeline(\n\t\t\t\t\t\t\t{ key: timelineId, type: `timeline` },\n\t\t\t\t\t\t\t(update) => {\n\t\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\t\tsetState(\n\t\t\t\t\t\t\t\t\tmutableState,\n\t\t\t\t\t\t\t\t\t(transceiver) => {\n\t\t\t\t\t\t\t\t\t\tif (update === `redo` && newValue) {\n\t\t\t\t\t\t\t\t\t\t\ttransceiver.do(newValue)\n\t\t\t\t\t\t\t\t\t\t} else if (update === `undo` && oldValue) {\n\t\t\t\t\t\t\t\t\t\t\ttransceiver.undo(oldValue)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn transceiver\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = store.subject.operationStatus.subscribe(\n\t\t\t\t\tlatestUpdateState.key,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\tif (newValue) {\n\t\t\t\t\t\t\tsetState(\n\t\t\t\t\t\t\t\tmutableState,\n\t\t\t\t\t\t\t\t(transceiver) => (transceiver.do(newValue), transceiver),\n\t\t\t\t\t\t\t\tstore,\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\t`${store.config.name}: tracker observing latest update`,\n\t\t\tstore,\n\t\t)\n\t}\n\n\tpublic mutableState: MutableAtomToken<Mutable, Json.Serializable>\n\tpublic latestUpdateState: AtomToken<typeof this.Update | null>\n\n\tpublic constructor(\n\t\tmutableState: MutableAtomToken<Mutable, Json.Serializable>,\n\t\tstore: Store = IMPLICIT.STORE,\n\t) {\n\t\tthis.mutableState = mutableState\n\t\tthis.latestUpdateState = this.initializeState(mutableState, store)\n\t\tthis.observeCore(mutableState, this.latestUpdateState, store)\n\t\tthis.updateCore(mutableState, this.latestUpdateState, store)\n\t\tconst core = target(store)\n\t\tcore.trackers.set(mutableState.key, this)\n\t}\n}\n","import type { MutableAtomFamily, MutableAtomFamilyOptions } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { selectJsonFamily } from \"atom.io/json\"\n\nimport type { Store } from \"..\"\nimport { IMPLICIT, createAtomFamily } from \"..\"\nimport { FamilyTracker } from \"./tracker-family\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport function createMutableAtomFamily<\n\tCore extends Transceiver<any>,\n\tSerializableCore extends Json.Serializable,\n\tKey extends string,\n>(\n\toptions: MutableAtomFamilyOptions<Core, SerializableCore, Key>,\n\tstore: Store = IMPLICIT.STORE,\n): MutableAtomFamily<Core, SerializableCore, Key> {\n\tconst coreFamily = Object.assign(\n\t\tcreateAtomFamily<Core, Key>(options, store),\n\t\toptions,\n\t) as MutableAtomFamily<Core, SerializableCore, Key>\n\tselectJsonFamily(coreFamily, options)\n\tnew FamilyTracker(coreFamily, store)\n\treturn coreFamily\n}\n","import type { AtomFamily } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { parseJson } from \"atom.io/json\"\n\nimport { createAtomFamily } from \"../families\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { Tracker } from \"./tracker\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport class FamilyTracker<\n\tCore extends Transceiver<any>,\n\tFamilyMemberKey extends Json.Serializable,\n> {\n\tprivate readonly Update: Core extends Transceiver<infer Signal>\n\t\t? Signal\n\t\t: never\n\n\tpublic readonly findLatestUpdateState: AtomFamily<\n\t\ttypeof this.Update | null,\n\t\tFamilyMemberKey\n\t>\n\tpublic readonly findMutableState: AtomFamily<Core, FamilyMemberKey>\n\n\tpublic constructor(\n\t\tfindMutableState: AtomFamily<Core, FamilyMemberKey>,\n\t\tstore: Store = IMPLICIT.STORE,\n\t) {\n\t\tthis.findLatestUpdateState = createAtomFamily<\n\t\t\ttypeof this.Update | null,\n\t\t\tFamilyMemberKey\n\t\t>(\n\t\t\t{\n\t\t\t\tkey: `*${findMutableState.key}`,\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t\tstore,\n\t\t)\n\t\tthis.findMutableState = findMutableState\n\t\tthis.findMutableState.subject.subscribe(\n\t\t\t`store=${store.config.name}::tracker-atom-family`,\n\t\t\t(atomToken) => {\n\t\t\t\tif (atomToken.family) {\n\t\t\t\t\tconst key = parseJson(atomToken.family.subKey) as FamilyMemberKey\n\t\t\t\t\tthis.findLatestUpdateState(key)\n\t\t\t\t\tnew Tracker<Core>(atomToken, store)\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t\tthis.findLatestUpdateState.subject.subscribe(\n\t\t\t`store=${store.config.name}::tracker-atom-family`,\n\t\t\t(atomToken) => {\n\t\t\t\tif (atomToken.family) {\n\t\t\t\t\tconst key = parseJson(atomToken.family.subKey) as FamilyMemberKey\n\t\t\t\t\tconst mutableAtomToken = this.findMutableState(key)\n\t\t\t\t\tnew Tracker<Core>(mutableAtomToken, store)\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t}\n}\n","import type {\n\tAtomFamily,\n\tAtomFamilyOptions,\n\tAtomOptions,\n\tAtomToken,\n\tFamilyMetadata,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport { createAtom } from \"../atom\"\nimport { IMPLICIT, type Store, deposit, withdraw } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { target } from \"../transaction\"\n\nexport function createAtomFamily<T, K extends Json.Serializable>(\n\toptions: AtomFamilyOptions<T, K>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomFamily<T, K> {\n\tconst subject = new Subject<AtomToken<T>>()\n\tconst atomFamily = Object.assign(\n\t\t(key: K): AtomToken<T> => {\n\t\t\tconst subKey = stringifyJson(key)\n\t\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\t\tconst fullKey = `${options.key}(${subKey})`\n\t\t\tconst existing = withdraw({ key: fullKey, type: `atom` }, store)\n\t\t\tlet token: AtomToken<any>\n\t\t\tif (existing) {\n\t\t\t\ttoken = deposit(existing)\n\t\t\t} else {\n\t\t\t\tconst individualOptions: AtomOptions<any> = {\n\t\t\t\t\tkey: fullKey,\n\t\t\t\t\tdefault:\n\t\t\t\t\t\toptions.default instanceof Function\n\t\t\t\t\t\t\t? options.default(key)\n\t\t\t\t\t\t\t: options.default,\n\t\t\t\t}\n\t\t\t\tif (options.effects) {\n\t\t\t\t\tindividualOptions.effects = options.effects(key)\n\t\t\t\t}\n\t\t\t\t// if (`toJson` in options && `fromJson` in options) {\n\t\t\t\t// \tindividualOptions.toJson = options.toJson\n\t\t\t\t// \tindividualOptions.fromJson\n\t\t\t\t// }\n\t\t\t\ttoken = createAtom<T>(individualOptions, family, store)\n\t\t\t\tsubject.next(token)\n\t\t\t}\n\t\t\treturn token\n\t\t},\n\t\t{\n\t\t\tkey: options.key,\n\t\t\ttype: `atom_family`,\n\t\t\tsubject,\n\t\t} as const,\n\t)\n\tconst core = target(store)\n\tcore.families.set(options.key, atomFamily)\n\treturn atomFamily\n}\n","import type {\n\tFamilyMetadata,\n\tReadonlySelectorFamily,\n\tReadonlySelectorFamilyOptions,\n\tReadonlySelectorToken,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport { createSelector } from \"../selector\"\nimport { type Store, deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { target } from \"../transaction\"\n\nexport function createReadonlySelectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n\tstore?: Store,\n): ReadonlySelectorFamily<T, K> {\n\tconst core = target(store)\n\tconst subject = new Subject<ReadonlySelectorToken<T>>()\n\treturn Object.assign(\n\t\t(key: K): ReadonlySelectorToken<T> => {\n\t\t\tconst subKey = stringifyJson(key)\n\t\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\t\tconst fullKey = `${options.key}(${subKey})`\n\t\t\tconst existing = core.readonlySelectors.get(fullKey)\n\t\t\tif (existing) {\n\t\t\t\treturn deposit(existing)\n\t\t\t}\n\t\t\treturn createSelector<T>(\n\t\t\t\t{\n\t\t\t\t\tkey: fullKey,\n\t\t\t\t\tget: options.get(key),\n\t\t\t\t},\n\t\t\t\tfamily,\n\t\t\t\tstore,\n\t\t\t) as ReadonlySelectorToken<T>\n\t\t},\n\t\t{\n\t\t\tkey: options.key,\n\t\t\ttype: `readonly_selector_family`,\n\t\t\tsubject,\n\t\t} as const,\n\t) as ReadonlySelectorFamily<T, K>\n}\n","import type { Store } from \"./store\"\nimport { target } from \"./transaction\"\n\nexport type AtomKey<T> = string & { __atomKey?: never; __brand?: T }\nexport type SelectorKey<T> = string & { __selectorKey?: never; __brand?: T }\nexport type ReadonlySelectorKey<T> = string & {\n\t__readonlySelectorKey?: never\n\t__brand?: T\n}\n\nexport const isAtomKey = (key: string, store: Store): key is AtomKey<unknown> =>\n\ttarget(store).atoms.has(key)\nexport const isSelectorKey = (\n\tkey: string,\n\tstore: Store,\n): key is SelectorKey<unknown> => target(store).selectors.has(key)\nexport const isReadonlySelectorKey = (\n\tkey: string,\n\tstore: Store,\n): key is ReadonlySelectorKey<unknown> =>\n\ttarget(store).readonlySelectors.has(key)\n\nexport type StateKey<T> = AtomKey<T> | ReadonlySelectorKey<T> | SelectorKey<T>\nexport const isStateKey = (\n\tkey: string,\n\tstore: Store,\n): key is StateKey<unknown> =>\n\tisAtomKey(key, store) ||\n\tisSelectorKey(key, store) ||\n\tisReadonlySelectorKey(key, store)\n","import type { AtomKey, ReadonlySelectorKey, SelectorKey } from \"../keys\"\nimport { isStateKey } from \"../keys\"\nimport type { Store } from \"../store\"\nimport { target } from \"../transaction\"\n\nexport const getSelectorDependencyKeys = (\n\tkey: string,\n\tstore: Store,\n): (\n\t| AtomKey<unknown>\n\t| ReadonlySelectorKey<unknown>\n\t| SelectorKey<unknown>\n)[] => {\n\tconst sources = target(store)\n\t\t.selectorGraph.getRelationEntries({ downstreamSelectorKey: key })\n\t\t.filter(([_, { source }]) => source !== key)\n\t\t.map(([_, { source }]) => source)\n\t\t.filter((source) => isStateKey(source, store))\n\treturn sources\n}\n","import type { Atom } from \"./atom\"\nimport { isValueCached, readCachedValue } from \"./caching\"\nimport type { ReadonlySelector, Selector } from \"./selector\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\n\nexport const getState__INTERNAL = <T>(\n\tstate: Atom<T> | ReadonlySelector<T> | Selector<T>,\n\tstore: Store = IMPLICIT.STORE,\n): T => {\n\tif (isValueCached(state.key, store)) {\n\t\tstore.logger.info(`📖`, state.type, state.key, `reading cached value`)\n\t\treturn readCachedValue(state.key, store)\n\t}\n\tif (state.type !== `atom`) {\n\t\tstore.logger.info(`🧮`, state.type, state.key, `calculating value`)\n\t\treturn state.get()\n\t}\n\tstore.logger.error(`🐞`, `atom`, state.key, `could not find cached value`)\n\treturn state.default\n}\n","export type Modify<T> = (thing: T) => T\n\nexport const become =\n\t<T>(nextVersionOfThing: Modify<T> | T) =>\n\t(originalThing: T): T =>\n\t\tnextVersionOfThing instanceof Function\n\t\t\t? nextVersionOfThing(\n\t\t\t\t\toriginalThing instanceof Function ? originalThing() : originalThing,\n\t\t\t )\n\t\t\t: nextVersionOfThing\n","import type { StateToken } from \"atom.io\"\n\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport { target } from \"./transaction\"\n\nexport type OperationProgress =\n\t| {\n\t\t\topen: false\n\t }\n\t| {\n\t\t\topen: true\n\t\t\tdone: Set<string>\n\t\t\tprev: Map<string, any>\n\t\t\ttime: number\n\t\t\ttoken: StateToken<any>\n\t }\n\nexport const openOperation = (\n\ttoken: StateToken<any>,\n\tstore: Store,\n): `rejection` | undefined => {\n\tconst core = target(store)\n\tif (core.operation.open) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\ttoken.type,\n\t\t\ttoken.key,\n\t\t\t`failed to setState during a setState for \"${core.operation.token.key}\"`,\n\t\t)\n\t\treturn `rejection`\n\t}\n\tcore.operation = {\n\t\topen: true,\n\t\tdone: new Set(),\n\t\tprev: new Map(),\n\t\ttime: Date.now(),\n\t\ttoken,\n\t}\n\tstore.logger.info(\n\t\t`⭕`,\n\t\ttoken.type,\n\t\ttoken.key,\n\t\t`operation start in store \"${store.config.name}\"${\n\t\t\tstore.transactionStatus.phase === `idle`\n\t\t\t\t? ``\n\t\t\t\t: ` ${store.transactionStatus.phase} \"${store.transactionStatus.key}\"`\n\t\t}`,\n\t)\n}\nexport const closeOperation = (store: Store): void => {\n\tconst core = target(store)\n\tif (core.operation.open) {\n\t\tstore.logger.info(\n\t\t\t`🔴`,\n\t\t\tcore.operation.token.type,\n\t\t\tcore.operation.token.key,\n\t\t\t`operation done in store \"${store.config.name}\"`,\n\t\t)\n\t}\n\tcore.operation = { open: false }\n\tstore.subject.operationStatus.next(core.operation)\n}\n\nexport const isDone = (key: string, store: Store = IMPLICIT.STORE): boolean => {\n\tconst core = target(store)\n\tif (!core.operation.open) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\t`unknown`,\n\t\t\tkey,\n\t\t\t`isDone called outside of an operation. This is probably a bug.`,\n\t\t)\n\t\treturn true\n\t}\n\treturn core.operation.done.has(key)\n}\nexport const markDone = (key: string, store: Store = IMPLICIT.STORE): void => {\n\tconst core = target(store)\n\tif (!core.operation.open) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\t`unknown`,\n\t\t\tkey,\n\t\t\t`markDone called outside of an operation. This is probably a bug.`,\n\t\t)\n\t\treturn\n\t}\n\tcore.operation.done.add(key)\n}\n","import type { JsonInterface } from \"atom.io/json\"\n\nimport type { Atom } from \"../atom\"\nimport { Tracker } from \"../mutable\"\nimport type { Store, StoreCore } from \"../store\"\n\nexport function copyMutableIfNeeded<T>(\n\tatom: Atom<T>,\n\ttransform: JsonInterface<T>,\n\torigin: Store,\n\ttarget: StoreCore,\n): T {\n\tconst originValue = origin.valueMap.get(atom.key)\n\tconst targetValue = target.valueMap.get(atom.key)\n\tif (originValue === targetValue) {\n\t\torigin.logger.info(`📃`, `atom`, `${atom.key}`, `copying`)\n\t\tconst copiedValue = transform.fromJson(transform.toJson(originValue))\n\t\ttarget.valueMap.set(atom.key, copiedValue)\n\t\tnew Tracker(atom, origin)\n\t\treturn copiedValue\n\t}\n\treturn targetValue\n}\n","import type { AtomFamily } from \"atom.io\"\nimport type { Json, JsonInterface } from \"atom.io/json\"\nimport { getState__INTERNAL } from \"..\"\nimport type { Store, StoreCore } from \"..\"\nimport type { Atom } from \"../atom\"\nimport { copyMutableIfNeeded } from \"./copy-mutable-if-needed\"\n\nexport function copyMutableIfWithinTransaction<T>(\n\tatom: Atom<T> | (Atom<T> & JsonInterface<T, Json.Serializable>),\n\tstore: Store,\n): T {\n\tif (\n\t\tstore.transactionStatus.phase === `building` ||\n\t\tstore.transactionStatus.phase === `applying`\n\t) {\n\t\tif (`toJson` in atom && `fromJson` in atom) {\n\t\t\tconst copiedValue = copyMutableIfNeeded(\n\t\t\t\tatom,\n\t\t\t\tatom,\n\t\t\t\tstore,\n\t\t\t\tstore.transactionStatus.core,\n\t\t\t)\n\t\t\treturn copiedValue\n\t\t}\n\t\tif (`family` in atom) {\n\t\t\tconst family = store.transactionStatus.core.families.get(atom.family.key)\n\t\t\tif (family && family.type === `atom_family`) {\n\t\t\t\tconst result = copyMutableFamilyMemberWithinTransaction<T>(\n\t\t\t\t\tatom,\n\t\t\t\t\tfamily,\n\t\t\t\t\tstore,\n\t\t\t\t\tstore.transactionStatus.core,\n\t\t\t\t)\n\t\t\t\tif (result) {\n\t\t\t\t\treturn result\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn getState__INTERNAL(atom, store)\n}\n\nexport function copyMutableFamilyMemberWithinTransaction<T>(\n\tatom: Atom<T>,\n\tfamily:\n\t\t| AtomFamily<T, any>\n\t\t| (AtomFamily<T, any> & JsonInterface<T, Json.Serializable>),\n\torigin: Store,\n\ttarget: StoreCore,\n): T | null {\n\tif (`toJson` in family && `fromJson` in family) {\n\t\tconst copyCreated = copyMutableIfNeeded(atom, family, origin, target)\n\t\treturn copyCreated\n\t}\n\treturn null\n}\n","import type { StateUpdate } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\n\nimport type { Atom } from \"../atom\"\nimport type { ReadonlySelector, Selector } from \"../selector\"\n\nexport const emitUpdate = <T>(\n\tstate: Atom<T> | ReadonlySelector<T> | Selector<T>,\n\tupdate: StateUpdate<T>,\n\tstore: Store,\n): void => {\n\tconst { key } = state\n\tconst { logger } = store\n\tlogger.info(\n\t\t`📢`,\n\t\tstate.type,\n\t\tstate.key,\n\t\t`went (`,\n\t\tupdate.oldValue,\n\t\t`->`,\n\t\tupdate.newValue,\n\t\t`) subscribers:`,\n\t\tstate.subject.subscribers,\n\t)\n\tstate.subject.next(update)\n}\n","import type { Atom } from \"../atom\"\nimport { evictCachedValue } from \"../caching\"\nimport { isDone, markDone } from \"../operation\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { target } from \"../transaction\"\n\nexport const evictDownStream = <T>(\n\tatom: Atom<T>,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst core = target(store)\n\tconst downstreamKeys = core.selectorAtoms.getRelatedKeys(atom.key)\n\tstore.logger.info(\n\t\t`🧹`,\n\t\tatom.type,\n\t\tatom.key,\n\t\t`evicting ${downstreamKeys?.size ?? 0} states downstream:`,\n\t\tdownstreamKeys,\n\t)\n\tif (downstreamKeys !== undefined) {\n\t\tif (core.operation.open) {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧹`,\n\t\t\t\tatom.type,\n\t\t\t\tatom.key,\n\t\t\t\t`[ ${[...core.operation.done].join(`, `)} ] already done`,\n\t\t\t)\n\t\t}\n\t\tfor (const key of downstreamKeys) {\n\t\t\tif (isDone(key, store)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tevictCachedValue(key, store)\n\t\t\tmarkDone(key, store)\n\t\t}\n\t}\n}\n","import type { KeyedStateUpdate, StateUpdate } from \"atom.io\"\n\nimport type { Atom } from \"../atom\"\nimport { isTransceiver } from \"../mutable\"\nimport type { Store } from \"../store\"\n\nfunction shouldUpdateBeStowed(key: string, update: StateUpdate<any>): boolean {\n\t// do not stow updates that aren't json, unless they're not equal by reference\n\tif (isTransceiver(update.newValue)) {\n\t\treturn false\n\t}\n\t// do not stow updates where the key contains 👁‍🗨\n\tif (key.includes(`👁‍🗨`)) {\n\t\treturn false\n\t}\n\treturn true\n}\n\nexport const stowUpdate = <T>(\n\tstate: Atom<T>,\n\tupdate: StateUpdate<T>,\n\tstore: Store,\n): void => {\n\tconst { key } = state\n\tif (store.transactionStatus.phase !== `building`) {\n\t\tstore.logger.error(\n\t\t\t`🐞`,\n\t\t\t`atom`,\n\t\t\tkey,\n\t\t\t`stowUpdate called outside of a transaction. This is probably a bug.`,\n\t\t)\n\t\treturn\n\t}\n\tconst shouldStow = shouldUpdateBeStowed(key, update)\n\tif (!shouldStow) {\n\t\treturn\n\t}\n\tconst atomUpdate: KeyedStateUpdate<T> = { key, ...update }\n\tif (state.family) {\n\t\tatomUpdate.family = state.family\n\t}\n\tstore.transactionStatus.atomUpdates.push(atomUpdate)\n\tstore.logger.info(\n\t\t`📁`,\n\t\t`atom`,\n\t\tkey,\n\t\t`stowed (`,\n\t\tupdate.oldValue,\n\t\t`->`,\n\t\tupdate.newValue,\n\t\t`)`,\n\t)\n}\n","import type { Atom } from \"../atom\"\nimport { isAtomDefault, markAtomAsNotDefault } from \"../atom\"\nimport { cacheValue } from \"../caching\"\nimport { getState__INTERNAL } from \"../get-state-internal\"\nimport { markDone } from \"../operation\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { become } from \"./become\"\nimport { copyMutableIfWithinTransaction } from \"./copy-mutable-in-transaction\"\nimport { emitUpdate } from \"./emit-update\"\nimport { evictDownStream } from \"./evict-downstream\"\nimport { stowUpdate } from \"./stow-update\"\n\nexport const setAtom = <T>(\n\tatom: Atom<T>,\n\tnext: T | ((oldValue: T) => T),\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst oldValue = getState__INTERNAL(atom, store)\n\tlet newValue = copyMutableIfWithinTransaction(atom, store)\n\tnewValue = become(next)(newValue)\n\tstore.logger.info(`📝`, `atom`, atom.key, `set to`, newValue)\n\tcacheValue(atom.key, newValue, atom.subject, store)\n\tif (isAtomDefault(atom.key, store)) {\n\t\tmarkAtomAsNotDefault(atom.key, store)\n\t}\n\tmarkDone(atom.key, store)\n\tevictDownStream(atom, store)\n\tconst update = { oldValue, newValue }\n\tif (store.transactionStatus.phase !== `building`) {\n\t\temitUpdate(atom, update, store)\n\t} else {\n\t\tstowUpdate(atom, update, store)\n\t}\n}\n","import type { Atom } from \"../atom\"\nimport type { Selector } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { setAtom } from \"./set-atom\"\n\nexport const setState__INTERNAL = <T>(\n\tstate: Atom<T> | Selector<T>,\n\tvalue: T | ((oldValue: T) => T),\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tif (state.type === `selector`) {\n\t\tstate.set(value)\n\t} else {\n\t\tsetAtom(state, value, store)\n\t}\n}\n","import type { Store } from \"..\"\nimport type { AtomKey, StateKey } from \"../keys\"\nimport { isAtomKey } from \"../keys\"\nimport { getSelectorDependencyKeys } from \"./get-selector-dependency-keys\"\n\nexport const traceSelectorAtoms = (\n\tselectorKey: string,\n\tdirectDependencyKey: StateKey<unknown>,\n\tstore: Store,\n): AtomKey<unknown>[] => {\n\tconst rootKeys: AtomKey<unknown>[] = []\n\n\tconst indirectDependencyKeys = getSelectorDependencyKeys(\n\t\tdirectDependencyKey,\n\t\tstore,\n\t)\n\tlet depth = 0\n\twhile (indirectDependencyKeys.length > 0) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: just checked length ^^^\n\t\tconst indirectDependencyKey = indirectDependencyKeys.shift()!\n\t\t++depth\n\t\tif (depth > 99999) {\n\t\t\tthrow new Error(\n\t\t\t\t`Maximum selector dependency depth exceeded (> 99999) in selector \"${selectorKey}\". This is likely due to a circular dependency.`,\n\t\t\t)\n\t\t}\n\n\t\tif (!isAtomKey(indirectDependencyKey, store)) {\n\t\t\tindirectDependencyKeys.push(\n\t\t\t\t...getSelectorDependencyKeys(indirectDependencyKey, store),\n\t\t\t)\n\t\t} else if (!rootKeys.includes(indirectDependencyKey)) {\n\t\t\trootKeys.push(indirectDependencyKey)\n\t\t}\n\t}\n\n\treturn rootKeys\n}\n\nexport const traceAllSelectorAtoms = (\n\tselectorKey: string,\n\tstore: Store,\n): AtomKey<unknown>[] => {\n\tconst directDependencyKeys = getSelectorDependencyKeys(selectorKey, store)\n\treturn directDependencyKeys.flatMap((depKey) =>\n\t\tisAtomKey(depKey, store)\n\t\t\t? depKey\n\t\t\t: traceSelectorAtoms(selectorKey, depKey, store),\n\t)\n}\n","import type { ReadonlySelectorToken, StateToken } from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { target } from \"../transaction\"\nimport { traceSelectorAtoms } from \"./trace-selector-atoms\"\n\nexport const updateSelectorAtoms = (\n\tselectorKey: string,\n\tdependency: ReadonlySelectorToken<unknown> | StateToken<unknown>,\n\tstore: Store,\n): void => {\n\tconst core = target(store)\n\tif (dependency.type === `atom`) {\n\t\tcore.selectorAtoms = core.selectorAtoms.set({\n\t\t\tselectorKey,\n\t\t\tatomKey: dependency.key,\n\t\t})\n\t\tstore.logger.info(\n\t\t\t`🔍`,\n\t\t\t`selector`,\n\t\t\tselectorKey,\n\t\t\t`discovers root atom \"${dependency.key}\"`,\n\t\t)\n\t} else {\n\t\tconst rootKeys = traceSelectorAtoms(selectorKey, dependency.key, store)\n\t\tstore.logger.info(\n\t\t\t`🔍`,\n\t\t\t`selector`,\n\t\t\tselectorKey,\n\t\t\t`discovers root atoms: [ ${rootKeys\n\t\t\t\t.map((key) => `\"${key}\"`)\n\t\t\t\t.join(`, `)} ]`,\n\t\t)\n\t\tfor (const atomKey of rootKeys) {\n\t\t\tcore.selectorAtoms = core.selectorAtoms.set({\n\t\t\t\tselectorKey,\n\t\t\t\tatomKey,\n\t\t\t})\n\t\t}\n\t}\n}\n","import type { Transactors } from \"atom.io\"\n\nimport { getState__INTERNAL } from \"../get-state-internal\"\nimport { setState__INTERNAL } from \"../set-state\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT, withdraw } from \"../store\"\nimport { target } from \"../transaction/transaction-internal\"\nimport { updateSelectorAtoms } from \"./update-selector-atoms\"\n\nexport const registerSelector = (\n\tselectorKey: string,\n\tstore: Store = IMPLICIT.STORE,\n): Transactors => ({\n\tget: (dependency) => {\n\t\tconst core = target(store)\n\t\tconst alreadyRegistered = core.selectorGraph\n\t\t\t.getRelationEntries({ downstreamSelectorKey: selectorKey })\n\t\t\t.some(([_, { source }]) => source === dependency.key)\n\n\t\tconst dependencyState = withdraw(dependency, store)\n\t\tif (dependencyState === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`State \"${dependency.key}\" not found in this store. Did you forget to initialize with the \"atom\" or \"selector\" function?`,\n\t\t\t)\n\t\t}\n\t\tconst dependencyValue = getState__INTERNAL(dependencyState, store)\n\n\t\tstore.logger.info(\n\t\t\t`🔌`,\n\t\t\t`selector`,\n\t\t\tselectorKey,\n\t\t\t`registers dependency ( \"${dependency.key}\" =`,\n\t\t\tdependencyValue,\n\t\t\t`)`,\n\t\t)\n\n\t\tif (!alreadyRegistered) {\n\t\t\tcore.selectorGraph = core.selectorGraph.set(\n\t\t\t\t{\n\t\t\t\t\tupstreamSelectorKey: dependency.key,\n\t\t\t\t\tdownstreamSelectorKey: selectorKey,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsource: dependency.key,\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\tupdateSelectorAtoms(selectorKey, dependency, store)\n\t\treturn dependencyValue\n\t},\n\tset: (stateToken, newValue) => {\n\t\tconst state = withdraw(stateToken, store)\n\t\tif (state === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`State \"${stateToken.key}\" not found in this store. Did you forget to initialize with the \"atom\" or \"selector\" function?`,\n\t\t\t)\n\t\t}\n\t\tsetState__INTERNAL(state, newValue, store)\n\t},\n})\n","import type { FamilyMetadata, SelectorOptions, SelectorToken } from \"atom.io\"\n\nimport { cacheValue } from \"../caching\"\nimport { markDone } from \"../operation\"\nimport { become } from \"../set-state/become\"\nimport type { Store, StoreCore } from \"../store\"\nimport { Subject } from \"../subject\"\nimport type { Selector } from \"./create-selector\"\nimport { createSelector } from \"./create-selector\"\nimport { registerSelector } from \"./register-selector\"\n\nexport const createReadWriteSelector = <T>(\n\toptions: SelectorOptions<T>,\n\tfamily: FamilyMetadata | undefined,\n\tstore: Store,\n\tcore: StoreCore,\n): SelectorToken<T> => {\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\n\tconst { get, set } = registerSelector(options.key, store)\n\tconst getSelf = () => {\n\t\tconst value = options.get({ get })\n\t\tcacheValue(options.key, value, subject, store)\n\t\treturn value\n\t}\n\n\tconst setSelf = (next: T | ((oldValue: T) => T)): void => {\n\t\tconst oldValue = getSelf()\n\t\tconst newValue = become(next)(oldValue)\n\t\t// store.logger.info(`📝 set \"${options.key}\" (`, oldValue, `->`, newValue, `)`)\n\t\tstore.logger.info(\n\t\t\t`📝`,\n\t\t\t`selector`,\n\t\t\toptions.key,\n\t\t\t`set (`,\n\t\t\toldValue,\n\t\t\t`->`,\n\t\t\tnewValue,\n\t\t\t`)`,\n\t\t)\n\t\tcacheValue(options.key, newValue, subject, store)\n\t\tmarkDone(options.key, store)\n\t\tif (store.transactionStatus.phase === `idle`) {\n\t\t\tsubject.next({ newValue, oldValue })\n\t\t}\n\t\toptions.set({ get, set }, newValue)\n\t}\n\tconst mySelector: Selector<T> = {\n\t\t...options,\n\t\tsubject,\n\t\tinstall: (s: Store) => createSelector(options, family, s),\n\t\tget: getSelf,\n\t\tset: setSelf,\n\t\ttype: `selector`,\n\t\t...(family && { family }),\n\t}\n\tcore.selectors.set(options.key, mySelector)\n\tconst initialValue = getSelf()\n\tstore.logger.info(`✨`, mySelector.type, mySelector.key, `=`, initialValue)\n\tconst token: SelectorToken<T> = {\n\t\tkey: options.key,\n\t\ttype: `selector`,\n\t}\n\tif (family) {\n\t\ttoken.family = family\n\t}\n\tstore.subject.selectorCreation.next(token)\n\treturn token\n}\n","import type {\n\tFamilyMetadata,\n\tReadonlySelectorOptions,\n\tReadonlySelectorToken,\n} from \"atom.io\"\n\nimport { cacheValue } from \"../caching\"\nimport type { Store, StoreCore } from \"../store\"\nimport { Subject } from \"../subject\"\nimport type { ReadonlySelector } from \"./create-selector\"\nimport { createSelector } from \"./create-selector\"\nimport { registerSelector } from \"./register-selector\"\n\nexport const createReadonlySelector = <T>(\n\toptions: ReadonlySelectorOptions<T>,\n\tfamily: FamilyMetadata | undefined,\n\tstore: Store,\n\tcore: StoreCore,\n): ReadonlySelectorToken<T> => {\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\n\tconst { get } = registerSelector(options.key, store)\n\tconst getSelf = () => {\n\t\tconst value = options.get({ get })\n\t\tcacheValue(options.key, value, subject, store)\n\t\treturn value\n\t}\n\n\tconst readonlySelector: ReadonlySelector<T> = {\n\t\t...options,\n\t\tsubject,\n\t\tinstall: (s: Store) => createSelector(options, family, s),\n\t\tget: getSelf,\n\t\ttype: `readonly_selector`,\n\t\t...(family && { family }),\n\t}\n\tcore.readonlySelectors.set(options.key, readonlySelector)\n\tconst initialValue = getSelf()\n\tstore.logger.info(\n\t\t`✨`,\n\t\treadonlySelector.type,\n\t\treadonlySelector.key,\n\t\t`=`,\n\t\tinitialValue,\n\t)\n\tconst token: ReadonlySelectorToken<T> = {\n\t\tkey: options.key,\n\t\ttype: `readonly_selector`,\n\t}\n\tif (family) {\n\t\ttoken.family = family\n\t}\n\tstore.subject.selectorCreation.next(token)\n\treturn token\n}\n","import type {\n\tFamilyMetadata,\n\tReadonlySelectorOptions,\n\tReadonlySelectorToken,\n\tSelectorOptions,\n\tSelectorToken,\n} from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport type { Subject } from \"../subject\"\nimport { target } from \"../transaction\"\nimport { createReadWriteSelector } from \"./create-read-write-selector\"\nimport { createReadonlySelector } from \"./create-readonly-selector\"\n\nexport type Selector<T> = {\n\tkey: string\n\ttype: `selector`\n\tfamily?: FamilyMetadata\n\tinstall: (store: Store) => void\n\tsubject: Subject<{ newValue: T; oldValue: T }>\n\tget: () => T\n\tset: (newValue: T | ((oldValue: T) => T)) => void\n}\nexport type ReadonlySelector<T> = {\n\tkey: string\n\ttype: `readonly_selector`\n\tfamily?: FamilyMetadata\n\tinstall: (store: Store) => void\n\tsubject: Subject<{ newValue: T; oldValue: T }>\n\tget: () => T\n}\n\nexport function createSelector<T>(\n\toptions: SelectorOptions<T>,\n\tfamily?: FamilyMetadata,\n\tstore?: Store,\n): SelectorToken<T>\nexport function createSelector<T>(\n\toptions: ReadonlySelectorOptions<T>,\n\tfamily?: FamilyMetadata,\n\tstore?: Store,\n): ReadonlySelectorToken<T>\nexport function createSelector<T>(\n\toptions: ReadonlySelectorOptions<T> | SelectorOptions<T>,\n\tfamily?: FamilyMetadata,\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorToken<T> | SelectorToken<T> {\n\tconst core = target(store)\n\tconst existingWritable = core.selectors.get(options.key)\n\tconst existingReadonly = core.readonlySelectors.get(options.key)\n\n\tif (existingWritable || existingReadonly) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\texistingReadonly ? `readonly_selector` : `selector`,\n\t\t\toptions.key,\n\t\t\t`Tried to create selector, but it already exists in the store. (Ignore if you are in development using hot module replacement.)`,\n\t\t)\n\t}\n\n\tif (`set` in options) {\n\t\treturn createReadWriteSelector(options, family, store, core)\n\t}\n\treturn createReadonlySelector(options, family, store, core)\n}\n","import type {\n\tFamilyMetadata,\n\tReadonlySelectorFamily,\n\tReadonlySelectorFamilyOptions,\n\tSelectorFamily,\n\tSelectorFamilyOptions,\n\tSelectorToken,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport { createSelector } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT, deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { target } from \"../transaction\"\nimport { createReadonlySelectorFamily } from \"./create-readonly-selector-family\"\n\nexport function createSelectorFamily<T, K extends Json.Serializable>(\n\toptions: SelectorFamilyOptions<T, K>,\n\tstore?: Store,\n): SelectorFamily<T, K>\nexport function createSelectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n\tstore?: Store,\n): ReadonlySelectorFamily<T, K>\nexport function createSelectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K> | SelectorFamilyOptions<T, K>,\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorFamily<T, K> | SelectorFamily<T, K> {\n\tconst isReadonly = !(`set` in options)\n\n\tif (isReadonly) {\n\t\treturn createReadonlySelectorFamily(options, store)\n\t}\n\tconst core = target(store)\n\tconst subject = new Subject<SelectorToken<T>>()\n\n\tconst selectorFamily = Object.assign(\n\t\t(key: K): SelectorToken<T> => {\n\t\t\tconst subKey = stringifyJson(key)\n\t\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\t\tconst fullKey = `${options.key}(${subKey})`\n\t\t\tconst existing = core.selectors.get(fullKey)\n\t\t\tif (existing) {\n\t\t\t\treturn deposit(existing)\n\t\t\t}\n\t\t\tconst token = createSelector<T>(\n\t\t\t\t{\n\t\t\t\t\tkey: fullKey,\n\t\t\t\t\tget: options.get(key),\n\t\t\t\t\tset: options.set(key),\n\t\t\t\t},\n\t\t\t\tfamily,\n\t\t\t\tstore,\n\t\t\t)\n\t\t\tsubject.next(token)\n\t\t\treturn token\n\t\t},\n\t\t{\n\t\t\tkey: options.key,\n\t\t\ttype: `selector_family`,\n\t\t} as const,\n\t) as SelectorFamily<T, K>\n\tcore.families.set(options.key, selectorFamily)\n\treturn selectorFamily\n}\n","import type { MutableAtomToken, SelectorToken } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport const getJsonToken = <\n\tCore extends Transceiver<Json.Serializable>,\n\tSerializableCore extends Json.Serializable,\n>(\n\tmutableAtomToken: MutableAtomToken<Core, SerializableCore>,\n): SelectorToken<SerializableCore> => {\n\tconst key = mutableAtomToken.family\n\t\t? `${mutableAtomToken.family.key}:JSON(${mutableAtomToken.family.subKey})`\n\t\t: `${mutableAtomToken.key}:JSON`\n\tconst jsonToken: SelectorToken<SerializableCore> = { type: `selector`, key }\n\tif (mutableAtomToken.family) {\n\t\tjsonToken.family = {\n\t\t\tkey: `${mutableAtomToken.family.key}:JSON`,\n\t\t\tsubKey: mutableAtomToken.family.subKey,\n\t\t}\n\t}\n\treturn jsonToken\n}\n","import type { AtomToken, MutableAtomToken } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport type { Signal, Transceiver } from \"./transceiver\"\n\nexport const getUpdateToken = <\n\tCore extends Transceiver<Json.Serializable>,\n\tSerializableCore extends Json.Serializable,\n>(\n\tmutableAtomToken: MutableAtomToken<Core, SerializableCore>,\n): AtomToken<Signal<Core>> => {\n\tconst key = `*${mutableAtomToken.key}`\n\tconst updateToken: AtomToken<Signal<Core>> = { type: `atom`, key }\n\tif (mutableAtomToken.family) {\n\t\tupdateToken.family = {\n\t\t\tkey: `*${mutableAtomToken.family.key}`,\n\t\t\tsubKey: mutableAtomToken.family.subKey,\n\t\t}\n\t}\n\treturn updateToken\n}\n","import type { AtomToken, MutableAtomToken } from \"atom.io\"\n\nexport function isAtomTokenMutable(\n\ttoken: AtomToken<any>,\n): token is MutableAtomToken<any, any> {\n\treturn token.key.endsWith(`::mutable`)\n}\n","import type { Json } from \"atom.io/json\"\n\nexport interface Transceiver<Signal extends Json.Serializable> {\n\tdo: (update: Signal) => void\n\tundo: (update: Signal) => void\n\tsubscribe: (key: string, fn: (update: Signal) => void) => () => void\n}\n\nexport function isTransceiver(\n\tvalue: unknown,\n): value is Transceiver<Json.Serializable> {\n\treturn (\n\t\ttypeof value === `object` &&\n\t\tvalue !== null &&\n\t\t`do` in value &&\n\t\t`undo` in value &&\n\t\t`subscribe` in value\n\t)\n}\n\nexport type TransceiverMode = `playback` | `record` | `transaction`\n\nexport type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<\n\tinfer Signal\n>\n\t? Signal\n\t: never\n\n/*\nA transceiver may also keep a list of updates that have been applied to it.\nThis is useful for undo/redo functionality, especially in the context of\nrevising history. It is a good idea to accept a cache limit in your \nconstructor, and overwrite old updates. Here's an example of how we \nmight set that up:\n\nmyTransceiver = Transceiver {\n\tcacheUpdateNumber: number = 27\n\tcacheIdx: number = 1\n\tcacheLimit: number = 3\n\tcache: Array<Update> = [\n\t\t26=add:\"x\"\n\t\t27=del:\"x\" (current)\n\t\t25=add:\"y\"\n\t]\n}\n\nCONFIRM/NO-OP\nUpdate `27=del:\"x\"` is passed to myTransceiver.do:\n- [updateNumber = 27, update = `del:\"x\"`]\t\n- updateOffset = updateNumber - cacheUpdateNumber // 0\n- eventOffset < 1 // true (we're validating the past)\n- |eventOffset| < cacheLimit // true (we remember this update)\n- eventIdx = cacheIdx + updateOffset // 1\n- update === cache.get(eventIdx) // true\n- return null // 👍\n\nEXPECTED UPDATE\nUpdate `28=add:\"x\"` is passed to myTransceiver.do:\n- [updateNumber = 28, update = `add:\"x\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // 1\n- eventOffset < 1 // false (we're in the future)\n- eventOffset === 1 // true (we're ready to apply this update)\n- cacheIdx += eventOffset // 2\n- cacheIdx %= cacheLimit // 2\n- cache[cacheIdx] = update // cache = <{ 0 => add:\"x\" }>\n- return null // 👍\n\nUNEXPECTED UPDATE\nUpdate `29=del:\"x\"` is passed to myTransceiver.do:\n- [updateNumber = 29, update = `del:\"x\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // 2\n- eventOffset < 1 // false (we're in the future)\n- eventOffset === 1 // false (we're NOT ready to apply this update)\n- updateIdx := cacheIdx + updateOffset // 3\n- updateIdx %= cacheLimit // 0\n- cache[updateIdx] = update // cache = <{ 0 => del:\"x\" }> \n- expectedUpdateNumber = cacheUpdateNumber + 1 // 28\n- return expectedUpdateNumber // 🤨👂\n\nSUCCESSFUL ROLLBACK UPDATE\nUpdate `25=add:\"z\"` is passed to myTransceiver.do:\n- [updateNumber = 25, update = `add:\"z\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // -2\n- eventOffset < 1 // true (we're validating the past)\n- |eventOffset| < cacheLimit // true (we remember this update)\n- eventIdx = cacheIdx + updateOffset // -1\n- eventIdx %= cacheLimit // 2\n- update === cache[eventIdx] // false (we're rolling back)\n- done := false\n- update := cache[cacheIdx] // update = `del:\"x\"`\n- undo(update) // myTransceiver.undo(`del:\"x\"`)\n- while (!done) {\n- \tcacheIdx -= 1 // 0, -1\n- \tcacheIdx %= cacheLimit // 0, 2\n- \tupdate = cache[cacheIdx] // update = `add:\"y\"`, `add:\"x\"`\n- \tundo(update) // myTransceiver.undo(`add:\"y\"`), myTransceiver.undo(`add:\"x\"`)\n- \tdone = cacheIdx === eventIdx // false, true\n- }\n- do(update) // myTransceiver.do(`add:\"z\"`)\n- return null // 👍\n\nUNSUCCESSFUL ROLLBACK UPDATE\nUpdate `24=add:\"z\"` is passed to myTransceiver.do:\n- [updateNumber = 24, update = `add:\"z\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // -3\n- eventOffset < 1 // true (we're validating the past)\n- |eventOffset| < cacheLimit // 3 < 3 // false (we don't remember this update)\n- return `OUT_OF_RANGE` // 😵‍💫👂\n\n*/\n","import type { Atom } from \"../atom\"\n\nexport * from \"./create-mutable-atom\"\nexport * from \"./create-mutable-atom-family\"\nexport * from \"./get-json-token\"\nexport * from \"./get-update-token\"\nexport * from \"./is-atom-token-mutable\"\nexport * from \"./tracker\"\nexport * from \"./tracker-family\"\nexport * from \"./transceiver\"\n\nexport interface MutableAtom<T> extends Atom<T> {\n\tmutable: true\n}\n\nexport const isAtomMutable = <T>(atom: Atom<T>): atom is MutableAtom<T> =>\n\t`isMutable` in atom\n","import { traceAllSelectorAtoms } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { target } from \"../transaction\"\n\nexport const isAtomDefault = (\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): boolean => {\n\tconst core = target(store)\n\treturn core.atomsThatAreDefault.has(key)\n}\n\nexport const markAtomAsDefault = (\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst core = target(store)\n\tcore.atomsThatAreDefault = new Set(core.atomsThatAreDefault).add(key)\n}\n\nexport const markAtomAsNotDefault = (\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): void => {\n\tconst core = target(store)\n\tcore.atomsThatAreDefault = new Set(target(store).atomsThatAreDefault)\n\tcore.atomsThatAreDefault.delete(key)\n}\n\nexport const isSelectorDefault = (\n\tkey: string,\n\tstore: Store = IMPLICIT.STORE,\n): boolean => {\n\tconst rootKeys = traceAllSelectorAtoms(key, store)\n\treturn rootKeys.every((rootKey) => isAtomDefault(rootKey, store))\n}\n","import type { AtomToken } from \"~/packages/atom.io/src\"\nimport type { Store } from \"..\"\nimport { IMPLICIT, target } from \"..\"\n\nexport function deleteAtom(\n\tatomToken: AtomToken<unknown>,\n\tstore: Store = IMPLICIT.STORE,\n): void {\n\tconst core = target(store)\n\tconst { key } = atomToken\n\tcore.atoms.delete(key)\n\tcore.valueMap.delete(key)\n\tcore.selectorAtoms.delete(key)\n\tcore.atomsThatAreDefault.delete(key)\n\tcore.timelineAtoms.delete(key)\n\tstore.logger.info(`🔥`, `atom`, `${key}`, `deleted`)\n}\n","import type { Atom } from \"../atom\"\nimport type { ReadonlySelector, Selector } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\nimport { target } from \"../transaction\"\n\nexport const recallState = <T>(\n\tstate: Atom<T> | ReadonlySelector<T> | Selector<T>,\n\tstore: Store = IMPLICIT.STORE,\n): T => {\n\tconst core = target(store)\n\tif (!core.operation.open) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\tstate.type,\n\t\t\tstate.key,\n\t\t\t`recall called outside of an operation. This is probably a bug.`,\n\t\t)\n\t\treturn core.valueMap.get(state.key)\n\t}\n\treturn core.operation.prev.get(state.key)\n}\n","import { getState__INTERNAL } from \"../get-state-internal\"\nimport type { ReadonlySelector, Selector } from \"../selector\"\nimport { traceAllSelectorAtoms } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { recallState } from \"./recall-state\"\n\nexport const subscribeToRootAtoms = <T>(\n\tstate: ReadonlySelector<T> | Selector<T>,\n\tstore: Store,\n): (() => void)[] | null => {\n\tconst dependencySubscriptions =\n\t\t`default` in state\n\t\t\t? null\n\t\t\t: traceAllSelectorAtoms(state.key, store).map((atomKey) => {\n\t\t\t\t\tconst atom = store.atoms.get(atomKey)\n\t\t\t\t\tif (atom === undefined) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Atom \"${atomKey}\", a dependency of selector \"${state.key}\", not found in store \"${store.config.name}\".`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\treturn atom.subject.subscribe(\n\t\t\t\t\t\t`${state.type}:${state.key}`,\n\t\t\t\t\t\t(atomChange) => {\n\t\t\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t\t\t`📢`,\n\t\t\t\t\t\t\t\tstate.type,\n\t\t\t\t\t\t\t\tstate.key,\n\t\t\t\t\t\t\t\t`root`,\n\t\t\t\t\t\t\t\tatomKey,\n\t\t\t\t\t\t\t\t`went`,\n\t\t\t\t\t\t\t\tatomChange.oldValue,\n\t\t\t\t\t\t\t\t`->`,\n\t\t\t\t\t\t\t\tatomChange.newValue,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tconst oldValue = recallState(state, store)\n\t\t\t\t\t\t\t// ❌ this retrieves a stale cached value when applying a transaction on the server\n\t\t\t\t\t\t\tconst newValue = getState__INTERNAL(state, store)\n\t\t\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t\t\t`✨`,\n\t\t\t\t\t\t\t\tstate.type,\n\t\t\t\t\t\t\t\tstate.key,\n\t\t\t\t\t\t\t\t`went`,\n\t\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t\t\t`->`,\n\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tstate.subject.next({ newValue, oldValue })\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t })\n\treturn dependencySubscriptions\n}\n"]}
@@ -1,8 +0,0 @@
1
- import type { Selector } from "../selector"
2
-
3
- export const setSelectorState = <T>(
4
- selector: Selector<T>,
5
- next: T | ((oldValue: T) => T),
6
- ): void => {
7
- selector.set(next)
8
- }
@@ -1,109 +0,0 @@
1
- import type { TimelineToken } from "atom.io"
2
- import { setState } from "atom.io"
3
-
4
- import type { Store } from "../store"
5
- import { IMPLICIT } from "../store"
6
-
7
- export const redo__INTERNAL = (
8
- token: TimelineToken,
9
- store: Store = IMPLICIT.STORE,
10
- ): void => {
11
- store.logger.info(`⏩`, `timeline`, token.key, `redo`)
12
- const timelineData = store.timelines.get(token.key)
13
- if (!timelineData) {
14
- store.logger.error(
15
- `🐞`,
16
- `timeline`,
17
- token.key,
18
- `Failed to redo. This timeline has not been initialized.`,
19
- )
20
- return
21
- }
22
- if (timelineData.at === timelineData.history.length) {
23
- store.logger.warn(
24
- `💁`,
25
- `timeline`,
26
- token.key,
27
- `Failed to redo at the end of timeline "${token.key}". There is nothing to redo.`,
28
- )
29
- return
30
- }
31
- timelineData.timeTraveling = `into_future`
32
- const update = timelineData.history[timelineData.at]
33
- switch (update.type) {
34
- case `atom_update`: {
35
- const { key, newValue } = update
36
- setState({ key, type: `atom` }, newValue, store)
37
- break
38
- }
39
- case `selector_update`:
40
- case `transaction_update`: {
41
- for (const atomUpdate of update.atomUpdates) {
42
- const { key, newValue } = atomUpdate
43
- setState({ key, type: `atom` }, newValue, store)
44
- }
45
- break
46
- }
47
- }
48
- ++timelineData.at
49
- timelineData.subject.next(`redo`)
50
- timelineData.timeTraveling = null
51
- store.logger.info(
52
- `⏹️`,
53
- `timeline`,
54
- token.key,
55
- `"${token.key}" is now at ${timelineData.at} / ${timelineData.history.length}`,
56
- )
57
- }
58
-
59
- export const undo__INTERNAL = (
60
- token: TimelineToken,
61
- store: Store = IMPLICIT.STORE,
62
- ): void => {
63
- store.logger.info(`⏪`, `timeline`, token.key, `undo`)
64
- const timelineData = store.timelines.get(token.key)
65
- if (!timelineData) {
66
- store.logger.error(
67
- `🐞`,
68
- `timeline`,
69
- token.key,
70
- `Failed to undo. This timeline has not been initialized.`,
71
- )
72
- return
73
- }
74
- if (timelineData.at === 0) {
75
- store.logger.warn(
76
- `💁`,
77
- `timeline`,
78
- token.key,
79
- `Failed to undo at the beginning of timeline "${token.key}". There is nothing to undo.`,
80
- )
81
- return
82
- }
83
- timelineData.timeTraveling = `into_past`
84
- --timelineData.at
85
- const update = timelineData.history[timelineData.at]
86
- switch (update.type) {
87
- case `atom_update`: {
88
- const { key, oldValue } = update
89
- setState({ key, type: `atom` }, oldValue, store)
90
- break
91
- }
92
- case `selector_update`:
93
- case `transaction_update`: {
94
- for (const atomUpdate of [...update.atomUpdates].reverse()) {
95
- const { key, oldValue } = atomUpdate
96
- setState({ key, type: `atom` }, oldValue, store)
97
- }
98
- break
99
- }
100
- }
101
- timelineData.subject.next(`undo`)
102
- timelineData.timeTraveling = null
103
- store.logger.info(
104
- `⏹️`,
105
- `timeline`,
106
- token.key,
107
- `"${token.key}" is now at ${timelineData.at} / ${timelineData.history.length}`,
108
- )
109
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/attach-introspection-states.ts","../src/attach-atom-index.ts","../src/attach-selector-index.ts","../src/attach-timeline-family.ts","../src/attach-timeline-index.ts","../src/attach-transaction-index.ts","../src/attach-transaction-logs.ts"],"names":["IMPLICIT","createAtom","createSelector","target","createAtomFamily","createSelectorFamily"],"mappings":"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","sourcesContent":["import type {\n\tReadonlySelectorFamily,\n\tReadonlySelectorToken,\n\tTimelineToken,\n\tTransactionToken,\n\tTransactionUpdate,\n\tƒn,\n} from \"atom.io\"\nimport * as __INTERNAL__ from \"atom.io/internal\"\nimport type { 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\"\n\nexport const attachIntrospectionStates = (\n\tstore: __INTERNAL__.Store = __INTERNAL__.IMPLICIT.STORE,\n): {\n\tatomIndex: ReadonlySelectorToken<AtomTokenIndex>\n\tselectorIndex: ReadonlySelectorToken<SelectorTokenIndex>\n\ttransactionIndex: ReadonlySelectorToken<TransactionToken<ƒn>[]>\n\tfindTransactionLogState: ReadonlySelectorFamily<TransactionUpdate<ƒn>[]>\n\ttimelineIndex: ReadonlySelectorToken<TimelineToken[]>\n\tfindTimelineState: ReadonlySelectorFamily<Timeline>\n} => {\n\treturn {\n\t\tatomIndex: attachAtomIndex(store),\n\t\tselectorIndex: attachSelectorIndex(store),\n\t\ttransactionIndex: attachTransactionIndex(store),\n\t\tfindTransactionLogState: attachTransactionLogs(store),\n\t\ttimelineIndex: attachTimelineIndex(store),\n\t\tfindTimelineState: attachTimelineFamily(store),\n\t}\n}\n","import type { AtomToken, ReadonlySelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createAtom, createSelector, target } from \"atom.io/internal\"\n\nimport type { StateTokenIndex } from \".\"\n\nexport type AtomTokenIndex = StateTokenIndex<AtomToken<unknown>>\n\nexport const attachAtomIndex = (\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorToken<AtomTokenIndex> => {\n\tconst atomTokenIndexState__INTERNAL = createAtom<AtomTokenIndex>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Atom Token Index (Internal)`,\n\t\t\tdefault: () => {\n\t\t\t\tconst defaultAtomIndex = [...store.atoms]\n\t\t\t\t\t.filter(([key]) => !key.includes(`👁‍🗨`))\n\t\t\t\t\t.reduce<AtomTokenIndex>((acc, [key]) => {\n\t\t\t\t\t\tacc[key] = { key, type: `atom` }\n\t\t\t\t\t\treturn acc\n\t\t\t\t\t}, {})\n\t\t\t\treturn defaultAtomIndex\n\t\t\t},\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.subject.atomCreation.subscribe(`introspection`, (atomToken) => {\n\t\t\t\t\t\tif (atomToken.key.includes(`👁‍🗨`)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst set = () =>\n\t\t\t\t\t\t\tsetSelf((state) => {\n\t\t\t\t\t\t\t\tconst { key, family } = atomToken\n\t\t\t\t\t\t\t\tif (family) {\n\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = family\n\t\t\t\t\t\t\t\t\tconst current = state[familyKey]\n\t\t\t\t\t\t\t\t\tif (current === undefined || `familyMembers` in current) {\n\t\t\t\t\t\t\t\t\t\tconst familyKeyState = current || {\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: {},\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\t\t\t\t[familyKey]: {\n\t\t\t\t\t\t\t\t\t\t\t\t...familyKeyState,\n\t\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...familyKeyState.familyMembers,\n\t\t\t\t\t\t\t\t\t\t\t\t\t[subKey]: atomToken,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\t\t[key]: atomToken,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\tif (target(store).operation.open) {\n\t\t\t\t\t\t\tconst unsubscribe = store.subject.operationStatus.subscribe(\n\t\t\t\t\t\t\t\t`introspection: waiting to update atom index`,\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\t\t\tset()\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tset()\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\tstore,\n\t)\n\treturn createSelector(\n\t\t{\n\t\t\tkey: `👁‍🗨 Atom Token Index`,\n\t\t\tget: ({ get }) => get(atomTokenIndexState__INTERNAL),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n}\n","import type { ReadonlySelectorToken, SelectorToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createAtom, createSelector, target } from \"atom.io/internal\"\n\nimport type { StateTokenIndex } from \".\"\n\nexport type SelectorTokenIndex = StateTokenIndex<\n\tReadonlySelectorToken<unknown> | SelectorToken<unknown>\n>\n\nexport const attachSelectorIndex = (\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorToken<SelectorTokenIndex> => {\n\tconst readonlySelectorTokenIndexState__INTERNAL =\n\t\tcreateAtom<SelectorTokenIndex>(\n\t\t\t{\n\t\t\t\tkey: `👁‍🗨 Selector Token Index (Internal)`,\n\t\t\t\tdefault: () =>\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t[...store.readonlySelectors]\n\t\t\t\t\t\t\t.filter(([key]) => !key.includes(`👁‍🗨`))\n\t\t\t\t\t\t\t.reduce<SelectorTokenIndex>((acc, [key]) => {\n\t\t\t\t\t\t\t\tacc[key] = { key, type: `readonly_selector` }\n\t\t\t\t\t\t\t\treturn acc\n\t\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\t[...store.selectors].reduce<SelectorTokenIndex>((acc, [key]) => {\n\t\t\t\t\t\t\tacc[key] = { key, type: `selector` }\n\t\t\t\t\t\t\treturn acc\n\t\t\t\t\t\t}, {}),\n\t\t\t\t\t),\n\t\t\t\teffects: [\n\t\t\t\t\t({ setSelf }) => {\n\t\t\t\t\t\tstore.subject.selectorCreation.subscribe(\n\t\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t\t(selectorToken) => {\n\t\t\t\t\t\t\t\tif (selectorToken.key.includes(`👁‍🗨`)) {\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst set = () =>\n\t\t\t\t\t\t\t\t\tsetSelf((state) => {\n\t\t\t\t\t\t\t\t\t\tconst { key, family } = selectorToken\n\t\t\t\t\t\t\t\t\t\tif (family) {\n\t\t\t\t\t\t\t\t\t\t\tconst { key: familyKey, subKey } = family\n\t\t\t\t\t\t\t\t\t\t\tconst current = state[familyKey]\n\t\t\t\t\t\t\t\t\t\t\tif (current === undefined || `familyMembers` in current) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst familyKeyState = current || {\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey: familyKey,\n\t\t\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: {},\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\t\t\t\t\t\t[familyKey]: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...familyKeyState,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfamilyMembers: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...familyKeyState.familyMembers,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[subKey]: selectorToken,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\t\t\t\t[key]: selectorToken,\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\tif (target(store).operation.open) {\n\t\t\t\t\t\t\t\t\tconst unsubscribe = store.subject.operationStatus.subscribe(\n\t\t\t\t\t\t\t\t\t\t`introspection: waiting to update selector index`,\n\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\t\t\t\t\tset()\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\tset()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tundefined,\n\t\t\tstore,\n\t\t)\n\treturn createSelector({\n\t\tkey: `👁‍🗨 Selector Token Index`,\n\t\tget: ({ get }) => get(readonlySelectorTokenIndexState__INTERNAL),\n\t})\n}\n","import type { ReadonlySelectorFamily } from \"atom.io\"\nimport type { Store, Timeline } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tSubject,\n\tcreateAtomFamily,\n\tcreateSelectorFamily,\n} from \"atom.io/internal\"\n\nexport const attachTimelineFamily = (\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorFamily<Timeline> => {\n\tconst findTimelineLogState__INTERNAL = createAtomFamily<Timeline, string>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Timeline Update Log (Internal)`,\n\t\t\tdefault: (key) =>\n\t\t\t\tstore.timelines.get(key) ?? {\n\t\t\t\t\ttype: `timeline`,\n\t\t\t\t\tkey: ``,\n\t\t\t\t\tat: 0,\n\t\t\t\t\ttimeTraveling: null,\n\t\t\t\t\thistory: [],\n\t\t\t\t\tselectorTime: null,\n\t\t\t\t\ttransactionKey: null,\n\t\t\t\t\tinstall: () => {},\n\t\t\t\t\tsubject: new Subject(),\n\t\t\t\t},\n\t\t\teffects: (key) => [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tconst tl = store.timelines.get(key)\n\t\t\t\t\ttl?.subject.subscribe(`introspection`, (_) => {\n\t\t\t\t\t\tif (store.operation.open === true) {\n\t\t\t\t\t\t\tconst unsubscribe = store.subject.operationStatus.subscribe(\n\t\t\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t\t\t(operationStatus) => {\n\t\t\t\t\t\t\t\t\tif (operationStatus.open === false) {\n\t\t\t\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\t\t\t\tsetSelf({ ...tl })\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} else {\n\t\t\t\t\t\t\tsetSelf({ ...tl })\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\tstore,\n\t)\n\tconst findTimelineLogState = createSelectorFamily<Timeline, string>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Timeline Update Log`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) =>\n\t\t\t\t\tget(findTimelineLogState__INTERNAL(key)),\n\t\t},\n\t\tstore,\n\t)\n\treturn findTimelineLogState\n}\n","import type { ReadonlySelectorToken, TimelineToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createAtom, createSelector } from \"atom.io/internal\"\n\nexport const attachTimelineIndex = (\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorToken<TimelineToken[]> => {\n\tconst timelineTokenIndexState__INTERNAL = createAtom<TimelineToken[]>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Timeline Token Index (Internal)`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.timelines].map(([key]): TimelineToken => {\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.subject.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\tstore,\n\t)\n\tconst timelineTokenIndex = createSelector(\n\t\t{\n\t\t\tkey: `👁‍🗨 Timeline Token Index`,\n\t\t\tget: ({ get }) => get(timelineTokenIndexState__INTERNAL),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n\treturn timelineTokenIndex\n}\n","import type { ReadonlySelectorToken, TransactionToken, ƒn } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { IMPLICIT, createAtom, createSelector } from \"atom.io/internal\"\n\nexport const attachTransactionIndex = (\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorToken<TransactionToken<ƒn>[]> => {\n\tconst transactionTokenIndexState__INTERNAL = createAtom<\n\t\tTransactionToken<ƒn>[]\n\t>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Transaction Token Index (Internal)`,\n\t\t\tdefault: () =>\n\t\t\t\t[...store.transactions].map(([key]): TransactionToken<ƒn> => {\n\t\t\t\t\treturn { key, type: `transaction` }\n\t\t\t\t}),\n\t\t\teffects: [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tstore.subject.transactionCreation.subscribe(\n\t\t\t\t\t\t`introspection`,\n\t\t\t\t\t\t(transactionToken) => {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionToken])\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n\tconst transactionTokenIndex = createSelector(\n\t\t{\n\t\t\tkey: `👁‍🗨 Transaction Token Index`,\n\t\t\tget: ({ get }) => get(transactionTokenIndexState__INTERNAL),\n\t\t},\n\t\tundefined,\n\t\tstore,\n\t)\n\treturn transactionTokenIndex\n}\n","import type { ReadonlySelectorFamily, TransactionUpdate, ƒn } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tcreateAtomFamily,\n\tcreateSelectorFamily,\n} from \"atom.io/internal\"\n\nexport const attachTransactionLogs = (\n\tstore: Store = IMPLICIT.STORE,\n): ReadonlySelectorFamily<TransactionUpdate<ƒn>[]> => {\n\tconst findTransactionUpdateLog = createAtomFamily<\n\t\tTransactionUpdate<ƒn>[],\n\t\tstring\n\t>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Transaction Update Log (Internal)`,\n\t\t\tdefault: () => [],\n\t\t\teffects: (key) => [\n\t\t\t\t({ setSelf }) => {\n\t\t\t\t\tconst tx = store.transactions.get(key)\n\t\t\t\t\ttx?.subject.subscribe(`introspection`, (transactionUpdate) => {\n\t\t\t\t\t\tif (transactionUpdate.key === key) {\n\t\t\t\t\t\t\tsetSelf((state) => [...state, transactionUpdate])\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\tstore,\n\t)\n\tconst findTransactionUpdateLogState = createSelectorFamily<\n\t\tTransactionUpdate<ƒn>[],\n\t\tstring\n\t>(\n\t\t{\n\t\t\tkey: `👁‍🗨 Transaction Update Log`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) =>\n\t\t\t\t\tget(findTransactionUpdateLog(key)),\n\t\t},\n\t\tstore,\n\t)\n\treturn findTransactionUpdateLogState\n}\n"]}
@@ -1,29 +0,0 @@
1
- import { IMPLICIT, getJsonToken } from 'atom.io/internal';
2
- import * as React2 from 'react';
3
- import { jsx } from 'react/jsx-runtime';
4
- import { setState, subscribe, getState } from 'atom.io';
5
-
6
- // src/store-context.tsx
7
- var StoreContext = React2.createContext(IMPLICIT.STORE);
8
- var StoreProvider = ({ children, store = IMPLICIT.STORE }) => /* @__PURE__ */ jsx(StoreContext.Provider, { value: store, children });
9
- function useI(token) {
10
- const store = React2.useContext(StoreContext);
11
- return (next) => setState(token, next, store);
12
- }
13
- function useO(token) {
14
- const store = React2.useContext(StoreContext);
15
- const id = React2.useId();
16
- return React2.useSyncExternalStore(
17
- (dispatch) => subscribe(token, dispatch, `use-o:${id}`, store),
18
- () => getState(token, store),
19
- () => getState(token, store)
20
- );
21
- }
22
- function useJSON(token) {
23
- const jsonToken = getJsonToken(token);
24
- return useO(jsonToken);
25
- }
26
-
27
- export { StoreContext, StoreProvider, useI, useJSON, useO };
28
- //# sourceMappingURL=out.js.map
29
- //# sourceMappingURL=index.mjs.map