atom.io 0.44.14 → 0.45.0

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 (72) hide show
  1. package/dist/eslint-plugin/index.js +1 -1
  2. package/dist/introspection/index.d.ts +3 -2
  3. package/dist/introspection/index.d.ts.map +1 -1
  4. package/dist/introspection/index.js.map +1 -1
  5. package/dist/json/index.d.ts +34 -20
  6. package/dist/json/index.d.ts.map +1 -1
  7. package/dist/json/index.js +40 -2
  8. package/dist/json/index.js.map +1 -1
  9. package/dist/main/index.d.ts +3 -3
  10. package/dist/main/index.d.ts.map +1 -1
  11. package/dist/main/index.js +3 -2
  12. package/dist/main/index.js.map +1 -1
  13. package/dist/react/index.d.ts +4 -4
  14. package/dist/react/index.d.ts.map +1 -1
  15. package/dist/react/index.js.map +1 -1
  16. package/dist/react-devtools/index.js.map +1 -1
  17. package/dist/realtime-client/index.d.ts +1 -1
  18. package/dist/realtime-client/index.d.ts.map +1 -1
  19. package/dist/realtime-client/index.js.map +1 -1
  20. package/dist/realtime-server/index.d.ts +5 -0
  21. package/dist/realtime-server/index.d.ts.map +1 -1
  22. package/dist/realtime-server/index.js +38 -12
  23. package/dist/realtime-server/index.js.map +1 -1
  24. package/dist/realtime-testing/index.d.ts.map +1 -1
  25. package/dist/realtime-testing/index.js +3 -9
  26. package/dist/realtime-testing/index.js.map +1 -1
  27. package/dist/transceivers/o-list/index.d.ts +1 -2
  28. package/dist/transceivers/o-list/index.d.ts.map +1 -1
  29. package/dist/transceivers/o-list/index.js +23 -24
  30. package/dist/transceivers/o-list/index.js.map +1 -1
  31. package/dist/transceivers/u-list/index.d.ts +1 -2
  32. package/dist/transceivers/u-list/index.d.ts.map +1 -1
  33. package/dist/transceivers/u-list/index.js +5 -6
  34. package/dist/transceivers/u-list/index.js.map +1 -1
  35. package/package.json +2 -10
  36. package/src/introspection/attach-introspection-states.ts +1 -1
  37. package/src/introspection/attach-transaction-logs.ts +2 -2
  38. package/src/introspection/index.ts +3 -0
  39. package/src/json/canonical.ts +42 -0
  40. package/src/json/enumeration.ts +36 -0
  41. package/src/json/index.ts +3 -132
  42. package/src/json/json.ts +128 -0
  43. package/src/main/index.ts +9 -2
  44. package/src/main/logger.ts +4 -2
  45. package/src/react/use-loadable.ts +10 -5
  46. package/src/react-devtools/TransactionIndex.tsx +1 -1
  47. package/src/react-devtools/store.ts +3 -3
  48. package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +2 -2
  49. package/src/realtime-server/realtime-family-provider.ts +44 -0
  50. package/src/realtime-server/realtime-mutable-family-provider.ts +38 -0
  51. package/src/realtime-server/realtime-mutable-provider.ts +19 -0
  52. package/src/realtime-server/realtime-server-stores/provide-rooms.ts +2 -1
  53. package/src/realtime-server/realtime-state-provider.ts +20 -0
  54. package/src/realtime-server/server-config.ts +2 -1
  55. package/src/realtime-testing/setup-realtime-test.tsx +3 -9
  56. package/src/transceivers/o-list/o-list.ts +27 -28
  57. package/src/transceivers/u-list/u-list.ts +7 -8
  58. package/dist/data/index.d.ts +0 -23
  59. package/dist/data/index.d.ts.map +0 -1
  60. package/dist/data/index.js +0 -63
  61. package/dist/data/index.js.map +0 -1
  62. package/dist/struct/index.d.ts +0 -14
  63. package/dist/struct/index.d.ts.map +0 -1
  64. package/dist/struct/index.js +0 -37
  65. package/dist/struct/index.js.map +0 -1
  66. package/src/data/dict.ts +0 -31
  67. package/src/data/index.ts +0 -3
  68. package/src/data/struct-family.ts +0 -53
  69. package/src/data/struct.ts +0 -54
  70. package/src/struct/index.ts +0 -1
  71. package/src/struct/micro.ts +0 -72
  72. /package/dist/{chunk-D8lmAICg.js → chunk-CKcAJnC7.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["StoreContext: React.Context<RootStore>","StoreProvider: React.FC<{\n\tchildren: React.ReactNode\n\tstore?: RootStore\n}>","useRef","token: ReadableToken<any, any, any>","setter: React.RefObject<\n\t\t(<New extends T>(next: New | ((old: T) => New)) => void) | null\n\t>","StoreContext","value: unknown","state: ReadableState<any, any>","fallback: unknown","key: Canonical","useO"],"sources":["../../src/react/store-context.tsx","../../src/react/use-atomic-ref.ts","../../src/react/parse-state-overloads.ts","../../src/react/use-i.ts","../../src/react/use-o.ts","../../src/react/use-json.ts","../../src/react/use-loadable.ts","../../src/react/use-tl.ts"],"sourcesContent":["import type { RootStore } from \"atom.io/internal\"\nimport { IMPLICIT } from \"atom.io/internal\"\nimport { createContext } from \"react\"\n\nexport const StoreContext: React.Context<RootStore> = createContext(\n\tIMPLICIT.STORE,\n)\n\nexport const StoreProvider: React.FC<{\n\tchildren: React.ReactNode\n\tstore?: RootStore\n}> = ({ children, store = IMPLICIT.STORE }) => (\n\t<StoreContext.Provider value={store}>{children}</StoreContext.Provider>\n)\n","import type { RegularAtomToken } from \"atom.io\"\nimport { setState } from \"atom.io\"\nimport { useEffect } from \"react\"\n\nexport function useAtomicRef<T, R extends { current: T | null }>(\n\ttoken: RegularAtomToken<T | null>,\n\tuseRef: <TT>(initialValue: TT | null) => R,\n): R {\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tsetState(token, ref.current)\n\t}, [token])\n\treturn ref\n}\n","import type {\n\tReadableFamilyToken,\n\tReadableToken,\n\tWritableFamilyToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\n\nexport function parseStateOverloads<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\t...rest: [WritableFamilyToken<T, K, E>, Key] | [WritableToken<T, any, E>]\n): WritableToken<T, Key, E>\n\nexport function parseStateOverloads<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\t...rest: [ReadableFamilyToken<T, K, E>, Key] | [ReadableToken<T, any, E>]\n): ReadableToken<T, Key, E>\n\nexport function parseStateOverloads<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\t...rest: [ReadableFamilyToken<T, K, E>, Key] | [ReadableToken<T, any, E>]\n): ReadableToken<T, Key, E> {\n\tlet token: ReadableToken<any, any, any>\n\tif (rest.length === 2) {\n\t\tconst family = rest[0]\n\t\tconst key = rest[1]\n\n\t\ttoken = findInStore(store, family, key)\n\t} else {\n\t\ttoken = rest[0]\n\t}\n\treturn token\n}\n","import type { WritableFamilyToken, WritableToken } from \"atom.io\"\nimport { setIntoStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { useContext, useRef } from \"react\"\n\nimport { parseStateOverloads } from \"./parse-state-overloads\"\nimport { StoreContext } from \"./store-context\"\n\nexport function useI<T>(\n\ttoken: WritableToken<T, any, any>,\n): <New extends T>(next: New | ((old: T) => New)) => void\n\nexport function useI<T, K extends Canonical>(\n\ttoken: WritableFamilyToken<T, K, any>,\n\tkey: NoInfer<K>,\n): <New extends T>(next: New | ((old: T) => New)) => void\n\nexport function useI<T, K extends Canonical>(\n\t...params:\n\t\t| [WritableFamilyToken<T, K, any>, NoInfer<K>]\n\t\t| [WritableToken<T, any, any>]\n): <New extends T>(next: New | ((old: T) => New)) => void {\n\tconst store = useContext(StoreContext)\n\tconst token = parseStateOverloads(store, ...params)\n\tconst setter: React.RefObject<\n\t\t(<New extends T>(next: New | ((old: T) => New)) => void) | null\n\t> = useRef(null)\n\tsetter.current ??= (next) => {\n\t\tsetIntoStore(store, token, next)\n\t}\n\treturn setter.current\n}\n","import type { ReadableFamilyToken, ReadableToken, ViewOf } from \"atom.io\"\nimport { getFromStore, subscribeToState } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { useCallback, useContext, useId, useSyncExternalStore } from \"react\"\n\nimport { parseStateOverloads } from \"./parse-state-overloads\"\nimport { StoreContext } from \"./store-context\"\n\nexport function useO<T, E = never>(\n\ttoken: ReadableToken<T, any, E>,\n): ViewOf<E | T>\n\nexport function useO<T, K extends Canonical, E = never>(\n\ttoken: ReadableFamilyToken<T, K, E>,\n\tkey: NoInfer<K>,\n): ViewOf<E | T>\n\nexport function useO<T, K extends Canonical, E = never>(\n\t...params:\n\t\t| [ReadableFamilyToken<T, K, E>, NoInfer<K>]\n\t\t| [ReadableToken<T, any, E>]\n): ViewOf<E | T> {\n\tconst store = useContext(StoreContext)\n\tconst token = parseStateOverloads(store, ...params)\n\tconst id = useId()\n\tconst sub = useCallback(\n\t\t(dispatch: () => void) =>\n\t\t\tsubscribeToState<T, E>(store, token, `use-o:${id}`, dispatch),\n\t\t[token.key],\n\t)\n\tconst get = useCallback(() => getFromStore(store, token), [token.key])\n\treturn useSyncExternalStore<ViewOf<E | T>>(sub, get, get)\n}\n","import type { MutableAtomFamilyToken, MutableAtomToken } from \"atom.io\"\nimport type { AsJSON, Transceiver } from \"atom.io/internal\"\nimport { findInStore, getJsonToken } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { useContext } from \"react\"\n\nimport { StoreContext } from \"./store-context\"\nimport { useO } from \"./use-o\"\n\nexport function useJSON<T extends Transceiver<any, any, any>>(\n\ttoken: MutableAtomToken<T>,\n): AsJSON<T>\n\nexport function useJSON<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(token: MutableAtomFamilyToken<T, K>, key: K): AsJSON<T>\n\nexport function useJSON(\n\ttoken: MutableAtomFamilyToken<any, any> | MutableAtomToken<any>,\n\tkey?: Canonical,\n): Json.Serializable {\n\tconst store = useContext(StoreContext)\n\tconst stateToken: MutableAtomToken<any> =\n\t\ttoken.type === `mutable_atom_family` ? findInStore(store, token, key) : token\n\tconst jsonToken = getJsonToken(store, stateToken)\n\treturn useO(jsonToken)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: params are used in an invariant way */\nimport type { Loadable, ReadableFamilyToken, ReadableToken } from \"atom.io\"\nimport { findInStore, type ReadableState, withdraw } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport { useContext, useRef } from \"react\"\n\nexport function useLoadable<T, E>(\n\ttoken: ReadableToken<Loadable<T>, any, E>,\n): `LOADING` | { loading: boolean; value: E | T }\n\nexport function useLoadable<T, K extends Canonical, E>(\n\ttoken: ReadableFamilyToken<Loadable<T>, K, E>,\n\tkey: NoInfer<K>,\n): `LOADING` | { loading: boolean; value: E | T }\n\nexport function useLoadable<T, F extends T, E>(\n\ttoken: ReadableToken<Loadable<T>, any, E>,\n\tfallback: F,\n): { loading: boolean; value: T; error?: E }\n\nexport function useLoadable<T, K extends Canonical, F extends T, E>(\n\ttoken: ReadableFamilyToken<Loadable<T>, K, E>,\n\tkey: NoInfer<K>,\n\tfallback: F,\n): { loading: boolean; value: T; error?: E }\n\nexport function useLoadable(\n\t...params:\n\t\t| readonly [ReadableFamilyToken<any, Canonical, any>, Canonical, unknown]\n\t\t| readonly [ReadableFamilyToken<any, Canonical, any>, Canonical]\n\t\t| readonly [ReadableToken<any, any, any>, unknown]\n\t\t| readonly [ReadableToken<any, any, any>]\n): `LOADING` | { loading: boolean; value: unknown; error?: unknown } {\n\tconst store = useContext(StoreContext)\n\n\tlet value: unknown\n\tlet state: ReadableState<any, any>\n\tlet fallback: unknown\n\n\tconst [token] = params\n\tlet key: Canonical\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\tcase `readonly_held_selector`:\n\t\tcase `readonly_pure_selector`:\n\t\tcase `writable_held_selector`:\n\t\tcase `writable_pure_selector`:\n\t\t\tvalue = useO(token)\n\t\t\tstate = withdraw(store, token)\n\t\t\tfallback = params[1]\n\t\t\tbreak\n\t\tcase `atom_family`:\n\t\tcase `mutable_atom_family`:\n\t\tcase `readonly_held_selector_family`:\n\t\tcase `readonly_pure_selector_family`:\n\t\tcase `writable_held_selector_family`:\n\t\tcase `writable_pure_selector_family`:\n\t\t\tkey = params[1] as Canonical\n\t\t\tvalue = useO(token, key)\n\t\t\tstate = withdraw(store, findInStore(store, token, key))\n\t\t\tfallback = params[2]\n\t}\n\n\tconst hasFallback = fallback !== undefined\n\tconst isErr = `catch` in state && state.catch.some((E) => value instanceof E)\n\n\tconst wrapperRef = useRef<{\n\t\tloading: boolean\n\t\tvalue: unknown\n\t\terror?: unknown\n\t}>({ loading: false, value: null as unknown })\n\tconst lastLoadedRef = useRef(\n\t\tfallback ?? (value instanceof Promise ? `LOADING` : value),\n\t)\n\n\tconst { current: lastLoaded } = lastLoadedRef\n\tlet { current: wrapper } = wrapperRef\n\n\tconst wasErr =\n\t\t`catch` in state && state.catch.some((E) => lastLoaded instanceof E)\n\n\tif (value instanceof Promise) {\n\t\tif (lastLoaded === `LOADING`) {\n\t\t\treturn `LOADING`\n\t\t}\n\t\tif (wasErr && hasFallback) {\n\t\t\twrapper = wrapperRef.current = {\n\t\t\t\tloading: true,\n\t\t\t\tvalue: fallback,\n\t\t\t\terror: lastLoaded,\n\t\t\t}\n\t\t} else {\n\t\t\twrapper = wrapperRef.current = { loading: true, value: lastLoaded }\n\t\t}\n\t} else {\n\t\tlastLoadedRef.current = value\n\t\tif (wrapper.loading === true) {\n\t\t\tif (isErr && hasFallback) {\n\t\t\t\twrapper = wrapperRef.current = {\n\t\t\t\t\tloading: false,\n\t\t\t\t\tvalue: fallback,\n\t\t\t\t\terror: value,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twrapper = wrapperRef.current = { loading: false, value: value }\n\t\t\t}\n\t\t} else {\n\t\t\tif (isErr && hasFallback) {\n\t\t\t\twrapper.loading = false\n\t\t\t\twrapper.value = fallback\n\t\t\t\twrapper.error = value\n\t\t\t} else {\n\t\t\t\twrapper.loading = false\n\t\t\t\twrapper.value = value\n\t\t\t\tdelete wrapper.error\n\t\t\t}\n\t\t}\n\t}\n\n\treturn wrapper\n}\n","import type { TimelineToken } from \"atom.io\"\nimport { redo, undo } from \"atom.io\"\nimport { subscribeToTimeline, withdraw } from \"atom.io/internal\"\nimport { useContext, useId, useRef, useSyncExternalStore } from \"react\"\n\nimport { StoreContext } from \"./store-context\"\n\nexport type TimelineMeta = {\n\tat: number\n\tlength: number\n\tundo: () => void\n\tredo: () => void\n}\n\nexport function useTL(token: TimelineToken<any>): TimelineMeta {\n\tconst store = useContext(StoreContext)\n\tconst id = useId()\n\tconst timeline = withdraw(store, token)\n\tconst tokenRef = useRef(token)\n\tconst rebuildMeta = () => {\n\t\treturn {\n\t\t\tat: timeline.at,\n\t\t\tlength: timeline.history.length,\n\t\t\tundo: () => {\n\t\t\t\tundo(token)\n\t\t\t},\n\t\t\tredo: () => {\n\t\t\t\tredo(token)\n\t\t\t},\n\t\t}\n\t}\n\tconst meta = useRef<TimelineMeta>(rebuildMeta())\n\tconst retrieve = () => {\n\t\tif (\n\t\t\tmeta.current.at !== timeline?.at ||\n\t\t\tmeta.current.length !== timeline?.history.length ||\n\t\t\ttokenRef.current !== token\n\t\t) {\n\t\t\ttokenRef.current = token\n\t\t\tmeta.current = rebuildMeta()\n\t\t}\n\t\treturn meta.current\n\t}\n\treturn useSyncExternalStore<TimelineMeta>(\n\t\t(dispatch) => subscribeToTimeline(store, token, `use-tl:${id}`, dispatch),\n\t\tretrieve,\n\t\tretrieve,\n\t)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["StoreContext: React.Context<RootStore>","StoreProvider: React.FC<{\n\tchildren: React.ReactNode\n\tstore?: RootStore\n}>","useRef","token: ReadableToken<any, any, any>","setter: React.RefObject<\n\t\t(<New extends T>(next: New | ((old: T) => New)) => void) | null\n\t>","StoreContext","value: unknown","state: ReadableState<any, any>","fallback: unknown","key: Canonical","useO"],"sources":["../../src/react/store-context.tsx","../../src/react/use-atomic-ref.ts","../../src/react/parse-state-overloads.ts","../../src/react/use-i.ts","../../src/react/use-o.ts","../../src/react/use-json.ts","../../src/react/use-loadable.ts","../../src/react/use-tl.ts"],"sourcesContent":["import type { RootStore } from \"atom.io/internal\"\nimport { IMPLICIT } from \"atom.io/internal\"\nimport { createContext } from \"react\"\n\nexport const StoreContext: React.Context<RootStore> = createContext(\n\tIMPLICIT.STORE,\n)\n\nexport const StoreProvider: React.FC<{\n\tchildren: React.ReactNode\n\tstore?: RootStore\n}> = ({ children, store = IMPLICIT.STORE }) => (\n\t<StoreContext.Provider value={store}>{children}</StoreContext.Provider>\n)\n","import type { RegularAtomToken } from \"atom.io\"\nimport { setState } from \"atom.io\"\nimport { useEffect } from \"react\"\n\nexport function useAtomicRef<T, R extends { current: T | null }>(\n\ttoken: RegularAtomToken<T | null>,\n\tuseRef: <TT>(initialValue: TT | null) => R,\n): R {\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tsetState(token, ref.current)\n\t}, [token])\n\treturn ref\n}\n","import type {\n\tReadableFamilyToken,\n\tReadableToken,\n\tWritableFamilyToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\n\nexport function parseStateOverloads<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\t...rest: [WritableFamilyToken<T, K, E>, Key] | [WritableToken<T, any, E>]\n): WritableToken<T, Key, E>\n\nexport function parseStateOverloads<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\t...rest: [ReadableFamilyToken<T, K, E>, Key] | [ReadableToken<T, any, E>]\n): ReadableToken<T, Key, E>\n\nexport function parseStateOverloads<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\t...rest: [ReadableFamilyToken<T, K, E>, Key] | [ReadableToken<T, any, E>]\n): ReadableToken<T, Key, E> {\n\tlet token: ReadableToken<any, any, any>\n\tif (rest.length === 2) {\n\t\tconst family = rest[0]\n\t\tconst key = rest[1]\n\n\t\ttoken = findInStore(store, family, key)\n\t} else {\n\t\ttoken = rest[0]\n\t}\n\treturn token\n}\n","import type { WritableFamilyToken, WritableToken } from \"atom.io\"\nimport { setIntoStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { useContext, useRef } from \"react\"\n\nimport { parseStateOverloads } from \"./parse-state-overloads\"\nimport { StoreContext } from \"./store-context\"\n\nexport function useI<T>(\n\ttoken: WritableToken<T, any, any>,\n): <New extends T>(next: New | ((old: T) => New)) => void\n\nexport function useI<T, K extends Canonical>(\n\ttoken: WritableFamilyToken<T, K, any>,\n\tkey: NoInfer<K>,\n): <New extends T>(next: New | ((old: T) => New)) => void\n\nexport function useI<T, K extends Canonical>(\n\t...params:\n\t\t| [WritableFamilyToken<T, K, any>, NoInfer<K>]\n\t\t| [WritableToken<T, any, any>]\n): <New extends T>(next: New | ((old: T) => New)) => void {\n\tconst store = useContext(StoreContext)\n\tconst token = parseStateOverloads(store, ...params)\n\tconst setter: React.RefObject<\n\t\t(<New extends T>(next: New | ((old: T) => New)) => void) | null\n\t> = useRef(null)\n\tsetter.current ??= (next) => {\n\t\tsetIntoStore(store, token, next)\n\t}\n\treturn setter.current\n}\n","import type { ReadableFamilyToken, ReadableToken, ViewOf } from \"atom.io\"\nimport { getFromStore, subscribeToState } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { useCallback, useContext, useId, useSyncExternalStore } from \"react\"\n\nimport { parseStateOverloads } from \"./parse-state-overloads\"\nimport { StoreContext } from \"./store-context\"\n\nexport function useO<T, E = never>(\n\ttoken: ReadableToken<T, any, E>,\n): ViewOf<E | T>\n\nexport function useO<T, K extends Canonical, E = never>(\n\ttoken: ReadableFamilyToken<T, K, E>,\n\tkey: NoInfer<K>,\n): ViewOf<E | T>\n\nexport function useO<T, K extends Canonical, E = never>(\n\t...params:\n\t\t| [ReadableFamilyToken<T, K, E>, NoInfer<K>]\n\t\t| [ReadableToken<T, any, E>]\n): ViewOf<E | T> {\n\tconst store = useContext(StoreContext)\n\tconst token = parseStateOverloads(store, ...params)\n\tconst id = useId()\n\tconst sub = useCallback(\n\t\t(dispatch: () => void) =>\n\t\t\tsubscribeToState<T, E>(store, token, `use-o:${id}`, dispatch),\n\t\t[token.key],\n\t)\n\tconst get = useCallback(() => getFromStore(store, token), [token.key])\n\treturn useSyncExternalStore<ViewOf<E | T>>(sub, get, get)\n}\n","import type { MutableAtomFamilyToken, MutableAtomToken } from \"atom.io\"\nimport type { AsJSON, Transceiver } from \"atom.io/internal\"\nimport { findInStore, getJsonToken } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { useContext } from \"react\"\n\nimport { StoreContext } from \"./store-context\"\nimport { useO } from \"./use-o\"\n\nexport function useJSON<T extends Transceiver<any, any, any>>(\n\ttoken: MutableAtomToken<T>,\n): AsJSON<T>\n\nexport function useJSON<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(token: MutableAtomFamilyToken<T, K>, key: K): AsJSON<T>\n\nexport function useJSON(\n\ttoken: MutableAtomFamilyToken<any, any> | MutableAtomToken<any>,\n\tkey?: Canonical,\n): Json.Serializable {\n\tconst store = useContext(StoreContext)\n\tconst stateToken: MutableAtomToken<any> =\n\t\ttoken.type === `mutable_atom_family` ? findInStore(store, token, key) : token\n\tconst jsonToken = getJsonToken(store, stateToken)\n\treturn useO(jsonToken)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: params are used in an invariant way */\nimport type {\n\tLoadable,\n\tReadableFamilyToken,\n\tReadableToken,\n\tViewOf,\n} from \"atom.io\"\nimport { findInStore, type ReadableState, withdraw } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport { useContext, useRef } from \"react\"\n\nexport function useLoadable<T, E>(\n\ttoken: ReadableToken<Loadable<T>, any, E>,\n): `LOADING` | { loading: boolean; value: ViewOf<E | T> }\n\nexport function useLoadable<T, K extends Canonical, E>(\n\ttoken: ReadableFamilyToken<Loadable<T>, K, E>,\n\tkey: NoInfer<K>,\n): `LOADING` | { loading: boolean; value: ViewOf<E | T> }\n\nexport function useLoadable<T, F extends T, E>(\n\ttoken: ReadableToken<Loadable<T>, any, E>,\n\tfallback: F,\n): { loading: boolean; value: ViewOf<T>; error?: E }\n\nexport function useLoadable<T, K extends Canonical, F extends T, E>(\n\ttoken: ReadableFamilyToken<Loadable<T>, K, E>,\n\tkey: NoInfer<K>,\n\tfallback: F,\n): { loading: boolean; value: ViewOf<T>; error?: E }\n\nexport function useLoadable(\n\t...params:\n\t\t| readonly [ReadableFamilyToken<any, Canonical, any>, Canonical, unknown]\n\t\t| readonly [ReadableFamilyToken<any, Canonical, any>, Canonical]\n\t\t| readonly [ReadableToken<any, any, any>, unknown]\n\t\t| readonly [ReadableToken<any, any, any>]\n): `LOADING` | { loading: boolean; value: unknown; error?: unknown } {\n\tconst store = useContext(StoreContext)\n\n\tlet value: unknown\n\tlet state: ReadableState<any, any>\n\tlet fallback: unknown\n\n\tconst [token] = params\n\tlet key: Canonical\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\tcase `readonly_held_selector`:\n\t\tcase `readonly_pure_selector`:\n\t\tcase `writable_held_selector`:\n\t\tcase `writable_pure_selector`:\n\t\t\tvalue = useO(token)\n\t\t\tstate = withdraw(store, token)\n\t\t\tfallback = params[1]\n\t\t\tbreak\n\t\tcase `atom_family`:\n\t\tcase `mutable_atom_family`:\n\t\tcase `readonly_held_selector_family`:\n\t\tcase `readonly_pure_selector_family`:\n\t\tcase `writable_held_selector_family`:\n\t\tcase `writable_pure_selector_family`:\n\t\t\tkey = params[1] as Canonical\n\t\t\tvalue = useO(token, key)\n\t\t\tstate = withdraw(store, findInStore(store, token, key))\n\t\t\tfallback = params[2]\n\t}\n\n\tconst hasFallback = fallback !== undefined\n\tconst isErr = `catch` in state && state.catch.some((E) => value instanceof E)\n\n\tconst wrapperRef = useRef<{\n\t\tloading: boolean\n\t\tvalue: unknown\n\t\terror?: unknown\n\t}>({ loading: false, value: null as unknown })\n\tconst lastLoadedRef = useRef(\n\t\tfallback ?? (value instanceof Promise ? `LOADING` : value),\n\t)\n\n\tconst { current: lastLoaded } = lastLoadedRef\n\tlet { current: wrapper } = wrapperRef\n\n\tconst wasErr =\n\t\t`catch` in state && state.catch.some((E) => lastLoaded instanceof E)\n\n\tif (value instanceof Promise) {\n\t\tif (lastLoaded === `LOADING`) {\n\t\t\treturn `LOADING`\n\t\t}\n\t\tif (wasErr && hasFallback) {\n\t\t\twrapper = wrapperRef.current = {\n\t\t\t\tloading: true,\n\t\t\t\tvalue: fallback,\n\t\t\t\terror: lastLoaded,\n\t\t\t}\n\t\t} else {\n\t\t\twrapper = wrapperRef.current = { loading: true, value: lastLoaded }\n\t\t}\n\t} else {\n\t\tlastLoadedRef.current = value\n\t\tif (wrapper.loading === true) {\n\t\t\tif (isErr && hasFallback) {\n\t\t\t\twrapper = wrapperRef.current = {\n\t\t\t\t\tloading: false,\n\t\t\t\t\tvalue: fallback,\n\t\t\t\t\terror: value,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twrapper = wrapperRef.current = { loading: false, value: value }\n\t\t\t}\n\t\t} else {\n\t\t\tif (isErr && hasFallback) {\n\t\t\t\twrapper.loading = false\n\t\t\t\twrapper.value = fallback\n\t\t\t\twrapper.error = value\n\t\t\t} else {\n\t\t\t\twrapper.loading = false\n\t\t\t\twrapper.value = value\n\t\t\t\tdelete wrapper.error\n\t\t\t}\n\t\t}\n\t}\n\n\treturn wrapper\n}\n","import type { TimelineToken } from \"atom.io\"\nimport { redo, undo } from \"atom.io\"\nimport { subscribeToTimeline, withdraw } from \"atom.io/internal\"\nimport { useContext, useId, useRef, useSyncExternalStore } from \"react\"\n\nimport { StoreContext } from \"./store-context\"\n\nexport type TimelineMeta = {\n\tat: number\n\tlength: number\n\tundo: () => void\n\tredo: () => void\n}\n\nexport function useTL(token: TimelineToken<any>): TimelineMeta {\n\tconst store = useContext(StoreContext)\n\tconst id = useId()\n\tconst timeline = withdraw(store, token)\n\tconst tokenRef = useRef(token)\n\tconst rebuildMeta = () => {\n\t\treturn {\n\t\t\tat: timeline.at,\n\t\t\tlength: timeline.history.length,\n\t\t\tundo: () => {\n\t\t\t\tundo(token)\n\t\t\t},\n\t\t\tredo: () => {\n\t\t\t\tredo(token)\n\t\t\t},\n\t\t}\n\t}\n\tconst meta = useRef<TimelineMeta>(rebuildMeta())\n\tconst retrieve = () => {\n\t\tif (\n\t\t\tmeta.current.at !== timeline?.at ||\n\t\t\tmeta.current.length !== timeline?.history.length ||\n\t\t\ttokenRef.current !== token\n\t\t) {\n\t\t\ttokenRef.current = token\n\t\t\tmeta.current = rebuildMeta()\n\t\t}\n\t\treturn meta.current\n\t}\n\treturn useSyncExternalStore<TimelineMeta>(\n\t\t(dispatch) => subscribeToTimeline(store, token, `use-tl:${id}`, dispatch),\n\t\tretrieve,\n\t\tretrieve,\n\t)\n}\n"],"mappings":"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"}