jazz-tools 0.18.38 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/.svelte-kit/__package__/jazz.class.svelte.d.ts +8 -8
  2. package/.svelte-kit/__package__/jazz.class.svelte.d.ts.map +1 -1
  3. package/.svelte-kit/__package__/jazz.class.svelte.js +39 -14
  4. package/.svelte-kit/__package__/media/image.svelte +6 -5
  5. package/.svelte-kit/__package__/media/image.svelte.d.ts.map +1 -1
  6. package/.svelte-kit/__package__/tests/AccountCoState.svelte.test-d.d.ts +2 -0
  7. package/.svelte-kit/__package__/tests/AccountCoState.svelte.test-d.d.ts.map +1 -0
  8. package/.svelte-kit/__package__/tests/AccountCoState.svelte.test-d.js +19 -0
  9. package/.svelte-kit/__package__/tests/CoState.svelte.test-d.d.ts +2 -0
  10. package/.svelte-kit/__package__/tests/CoState.svelte.test-d.d.ts.map +1 -0
  11. package/.svelte-kit/__package__/tests/CoState.svelte.test-d.js +16 -0
  12. package/.svelte-kit/__package__/tests/CoState.svelte.test.d.ts +2 -0
  13. package/.svelte-kit/__package__/tests/CoState.svelte.test.d.ts.map +1 -0
  14. package/.svelte-kit/__package__/tests/CoState.svelte.test.js +42 -0
  15. package/.svelte-kit/__package__/tests/TestCoStateWrapper.svelte +23 -0
  16. package/.svelte-kit/__package__/tests/TestCoStateWrapper.svelte.d.ts +12 -0
  17. package/.svelte-kit/__package__/tests/TestCoStateWrapper.svelte.d.ts.map +1 -0
  18. package/.turbo/turbo-build.log +62 -62
  19. package/CHANGELOG.md +32 -0
  20. package/dist/better-auth/database-adapter/index.js +14 -11
  21. package/dist/better-auth/database-adapter/index.js.map +1 -1
  22. package/dist/better-auth/database-adapter/repository/generic.d.ts +1 -1
  23. package/dist/better-auth/database-adapter/repository/generic.d.ts.map +1 -1
  24. package/dist/better-auth/database-adapter/repository/user.d.ts.map +1 -1
  25. package/dist/{chunk-OSQ7S47Q.js → chunk-NCNM6UDZ.js} +563 -252
  26. package/dist/chunk-NCNM6UDZ.js.map +1 -0
  27. package/dist/index.js +14 -6
  28. package/dist/index.js.map +1 -1
  29. package/dist/media/{chunk-K6GCHLQU.js → chunk-3LKBM3G3.js} +23 -15
  30. package/dist/media/chunk-3LKBM3G3.js.map +1 -0
  31. package/dist/media/create-image/browser.d.ts +2 -2
  32. package/dist/media/create-image/react-native.d.ts +2 -2
  33. package/dist/media/create-image/server.d.ts +2 -2
  34. package/dist/media/create-image-factory.d.ts +2 -2
  35. package/dist/media/index.browser.js +1 -1
  36. package/dist/media/index.js +1 -1
  37. package/dist/media/index.native.js +1 -1
  38. package/dist/media/index.server.js +1 -1
  39. package/dist/media/utils.d.ts.map +1 -1
  40. package/dist/react/hooks.d.ts +1 -1
  41. package/dist/react/hooks.d.ts.map +1 -1
  42. package/dist/react/index.d.ts +1 -1
  43. package/dist/react/index.d.ts.map +1 -1
  44. package/dist/react/index.js +31 -15
  45. package/dist/react/index.js.map +1 -1
  46. package/dist/react/media/image.d.ts.map +1 -1
  47. package/dist/react-core/hooks.d.ts +126 -224
  48. package/dist/react-core/hooks.d.ts.map +1 -1
  49. package/dist/react-core/index.js +65 -63
  50. package/dist/react-core/index.js.map +1 -1
  51. package/dist/react-core/subscription-provider.d.ts.map +1 -1
  52. package/dist/react-core/tests/createCoValueSubscriptionContext.test.d.ts +2 -0
  53. package/dist/react-core/tests/createCoValueSubscriptionContext.test.d.ts.map +1 -0
  54. package/dist/react-core/tests/useAccount.selector.test.d.ts +2 -0
  55. package/dist/react-core/tests/useAccount.selector.test.d.ts.map +1 -0
  56. package/dist/react-core/tests/useCoState.selector.test.d.ts +2 -0
  57. package/dist/react-core/tests/useCoState.selector.test.d.ts.map +1 -0
  58. package/dist/react-native-core/hooks.d.ts +1 -1
  59. package/dist/react-native-core/hooks.d.ts.map +1 -1
  60. package/dist/react-native-core/index.js +7 -5
  61. package/dist/react-native-core/index.js.map +1 -1
  62. package/dist/react-native-core/media/image.d.ts.map +1 -1
  63. package/dist/svelte/jazz.class.svelte.d.ts +8 -8
  64. package/dist/svelte/jazz.class.svelte.d.ts.map +1 -1
  65. package/dist/svelte/jazz.class.svelte.js +39 -14
  66. package/dist/svelte/media/image.svelte +6 -5
  67. package/dist/svelte/media/image.svelte.d.ts.map +1 -1
  68. package/dist/svelte/tests/AccountCoState.svelte.test-d.d.ts +2 -0
  69. package/dist/svelte/tests/AccountCoState.svelte.test-d.d.ts.map +1 -0
  70. package/dist/svelte/tests/AccountCoState.svelte.test-d.js +19 -0
  71. package/dist/svelte/tests/CoState.svelte.test-d.d.ts +2 -0
  72. package/dist/svelte/tests/CoState.svelte.test-d.d.ts.map +1 -0
  73. package/dist/svelte/tests/CoState.svelte.test-d.js +16 -0
  74. package/dist/svelte/tests/CoState.svelte.test.d.ts +2 -0
  75. package/dist/svelte/tests/CoState.svelte.test.d.ts.map +1 -0
  76. package/dist/svelte/tests/CoState.svelte.test.js +42 -0
  77. package/dist/svelte/tests/TestCoStateWrapper.svelte +23 -0
  78. package/dist/svelte/tests/TestCoStateWrapper.svelte.d.ts +12 -0
  79. package/dist/svelte/tests/TestCoStateWrapper.svelte.d.ts.map +1 -0
  80. package/dist/testing.js +3 -1
  81. package/dist/testing.js.map +1 -1
  82. package/dist/tools/coValues/CoValueBase.d.ts +4 -1
  83. package/dist/tools/coValues/CoValueBase.d.ts.map +1 -1
  84. package/dist/tools/coValues/account.d.ts +6 -6
  85. package/dist/tools/coValues/account.d.ts.map +1 -1
  86. package/dist/tools/coValues/coFeed.d.ts +5 -5
  87. package/dist/tools/coValues/coFeed.d.ts.map +1 -1
  88. package/dist/tools/coValues/coList.d.ts +9 -8
  89. package/dist/tools/coValues/coList.d.ts.map +1 -1
  90. package/dist/tools/coValues/coMap.d.ts +17 -17
  91. package/dist/tools/coValues/coMap.d.ts.map +1 -1
  92. package/dist/tools/coValues/coPlainText.d.ts +3 -3
  93. package/dist/tools/coValues/coPlainText.d.ts.map +1 -1
  94. package/dist/tools/coValues/coVector.d.ts +3 -3
  95. package/dist/tools/coValues/coVector.d.ts.map +1 -1
  96. package/dist/tools/coValues/deepLoading.d.ts +71 -40
  97. package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
  98. package/dist/tools/coValues/extensions/imageDef.d.ts +1 -1
  99. package/dist/tools/coValues/extensions/imageDef.d.ts.map +1 -1
  100. package/dist/tools/coValues/group.d.ts +2 -2
  101. package/dist/tools/coValues/group.d.ts.map +1 -1
  102. package/dist/tools/coValues/inbox.d.ts.map +1 -1
  103. package/dist/tools/coValues/interfaces.d.ts +17 -9
  104. package/dist/tools/coValues/interfaces.d.ts.map +1 -1
  105. package/dist/tools/coValues/request.d.ts.map +1 -1
  106. package/dist/tools/coValues/schemaUnion.d.ts +6 -9
  107. package/dist/tools/coValues/schemaUnion.d.ts.map +1 -1
  108. package/dist/tools/exports.d.ts +3 -3
  109. package/dist/tools/exports.d.ts.map +1 -1
  110. package/dist/tools/implementation/refs.d.ts +3 -3
  111. package/dist/tools/implementation/refs.d.ts.map +1 -1
  112. package/dist/tools/implementation/schema.d.ts +2 -2
  113. package/dist/tools/implementation/schema.d.ts.map +1 -1
  114. package/dist/tools/implementation/schemaUtils.d.ts +8 -0
  115. package/dist/tools/implementation/schemaUtils.d.ts.map +1 -1
  116. package/dist/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.d.ts.map +1 -1
  117. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +33 -18
  118. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
  119. package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts +19 -7
  120. package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts.map +1 -1
  121. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +23 -12
  122. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
  123. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +29 -18
  124. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
  125. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +39 -22
  126. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
  127. package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts +1 -0
  128. package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts.map +1 -1
  129. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +30 -19
  130. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -1
  131. package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts +5 -0
  132. package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts.map +1 -1
  133. package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts +6 -5
  134. package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts.map +1 -1
  135. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +3 -2
  136. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
  137. package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts +3 -2
  138. package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts.map +1 -1
  139. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +3 -2
  140. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
  141. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +3 -2
  142. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
  143. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts +3 -0
  144. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +1 -1
  145. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.d.ts +22 -0
  146. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.d.ts.map +1 -0
  147. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts +4 -0
  148. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +1 -1
  149. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded.d.ts +9 -0
  150. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded.d.ts.map +1 -0
  151. package/dist/tools/implementation/zodSchema/unionUtils.d.ts.map +1 -1
  152. package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
  153. package/dist/tools/implementation/zodSchema/zodSchema.d.ts +7 -6
  154. package/dist/tools/implementation/zodSchema/zodSchema.d.ts.map +1 -1
  155. package/dist/tools/internal.d.ts +3 -3
  156. package/dist/tools/internal.d.ts.map +1 -1
  157. package/dist/tools/lib/utils.d.ts +14 -0
  158. package/dist/tools/lib/utils.d.ts.map +1 -0
  159. package/dist/tools/lib/utils.test.d.ts +2 -0
  160. package/dist/tools/lib/utils.test.d.ts.map +1 -0
  161. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts +3 -2
  162. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts.map +1 -1
  163. package/dist/tools/subscribe/JazzError.d.ts +4 -3
  164. package/dist/tools/subscribe/JazzError.d.ts.map +1 -1
  165. package/dist/tools/subscribe/SubscriptionScope.d.ts +7 -5
  166. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
  167. package/dist/tools/subscribe/index.d.ts.map +1 -1
  168. package/dist/tools/subscribe/types.d.ts +23 -3
  169. package/dist/tools/subscribe/types.d.ts.map +1 -1
  170. package/dist/tools/subscribe/utils.d.ts.map +1 -1
  171. package/dist/tools/testing.d.ts +3 -2
  172. package/dist/tools/testing.d.ts.map +1 -1
  173. package/dist/tools/tests/schema.resolved.test.d.ts +2 -0
  174. package/dist/tools/tests/schema.resolved.test.d.ts.map +1 -0
  175. package/dist/tools/tests/utils.d.ts +2 -1
  176. package/dist/tools/tests/utils.d.ts.map +1 -1
  177. package/package.json +4 -4
  178. package/src/better-auth/database-adapter/index.ts +2 -2
  179. package/src/better-auth/database-adapter/repository/account.ts +3 -3
  180. package/src/better-auth/database-adapter/repository/generic.ts +9 -6
  181. package/src/better-auth/database-adapter/repository/user.ts +6 -2
  182. package/src/better-auth/database-adapter/schema.ts +1 -1
  183. package/src/better-auth/database-adapter/tests/index.test.ts +3 -4
  184. package/src/inspector/tests/viewer/history-view.test.tsx +6 -2
  185. package/src/media/utils.test.ts +5 -0
  186. package/src/media/utils.ts +25 -16
  187. package/src/react/hooks.tsx +2 -2
  188. package/src/react/index.ts +2 -2
  189. package/src/react/media/image.tsx +10 -2
  190. package/src/react/tests/useAcceptInvite.test.ts +3 -1
  191. package/src/react-core/hooks.ts +226 -304
  192. package/src/react-core/subscription-provider.tsx +14 -7
  193. package/src/react-core/tests/createCoValueSubscriptionContext.test.tsx +233 -0
  194. package/src/react-core/tests/subscription.bench.tsx +32 -15
  195. package/src/react-core/tests/{useAccountWithSelector.test.ts → useAccount.selector.test.ts} +72 -24
  196. package/src/react-core/tests/useAccount.test.ts +92 -106
  197. package/src/react-core/tests/{useCoStateWithSelector.test.ts → useCoState.selector.test.ts} +23 -8
  198. package/src/react-core/tests/useCoState.test.ts +173 -49
  199. package/src/react-core/tests/useInboxSender.test.ts +3 -1
  200. package/src/react-core/tests/usePassPhraseAuth.test.ts +11 -82
  201. package/src/react-core/tests/useSubscriptionSelector.test.ts +48 -14
  202. package/src/react-native-core/hooks.tsx +2 -2
  203. package/src/react-native-core/media/image.tsx +3 -1
  204. package/src/svelte/jazz.class.svelte.ts +103 -27
  205. package/src/svelte/media/image.svelte +6 -5
  206. package/src/svelte/tests/AccountCoState.svelte.test-d.ts +23 -0
  207. package/src/svelte/tests/CoState.svelte.test-d.ts +20 -0
  208. package/src/svelte/tests/CoState.svelte.test.ts +57 -0
  209. package/src/svelte/tests/TestCoStateWrapper.svelte +23 -0
  210. package/src/tools/coValues/CoValueBase.ts +12 -0
  211. package/src/tools/coValues/account.ts +17 -12
  212. package/src/tools/coValues/coFeed.ts +38 -15
  213. package/src/tools/coValues/coList.ts +17 -12
  214. package/src/tools/coValues/coMap.ts +15 -14
  215. package/src/tools/coValues/coPlainText.ts +6 -3
  216. package/src/tools/coValues/coVector.ts +6 -5
  217. package/src/tools/coValues/deepLoading.ts +147 -86
  218. package/src/tools/coValues/group.ts +3 -2
  219. package/src/tools/coValues/inbox.ts +11 -10
  220. package/src/tools/coValues/interfaces.ts +52 -30
  221. package/src/tools/coValues/request.ts +8 -6
  222. package/src/tools/coValues/schemaUnion.ts +20 -14
  223. package/src/tools/exports.ts +11 -1
  224. package/src/tools/implementation/refs.ts +19 -13
  225. package/src/tools/implementation/schema.ts +5 -4
  226. package/src/tools/implementation/schemaUtils.ts +15 -0
  227. package/src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts +4 -4
  228. package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +131 -95
  229. package/src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts +86 -16
  230. package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +73 -22
  231. package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +86 -28
  232. package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +204 -148
  233. package/src/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.ts +1 -0
  234. package/src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +71 -27
  235. package/src/tools/implementation/zodSchema/schemaTypes/CoValueSchema.ts +7 -0
  236. package/src/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.ts +8 -6
  237. package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +4 -1
  238. package/src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts +4 -1
  239. package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +4 -1
  240. package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +4 -1
  241. package/src/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.ts +3 -0
  242. package/src/tools/implementation/zodSchema/typeConverters/{InstanceOfSchemaCoValuesNullable.ts → InstanceOfSchemaCoValuesMaybeLoaded.ts} +47 -39
  243. package/src/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts +4 -0
  244. package/src/tools/implementation/zodSchema/typeConverters/{InstanceOrPrimitiveOfSchemaCoValuesNullable.ts → InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded.ts} +7 -3
  245. package/src/tools/implementation/zodSchema/unionUtils.ts +35 -4
  246. package/src/tools/implementation/zodSchema/zodSchema.ts +15 -7
  247. package/src/tools/internal.ts +3 -3
  248. package/src/tools/lib/utils.test.ts +56 -0
  249. package/src/tools/lib/utils.ts +32 -0
  250. package/src/tools/subscribe/CoValueCoreSubscription.ts +13 -8
  251. package/src/tools/subscribe/JazzError.ts +8 -2
  252. package/src/tools/subscribe/SubscriptionScope.ts +57 -57
  253. package/src/tools/subscribe/index.ts +12 -4
  254. package/src/tools/subscribe/types.ts +36 -2
  255. package/src/tools/subscribe/utils.ts +2 -1
  256. package/src/tools/testing.ts +5 -0
  257. package/src/tools/tests/CoValueCoreSubscription.test.ts +10 -4
  258. package/src/tools/tests/ContextManager.test.ts +12 -5
  259. package/src/tools/tests/account.test.ts +22 -12
  260. package/src/tools/tests/coDiscriminatedUnion.test.ts +354 -8
  261. package/src/tools/tests/coFeed.branch.test.ts +48 -32
  262. package/src/tools/tests/coFeed.test-d.ts +17 -10
  263. package/src/tools/tests/coFeed.test.ts +52 -30
  264. package/src/tools/tests/coList.branch.test.ts +21 -21
  265. package/src/tools/tests/coList.test-d.ts +39 -23
  266. package/src/tools/tests/coList.test.ts +51 -25
  267. package/src/tools/tests/coList.unique.test.ts +34 -29
  268. package/src/tools/tests/coMap.branch.test.ts +20 -21
  269. package/src/tools/tests/coMap.record.test-d.ts +28 -26
  270. package/src/tools/tests/coMap.record.test.ts +30 -20
  271. package/src/tools/tests/coMap.test-d.ts +31 -29
  272. package/src/tools/tests/coMap.test.ts +67 -40
  273. package/src/tools/tests/coMap.unique.test.ts +25 -24
  274. package/src/tools/tests/coVector.test.ts +29 -15
  275. package/src/tools/tests/createContext.test.ts +5 -3
  276. package/src/tools/tests/deepLoading.test.ts +369 -176
  277. package/src/tools/tests/exportImport.test.ts +16 -15
  278. package/src/tools/tests/groupsAndAccounts.test.ts +39 -16
  279. package/src/tools/tests/inbox.test.ts +3 -1
  280. package/src/tools/tests/load.test.ts +29 -23
  281. package/src/tools/tests/patterns/quest.test.ts +3 -2
  282. package/src/tools/tests/patterns/requestToJoin.test.ts +17 -17
  283. package/src/tools/tests/request.test.ts +12 -2
  284. package/src/tools/tests/schema.resolved.test.ts +792 -0
  285. package/src/tools/tests/schemaUnion.test.ts +7 -3
  286. package/src/tools/tests/subscribe.test.ts +39 -21
  287. package/src/tools/tests/testing.test.ts +3 -2
  288. package/src/tools/tests/utils.ts +15 -2
  289. package/dist/chunk-OSQ7S47Q.js.map +0 -1
  290. package/dist/media/chunk-K6GCHLQU.js.map +0 -1
  291. package/dist/react-core/tests/useAccountWithSelector.test.d.ts +0 -2
  292. package/dist/react-core/tests/useAccountWithSelector.test.d.ts.map +0 -1
  293. package/dist/react-core/tests/useCoStateWithSelector.test.d.ts +0 -2
  294. package/dist/react-core/tests/useCoStateWithSelector.test.d.ts.map +0 -1
  295. package/dist/tools/implementation/errors.d.ts +0 -2
  296. package/dist/tools/implementation/errors.d.ts.map +0 -1
  297. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts +0 -19
  298. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts.map +0 -1
  299. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts +0 -5
  300. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +0 -1
  301. package/dist/tools/lib/id.d.ts +0 -2
  302. package/dist/tools/lib/id.d.ts.map +0 -1
  303. package/src/tools/implementation/errors.ts +0 -1
  304. package/src/tools/lib/id.ts +0 -3
@@ -4,7 +4,9 @@ import {
4
4
  AccountClass,
5
5
  AnyAccountSchema,
6
6
  CoValueClassOrSchema,
7
+ CoValueLoadingState,
7
8
  Loaded,
9
+ MaybeLoaded,
8
10
  ResolveQuery,
9
11
  ResolveQueryStrict,
10
12
  } from "jazz-tools";
@@ -43,14 +45,16 @@ export function createCoValueSubscriptionContext<
43
45
  });
44
46
 
45
47
  const loadState = useSubscriptionSelector(subscription, {
46
- select: (value) => (!value ? value : true),
48
+ select: (value) => value.$jazz.loadingState,
47
49
  });
48
50
 
49
- if (loadState === undefined) {
51
+ if (loadState === CoValueLoadingState.LOADING) {
50
52
  return loadingFallback ?? null;
51
53
  }
52
-
53
- if (loadState === null) {
54
+ if (
55
+ loadState === CoValueLoadingState.UNAUTHORIZED ||
56
+ loadState === CoValueLoadingState.UNAVAILABLE
57
+ ) {
54
58
  return unavailableFallback ?? null;
55
59
  }
56
60
 
@@ -106,14 +110,17 @@ export function createAccountSubscriptionContext<
106
110
  });
107
111
 
108
112
  const loadState = useSubscriptionSelector(subscription, {
109
- select: (value) => (!value ? value : true),
113
+ select: (value) => value.$jazz.loadingState,
110
114
  });
111
115
 
112
- if (loadState === undefined) {
116
+ if (loadState === CoValueLoadingState.LOADING) {
113
117
  return loadingFallback ?? null;
114
118
  }
115
119
 
116
- if (loadState === null) {
120
+ if (
121
+ loadState === CoValueLoadingState.UNAUTHORIZED ||
122
+ loadState === CoValueLoadingState.UNAVAILABLE
123
+ ) {
117
124
  return unavailableFallback ?? null;
118
125
  }
119
126
 
@@ -0,0 +1,233 @@
1
+ // @vitest-environment happy-dom
2
+
3
+ import { cojsonInternals } from "cojson";
4
+ import { co, z, CoValueLoadingState } from "jazz-tools";
5
+ import { assertLoaded } from "jazz-tools/testing";
6
+ import { useRef } from "react";
7
+ import { beforeEach, describe, expect, it } from "vitest";
8
+ import { createCoValueSubscriptionContext } from "../index.js";
9
+ import {
10
+ createJazzTestAccount,
11
+ JazzTestProvider,
12
+ setupJazzTestSync,
13
+ } from "../testing.js";
14
+ import { act, render, renderHook, waitFor } from "./testUtils.js";
15
+
16
+ beforeEach(async () => {
17
+ await setupJazzTestSync();
18
+
19
+ await createJazzTestAccount({
20
+ isCurrentActiveAccount: true,
21
+ });
22
+ });
23
+
24
+ cojsonInternals.setCoValueLoadingRetryDelay(300);
25
+
26
+ const useRenderCount = <T,>(hook: () => T) => {
27
+ const renderCountRef = useRef(0);
28
+ const result = hook();
29
+ renderCountRef.current = renderCountRef.current + 1;
30
+ return {
31
+ renderCount: renderCountRef.current,
32
+ result,
33
+ };
34
+ };
35
+
36
+ describe("createCoValueSubscriptionContext", () => {
37
+ it("creates a custom provider and selector hook for a coValue schema", () => {
38
+ const TestMap = co.map({
39
+ value: z.string(),
40
+ });
41
+
42
+ const map = TestMap.create({
43
+ value: "123",
44
+ });
45
+
46
+ const { Provider, useSelector } = createCoValueSubscriptionContext(TestMap);
47
+
48
+ const { result } = renderHook(
49
+ () => {
50
+ return useSelector();
51
+ },
52
+ {
53
+ wrapper: ({ children }) => (
54
+ <JazzTestProvider>
55
+ <Provider id={map.$jazz.id}>{children}</Provider>
56
+ </JazzTestProvider>
57
+ ),
58
+ },
59
+ );
60
+
61
+ expect(result.current.value).toBe("123");
62
+ });
63
+
64
+ it("the selector hook updates when the coValue changes", () => {
65
+ const TestMap = co.map({
66
+ value: z.string(),
67
+ });
68
+
69
+ const map = TestMap.create({
70
+ value: "123",
71
+ });
72
+
73
+ const { Provider, useSelector } = createCoValueSubscriptionContext(TestMap);
74
+
75
+ const { result } = renderHook(
76
+ () => {
77
+ return useSelector();
78
+ },
79
+ {
80
+ wrapper: ({ children }) => (
81
+ <JazzTestProvider>
82
+ <Provider id={map.$jazz.id}>{children}</Provider>
83
+ </JazzTestProvider>
84
+ ),
85
+ },
86
+ );
87
+
88
+ expect(result.current.value).toBe("123");
89
+
90
+ act(() => {
91
+ map.$jazz.set("value", "456");
92
+ });
93
+
94
+ expect(result.current.value).toBe("456");
95
+ });
96
+
97
+ it("the selector hook can be narrowed down further with a select function", () => {
98
+ const TestMap = co.map({
99
+ value: z.string(),
100
+ });
101
+
102
+ const map = TestMap.create({
103
+ value: "123",
104
+ });
105
+
106
+ const { Provider, useSelector } = createCoValueSubscriptionContext(TestMap);
107
+
108
+ const { result } = renderHook(
109
+ () => {
110
+ return useSelector({
111
+ select: (v) => v.value,
112
+ });
113
+ },
114
+ {
115
+ wrapper: ({ children }) => (
116
+ <JazzTestProvider>
117
+ <Provider id={map.$jazz.id}>{children}</Provider>
118
+ </JazzTestProvider>
119
+ ),
120
+ },
121
+ );
122
+
123
+ expect(result.current).toBe("123");
124
+ });
125
+
126
+ it("should not re-render when a non-selected field changes", () => {
127
+ const TestMap = co.map({
128
+ value: z.string(),
129
+ other: z.string(),
130
+ });
131
+
132
+ const map = TestMap.create({
133
+ value: "1",
134
+ other: "1",
135
+ });
136
+
137
+ const { Provider, useSelector } = createCoValueSubscriptionContext(TestMap);
138
+
139
+ const { result } = renderHook(
140
+ () =>
141
+ useRenderCount(() => {
142
+ return useSelector({
143
+ select: (v) => v.value,
144
+ });
145
+ }),
146
+ {
147
+ wrapper: ({ children }) => (
148
+ <JazzTestProvider>
149
+ <Provider id={map.$jazz.id}>{children}</Provider>
150
+ </JazzTestProvider>
151
+ ),
152
+ },
153
+ );
154
+
155
+ expect(result.current.result).toBe("1");
156
+ expect(result.current.renderCount).toBe(1);
157
+
158
+ act(() => {
159
+ map.$jazz.set("other", "2");
160
+ });
161
+
162
+ expect(result.current.result).toBe("1");
163
+ expect(result.current.renderCount).toBe(1);
164
+ });
165
+
166
+ it("the provider shows a loading fallback when loading the coValue", async () => {
167
+ const TestMap = co.map({
168
+ value: z.string(),
169
+ });
170
+
171
+ const { Provider } = createCoValueSubscriptionContext(TestMap);
172
+
173
+ const { container } = render(
174
+ <JazzTestProvider>
175
+ <Provider id="co_test123" loadingFallback={<div>Loading...</div>}>
176
+ <div>Children should not render</div>
177
+ </Provider>
178
+ </JazzTestProvider>,
179
+ );
180
+
181
+ // The loading fallback should be rendered
182
+ expect(container.textContent).toContain("Loading...");
183
+ // Children should not be rendered
184
+ expect(container.textContent).not.toContain("Children should not render");
185
+ });
186
+
187
+ it("the provider shows an unavailable fallback when the coValue is unavailable", async () => {
188
+ const TestMap = co.map({
189
+ value: z.string(),
190
+ });
191
+
192
+ const { Provider } = createCoValueSubscriptionContext(TestMap);
193
+
194
+ const { container } = render(
195
+ <JazzTestProvider>
196
+ <Provider
197
+ id="invalid_id"
198
+ loadingFallback={<div>Loading...</div>}
199
+ unavailableFallback={<div>Unavailable</div>}
200
+ >
201
+ <div>Children should not render</div>
202
+ </Provider>
203
+ </JazzTestProvider>,
204
+ );
205
+
206
+ // Initially shows loading fallback
207
+ expect(container.textContent).toContain("Loading...");
208
+
209
+ // Should show unavailable fallback after CoValue load timeout
210
+ await waitFor(() => {
211
+ expect(container.textContent).toContain("Unavailable");
212
+ });
213
+
214
+ // Children should never be rendered
215
+ expect(container.textContent).not.toContain("Children should not render");
216
+ });
217
+
218
+ it("should throw error when useSelector is used outside provider", () => {
219
+ const TestMap = co.map({
220
+ value: z.string(),
221
+ });
222
+
223
+ const { useSelector } = createCoValueSubscriptionContext(TestMap);
224
+
225
+ expect(() => {
226
+ renderHook(() => {
227
+ return useSelector();
228
+ });
229
+ }).toThrow(
230
+ "useSelector must be used within a coValue subscription provider",
231
+ );
232
+ });
233
+ });
@@ -6,7 +6,7 @@ import { describe, bench } from "vitest";
6
6
  import {
7
7
  useAccountSubscription,
8
8
  useSubscriptionSelector,
9
- useAccountWithSelector,
9
+ useAccount,
10
10
  CoValueSubscription,
11
11
  } from "../index.js";
12
12
  import { createJazzTestAccount, setupJazzTestSync } from "../testing.js";
@@ -23,11 +23,16 @@ await createJazzTestAccount({
23
23
  const AccountSchema = co.account();
24
24
 
25
25
  const AccountName = () => {
26
- const name = useAccountWithSelector(AccountSchema, {
26
+ const name = useAccount(AccountSchema, {
27
27
  resolve: {
28
28
  profile: true,
29
29
  },
30
- select: (account) => account?.profile?.name,
30
+ select: (account) => {
31
+ if (!account.$isLoaded) {
32
+ return null;
33
+ }
34
+ return account.profile.name;
35
+ },
31
36
  });
32
37
 
33
38
  if (!name) return null;
@@ -41,7 +46,12 @@ const AccountNameFromSubscription = ({
41
46
  subscription: CoValueSubscription<typeof AccountSchema, { profile: true }>;
42
47
  }) => {
43
48
  const name = useSubscriptionSelector(subscription, {
44
- select: (account) => account?.profile?.name,
49
+ select: (account) => {
50
+ if (!account.$isLoaded) {
51
+ return null;
52
+ }
53
+ return account.profile.name;
54
+ },
45
55
  });
46
56
 
47
57
  if (!name) return null;
@@ -199,9 +209,12 @@ describe("deeply resolved coMaps", async () => {
199
209
  }) => {
200
210
  const allProjectsTasks = useSubscriptionSelector(subscription, {
201
211
  select: (account) => {
202
- return account?.root.organizations.flatMap((org) =>
203
- org?.projects.flatMap((project) =>
204
- project?.[taskListType]?.flatMap((task) => task),
212
+ if (!account.$isLoaded) {
213
+ return null;
214
+ }
215
+ return account.root.organizations.flatMap((org) =>
216
+ org.projects.flatMap((project) =>
217
+ project[taskListType].flatMap((task) => task),
205
218
  ),
206
219
  );
207
220
  },
@@ -210,7 +223,7 @@ describe("deeply resolved coMaps", async () => {
210
223
  return (
211
224
  <div>
212
225
  {allProjectsTasks?.map((task) => (
213
- <div key={task?.$jazz.id}>{task?.title}</div>
226
+ <div key={task.$jazz.id}>{task.title}</div>
214
227
  ))}
215
228
  </div>
216
229
  );
@@ -266,7 +279,7 @@ describe("deeply resolved coMaps", async () => {
266
279
  }: {
267
280
  taskListType: "tasks" | "draftTasks" | "deletedTasks";
268
281
  }) => {
269
- const subscription = useAccountWithSelector(AccountSchema, {
282
+ const subscription = useAccount(AccountSchema, {
270
283
  resolve: {
271
284
  root: {
272
285
  organizations: {
@@ -282,18 +295,22 @@ describe("deeply resolved coMaps", async () => {
282
295
  },
283
296
  },
284
297
  },
285
- select: (account) =>
286
- account?.root.organizations.flatMap((org) =>
287
- org?.projects.flatMap((project) =>
288
- project?.[taskListType]?.flatMap((task) => task),
298
+ select: (account) => {
299
+ if (!account.$isLoaded) {
300
+ return null;
301
+ }
302
+ return account.root.organizations.flatMap((org) =>
303
+ org.projects.flatMap((project) =>
304
+ project[taskListType].flatMap((task) => task),
289
305
  ),
290
- ),
306
+ );
307
+ },
291
308
  });
292
309
 
293
310
  return (
294
311
  <div>
295
312
  {subscription?.map((task) => (
296
- <div key={task?.$jazz.id}>{task?.title}</div>
313
+ <div key={task.$jazz.id}>{task.title}</div>
297
314
  ))}
298
315
  </div>
299
316
  );
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Account, RefsToResolve, co, z, Group } from "jazz-tools";
4
4
  import { assert, beforeEach, describe, expect, it } from "vitest";
5
- import { useAccountWithSelector, useJazzContextManager } from "../hooks.js";
5
+ import { useAccount, useJazzContextManager } from "../hooks.js";
6
6
  import { useIsAuthenticated } from "../index.js";
7
7
  import {
8
8
  createJazzTestAccount,
@@ -26,7 +26,7 @@ const useRenderCount = <T>(hook: () => T) => {
26
26
  };
27
27
  };
28
28
 
29
- describe("useAccountWithSelector", () => {
29
+ describe("useAccount", () => {
30
30
  it("should return the correct selected value", async () => {
31
31
  const AccountRoot = co.map({
32
32
  value: z.string(),
@@ -49,11 +49,16 @@ describe("useAccountWithSelector", () => {
49
49
 
50
50
  const { result } = renderHook(
51
51
  () =>
52
- useAccountWithSelector(AccountSchema, {
52
+ useAccount(AccountSchema, {
53
53
  resolve: {
54
54
  root: true,
55
55
  },
56
- select: (account) => account?.root.value ?? "Loading...",
56
+ select: (account) => {
57
+ if (!account.$isLoaded) {
58
+ return "Loading...";
59
+ }
60
+ return account.root.value;
61
+ },
57
62
  }),
58
63
  {
59
64
  account,
@@ -98,13 +103,18 @@ describe("useAccountWithSelector", () => {
98
103
 
99
104
  const { result } = renderHook(
100
105
  () =>
101
- useAccountWithSelector(AccountSchema, {
106
+ useAccount(AccountSchema, {
102
107
  resolve: {
103
108
  root: {
104
109
  nested: true,
105
110
  },
106
111
  },
107
- select: (account) => account?.root.nested.nestedValue ?? "Loading...",
112
+ select: (account) => {
113
+ if (!account.$isLoaded) {
114
+ return "Loading...";
115
+ }
116
+ return account.root.nested.nestedValue;
117
+ },
108
118
  }),
109
119
  {
110
120
  account,
@@ -154,13 +164,18 @@ describe("useAccountWithSelector", () => {
154
164
  const { result } = renderHook(
155
165
  () =>
156
166
  useRenderCount(() =>
157
- useAccountWithSelector(AccountSchema, {
167
+ useAccount(AccountSchema, {
158
168
  resolve: {
159
169
  root: {
160
170
  nested: true,
161
171
  },
162
172
  },
163
- select: (account) => account?.root.value ?? "Loading...",
173
+ select: (account) => {
174
+ if (!account.$isLoaded) {
175
+ return "Loading...";
176
+ }
177
+ return account.root.value;
178
+ },
164
179
  }),
165
180
  ),
166
181
  {
@@ -218,14 +233,18 @@ describe("useAccountWithSelector", () => {
218
233
  const { result } = renderHook(
219
234
  () =>
220
235
  useRenderCount(() =>
221
- useAccountWithSelector(AccountSchema, {
236
+ useAccount(AccountSchema, {
222
237
  resolve: {
223
238
  root: {
224
239
  nested: true,
225
240
  },
226
241
  },
227
- select: (account) =>
228
- account?.root?.nested?.nestedValue ?? "Loading...",
242
+ select: (account) => {
243
+ if (!account.$isLoaded) {
244
+ return "Loading...";
245
+ }
246
+ return account.root.nested?.nestedValue ?? "Loading...";
247
+ },
229
248
  }),
230
249
  ),
231
250
  {
@@ -283,14 +302,18 @@ describe("useAccountWithSelector", () => {
283
302
  const { result } = renderHook(
284
303
  () =>
285
304
  useRenderCount(() =>
286
- useAccountWithSelector(AccountSchema, {
305
+ useAccount(AccountSchema, {
287
306
  resolve: {
288
307
  root: {
289
308
  nested: true,
290
309
  },
291
310
  },
292
- select: (account) =>
293
- account?.root?.nested?.nestedValue ?? "Loading...",
311
+ select: (account) => {
312
+ if (!account.$isLoaded) {
313
+ return "Loading...";
314
+ }
315
+ return account.root.nested?.nestedValue ?? "Loading...";
316
+ },
294
317
  equalityFn: () => true, // Always return true to prevent re-renders
295
318
  }),
296
319
  ),
@@ -329,11 +352,16 @@ describe("useAccountWithSelector", () => {
329
352
 
330
353
  const { result } = renderHook(
331
354
  () =>
332
- useAccountWithSelector(AccountSchema, {
355
+ useAccount(AccountSchema, {
333
356
  resolve: {
334
357
  root: true,
335
358
  },
336
- select: (account) => account?.root?.value ?? "Guest",
359
+ select: (account) => {
360
+ if (!account.$isLoaded) {
361
+ return "Guest";
362
+ }
363
+ return account.root.value;
364
+ },
337
365
  }),
338
366
  {
339
367
  account,
@@ -348,8 +376,13 @@ describe("useAccountWithSelector", () => {
348
376
 
349
377
  const { result } = renderHook(
350
378
  () =>
351
- useAccountWithSelector(Account, {
352
- select: (account) => account?.$jazz.id ?? "No account",
379
+ useAccount(Account, {
380
+ select: (account) => {
381
+ if (!account.$isLoaded) {
382
+ return "No account";
383
+ }
384
+ return account.$jazz.id;
385
+ },
353
386
  }),
354
387
  {
355
388
  account,
@@ -384,12 +417,17 @@ describe("useAccountWithSelector", () => {
384
417
  const { result, rerender } = renderHook(
385
418
  () =>
386
419
  useRenderCount(() =>
387
- useAccountWithSelector(AccountSchema, {
420
+ useAccount(AccountSchema, {
388
421
  resolve: {
389
422
  root: true,
390
423
  },
391
424
  select: (account) => {
392
- const baseValue = account?.root?.value ?? "loading";
425
+ let baseValue: string;
426
+ if (!account.$isLoaded) {
427
+ baseValue = "loading";
428
+ } else {
429
+ baseValue = account.root.value;
430
+ }
393
431
  return `${baseValue}-${externalProp}`;
394
432
  },
395
433
  }),
@@ -440,19 +478,29 @@ describe("useAccountWithSelector", () => {
440
478
  group.addMember("everyone", "writer");
441
479
  const { result } = renderHook(
442
480
  () => {
443
- const branchAccountRoot = useAccountWithSelector(AccountSchema, {
481
+ const branchAccountRoot = useAccount(AccountSchema, {
444
482
  resolve: {
445
483
  root: true,
446
484
  },
447
- select: (account) => account?.root,
485
+ select: (account) => {
486
+ if (!account.$isLoaded) {
487
+ return undefined;
488
+ }
489
+ return account.root;
490
+ },
448
491
  unstable_branch: { name: "feature-branch" },
449
492
  });
450
493
 
451
- const mainAccountRoot = useAccountWithSelector(AccountSchema, {
494
+ const mainAccountRoot = useAccount(AccountSchema, {
452
495
  resolve: {
453
496
  root: true,
454
497
  },
455
- select: (account) => account?.root,
498
+ select: (account) => {
499
+ if (!account.$isLoaded) {
500
+ return undefined;
501
+ }
502
+ return account.root;
503
+ },
456
504
  });
457
505
 
458
506
  return {