atom.io 0.16.2 → 0.16.3

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 (90) hide show
  1. package/dist/chunk-H4Q5FTPZ.js +11 -0
  2. package/dist/chunk-H4Q5FTPZ.js.map +1 -0
  3. package/dist/index.cjs +1 -11
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.ts +6 -6
  6. package/dist/index.js +2 -11
  7. package/dist/index.js.map +1 -1
  8. package/internal/dist/index.cjs +225 -183
  9. package/internal/dist/index.cjs.map +1 -1
  10. package/internal/dist/index.d.ts +30 -9
  11. package/internal/dist/index.js +218 -184
  12. package/internal/dist/index.js.map +1 -1
  13. package/internal/src/families/find-in-store.ts +74 -0
  14. package/internal/src/families/index.ts +1 -0
  15. package/internal/src/ingest-updates/ingest-transaction-update.ts +1 -0
  16. package/internal/src/mutable/tracker.ts +28 -25
  17. package/internal/src/mutable/transceiver.ts +1 -1
  18. package/internal/src/not-found-error.ts +14 -3
  19. package/internal/src/operation.ts +2 -1
  20. package/internal/src/selector/create-writable-selector.ts +2 -1
  21. package/internal/src/selector/register-selector.ts +5 -4
  22. package/internal/src/set-state/set-atom.ts +16 -2
  23. package/internal/src/set-state/stow-update.ts +2 -4
  24. package/internal/src/store/store.ts +13 -4
  25. package/internal/src/timeline/add-atom-to-timeline.ts +5 -5
  26. package/internal/src/transaction/abort-transaction.ts +2 -1
  27. package/internal/src/transaction/apply-transaction.ts +5 -3
  28. package/internal/src/transaction/build-transaction.ts +16 -9
  29. package/internal/src/transaction/create-transaction.ts +2 -3
  30. package/internal/src/transaction/index.ts +3 -2
  31. package/internal/src/transaction/is-root-store.ts +23 -0
  32. package/package.json +10 -10
  33. package/react/dist/index.cjs +27 -21
  34. package/react/dist/index.cjs.map +1 -1
  35. package/react/dist/index.d.ts +8 -2
  36. package/react/dist/index.js +27 -21
  37. package/react/dist/index.js.map +1 -1
  38. package/react/src/index.ts +4 -1
  39. package/react/src/use-i.ts +36 -0
  40. package/react/src/use-json.ts +38 -0
  41. package/react/src/use-o.ts +34 -0
  42. package/react/src/use-tl.ts +45 -0
  43. package/realtime-client/dist/index.cjs +163 -63
  44. package/realtime-client/dist/index.cjs.map +1 -1
  45. package/realtime-client/dist/index.d.ts +10 -6
  46. package/realtime-client/dist/index.js +153 -61
  47. package/realtime-client/dist/index.js.map +1 -1
  48. package/realtime-client/src/index.ts +2 -1
  49. package/realtime-client/src/pull-state.ts +4 -3
  50. package/realtime-client/src/{realtime-client-store.ts → realtime-client-stores/client-main-store.ts} +0 -8
  51. package/realtime-client/src/realtime-client-stores/client-sync-store.ts +15 -0
  52. package/realtime-client/src/realtime-client-stores/index.ts +2 -0
  53. package/realtime-client/src/sync-server-action.ts +131 -40
  54. package/realtime-client/src/sync-state.ts +19 -0
  55. package/realtime-react/dist/index.cjs +43 -26
  56. package/realtime-react/dist/index.cjs.map +1 -1
  57. package/realtime-react/dist/index.d.ts +3 -1
  58. package/realtime-react/dist/index.js +41 -25
  59. package/realtime-react/dist/index.js.map +1 -1
  60. package/realtime-react/src/index.ts +1 -0
  61. package/realtime-react/src/on-mount.ts +3 -21
  62. package/realtime-react/src/use-realtime-service.ts +1 -1
  63. package/realtime-react/src/use-single-effect.ts +29 -0
  64. package/realtime-react/src/use-sync-server-action.ts +4 -7
  65. package/realtime-react/src/use-sync.ts +17 -0
  66. package/realtime-server/dist/index.cjs +223 -40
  67. package/realtime-server/dist/index.cjs.map +1 -1
  68. package/realtime-server/dist/index.d.ts +140 -9
  69. package/realtime-server/dist/index.js +213 -43
  70. package/realtime-server/dist/index.js.map +1 -1
  71. package/realtime-server/src/index.ts +2 -0
  72. package/realtime-server/src/realtime-action-synchronizer.ts +87 -12
  73. package/realtime-server/src/realtime-family-provider.ts +2 -2
  74. package/realtime-server/src/realtime-mutable-family-provider.ts +2 -1
  75. package/realtime-server/src/realtime-server-stores/index.ts +2 -0
  76. package/realtime-server/src/realtime-server-stores/server-sync-store.ts +115 -0
  77. package/realtime-server/src/realtime-server-stores/server-user-store.ts +45 -0
  78. package/realtime-server/src/realtime-state-provider.ts +15 -8
  79. package/realtime-server/src/realtime-state-synchronizer.ts +23 -0
  80. package/realtime-testing/dist/index.cjs +65 -26
  81. package/realtime-testing/dist/index.cjs.map +1 -1
  82. package/realtime-testing/dist/index.d.ts +11 -7
  83. package/realtime-testing/dist/index.js +64 -26
  84. package/realtime-testing/dist/index.js.map +1 -1
  85. package/realtime-testing/src/setup-realtime-test.tsx +83 -43
  86. package/src/find-state.ts +8 -16
  87. package/src/logger.ts +1 -0
  88. package/src/transaction.ts +3 -3
  89. package/react/src/store-hooks.ts +0 -87
  90. package/realtime-server/src/realtime-server-store.ts +0 -39
@@ -1,87 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { getState, redo, setState, undo } from "atom.io"
4
- import type {
5
- MutableAtomToken,
6
- ReadableToken,
7
- TimelineToken,
8
- WritableToken,
9
- } from "atom.io"
10
-
11
- import {
12
- getJsonToken,
13
- subscribeToState,
14
- subscribeToTimeline,
15
- withdraw,
16
- } from "atom.io/internal"
17
- import type { Json } from "atom.io/json"
18
- import { StoreContext } from "./store-context"
19
-
20
- export function useI<T>(
21
- token: WritableToken<T>,
22
- ): <New extends T>(next: New | ((old: T) => New)) => void {
23
- const store = React.useContext(StoreContext)
24
- const setter: React.MutableRefObject<
25
- (<New extends T>(next: New | ((old: T) => New)) => void) | null
26
- > = React.useRef(null)
27
- if (setter.current === null) {
28
- setter.current = (next) => setState(token, next, store)
29
- }
30
- return setter.current
31
- }
32
-
33
- export function useO<T>(token: ReadableToken<T>): T {
34
- const store = React.useContext(StoreContext)
35
- const id = React.useId()
36
- return React.useSyncExternalStore<T>(
37
- (dispatch) => subscribeToState(token, dispatch, `use-o:${id}`, store),
38
- () => getState(token, store),
39
- () => getState(token, store),
40
- )
41
- }
42
-
43
- export function useJSON<Serializable extends Json.Serializable>(
44
- token: MutableAtomToken<any, Serializable>,
45
- ): Serializable {
46
- const jsonToken = getJsonToken(token)
47
- return useO(jsonToken)
48
- }
49
-
50
- export type TimelineMeta = {
51
- at: number
52
- length: number
53
- undo: () => void
54
- redo: () => void
55
- }
56
-
57
- export function useTL(token: TimelineToken<any>): TimelineMeta {
58
- const store = React.useContext(StoreContext)
59
- const id = React.useId()
60
- const timeline = withdraw(token, store)
61
- const tokenRef = React.useRef(token)
62
- const rebuildMeta = () => {
63
- return {
64
- at: timeline?.at ?? NaN,
65
- length: timeline?.history.length ?? NaN,
66
- undo: () => undo(token),
67
- redo: () => redo(token),
68
- }
69
- }
70
- const meta = React.useRef<TimelineMeta>(rebuildMeta())
71
- const retrieve = () => {
72
- if (
73
- meta.current.at !== timeline?.at ||
74
- meta.current.length !== timeline?.history.length ||
75
- tokenRef.current !== token
76
- ) {
77
- tokenRef.current = token
78
- meta.current = rebuildMeta()
79
- }
80
- return meta.current
81
- }
82
- return React.useSyncExternalStore<TimelineMeta>(
83
- (dispatch) => subscribeToTimeline(token, dispatch, `use-tl:${id}`, store),
84
- retrieve,
85
- retrieve,
86
- )
87
- }
@@ -1,39 +0,0 @@
1
- import * as AtomIO from "atom.io"
2
-
3
- export const completeUpdateAtoms = AtomIO.atomFamily<
4
- AtomIO.TransactionUpdate<any> | null,
5
- string
6
- >({
7
- key: `completeUpdate`,
8
- default: null,
9
- })
10
-
11
- export const transactionRedactorAtoms = AtomIO.atomFamily<
12
- {
13
- filter: (
14
- updates: AtomIO.TransactionUpdateContent[],
15
- ) => AtomIO.TransactionUpdateContent[]
16
- },
17
- string
18
- >({
19
- key: `transactionRedactor`,
20
- default: { filter: (updates) => updates },
21
- })
22
-
23
- export const redactedUpdateSelectors = AtomIO.selectorFamily<
24
- AtomIO.TransactionUpdate<any> | null,
25
- [transactionKey: string, updateId: string]
26
- >({
27
- key: `redactedUpdate`,
28
- get:
29
- ([transactionKey, updateId]) =>
30
- ({ get, find }) => {
31
- const update = get(find(completeUpdateAtoms, updateId))
32
- const { filter } = get(find(transactionRedactorAtoms, transactionKey))
33
-
34
- if (update && filter) {
35
- return { ...update, updates: filter(update.updates) }
36
- }
37
- return null
38
- },
39
- })