@stream-io/feeds-client 0.2.7 → 0.2.8

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 (342) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/index.js +408 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/react-bindings.js +1368 -0
  5. package/dist/cjs/react-bindings.js.map +1 -0
  6. package/dist/es/index.mjs +398 -0
  7. package/dist/es/index.mjs.map +1 -0
  8. package/dist/es/react-bindings.mjs +1368 -0
  9. package/dist/es/react-bindings.mjs.map +1 -0
  10. package/dist/index-Cfbt0DFY.js +6492 -0
  11. package/dist/index-Cfbt0DFY.js.map +1 -0
  12. package/dist/index-DLC5hiNd.mjs +6476 -0
  13. package/dist/index-DLC5hiNd.mjs.map +1 -0
  14. package/dist/tsconfig.tsbuildinfo +1 -1
  15. package/dist/types/bindings/index.d.ts +2 -0
  16. package/dist/types/bindings/index.d.ts.map +1 -0
  17. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamFeedContext.d.ts +2 -1
  18. package/dist/types/bindings/react/contexts/StreamFeedContext.d.ts.map +1 -0
  19. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamFeedsContext.d.ts +2 -1
  20. package/dist/types/bindings/react/contexts/StreamFeedsContext.d.ts.map +1 -0
  21. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamSearchContext.d.ts +2 -1
  22. package/dist/types/bindings/react/contexts/StreamSearchContext.d.ts.map +1 -0
  23. package/dist/{@react-bindings → types/bindings/react}/contexts/StreamSearchResultsContext.d.ts +2 -1
  24. package/dist/types/bindings/react/contexts/StreamSearchResultsContext.d.ts.map +1 -0
  25. package/dist/{@react-bindings → types/bindings/react}/hooks/client-state-hooks/index.d.ts +1 -0
  26. package/dist/types/bindings/react/hooks/client-state-hooks/index.d.ts.map +1 -0
  27. package/dist/types/bindings/react/hooks/client-state-hooks/useClientConnectedUser.d.ts +5 -0
  28. package/dist/types/bindings/react/hooks/client-state-hooks/useClientConnectedUser.d.ts.map +1 -0
  29. package/dist/{@react-bindings → types/bindings/react}/hooks/client-state-hooks/useWsConnectionState.d.ts +1 -0
  30. package/dist/types/bindings/react/hooks/client-state-hooks/useWsConnectionState.d.ts.map +1 -0
  31. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/index.d.ts +1 -0
  32. package/dist/types/bindings/react/hooks/feed-state-hooks/index.d.ts.map +1 -0
  33. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useAggregatedActivities.d.ts +3 -2
  34. package/dist/types/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.d.ts.map +1 -0
  35. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useComments.d.ts +2 -3
  36. package/dist/types/bindings/react/hooks/feed-state-hooks/useComments.d.ts.map +1 -0
  37. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFeedActivities.d.ts +3 -2
  38. package/dist/types/bindings/react/hooks/feed-state-hooks/useFeedActivities.d.ts.map +1 -0
  39. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFeedMetadata.d.ts +3 -2
  40. package/dist/types/bindings/react/hooks/feed-state-hooks/useFeedMetadata.d.ts.map +1 -0
  41. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFollowers.d.ts +5 -4
  42. package/dist/types/bindings/react/hooks/feed-state-hooks/useFollowers.d.ts.map +1 -0
  43. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useFollowing.d.ts +5 -4
  44. package/dist/types/bindings/react/hooks/feed-state-hooks/useFollowing.d.ts.map +1 -0
  45. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts +2 -2
  46. package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts.map +1 -0
  47. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useIsAggregatedActivitySeen.d.ts +2 -2
  48. package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.d.ts.map +1 -0
  49. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useNotificationStatus.d.ts +2 -1
  50. package/dist/types/bindings/react/hooks/feed-state-hooks/useNotificationStatus.d.ts.map +1 -0
  51. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useOwnCapabilities.d.ts +2 -1
  52. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.d.ts.map +1 -0
  53. package/dist/{@react-bindings → types/bindings/react}/hooks/feed-state-hooks/useOwnFollows.d.ts +3 -2
  54. package/dist/types/bindings/react/hooks/feed-state-hooks/useOwnFollows.d.ts.map +1 -0
  55. package/dist/{@react-bindings → types/bindings/react}/hooks/internal/index.d.ts +1 -0
  56. package/dist/types/bindings/react/hooks/internal/index.d.ts.map +1 -0
  57. package/dist/{@react-bindings → types/bindings/react}/hooks/internal/useStableCallback.d.ts +1 -0
  58. package/dist/types/bindings/react/hooks/internal/useStableCallback.d.ts.map +1 -0
  59. package/dist/{@react-bindings → types/bindings/react}/hooks/search-state-hooks/index.d.ts +1 -0
  60. package/dist/types/bindings/react/hooks/search-state-hooks/index.d.ts.map +1 -0
  61. package/dist/{@react-bindings → types/bindings/react}/hooks/search-state-hooks/useSearchQuery.d.ts +2 -1
  62. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchQuery.d.ts.map +1 -0
  63. package/dist/{@react-bindings → types/bindings/react}/hooks/search-state-hooks/useSearchResult.d.ts +2 -1
  64. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchResult.d.ts.map +1 -0
  65. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchSources.d.ts +5 -0
  66. package/dist/types/bindings/react/hooks/search-state-hooks/useSearchSources.d.ts.map +1 -0
  67. package/dist/{@react-bindings → types/bindings/react}/hooks/useCreateFeedsClient.d.ts +2 -4
  68. package/dist/types/bindings/react/hooks/useCreateFeedsClient.d.ts.map +1 -0
  69. package/dist/{@react-bindings → types/bindings/react}/hooks/util/index.d.ts +1 -0
  70. package/dist/types/bindings/react/hooks/util/index.d.ts.map +1 -0
  71. package/dist/{@react-bindings → types/bindings/react}/hooks/util/useBookmarkActions.d.ts +2 -1
  72. package/dist/types/bindings/react/hooks/util/useBookmarkActions.d.ts.map +1 -0
  73. package/dist/{@react-bindings → types/bindings/react}/hooks/util/useReactionActions.d.ts +2 -1
  74. package/dist/types/bindings/react/hooks/util/useReactionActions.d.ts.map +1 -0
  75. package/dist/{@react-bindings → types/bindings/react}/index.d.ts +2 -1
  76. package/dist/types/bindings/react/index.d.ts.map +1 -0
  77. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamFeed.d.ts +2 -1
  78. package/dist/types/bindings/react/wrappers/StreamFeed.d.ts.map +1 -0
  79. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamFeeds.d.ts +1 -0
  80. package/dist/types/bindings/react/wrappers/StreamFeeds.d.ts.map +1 -0
  81. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamSearch.d.ts +2 -1
  82. package/dist/types/bindings/react/wrappers/StreamSearch.d.ts.map +1 -0
  83. package/dist/{@react-bindings → types/bindings/react}/wrappers/StreamSearchResults.d.ts +2 -1
  84. package/dist/types/bindings/react/wrappers/StreamSearchResults.d.ts.map +1 -0
  85. package/dist/{src → types}/common/ApiClient.d.ts +18 -0
  86. package/dist/types/common/ApiClient.d.ts.map +1 -0
  87. package/dist/{src → types}/common/ConnectionIdManager.d.ts +1 -0
  88. package/dist/types/common/ConnectionIdManager.d.ts.map +1 -0
  89. package/dist/{src → types}/common/EventDispatcher.d.ts +1 -0
  90. package/dist/types/common/EventDispatcher.d.ts.map +1 -0
  91. package/dist/{src → types}/common/Poll.d.ts +2 -1
  92. package/dist/types/common/Poll.d.ts.map +1 -0
  93. package/dist/{src → types}/common/TokenManager.d.ts +2 -0
  94. package/dist/types/common/TokenManager.d.ts.map +1 -0
  95. package/dist/{src → types}/common/gen-imports.d.ts +1 -0
  96. package/dist/types/common/gen-imports.d.ts.map +1 -0
  97. package/dist/{src → types}/common/rate-limit.d.ts +1 -0
  98. package/dist/types/common/rate-limit.d.ts.map +1 -0
  99. package/dist/{src → types}/common/real-time/StableWSConnection.d.ts +4 -4
  100. package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -0
  101. package/dist/{src → types}/common/real-time/event-models.d.ts +1 -0
  102. package/dist/types/common/real-time/event-models.d.ts.map +1 -0
  103. package/dist/{src → types}/common/search/ActivitySearchSource.d.ts +1 -0
  104. package/dist/types/common/search/ActivitySearchSource.d.ts.map +1 -0
  105. package/dist/{src → types}/common/search/BaseSearchSource.d.ts +2 -1
  106. package/dist/types/common/search/BaseSearchSource.d.ts.map +1 -0
  107. package/dist/{src → types}/common/search/FeedSearchSource.d.ts +1 -0
  108. package/dist/types/common/search/FeedSearchSource.d.ts.map +1 -0
  109. package/dist/{src → types}/common/search/SearchController.d.ts +2 -1
  110. package/dist/types/common/search/SearchController.d.ts.map +1 -0
  111. package/dist/{src → types}/common/search/UserSearchSource.d.ts +2 -1
  112. package/dist/types/common/search/UserSearchSource.d.ts.map +1 -0
  113. package/dist/{src → types}/common/search/index.d.ts +1 -0
  114. package/dist/types/common/search/index.d.ts.map +1 -0
  115. package/dist/{src → types}/common/search/types.d.ts +1 -0
  116. package/dist/types/common/search/types.d.ts.map +1 -0
  117. package/dist/{src → types}/common/types.d.ts +3 -1
  118. package/dist/types/common/types.d.ts.map +1 -0
  119. package/dist/{src → types}/common/utils.d.ts +1 -0
  120. package/dist/types/common/utils.d.ts.map +1 -0
  121. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-added.d.ts +3 -2
  122. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -0
  123. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-deleted.d.ts +3 -2
  124. package/dist/types/feed/event-handlers/activity/handle-activity-deleted.d.ts.map +1 -0
  125. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-marked.d.ts +1 -0
  126. package/dist/types/feed/event-handlers/activity/handle-activity-marked.d.ts.map +1 -0
  127. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-pinned.d.ts +1 -0
  128. package/dist/types/feed/event-handlers/activity/handle-activity-pinned.d.ts.map +1 -0
  129. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +15 -0
  130. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts.map +1 -0
  131. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +15 -0
  132. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts.map +1 -0
  133. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-removed-from-feed.d.ts +1 -0
  134. package/dist/types/feed/event-handlers/activity/handle-activity-removed-from-feed.d.ts.map +1 -0
  135. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-unpinned.d.ts +1 -0
  136. package/dist/types/feed/event-handlers/activity/handle-activity-unpinned.d.ts.map +1 -0
  137. package/dist/{src → types}/feed/event-handlers/activity/handle-activity-updated.d.ts +1 -0
  138. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -0
  139. package/dist/{src → types}/feed/event-handlers/activity/index.d.ts +1 -0
  140. package/dist/types/feed/event-handlers/activity/index.d.ts.map +1 -0
  141. package/dist/{src → types}/feed/event-handlers/bookmark/handle-bookmark-added.d.ts +1 -0
  142. package/dist/types/feed/event-handlers/bookmark/handle-bookmark-added.d.ts.map +1 -0
  143. package/dist/{src → types}/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts +1 -0
  144. package/dist/types/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts.map +1 -0
  145. package/dist/{src → types}/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts +1 -0
  146. package/dist/types/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts.map +1 -0
  147. package/dist/{src → types}/feed/event-handlers/bookmark/index.d.ts +1 -0
  148. package/dist/types/feed/event-handlers/bookmark/index.d.ts.map +1 -0
  149. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-added.d.ts +1 -0
  150. package/dist/types/feed/event-handlers/comment/handle-comment-added.d.ts.map +1 -0
  151. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-deleted.d.ts +1 -0
  152. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts.map +1 -0
  153. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-reaction.d.ts +1 -0
  154. package/dist/types/feed/event-handlers/comment/handle-comment-reaction.d.ts.map +1 -0
  155. package/dist/{src → types}/feed/event-handlers/comment/handle-comment-updated.d.ts +1 -0
  156. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -0
  157. package/dist/{src → types}/feed/event-handlers/comment/index.d.ts +1 -0
  158. package/dist/types/feed/event-handlers/comment/index.d.ts.map +1 -0
  159. package/dist/{src → types}/feed/event-handlers/feed/handle-feed-updated.d.ts +1 -0
  160. package/dist/types/feed/event-handlers/feed/handle-feed-updated.d.ts.map +1 -0
  161. package/dist/{src → types}/feed/event-handlers/feed/index.d.ts +1 -0
  162. package/dist/types/feed/event-handlers/feed/index.d.ts.map +1 -0
  163. package/dist/{src → types}/feed/event-handlers/feed-member/handle-feed-member-added.d.ts +1 -0
  164. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-added.d.ts.map +1 -0
  165. package/dist/{src → types}/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts +1 -0
  166. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts.map +1 -0
  167. package/dist/{src → types}/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts +1 -0
  168. package/dist/types/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts.map +1 -0
  169. package/dist/{src → types}/feed/event-handlers/feed-member/index.d.ts +1 -0
  170. package/dist/types/feed/event-handlers/feed-member/index.d.ts.map +1 -0
  171. package/dist/{src → types}/feed/event-handlers/follow/handle-follow-created.d.ts +3 -2
  172. package/dist/types/feed/event-handlers/follow/handle-follow-created.d.ts.map +1 -0
  173. package/dist/{src → types}/feed/event-handlers/follow/handle-follow-deleted.d.ts +2 -1
  174. package/dist/types/feed/event-handlers/follow/handle-follow-deleted.d.ts.map +1 -0
  175. package/dist/{src → types}/feed/event-handlers/follow/handle-follow-updated.d.ts +3 -2
  176. package/dist/types/feed/event-handlers/follow/handle-follow-updated.d.ts.map +1 -0
  177. package/dist/{src → types}/feed/event-handlers/follow/index.d.ts +1 -0
  178. package/dist/types/feed/event-handlers/follow/index.d.ts.map +1 -0
  179. package/dist/{src → types}/feed/event-handlers/index.d.ts +1 -0
  180. package/dist/types/feed/event-handlers/index.d.ts.map +1 -0
  181. package/dist/{src → types}/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts +1 -0
  182. package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts.map +1 -0
  183. package/dist/{src → types}/feed/event-handlers/notification-feed/index.d.ts +1 -0
  184. package/dist/types/feed/event-handlers/notification-feed/index.d.ts.map +1 -0
  185. package/dist/{src → types}/feed/event-handlers/watch/handle-watch-started.d.ts +1 -0
  186. package/dist/types/feed/event-handlers/watch/handle-watch-started.d.ts.map +1 -0
  187. package/dist/{src → types}/feed/event-handlers/watch/handle-watch-stopped.d.ts +1 -0
  188. package/dist/types/feed/event-handlers/watch/handle-watch-stopped.d.ts.map +1 -0
  189. package/dist/{src → types}/feed/event-handlers/watch/index.d.ts +1 -0
  190. package/dist/types/feed/event-handlers/watch/index.d.ts.map +1 -0
  191. package/dist/{src → types}/feed/feed.d.ts +9 -6
  192. package/dist/types/feed/feed.d.ts.map +1 -0
  193. package/dist/{src → types}/feed/index.d.ts +1 -0
  194. package/dist/types/feed/index.d.ts.map +1 -0
  195. package/dist/{src → types}/feeds-client/event-handlers/index.d.ts +1 -0
  196. package/dist/types/feeds-client/event-handlers/index.d.ts.map +1 -0
  197. package/dist/{src → types}/feeds-client/event-handlers/user/handle-user-updated.d.ts +1 -0
  198. package/dist/types/feeds-client/event-handlers/user/handle-user-updated.d.ts.map +1 -0
  199. package/dist/{src → types}/feeds-client/feeds-client.d.ts +18 -10
  200. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -0
  201. package/dist/{src → types}/feeds-client/index.d.ts +1 -0
  202. package/dist/types/feeds-client/index.d.ts.map +1 -0
  203. package/dist/{src → types}/gen/feeds/FeedApi.d.ts +1 -0
  204. package/dist/types/gen/feeds/FeedApi.d.ts.map +1 -0
  205. package/dist/{src → types}/gen/feeds/FeedsApi.d.ts +1 -0
  206. package/dist/types/gen/feeds/FeedsApi.d.ts.map +1 -0
  207. package/dist/{src → types}/gen/model-decoders/decoders.d.ts +1 -0
  208. package/dist/types/gen/model-decoders/decoders.d.ts.map +1 -0
  209. package/dist/{src → types}/gen/model-decoders/event-decoder-mapping.d.ts +1 -0
  210. package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -0
  211. package/dist/{src → types}/gen/models/index.d.ts +43 -2
  212. package/dist/types/gen/models/index.d.ts.map +1 -0
  213. package/dist/{src → types}/gen/moderation/ModerationApi.d.ts +1 -0
  214. package/dist/types/gen/moderation/ModerationApi.d.ts.map +1 -0
  215. package/dist/{src → types}/gen-imports.d.ts +1 -0
  216. package/dist/types/gen-imports.d.ts.map +1 -0
  217. package/dist/types/index.d.ts +10 -0
  218. package/dist/types/index.d.ts.map +1 -0
  219. package/dist/{src → types}/moderation-client.d.ts +1 -0
  220. package/dist/types/moderation-client.d.ts.map +1 -0
  221. package/dist/{src → types}/types-internal.d.ts +4 -0
  222. package/dist/types/types-internal.d.ts.map +1 -0
  223. package/dist/{src → types}/types.d.ts +1 -0
  224. package/dist/types/types.d.ts.map +1 -0
  225. package/dist/{src → types}/utils/check-has-another-page.d.ts +1 -0
  226. package/dist/types/utils/check-has-another-page.d.ts.map +1 -0
  227. package/dist/{src → types}/utils/constants.d.ts +1 -0
  228. package/dist/types/utils/constants.d.ts.map +1 -0
  229. package/dist/{src → types}/utils/index.d.ts +2 -0
  230. package/dist/types/utils/index.d.ts.map +1 -0
  231. package/dist/types/utils/is-react-native.d.ts +5 -0
  232. package/dist/types/utils/is-react-native.d.ts.map +1 -0
  233. package/dist/types/utils/logger.d.ts +61 -0
  234. package/dist/types/utils/logger.d.ts.map +1 -0
  235. package/dist/types/utils/state-update-queue.d.ts +83 -0
  236. package/dist/types/utils/state-update-queue.d.ts.map +1 -0
  237. package/dist/types/utils/type-assertions.d.ts +12 -0
  238. package/dist/types/utils/type-assertions.d.ts.map +1 -0
  239. package/dist/{src → types}/utils/unique-array-merge.d.ts +1 -0
  240. package/dist/types/utils/unique-array-merge.d.ts.map +1 -0
  241. package/dist/{src → types}/utils/update-entity-in-array.d.ts +1 -0
  242. package/dist/types/utils/update-entity-in-array.d.ts.map +1 -0
  243. package/package.json +21 -33
  244. package/src/bindings/index.ts +1 -0
  245. package/src/bindings/react/contexts/StreamFeedContext.tsx +18 -0
  246. package/src/bindings/react/contexts/StreamFeedsContext.tsx +21 -0
  247. package/src/bindings/react/contexts/StreamSearchContext.tsx +18 -0
  248. package/src/bindings/react/contexts/StreamSearchResultsContext.tsx +20 -0
  249. package/src/bindings/react/hooks/client-state-hooks/useClientConnectedUser.ts +18 -0
  250. package/src/bindings/react/hooks/client-state-hooks/useWsConnectionState.ts +18 -0
  251. package/src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts +25 -0
  252. package/src/bindings/react/hooks/feed-state-hooks/useComments.ts +91 -0
  253. package/src/bindings/react/hooks/feed-state-hooks/useFeedActivities.ts +36 -0
  254. package/src/bindings/react/hooks/feed-state-hooks/useFeedMetadata.ts +28 -0
  255. package/src/bindings/react/hooks/feed-state-hooks/useFollowers.ts +54 -0
  256. package/src/bindings/react/hooks/feed-state-hooks/useFollowing.ts +54 -0
  257. package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts +29 -0
  258. package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts +28 -0
  259. package/src/bindings/react/hooks/feed-state-hooks/useNotificationStatus.ts +28 -0
  260. package/src/bindings/react/hooks/feed-state-hooks/useOwnCapabilities.ts +70 -0
  261. package/src/bindings/react/hooks/feed-state-hooks/useOwnFollows.ts +18 -0
  262. package/src/bindings/react/hooks/internal/useStableCallback.ts +37 -0
  263. package/src/bindings/react/hooks/search-state-hooks/useSearchQuery.ts +14 -0
  264. package/src/bindings/react/hooks/search-state-hooks/useSearchResult.ts +36 -0
  265. package/src/bindings/react/hooks/search-state-hooks/useSearchSources.ts +17 -0
  266. package/src/bindings/react/hooks/useCreateFeedsClient.ts +73 -0
  267. package/src/bindings/react/hooks/util/useBookmarkActions.ts +40 -0
  268. package/src/bindings/react/hooks/util/useReactionActions.ts +56 -0
  269. package/{@react-bindings → src/bindings/react}/index.ts +1 -1
  270. package/src/bindings/react/wrappers/StreamFeed.tsx +23 -0
  271. package/src/bindings/react/wrappers/StreamFeeds.tsx +13 -0
  272. package/src/bindings/react/wrappers/StreamSearch.tsx +23 -0
  273. package/src/bindings/react/wrappers/StreamSearchResults.tsx +23 -0
  274. package/src/common/ApiClient.ts +86 -33
  275. package/src/common/EventDispatcher.ts +3 -6
  276. package/src/common/Poll.ts +1 -1
  277. package/src/common/TokenManager.ts +4 -0
  278. package/src/common/real-time/StableWSConnection.ts +64 -60
  279. package/src/common/search/BaseSearchSource.ts +11 -4
  280. package/src/common/search/SearchController.ts +4 -2
  281. package/src/common/types.ts +3 -2
  282. package/src/feed/event-handlers/activity/activity-utils.test.ts +40 -9
  283. package/src/feed/event-handlers/activity/handle-activity-added.test.ts +1 -1
  284. package/src/feed/event-handlers/activity/handle-activity-added.ts +7 -7
  285. package/src/feed/event-handlers/activity/handle-activity-deleted.ts +15 -12
  286. package/src/feed/event-handlers/activity/handle-activity-reaction-added.test.ts +101 -1
  287. package/src/feed/event-handlers/activity/handle-activity-reaction-added.ts +55 -29
  288. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +118 -1
  289. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +59 -32
  290. package/src/feed/event-handlers/activity/handle-activity-removed-from-feed.ts +1 -1
  291. package/src/feed/event-handlers/follow/follow-state-update-queue.test.ts +219 -0
  292. package/src/feed/event-handlers/follow/handle-follow-created.ts +7 -2
  293. package/src/feed/event-handlers/follow/handle-follow-deleted.ts +5 -0
  294. package/src/feed/event-handlers/follow/handle-follow-updated.test.ts +0 -43
  295. package/src/feed/event-handlers/follow/handle-follow-updated.ts +7 -2
  296. package/src/feed/feed.test.ts +90 -0
  297. package/src/feed/feed.ts +25 -4
  298. package/src/feeds-client/feeds-client.ts +35 -4
  299. package/src/gen/feeds/FeedsApi.ts +2 -0
  300. package/src/gen/model-decoders/decoders.ts +22 -0
  301. package/src/gen/models/index.ts +71 -3
  302. package/src/index.ts +9 -0
  303. package/src/test-utils/response-generators.ts +12 -3
  304. package/src/types-internal.ts +4 -0
  305. package/src/utils/index.ts +1 -0
  306. package/src/utils/is-react-native.ts +7 -0
  307. package/src/utils/logger.ts +18 -0
  308. package/src/utils/state-update-queue.test.ts +85 -9
  309. package/src/utils/state-update-queue.ts +104 -11
  310. package/src/utils/type-assertions.ts +22 -1
  311. package/dist/@react-bindings/hooks/client-state-hooks/useClientConnectedUser.d.ts +0 -4
  312. package/dist/@react-bindings/hooks/search-state-hooks/useSearchSources.d.ts +0 -4
  313. package/dist/@react-bindings/hooks/useStateStore.d.ts +0 -3
  314. package/dist/index-react-bindings.browser.cjs +0 -6607
  315. package/dist/index-react-bindings.browser.cjs.map +0 -1
  316. package/dist/index-react-bindings.browser.js +0 -6574
  317. package/dist/index-react-bindings.browser.js.map +0 -1
  318. package/dist/index-react-bindings.node.cjs +0 -6607
  319. package/dist/index-react-bindings.node.cjs.map +0 -1
  320. package/dist/index-react-bindings.node.js +0 -6574
  321. package/dist/index-react-bindings.node.js.map +0 -1
  322. package/dist/index.browser.cjs +0 -6578
  323. package/dist/index.browser.cjs.map +0 -1
  324. package/dist/index.browser.js +0 -6551
  325. package/dist/index.browser.js.map +0 -1
  326. package/dist/index.d.ts +0 -9
  327. package/dist/index.node.cjs +0 -6578
  328. package/dist/index.node.cjs.map +0 -1
  329. package/dist/index.node.js +0 -6551
  330. package/dist/index.node.js.map +0 -1
  331. package/dist/src/common/StateStore.d.ts +0 -125
  332. package/dist/src/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +0 -12
  333. package/dist/src/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +0 -12
  334. package/dist/src/utils/state-update-queue.d.ts +0 -6
  335. package/dist/src/utils/type-assertions.d.ts +0 -7
  336. package/index.ts +0 -9
  337. package/src/common/StateStore.ts +0 -332
  338. /package/{@react-bindings → src/bindings/react}/hooks/client-state-hooks/index.ts +0 -0
  339. /package/{@react-bindings → src/bindings/react}/hooks/feed-state-hooks/index.ts +0 -0
  340. /package/{@react-bindings → src/bindings/react}/hooks/internal/index.ts +0 -0
  341. /package/{@react-bindings → src/bindings/react}/hooks/search-state-hooks/index.ts +0 -0
  342. /package/{@react-bindings → src/bindings/react}/hooks/util/index.ts +0 -0
@@ -1,125 +0,0 @@
1
- export type Patch<T> = (value: T) => T;
2
- export type ValueOrPatch<T> = T | Patch<T>;
3
- export type Handler<T> = (nextValue: T, previousValue: T | undefined) => void;
4
- export type Unsubscribe = () => void;
5
- export type RemovePreprocessor = Unsubscribe;
6
- export type Preprocessor<T> = Handler<T>;
7
- export declare const isPatch: <T>(value: ValueOrPatch<T>) => value is Patch<T>;
8
- export declare class StateStore<T extends Record<string, unknown>> {
9
- protected value: T;
10
- protected handlers: Set<Handler<T>>;
11
- protected preprocessors: Set<Preprocessor<T>>;
12
- constructor(value: T);
13
- /**
14
- * Allows merging two stores only if their keys differ otherwise there's no way to ensure the data type stability.
15
- * @experimental
16
- * This method is experimental and may change in future versions.
17
- */
18
- merge<Q extends StateStore<any>>(stateStore: Q extends StateStore<infer L> ? Extract<keyof T, keyof L> extends never ? Q : never : never): MergedStateStore<T, Q extends StateStore<infer L extends Record<string, unknown>> ? L : never>;
19
- next(newValueOrPatch: ValueOrPatch<T>): void;
20
- partialNext: (partial: Partial<T>) => void;
21
- getLatestValue(): T;
22
- subscribe(handler: Handler<T>): Unsubscribe;
23
- static doSelectionsEqual<O extends Readonly<Record<string, unknown>> | readonly unknown[]>(previouslySelectedValues: O | undefined, newlySelectedValues: O): boolean;
24
- subscribeWithSelector: <O extends Readonly<Record<string, unknown>> | readonly unknown[]>(selector: (nextValue: T) => O, handler: Handler<O>) => Unsubscribe;
25
- /**
26
- * Registers a preprocessor function that will be called before the state is updated.
27
- *
28
- * Preprocessors are invoked with the new and previous values whenever `next` or `partialNext` methods
29
- * are called, allowing you to mutate or react to the new value before it is set. Preprocessors run in the
30
- * order they were registered.
31
- *
32
- * @example
33
- * ```ts
34
- * const store = new StateStore<{ count: number; isMaxValue: bool; }>({ count: 0, isMaxValue: false });
35
- *
36
- * store.addPreprocessor((nextValue, prevValue) => {
37
- * if (nextValue.count > 10) {
38
- * nextValue.count = 10; // Clamp the value to a maximum of 10
39
- * }
40
- *
41
- * if (nextValue.count === 10) {
42
- * nextValue.isMaxValue = true; // Set isMaxValue to true if count is 10
43
- * } else {
44
- * nextValue.isMaxValue = false; // Reset isMaxValue otherwise
45
- * }
46
- * });
47
- *
48
- * store.partialNext({ count: 15 });
49
- *
50
- * store.getLatestValue(); // { count: 10, isMaxValue: true }
51
- *
52
- * store.partialNext({ count: 5 });
53
- *
54
- * store.getLatestValue(); // { count: 5, isMaxValue: false }
55
- * ```
56
- *
57
- * @param preprocessor - The function to be called with the next and previous values before the state is updated.
58
- * @returns A `RemovePreprocessor` function that removes the preprocessor when called.
59
- */
60
- addPreprocessor(preprocessor: Preprocessor<T>): RemovePreprocessor;
61
- }
62
- /**
63
- * Represents a merged state store that combines two separate state stores into one.
64
- *
65
- * The MergedStateStore allows combining two stores with non-overlapping keys.
66
- * It extends StateStore with the combined type of both source stores.
67
- * Changes to either the original or merged store will propagate to the combined store.
68
- *
69
- * Note: Direct mutations (next, partialNext, addPreprocessor) are disabled on the merged store.
70
- * You should instead call these methods on the original or merged stores.
71
- *
72
- * @template O The type of the original state store
73
- * @template M The type of the merged state store
74
- *
75
- * @experimental
76
- * This class is experimental and may change in future versions.
77
- */
78
- export declare class MergedStateStore<O extends Record<string, unknown>, M extends Record<string, unknown>> extends StateStore<O & M> {
79
- readonly original: StateStore<O>;
80
- readonly merged: StateStore<M>;
81
- private cachedOriginalValue;
82
- private cachedMergedValue;
83
- constructor({ original, merged, }: {
84
- original: StateStore<O>;
85
- merged: StateStore<M>;
86
- });
87
- /**
88
- * Subscribes to changes in the merged state store.
89
- *
90
- * This method extends the base subscribe functionality to handle the merged nature of this store:
91
- * 1. The first subscriber triggers registration of helper subscribers that listen to both source stores
92
- * 2. Changes from either source store are propagated to this merged store
93
- * 3. Source store values are cached to prevent unnecessary updates
94
- *
95
- * When the first subscriber is added, the method sets up listeners on both original and merged stores.
96
- * These listeners update the combined store value whenever either source store changes.
97
- * All subscriptions (helpers and the actual handler) are tracked so they can be properly cleaned up.
98
- *
99
- * @param handler - The callback function that will be executed when the state changes
100
- * @returns An unsubscribe function that, when called, removes the subscription and any helper subscriptions
101
- */
102
- subscribe(handler: Handler<O & M>): () => void;
103
- /**
104
- * Retrieves the latest combined state from both original and merged stores.
105
- *
106
- * This method extends the base getLatestValue functionality to ensure the merged store
107
- * remains in sync with its source stores even when there are no active subscribers.
108
- *
109
- * When there are no handlers registered, the method:
110
- * 1. Fetches the latest values from both source stores
111
- * 2. Compares them with the cached values to detect changes
112
- * 3. If changes are detected, updates the internal value and caches
113
- * the new source values to maintain consistency
114
- *
115
- * This approach ensures that calling getLatestValue() always returns the most
116
- * up-to-date combined state, even if the merged store hasn't been actively
117
- * receiving updates through subscriptions.
118
- *
119
- * @returns The latest combined state from both original and merged stores
120
- */
121
- getLatestValue(): O & M;
122
- next: () => void;
123
- partialNext: () => void;
124
- addPreprocessor(): () => void;
125
- }
@@ -1,12 +0,0 @@
1
- import type { Feed } from '../../../feed';
2
- import type { ActivityPinResponse, ActivityReactionAddedEvent, ActivityResponse } from '../../../gen/models';
3
- import type { EventPayload } from '../../../types-internal';
4
- export declare const addReactionToActivities: (event: ActivityReactionAddedEvent, activities: ActivityResponse[] | undefined, eventBelongsToCurrentUser: boolean) => {
5
- changed: boolean;
6
- entities: ActivityResponse[] | undefined;
7
- };
8
- export declare const addReactionToPinnedActivities: (event: ActivityReactionAddedEvent, pinnedActivities: ActivityPinResponse[] | undefined, eventBelongsToCurrentUser: boolean) => {
9
- changed: boolean;
10
- entities: ActivityPinResponse[] | undefined;
11
- };
12
- export declare function handleActivityReactionAdded(this: Feed, event: EventPayload<'feeds.activity.reaction.added'>): void;
@@ -1,12 +0,0 @@
1
- import type { Feed } from '../../../feed';
2
- import { ActivityPinResponse, ActivityReactionDeletedEvent, ActivityResponse } from '../../../gen/models';
3
- import type { EventPayload } from '../../../types-internal';
4
- export declare const removeReactionFromActivities: (event: ActivityReactionDeletedEvent, activities: ActivityResponse[] | undefined, eventBelongsToCurrentUser: boolean) => {
5
- changed: boolean;
6
- entities: ActivityResponse[] | undefined;
7
- };
8
- export declare const removeReactionFromPinnedActivities: (event: ActivityReactionDeletedEvent, activities: ActivityPinResponse[] | undefined, eventBelongsToCurrentUser: boolean) => {
9
- changed: boolean;
10
- entities: ActivityPinResponse[] | undefined;
11
- };
12
- export declare function handleActivityReactionDeleted(this: Feed, event: EventPayload<'feeds.activity.reaction.deleted'>): void;
@@ -1,6 +0,0 @@
1
- export declare const shouldUpdateState: ({ stateUpdateQueueId, stateUpdateQueue, watch, }: {
2
- stateUpdateQueueId: string;
3
- stateUpdateQueue: Set<string>;
4
- watch: boolean;
5
- }) => boolean;
6
- export declare function getStateUpdateQueueId(data: object, prefix?: 'deleted' | 'updated' | 'created' | (string & {})): string;
@@ -1,7 +0,0 @@
1
- import { CommentResponse, FollowResponse } from '../gen/models';
2
- import { StreamFile } from '../types';
3
- import { CommentParent } from '../types';
4
- export declare const isFollowResponse: (data: object) => data is FollowResponse;
5
- export declare const isCommentResponse: (entity: CommentParent) => entity is CommentResponse;
6
- export declare const isImageFile: (file: StreamFile) => boolean;
7
- export declare const isVideoFile: (file: StreamFile) => boolean;
package/index.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from './src/feeds-client/feeds-client';
2
- export * from './src/feed/feed';
3
- export * from './src/gen/models';
4
- export * from './src/types';
5
- export * from './src/common/types';
6
- export * from './src/common/StateStore';
7
- export * from './src/common/search';
8
- export * from './src/common/Poll';
9
- export * from './src/utils';
@@ -1,332 +0,0 @@
1
- export type Patch<T> = (value: T) => T;
2
- export type ValueOrPatch<T> = T | Patch<T>;
3
- export type Handler<T> = (nextValue: T, previousValue: T | undefined) => void;
4
- export type Unsubscribe = () => void;
5
- // aliases
6
- export type RemovePreprocessor = Unsubscribe;
7
- export type Preprocessor<T> = Handler<T>;
8
-
9
- export const isPatch = <T>(value: ValueOrPatch<T>): value is Patch<T> =>
10
- typeof value === 'function';
11
-
12
- const noop = () => {};
13
-
14
- export class StateStore<T extends Record<string, unknown>> {
15
- protected handlers = new Set<Handler<T>>();
16
- protected preprocessors = new Set<Preprocessor<T>>();
17
-
18
- constructor(protected value: T) {}
19
-
20
- /**
21
- * Allows merging two stores only if their keys differ otherwise there's no way to ensure the data type stability.
22
- * @experimental
23
- * This method is experimental and may change in future versions.
24
- */
25
- public merge<Q extends StateStore<any>>(
26
- stateStore: Q extends StateStore<infer L>
27
- ? Extract<keyof T, keyof L> extends never
28
- ? Q
29
- : never
30
- : never,
31
- ) {
32
- return new MergedStateStore<T, Q extends StateStore<infer L> ? L : never>({
33
- original: this,
34
- merged: stateStore,
35
- });
36
- }
37
-
38
- public next(newValueOrPatch: ValueOrPatch<T>): void {
39
- // newValue (or patch output) should never be a mutated previous value
40
- const newValue = isPatch(newValueOrPatch)
41
- ? newValueOrPatch(this.value)
42
- : newValueOrPatch;
43
-
44
- // do not notify subscribers if the value hasn't changed
45
- if (Object.is(newValue, this.value)) return;
46
-
47
- this.preprocessors.forEach((preprocessor) =>
48
- preprocessor(newValue, this.value),
49
- );
50
-
51
- const oldValue = this.value;
52
- this.value = newValue;
53
-
54
- this.handlers.forEach((handler) => handler(this.value, oldValue));
55
- }
56
-
57
- public partialNext = (partial: Partial<T>): void =>
58
- this.next((current) => ({ ...current, ...partial }));
59
-
60
- public getLatestValue(): T {
61
- return this.value;
62
- }
63
-
64
- public subscribe(handler: Handler<T>): Unsubscribe {
65
- handler(this.value, undefined);
66
- this.handlers.add(handler);
67
- return () => {
68
- this.handlers.delete(handler);
69
- };
70
- }
71
-
72
- public static doSelectionsEqual<
73
- O extends Readonly<Record<string, unknown>> | readonly unknown[],
74
- >(previouslySelectedValues: O | undefined, newlySelectedValues: O): boolean {
75
- let selectionsAreEqual: boolean;
76
-
77
- if (
78
- (selectionsAreEqual = typeof previouslySelectedValues !== 'undefined')
79
- ) {
80
- for (const key in newlySelectedValues) {
81
- if (
82
- Object.is(previouslySelectedValues[key], newlySelectedValues[key])
83
- ) {
84
- continue;
85
- }
86
-
87
- selectionsAreEqual = false;
88
- break;
89
- }
90
- }
91
-
92
- return selectionsAreEqual;
93
- }
94
-
95
- public subscribeWithSelector = <
96
- O extends Readonly<Record<string, unknown>> | readonly unknown[],
97
- >(
98
- selector: (nextValue: T) => O,
99
- handler: Handler<O>,
100
- ) => {
101
- // begin with undefined to reduce amount of selector calls
102
- let previouslySelectedValues: O | undefined;
103
-
104
- const wrappedHandler: Handler<T> = (nextValue) => {
105
- const newlySelectedValues = selector(nextValue);
106
-
107
- // shallow comparison of previouslySelectedValues and newlySelectedValues
108
- const selectionsAreEqual = StateStore.doSelectionsEqual(
109
- previouslySelectedValues,
110
- newlySelectedValues,
111
- );
112
-
113
- if (selectionsAreEqual) return;
114
-
115
- // save a copy of previouslySelectedValues before running
116
- // handler - if previouslySelectedValues are set to
117
- // newlySelectedValues after the handler call, there's a chance
118
- // that it'll never get set as handler can throw and flow might
119
- // go out of sync
120
- const previouslySelectedValuesCopy = previouslySelectedValues;
121
- previouslySelectedValues = newlySelectedValues;
122
-
123
- handler(newlySelectedValues, previouslySelectedValuesCopy);
124
- };
125
-
126
- return this.subscribe(wrappedHandler);
127
- };
128
-
129
- /**
130
- * Registers a preprocessor function that will be called before the state is updated.
131
- *
132
- * Preprocessors are invoked with the new and previous values whenever `next` or `partialNext` methods
133
- * are called, allowing you to mutate or react to the new value before it is set. Preprocessors run in the
134
- * order they were registered.
135
- *
136
- * @example
137
- * ```ts
138
- * const store = new StateStore<{ count: number; isMaxValue: bool; }>({ count: 0, isMaxValue: false });
139
- *
140
- * store.addPreprocessor((nextValue, prevValue) => {
141
- * if (nextValue.count > 10) {
142
- * nextValue.count = 10; // Clamp the value to a maximum of 10
143
- * }
144
- *
145
- * if (nextValue.count === 10) {
146
- * nextValue.isMaxValue = true; // Set isMaxValue to true if count is 10
147
- * } else {
148
- * nextValue.isMaxValue = false; // Reset isMaxValue otherwise
149
- * }
150
- * });
151
- *
152
- * store.partialNext({ count: 15 });
153
- *
154
- * store.getLatestValue(); // { count: 10, isMaxValue: true }
155
- *
156
- * store.partialNext({ count: 5 });
157
- *
158
- * store.getLatestValue(); // { count: 5, isMaxValue: false }
159
- * ```
160
- *
161
- * @param preprocessor - The function to be called with the next and previous values before the state is updated.
162
- * @returns A `RemovePreprocessor` function that removes the preprocessor when called.
163
- */
164
- public addPreprocessor(preprocessor: Preprocessor<T>): RemovePreprocessor {
165
- this.preprocessors.add(preprocessor);
166
-
167
- return () => {
168
- this.preprocessors.delete(preprocessor);
169
- };
170
- }
171
- }
172
-
173
- /**
174
- * Represents a merged state store that combines two separate state stores into one.
175
- *
176
- * The MergedStateStore allows combining two stores with non-overlapping keys.
177
- * It extends StateStore with the combined type of both source stores.
178
- * Changes to either the original or merged store will propagate to the combined store.
179
- *
180
- * Note: Direct mutations (next, partialNext, addPreprocessor) are disabled on the merged store.
181
- * You should instead call these methods on the original or merged stores.
182
- *
183
- * @template O The type of the original state store
184
- * @template M The type of the merged state store
185
- *
186
- * @experimental
187
- * This class is experimental and may change in future versions.
188
- */
189
- export class MergedStateStore<
190
- O extends Record<string, unknown>,
191
- M extends Record<string, unknown>,
192
- > extends StateStore<O & M> {
193
- public readonly original: StateStore<O>;
194
- public readonly merged: StateStore<M>;
195
- private cachedOriginalValue: O;
196
- private cachedMergedValue: M;
197
-
198
- constructor({
199
- original,
200
- merged,
201
- }: {
202
- original: StateStore<O>;
203
- merged: StateStore<M>;
204
- }) {
205
- const originalValue = original.getLatestValue();
206
- const mergedValue = merged.getLatestValue();
207
-
208
- super({
209
- ...originalValue,
210
- ...mergedValue,
211
- });
212
-
213
- this.cachedOriginalValue = originalValue;
214
- this.cachedMergedValue = mergedValue;
215
-
216
- this.original = original;
217
- this.merged = merged;
218
- }
219
-
220
- /**
221
- * Subscribes to changes in the merged state store.
222
- *
223
- * This method extends the base subscribe functionality to handle the merged nature of this store:
224
- * 1. The first subscriber triggers registration of helper subscribers that listen to both source stores
225
- * 2. Changes from either source store are propagated to this merged store
226
- * 3. Source store values are cached to prevent unnecessary updates
227
- *
228
- * When the first subscriber is added, the method sets up listeners on both original and merged stores.
229
- * These listeners update the combined store value whenever either source store changes.
230
- * All subscriptions (helpers and the actual handler) are tracked so they can be properly cleaned up.
231
- *
232
- * @param handler - The callback function that will be executed when the state changes
233
- * @returns An unsubscribe function that, when called, removes the subscription and any helper subscriptions
234
- */
235
- public subscribe(handler: Handler<O & M>) {
236
- const unsubscribeFunctions: Unsubscribe[] = [];
237
-
238
- // first subscriber will also register helpers which listen to changes of the
239
- // "original" and "merged" stores, combined outputs will be emitted through super.next
240
- // whenever cached values do not equal (always apart from the initial subscription)
241
- // since the actual handler subscription is registered after helpers, the actual
242
- // handler will run only once
243
- if (!this.handlers.size) {
244
- const base = (nextValue: O | M) => {
245
- super.next((currentValue) => ({
246
- ...currentValue,
247
- ...nextValue,
248
- }));
249
- };
250
-
251
- unsubscribeFunctions.push(
252
- this.original.subscribe((nextValue) => {
253
- if (nextValue === this.cachedOriginalValue) return;
254
- this.cachedOriginalValue = nextValue;
255
- base(nextValue);
256
- }),
257
- this.merged.subscribe((nextValue) => {
258
- if (nextValue === this.cachedMergedValue) return;
259
- this.cachedMergedValue = nextValue;
260
- base(nextValue);
261
- }),
262
- );
263
- }
264
-
265
- unsubscribeFunctions.push(super.subscribe(handler));
266
-
267
- return () => {
268
- unsubscribeFunctions.forEach((unsubscribe) => unsubscribe());
269
- };
270
- }
271
-
272
- /**
273
- * Retrieves the latest combined state from both original and merged stores.
274
- *
275
- * This method extends the base getLatestValue functionality to ensure the merged store
276
- * remains in sync with its source stores even when there are no active subscribers.
277
- *
278
- * When there are no handlers registered, the method:
279
- * 1. Fetches the latest values from both source stores
280
- * 2. Compares them with the cached values to detect changes
281
- * 3. If changes are detected, updates the internal value and caches
282
- * the new source values to maintain consistency
283
- *
284
- * This approach ensures that calling getLatestValue() always returns the most
285
- * up-to-date combined state, even if the merged store hasn't been actively
286
- * receiving updates through subscriptions.
287
- *
288
- * @returns The latest combined state from both original and merged stores
289
- */
290
- public getLatestValue() {
291
- // if there are no handlers registered to MergedStore then the local value might be out-of-sync
292
- // pull latest and compare against cached - if they differ, cache latest and produce new combined
293
- if (!this.handlers.size) {
294
- const originalValue = this.original.getLatestValue();
295
- const mergedValue = this.merged.getLatestValue();
296
-
297
- if (
298
- originalValue !== this.cachedOriginalValue ||
299
- mergedValue !== this.cachedMergedValue
300
- ) {
301
- this.value = {
302
- ...originalValue,
303
- ...mergedValue,
304
- };
305
- this.cachedMergedValue = mergedValue;
306
- this.cachedOriginalValue = originalValue;
307
- }
308
- }
309
-
310
- return super.getLatestValue();
311
- }
312
-
313
- // override original methods and "disable" them
314
- public next = () => {
315
- console.warn(
316
- `${MergedStateStore.name}.next is disabled, call original.next or merged.next instead`,
317
- );
318
- };
319
-
320
- public partialNext = () => {
321
- console.warn(
322
- `${MergedStateStore.name}.partialNext is disabled, call original.partialNext or merged.partialNext instead`,
323
- );
324
- };
325
-
326
- public addPreprocessor() {
327
- console.warn(
328
- `${MergedStateStore.name}.addPreprocessor is disabled, call original.addPreprocessor or merged.addPreprocessor instead`,
329
- );
330
- return noop;
331
- }
332
- }