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
@@ -5,12 +5,15 @@ import {
5
5
  Account,
6
6
  CoRichText,
7
7
  CoValue,
8
+ CoValueLoadingState,
8
9
  Group,
9
10
  ID,
10
11
  Loaded,
12
+ MaybeLoaded,
11
13
  co,
12
14
  z,
13
15
  } from "jazz-tools";
16
+ import { assertLoaded } from "jazz-tools/testing";
14
17
  import { assert, beforeEach, describe, expect, expectTypeOf, it } from "vitest";
15
18
  import { useCoState } from "../index.js";
16
19
  import { createJazzTestAccount, setupJazzTestSync } from "../testing.js";
@@ -44,10 +47,11 @@ describe("useCoState", () => {
44
47
  account,
45
48
  });
46
49
 
47
- expect(result.current?.value).toBe("123");
50
+ assertLoaded(result.current);
51
+ expect(result.current.value).toBe("123");
48
52
  });
49
53
 
50
- it("should return null on invalid id", async () => {
54
+ it("should return an 'unavailable' value on invalid id", async () => {
51
55
  const TestMap = co.map({
52
56
  value: z.string(),
53
57
  });
@@ -60,10 +64,12 @@ describe("useCoState", () => {
60
64
  account,
61
65
  });
62
66
 
63
- expect(result.current).toBeUndefined();
67
+ expect(result.current.$jazz.loadingState).toBe(CoValueLoadingState.LOADING);
64
68
 
65
69
  await waitFor(() => {
66
- expect(result.current).toBeNull();
70
+ expect(result.current.$jazz.loadingState).toBe(
71
+ CoValueLoadingState.UNAVAILABLE,
72
+ );
67
73
  });
68
74
  });
69
75
 
@@ -84,13 +90,14 @@ describe("useCoState", () => {
84
90
  account,
85
91
  });
86
92
 
87
- expect(result.current?.value).toBe("123");
93
+ assertLoaded(result.current);
94
+ expect(result.current.value).toBe("123");
88
95
 
89
96
  act(() => {
90
97
  map.$jazz.set("value", "456");
91
98
  });
92
99
 
93
- expect(result.current?.value).toBe("456");
100
+ expect(result.current.value).toBe("456");
94
101
  });
95
102
 
96
103
  it("should load nested values if requested", async () => {
@@ -126,8 +133,9 @@ describe("useCoState", () => {
126
133
  },
127
134
  );
128
135
 
129
- expect(result.current?.value).toBe("123");
130
- expect(result.current?.nested.value).toBe("456");
136
+ assertLoaded(result.current);
137
+ expect(result.current.value).toBe("123");
138
+ expect(result.current.nested.value).toBe("456");
131
139
  });
132
140
 
133
141
  it("should load nested values on access even if not requested", async () => {
@@ -155,11 +163,13 @@ describe("useCoState", () => {
155
163
  account,
156
164
  });
157
165
 
158
- expect(result.current?.value).toBe("123");
159
- expect(result.current?.nested?.value).toBe("456");
166
+ assertLoaded(result.current);
167
+ expect(result.current.value).toBe("123");
168
+ assertLoaded(result.current.nested);
169
+ expect(result.current.nested.value).toBe("456");
160
170
  });
161
171
 
162
- it("should return null if the coValue is not found", async () => {
172
+ it("should return an 'unavailable' value if the coValue is not found", async () => {
163
173
  const TestMap = co.map({
164
174
  value: z.string(),
165
175
  });
@@ -168,24 +178,26 @@ describe("useCoState", () => {
168
178
  value: "123",
169
179
  });
170
180
 
171
- const account = await createJazzTestAccount({
172
- isCurrentActiveAccount: true,
173
- });
181
+ const viewerAccount = await createJazzTestAccount();
174
182
 
175
- for (const peer of account.$jazz.localNode.syncManager.getClientPeers()) {
183
+ for (const peer of viewerAccount.$jazz.localNode.syncManager.getServerPeers(
184
+ viewerAccount.$jazz.raw.id,
185
+ )) {
176
186
  peer.gracefulShutdown();
177
187
  }
178
188
 
179
189
  const { result } = renderHook(() => useCoState(TestMap, map.$jazz.id), {
180
- account,
190
+ account: viewerAccount,
181
191
  });
182
192
 
183
193
  await waitFor(() => {
184
- expect(result.current).toBeNull();
194
+ expect(result.current.$jazz.loadingState).toBe(
195
+ CoValueLoadingState.UNAVAILABLE,
196
+ );
185
197
  });
186
198
  });
187
199
 
188
- it("should return null if the coValue is not accessible", async () => {
200
+ it("should return an 'unauthorized' value if the coValue is not accessible", async () => {
189
201
  const TestMap = co.map({
190
202
  value: z.string(),
191
203
  });
@@ -210,11 +222,13 @@ describe("useCoState", () => {
210
222
  });
211
223
 
212
224
  await waitFor(() => {
213
- expect(result.current).toBeNull();
225
+ expect(result.current.$jazz.loadingState).toBe(
226
+ CoValueLoadingState.UNAUTHORIZED,
227
+ );
214
228
  });
215
229
  });
216
230
 
217
- it("should not return null if the coValue is shared with everyone", async () => {
231
+ it("should return a 'loaded' value if the coValue is shared with everyone", async () => {
218
232
  const TestMap = co.map({
219
233
  value: z.string(),
220
234
  });
@@ -242,7 +256,8 @@ describe("useCoState", () => {
242
256
  });
243
257
 
244
258
  await waitFor(() => {
245
- expect(result.current?.value).toBe("123");
259
+ assertLoaded(result.current);
260
+ expect(result.current.value).toBe("123");
246
261
  });
247
262
  });
248
263
 
@@ -273,19 +288,24 @@ describe("useCoState", () => {
273
288
  });
274
289
 
275
290
  await waitFor(() => {
276
- expect(result.current).toBeNull();
291
+ expect(result.current.$jazz.loadingState).toBe(
292
+ CoValueLoadingState.UNAUTHORIZED,
293
+ );
277
294
  });
278
295
 
279
296
  group.addMember("everyone", "reader");
280
297
 
281
298
  await waitFor(() => {
282
- expect(result.current).not.toBeNull();
299
+ expect(result.current.$jazz.loadingState).not.toBe(
300
+ CoValueLoadingState.UNAUTHORIZED,
301
+ );
283
302
  });
284
303
 
285
- expect(result.current?.value).toBe("123");
304
+ assertLoaded(result.current);
305
+ expect(result.current.value).toBe("123");
286
306
  });
287
307
 
288
- it("should return a null value when the coValue becomes inaccessible", async () => {
308
+ it("should return an 'unauthorized' value when the coValue becomes inaccessible", async () => {
289
309
  const TestMap = co.map({
290
310
  value: z.string(),
291
311
  });
@@ -322,18 +342,22 @@ describe("useCoState", () => {
322
342
  group.removeMember(account);
323
343
 
324
344
  await waitFor(() => {
325
- expect(result.current).toBeNull();
345
+ expect(result.current.$jazz.loadingState).toBe(
346
+ CoValueLoadingState.UNAUTHORIZED,
347
+ );
326
348
  });
327
349
  });
328
350
 
329
- it("should return a null value when the coValue becomes inaccessible", async () => {
351
+ it("should return a 'unavailable' value when no id is provided", async () => {
330
352
  const TestMap = co.map({
331
353
  value: z.string(),
332
354
  });
333
355
 
334
356
  const { result } = renderHook(() => useCoState(TestMap, undefined));
335
357
 
336
- expect(result.current).toBeNull();
358
+ expect(result.current.$jazz.loadingState).toBe(
359
+ CoValueLoadingState.UNAVAILABLE,
360
+ );
337
361
  });
338
362
 
339
363
  it("should update when an inner coValue is updated", async () => {
@@ -382,14 +406,17 @@ describe("useCoState", () => {
382
406
  );
383
407
 
384
408
  await waitFor(() => {
385
- expect(result.current).not.toBeUndefined();
409
+ expect(result.current.$jazz.loadingState).toBe(
410
+ CoValueLoadingState.UNAUTHORIZED,
411
+ );
386
412
  });
387
413
 
388
- expect(result.current?.nested).toBeUndefined();
389
414
  group.addMember("everyone", "reader");
390
415
 
391
416
  await waitFor(() => {
392
- expect(result.current?.nested?.value).toBe("456");
417
+ assertLoaded(result.current);
418
+ assert(result.current.nested);
419
+ expect(result.current.nested.value).toBe("456");
393
420
  });
394
421
  });
395
422
 
@@ -406,11 +433,11 @@ describe("useCoState", () => {
406
433
  useCoState(TestMap, map.$jazz.id as ID<CoValue>),
407
434
  );
408
435
  expectTypeOf(result).toEqualTypeOf<{
409
- current: Loaded<typeof TestMap> | null | undefined;
436
+ current: MaybeLoaded<Loaded<typeof TestMap>>;
410
437
  }>();
411
438
  });
412
439
 
413
- it("should set the value to undefined when the id is set to undefined", () => {
440
+ it("should set the value to 'unavailable' when the id is set to undefined", () => {
414
441
  const TestMap = co.map({
415
442
  value: z.string(),
416
443
  });
@@ -426,11 +453,14 @@ describe("useCoState", () => {
426
453
  },
427
454
  );
428
455
 
429
- expect(result.current?.value).toBe("123");
456
+ assertLoaded(result.current);
457
+ expect(result.current.value).toBe("123");
430
458
 
431
459
  rerender({ id: undefined });
432
460
 
433
- expect(result.current?.value).toBeUndefined();
461
+ expect(result.current.$jazz.loadingState).toBe(
462
+ CoValueLoadingState.UNAVAILABLE,
463
+ );
434
464
  });
435
465
 
436
466
  it("should only render once when loading a list of values", async () => {
@@ -491,7 +521,7 @@ describe("useCoState", () => {
491
521
  loadAs: john,
492
522
  });
493
523
 
494
- assert(janeOnJohn);
524
+ assertLoaded(janeOnJohn);
495
525
 
496
526
  const group = Group.create(john);
497
527
  group.addMember(janeOnJohn, "reader");
@@ -504,15 +534,27 @@ describe("useCoState", () => {
504
534
  );
505
535
 
506
536
  const { result } = renderHook(
507
- () => useCoState(Dog, dog.$jazz.id)?.$jazz.owner.members,
537
+ () => {
538
+ const loadedDog = useCoState(Dog, dog.$jazz.id);
539
+ if (!loadedDog.$isLoaded) {
540
+ return undefined;
541
+ }
542
+ return loadedDog.$jazz.owner.members;
543
+ },
508
544
  {
509
545
  account: john,
510
546
  },
511
547
  );
512
548
 
513
549
  await waitFor(() => {
514
- expect(result.current?.[0]?.account?.profile?.name).toBe("John Doe");
515
- expect(result.current?.[1]?.account?.profile?.name).toBe("Jane Doe");
550
+ const johnsAccount = result.current?.[0]?.account;
551
+ const janesAccount = result.current?.[1]?.account;
552
+ assert(johnsAccount);
553
+ assert(janesAccount);
554
+ assertLoaded(johnsAccount.profile);
555
+ assertLoaded(janesAccount.profile);
556
+ expect(johnsAccount.profile.name).toBe("John Doe");
557
+ expect(janesAccount.profile.name).toBe("Jane Doe");
516
558
  });
517
559
  });
518
560
 
@@ -560,6 +602,79 @@ describe("useCoState", () => {
560
602
  expect(renderings).toEqual([true]);
561
603
  });
562
604
 
605
+ it("should use the schema's resolve query if no resolve query is provided", async () => {
606
+ const Person = co.map({
607
+ name: co.plainText(),
608
+ });
609
+ const PersonWithName = Person.resolved({ name: true });
610
+
611
+ const group = Group.create();
612
+ group.addMember("everyone", "writer");
613
+
614
+ const person = Person.create(
615
+ {
616
+ name: "John Doe",
617
+ },
618
+ group,
619
+ );
620
+
621
+ const account = await createJazzTestAccount({
622
+ isCurrentActiveAccount: true,
623
+ });
624
+
625
+ const { result } = renderHook(
626
+ () => {
627
+ return useCoState(PersonWithName, person.$jazz.id);
628
+ },
629
+ {
630
+ account,
631
+ },
632
+ );
633
+
634
+ await waitFor(() => {
635
+ expect(result.current).not.toBeNull();
636
+ });
637
+
638
+ assertLoaded(result.current);
639
+ expect(result.current.name.toUpperCase()).toBe("JOHN DOE");
640
+ });
641
+
642
+ it("schema resolve queries can be defined inside React components", async () => {
643
+ const Person = co.map({
644
+ name: co.plainText(),
645
+ });
646
+ const group = Group.create();
647
+ group.addMember("everyone", "writer");
648
+
649
+ const person = Person.create(
650
+ {
651
+ name: "John Doe",
652
+ },
653
+ group,
654
+ );
655
+
656
+ const account = await createJazzTestAccount({
657
+ isCurrentActiveAccount: true,
658
+ });
659
+
660
+ const { result } = renderHook(
661
+ () => {
662
+ // Defining the schema's resolve query inside useCoState
663
+ return useCoState(Person.resolved({ name: true }), person.$jazz.id);
664
+ },
665
+ {
666
+ account,
667
+ },
668
+ );
669
+
670
+ await waitFor(() => {
671
+ expect(result.current).not.toBeNull();
672
+ });
673
+
674
+ assertLoaded(result.current);
675
+ expect(result.current.name.toUpperCase()).toBe("JOHN DOE");
676
+ });
677
+
563
678
  it("should work with branches - create branch, edit and merge", async () => {
564
679
  const Person = co.map({
565
680
  name: z.string(),
@@ -605,7 +720,7 @@ describe("useCoState", () => {
605
720
 
606
721
  const branchPerson = result.current.branch;
607
722
 
608
- assert(branchPerson);
723
+ assertLoaded(branchPerson);
609
724
 
610
725
  act(() => {
611
726
  branchPerson.$jazz.applyDiff({
@@ -615,22 +730,31 @@ describe("useCoState", () => {
615
730
  });
616
731
  });
617
732
 
733
+ const updatedBranchPerson = result.current.branch;
734
+ assertLoaded(updatedBranchPerson);
735
+
618
736
  // Verify the branch has the changes
619
- expect(result.current?.branch?.name).toBe("John Smith");
620
- expect(result.current?.branch?.age).toBe(31);
621
- expect(result.current?.branch?.email).toBe("john.smith@example.com");
737
+ expect(updatedBranchPerson.name).toBe("John Smith");
738
+ expect(updatedBranchPerson.age).toBe(31);
739
+ expect(updatedBranchPerson.email).toBe("john.smith@example.com");
740
+
741
+ const mainPerson = result.current.main;
742
+ assertLoaded(mainPerson);
622
743
 
623
744
  // Verify the original is unchanged
624
- expect(result.current?.main?.name).toBe("John Doe");
625
- expect(result.current?.main?.age).toBe(30);
626
- expect(result.current?.main?.email).toBe("john@example.com");
745
+ expect(mainPerson.name).toBe("John Doe");
746
+ expect(mainPerson.age).toBe(30);
747
+ expect(mainPerson.email).toBe("john@example.com");
627
748
 
628
749
  // Merge the branch back
629
750
  await branchPerson.$jazz.unstable_merge();
630
751
 
752
+ const updatedMainPerson = result.current.main;
753
+ assertLoaded(updatedMainPerson);
754
+
631
755
  // Verify the original now has the merged changes
632
- expect(result.current?.main?.name).toBe("John Smith");
633
- expect(result.current?.main?.age).toBe(31);
634
- expect(result.current?.main?.email).toBe("john.smith@example.com");
756
+ expect(updatedMainPerson.name).toBe("John Smith");
757
+ expect(updatedMainPerson.age).toBe(31);
758
+ expect(updatedMainPerson.email).toBe("john.smith@example.com");
635
759
  });
636
760
  });
@@ -1,6 +1,7 @@
1
1
  // @vitest-environment happy-dom
2
2
 
3
3
  import { CoMap, Group, Inbox, Loaded, co, z } from "jazz-tools";
4
+ import { assertLoaded } from "jazz-tools/testing";
4
5
  import { describe, expect, it } from "vitest";
5
6
  import {
6
7
  experimental_useInboxSender,
@@ -63,7 +64,8 @@ describe("useInboxSender", () => {
63
64
  loadAs: account,
64
65
  });
65
66
 
66
- expect(responseMap!.value).toEqual("got it");
67
+ assertLoaded(responseMap);
68
+ expect(responseMap.value).toEqual("got it");
67
69
  });
68
70
 
69
71
  it("should regenerate the InboxSender if the active account changes", async () => {
@@ -107,7 +107,7 @@ describe("usePassphraseAuth", () => {
107
107
  expect(await result.current.signUp()).toBe(passphrase);
108
108
  });
109
109
 
110
- it("should be able to logout after sign up using useAccount.logOut", async () => {
110
+ it("should be able to logout after sign up", async () => {
111
111
  const account = await createJazzTestAccount({});
112
112
 
113
113
  const accounts: string[] = [];
@@ -116,92 +116,21 @@ describe("usePassphraseAuth", () => {
116
116
  const { result } = renderHook(
117
117
  () => {
118
118
  const passphraseAuth = usePassphraseAuth({ wordlist: testWordlist });
119
- const account = useAccount();
120
-
121
- if (account.me) {
122
- if (!accounts.includes(account.me.$jazz.id)) {
123
- accounts.push(account.me.$jazz.id);
124
- }
125
-
126
- updates.push({
127
- state: passphraseAuth.state,
128
- accountIndex: accounts.indexOf(account.me.$jazz.id),
129
- });
130
- }
131
-
132
- return { passphraseAuth, account };
133
- },
134
- {
135
- account,
136
- isAuthenticated: false,
137
- },
138
- );
139
-
140
- expect(result.current?.passphraseAuth.state).toBe("anonymous");
141
- expect(result.current?.account?.me).toBeDefined();
142
-
143
- const id = result.current?.account?.me?.$jazz.id;
144
-
145
- await act(async () => {
146
- await result.current?.passphraseAuth.signUp();
147
- });
148
-
149
- expect(result.current?.passphraseAuth.state).toBe("signedIn");
150
- expect(result.current?.account?.me?.$jazz.id).toBe(id);
151
-
152
- await act(async () => {
153
- await result.current?.account?.logOut();
154
- });
155
-
156
- expect(result.current?.passphraseAuth.state).toBe("anonymous");
157
- expect(result.current?.account?.me?.$jazz.id).not.toBe(id);
158
-
159
- expect(updates).toMatchInlineSnapshot(`
160
- [
161
- {
162
- "accountIndex": 0,
163
- "state": "anonymous",
164
- },
165
- {
166
- "accountIndex": 0,
167
- "state": "signedIn",
168
- },
169
- {
170
- "accountIndex": 0,
171
- "state": "anonymous",
172
- },
173
- {
174
- "accountIndex": 1,
175
- "state": "anonymous",
176
- },
177
- ]
178
- `);
179
- });
180
-
181
- it("should be able to logout after sign up using useLogout", async () => {
182
- const account = await createJazzTestAccount({});
183
-
184
- const accounts: string[] = [];
185
- const updates: { state: string; accountIndex: number }[] = [];
186
-
187
- const { result } = renderHook(
188
- () => {
189
- const passphraseAuth = usePassphraseAuth({ wordlist: testWordlist });
190
- const account = useAccount();
119
+ const me = useAccount();
191
120
  const logOut = useLogOut();
192
121
 
193
- if (account.me) {
194
- if (!accounts.includes(account.me.$jazz.id)) {
195
- accounts.push(account.me.$jazz.id);
122
+ if (me) {
123
+ if (!accounts.includes(me.$jazz.id)) {
124
+ accounts.push(me.$jazz.id);
196
125
  }
197
126
 
198
127
  updates.push({
199
128
  state: passphraseAuth.state,
200
- accountIndex: accounts.indexOf(account.me.$jazz.id),
129
+ accountIndex: accounts.indexOf(me.$jazz.id),
201
130
  });
202
131
  }
203
132
 
204
- return { passphraseAuth, account, logOut };
133
+ return { passphraseAuth, me, logOut };
205
134
  },
206
135
  {
207
136
  account,
@@ -210,23 +139,23 @@ describe("usePassphraseAuth", () => {
210
139
  );
211
140
 
212
141
  expect(result.current?.passphraseAuth.state).toBe("anonymous");
213
- expect(result.current?.account?.me).toBeDefined();
142
+ expect(result.current?.me).toBeDefined();
214
143
 
215
- const id = result.current?.account?.me?.$jazz.id;
144
+ const id = result.current?.me?.$jazz.id;
216
145
 
217
146
  await act(async () => {
218
147
  await result.current?.passphraseAuth.signUp();
219
148
  });
220
149
 
221
150
  expect(result.current?.passphraseAuth.state).toBe("signedIn");
222
- expect(result.current?.account?.me?.$jazz.id).toBe(id);
151
+ expect(result.current?.me?.$jazz.id).toBe(id);
223
152
 
224
153
  await act(async () => {
225
154
  await result.current?.logOut();
226
155
  });
227
156
 
228
157
  expect(result.current?.passphraseAuth.state).toBe("anonymous");
229
- expect(result.current?.account?.me?.$jazz.id).not.toBe(id);
158
+ expect(result.current?.me?.$jazz.id).not.toBe(id);
230
159
 
231
160
  expect(updates).toMatchInlineSnapshot(`
232
161
  [