atom.io 0.17.0 → 0.18.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 (153) hide show
  1. package/data/dist/index.cjs +62 -40
  2. package/data/dist/index.cjs.map +1 -1
  3. package/data/dist/index.d.ts +8 -2
  4. package/data/dist/index.js +64 -42
  5. package/data/dist/index.js.map +1 -1
  6. package/data/src/dict.ts +8 -4
  7. package/data/src/join.ts +74 -33
  8. package/data/src/struct-family.ts +18 -17
  9. package/dist/chunk-IZHOMSXA.js +331 -0
  10. package/dist/chunk-IZHOMSXA.js.map +1 -0
  11. package/dist/chunk-JDUNWJFB.js +18 -0
  12. package/dist/chunk-JDUNWJFB.js.map +1 -0
  13. package/dist/index.cjs +4 -10
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.ts +66 -51
  16. package/dist/index.js +5 -11
  17. package/dist/index.js.map +1 -1
  18. package/internal/dist/index.cjs +187 -58
  19. package/internal/dist/index.cjs.map +1 -1
  20. package/internal/dist/index.d.ts +95 -71
  21. package/internal/dist/index.js +179 -53
  22. package/internal/dist/index.js.map +1 -1
  23. package/internal/src/arbitrary.ts +3 -0
  24. package/internal/src/atom/delete-atom.ts +7 -6
  25. package/internal/src/caching.ts +6 -4
  26. package/internal/src/families/find-in-store.ts +16 -0
  27. package/internal/src/get-environment-data.ts +4 -7
  28. package/internal/src/index.ts +6 -5
  29. package/internal/src/ingest-updates/ingest-atom-update.ts +6 -2
  30. package/internal/src/ingest-updates/ingest-transaction-update.ts +0 -1
  31. package/internal/src/selector/create-standalone-selector.ts +0 -2
  32. package/internal/src/set-state/copy-mutable-if-needed.ts +5 -0
  33. package/internal/src/set-state/emit-update.ts +25 -11
  34. package/internal/src/set-state/set-atom.ts +15 -18
  35. package/internal/src/store/store.ts +14 -2
  36. package/internal/src/store/withdraw.ts +72 -2
  37. package/internal/src/subscribe/subscribe-to-timeline.ts +2 -2
  38. package/internal/src/subscribe/subscribe-to-transaction.ts +2 -2
  39. package/internal/src/timeline/create-timeline.ts +12 -1
  40. package/internal/src/transaction/act-upon-store.ts +19 -0
  41. package/internal/src/transaction/apply-transaction.ts +6 -1
  42. package/internal/src/transaction/assign-transaction-to-continuity.ts +18 -0
  43. package/internal/src/transaction/build-transaction.ts +7 -6
  44. package/internal/src/transaction/create-transaction.ts +1 -1
  45. package/internal/src/transaction/get-epoch-number.ts +40 -0
  46. package/internal/src/transaction/index.ts +10 -1
  47. package/internal/src/transaction/set-epoch-number.ts +30 -0
  48. package/introspection/dist/index.cjs.map +1 -1
  49. package/introspection/dist/index.d.ts +3 -3
  50. package/introspection/dist/index.js.map +1 -1
  51. package/introspection/src/attach-introspection-states.ts +6 -2
  52. package/introspection/src/attach-timeline-family.ts +5 -2
  53. package/introspection/src/attach-transaction-logs.ts +2 -2
  54. package/json/dist/index.d.ts +3 -1
  55. package/json/src/index.ts +4 -0
  56. package/package.json +241 -230
  57. package/react/dist/index.cjs.map +1 -1
  58. package/react/dist/index.d.ts +1 -1
  59. package/react/dist/index.js.map +1 -1
  60. package/react/src/use-json.ts +1 -1
  61. package/react-devtools/dist/index.cjs +131 -134
  62. package/react-devtools/dist/index.cjs.map +1 -1
  63. package/react-devtools/dist/index.css +2 -2
  64. package/react-devtools/dist/index.css.map +1 -1
  65. package/react-devtools/dist/index.d.ts +3 -3
  66. package/react-devtools/dist/index.js +91 -108
  67. package/react-devtools/dist/index.js.map +1 -1
  68. package/react-devtools/src/StateEditor.tsx +4 -4
  69. package/react-devtools/src/StateIndex.tsx +1 -4
  70. package/react-devtools/src/TimelineIndex.tsx +3 -3
  71. package/react-devtools/src/TransactionIndex.tsx +9 -8
  72. package/react-devtools/src/index.ts +2 -2
  73. package/realtime/dist/index.cjs +120 -0
  74. package/realtime/dist/index.cjs.map +1 -0
  75. package/realtime/dist/index.d.ts +146 -0
  76. package/realtime/dist/index.js +111 -0
  77. package/realtime/dist/index.js.map +1 -0
  78. package/realtime/package.json +16 -0
  79. package/realtime/src/index.ts +2 -0
  80. package/realtime/src/realtime-continuity.ts +162 -0
  81. package/realtime/src/shared-room-store.ts +48 -0
  82. package/realtime-client/dist/index.cjs +424 -170
  83. package/realtime-client/dist/index.cjs.map +1 -1
  84. package/realtime-client/dist/index.d.ts +15 -11
  85. package/realtime-client/dist/index.js +96 -177
  86. package/realtime-client/dist/index.js.map +1 -1
  87. package/realtime-client/src/index.ts +8 -7
  88. package/realtime-client/src/{pull-family-member.ts → pull-atom-family-member.ts} +2 -2
  89. package/realtime-client/src/{pull-state.ts → pull-atom.ts} +2 -2
  90. package/realtime-client/src/{pull-mutable-family-member.ts → pull-mutable-atom-family-member.ts} +6 -6
  91. package/realtime-client/src/{pull-mutable.ts → pull-mutable-atom.ts} +1 -1
  92. package/realtime-client/src/pull-selector-family-member.ts +42 -0
  93. package/realtime-client/src/pull-selector.ts +38 -0
  94. package/realtime-client/src/realtime-client-stores/client-main-store.ts +12 -2
  95. package/realtime-client/src/realtime-client-stores/client-sync-store.ts +7 -7
  96. package/realtime-client/src/sync-continuity.ts +368 -0
  97. package/realtime-react/dist/index.cjs +367 -27
  98. package/realtime-react/dist/index.cjs.map +1 -1
  99. package/realtime-react/dist/index.d.ts +24 -8
  100. package/realtime-react/dist/index.js +38 -22
  101. package/realtime-react/dist/index.js.map +1 -1
  102. package/realtime-react/src/index.ts +6 -5
  103. package/realtime-react/src/use-pull-atom-family-member.ts +21 -0
  104. package/realtime-react/src/{use-sync.ts → use-pull-atom.ts} +4 -4
  105. package/realtime-react/src/{use-pull-mutable.ts → use-pull-mutable-atom.ts} +4 -3
  106. package/realtime-react/src/use-pull-mutable-family-member.ts +9 -4
  107. package/realtime-react/src/use-pull-selector-family-member.ts +21 -0
  108. package/realtime-react/src/{use-pull.ts → use-pull-selector.ts} +7 -5
  109. package/realtime-react/src/use-push.ts +3 -2
  110. package/realtime-react/src/use-server-action.ts +3 -2
  111. package/realtime-react/src/use-sync-continuity.ts +12 -0
  112. package/realtime-server/dist/index.cjs +769 -371
  113. package/realtime-server/dist/index.cjs.map +1 -1
  114. package/realtime-server/dist/index.d.ts +130 -60
  115. package/realtime-server/dist/index.js +753 -361
  116. package/realtime-server/dist/index.js.map +1 -1
  117. package/realtime-server/src/index.ts +17 -3
  118. package/realtime-server/src/ipc-sockets/child-socket.ts +135 -0
  119. package/realtime-server/src/ipc-sockets/custom-socket.ts +90 -0
  120. package/realtime-server/src/ipc-sockets/index.ts +3 -0
  121. package/realtime-server/src/ipc-sockets/parent-socket.ts +185 -0
  122. package/realtime-server/src/realtime-action-receiver.ts +8 -5
  123. package/realtime-server/src/realtime-continuity-synchronizer.ts +376 -0
  124. package/realtime-server/src/realtime-family-provider.ts +30 -71
  125. package/realtime-server/src/realtime-mutable-family-provider.ts +24 -86
  126. package/realtime-server/src/realtime-server-stores/index.ts +4 -1
  127. package/realtime-server/src/realtime-server-stores/realtime-continuity-store.ts +109 -0
  128. package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +64 -0
  129. package/realtime-server/src/realtime-server-stores/server-room-external-store.ts +42 -0
  130. package/realtime-server/src/realtime-server-stores/server-sync-store.ts +51 -98
  131. package/realtime-server/src/realtime-server-stores/server-user-store.ts +14 -29
  132. package/realtime-server/src/realtime-state-receiver.ts +0 -1
  133. package/realtime-testing/dist/index.cjs +34 -32
  134. package/realtime-testing/dist/index.cjs.map +1 -1
  135. package/realtime-testing/dist/index.d.ts +1 -0
  136. package/realtime-testing/dist/index.js +33 -31
  137. package/realtime-testing/dist/index.js.map +1 -1
  138. package/realtime-testing/src/setup-realtime-test.tsx +44 -32
  139. package/src/atom.ts +49 -31
  140. package/src/logger.ts +14 -5
  141. package/src/selector.ts +44 -25
  142. package/src/subscribe.ts +2 -1
  143. package/src/timeline.ts +4 -4
  144. package/src/transaction.ts +13 -17
  145. package/src/validators.ts +15 -9
  146. package/dist/chunk-H4Q5FTPZ.js +0 -11
  147. package/dist/chunk-H4Q5FTPZ.js.map +0 -1
  148. package/internal/src/set-state/copy-mutable-in-transaction.ts +0 -19
  149. package/realtime-client/src/sync-server-action.ts +0 -170
  150. package/realtime-client/src/sync-state.ts +0 -19
  151. package/realtime-react/src/use-pull-family-member.ts +0 -16
  152. package/realtime-react/src/use-sync-server-action.ts +0 -16
  153. package/realtime-server/src/realtime-action-synchronizer.ts +0 -152
@@ -1,152 +0,0 @@
1
- import * as AtomIO from "atom.io"
2
- import {
3
- IMPLICIT,
4
- findInStore,
5
- getFromStore,
6
- setIntoStore,
7
- subscribeToTransaction,
8
- } from "atom.io/internal"
9
-
10
- import type { ServerConfig } from "."
11
- import { usersOfSockets } from "./realtime-server-stores"
12
- import {
13
- completeUpdateAtoms,
14
- redactedUpdateSelectors,
15
- socketEpochSelectors,
16
- socketUnacknowledgedUpdatesSelectors,
17
- transactionRedactorAtoms,
18
- } from "./realtime-server-stores/server-sync-store"
19
-
20
- export type ActionSynchronizer = ReturnType<typeof realtimeActionSynchronizer>
21
- export function realtimeActionSynchronizer({
22
- socket,
23
- store = IMPLICIT.STORE,
24
- }: ServerConfig) {
25
- return function actionSynchronizer<ƒ extends AtomIO.ƒn>(
26
- tx: AtomIO.TransactionToken<ƒ>,
27
- filter?: (
28
- update: AtomIO.TransactionUpdateContent[],
29
- ) => AtomIO.TransactionUpdateContent[],
30
- ): () => void {
31
- const userKeyState = findInStore(
32
- usersOfSockets.states.userKeyOfSocket,
33
- socket.id,
34
- store,
35
- )
36
- const userKey = getFromStore(userKeyState, store)
37
- const socketUnacknowledgedUpdatesState = findInStore(
38
- socketUnacknowledgedUpdatesSelectors,
39
- socket.id,
40
- store,
41
- )
42
- const socketUnacknowledgedUpdates = getFromStore(
43
- socketUnacknowledgedUpdatesState,
44
- store,
45
- )
46
- if (filter) {
47
- const redactorState = findInStore(transactionRedactorAtoms, tx.key, store)
48
- setIntoStore(redactorState, { filter }, store)
49
- }
50
- const fillTransactionRequest = (update: AtomIO.TransactionUpdate<ƒ>) => {
51
- const performanceKey = `tx-run:${tx.key}:${update.id}`
52
- const performanceKeyStart = `${performanceKey}:start`
53
- const performanceKeyEnd = `${performanceKey}:end`
54
- performance.mark(performanceKeyStart)
55
- AtomIO.runTransaction<ƒ>(tx, update.id, store)(...update.params)
56
- performance.mark(performanceKeyEnd)
57
- const metric = performance.measure(
58
- performanceKey,
59
- performanceKeyStart,
60
- performanceKeyEnd,
61
- )
62
- store?.logger.info(`🚀`, `transaction`, tx.key, update.id, metric.duration)
63
- }
64
- socket.off(`tx-run:${tx.key}`, fillTransactionRequest)
65
- socket.on(`tx-run:${tx.key}`, fillTransactionRequest)
66
-
67
- let unsubscribeFromTransaction: (() => void) | undefined
68
- const fillTransactionSubscriptionRequest = () => {
69
- unsubscribeFromTransaction = subscribeToTransaction(
70
- tx,
71
- (update) => {
72
- const updateState = findInStore(completeUpdateAtoms, update.id, store)
73
- setIntoStore(updateState, update, store)
74
- const toEmit = filter
75
- ? getFromStore(
76
- findInStore(redactedUpdateSelectors, [tx.key, update.id], store),
77
- store,
78
- )
79
- : update
80
-
81
- // the problem is that only while a socket is connected can
82
- // updates be set in the queue for that socket's client.
83
- //
84
- // we need a client session that can persist between disconnects
85
- setIntoStore(
86
- socketUnacknowledgedUpdatesState,
87
- (updates) => {
88
- if (toEmit) {
89
- updates.push(toEmit)
90
- updates.sort((a, b) => a.epoch - b.epoch)
91
- }
92
- return updates
93
- },
94
- store,
95
- )
96
-
97
- socket.emit(`tx-new:${tx.key}`, toEmit)
98
- },
99
- `tx-sub:${tx.key}:${socket.id}`,
100
- store,
101
- )
102
- socket.on(`tx-unsub:${tx.key}`, unsubscribeFromTransaction)
103
- }
104
- socket.on(`tx-sub:${tx.key}`, fillTransactionSubscriptionRequest)
105
-
106
- let i = 1
107
- let next = 1
108
- const retry = setInterval(() => {
109
- const toEmit = socketUnacknowledgedUpdates[0]
110
- console.log(userKey, socketUnacknowledgedUpdates)
111
- if (toEmit && i === next) {
112
- socket.emit(`tx-new:${tx.key}`, toEmit)
113
- next *= 2
114
- }
115
-
116
- i++
117
- }, 250)
118
-
119
- const trackClientAcknowledgement = (epoch: number) => {
120
- i = 1
121
- next = 1
122
- const socketEpochState = findInStore(
123
- socketEpochSelectors,
124
- socket.id,
125
- store,
126
- )
127
-
128
- setIntoStore(socketEpochState, epoch, store)
129
- if (socketUnacknowledgedUpdates[0]?.epoch === epoch) {
130
- setIntoStore(
131
- socketUnacknowledgedUpdatesState,
132
- (updates) => {
133
- updates.shift()
134
- return updates
135
- },
136
- store,
137
- )
138
- }
139
- }
140
- socket.on(`tx-ack:${tx.key}`, trackClientAcknowledgement)
141
-
142
- return () => {
143
- if (unsubscribeFromTransaction) {
144
- unsubscribeFromTransaction()
145
- unsubscribeFromTransaction = undefined
146
- }
147
- clearInterval(retry)
148
- socket.off(`tx-run:${tx.key}`, fillTransactionRequest)
149
- socket.off(`tx-sub:${tx.key}`, fillTransactionSubscriptionRequest)
150
- }
151
- }
152
- }