@microsoft/live-share-react 1.4.0-preview.0 → 2.0.0-internal.10

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 (383) hide show
  1. package/LICENSE +64 -61
  2. package/README.md +173 -168
  3. package/bin/cjs/index.d.ts +7 -0
  4. package/bin/cjs/index.d.ts.map +1 -0
  5. package/bin/cjs/index.js +23 -0
  6. package/bin/cjs/index.js.map +1 -0
  7. package/bin/cjs/interfaces/LiveInterfaceExtensions.d.ts.map +1 -0
  8. package/bin/cjs/interfaces/LiveInterfaceExtensions.js +7 -0
  9. package/bin/cjs/interfaces/LiveInterfaceExtensions.js.map +1 -0
  10. package/bin/cjs/interfaces/index.d.ts +2 -0
  11. package/bin/cjs/interfaces/index.d.ts.map +1 -0
  12. package/bin/cjs/interfaces/index.js +18 -0
  13. package/bin/cjs/interfaces/index.js.map +1 -0
  14. package/bin/{internal → cjs/internal}/errors.d.ts +15 -0
  15. package/bin/cjs/internal/errors.d.ts.map +1 -0
  16. package/bin/cjs/internal/errors.js +48 -0
  17. package/bin/cjs/internal/errors.js.map +1 -0
  18. package/bin/cjs/internal/index.d.ts +3 -0
  19. package/bin/cjs/internal/index.d.ts.map +1 -0
  20. package/bin/cjs/internal/index.js +19 -0
  21. package/bin/cjs/internal/index.js.map +1 -0
  22. package/bin/{internal → cjs/internal}/type-guards.d.ts +5 -0
  23. package/bin/cjs/internal/type-guards.d.ts.map +1 -0
  24. package/bin/cjs/internal/type-guards.js +24 -0
  25. package/bin/cjs/internal/type-guards.js.map +1 -0
  26. package/bin/cjs/live-hooks/index.d.ts +8 -0
  27. package/bin/cjs/live-hooks/index.d.ts.map +1 -0
  28. package/bin/cjs/live-hooks/index.js +24 -0
  29. package/bin/cjs/live-hooks/index.js.map +1 -0
  30. package/bin/cjs/live-hooks/useLiveCanvas.d.ts +80 -0
  31. package/bin/cjs/live-hooks/useLiveCanvas.d.ts.map +1 -0
  32. package/bin/cjs/live-hooks/useLiveCanvas.js +244 -0
  33. package/bin/cjs/live-hooks/useLiveCanvas.js.map +1 -0
  34. package/bin/{live-hooks → cjs/live-hooks}/useLiveEvent.d.ts +37 -1
  35. package/bin/cjs/live-hooks/useLiveEvent.d.ts.map +1 -0
  36. package/bin/cjs/live-hooks/useLiveEvent.js +150 -0
  37. package/bin/cjs/live-hooks/useLiveEvent.js.map +1 -0
  38. package/bin/cjs/live-hooks/useLiveFollowMode.d.ts +163 -0
  39. package/bin/cjs/live-hooks/useLiveFollowMode.d.ts.map +1 -0
  40. package/bin/cjs/live-hooks/useLiveFollowMode.js +360 -0
  41. package/bin/cjs/live-hooks/useLiveFollowMode.js.map +1 -0
  42. package/bin/cjs/live-hooks/useLivePresence.d.ts +76 -0
  43. package/bin/cjs/live-hooks/useLivePresence.d.ts.map +1 -0
  44. package/bin/cjs/live-hooks/useLivePresence.js +170 -0
  45. package/bin/cjs/live-hooks/useLivePresence.js.map +1 -0
  46. package/bin/{live-hooks → cjs/live-hooks}/useLiveState.d.ts +46 -1
  47. package/bin/cjs/live-hooks/useLiveState.d.ts.map +1 -0
  48. package/bin/cjs/live-hooks/useLiveState.js +134 -0
  49. package/bin/cjs/live-hooks/useLiveState.js.map +1 -0
  50. package/bin/{live-hooks → cjs/live-hooks}/useLiveTimer.d.ts +56 -1
  51. package/bin/cjs/live-hooks/useLiveTimer.d.ts.map +1 -0
  52. package/bin/cjs/live-hooks/useLiveTimer.js +233 -0
  53. package/bin/cjs/live-hooks/useLiveTimer.js.map +1 -0
  54. package/bin/cjs/live-hooks/useMediaSynchronizer.d.ts +86 -0
  55. package/bin/cjs/live-hooks/useMediaSynchronizer.d.ts.map +1 -0
  56. package/bin/cjs/live-hooks/useMediaSynchronizer.js +301 -0
  57. package/bin/cjs/live-hooks/useMediaSynchronizer.js.map +1 -0
  58. package/bin/cjs/package.json +1 -0
  59. package/bin/{providers → cjs/providers}/AzureProvider.d.ts +9 -9
  60. package/bin/cjs/providers/AzureProvider.d.ts.map +1 -0
  61. package/bin/cjs/providers/AzureProvider.js +127 -0
  62. package/bin/cjs/providers/AzureProvider.js.map +1 -0
  63. package/bin/{providers → cjs/providers}/LiveShareProvider.d.ts +106 -4
  64. package/bin/cjs/providers/LiveShareProvider.d.ts.map +1 -0
  65. package/bin/cjs/providers/LiveShareProvider.js +205 -0
  66. package/bin/cjs/providers/LiveShareProvider.js.map +1 -0
  67. package/bin/cjs/providers/index.d.ts +3 -0
  68. package/bin/cjs/providers/index.d.ts.map +1 -0
  69. package/bin/cjs/providers/index.js +19 -0
  70. package/bin/cjs/providers/index.js.map +1 -0
  71. package/bin/cjs/shared-hooks/index.d.ts +7 -0
  72. package/bin/cjs/shared-hooks/index.d.ts.map +1 -0
  73. package/bin/cjs/shared-hooks/index.js +23 -0
  74. package/bin/cjs/shared-hooks/index.js.map +1 -0
  75. package/bin/cjs/shared-hooks/internals/tree-node-constants.d.ts +3 -0
  76. package/bin/cjs/shared-hooks/internals/tree-node-constants.d.ts.map +1 -0
  77. package/bin/cjs/shared-hooks/internals/tree-node-constants.js +6 -0
  78. package/bin/cjs/shared-hooks/internals/tree-node-constants.js.map +1 -0
  79. package/bin/cjs/shared-hooks/internals/tree-node-types.d.ts +10 -0
  80. package/bin/cjs/shared-hooks/internals/tree-node-types.d.ts.map +1 -0
  81. package/bin/cjs/shared-hooks/internals/tree-node-types.js +23 -0
  82. package/bin/cjs/shared-hooks/internals/tree-node-types.js.map +1 -0
  83. package/bin/cjs/shared-hooks/internals/tree-node-utils.d.ts +33 -0
  84. package/bin/cjs/shared-hooks/internals/tree-node-utils.d.ts.map +1 -0
  85. package/bin/cjs/shared-hooks/internals/tree-node-utils.js +193 -0
  86. package/bin/cjs/shared-hooks/internals/tree-node-utils.js.map +1 -0
  87. package/bin/{shared-hooks → cjs/shared-hooks}/useDynamicDDS.d.ts +4 -4
  88. package/bin/cjs/shared-hooks/useDynamicDDS.d.ts.map +1 -0
  89. package/bin/cjs/shared-hooks/useDynamicDDS.js +87 -0
  90. package/bin/cjs/shared-hooks/useDynamicDDS.js.map +1 -0
  91. package/bin/{shared-hooks → cjs/shared-hooks}/useSharedMap.d.ts +4 -2
  92. package/bin/cjs/shared-hooks/useSharedMap.d.ts.map +1 -0
  93. package/bin/cjs/shared-hooks/useSharedMap.js +134 -0
  94. package/bin/cjs/shared-hooks/useSharedMap.js.map +1 -0
  95. package/bin/{shared-hooks → cjs/shared-hooks}/useSharedState.d.ts +1 -1
  96. package/bin/cjs/shared-hooks/useSharedState.d.ts.map +1 -0
  97. package/bin/cjs/shared-hooks/useSharedState.js +80 -0
  98. package/bin/cjs/shared-hooks/useSharedState.js.map +1 -0
  99. package/bin/{shared-hooks → cjs/shared-hooks}/useSharedStateRegistry.d.ts +1 -1
  100. package/bin/cjs/shared-hooks/useSharedStateRegistry.d.ts.map +1 -0
  101. package/bin/cjs/shared-hooks/useSharedStateRegistry.js +120 -0
  102. package/bin/cjs/shared-hooks/useSharedStateRegistry.js.map +1 -0
  103. package/bin/cjs/shared-hooks/useSharedTree.d.ts +57 -0
  104. package/bin/cjs/shared-hooks/useSharedTree.d.ts.map +1 -0
  105. package/bin/cjs/shared-hooks/useSharedTree.js +123 -0
  106. package/bin/cjs/shared-hooks/useSharedTree.js.map +1 -0
  107. package/bin/cjs/shared-hooks/useTreeNode.d.ts +96 -0
  108. package/bin/cjs/shared-hooks/useTreeNode.d.ts.map +1 -0
  109. package/bin/cjs/shared-hooks/useTreeNode.js +135 -0
  110. package/bin/cjs/shared-hooks/useTreeNode.js.map +1 -0
  111. package/bin/{types → cjs/types}/ActionTypes.d.ts +7 -7
  112. package/bin/cjs/types/ActionTypes.d.ts.map +1 -0
  113. package/bin/cjs/types/ActionTypes.js +7 -0
  114. package/bin/cjs/types/ActionTypes.js.map +1 -0
  115. package/bin/cjs/types/PropTypes.d.ts +56 -0
  116. package/bin/cjs/types/PropTypes.d.ts.map +1 -0
  117. package/bin/cjs/types/PropTypes.js +7 -0
  118. package/bin/cjs/types/PropTypes.js.map +1 -0
  119. package/bin/{types → cjs/types}/ResultTypes.d.ts +50 -18
  120. package/bin/cjs/types/ResultTypes.d.ts.map +1 -0
  121. package/bin/cjs/types/ResultTypes.js +7 -0
  122. package/bin/cjs/types/ResultTypes.js.map +1 -0
  123. package/bin/cjs/types/index.d.ts +4 -0
  124. package/bin/cjs/types/index.d.ts.map +1 -0
  125. package/bin/cjs/types/index.js +20 -0
  126. package/bin/cjs/types/index.js.map +1 -0
  127. package/bin/cjs/utils/index.d.ts +2 -0
  128. package/bin/cjs/utils/index.d.ts.map +1 -0
  129. package/bin/cjs/utils/index.js +18 -0
  130. package/bin/cjs/utils/index.js.map +1 -0
  131. package/bin/cjs/utils/type-check.d.ts.map +1 -0
  132. package/bin/cjs/utils/type-check.js +62 -0
  133. package/bin/cjs/utils/type-check.js.map +1 -0
  134. package/bin/esm/index.d.ts +7 -0
  135. package/bin/esm/index.d.ts.map +1 -0
  136. package/bin/esm/index.js +7 -0
  137. package/bin/esm/index.js.map +1 -0
  138. package/bin/esm/interfaces/LiveInterfaceExtensions.d.ts +26 -0
  139. package/bin/esm/interfaces/LiveInterfaceExtensions.d.ts.map +1 -0
  140. package/bin/esm/interfaces/LiveInterfaceExtensions.js.map +1 -0
  141. package/bin/esm/interfaces/index.d.ts +2 -0
  142. package/bin/esm/interfaces/index.d.ts.map +1 -0
  143. package/bin/esm/interfaces/index.js +2 -0
  144. package/bin/esm/interfaces/index.js.map +1 -0
  145. package/bin/esm/internal/errors.d.ts +41 -0
  146. package/bin/esm/internal/errors.d.ts.map +1 -0
  147. package/bin/esm/internal/errors.js.map +1 -0
  148. package/bin/esm/internal/index.d.ts +3 -0
  149. package/bin/esm/internal/index.d.ts.map +1 -0
  150. package/bin/esm/internal/index.js +3 -0
  151. package/bin/esm/internal/index.js.map +1 -0
  152. package/bin/esm/internal/type-guards.d.ts +11 -0
  153. package/bin/esm/internal/type-guards.d.ts.map +1 -0
  154. package/bin/esm/internal/type-guards.js +20 -0
  155. package/bin/esm/internal/type-guards.js.map +1 -0
  156. package/bin/esm/live-hooks/index.d.ts +8 -0
  157. package/bin/esm/live-hooks/index.d.ts.map +1 -0
  158. package/bin/esm/live-hooks/index.js +8 -0
  159. package/bin/esm/live-hooks/index.js.map +1 -0
  160. package/bin/esm/live-hooks/useLiveCanvas.d.ts +80 -0
  161. package/bin/esm/live-hooks/useLiveCanvas.d.ts.map +1 -0
  162. package/bin/esm/live-hooks/useLiveCanvas.js +238 -0
  163. package/bin/esm/live-hooks/useLiveCanvas.js.map +1 -0
  164. package/bin/esm/live-hooks/useLiveEvent.d.ts +59 -0
  165. package/bin/esm/live-hooks/useLiveEvent.d.ts.map +1 -0
  166. package/bin/{live-hooks → esm/live-hooks}/useLiveEvent.js +41 -5
  167. package/bin/esm/live-hooks/useLiveEvent.js.map +1 -0
  168. package/bin/esm/live-hooks/useLiveFollowMode.d.ts +163 -0
  169. package/bin/esm/live-hooks/useLiveFollowMode.d.ts.map +1 -0
  170. package/bin/{live-hooks → esm/live-hooks}/useLiveFollowMode.js +148 -5
  171. package/bin/esm/live-hooks/useLiveFollowMode.js.map +1 -0
  172. package/bin/esm/live-hooks/useLivePresence.d.ts +76 -0
  173. package/bin/esm/live-hooks/useLivePresence.d.ts.map +1 -0
  174. package/bin/{live-hooks → esm/live-hooks}/useLivePresence.js +71 -13
  175. package/bin/esm/live-hooks/useLivePresence.js.map +1 -0
  176. package/bin/esm/live-hooks/useLiveState.d.ts +66 -0
  177. package/bin/esm/live-hooks/useLiveState.d.ts.map +1 -0
  178. package/bin/{live-hooks → esm/live-hooks}/useLiveState.js +54 -5
  179. package/bin/esm/live-hooks/useLiveState.js.map +1 -0
  180. package/bin/esm/live-hooks/useLiveTimer.d.ts +80 -0
  181. package/bin/esm/live-hooks/useLiveTimer.d.ts.map +1 -0
  182. package/bin/{live-hooks → esm/live-hooks}/useLiveTimer.js +58 -3
  183. package/bin/esm/live-hooks/useLiveTimer.js.map +1 -0
  184. package/bin/esm/live-hooks/useMediaSynchronizer.d.ts +86 -0
  185. package/bin/esm/live-hooks/useMediaSynchronizer.d.ts.map +1 -0
  186. package/bin/{live-hooks → esm/live-hooks}/useMediaSynchronizer.js +65 -4
  187. package/bin/esm/live-hooks/useMediaSynchronizer.js.map +1 -0
  188. package/bin/esm/providers/AzureProvider.d.ts +113 -0
  189. package/bin/esm/providers/AzureProvider.d.ts.map +1 -0
  190. package/bin/{providers → esm/providers}/AzureProvider.js +12 -12
  191. package/bin/esm/providers/AzureProvider.js.map +1 -0
  192. package/bin/esm/providers/LiveShareProvider.d.ts +193 -0
  193. package/bin/esm/providers/LiveShareProvider.d.ts.map +1 -0
  194. package/bin/esm/providers/LiveShareProvider.js +197 -0
  195. package/bin/esm/providers/LiveShareProvider.js.map +1 -0
  196. package/bin/esm/providers/index.d.ts +3 -0
  197. package/bin/esm/providers/index.d.ts.map +1 -0
  198. package/bin/esm/providers/index.js +3 -0
  199. package/bin/esm/providers/index.js.map +1 -0
  200. package/bin/esm/shared-hooks/index.d.ts +7 -0
  201. package/bin/esm/shared-hooks/index.d.ts.map +1 -0
  202. package/bin/esm/shared-hooks/index.js +7 -0
  203. package/bin/esm/shared-hooks/index.js.map +1 -0
  204. package/bin/esm/shared-hooks/internals/tree-node-constants.d.ts +3 -0
  205. package/bin/esm/shared-hooks/internals/tree-node-constants.d.ts.map +1 -0
  206. package/bin/esm/shared-hooks/internals/tree-node-constants.js +3 -0
  207. package/bin/esm/shared-hooks/internals/tree-node-constants.js.map +1 -0
  208. package/bin/esm/shared-hooks/internals/tree-node-types.d.ts +10 -0
  209. package/bin/esm/shared-hooks/internals/tree-node-types.d.ts.map +1 -0
  210. package/bin/esm/shared-hooks/internals/tree-node-types.js +18 -0
  211. package/bin/esm/shared-hooks/internals/tree-node-types.js.map +1 -0
  212. package/bin/esm/shared-hooks/internals/tree-node-utils.d.ts +33 -0
  213. package/bin/esm/shared-hooks/internals/tree-node-utils.d.ts.map +1 -0
  214. package/bin/esm/shared-hooks/internals/tree-node-utils.js +188 -0
  215. package/bin/esm/shared-hooks/internals/tree-node-utils.js.map +1 -0
  216. package/bin/esm/shared-hooks/useDynamicDDS.d.ts +23 -0
  217. package/bin/esm/shared-hooks/useDynamicDDS.d.ts.map +1 -0
  218. package/bin/{shared-hooks → esm/shared-hooks}/useDynamicDDS.js +20 -11
  219. package/bin/esm/shared-hooks/useDynamicDDS.js.map +1 -0
  220. package/bin/esm/shared-hooks/useSharedMap.d.ts +25 -0
  221. package/bin/esm/shared-hooks/useSharedMap.d.ts.map +1 -0
  222. package/bin/{shared-hooks → esm/shared-hooks}/useSharedMap.js +27 -13
  223. package/bin/esm/shared-hooks/useSharedMap.js.map +1 -0
  224. package/bin/esm/shared-hooks/useSharedState.d.ts +22 -0
  225. package/bin/esm/shared-hooks/useSharedState.d.ts.map +1 -0
  226. package/bin/{shared-hooks → esm/shared-hooks}/useSharedState.js +2 -2
  227. package/bin/esm/shared-hooks/useSharedState.js.map +1 -0
  228. package/bin/esm/shared-hooks/useSharedStateRegistry.d.ts +37 -0
  229. package/bin/esm/shared-hooks/useSharedStateRegistry.d.ts.map +1 -0
  230. package/bin/{shared-hooks → esm/shared-hooks}/useSharedStateRegistry.js +27 -19
  231. package/bin/esm/shared-hooks/useSharedStateRegistry.js.map +1 -0
  232. package/bin/esm/shared-hooks/useSharedTree.d.ts +57 -0
  233. package/bin/esm/shared-hooks/useSharedTree.d.ts.map +1 -0
  234. package/bin/esm/shared-hooks/useSharedTree.js +117 -0
  235. package/bin/esm/shared-hooks/useSharedTree.js.map +1 -0
  236. package/bin/esm/shared-hooks/useTreeNode.d.ts +96 -0
  237. package/bin/esm/shared-hooks/useTreeNode.d.ts.map +1 -0
  238. package/bin/esm/shared-hooks/useTreeNode.js +132 -0
  239. package/bin/esm/shared-hooks/useTreeNode.js.map +1 -0
  240. package/bin/esm/types/ActionTypes.d.ts +112 -0
  241. package/bin/esm/types/ActionTypes.d.ts.map +1 -0
  242. package/bin/esm/types/ActionTypes.js.map +1 -0
  243. package/bin/esm/types/PropTypes.d.ts +56 -0
  244. package/bin/esm/types/PropTypes.d.ts.map +1 -0
  245. package/bin/esm/types/PropTypes.js.map +1 -0
  246. package/bin/esm/types/ResultTypes.d.ts +334 -0
  247. package/bin/esm/types/ResultTypes.d.ts.map +1 -0
  248. package/bin/esm/types/ResultTypes.js.map +1 -0
  249. package/bin/esm/types/index.d.ts +4 -0
  250. package/bin/esm/types/index.d.ts.map +1 -0
  251. package/bin/esm/types/index.js +4 -0
  252. package/bin/esm/types/index.js.map +1 -0
  253. package/bin/esm/utils/index.d.ts +2 -0
  254. package/bin/esm/utils/index.d.ts.map +1 -0
  255. package/bin/esm/utils/index.js +2 -0
  256. package/bin/esm/utils/index.js.map +1 -0
  257. package/bin/esm/utils/type-check.d.ts +15 -0
  258. package/bin/esm/utils/type-check.d.ts.map +1 -0
  259. package/bin/esm/utils/type-check.js.map +1 -0
  260. package/package.json +61 -50
  261. package/src/index.ts +6 -6
  262. package/src/interfaces/index.ts +1 -1
  263. package/src/internal/errors.ts +16 -0
  264. package/src/internal/index.ts +2 -2
  265. package/src/internal/type-guards.ts +12 -0
  266. package/src/live-hooks/index.ts +7 -7
  267. package/src/live-hooks/useLiveCanvas.ts +154 -82
  268. package/src/live-hooks/useLiveEvent.ts +43 -7
  269. package/src/live-hooks/useLiveFollowMode.ts +149 -6
  270. package/src/live-hooks/useLivePresence.ts +80 -17
  271. package/src/live-hooks/useLiveState.ts +54 -6
  272. package/src/live-hooks/useLiveTimer.ts +59 -4
  273. package/src/live-hooks/useMediaSynchronizer.ts +70 -5
  274. package/src/providers/AzureProvider.tsx +21 -21
  275. package/src/providers/LiveShareProvider.tsx +126 -12
  276. package/src/providers/index.ts +2 -2
  277. package/src/shared-hooks/index.ts +6 -4
  278. package/src/shared-hooks/internals/tree-node-constants.ts +2 -0
  279. package/src/shared-hooks/internals/tree-node-types.ts +26 -0
  280. package/src/shared-hooks/internals/tree-node-utils.ts +269 -0
  281. package/src/shared-hooks/useDynamicDDS.ts +28 -17
  282. package/src/shared-hooks/useSharedMap.ts +42 -17
  283. package/src/shared-hooks/useSharedState.ts +6 -3
  284. package/src/shared-hooks/useSharedStateRegistry.ts +44 -22
  285. package/src/shared-hooks/useSharedTree.ts +144 -0
  286. package/src/shared-hooks/useTreeNode.ts +147 -0
  287. package/src/types/ActionTypes.ts +13 -9
  288. package/src/types/PropTypes.ts +57 -0
  289. package/src/types/ResultTypes.ts +71 -17
  290. package/src/types/index.ts +3 -3
  291. package/src/utils/index.ts +1 -1
  292. package/tsconfig.cjs.json +14 -0
  293. package/tsconfig.json +65 -70
  294. package/.nycrc.json +0 -10
  295. package/bin/index.d.ts +0 -7
  296. package/bin/index.d.ts.map +0 -1
  297. package/bin/index.js +0 -7
  298. package/bin/index.js.map +0 -1
  299. package/bin/interfaces/LiveInterfaceExtensions.d.ts.map +0 -1
  300. package/bin/interfaces/LiveInterfaceExtensions.js.map +0 -1
  301. package/bin/interfaces/index.d.ts +0 -2
  302. package/bin/interfaces/index.d.ts.map +0 -1
  303. package/bin/interfaces/index.js +0 -2
  304. package/bin/interfaces/index.js.map +0 -1
  305. package/bin/internal/errors.d.ts.map +0 -1
  306. package/bin/internal/errors.js.map +0 -1
  307. package/bin/internal/index.d.ts +0 -3
  308. package/bin/internal/index.d.ts.map +0 -1
  309. package/bin/internal/index.js +0 -3
  310. package/bin/internal/index.js.map +0 -1
  311. package/bin/internal/type-guards.d.ts.map +0 -1
  312. package/bin/internal/type-guards.js +0 -8
  313. package/bin/internal/type-guards.js.map +0 -1
  314. package/bin/live-hooks/index.d.ts +0 -8
  315. package/bin/live-hooks/index.d.ts.map +0 -1
  316. package/bin/live-hooks/index.js +0 -8
  317. package/bin/live-hooks/index.js.map +0 -1
  318. package/bin/live-hooks/useLiveCanvas.d.ts +0 -29
  319. package/bin/live-hooks/useLiveCanvas.d.ts.map +0 -1
  320. package/bin/live-hooks/useLiveCanvas.js +0 -160
  321. package/bin/live-hooks/useLiveCanvas.js.map +0 -1
  322. package/bin/live-hooks/useLiveEvent.d.ts.map +0 -1
  323. package/bin/live-hooks/useLiveEvent.js.map +0 -1
  324. package/bin/live-hooks/useLiveFollowMode.d.ts +0 -24
  325. package/bin/live-hooks/useLiveFollowMode.d.ts.map +0 -1
  326. package/bin/live-hooks/useLiveFollowMode.js.map +0 -1
  327. package/bin/live-hooks/useLivePresence.d.ts +0 -26
  328. package/bin/live-hooks/useLivePresence.d.ts.map +0 -1
  329. package/bin/live-hooks/useLivePresence.js.map +0 -1
  330. package/bin/live-hooks/useLiveState.d.ts.map +0 -1
  331. package/bin/live-hooks/useLiveState.js.map +0 -1
  332. package/bin/live-hooks/useLiveTimer.d.ts.map +0 -1
  333. package/bin/live-hooks/useLiveTimer.js.map +0 -1
  334. package/bin/live-hooks/useMediaSynchronizer.d.ts +0 -25
  335. package/bin/live-hooks/useMediaSynchronizer.d.ts.map +0 -1
  336. package/bin/live-hooks/useMediaSynchronizer.js.map +0 -1
  337. package/bin/providers/AzureProvider.d.ts.map +0 -1
  338. package/bin/providers/AzureProvider.js.map +0 -1
  339. package/bin/providers/LiveShareProvider.d.ts.map +0 -1
  340. package/bin/providers/LiveShareProvider.js +0 -87
  341. package/bin/providers/LiveShareProvider.js.map +0 -1
  342. package/bin/providers/index.d.ts +0 -3
  343. package/bin/providers/index.d.ts.map +0 -1
  344. package/bin/providers/index.js +0 -3
  345. package/bin/providers/index.js.map +0 -1
  346. package/bin/shared-hooks/index.d.ts +0 -5
  347. package/bin/shared-hooks/index.d.ts.map +0 -1
  348. package/bin/shared-hooks/index.js +0 -5
  349. package/bin/shared-hooks/index.js.map +0 -1
  350. package/bin/shared-hooks/useDynamicDDS.d.ts.map +0 -1
  351. package/bin/shared-hooks/useDynamicDDS.js.map +0 -1
  352. package/bin/shared-hooks/useSharedMap.d.ts.map +0 -1
  353. package/bin/shared-hooks/useSharedMap.js.map +0 -1
  354. package/bin/shared-hooks/useSharedState.d.ts.map +0 -1
  355. package/bin/shared-hooks/useSharedState.js.map +0 -1
  356. package/bin/shared-hooks/useSharedStateRegistry.d.ts.map +0 -1
  357. package/bin/shared-hooks/useSharedStateRegistry.js.map +0 -1
  358. package/bin/types/ActionTypes.d.ts.map +0 -1
  359. package/bin/types/ActionTypes.js.map +0 -1
  360. package/bin/types/PropTypes.d.ts +0 -8
  361. package/bin/types/PropTypes.d.ts.map +0 -1
  362. package/bin/types/PropTypes.js.map +0 -1
  363. package/bin/types/ResultTypes.d.ts.map +0 -1
  364. package/bin/types/ResultTypes.js.map +0 -1
  365. package/bin/types/index.d.ts +0 -4
  366. package/bin/types/index.d.ts.map +0 -1
  367. package/bin/types/index.js +0 -4
  368. package/bin/types/index.js.map +0 -1
  369. package/bin/utils/index.d.ts +0 -2
  370. package/bin/utils/index.d.ts.map +0 -1
  371. package/bin/utils/index.js +0 -2
  372. package/bin/utils/index.js.map +0 -1
  373. package/bin/utils/type-check.d.ts.map +0 -1
  374. package/bin/utils/type-check.js.map +0 -1
  375. package/tsconfig.build.json +0 -6
  376. /package/bin/{interfaces → cjs/interfaces}/LiveInterfaceExtensions.d.ts +0 -0
  377. /package/bin/{utils → cjs/utils}/type-check.d.ts +0 -0
  378. /package/bin/{interfaces → esm/interfaces}/LiveInterfaceExtensions.js +0 -0
  379. /package/bin/{internal → esm/internal}/errors.js +0 -0
  380. /package/bin/{types → esm/types}/ActionTypes.js +0 -0
  381. /package/bin/{types → esm/types}/PropTypes.js +0 -0
  382. /package/bin/{types → esm/types}/ResultTypes.js +0 -0
  383. /package/bin/{utils → esm/utils}/type-check.js +0 -0
@@ -0,0 +1,188 @@
1
+ import { proxiedChildrenKey, rawTNodeKey } from "./tree-node-constants.js";
2
+ import { isCustomProxyHandler, isTreeNode, isProxy, } from "./tree-node-types.js";
3
+ import { Tree } from "fluid-framework";
4
+ // Exported utils
5
+ /**
6
+ * @internal
7
+ * Build a proxied version of a node and set its value to the treeMap provided
8
+ *
9
+ * @param rawNode the raw proxy node exposed by Fluid
10
+ * @param treeMap a map where Fluid's proxy node is mapped to our proxied node
11
+ * @returns TNode instance
12
+ */
13
+ export function buildProxy(rawNode, treeMap) {
14
+ var _a;
15
+ const previousProxy = treeMap.get(rawNode);
16
+ const previousProxyHandler = previousProxy
17
+ ? getCustomProxyHandler(previousProxy)
18
+ : undefined;
19
+ const proxyHandler = {
20
+ // Add some extra stuff into the handler so we can store the original Fluid TreeNode and access it later
21
+ // Without overriding the rest of the getters in the object.
22
+ [rawTNodeKey]: rawNode,
23
+ [proxiedChildrenKey]: (_a = previousProxyHandler === null || previousProxyHandler === void 0 ? void 0 : previousProxyHandler[proxiedChildrenKey]) !== null && _a !== void 0 ? _a : {},
24
+ get: (target, prop, _) => {
25
+ if (prop === "[[Handler]]") {
26
+ return proxyHandler;
27
+ }
28
+ if (typeof prop === "string" &&
29
+ proxyHandler[proxiedChildrenKey][prop]) {
30
+ return proxyHandler[proxiedChildrenKey][prop];
31
+ }
32
+ // pass in the rawNode so Fluid doesn't get confused by our proxy object and can find the flex node
33
+ const value = Reflect.get(target, prop, rawNode);
34
+ return typeof value === "function" &&
35
+ typeof prop === "string" &&
36
+ // TODO: need a better way of identifying which types of functions need to be proxied
37
+ // This is because if a developer uses an array prototype function, we need to return proxied
38
+ // objects so React can detect changes to those nodes...
39
+ !["map", "flatMap", "filter", "find", "indexOf"].includes(prop)
40
+ ? value.bind(rawNode)
41
+ : value;
42
+ },
43
+ set(target, p, newValue, _) {
44
+ return Reflect.set(target, p, newValue, rawNode);
45
+ },
46
+ };
47
+ const proxy = new Proxy(rawNode, proxyHandler);
48
+ // Track the proxy for the rawNode
49
+ treeMap.set(rawNode, proxy);
50
+ // Set raw node getter so we can access it before things like Tree.on
51
+ return proxy;
52
+ }
53
+ /**
54
+ * @internal
55
+ * Set up listeners for a given TreeNode.
56
+ * Will recursively call this function for all children nodes of each children until there are no more child nodes.
57
+ *
58
+ * @param parentRawNode raw parent node
59
+ * @param rootNodeForListener root node being listened to in useTreeNode
60
+ * @param treeMap a map where Fluid's proxy node is mapped to our proxied node
61
+ * @param unsubscribeListeners list of unsubscribe listeners, where we set the unsubscribe callbacks
62
+ * @param setProxyNode setter to set the root proxy node listened to in useTreeNode
63
+ */
64
+ export function setUpListenersForNodeChildren(parentRawNode, rootNodeForListener, treeMap, unsubscribeListeners, setProxyNode) {
65
+ let entries = Object.entries(parentRawNode);
66
+ for (let i = 0; i < entries.length; i++) {
67
+ const [key, entry] = entries[i];
68
+ if (!entry ||
69
+ ["string", "boolean", "number", "function"].includes(typeof entry) ||
70
+ !isTreeNode(entry)) {
71
+ continue;
72
+ }
73
+ const rawEntry = getRawNode(entry);
74
+ const onNodeChanged = () => {
75
+ onTreeNodeChanged(key, rawEntry, rootNodeForListener, treeMap, setProxyNode);
76
+ };
77
+ const unsubscribe = Tree.on(rawEntry, "nodeChanged", onNodeChanged);
78
+ unsubscribeListeners.push(unsubscribe);
79
+ // Recursively listen to children nodes of this node
80
+ setUpListenersForNodeChildren(rawEntry, rootNodeForListener, treeMap, unsubscribeListeners, setProxyNode);
81
+ }
82
+ }
83
+ /**
84
+ * @internal
85
+ * Fluid only knows how to work with their proxied version of a TreeNode.
86
+ * We store a reference to that node in our proxied instances so we can easily use it when working with Fluid APIs.
87
+ *
88
+ * @param node get the raw node from the proxy
89
+ * @returns the raw proxied node that Fluid expects
90
+ */
91
+ export function getRawNode(node) {
92
+ if (isProxy(node)) {
93
+ return getRawNodeFromProxy(node);
94
+ }
95
+ return node;
96
+ }
97
+ // Non public utils
98
+ /**
99
+ * Callback for when a tree node changed
100
+ *
101
+ * @param key key where the object is stored in the parent
102
+ * @param rawNode the raw node that changed
103
+ * @param rootNodeForListener the root node that is being listened to in useTreeNode
104
+ * @param treeMap a map where Fluid's proxy node is mapped to our proxied node
105
+ * @param setProxyNode setter to set the root proxy node listened to in useTreeNode
106
+ */
107
+ function onTreeNodeChanged(key, rawNode, rootNodeForListener, treeMap, setProxyNode) {
108
+ const proxyNode = buildProxy(rawNode, treeMap);
109
+ const parent = Tree.parent(rawNode);
110
+ if (!parent) {
111
+ throw new Error("useTreeNode onTreeNodeChanged: no parent found for rawParentNode");
112
+ }
113
+ proxyParentForNode(key, parent, proxyNode, rootNodeForListener, treeMap, setProxyNode);
114
+ }
115
+ /**
116
+ * Proxies the parent and sets reference to the child node that changed.
117
+ *
118
+ * @param key key where the object is referenced in its parent node
119
+ * @param rawParentNode raw parent tree node
120
+ * @param proxyNode proxied instance of the node that changed
121
+ * @param rootNodeForListener root node listened to in useTreeNode
122
+ * @param treeMap a map where Fluid's proxy node is mapped to our proxied node
123
+ * @param setProxyNode setter to set the root proxy node listened to in useTreeNode
124
+ */
125
+ function proxyParentForNode(key, rawParentNode, proxyNode, rootNodeForListener, treeMap, setProxyNode) {
126
+ const parentProxy = buildProxy(rawParentNode, treeMap);
127
+ let parentProxyHandler = getCustomProxyHandler(parentProxy);
128
+ if (!parentProxyHandler) {
129
+ throw new Error("useTreeNode proxyParentForNode: unexpected error, should always find valid proxy handler");
130
+ }
131
+ parentProxyHandler[proxiedChildrenKey][key] = proxyNode;
132
+ if (rawParentNode === rootNodeForListener) {
133
+ setProxyNode(parentProxy);
134
+ }
135
+ else {
136
+ const parentOfParent = Tree.parent(rawParentNode);
137
+ if (!parentOfParent) {
138
+ throw new Error("useTreeNode proxyParentForNode: no parent found for rawParentNode");
139
+ }
140
+ const parentKey = findKeyOfNode(rawParentNode, parentOfParent);
141
+ proxyParentForNode(parentKey, parentOfParent, parentProxy, rootNodeForListener, treeMap, setProxyNode);
142
+ }
143
+ }
144
+ /**
145
+ * Returns key where parent[key] == nodeToCheck
146
+ *
147
+ * @param nodeToCheck tree node to check
148
+ * @param parent parent node where nodeToCheck is a child of
149
+ * @returns the key for node
150
+ */
151
+ function findKeyOfNode(nodeToCheck, parent) {
152
+ let entries = Object.entries(parent);
153
+ for (let i = 0; i < entries.length; i++) {
154
+ const [key, entry] = entries[i];
155
+ if (!entry ||
156
+ ["string", "boolean", "number", "function"].includes(typeof entry) ||
157
+ !isTreeNode(entry)) {
158
+ continue;
159
+ }
160
+ if (entry === nodeToCheck)
161
+ return key;
162
+ }
163
+ throw new Error("Did not find node as a child of parent");
164
+ }
165
+ // Type utils
166
+ /**
167
+ * Gets the proxy handler for a given TreeNode, assuming `isCustomProxyHandler` returns true.
168
+ * @param proxy the proxied TreeNode to get the handler for.
169
+ * @returns the handler if valid, otherwise undefined
170
+ */
171
+ function getCustomProxyHandler(proxy) {
172
+ const handler = proxy["[[Handler]]"];
173
+ if (isCustomProxyHandler(handler)) {
174
+ return handler;
175
+ }
176
+ return undefined;
177
+ }
178
+ /**
179
+ * Gets the raw node for a given proxied tree node
180
+ *
181
+ * @param proxy the proxied TreeNode to get the raw node for
182
+ * @returns the raw node if valid, otherwise undefined
183
+ */
184
+ function getRawNodeFromProxy(proxy) {
185
+ var _a;
186
+ return (_a = getCustomProxyHandler(proxy)) === null || _a === void 0 ? void 0 : _a[rawTNodeKey];
187
+ }
188
+ //# sourceMappingURL=tree-node-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-node-utils.js","sourceRoot":"","sources":["../../../../src/shared-hooks/internals/tree-node-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { FluidObject, IFluidLoadable } from "@fluidframework/core-interfaces";
6
+ import { SharedObjectKind } from "fluid-framework";
7
+ /**
8
+ * Hook to gets or creates a DDS that corresponds to a given uniqueKey string.
9
+ *
10
+ * @remarks
11
+ * This hook can only be used in a child component of `<LiveShareProvider>` or `<AzureProvider>`.
12
+ *
13
+ * @template T Type of Fluid SharedObjectKind type to load. Must conform to IFluidLoadable interface.
14
+ * @param uniqueKey uniqueKey value for the data object
15
+ * @param objectKind Fluid SharedObjectKind<T> to create/load.
16
+ * @param onFirstInitialize Optional. Callback function for when the DDS is first loaded
17
+ * @returns the DDS object, which is of type T when loaded and undefined while loading
18
+ */
19
+ export declare function useDynamicDDS<T extends IFluidLoadable = FluidObject<any> & IFluidLoadable>(uniqueKey: string, objectClass: SharedObjectKind<T>, onFirstInitialize?: (dds: T) => void): {
20
+ dds: T | undefined;
21
+ error: Error | undefined;
22
+ };
23
+ //# sourceMappingURL=useDynamicDDS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDynamicDDS.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useDynamicDDS.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CACzB,CAAC,SAAS,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,cAAc,EAE5D,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAChC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GACrC;IACC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC5B,CA6DA"}
@@ -12,41 +12,53 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
12
12
  });
13
13
  };
14
14
  import React from "react";
15
- import { useFluidObjectsContext } from "../providers";
15
+ import { useFluidObjectsContext } from "../providers/AzureProvider.js";
16
16
  /**
17
17
  * Hook to gets or creates a DDS that corresponds to a given uniqueKey string.
18
18
  *
19
19
  * @remarks
20
20
  * This hook can only be used in a child component of `<LiveShareProvider>` or `<AzureProvider>`.
21
21
  *
22
- * @template T Type of Fluid LoadableObjectClass type to load. Must conform to IFluidLoadable interface.
22
+ * @template T Type of Fluid SharedObjectKind type to load. Must conform to IFluidLoadable interface.
23
23
  * @param uniqueKey uniqueKey value for the data object
24
- * @param loadableObjectClass Fluid LoadableObjectClass<T> to create/load.
24
+ * @param objectKind Fluid SharedObjectKind<T> to create/load.
25
25
  * @param onFirstInitialize Optional. Callback function for when the DDS is first loaded
26
26
  * @returns the DDS object, which is of type T when loaded and undefined while loading
27
27
  */
28
- export function useDynamicDDS(uniqueKey, loadableObjectClass, onFirstInitialize) {
28
+ export function useDynamicDDS(uniqueKey, objectClass, onFirstInitialize) {
29
29
  const [dds, setDDS] = React.useState();
30
30
  const [error, setError] = React.useState();
31
31
  /**
32
32
  * Import container and DDS object register callbacks from AzureProvider.
33
33
  */
34
34
  const { container, clientRef } = useFluidObjectsContext();
35
+ const mountedRef = React.useRef(false);
36
+ React.useEffect(() => {
37
+ mountedRef.current = true;
38
+ return () => {
39
+ mountedRef.current = false;
40
+ };
41
+ }, []);
42
+ const getDDSPromisesRef = React.useRef(new Map());
35
43
  /**
36
44
  * Once container is available, this effect will register the setter method so that the DDS loaded
37
45
  * from `dynamicObjects` that matches `uniqueKey` can be passed back to this hook. If one does not yet exist,
38
46
  * a new DDS is automatically created. If multiple users try to create a DDS at the same time when this component first
39
- * mounts, `live-share-turbo` ensures it will ultimately self correct using last-writer wins.
47
+ * mounts, `live-share` ensures it will ultimately self correct using last-writer wins.
40
48
  */
41
49
  React.useEffect(() => {
42
50
  if (container === undefined)
43
51
  return;
44
- let mounted = true;
45
52
  // Callback method to set the `initialData` into the map when the DDS is first created.
46
53
  const onGetDDS = () => __awaiter(this, void 0, void 0, function* () {
47
54
  try {
48
- const dds = yield clientRef.current.getDDS(uniqueKey, loadableObjectClass, onFirstInitialize);
49
- if (mounted) {
55
+ let getPromise = getDDSPromisesRef.current.get(uniqueKey);
56
+ if (!getPromise) {
57
+ getPromise = clientRef.current.getDDS(uniqueKey, objectClass, onFirstInitialize);
58
+ getDDSPromisesRef.current.set(uniqueKey, getPromise);
59
+ }
60
+ const dds = yield getPromise;
61
+ if (mountedRef.current) {
50
62
  setDDS(dds);
51
63
  }
52
64
  }
@@ -60,9 +72,6 @@ export function useDynamicDDS(uniqueKey, loadableObjectClass, onFirstInitialize)
60
72
  }
61
73
  });
62
74
  onGetDDS();
63
- return () => {
64
- mounted = false;
65
- };
66
75
  }, [container, uniqueKey, onFirstInitialize]);
67
76
  return {
68
77
  dds,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDynamicDDS.js","sourceRoot":"","sources":["../../../src/shared-hooks/useDynamicDDS.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAGzB,SAAiB,EACjB,WAAgC,EAChC,iBAAoC;IAKpC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAK,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAS,CAAC;IAClD;;OAEG;IACH,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAE1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,OAAO,GAAG,EAAE;YACR,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAA0B,IAAI,GAAG,EAAE,CAAC,CAAC;IAE3E;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,uFAAuF;QACvF,MAAM,QAAQ,GAAG,GAAS,EAAE;YACxB,IAAI,CAAC;gBACD,IAAI,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CACjC,SAAS,EACT,WAAW,EACX,iBAAiB,CACpB,CAAC;oBACF,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC;gBAC7B,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;YACL,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACJ,QAAQ,CACJ,IAAI,KAAK,CACL,gEAAgE,CACnE,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC,CAAA,CAAC;QACF,QAAQ,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE9C,OAAO;QACH,GAAG;QACH,KAAK;KACR,CAAC;AACN,CAAC"}
@@ -0,0 +1,25 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { IUseSharedMapResults, SharedMapInitialData } from "../types/index.js";
6
+ /**
7
+ * @deprecated use {@link useSharedTree} instead.
8
+ *
9
+ * React hook for using a Fluid `SharedMap`.
10
+ *
11
+ * @remarks
12
+ * The primary benefit of using the `useSharedMap` hook rather than the Fluid `SharedMap`
13
+ * directly is that it integrates nicely with React state and automates repetitive tasks.
14
+ * If you want to use `SharedMap` this hook creates directly, you can do that as well.
15
+ * This hook can only be used in a child component of `<LiveShareProvider>` or `<AzureProvider>`.
16
+ *
17
+ * @template TData Optional typing for objects stored in the SharedMap. Default is `any` type.
18
+ * @param uniqueKey the unique key for the `SharedMap`. If one does not yet exist, a new `SharedMap`
19
+ * will be created, otherwise it will use the existing one.
20
+ * @param initialData a JS Map, entries array, or JSON object to insert into the `SharedMap` when creating
21
+ * the DDS for the first time.
22
+ * @returns the Fluid `sharedMap`.
23
+ */
24
+ export declare function useSharedMap<TData = any>(uniqueKey: string, initialData?: SharedMapInitialData<TData>): IUseSharedMapResults<TData>;
25
+ //# sourceMappingURL=useSharedMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedMap.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAU/E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAG,GAAG,EACpC,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,GAC1C,oBAAoB,CAAC,KAAK,CAAC,CAyH7B"}
@@ -3,12 +3,14 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  import React from "react";
6
- import { isEntries, isJSON, isMap } from "../utils";
7
- import { useDynamicDDS } from "./useDynamicDDS";
8
- import { SharedMap } from "fluid-framework";
9
- import { useFluidObjectsContext } from "../providers";
10
- import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } from "../internal";
6
+ import { isEntries, isJSON, isMap } from "../utils/index.js";
7
+ import { useDynamicDDS } from "./useDynamicDDS.js";
8
+ import { SharedMap } from "fluid-framework/legacy";
9
+ import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } from "../internal/errors.js";
10
+ import { useFluidObjectsContext } from "../providers/AzureProvider.js";
11
11
  /**
12
+ * @deprecated use {@link useSharedTree} instead.
13
+ *
12
14
  * React hook for using a Fluid `SharedMap`.
13
15
  *
14
16
  * @remarks
@@ -22,13 +24,9 @@ import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } fr
22
24
  * will be created, otherwise it will use the existing one.
23
25
  * @param initialData a JS Map, entries array, or JSON object to insert into the `SharedMap` when creating
24
26
  * the DDS for the first time.
25
- * @returns stateful `map` entries, `setEntry` callback, `deleteEntry` callback, and the Fluid `sharedMap`.
27
+ * @returns the Fluid `sharedMap`.
26
28
  */
27
29
  export function useSharedMap(uniqueKey, initialData) {
28
- /**
29
- * Stateful readonly map (user facing) with most recent values from `SharedMap` and its setter method.
30
- */
31
- const [map, setMap] = React.useState(getInitialData(initialData));
32
30
  const onFirstInitialize = React.useCallback((newDDS) => {
33
31
  /**
34
32
  * Callback method to set the `initialData` into the map when the `SharedMap` is first created.
@@ -43,6 +41,18 @@ export function useSharedMap(uniqueKey, initialData) {
43
41
  */
44
42
  const { dds: sharedMap } = useDynamicDDS(uniqueKey, SharedMap, onFirstInitialize);
45
43
  const { container } = useFluidObjectsContext();
44
+ /**
45
+ * User facing: get a value from the Fluid `SharedMap`.
46
+ */
47
+ const getEntry = React.useCallback((key) => {
48
+ if (!container) {
49
+ throw new ActionContainerNotJoinedError("sharedMap", "getEntry");
50
+ }
51
+ if (sharedMap === undefined) {
52
+ throw new ActionLiveDataObjectUndefinedError("sharedMap", "getEntry");
53
+ }
54
+ return sharedMap.get(key);
55
+ }, [container, sharedMap]);
46
56
  /**
47
57
  * User facing: set a value to the Fluid `SharedMap`.
48
58
  */
@@ -67,13 +77,17 @@ export function useSharedMap(uniqueKey, initialData) {
67
77
  }
68
78
  sharedMap.delete(key);
69
79
  }, [container, sharedMap]);
80
+ const [sharedMapProxy, setSharedMapProxy] = React.useState();
70
81
  // Setup change listeners, initial values, etc.
71
82
  React.useEffect(() => {
72
83
  if (!sharedMap)
73
84
  return;
85
+ setSharedMapProxy(sharedMap);
86
+ class SharedMapProxyHandler {
87
+ }
74
88
  // Register valueChanged listener for `SharedMap`.
75
89
  const onValueChanged = () => {
76
- setMap(new Map(sharedMap.entries()));
90
+ setSharedMapProxy(new Proxy(sharedMap, new SharedMapProxyHandler()));
77
91
  };
78
92
  sharedMap.on("valueChanged", onValueChanged);
79
93
  // Get initial values from `SharedMap`.
@@ -84,10 +98,10 @@ export function useSharedMap(uniqueKey, initialData) {
84
98
  };
85
99
  }, [sharedMap]);
86
100
  return {
87
- map,
101
+ sharedMap: sharedMapProxy,
102
+ getEntry,
88
103
  setEntry,
89
104
  deleteEntry,
90
- sharedMap,
91
105
  };
92
106
  }
93
107
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedMap.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACH,6BAA6B,EAC7B,kCAAkC,GACrC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CACxB,SAAiB,EACjB,WAAyC;IAEzC,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACvC,CAAC,MAAiB,EAAQ,EAAE;QACxB;;;WAGG;QACH,cAAc,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC,EACD,CAAC,WAAW,CAAC,CAChB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,aAAa,CACpC,SAAS,EACT,SAAS,EACT,iBAAiB,CACpB,CAAC;IAEF,MAAM,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAE/C;;OAEG;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,GAAW,EAAE,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,6BAA6B,CACnC,WAAW,EACX,UAAU,CACb,CAAC;QACN,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,kCAAkC,CACxC,WAAW,EACX,UAAU,CACb,CAAC;QACN,CAAC;QACD,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,SAAS,EAAE,SAAS,CAAC,CACzB,CAAC;IAEF;;OAEG;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,GAAW,EAAE,KAAY,EAAE,EAAE;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,6BAA6B,CACnC,WAAW,EACX,UAAU,CACb,CAAC;QACN,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,kCAAkC,CACxC,WAAW,EACX,UAAU,CACb,CAAC;QACN,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,SAAS,EAAE,SAAS,CAAC,CACzB,CAAC;IAEF;;OAEG;IACH,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACjC,CAAC,GAAW,EAAE,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,6BAA6B,CACnC,WAAW,EACX,aAAa,CAChB,CAAC;QACN,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,kCAAkC,CACxC,WAAW,EACX,aAAa,CAChB,CAAC;QACN,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,EACD,CAAC,SAAS,EAAE,SAAS,CAAC,CACzB,CAAC;IAEF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAa,CAAC;IAExE,+CAA+C;IAC/C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAE7B,MAAM,qBAAqB;SAAsC;QAEjE,kDAAkD;QAClD,MAAM,cAAc,GAAG,GAAG,EAAE;YACxB,iBAAiB,CACb,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,qBAAqB,EAAE,CAAC,CACpD,CAAC;QACN,CAAC,CAAC;QACF,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAC7C,uCAAuC;QACvC,cAAc,EAAE,CAAC;QAEjB,OAAO,GAAG,EAAE;YACR,gCAAgC;YAChC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO;QACH,SAAS,EAAE,cAAc;QACzB,QAAQ;QACR,QAAQ;QACR,WAAW;KACd,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACnB,WAAwC;IAExC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,GAAG,CAAgB,WAAW,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAiC,MAAM,CAAC,IAAI,CACpD,WAAW,CACd,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACV,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,GAAG,CAAgB,MAAM,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,GAAG,EAAiB,CAAC;AACpC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { DisposeSharedStateAction, SetSharedStateAction } from "../types/index.js";
6
+ /**
7
+ * Inspired by React's `useState` hook, `useSharedState` makes it easy to synchronize state in your app.
8
+ *
9
+ * @remarks
10
+ * Values set through this state is automatically attached to a `SharedMap` that the `AzureProvider`
11
+ * creates. If you are synchronizing complex data structures that multiple users will be setting simultaneously,
12
+ * consider using an optimized hook for your data structure (e.g., `useSharedMap`, `useSharedString`, etc.).
13
+ * This hook can only be used in a child component of `<LiveShareProvider>` or `<AzureProvider>`.
14
+ *
15
+ * @template S Typing for objects stored associated with the `uniqueKey`.
16
+ * @param uniqueKey the unique key for a `SharedMap`. If you use the same key for multiple components, those components will reference the same state.
17
+ * @param initialState a default state for the `SharedMap`.
18
+ *
19
+ * @returns a stateful value, the function to update it, and an optional dispose method to delete it from the `SharedMap`.
20
+ */
21
+ export declare function useSharedState<S = any>(uniqueKey: string, initialState: S): [S, SetSharedStateAction<S>, DisposeSharedStateAction];
22
+ //# sourceMappingURL=useSharedState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedState.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,wBAAwB,EACxB,oBAAoB,EACvB,MAAM,mBAAmB,CAAC;AAI3B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,GAAG,EAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,GAChB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAkExD"}
@@ -3,9 +3,9 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  import React from "react";
6
- import { useFluidObjectsContext } from "../providers";
6
+ import { useFluidObjectsContext } from "../providers/index.js";
7
7
  import { v4 as uuid } from "uuid";
8
- import { isPrevStateCallback } from "../internal";
8
+ import { isPrevStateCallback } from "../internal/index.js";
9
9
  /**
10
10
  * Inspired by React's `useState` hook, `useSharedState` makes it easy to synchronize state in your app.
11
11
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedState.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC1B,SAAiB,EACjB,YAAe;IAEf;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpE;;OAEG;IACH,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C;;OAEG;IACH,MAAM,EACF,4BAA4B,EAC5B,8BAA8B,EAC9B,iBAAiB,EACjB,iBAAiB,GACpB,GAAG,sBAAsB,EAAE,CAAC;IAE7B;;OAEG;IACH,MAAM,cAAc,GAA4B,KAAK,CAAC,WAAW,CAC7D,CAAC,KAAgC,EAAE,EAAE;QACjC,aAAa,CAAC,CAAC,SAAS,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,mBAAmB,CAAI,KAAK,CAAC;gBAC5C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;gBAClB,CAAC,CAAC,KAAK,CAAC;YACZ,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACzC,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC,EACD,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAChD,CAAC;IAEF;;OAEG;IACH,MAAM,kBAAkB,GACpB,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnB,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEvC;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,4BAA4B,CACxB,SAAS,EACT,cAAc,CAAC,OAAO,EACtB,aAAa,CAChB,CAAC;QACF,OAAO,GAAG,EAAE;YACR,8BAA8B,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC,CAAC;IACN,CAAC,EAAE;QACC,SAAS;QACT,4BAA4B;QAC5B,8BAA8B;KACjC,CAAC,CAAC;IAEH,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,37 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { DeleteSharedStateAction, IAzureContainerResults, RegisterSharedSetStateAction, UnregisterSharedSetStateAction, UpdateSharedStateAction } from "../types/index.js";
6
+ /**
7
+ * Response for the {@link useSharedStateRegistry} hook.
8
+ */
9
+ export interface ISharedStateRegistryResponse {
10
+ /**
11
+ * Register a set state action callback
12
+ */
13
+ registerSharedSetStateAction: RegisterSharedSetStateAction;
14
+ /**
15
+ * Unregister a set state action callback
16
+ */
17
+ unregisterSharedSetStateAction: UnregisterSharedSetStateAction;
18
+ /**
19
+ * Setter callback to update the shared state
20
+ */
21
+ updateSharedState: UpdateSharedStateAction;
22
+ /**
23
+ * Delete a shared state value
24
+ */
25
+ deleteSharedState: DeleteSharedStateAction;
26
+ }
27
+ /**
28
+ * Hook used internally to keep track of the SharedSetStateActionMap for each unique key. It sets state values for provided keys and updates components listening to the values.
29
+ *
30
+ * @remarks
31
+ * Use this if you are building a custom `LiveShareProvider` or `AzureProvider` implementation in your app.
32
+ *
33
+ * @param results IAzureContainerResults response or undefined
34
+ * @returns ISharedStateRegistryResponse object
35
+ */
36
+ export declare const useSharedStateRegistry: (results: IAzureContainerResults | undefined) => ISharedStateRegistryResponse;
37
+ //# sourceMappingURL=useSharedStateRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedStateRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACH,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAE5B,8BAA8B,EAC9B,uBAAuB,EAC1B,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D;;OAEG;IACH,8BAA8B,EAAE,8BAA8B,CAAC;IAC/D;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,YACtB,sBAAsB,GAAG,SAAS,KAC5C,4BAgHF,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  import React from "react";
6
+ import { getRootDataObject, getRootDirectory, TurboDirectory, TurboStateMap, } from "@microsoft/live-share/internal";
6
7
  /**
7
8
  * Hook used internally to keep track of the SharedSetStateActionMap for each unique key. It sets state values for provided keys and updates components listening to the values.
8
9
  *
@@ -14,6 +15,7 @@ import React from "react";
14
15
  */
15
16
  export const useSharedStateRegistry = (results) => {
16
17
  const registeredSharedSetStateActionMapRef = React.useRef(new Map());
18
+ const stateMap = useStateMap(results === null || results === void 0 ? void 0 : results.container);
17
19
  /**
18
20
  * @see ISharedStateRegistryResponse.registerSharedSetStateAction
19
21
  */
@@ -30,12 +32,11 @@ export const useSharedStateRegistry = (results) => {
30
32
  registeredSharedSetStateActionMapRef.current.set(uniqueKey, actionsMap);
31
33
  }
32
34
  // Set initial values, if known
33
- const stateMap = results === null || results === void 0 ? void 0 : results.container.initialObjects.TURBO_STATE_MAP;
34
35
  const initialValue = stateMap === null || stateMap === void 0 ? void 0 : stateMap.get(uniqueKey);
35
36
  if (initialValue) {
36
37
  setLocalStateAction(initialValue);
37
38
  }
38
- }, [results]);
39
+ }, [stateMap]);
39
40
  /**
40
41
  * @see ISharedStateRegistryResponse.unregisterSharedSetStateAction
41
42
  */
@@ -49,34 +50,26 @@ export const useSharedStateRegistry = (results) => {
49
50
  * @see ISharedStateRegistryResponse.updateSharedState
50
51
  */
51
52
  const updateSharedState = React.useCallback((uniqueKey, value) => {
52
- if (!results)
53
+ if (!stateMap)
53
54
  return;
54
- const { container } = results;
55
- const stateMap = container.initialObjects
56
- .TURBO_STATE_MAP;
57
- stateMap.set(uniqueKey, value);
58
- }, [results]);
55
+ stateMap === null || stateMap === void 0 ? void 0 : stateMap.set(uniqueKey, value);
56
+ }, [stateMap]);
59
57
  /**
60
58
  * @see ISharedStateRegistryResponse.deleteSharedState
61
59
  */
62
60
  const deleteSharedState = React.useCallback((uniqueKey) => {
63
- if (!results)
61
+ if (!stateMap)
64
62
  return;
65
- const { container } = results;
66
63
  let actionsMap = registeredSharedSetStateActionMapRef.current.get(uniqueKey);
67
64
  actionsMap === null || actionsMap === void 0 ? void 0 : actionsMap.clear();
68
- const stateMap = container.initialObjects
69
- .TURBO_STATE_MAP;
70
65
  stateMap.delete(uniqueKey);
71
- }, [results]);
66
+ }, [stateMap]);
72
67
  React.useEffect(() => {
73
- if (!results)
68
+ if (!stateMap)
74
69
  return;
75
- const { container } = results;
76
- const stateMap = container.initialObjects.TURBO_STATE_MAP;
77
70
  const valueChangedListener = (changed) => {
78
71
  if (registeredSharedSetStateActionMapRef.current.has(changed.key)) {
79
- const value = stateMap.get(changed.key);
72
+ const value = stateMap === null || stateMap === void 0 ? void 0 : stateMap.get(changed.key);
80
73
  const actionMap = registeredSharedSetStateActionMapRef.current.get(changed.key);
81
74
  actionMap === null || actionMap === void 0 ? void 0 : actionMap.forEach((setLocalStateHandler) => {
82
75
  setLocalStateHandler(value);
@@ -92,9 +85,9 @@ export const useSharedStateRegistry = (results) => {
92
85
  });
93
86
  });
94
87
  return () => {
95
- stateMap.off("valueChanged", valueChangedListener);
88
+ stateMap === null || stateMap === void 0 ? void 0 : stateMap.off("valueChanged", valueChangedListener);
96
89
  };
97
- }, [results]);
90
+ }, [stateMap]);
98
91
  return {
99
92
  registerSharedSetStateAction,
100
93
  unregisterSharedSetStateAction,
@@ -102,4 +95,19 @@ export const useSharedStateRegistry = (results) => {
102
95
  deleteSharedState,
103
96
  };
104
97
  };
98
+ const useStateMap = (container) => {
99
+ const [stateMap, setStateMap] = React.useState();
100
+ React.useEffect(() => {
101
+ if (!container) {
102
+ return;
103
+ }
104
+ const rootDataObject = getRootDataObject(container);
105
+ const rootDirectory = getRootDirectory(rootDataObject);
106
+ const turboDir = rootDirectory.getSubDirectory(TurboDirectory);
107
+ turboDir === null || turboDir === void 0 ? void 0 : turboDir.get(TurboStateMap).get().then((state) => {
108
+ setStateMap(state);
109
+ });
110
+ }, [container]);
111
+ return stateMap;
112
+ };
105
113
  //# sourceMappingURL=useSharedStateRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedStateRegistry.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"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"}