jazz-tools 0.14.28 → 0.15.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 (887) hide show
  1. package/.svelte-kit/__package__/Provider.svelte +61 -0
  2. package/.svelte-kit/__package__/Provider.svelte.d.ts +19 -0
  3. package/.svelte-kit/__package__/Provider.svelte.d.ts.map +1 -0
  4. package/.svelte-kit/__package__/auth/PasskeyAuth.svelte.d.ts +11 -0
  5. package/.svelte-kit/__package__/auth/PasskeyAuth.svelte.d.ts.map +1 -0
  6. package/.svelte-kit/__package__/auth/PasskeyAuth.svelte.js +20 -0
  7. package/.svelte-kit/__package__/auth/PasskeyAuthBasicUI.svelte +81 -0
  8. package/.svelte-kit/__package__/auth/PasskeyAuthBasicUI.svelte.d.ts +9 -0
  9. package/.svelte-kit/__package__/auth/PasskeyAuthBasicUI.svelte.d.ts.map +1 -0
  10. package/.svelte-kit/__package__/auth/PassphraseAuth.svelte.d.ts +12 -0
  11. package/.svelte-kit/__package__/auth/PassphraseAuth.svelte.d.ts.map +1 -0
  12. package/.svelte-kit/__package__/auth/PassphraseAuth.svelte.js +30 -0
  13. package/.svelte-kit/__package__/auth/index.d.ts +4 -0
  14. package/.svelte-kit/__package__/auth/index.d.ts.map +1 -0
  15. package/.svelte-kit/__package__/auth/index.js +3 -0
  16. package/.svelte-kit/__package__/auth/useIsAuthenticated.svelte.d.ts +6 -0
  17. package/.svelte-kit/__package__/auth/useIsAuthenticated.svelte.d.ts.map +1 -0
  18. package/.svelte-kit/__package__/auth/useIsAuthenticated.svelte.js +22 -0
  19. package/.svelte-kit/__package__/index.d.ts +6 -0
  20. package/.svelte-kit/__package__/index.d.ts.map +1 -0
  21. package/.svelte-kit/__package__/index.js +5 -0
  22. package/.svelte-kit/__package__/jazz.class.svelte.d.ts +21 -0
  23. package/.svelte-kit/__package__/jazz.class.svelte.d.ts.map +1 -0
  24. package/.svelte-kit/__package__/jazz.class.svelte.js +117 -0
  25. package/.svelte-kit/__package__/jazz.svelte.d.ts +39 -0
  26. package/.svelte-kit/__package__/jazz.svelte.d.ts.map +1 -0
  27. package/.svelte-kit/__package__/jazz.svelte.js +70 -0
  28. package/.svelte-kit/__package__/testing.d.ts +10 -0
  29. package/.svelte-kit/__package__/testing.d.ts.map +1 -0
  30. package/.svelte-kit/__package__/testing.js +23 -0
  31. package/.turbo/turbo-build.log +180 -11
  32. package/CHANGELOG.md +26 -0
  33. package/README.md +2 -2
  34. package/dist/browser/BrowserContextManager.d.ts +31 -0
  35. package/dist/browser/BrowserContextManager.d.ts.map +1 -0
  36. package/dist/browser/auth/LocalStorageKVStore.d.ts +9 -0
  37. package/dist/browser/auth/LocalStorageKVStore.d.ts.map +1 -0
  38. package/dist/browser/auth/PasskeyAuth.d.ts +27 -0
  39. package/dist/browser/auth/PasskeyAuth.d.ts.map +1 -0
  40. package/dist/browser/createBrowserContext.d.ts +47 -0
  41. package/dist/browser/createBrowserContext.d.ts.map +1 -0
  42. package/dist/browser/index.d.ts +23 -0
  43. package/dist/browser/index.d.ts.map +1 -0
  44. package/dist/browser/index.js +469 -0
  45. package/dist/browser/index.js.map +1 -0
  46. package/dist/browser/storageOptions.d.ts +8 -0
  47. package/dist/browser/storageOptions.d.ts.map +1 -0
  48. package/dist/browser/tests/LocalStorageKVStore.test.d.ts +2 -0
  49. package/dist/browser/tests/LocalStorageKVStore.test.d.ts.map +1 -0
  50. package/dist/browser/tests/PasskeyAuth.test.d.ts +2 -0
  51. package/dist/browser/tests/PasskeyAuth.test.d.ts.map +1 -0
  52. package/dist/browser/tests/createInviteLink.test.d.ts +2 -0
  53. package/dist/browser/tests/createInviteLink.test.d.ts.map +1 -0
  54. package/dist/browser/tests/storageOptions.test.d.ts +2 -0
  55. package/dist/browser/tests/storageOptions.test.d.ts.map +1 -0
  56. package/dist/browser/tests/utils.d.ts +11 -0
  57. package/dist/browser/tests/utils.d.ts.map +1 -0
  58. package/dist/browser/utils/export-account-inspector.d.ts +6 -0
  59. package/dist/browser/utils/export-account-inspector.d.ts.map +1 -0
  60. package/dist/browser-media-images/index.d.ts +7 -0
  61. package/dist/browser-media-images/index.d.ts.map +1 -0
  62. package/dist/browser-media-images/index.js +70 -0
  63. package/dist/browser-media-images/index.js.map +1 -0
  64. package/dist/chunk-VBDJM6Z5.js +4938 -0
  65. package/dist/chunk-VBDJM6Z5.js.map +1 -0
  66. package/dist/expo/auth/clerk/index.d.ts +7 -0
  67. package/dist/expo/auth/clerk/index.d.ts.map +1 -0
  68. package/dist/expo/crypto.d.ts +2 -0
  69. package/dist/expo/crypto.d.ts.map +1 -0
  70. package/dist/expo/crypto.js +3 -0
  71. package/dist/expo/crypto.js.map +1 -0
  72. package/dist/expo/index.d.ts +6 -0
  73. package/dist/expo/index.d.ts.map +1 -0
  74. package/dist/expo/index.js +168 -0
  75. package/dist/expo/index.js.map +1 -0
  76. package/dist/expo/provider.d.ts +4 -0
  77. package/dist/expo/provider.d.ts.map +1 -0
  78. package/dist/expo/storage/expo-secure-store-adapter.d.ts +8 -0
  79. package/dist/expo/storage/expo-secure-store-adapter.d.ts.map +1 -0
  80. package/dist/expo/storage/expo-sqlite-adapter.d.ts +18 -0
  81. package/dist/expo/storage/expo-sqlite-adapter.d.ts.map +1 -0
  82. package/dist/expo/testing.d.ts +2 -0
  83. package/dist/expo/testing.d.ts.map +1 -0
  84. package/dist/expo/testing.js +3 -0
  85. package/dist/expo/testing.js.map +1 -0
  86. package/dist/index.d.ts +1 -2
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +172 -6
  89. package/dist/index.js.map +1 -1
  90. package/dist/inspector/custom-element-CWW72LEG.js +31971 -0
  91. package/dist/inspector/custom-element-CWW72LEG.js.map +1 -0
  92. package/dist/inspector/custom-element.d.ts +13 -0
  93. package/dist/inspector/custom-element.d.ts.map +1 -0
  94. package/dist/inspector/index.d.ts +12 -0
  95. package/dist/inspector/index.d.ts.map +1 -0
  96. package/dist/inspector/index.js +2053 -0
  97. package/dist/inspector/index.js.map +1 -0
  98. package/dist/inspector/register-custom-element.d.ts +2 -0
  99. package/dist/inspector/register-custom-element.d.ts.map +1 -0
  100. package/dist/inspector/register-custom-element.js +5 -0
  101. package/dist/inspector/register-custom-element.js.map +1 -0
  102. package/dist/inspector/ui/badge.d.ts +4 -0
  103. package/dist/inspector/ui/badge.d.ts.map +1 -0
  104. package/dist/inspector/ui/button.d.ts +9 -0
  105. package/dist/inspector/ui/button.d.ts.map +1 -0
  106. package/dist/inspector/ui/card.d.ts +10 -0
  107. package/dist/inspector/ui/card.d.ts.map +1 -0
  108. package/dist/inspector/ui/global-styles.d.ts +4 -0
  109. package/dist/inspector/ui/global-styles.d.ts.map +1 -0
  110. package/dist/inspector/ui/grid.d.ts +4 -0
  111. package/dist/inspector/ui/grid.d.ts.map +1 -0
  112. package/dist/inspector/ui/heading.d.ts +4 -0
  113. package/dist/inspector/ui/heading.d.ts.map +1 -0
  114. package/dist/inspector/ui/icon.d.ts +30 -0
  115. package/dist/inspector/ui/icon.d.ts.map +1 -0
  116. package/dist/inspector/ui/icons/chevron-down-icon.d.ts +2 -0
  117. package/dist/inspector/ui/icons/chevron-down-icon.d.ts.map +1 -0
  118. package/dist/inspector/ui/icons/delete-icon.d.ts +2 -0
  119. package/dist/inspector/ui/icons/delete-icon.d.ts.map +1 -0
  120. package/dist/inspector/ui/icons/link-icon.d.ts +2 -0
  121. package/dist/inspector/ui/icons/link-icon.d.ts.map +1 -0
  122. package/dist/inspector/ui/input.d.ts +11 -0
  123. package/dist/inspector/ui/input.d.ts.map +1 -0
  124. package/dist/inspector/ui/select.d.ts +5 -0
  125. package/dist/inspector/ui/select.d.ts.map +1 -0
  126. package/dist/inspector/ui/table.d.ts +8 -0
  127. package/dist/inspector/ui/table.d.ts.map +1 -0
  128. package/dist/inspector/ui/text.d.ts +10 -0
  129. package/dist/inspector/ui/text.d.ts.map +1 -0
  130. package/dist/inspector/viewer/account-or-group-text.d.ts +8 -0
  131. package/dist/inspector/viewer/account-or-group-text.d.ts.map +1 -0
  132. package/dist/inspector/viewer/account-view.d.ts +8 -0
  133. package/dist/inspector/viewer/account-view.d.ts.map +1 -0
  134. package/dist/inspector/viewer/breadcrumbs.d.ts +9 -0
  135. package/dist/inspector/viewer/breadcrumbs.d.ts.map +1 -0
  136. package/dist/inspector/viewer/co-stream-view.d.ts +18 -0
  137. package/dist/inspector/viewer/co-stream-view.d.ts.map +1 -0
  138. package/dist/inspector/viewer/grid-view.d.ts +9 -0
  139. package/dist/inspector/viewer/grid-view.d.ts.map +1 -0
  140. package/dist/inspector/viewer/group-view.d.ts +8 -0
  141. package/dist/inspector/viewer/group-view.d.ts.map +1 -0
  142. package/dist/inspector/viewer/inpsector-button.d.ts +6 -0
  143. package/dist/inspector/viewer/inpsector-button.d.ts.map +1 -0
  144. package/dist/inspector/viewer/new-app.d.ts +11 -0
  145. package/dist/inspector/viewer/new-app.d.ts.map +1 -0
  146. package/dist/inspector/viewer/page-stack.d.ts +15 -0
  147. package/dist/inspector/viewer/page-stack.d.ts.map +1 -0
  148. package/dist/inspector/viewer/page.d.ts +16 -0
  149. package/dist/inspector/viewer/page.d.ts.map +1 -0
  150. package/dist/inspector/viewer/raw-data-card.d.ts +5 -0
  151. package/dist/inspector/viewer/raw-data-card.d.ts.map +1 -0
  152. package/dist/inspector/viewer/role-display.d.ts +6 -0
  153. package/dist/inspector/viewer/role-display.d.ts.map +1 -0
  154. package/dist/inspector/viewer/table-viewer.d.ts +9 -0
  155. package/dist/inspector/viewer/table-viewer.d.ts.map +1 -0
  156. package/dist/inspector/viewer/type-icon.d.ts +11 -0
  157. package/dist/inspector/viewer/type-icon.d.ts.map +1 -0
  158. package/dist/inspector/viewer/types.d.ts +7 -0
  159. package/dist/inspector/viewer/types.d.ts.map +1 -0
  160. package/dist/inspector/viewer/use-open-inspector.d.ts +2 -0
  161. package/dist/inspector/viewer/use-open-inspector.d.ts.map +1 -0
  162. package/dist/inspector/viewer/use-page-path.d.ts +10 -0
  163. package/dist/inspector/viewer/use-page-path.d.ts.map +1 -0
  164. package/dist/inspector/viewer/use-resolve-covalue.d.ts +67 -0
  165. package/dist/inspector/viewer/use-resolve-covalue.d.ts.map +1 -0
  166. package/dist/inspector/viewer/value-renderer.d.ts +12 -0
  167. package/dist/inspector/viewer/value-renderer.d.ts.map +1 -0
  168. package/dist/prosemirror/index.d.ts +3 -0
  169. package/dist/prosemirror/index.d.ts.map +1 -0
  170. package/dist/prosemirror/index.js +2185 -0
  171. package/dist/prosemirror/index.js.map +1 -0
  172. package/dist/prosemirror/lib/converter.d.ts +33 -0
  173. package/dist/prosemirror/lib/converter.d.ts.map +1 -0
  174. package/dist/prosemirror/lib/plugin.d.ts +43 -0
  175. package/dist/prosemirror/lib/plugin.d.ts.map +1 -0
  176. package/dist/prosemirror/lib/sync.d.ts +35 -0
  177. package/dist/prosemirror/lib/sync.d.ts.map +1 -0
  178. package/dist/prosemirror/tests/plugin.test.d.ts +2 -0
  179. package/dist/prosemirror/tests/plugin.test.d.ts.map +1 -0
  180. package/dist/react/auth/Clerk.d.ts +7 -0
  181. package/dist/react/auth/Clerk.d.ts.map +1 -0
  182. package/dist/react/auth/DemoAuth.d.ts +5 -0
  183. package/dist/react/auth/DemoAuth.d.ts.map +1 -0
  184. package/dist/react/auth/PasskeyAuth.d.ts +24 -0
  185. package/dist/react/auth/PasskeyAuth.d.ts.map +1 -0
  186. package/dist/react/auth/PassphraseAuth.d.ts +6 -0
  187. package/dist/react/auth/PassphraseAuth.d.ts.map +1 -0
  188. package/dist/react/auth/auth.d.ts +6 -0
  189. package/dist/react/auth/auth.d.ts.map +1 -0
  190. package/dist/react/hooks.d.ts +9 -0
  191. package/dist/react/hooks.d.ts.map +1 -0
  192. package/dist/react/index.d.ts +8 -0
  193. package/dist/react/index.d.ts.map +1 -0
  194. package/dist/react/index.js +698 -0
  195. package/dist/react/index.js.map +1 -0
  196. package/dist/react/media.d.ts +24 -0
  197. package/dist/react/media.d.ts.map +1 -0
  198. package/dist/react/provider.d.ts +10 -0
  199. package/dist/react/provider.d.ts.map +1 -0
  200. package/dist/react/ssr.d.ts +4 -0
  201. package/dist/react/ssr.d.ts.map +1 -0
  202. package/dist/react/ssr.js +25 -0
  203. package/dist/react/ssr.js.map +1 -0
  204. package/dist/react/testing.d.ts +2 -0
  205. package/dist/react/testing.d.ts.map +1 -0
  206. package/dist/react/testing.js +3 -0
  207. package/dist/react/testing.js.map +1 -0
  208. package/dist/react/tests/testUtils.d.ts +14 -0
  209. package/dist/react/tests/testUtils.d.ts.map +1 -0
  210. package/dist/react/tests/useAcceptInvite.test.d.ts +2 -0
  211. package/dist/react/tests/useAcceptInvite.test.d.ts.map +1 -0
  212. package/dist/react-core/auth/DemoAuth.d.ts +17 -0
  213. package/dist/react-core/auth/DemoAuth.d.ts.map +1 -0
  214. package/dist/react-core/auth/PassphraseAuth.d.ts +21 -0
  215. package/dist/react-core/auth/PassphraseAuth.d.ts.map +1 -0
  216. package/dist/react-core/auth/index.d.ts +3 -0
  217. package/dist/react-core/auth/index.d.ts.map +1 -0
  218. package/dist/react-core/chunk-7DYMJ74I.js +12 -0
  219. package/dist/react-core/chunk-7DYMJ74I.js.map +1 -0
  220. package/dist/react-core/hooks.d.ts +17 -0
  221. package/dist/react-core/hooks.d.ts.map +1 -0
  222. package/dist/react-core/index.d.ts +4 -0
  223. package/dist/react-core/index.d.ts.map +1 -0
  224. package/dist/react-core/index.js +302 -0
  225. package/dist/react-core/index.js.map +1 -0
  226. package/dist/react-core/provider.d.ts +5 -0
  227. package/dist/react-core/provider.d.ts.map +1 -0
  228. package/dist/react-core/testing.d.ts +10 -0
  229. package/dist/react-core/testing.d.ts.map +1 -0
  230. package/dist/react-core/testing.js +43 -0
  231. package/dist/react-core/testing.js.map +1 -0
  232. package/dist/react-core/tests/fixtures.d.ts.map +1 -0
  233. package/dist/react-core/tests/testUtils.d.ts +15 -0
  234. package/dist/react-core/tests/testUtils.d.ts.map +1 -0
  235. package/dist/react-core/tests/useAccount.test.d.ts +2 -0
  236. package/dist/react-core/tests/useAccount.test.d.ts.map +1 -0
  237. package/dist/react-core/tests/useCoState.test.d.ts +2 -0
  238. package/dist/react-core/tests/useCoState.test.d.ts.map +1 -0
  239. package/dist/react-core/tests/useInboxSender.test.d.ts +2 -0
  240. package/dist/react-core/tests/useInboxSender.test.d.ts.map +1 -0
  241. package/dist/react-core/tests/useIsAuthenticated.test.d.ts +2 -0
  242. package/dist/react-core/tests/useIsAuthenticated.test.d.ts.map +1 -0
  243. package/dist/react-core/tests/usePassPhraseAuth.test.d.ts +2 -0
  244. package/dist/react-core/tests/usePassPhraseAuth.test.d.ts.map +1 -0
  245. package/dist/react-core/utils.d.ts +4 -0
  246. package/dist/react-core/utils.d.ts.map +1 -0
  247. package/dist/react-native/crypto.d.ts +2 -0
  248. package/dist/react-native/crypto.d.ts.map +1 -0
  249. package/dist/react-native/crypto.js +3 -0
  250. package/dist/react-native/crypto.js.map +1 -0
  251. package/dist/react-native/index.d.ts +5 -0
  252. package/dist/react-native/index.d.ts.map +1 -0
  253. package/dist/react-native/index.js +103 -0
  254. package/dist/react-native/index.js.map +1 -0
  255. package/dist/react-native/provider.d.ts +4 -0
  256. package/dist/react-native/provider.d.ts.map +1 -0
  257. package/dist/react-native/storage/mmkv-store-adapter.d.ts +8 -0
  258. package/dist/react-native/storage/mmkv-store-adapter.d.ts.map +1 -0
  259. package/dist/react-native/storage/op-sqlite-adapter.d.ts +13 -0
  260. package/dist/react-native/storage/op-sqlite-adapter.d.ts.map +1 -0
  261. package/dist/react-native/testing.d.ts +2 -0
  262. package/dist/react-native/testing.d.ts.map +1 -0
  263. package/dist/react-native/testing.js +3 -0
  264. package/dist/react-native/testing.js.map +1 -0
  265. package/dist/react-native-core/ReactNativeContextManager.d.ts +31 -0
  266. package/dist/react-native-core/ReactNativeContextManager.d.ts.map +1 -0
  267. package/dist/react-native-core/auth/DemoAuthUI.d.ts +8 -0
  268. package/dist/react-native-core/auth/DemoAuthUI.d.ts.map +1 -0
  269. package/dist/react-native-core/auth/auth.d.ts +3 -0
  270. package/dist/react-native-core/auth/auth.d.ts.map +1 -0
  271. package/dist/react-native-core/crypto/RNQuickCrypto.d.ts +15 -0
  272. package/dist/react-native-core/crypto/RNQuickCrypto.d.ts.map +1 -0
  273. package/dist/react-native-core/crypto/index.d.ts +2 -0
  274. package/dist/react-native-core/crypto/index.d.ts.map +1 -0
  275. package/dist/react-native-core/crypto.js +65 -0
  276. package/dist/react-native-core/crypto.js.map +1 -0
  277. package/dist/react-native-core/hooks.d.ts +8 -0
  278. package/dist/react-native-core/hooks.d.ts.map +1 -0
  279. package/dist/react-native-core/index.d.ts +9 -0
  280. package/dist/react-native-core/index.d.ts.map +1 -0
  281. package/dist/react-native-core/index.js +653 -0
  282. package/dist/react-native-core/index.js.map +1 -0
  283. package/dist/react-native-core/media.d.ts +24 -0
  284. package/dist/react-native-core/media.d.ts.map +1 -0
  285. package/dist/react-native-core/platform.d.ts +45 -0
  286. package/dist/react-native-core/platform.d.ts.map +1 -0
  287. package/dist/react-native-core/provider.d.ts +10 -0
  288. package/dist/react-native-core/provider.d.ts.map +1 -0
  289. package/dist/react-native-core/storage/kv-store-context.d.ts +17 -0
  290. package/dist/react-native-core/storage/kv-store-context.d.ts.map +1 -0
  291. package/dist/react-native-core/storage/sqlite-react-native.d.ts +9 -0
  292. package/dist/react-native-core/storage/sqlite-react-native.d.ts.map +1 -0
  293. package/dist/react-native-core/testing.js +3 -0
  294. package/dist/react-native-core/testing.js.map +1 -0
  295. package/dist/react-native-media-images/index.d.ts +7 -0
  296. package/dist/react-native-media-images/index.d.ts.map +1 -0
  297. package/dist/react-native-media-images/index.js +177 -0
  298. package/dist/react-native-media-images/index.js.map +1 -0
  299. package/dist/svelte/Provider.svelte +61 -0
  300. package/dist/svelte/Provider.svelte.d.ts +19 -0
  301. package/dist/svelte/Provider.svelte.d.ts.map +1 -0
  302. package/dist/svelte/auth/PasskeyAuth.svelte.d.ts +11 -0
  303. package/dist/svelte/auth/PasskeyAuth.svelte.d.ts.map +1 -0
  304. package/dist/svelte/auth/PasskeyAuth.svelte.js +20 -0
  305. package/dist/svelte/auth/PasskeyAuthBasicUI.svelte +81 -0
  306. package/dist/svelte/auth/PasskeyAuthBasicUI.svelte.d.ts +9 -0
  307. package/dist/svelte/auth/PasskeyAuthBasicUI.svelte.d.ts.map +1 -0
  308. package/dist/svelte/auth/PassphraseAuth.svelte.d.ts +12 -0
  309. package/dist/svelte/auth/PassphraseAuth.svelte.d.ts.map +1 -0
  310. package/dist/svelte/auth/PassphraseAuth.svelte.js +30 -0
  311. package/dist/svelte/auth/index.d.ts +4 -0
  312. package/dist/svelte/auth/index.d.ts.map +1 -0
  313. package/dist/svelte/auth/index.js +3 -0
  314. package/dist/svelte/auth/useIsAuthenticated.svelte.d.ts +6 -0
  315. package/dist/svelte/auth/useIsAuthenticated.svelte.d.ts.map +1 -0
  316. package/dist/svelte/auth/useIsAuthenticated.svelte.js +22 -0
  317. package/dist/svelte/index.d.ts +6 -0
  318. package/dist/svelte/index.d.ts.map +1 -0
  319. package/dist/svelte/index.js +5 -0
  320. package/dist/svelte/jazz.class.svelte.d.ts +21 -0
  321. package/dist/svelte/jazz.class.svelte.d.ts.map +1 -0
  322. package/dist/svelte/jazz.class.svelte.js +117 -0
  323. package/dist/svelte/jazz.svelte.d.ts +39 -0
  324. package/dist/svelte/jazz.svelte.d.ts.map +1 -0
  325. package/dist/svelte/jazz.svelte.js +70 -0
  326. package/dist/svelte/testing.d.ts +10 -0
  327. package/dist/svelte/testing.d.ts.map +1 -0
  328. package/dist/svelte/testing.js +23 -0
  329. package/dist/testing.d.ts +1 -42
  330. package/dist/testing.d.ts.map +1 -1
  331. package/dist/testing.js +2 -2
  332. package/dist/testing.js.map +1 -1
  333. package/dist/tiptap/index.d.ts +11 -0
  334. package/dist/tiptap/index.d.ts.map +1 -0
  335. package/dist/tiptap/index.js +22 -0
  336. package/dist/tiptap/index.js.map +1 -0
  337. package/dist/tools/auth/AuthSecretStorage.d.ts.map +1 -0
  338. package/dist/tools/auth/DemoAuth.d.ts.map +1 -0
  339. package/dist/tools/auth/InMemoryKVStore.d.ts.map +1 -0
  340. package/dist/tools/auth/KvStoreContext.d.ts.map +1 -0
  341. package/dist/tools/auth/PassphraseAuth.d.ts.map +1 -0
  342. package/dist/tools/auth/clerk/getClerkUsername.d.ts +3 -0
  343. package/dist/tools/auth/clerk/getClerkUsername.d.ts.map +1 -0
  344. package/dist/tools/auth/clerk/index.d.ts +25 -0
  345. package/dist/tools/auth/clerk/index.d.ts.map +1 -0
  346. package/dist/tools/auth/clerk/tests/JazzClerkAuth.test.d.ts +2 -0
  347. package/dist/tools/auth/clerk/tests/JazzClerkAuth.test.d.ts.map +1 -0
  348. package/dist/tools/auth/clerk/tests/getClerkUsername.test.d.ts +2 -0
  349. package/dist/tools/auth/clerk/tests/getClerkUsername.test.d.ts.map +1 -0
  350. package/dist/tools/auth/clerk/tests/types.test.d.ts +2 -0
  351. package/dist/tools/auth/clerk/tests/types.test.d.ts.map +1 -0
  352. package/dist/tools/auth/clerk/types.d.ts +32 -0
  353. package/dist/tools/auth/clerk/types.d.ts.map +1 -0
  354. package/dist/tools/coValues/CoValueBase.d.ts.map +1 -0
  355. package/dist/tools/coValues/account.d.ts.map +1 -0
  356. package/dist/tools/coValues/coFeed.d.ts +377 -0
  357. package/dist/tools/coValues/coFeed.d.ts.map +1 -0
  358. package/dist/tools/coValues/coList.d.ts.map +1 -0
  359. package/dist/tools/coValues/coMap.d.ts +625 -0
  360. package/dist/tools/coValues/coMap.d.ts.map +1 -0
  361. package/dist/tools/coValues/coPlainText.d.ts.map +1 -0
  362. package/dist/tools/coValues/coRichText.d.ts.map +1 -0
  363. package/dist/tools/coValues/deepLoading.d.ts.map +1 -0
  364. package/dist/tools/coValues/extensions/imageDef.d.ts.map +1 -0
  365. package/dist/tools/coValues/group.d.ts.map +1 -0
  366. package/dist/tools/coValues/inbox.d.ts.map +1 -0
  367. package/dist/tools/coValues/interfaces.d.ts +116 -0
  368. package/dist/tools/coValues/interfaces.d.ts.map +1 -0
  369. package/dist/tools/coValues/profile.d.ts.map +1 -0
  370. package/dist/tools/coValues/registeredSchemas.d.ts.map +1 -0
  371. package/dist/tools/coValues/schemaUnion.d.ts.map +1 -0
  372. package/dist/tools/exports.d.ts +24 -0
  373. package/dist/tools/exports.d.ts.map +1 -0
  374. package/dist/tools/implementation/ContextManager.d.ts.map +1 -0
  375. package/dist/tools/implementation/activeAccountContext.d.ts.map +1 -0
  376. package/dist/tools/implementation/anonymousJazzAgent.d.ts.map +1 -0
  377. package/dist/tools/implementation/createContext.d.ts.map +1 -0
  378. package/dist/tools/implementation/devtoolsFormatters.d.ts.map +1 -0
  379. package/dist/tools/implementation/errors.d.ts.map +1 -0
  380. package/dist/tools/implementation/inspect.d.ts.map +1 -0
  381. package/dist/tools/implementation/invites.d.ts.map +1 -0
  382. package/dist/tools/implementation/refs.d.ts.map +1 -0
  383. package/dist/tools/implementation/schema.d.ts.map +1 -0
  384. package/dist/tools/implementation/symbols.d.ts.map +1 -0
  385. package/dist/tools/implementation/zodSchema/coExport.d.ts.map +1 -0
  386. package/dist/tools/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts.map +1 -0
  387. package/dist/tools/implementation/zodSchema/runtimeConverters/zodSchemaToCoSchema.d.ts.map +1 -0
  388. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -0
  389. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -0
  390. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -0
  391. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +64 -0
  392. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -0
  393. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -0
  394. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -0
  395. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -0
  396. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -0
  397. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +1 -0
  398. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts.map +1 -0
  399. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +1 -0
  400. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +1 -0
  401. package/dist/tools/implementation/zodSchema/unionUtils.d.ts.map +1 -0
  402. package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -0
  403. package/dist/tools/implementation/zodSchema/zodReExport.d.ts.map +1 -0
  404. package/dist/tools/implementation/zodSchema/zodSchema.d.ts.map +1 -0
  405. package/dist/tools/index.d.ts +3 -0
  406. package/dist/tools/index.d.ts.map +1 -0
  407. package/dist/tools/internal.d.ts.map +1 -0
  408. package/dist/tools/lib/cache.d.ts.map +1 -0
  409. package/dist/tools/lib/cache.test.d.ts.map +1 -0
  410. package/dist/tools/lib/migration.d.ts.map +1 -0
  411. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts +15 -0
  412. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts.map +1 -0
  413. package/dist/tools/subscribe/JazzError.d.ts.map +1 -0
  414. package/dist/tools/subscribe/SubscriptionScope.d.ts +47 -0
  415. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -0
  416. package/dist/tools/subscribe/index.d.ts.map +1 -0
  417. package/dist/tools/subscribe/types.d.ts.map +1 -0
  418. package/dist/tools/subscribe/utils.d.ts.map +1 -0
  419. package/dist/tools/testing.d.ts +43 -0
  420. package/dist/tools/testing.d.ts.map +1 -0
  421. package/dist/tools/tests/AuthSecretStorage.test.d.ts.map +1 -0
  422. package/dist/tools/tests/ContextManager.test.d.ts.map +1 -0
  423. package/dist/tools/tests/DemoAuth.test.d.ts.map +1 -0
  424. package/dist/tools/tests/PassphraseAuth.test.d.ts.map +1 -0
  425. package/dist/tools/tests/account.test.d.ts.map +1 -0
  426. package/dist/tools/tests/coFeed.test-d.d.ts.map +1 -0
  427. package/dist/tools/tests/coFeed.test.d.ts.map +1 -0
  428. package/dist/tools/tests/coList.test-d.d.ts.map +1 -0
  429. package/dist/tools/tests/coList.test.d.ts.map +1 -0
  430. package/dist/tools/tests/coMap.record.test-d.d.ts.map +1 -0
  431. package/dist/tools/tests/coMap.record.test.d.ts.map +1 -0
  432. package/dist/tools/tests/coMap.test-d.d.ts.map +1 -0
  433. package/dist/tools/tests/coMap.test.d.ts.map +1 -0
  434. package/dist/tools/tests/coPlainText.test.d.ts.map +1 -0
  435. package/dist/tools/tests/createContext.test.d.ts.map +1 -0
  436. package/dist/tools/tests/deepLoading.test.d.ts.map +1 -0
  437. package/dist/tools/tests/fixtures.d.ts +2 -0
  438. package/dist/tools/tests/fixtures.d.ts.map +1 -0
  439. package/dist/tools/tests/groupsAndAccounts.test.d.ts.map +1 -0
  440. package/dist/tools/tests/imageDef.test.d.ts.map +1 -0
  441. package/dist/tools/tests/inbox.test.d.ts.map +1 -0
  442. package/dist/tools/tests/interfaces.test.d.ts.map +1 -0
  443. package/dist/tools/tests/invites.test.d.ts.map +1 -0
  444. package/dist/tools/tests/load.test.d.ts.map +1 -0
  445. package/dist/tools/tests/patterns/notifications.test.d.ts.map +1 -0
  446. package/dist/tools/tests/patterns/requestToJoin.test.d.ts.map +1 -0
  447. package/dist/tools/tests/schema.test.d.ts.map +1 -0
  448. package/dist/tools/tests/schemaUnion.test.d.ts.map +1 -0
  449. package/dist/tools/tests/subscribe.test.d.ts.map +1 -0
  450. package/dist/tools/tests/testing.test.d.ts.map +1 -0
  451. package/dist/tools/tests/utils.d.ts.map +1 -0
  452. package/dist/tools/tests/zod.test.d.ts.map +1 -0
  453. package/dist/tools/types.d.ts.map +1 -0
  454. package/dist/worker/index.d.ts +25 -0
  455. package/dist/worker/index.d.ts.map +1 -0
  456. package/dist/worker/index.js +93 -0
  457. package/dist/worker/index.js.map +1 -0
  458. package/package.json +193 -11
  459. package/src/browser/BrowserContextManager.ts +85 -0
  460. package/src/browser/auth/LocalStorageKVStore.ts +21 -0
  461. package/src/browser/auth/PasskeyAuth.ts +175 -0
  462. package/src/browser/createBrowserContext.ts +326 -0
  463. package/src/browser/index.ts +72 -0
  464. package/src/browser/storageOptions.ts +17 -0
  465. package/src/browser/tests/LocalStorageKVStore.test.ts +67 -0
  466. package/src/browser/tests/PasskeyAuth.test.ts +242 -0
  467. package/src/browser/tests/createInviteLink.test.ts +18 -0
  468. package/src/browser/tests/storageOptions.test.ts +33 -0
  469. package/src/browser/tests/utils.ts +93 -0
  470. package/src/browser/utils/export-account-inspector.ts +58 -0
  471. package/src/browser-media-images/index.ts +130 -0
  472. package/src/expo/auth/clerk/README.md +44 -0
  473. package/src/expo/auth/clerk/index.tsx +80 -0
  474. package/src/expo/crypto.ts +1 -0
  475. package/src/expo/index.ts +6 -0
  476. package/src/expo/provider.tsx +29 -0
  477. package/src/expo/storage/expo-secure-store-adapter.ts +29 -0
  478. package/src/expo/storage/expo-sqlite-adapter.ts +94 -0
  479. package/src/expo/testing.ts +1 -0
  480. package/src/index.ts +1 -3
  481. package/src/inspector/custom-element.tsx +63 -0
  482. package/src/inspector/index.ts +23 -0
  483. package/src/inspector/register-custom-element.ts +3 -0
  484. package/src/inspector/ui/badge.tsx +20 -0
  485. package/src/inspector/ui/button.tsx +81 -0
  486. package/src/inspector/ui/card.tsx +23 -0
  487. package/src/inspector/ui/global-styles.tsx +74 -0
  488. package/src/inspector/ui/grid.tsx +48 -0
  489. package/src/inspector/ui/heading.tsx +15 -0
  490. package/src/inspector/ui/icon.tsx +71 -0
  491. package/src/inspector/ui/icons/chevron-down-icon.tsx +16 -0
  492. package/src/inspector/ui/icons/delete-icon.tsx +19 -0
  493. package/src/inspector/ui/icons/link-icon.tsx +18 -0
  494. package/src/inspector/ui/input.tsx +51 -0
  495. package/src/inspector/ui/select.tsx +73 -0
  496. package/src/inspector/ui/table.tsx +90 -0
  497. package/src/inspector/ui/text.tsx +62 -0
  498. package/src/inspector/viewer/account-or-group-text.tsx +52 -0
  499. package/src/inspector/viewer/account-view.tsx +34 -0
  500. package/src/inspector/viewer/breadcrumbs.tsx +52 -0
  501. package/src/inspector/viewer/co-stream-view.tsx +374 -0
  502. package/src/inspector/viewer/grid-view.tsx +90 -0
  503. package/src/inspector/viewer/group-view.tsx +67 -0
  504. package/src/inspector/viewer/inpsector-button.tsx +89 -0
  505. package/src/inspector/viewer/new-app.tsx +172 -0
  506. package/src/inspector/viewer/page-stack.tsx +56 -0
  507. package/src/inspector/viewer/page.tsx +199 -0
  508. package/src/inspector/viewer/raw-data-card.tsx +53 -0
  509. package/src/inspector/viewer/role-display.tsx +28 -0
  510. package/src/inspector/viewer/table-viewer.tsx +184 -0
  511. package/src/inspector/viewer/type-icon.tsx +63 -0
  512. package/src/inspector/viewer/types.ts +11 -0
  513. package/src/inspector/viewer/use-open-inspector.ts +18 -0
  514. package/src/inspector/viewer/use-page-path.ts +65 -0
  515. package/src/inspector/viewer/use-resolve-covalue.ts +214 -0
  516. package/src/inspector/viewer/value-renderer.tsx +266 -0
  517. package/src/prosemirror/index.ts +2 -0
  518. package/src/prosemirror/lib/converter.ts +50 -0
  519. package/src/prosemirror/lib/plugin.ts +120 -0
  520. package/src/prosemirror/lib/sync.ts +96 -0
  521. package/src/prosemirror/tests/plugin.test.ts +127 -0
  522. package/src/react/auth/Clerk.tsx +82 -0
  523. package/src/react/auth/DemoAuth.tsx +121 -0
  524. package/src/react/auth/PasskeyAuth.tsx +168 -0
  525. package/src/react/auth/PassphraseAuth.tsx +196 -0
  526. package/src/react/auth/auth.ts +9 -0
  527. package/src/react/hooks.tsx +53 -0
  528. package/src/react/index.ts +16 -0
  529. package/src/react/media.tsx +74 -0
  530. package/src/react/provider.tsx +114 -0
  531. package/src/react/scratch.tsx +50 -0
  532. package/src/react/ssr.ts +25 -0
  533. package/src/react/testing.tsx +1 -0
  534. package/src/react/tests/testUtils.tsx +54 -0
  535. package/src/react/tests/useAcceptInvite.test.ts +55 -0
  536. package/src/react-core/auth/DemoAuth.tsx +47 -0
  537. package/src/react-core/auth/PassphraseAuth.tsx +58 -0
  538. package/src/react-core/auth/index.ts +2 -0
  539. package/src/react-core/hooks.ts +310 -0
  540. package/src/react-core/index.ts +3 -0
  541. package/src/react-core/provider.tsx +11 -0
  542. package/src/react-core/testing.tsx +42 -0
  543. package/src/react-core/tests/testUtils.tsx +65 -0
  544. package/src/react-core/tests/useAccount.test.ts +238 -0
  545. package/src/react-core/tests/useCoState.test.ts +553 -0
  546. package/src/react-core/tests/useDemoAuth.test.tsx +84 -0
  547. package/src/react-core/tests/useInboxSender.test.ts +58 -0
  548. package/src/react-core/tests/useIsAuthenticated.test.ts +34 -0
  549. package/src/react-core/tests/usePassPhraseAuth.test.ts +180 -0
  550. package/src/react-core/utils.ts +28 -0
  551. package/src/react-native/crypto.ts +1 -0
  552. package/src/react-native/index.ts +5 -0
  553. package/src/react-native/provider.tsx +30 -0
  554. package/src/react-native/storage/mmkv-store-adapter.ts +24 -0
  555. package/src/react-native/storage/op-sqlite-adapter.ts +79 -0
  556. package/src/react-native/testing.ts +1 -0
  557. package/src/react-native-core/ReactNativeContextManager.ts +84 -0
  558. package/src/react-native-core/auth/DemoAuthUI.tsx +202 -0
  559. package/src/react-native-core/auth/auth.ts +14 -0
  560. package/src/react-native-core/crypto/RNQuickCrypto.ts +92 -0
  561. package/src/react-native-core/crypto/index.ts +1 -0
  562. package/src/react-native-core/hooks.tsx +64 -0
  563. package/src/react-native-core/index.ts +9 -0
  564. package/src/react-native-core/media.tsx +79 -0
  565. package/src/react-native-core/platform.ts +250 -0
  566. package/src/react-native-core/provider.tsx +115 -0
  567. package/src/react-native-core/storage/sqlite-react-native.ts +19 -0
  568. package/src/react-native-core/testing.tsx +1 -0
  569. package/src/react-native-media-images/index.ts +238 -0
  570. package/src/svelte/Provider.svelte +61 -0
  571. package/src/svelte/auth/PasskeyAuth.svelte.ts +42 -0
  572. package/src/svelte/auth/PasskeyAuthBasicUI.svelte +81 -0
  573. package/src/svelte/auth/PassphraseAuth.svelte.ts +49 -0
  574. package/src/svelte/auth/index.ts +3 -0
  575. package/src/svelte/auth/useIsAuthenticated.svelte.ts +28 -0
  576. package/src/svelte/index.ts +5 -0
  577. package/src/svelte/jazz.class.svelte.ts +172 -0
  578. package/src/svelte/jazz.svelte.ts +109 -0
  579. package/src/svelte/testing.ts +42 -0
  580. package/src/testing.ts +1 -312
  581. package/src/tiptap/index.ts +28 -0
  582. package/src/tools/auth/KvStoreContext.ts +39 -0
  583. package/src/tools/auth/clerk/getClerkUsername.ts +36 -0
  584. package/src/tools/auth/clerk/index.ts +174 -0
  585. package/src/tools/auth/clerk/tests/JazzClerkAuth.test.ts +284 -0
  586. package/src/tools/auth/clerk/tests/getClerkUsername.test.ts +81 -0
  587. package/src/tools/auth/clerk/tests/types.test.ts +49 -0
  588. package/src/tools/auth/clerk/types.ts +56 -0
  589. package/src/tools/coValues/coFeed.ts +981 -0
  590. package/src/tools/coValues/coMap.ts +929 -0
  591. package/src/tools/coValues/interfaces.ts +464 -0
  592. package/src/tools/exports.ts +117 -0
  593. package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +188 -0
  594. package/src/tools/implementation/zodSchema/zodCo.ts +370 -0
  595. package/src/tools/index.ts +8 -0
  596. package/src/tools/subscribe/CoValueCoreSubscription.ts +74 -0
  597. package/src/tools/subscribe/SubscriptionScope.ts +626 -0
  598. package/src/tools/testing.ts +301 -0
  599. package/src/tools/tests/coFeed.test.ts +840 -0
  600. package/src/tools/tests/coMap.test.ts +2113 -0
  601. package/src/tools/tests/fixtures.ts +2050 -0
  602. package/src/tools/tests/load.test.ts +117 -0
  603. package/src/worker/index.ts +127 -0
  604. package/tsconfig.json +10 -3
  605. package/tsconfig.svelte.json +6 -0
  606. package/tsup.config.ts +143 -9
  607. package/dist/auth/AuthSecretStorage.d.ts.map +0 -1
  608. package/dist/auth/DemoAuth.d.ts.map +0 -1
  609. package/dist/auth/InMemoryKVStore.d.ts.map +0 -1
  610. package/dist/auth/KvStoreContext.d.ts.map +0 -1
  611. package/dist/auth/PassphraseAuth.d.ts.map +0 -1
  612. package/dist/chunk-AUQIX4E7.js +0 -4827
  613. package/dist/chunk-AUQIX4E7.js.map +0 -1
  614. package/dist/coValues/CoValueBase.d.ts.map +0 -1
  615. package/dist/coValues/account.d.ts.map +0 -1
  616. package/dist/coValues/coFeed.d.ts +0 -368
  617. package/dist/coValues/coFeed.d.ts.map +0 -1
  618. package/dist/coValues/coList.d.ts.map +0 -1
  619. package/dist/coValues/coMap.d.ts +0 -529
  620. package/dist/coValues/coMap.d.ts.map +0 -1
  621. package/dist/coValues/coPlainText.d.ts.map +0 -1
  622. package/dist/coValues/coRichText.d.ts.map +0 -1
  623. package/dist/coValues/deepLoading.d.ts.map +0 -1
  624. package/dist/coValues/extensions/imageDef.d.ts.map +0 -1
  625. package/dist/coValues/group.d.ts.map +0 -1
  626. package/dist/coValues/inbox.d.ts.map +0 -1
  627. package/dist/coValues/interfaces.d.ts +0 -113
  628. package/dist/coValues/interfaces.d.ts.map +0 -1
  629. package/dist/coValues/profile.d.ts.map +0 -1
  630. package/dist/coValues/registeredSchemas.d.ts.map +0 -1
  631. package/dist/coValues/schemaUnion.d.ts.map +0 -1
  632. package/dist/exports.d.ts +0 -23
  633. package/dist/exports.d.ts.map +0 -1
  634. package/dist/implementation/ContextManager.d.ts.map +0 -1
  635. package/dist/implementation/activeAccountContext.d.ts.map +0 -1
  636. package/dist/implementation/anonymousJazzAgent.d.ts.map +0 -1
  637. package/dist/implementation/createContext.d.ts.map +0 -1
  638. package/dist/implementation/devtoolsFormatters.d.ts.map +0 -1
  639. package/dist/implementation/errors.d.ts.map +0 -1
  640. package/dist/implementation/inspect.d.ts.map +0 -1
  641. package/dist/implementation/invites.d.ts.map +0 -1
  642. package/dist/implementation/refs.d.ts.map +0 -1
  643. package/dist/implementation/schema.d.ts.map +0 -1
  644. package/dist/implementation/symbols.d.ts.map +0 -1
  645. package/dist/implementation/zodSchema/coExport.d.ts.map +0 -1
  646. package/dist/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts.map +0 -1
  647. package/dist/implementation/zodSchema/runtimeConverters/zodSchemaToCoSchema.d.ts.map +0 -1
  648. package/dist/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +0 -1
  649. package/dist/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +0 -1
  650. package/dist/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +0 -1
  651. package/dist/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +0 -52
  652. package/dist/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +0 -1
  653. package/dist/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +0 -1
  654. package/dist/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +0 -1
  655. package/dist/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +0 -1
  656. package/dist/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +0 -1
  657. package/dist/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +0 -1
  658. package/dist/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts.map +0 -1
  659. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +0 -1
  660. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +0 -1
  661. package/dist/implementation/zodSchema/unionUtils.d.ts.map +0 -1
  662. package/dist/implementation/zodSchema/zodCo.d.ts.map +0 -1
  663. package/dist/implementation/zodSchema/zodReExport.d.ts.map +0 -1
  664. package/dist/implementation/zodSchema/zodSchema.d.ts.map +0 -1
  665. package/dist/internal.d.ts.map +0 -1
  666. package/dist/lib/cache.d.ts.map +0 -1
  667. package/dist/lib/cache.test.d.ts.map +0 -1
  668. package/dist/lib/migration.d.ts.map +0 -1
  669. package/dist/subscribe/CoValueCoreSubscription.d.ts +0 -14
  670. package/dist/subscribe/CoValueCoreSubscription.d.ts.map +0 -1
  671. package/dist/subscribe/JazzError.d.ts.map +0 -1
  672. package/dist/subscribe/SubscriptionScope.d.ts +0 -46
  673. package/dist/subscribe/SubscriptionScope.d.ts.map +0 -1
  674. package/dist/subscribe/index.d.ts.map +0 -1
  675. package/dist/subscribe/types.d.ts.map +0 -1
  676. package/dist/subscribe/utils.d.ts.map +0 -1
  677. package/dist/tests/AuthSecretStorage.test.d.ts.map +0 -1
  678. package/dist/tests/ContextManager.test.d.ts.map +0 -1
  679. package/dist/tests/DemoAuth.test.d.ts.map +0 -1
  680. package/dist/tests/PassphraseAuth.test.d.ts.map +0 -1
  681. package/dist/tests/account.test.d.ts.map +0 -1
  682. package/dist/tests/coFeed.test-d.d.ts.map +0 -1
  683. package/dist/tests/coFeed.test.d.ts.map +0 -1
  684. package/dist/tests/coList.test-d.d.ts.map +0 -1
  685. package/dist/tests/coList.test.d.ts.map +0 -1
  686. package/dist/tests/coMap.record.test-d.d.ts.map +0 -1
  687. package/dist/tests/coMap.record.test.d.ts.map +0 -1
  688. package/dist/tests/coMap.test-d.d.ts.map +0 -1
  689. package/dist/tests/coMap.test.d.ts.map +0 -1
  690. package/dist/tests/coPlainText.test.d.ts.map +0 -1
  691. package/dist/tests/createContext.test.d.ts.map +0 -1
  692. package/dist/tests/deepLoading.test.d.ts.map +0 -1
  693. package/dist/tests/fixtures.d.ts.map +0 -1
  694. package/dist/tests/groupsAndAccounts.test.d.ts.map +0 -1
  695. package/dist/tests/imageDef.test.d.ts.map +0 -1
  696. package/dist/tests/inbox.test.d.ts.map +0 -1
  697. package/dist/tests/interfaces.test.d.ts.map +0 -1
  698. package/dist/tests/invites.test.d.ts.map +0 -1
  699. package/dist/tests/load.test.d.ts.map +0 -1
  700. package/dist/tests/patterns/notifications.test.d.ts.map +0 -1
  701. package/dist/tests/patterns/requestToJoin.test.d.ts.map +0 -1
  702. package/dist/tests/schema.test.d.ts.map +0 -1
  703. package/dist/tests/schemaUnion.test.d.ts.map +0 -1
  704. package/dist/tests/subscribe.test.d.ts.map +0 -1
  705. package/dist/tests/testing.test.d.ts.map +0 -1
  706. package/dist/tests/utils.d.ts.map +0 -1
  707. package/dist/tests/zod.test.d.ts.map +0 -1
  708. package/dist/types.d.ts.map +0 -1
  709. package/src/coValues/coFeed.ts +0 -943
  710. package/src/coValues/coMap.ts +0 -825
  711. package/src/coValues/interfaces.ts +0 -454
  712. package/src/exports.ts +0 -108
  713. package/src/implementation/zodSchema/schemaTypes/CoMapSchema.ts +0 -150
  714. package/src/implementation/zodSchema/zodCo.ts +0 -364
  715. package/src/subscribe/CoValueCoreSubscription.ts +0 -71
  716. package/src/subscribe/SubscriptionScope.ts +0 -614
  717. package/src/tests/coFeed.test.ts +0 -771
  718. package/src/tests/coMap.test.ts +0 -1637
  719. package/src/tests/load.test.ts +0 -116
  720. /package/dist/{tests → react-core/tests}/fixtures.d.ts +0 -0
  721. /package/dist/{auth → tools/auth}/AuthSecretStorage.d.ts +0 -0
  722. /package/dist/{auth → tools/auth}/DemoAuth.d.ts +0 -0
  723. /package/dist/{auth → tools/auth}/InMemoryKVStore.d.ts +0 -0
  724. /package/dist/{auth → tools/auth}/KvStoreContext.d.ts +0 -0
  725. /package/dist/{auth → tools/auth}/PassphraseAuth.d.ts +0 -0
  726. /package/dist/{coValues → tools/coValues}/CoValueBase.d.ts +0 -0
  727. /package/dist/{coValues → tools/coValues}/account.d.ts +0 -0
  728. /package/dist/{coValues → tools/coValues}/coList.d.ts +0 -0
  729. /package/dist/{coValues → tools/coValues}/coPlainText.d.ts +0 -0
  730. /package/dist/{coValues → tools/coValues}/coRichText.d.ts +0 -0
  731. /package/dist/{coValues → tools/coValues}/deepLoading.d.ts +0 -0
  732. /package/dist/{coValues → tools/coValues}/extensions/imageDef.d.ts +0 -0
  733. /package/dist/{coValues → tools/coValues}/group.d.ts +0 -0
  734. /package/dist/{coValues → tools/coValues}/inbox.d.ts +0 -0
  735. /package/dist/{coValues → tools/coValues}/profile.d.ts +0 -0
  736. /package/dist/{coValues → tools/coValues}/registeredSchemas.d.ts +0 -0
  737. /package/dist/{coValues → tools/coValues}/schemaUnion.d.ts +0 -0
  738. /package/dist/{implementation → tools/implementation}/ContextManager.d.ts +0 -0
  739. /package/dist/{implementation → tools/implementation}/activeAccountContext.d.ts +0 -0
  740. /package/dist/{implementation → tools/implementation}/anonymousJazzAgent.d.ts +0 -0
  741. /package/dist/{implementation → tools/implementation}/createContext.d.ts +0 -0
  742. /package/dist/{implementation → tools/implementation}/devtoolsFormatters.d.ts +0 -0
  743. /package/dist/{implementation → tools/implementation}/errors.d.ts +0 -0
  744. /package/dist/{implementation → tools/implementation}/inspect.d.ts +0 -0
  745. /package/dist/{implementation → tools/implementation}/invites.d.ts +0 -0
  746. /package/dist/{implementation → tools/implementation}/refs.d.ts +0 -0
  747. /package/dist/{implementation → tools/implementation}/schema.d.ts +0 -0
  748. /package/dist/{implementation → tools/implementation}/symbols.d.ts +0 -0
  749. /package/dist/{implementation → tools/implementation}/zodSchema/coExport.d.ts +0 -0
  750. /package/dist/{implementation → tools/implementation}/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts +0 -0
  751. /package/dist/{implementation → tools/implementation}/zodSchema/runtimeConverters/zodSchemaToCoSchema.d.ts +0 -0
  752. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/AccountSchema.d.ts +0 -0
  753. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/CoFeedSchema.d.ts +0 -0
  754. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/CoListSchema.d.ts +0 -0
  755. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/CoRecordSchema.d.ts +0 -0
  756. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/FileStreamSchema.d.ts +0 -0
  757. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/PlainTextSchema.d.ts +0 -0
  758. /package/dist/{implementation → tools/implementation}/zodSchema/schemaTypes/RichTextSchema.d.ts +0 -0
  759. /package/dist/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOfSchema.d.ts +0 -0
  760. /package/dist/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts +0 -0
  761. /package/dist/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts +0 -0
  762. /package/dist/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts +0 -0
  763. /package/dist/{implementation → tools/implementation}/zodSchema/unionUtils.d.ts +0 -0
  764. /package/dist/{implementation → tools/implementation}/zodSchema/zodCo.d.ts +0 -0
  765. /package/dist/{implementation → tools/implementation}/zodSchema/zodReExport.d.ts +0 -0
  766. /package/dist/{implementation → tools/implementation}/zodSchema/zodSchema.d.ts +0 -0
  767. /package/dist/{internal.d.ts → tools/internal.d.ts} +0 -0
  768. /package/dist/{lib → tools/lib}/cache.d.ts +0 -0
  769. /package/dist/{lib → tools/lib}/cache.test.d.ts +0 -0
  770. /package/dist/{lib → tools/lib}/migration.d.ts +0 -0
  771. /package/dist/{subscribe → tools/subscribe}/JazzError.d.ts +0 -0
  772. /package/dist/{subscribe → tools/subscribe}/index.d.ts +0 -0
  773. /package/dist/{subscribe → tools/subscribe}/types.d.ts +0 -0
  774. /package/dist/{subscribe → tools/subscribe}/utils.d.ts +0 -0
  775. /package/dist/{tests → tools/tests}/AuthSecretStorage.test.d.ts +0 -0
  776. /package/dist/{tests → tools/tests}/ContextManager.test.d.ts +0 -0
  777. /package/dist/{tests → tools/tests}/DemoAuth.test.d.ts +0 -0
  778. /package/dist/{tests → tools/tests}/PassphraseAuth.test.d.ts +0 -0
  779. /package/dist/{tests → tools/tests}/account.test.d.ts +0 -0
  780. /package/dist/{tests → tools/tests}/coFeed.test-d.d.ts +0 -0
  781. /package/dist/{tests → tools/tests}/coFeed.test.d.ts +0 -0
  782. /package/dist/{tests → tools/tests}/coList.test-d.d.ts +0 -0
  783. /package/dist/{tests → tools/tests}/coList.test.d.ts +0 -0
  784. /package/dist/{tests → tools/tests}/coMap.record.test-d.d.ts +0 -0
  785. /package/dist/{tests → tools/tests}/coMap.record.test.d.ts +0 -0
  786. /package/dist/{tests → tools/tests}/coMap.test-d.d.ts +0 -0
  787. /package/dist/{tests → tools/tests}/coMap.test.d.ts +0 -0
  788. /package/dist/{tests → tools/tests}/coPlainText.test.d.ts +0 -0
  789. /package/dist/{tests → tools/tests}/createContext.test.d.ts +0 -0
  790. /package/dist/{tests → tools/tests}/deepLoading.test.d.ts +0 -0
  791. /package/dist/{tests → tools/tests}/groupsAndAccounts.test.d.ts +0 -0
  792. /package/dist/{tests → tools/tests}/imageDef.test.d.ts +0 -0
  793. /package/dist/{tests → tools/tests}/inbox.test.d.ts +0 -0
  794. /package/dist/{tests → tools/tests}/interfaces.test.d.ts +0 -0
  795. /package/dist/{tests → tools/tests}/invites.test.d.ts +0 -0
  796. /package/dist/{tests → tools/tests}/load.test.d.ts +0 -0
  797. /package/dist/{tests → tools/tests}/patterns/notifications.test.d.ts +0 -0
  798. /package/dist/{tests → tools/tests}/patterns/requestToJoin.test.d.ts +0 -0
  799. /package/dist/{tests → tools/tests}/schema.test.d.ts +0 -0
  800. /package/dist/{tests → tools/tests}/schemaUnion.test.d.ts +0 -0
  801. /package/dist/{tests → tools/tests}/subscribe.test.d.ts +0 -0
  802. /package/dist/{tests → tools/tests}/testing.test.d.ts +0 -0
  803. /package/dist/{tests → tools/tests}/utils.d.ts +0 -0
  804. /package/dist/{tests → tools/tests}/zod.test.d.ts +0 -0
  805. /package/dist/{types.d.ts → tools/types.d.ts} +0 -0
  806. /package/src/{tests → react-core/tests}/fixtures.ts +0 -0
  807. /package/src/{auth/KvStoreContext.ts → react-native-core/storage/kv-store-context.ts} +0 -0
  808. /package/src/{auth → tools/auth}/AuthSecretStorage.ts +0 -0
  809. /package/src/{auth → tools/auth}/DemoAuth.ts +0 -0
  810. /package/src/{auth → tools/auth}/InMemoryKVStore.ts +0 -0
  811. /package/src/{auth → tools/auth}/PassphraseAuth.ts +0 -0
  812. /package/src/{coValues → tools/coValues}/CoValueBase.ts +0 -0
  813. /package/src/{coValues → tools/coValues}/account.ts +0 -0
  814. /package/src/{coValues → tools/coValues}/coList.ts +0 -0
  815. /package/src/{coValues → tools/coValues}/coPlainText.ts +0 -0
  816. /package/src/{coValues → tools/coValues}/coRichText.ts +0 -0
  817. /package/src/{coValues → tools/coValues}/deepLoading.ts +0 -0
  818. /package/src/{coValues → tools/coValues}/extensions/imageDef.ts +0 -0
  819. /package/src/{coValues → tools/coValues}/group.ts +0 -0
  820. /package/src/{coValues → tools/coValues}/inbox.ts +0 -0
  821. /package/src/{coValues → tools/coValues}/profile.ts +0 -0
  822. /package/src/{coValues → tools/coValues}/registeredSchemas.ts +0 -0
  823. /package/src/{coValues → tools/coValues}/schemaUnion.ts +0 -0
  824. /package/src/{implementation → tools/implementation}/ContextManager.ts +0 -0
  825. /package/src/{implementation → tools/implementation}/activeAccountContext.ts +0 -0
  826. /package/src/{implementation → tools/implementation}/anonymousJazzAgent.ts +0 -0
  827. /package/src/{implementation → tools/implementation}/createContext.ts +0 -0
  828. /package/src/{implementation → tools/implementation}/devtoolsFormatters.ts +0 -0
  829. /package/src/{implementation → tools/implementation}/errors.ts +0 -0
  830. /package/src/{implementation → tools/implementation}/inspect.ts +0 -0
  831. /package/src/{implementation → tools/implementation}/invites.ts +0 -0
  832. /package/src/{implementation → tools/implementation}/refs.ts +0 -0
  833. /package/src/{implementation → tools/implementation}/schema.ts +0 -0
  834. /package/src/{implementation → tools/implementation}/symbols.ts +0 -0
  835. /package/src/{implementation → tools/implementation}/zodSchema/coExport.ts +0 -0
  836. /package/src/{implementation → tools/implementation}/zodSchema/runtimeConverters/zodFieldToCoFieldDef.ts +0 -0
  837. /package/src/{implementation → tools/implementation}/zodSchema/runtimeConverters/zodSchemaToCoSchema.ts +0 -0
  838. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/AccountSchema.ts +0 -0
  839. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/CoFeedSchema.ts +0 -0
  840. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/CoListSchema.ts +0 -0
  841. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/CoRecordSchema.ts +0 -0
  842. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/FileStreamSchema.ts +0 -0
  843. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/PlainTextSchema.ts +0 -0
  844. /package/src/{implementation → tools/implementation}/zodSchema/schemaTypes/RichTextSchema.ts +0 -0
  845. /package/src/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOfSchema.ts +0 -0
  846. /package/src/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.ts +0 -0
  847. /package/src/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts +0 -0
  848. /package/src/{implementation → tools/implementation}/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts +0 -0
  849. /package/src/{implementation → tools/implementation}/zodSchema/unionUtils.ts +0 -0
  850. /package/src/{implementation → tools/implementation}/zodSchema/zodReExport.ts +0 -0
  851. /package/src/{implementation → tools/implementation}/zodSchema/zodSchema.ts +0 -0
  852. /package/src/{internal.ts → tools/internal.ts} +0 -0
  853. /package/src/{lib → tools/lib}/cache.test.ts +0 -0
  854. /package/src/{lib → tools/lib}/cache.ts +0 -0
  855. /package/src/{lib → tools/lib}/migration.ts +0 -0
  856. /package/src/{subscribe → tools/subscribe}/JazzError.ts +0 -0
  857. /package/src/{subscribe → tools/subscribe}/index.ts +0 -0
  858. /package/src/{subscribe → tools/subscribe}/types.ts +0 -0
  859. /package/src/{subscribe → tools/subscribe}/utils.ts +0 -0
  860. /package/src/{tests → tools/tests}/AuthSecretStorage.test.ts +0 -0
  861. /package/src/{tests → tools/tests}/ContextManager.test.ts +0 -0
  862. /package/src/{tests → tools/tests}/DemoAuth.test.ts +0 -0
  863. /package/src/{tests → tools/tests}/PassphraseAuth.test.ts +0 -0
  864. /package/src/{tests → tools/tests}/account.test.ts +0 -0
  865. /package/src/{tests → tools/tests}/coFeed.test-d.ts +0 -0
  866. /package/src/{tests → tools/tests}/coList.test-d.ts +0 -0
  867. /package/src/{tests → tools/tests}/coList.test.ts +0 -0
  868. /package/src/{tests → tools/tests}/coMap.record.test-d.ts +0 -0
  869. /package/src/{tests → tools/tests}/coMap.record.test.ts +0 -0
  870. /package/src/{tests → tools/tests}/coMap.test-d.ts +0 -0
  871. /package/src/{tests → tools/tests}/coPlainText.test.ts +0 -0
  872. /package/src/{tests → tools/tests}/createContext.test.ts +0 -0
  873. /package/src/{tests → tools/tests}/deepLoading.test.ts +0 -0
  874. /package/src/{tests → tools/tests}/groupsAndAccounts.test.ts +0 -0
  875. /package/src/{tests → tools/tests}/imageDef.test.ts +0 -0
  876. /package/src/{tests → tools/tests}/inbox.test.ts +0 -0
  877. /package/src/{tests → tools/tests}/interfaces.test.ts +0 -0
  878. /package/src/{tests → tools/tests}/invites.test.ts +0 -0
  879. /package/src/{tests → tools/tests}/patterns/notifications.test.ts +0 -0
  880. /package/src/{tests → tools/tests}/patterns/requestToJoin.test.ts +0 -0
  881. /package/src/{tests → tools/tests}/schema.test.ts +0 -0
  882. /package/src/{tests → tools/tests}/schemaUnion.test.ts +0 -0
  883. /package/src/{tests → tools/tests}/subscribe.test.ts +0 -0
  884. /package/src/{tests → tools/tests}/testing.test.ts +0 -0
  885. /package/src/{tests → tools/tests}/utils.ts +0 -0
  886. /package/src/{tests → tools/tests}/zod.test.ts +0 -0
  887. /package/src/{types.ts → tools/types.ts} +0 -0
@@ -1,1637 +0,0 @@
1
- import { WasmCrypto } from "cojson/crypto/WasmCrypto";
2
- import {
3
- assert,
4
- beforeEach,
5
- describe,
6
- expect,
7
- expectTypeOf,
8
- it,
9
- test,
10
- vi,
11
- } from "vitest";
12
- import { Group, co, subscribeToCoValue, z } from "../exports.js";
13
- import { Account } from "../index.js";
14
- import { Loaded, zodSchemaToCoSchema } from "../internal.js";
15
- import { createJazzTestAccount, setupJazzTestSync } from "../testing.js";
16
- import { setupTwoNodes, waitFor } from "./utils.js";
17
-
18
- const Crypto = await WasmCrypto.create();
19
-
20
- beforeEach(async () => {
21
- await setupJazzTestSync();
22
-
23
- await createJazzTestAccount({
24
- isCurrentActiveAccount: true,
25
- creationProps: { name: "Hermes Puggington" },
26
- });
27
- });
28
-
29
- describe("CoMap", async () => {
30
- describe("init", () => {
31
- test("create a CoMap with basic property access", () => {
32
- const Person = co.map({
33
- color: z.string(),
34
- _height: z.number(),
35
- birthday: z.date(),
36
- name: z.string(),
37
- enum: z.enum(["a", "b", "c"]),
38
- enumMap: z.enum({ a: 1, b: 2, c: 3 }),
39
- // nullable: z.optional.encoded<string | undefined>({
40
- // encode: (value: string | undefined) => value || null,
41
- // decode: (value: unknown) => (value as string) || undefined,
42
- // })
43
- optionalDate: z.date().optional(),
44
- });
45
-
46
- const birthday = new Date("1989-11-27");
47
-
48
- const john = Person.create({
49
- color: "red",
50
- _height: 10,
51
- birthday,
52
- name: "John",
53
- enum: "a",
54
- enumMap: 1,
55
- });
56
-
57
- expect(john.color).toEqual("red");
58
- expect(john._height).toEqual(10);
59
- expect(john.birthday).toEqual(birthday);
60
- expect(john._raw.get("birthday")).toEqual(birthday.toISOString());
61
- expect(Object.keys(john)).toEqual([
62
- "color",
63
- "_height",
64
- "birthday",
65
- "name",
66
- "enum",
67
- "enumMap",
68
- ]);
69
- expect(john.enum).toEqual("a");
70
- expect(john.enumMap).toEqual(1);
71
- });
72
-
73
- test("property existence", () => {
74
- const Person = co.map({
75
- name: z.string(),
76
- });
77
-
78
- const john = Person.create({ name: "John" });
79
-
80
- expect("name" in john).toEqual(true);
81
- expect("age" in john).toEqual(false);
82
- });
83
-
84
- test("create a CoMap with an account as owner", () => {
85
- const Person = co.map({
86
- name: z.string(),
87
- });
88
-
89
- const john = Person.create({ name: "John" }, Account.getMe());
90
-
91
- expect(john.name).toEqual("John");
92
- expect(john._raw.get("name")).toEqual("John");
93
- });
94
-
95
- test("create a CoMap with a group as owner", () => {
96
- const Person = co.map({
97
- name: z.string(),
98
- });
99
-
100
- const john = Person.create({ name: "John" }, Group.create());
101
-
102
- expect(john.name).toEqual("John");
103
- expect(john._raw.get("name")).toEqual("John");
104
- });
105
-
106
- test("Empty schema", () => {
107
- const emptyMap = co.map({}).create({});
108
-
109
- // @ts-expect-error
110
- expect(emptyMap.color).toEqual(undefined);
111
- });
112
-
113
- test("CoMap with reference", () => {
114
- const Dog = co.map({
115
- name: z.string(),
116
- breed: z.string(),
117
- });
118
-
119
- const Person = co.map({
120
- name: z.string(),
121
- age: z.number(),
122
- dog: Dog,
123
- });
124
-
125
- const person = Person.create({
126
- name: "John",
127
- age: 20,
128
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
129
- });
130
-
131
- expect(person.dog?.name).toEqual("Rex");
132
- expect(person.dog?.breed).toEqual("Labrador");
133
- });
134
-
135
- test("CoMap with self reference", () => {
136
- const Person = co.map({
137
- name: z.string(),
138
- age: z.number(),
139
- // TODO: would be nice if this didn't need a type annotation
140
- get friend(): z.ZodOptional<typeof Person> {
141
- return z.optional(Person);
142
- },
143
- });
144
-
145
- const person = Person.create({
146
- name: "John",
147
- age: 20,
148
- friend: Person.create({ name: "Jane", age: 21 }),
149
- });
150
-
151
- expect(person.friend?.name).toEqual("Jane");
152
- expect(person.friend?.age).toEqual(21);
153
- });
154
-
155
- test("toJSON should not fail when there is a key in the raw value not represented in the schema", () => {
156
- const Person = co.map({
157
- name: z.string(),
158
- age: z.number(),
159
- });
160
-
161
- const person = Person.create({ name: "John", age: 20 });
162
-
163
- person._raw.set("extra", "extra");
164
-
165
- expect(person.toJSON()).toEqual({
166
- _type: "CoMap",
167
- id: person.id,
168
- name: "John",
169
- age: 20,
170
- });
171
- });
172
-
173
- test("toJSON should handle references", () => {
174
- const Person = co.map({
175
- name: z.string(),
176
- age: z.number(),
177
- get friend(): z.ZodOptional<typeof Person> {
178
- return z.optional(Person);
179
- },
180
- });
181
-
182
- const person = Person.create({
183
- name: "John",
184
- age: 20,
185
- friend: Person.create({ name: "Jane", age: 21 }),
186
- });
187
-
188
- expect(person.toJSON()).toEqual({
189
- _type: "CoMap",
190
- id: person.id,
191
- name: "John",
192
- age: 20,
193
- friend: {
194
- _type: "CoMap",
195
- id: person.friend?.id,
196
- name: "Jane",
197
- age: 21,
198
- },
199
- });
200
- });
201
-
202
- test("toJSON should handle circular references", () => {
203
- const Person = co.map({
204
- name: z.string(),
205
- age: z.number(),
206
- get friend(): z.ZodOptional<typeof Person> {
207
- return z.optional(Person);
208
- },
209
- });
210
-
211
- const person = Person.create({
212
- name: "John",
213
- age: 20,
214
- });
215
-
216
- person.friend = person;
217
-
218
- expect(person.toJSON()).toEqual({
219
- _type: "CoMap",
220
- id: person.id,
221
- name: "John",
222
- age: 20,
223
- friend: {
224
- _circular: person.id,
225
- },
226
- });
227
- });
228
-
229
- test("testing toJSON on a CoMap with a Date field", () => {
230
- const Person = co.map({
231
- name: z.string(),
232
- age: z.number(),
233
- birthday: z.date(),
234
- });
235
-
236
- const birthday = new Date();
237
-
238
- const john = Person.create({
239
- name: "John",
240
- age: 20,
241
- birthday,
242
- });
243
-
244
- expect(john.toJSON()).toMatchObject({
245
- name: "John",
246
- age: 20,
247
- birthday: birthday.toISOString(),
248
- _type: "CoMap",
249
- id: john.id,
250
- });
251
- });
252
-
253
- test("setting optional date as undefined should not throw", () => {
254
- const Person = co.map({
255
- name: z.string(),
256
- age: z.number(),
257
- birthday: z.date().optional(),
258
- });
259
-
260
- const john = Person.create({
261
- name: "John",
262
- age: 20,
263
- });
264
-
265
- expect(john.toJSON()).toMatchObject({
266
- name: "John",
267
- age: 20,
268
- });
269
- });
270
-
271
- it("should disallow extra properties", () => {
272
- const Person = co.map({
273
- name: z.string(),
274
- age: z.number(),
275
- });
276
-
277
- // @ts-expect-error - x is not a valid property
278
- const john = Person.create({ name: "John", age: 30, x: 1 });
279
-
280
- expect(john.toJSON()).toEqual({
281
- _type: "CoMap",
282
- id: john.id,
283
- name: "John",
284
- age: 30,
285
- });
286
- });
287
- });
288
-
289
- describe("Mutation", () => {
290
- test("change a primitive value", () => {
291
- const Person = co.map({
292
- name: z.string(),
293
- age: z.number(),
294
- });
295
-
296
- const john = Person.create({ name: "John", age: 20 });
297
-
298
- john.name = "Jane";
299
-
300
- expect(john.name).toEqual("Jane");
301
- expect(john.age).toEqual(20);
302
- });
303
-
304
- test("delete an optional value", () => {
305
- const Person = co.map({
306
- name: z.string(),
307
- age: z.number().optional(),
308
- });
309
-
310
- const john = Person.create({ name: "John", age: 20 });
311
-
312
- delete john.age;
313
-
314
- expect(john.name).toEqual("John");
315
- expect(john.age).toEqual(undefined);
316
-
317
- expect(john.toJSON()).toEqual({
318
- _type: "CoMap",
319
- id: john.id,
320
- name: "John",
321
- });
322
- });
323
-
324
- test("update a reference", () => {
325
- const Dog = co.map({
326
- name: z.string(),
327
- });
328
-
329
- const Person = co.map({
330
- name: z.string(),
331
- age: z.number(),
332
- dog: Dog,
333
- });
334
-
335
- const john = Person.create({
336
- name: "John",
337
- age: 20,
338
- dog: Dog.create({ name: "Rex" }),
339
- });
340
-
341
- john.dog = Dog.create({ name: "Fido" });
342
-
343
- expect(john.dog?.name).toEqual("Fido");
344
- });
345
-
346
- test("changes should be listed in _edits", () => {
347
- const Person = co.map({
348
- name: z.string(),
349
- age: z.number(),
350
- });
351
-
352
- const john = Person.create({ name: "John", age: 20 });
353
-
354
- const me = Account.getMe();
355
-
356
- john.age = 21;
357
-
358
- expect(john._edits.age?.all).toEqual([
359
- expect.objectContaining({
360
- value: 20,
361
- key: "age",
362
- ref: undefined,
363
- madeAt: expect.any(Date),
364
- }),
365
- expect.objectContaining({
366
- value: 21,
367
- key: "age",
368
- ref: undefined,
369
- madeAt: expect.any(Date),
370
- }),
371
- ]);
372
- expect(john._edits.age?.all[0]?.by).toMatchObject({
373
- _type: "Account",
374
- id: me.id,
375
- });
376
- expect(john._edits.age?.all[1]?.by).toMatchObject({
377
- _type: "Account",
378
- id: me.id,
379
- });
380
- });
381
- });
382
-
383
- test("Enum of maps", () => {
384
- const ChildA = co.map({
385
- type: z.literal("a"),
386
- value: z.number(),
387
- });
388
-
389
- const ChildB = co.map({
390
- type: z.literal("b"),
391
- value: z.string(),
392
- });
393
-
394
- const MapWithEnumOfMaps = co.map({
395
- name: z.string(),
396
- child: z.discriminatedUnion("type", [ChildA, ChildB]),
397
- });
398
-
399
- const mapWithEnum = MapWithEnumOfMaps.create({
400
- name: "enum",
401
- child: ChildA.create({
402
- type: "a",
403
- value: 5,
404
- }),
405
- });
406
-
407
- expect(mapWithEnum.name).toEqual("enum");
408
- expect(mapWithEnum.child?.type).toEqual("a");
409
- expect(mapWithEnum.child?.value).toEqual(5);
410
- expect(mapWithEnum.child?.id).toBeDefined();
411
-
412
- // TODO: properly support narrowing once we get rid of the coField marker
413
- // if (mapWithEnum.child?.type === "a") {
414
- // expectTypeOf(mapWithEnum.child).toEqualTypeOf<Loaded<typeof ChildA>>();
415
- // }
416
- });
417
- });
418
-
419
- describe("CoMap resolution", async () => {
420
- test("loading a locally available map with deep resolve", async () => {
421
- const Dog = co.map({
422
- name: z.string(),
423
- breed: z.string(),
424
- });
425
-
426
- const Person = co.map({
427
- name: z.string(),
428
- age: z.number(),
429
- dog: Dog,
430
- });
431
-
432
- const person = Person.create({
433
- name: "John",
434
- age: 20,
435
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
436
- });
437
-
438
- const loadedPerson = await Person.load(person.id, {
439
- resolve: {
440
- dog: true,
441
- },
442
- });
443
-
444
- assert(loadedPerson);
445
- expect(loadedPerson.dog.name).toEqual("Rex");
446
- });
447
-
448
- test("loading a locally available map using autoload for the refs", async () => {
449
- const Dog = co.map({
450
- name: z.string(),
451
- breed: z.string(),
452
- });
453
-
454
- const Person = co.map({
455
- name: z.string(),
456
- age: z.number(),
457
- dog: Dog,
458
- });
459
-
460
- const person = Person.create({
461
- name: "John",
462
- age: 20,
463
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
464
- });
465
-
466
- const loadedPerson = await Person.load(person.id);
467
-
468
- assert(loadedPerson);
469
- expect(loadedPerson.dog?.name).toEqual("Rex");
470
- });
471
-
472
- test("loading a remotely available map with deep resolve", async () => {
473
- const Dog = co.map({
474
- name: z.string(),
475
- breed: z.string(),
476
- });
477
-
478
- const Person = co.map({
479
- name: z.string(),
480
- age: z.number(),
481
- dog: Dog,
482
- });
483
-
484
- const group = Group.create();
485
- group.addMember("everyone", "writer");
486
-
487
- const person = Person.create(
488
- {
489
- name: "John",
490
- age: 20,
491
- dog: Dog.create({ name: "Rex", breed: "Labrador" }, group),
492
- },
493
- group,
494
- );
495
-
496
- const userB = await createJazzTestAccount();
497
-
498
- const loadedPerson = await Person.load(person.id, {
499
- resolve: {
500
- dog: true,
501
- },
502
- loadAs: userB,
503
- });
504
-
505
- assert(loadedPerson);
506
- expect(loadedPerson.dog.name).toEqual("Rex");
507
- });
508
-
509
- test("loading a remotely available map using autoload for the refs", async () => {
510
- const Dog = co.map({
511
- name: z.string(),
512
- breed: z.string(),
513
- });
514
-
515
- const Person = co.map({
516
- name: z.string(),
517
- age: z.number(),
518
- dog: Dog,
519
- });
520
-
521
- const group = Group.create();
522
- group.addMember("everyone", "writer");
523
-
524
- const person = Person.create(
525
- {
526
- name: "John",
527
- age: 20,
528
- dog: Dog.create({ name: "Rex", breed: "Labrador" }, group),
529
- },
530
- group,
531
- );
532
-
533
- const userB = await createJazzTestAccount();
534
- const loadedPerson = await Person.load(person.id, {
535
- loadAs: userB,
536
- });
537
-
538
- assert(loadedPerson);
539
- expect(loadedPerson.dog).toBe(null);
540
-
541
- await waitFor(() => expect(loadedPerson.dog).toBeTruthy());
542
-
543
- expect(loadedPerson.dog?.name).toEqual("Rex");
544
- });
545
-
546
- test("accessing the value refs", async () => {
547
- const Dog = co.map({
548
- name: z.string(),
549
- breed: z.string(),
550
- });
551
-
552
- const Person = co.map({
553
- name: z.string(),
554
- age: z.number(),
555
- dog: Dog,
556
- });
557
-
558
- const group = Group.create();
559
- group.addMember("everyone", "writer");
560
-
561
- const person = Person.create(
562
- {
563
- name: "John",
564
- age: 20,
565
- dog: Dog.create({ name: "Rex", breed: "Labrador" }, group),
566
- },
567
- group,
568
- );
569
-
570
- const userB = await createJazzTestAccount();
571
- const loadedPerson = await Person.load(person.id, {
572
- loadAs: userB,
573
- });
574
-
575
- assert(loadedPerson);
576
-
577
- expect(loadedPerson._refs.dog?.id).toBe(person.dog!.id);
578
-
579
- const dog = await loadedPerson._refs.dog?.load();
580
-
581
- assert(dog);
582
-
583
- expect(dog.name).toEqual("Rex");
584
- });
585
-
586
- test("subscription on a locally available map with deep resolve", async () => {
587
- const Dog = co.map({
588
- name: z.string(),
589
- breed: z.string(),
590
- });
591
-
592
- const Person = co.map({
593
- name: z.string(),
594
- age: z.number(),
595
- dog: Dog,
596
- });
597
-
598
- const person = Person.create({
599
- name: "John",
600
- age: 20,
601
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
602
- });
603
-
604
- const updates: Loaded<typeof Person, { dog: true }>[] = [];
605
- const spy = vi.fn((person) => updates.push(person));
606
-
607
- Person.subscribe(
608
- person.id,
609
- {
610
- resolve: {
611
- dog: true,
612
- },
613
- },
614
- spy,
615
- );
616
-
617
- expect(spy).not.toHaveBeenCalled();
618
-
619
- await waitFor(() => expect(spy).toHaveBeenCalled());
620
-
621
- expect(spy).toHaveBeenCalledTimes(1);
622
-
623
- expect(updates[0]?.dog.name).toEqual("Rex");
624
-
625
- person.dog!.name = "Fido";
626
-
627
- await waitFor(() => expect(spy).toHaveBeenCalledTimes(2));
628
-
629
- expect(updates[1]?.dog.name).toEqual("Fido");
630
-
631
- expect(spy).toHaveBeenCalledTimes(2);
632
- });
633
-
634
- test("subscription on a locally available map with autoload", async () => {
635
- const Dog = co.map({
636
- name: z.string(),
637
- breed: z.string(),
638
- });
639
-
640
- const Person = co.map({
641
- name: z.string(),
642
- age: z.number(),
643
- dog: Dog,
644
- });
645
-
646
- const person = Person.create({
647
- name: "John",
648
- age: 20,
649
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
650
- });
651
-
652
- const updates: Loaded<typeof Person>[] = [];
653
- const spy = vi.fn((person) => updates.push(person));
654
-
655
- Person.subscribe(person.id, {}, spy);
656
-
657
- expect(spy).not.toHaveBeenCalled();
658
-
659
- await waitFor(() => expect(spy).toHaveBeenCalled());
660
-
661
- expect(spy).toHaveBeenCalledTimes(1);
662
-
663
- expect(updates[0]?.dog?.name).toEqual("Rex");
664
-
665
- person.dog!.name = "Fido";
666
-
667
- await waitFor(() => expect(spy).toHaveBeenCalledTimes(2));
668
-
669
- expect(updates[1]?.dog?.name).toEqual("Fido");
670
-
671
- expect(spy).toHaveBeenCalledTimes(2);
672
- });
673
-
674
- test("subscription on a locally available map with syncResolution", async () => {
675
- const Dog = co.map({
676
- name: z.string(),
677
- breed: z.string(),
678
- });
679
-
680
- const Person = co.map({
681
- name: z.string(),
682
- age: z.number(),
683
- dog: Dog,
684
- });
685
-
686
- const person = Person.create({
687
- name: "John",
688
- age: 20,
689
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
690
- });
691
-
692
- const updates: Loaded<typeof Person>[] = [];
693
- const spy = vi.fn((person) => updates.push(person));
694
-
695
- subscribeToCoValue(
696
- zodSchemaToCoSchema(Person), // TODO: we should get rid of the conversion in the future
697
- person.id,
698
- {
699
- syncResolution: true,
700
- loadAs: Account.getMe(),
701
- },
702
- spy,
703
- );
704
-
705
- expect(spy).toHaveBeenCalled();
706
- expect(spy).toHaveBeenCalledTimes(1);
707
-
708
- expect(updates[0]?.dog?.name).toEqual("Rex");
709
-
710
- expect(spy).toHaveBeenCalledTimes(1);
711
-
712
- person.dog!.name = "Fido";
713
-
714
- expect(spy).toHaveBeenCalledTimes(2);
715
-
716
- expect(updates[1]?.dog?.name).toEqual("Fido");
717
-
718
- expect(spy).toHaveBeenCalledTimes(2);
719
- });
720
-
721
- test("subscription on a remotely available map with deep resolve", async () => {
722
- const Dog = co.map({
723
- name: z.string(),
724
- breed: z.string(),
725
- });
726
-
727
- const Person = co.map({
728
- name: z.string(),
729
- age: z.number(),
730
- dog: Dog,
731
- });
732
-
733
- const group = Group.create();
734
- group.addMember("everyone", "writer");
735
-
736
- const person = Person.create(
737
- {
738
- name: "John",
739
- age: 20,
740
- dog: Dog.create({ name: "Rex", breed: "Labrador" }, group),
741
- },
742
- group,
743
- );
744
-
745
- const userB = await createJazzTestAccount();
746
-
747
- const updates: Loaded<typeof Person, { dog: true }>[] = [];
748
- const spy = vi.fn((person) => updates.push(person));
749
-
750
- Person.subscribe(
751
- person.id,
752
- {
753
- resolve: {
754
- dog: true,
755
- },
756
- loadAs: userB,
757
- },
758
- spy,
759
- );
760
-
761
- expect(spy).not.toHaveBeenCalled();
762
-
763
- await waitFor(() => expect(spy).toHaveBeenCalled());
764
-
765
- expect(spy).toHaveBeenCalledTimes(1);
766
-
767
- expect(updates[0]?.dog.name).toEqual("Rex");
768
-
769
- person.dog!.name = "Fido";
770
-
771
- await waitFor(() => expect(spy).toHaveBeenCalledTimes(2));
772
-
773
- expect(updates[1]?.dog.name).toEqual("Fido");
774
-
775
- expect(spy).toHaveBeenCalledTimes(2);
776
- });
777
-
778
- test("subscription on a remotely available map with autoload", async () => {
779
- const Dog = co.map({
780
- name: z.string(),
781
- breed: z.string(),
782
- });
783
-
784
- const Person = co.map({
785
- name: z.string(),
786
- age: z.number(),
787
- dog: Dog,
788
- });
789
-
790
- const group = Group.create();
791
- group.addMember("everyone", "writer");
792
-
793
- const person = Person.create(
794
- {
795
- name: "John",
796
- age: 20,
797
- dog: Dog.create({ name: "Rex", breed: "Labrador" }, group),
798
- },
799
- group,
800
- );
801
-
802
- const updates: Loaded<typeof Person>[] = [];
803
- const spy = vi.fn((person) => updates.push(person));
804
-
805
- const userB = await createJazzTestAccount();
806
-
807
- Person.subscribe(
808
- person.id,
809
- {
810
- loadAs: userB,
811
- },
812
- spy,
813
- );
814
-
815
- expect(spy).not.toHaveBeenCalled();
816
-
817
- await waitFor(() => expect(spy).toHaveBeenCalled());
818
-
819
- expect(spy).toHaveBeenCalledTimes(1);
820
-
821
- expect(updates[0]?.dog?.name).toEqual("Rex");
822
-
823
- person.dog!.name = "Fido";
824
-
825
- await waitFor(() => expect(spy).toHaveBeenCalledTimes(2));
826
-
827
- expect(updates[1]?.dog?.name).toEqual("Fido");
828
-
829
- expect(spy).toHaveBeenCalledTimes(2);
830
- });
831
-
832
- test("replacing nested object triggers updates", async () => {
833
- const Dog = co.map({
834
- name: z.string(),
835
- breed: z.string(),
836
- });
837
-
838
- const Person = co.map({
839
- name: z.string(),
840
- age: z.number(),
841
- dog: Dog,
842
- });
843
-
844
- const person = Person.create({
845
- name: "John",
846
- age: 20,
847
- dog: Dog.create({ name: "Rex", breed: "Labrador" }),
848
- });
849
-
850
- const updates: Loaded<typeof Person, { dog: true }>[] = [];
851
- const spy = vi.fn((person) => updates.push(person));
852
-
853
- Person.subscribe(
854
- person.id,
855
- {
856
- resolve: {
857
- dog: true,
858
- },
859
- },
860
- spy,
861
- );
862
-
863
- expect(spy).not.toHaveBeenCalled();
864
-
865
- await waitFor(() => expect(spy).toHaveBeenCalled());
866
-
867
- expect(spy).toHaveBeenCalledTimes(1);
868
-
869
- expect(updates[0]?.dog.name).toEqual("Rex");
870
-
871
- person.dog!.name = "Fido";
872
-
873
- await waitFor(() => expect(spy).toHaveBeenCalledTimes(2));
874
-
875
- expect(updates[1]?.dog.name).toEqual("Fido");
876
-
877
- expect(spy).toHaveBeenCalledTimes(2);
878
- });
879
- });
880
-
881
- describe("CoMap applyDiff", async () => {
882
- const me = await Account.create({
883
- creationProps: { name: "Tester McTesterson" },
884
- crypto: Crypto,
885
- });
886
-
887
- const NestedMap = co.map({
888
- value: z.string(),
889
- });
890
-
891
- const TestMap = co.map({
892
- name: z.string(),
893
- age: z.number(),
894
- isActive: z.boolean(),
895
- birthday: z.date(),
896
- nested: NestedMap,
897
- optionalField: z.string().optional(),
898
- optionalNested: z.optional(NestedMap),
899
- });
900
-
901
- test("Basic applyDiff", () => {
902
- const map = TestMap.create(
903
- {
904
- name: "Alice",
905
- age: 30,
906
- isActive: true,
907
- birthday: new Date("1990-01-01"),
908
- nested: NestedMap.create({ value: "original" }, { owner: me }),
909
- },
910
- { owner: me },
911
- );
912
-
913
- const newValues = {
914
- name: "Bob",
915
- age: 35,
916
- isActive: false,
917
- };
918
-
919
- map.applyDiff(newValues);
920
-
921
- expect(map.name).toEqual("Bob");
922
- expect(map.age).toEqual(35);
923
- expect(map.isActive).toEqual(false);
924
- expect(map.birthday).toEqual(new Date("1990-01-01"));
925
- expect(map.nested?.value).toEqual("original");
926
- });
927
-
928
- test("applyDiff with nested changes", () => {
929
- const map = TestMap.create(
930
- {
931
- name: "Charlie",
932
- age: 25,
933
- isActive: true,
934
- birthday: new Date("1995-01-01"),
935
- nested: NestedMap.create({ value: "original" }, { owner: me }),
936
- },
937
- { owner: me },
938
- );
939
-
940
- const newValues = {
941
- name: "David",
942
- nested: NestedMap.create({ value: "updated" }, { owner: me }),
943
- };
944
-
945
- map.applyDiff(newValues);
946
-
947
- expect(map.name).toEqual("David");
948
- expect(map.age).toEqual(25);
949
- expect(map.nested?.value).toEqual("updated");
950
- });
951
-
952
- test("applyDiff with encoded fields", () => {
953
- const map = TestMap.create(
954
- {
955
- name: "Eve",
956
- age: 28,
957
- isActive: true,
958
- birthday: new Date("1993-01-01"),
959
- nested: NestedMap.create({ value: "original" }, { owner: me }),
960
- },
961
- { owner: me },
962
- );
963
-
964
- const newValues = {
965
- birthday: new Date("1993-06-15"),
966
- };
967
-
968
- map.applyDiff(newValues);
969
-
970
- expect(map.birthday).toEqual(new Date("1993-06-15"));
971
- });
972
-
973
- test("applyDiff with optional fields", () => {
974
- const map = TestMap.create(
975
- {
976
- name: "Frank",
977
- age: 40,
978
- isActive: true,
979
- birthday: new Date("1980-01-01"),
980
- nested: NestedMap.create({ value: "original" }, { owner: me }),
981
- },
982
- { owner: me },
983
- );
984
-
985
- const newValues = {
986
- optionalField: "New optional value",
987
- };
988
-
989
- map.applyDiff(newValues);
990
-
991
- expect(map.optionalField).toEqual("New optional value");
992
-
993
- map.applyDiff({ optionalField: undefined });
994
-
995
- expect(map.optionalField).toBeUndefined();
996
- });
997
-
998
- test("applyDiff with no changes", () => {
999
- const map = TestMap.create(
1000
- {
1001
- name: "Grace",
1002
- age: 35,
1003
- isActive: true,
1004
- birthday: new Date("1985-01-01"),
1005
- nested: NestedMap.create({ value: "original" }, { owner: me }),
1006
- },
1007
- { owner: me },
1008
- );
1009
-
1010
- const originalJSON = map.toJSON();
1011
-
1012
- map.applyDiff({});
1013
-
1014
- expect(map.toJSON()).toEqual(originalJSON);
1015
- });
1016
-
1017
- test("applyDiff with invalid field", () => {
1018
- const map = TestMap.create(
1019
- {
1020
- name: "Henry",
1021
- age: 45,
1022
- isActive: false,
1023
- birthday: new Date("1975-01-01"),
1024
- nested: NestedMap.create({ value: "original" }, { owner: me }),
1025
- },
1026
- { owner: me },
1027
- );
1028
-
1029
- const newValues = {
1030
- name: "Ian",
1031
- invalidField: "This should be ignored",
1032
- };
1033
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1034
- map.applyDiff(newValues as any);
1035
-
1036
- expect(map.name).toEqual("Ian");
1037
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1038
- expect((map as any).invalidField).toBeUndefined();
1039
- });
1040
-
1041
- test("applyDiff with optional reference set to undefined", () => {
1042
- const map = TestMap.create(
1043
- {
1044
- name: "Jack",
1045
- age: 50,
1046
- isActive: true,
1047
- birthday: new Date("1970-01-01"),
1048
- nested: NestedMap.create({ value: "original" }, { owner: me }),
1049
- optionalNested: NestedMap.create({ value: "optional" }, { owner: me }),
1050
- },
1051
- { owner: me },
1052
- );
1053
-
1054
- const newValues = {
1055
- optionalNested: undefined,
1056
- };
1057
-
1058
- map.applyDiff(newValues);
1059
-
1060
- expect(map.optionalNested).toBeUndefined();
1061
- });
1062
-
1063
- test("applyDiff with required reference set to undefined should throw", () => {
1064
- const map = TestMap.create(
1065
- {
1066
- name: "Kate",
1067
- age: 55,
1068
- isActive: true,
1069
- birthday: new Date("1965-01-01"),
1070
- nested: NestedMap.create({ value: "original" }, { owner: me }),
1071
- },
1072
- { owner: me },
1073
- );
1074
-
1075
- const newValues = {
1076
- nested: undefined,
1077
- };
1078
-
1079
- expect(() => map.applyDiff(newValues)).toThrowError(
1080
- "Cannot set required reference nested to undefined",
1081
- );
1082
- });
1083
- });
1084
-
1085
- describe("CoMap Typescript validation", async () => {
1086
- const me = await Account.create({
1087
- creationProps: { name: "Hermes Puggington" },
1088
- crypto: Crypto,
1089
- });
1090
-
1091
- test("Is not ok to pass null into a required ref", () => {
1092
- const NestedMap = co.map({
1093
- value: z.string(),
1094
- });
1095
-
1096
- const TestMap = co.map({
1097
- required: NestedMap,
1098
- optional: NestedMap.optional(),
1099
- });
1100
-
1101
- expectTypeOf<typeof TestMap.create>().toBeCallableWith(
1102
- {
1103
- optional: NestedMap.create({ value: "" }, { owner: me }),
1104
- // @ts-expect-error null can't be passed to a non-optional field
1105
- required: null,
1106
- },
1107
- { owner: me },
1108
- );
1109
- });
1110
-
1111
- test("Is not ok if a required ref is omitted", () => {
1112
- const NestedMap = co.map({
1113
- value: z.string(),
1114
- });
1115
-
1116
- const TestMap = co.map({
1117
- required: NestedMap,
1118
- optional: NestedMap.optional(),
1119
- });
1120
-
1121
- expectTypeOf<typeof TestMap.create>().toBeCallableWith(
1122
- // @ts-expect-error non-optional fields can't be omitted
1123
- {},
1124
- { owner: me },
1125
- );
1126
- });
1127
-
1128
- test("Is ok to omit optional fields", () => {
1129
- const NestedMap = co.map({
1130
- value: z.string(),
1131
- });
1132
-
1133
- const TestMap = co.map({
1134
- required: NestedMap,
1135
- optional: NestedMap.optional(),
1136
- });
1137
-
1138
- expectTypeOf<typeof TestMap.create>().toBeCallableWith(
1139
- {
1140
- required: NestedMap.create({ value: "" }, { owner: me }),
1141
- },
1142
- { owner: me },
1143
- );
1144
-
1145
- expectTypeOf<typeof TestMap.create>().toBeCallableWith(
1146
- {
1147
- required: NestedMap.create({ value: "" }, { owner: me }),
1148
- optional: undefined, // TODO: should we allow null here? zod is stricter about this than we were before
1149
- },
1150
- { owner: me },
1151
- );
1152
- });
1153
-
1154
- test("waitForSync should resolve when the value is uploaded", async () => {
1155
- const TestMap = co.map({
1156
- name: z.string(),
1157
- });
1158
-
1159
- const { clientNode, serverNode, clientAccount } = await setupTwoNodes();
1160
-
1161
- const map = TestMap.create(
1162
- {
1163
- name: "Alice",
1164
- },
1165
- { owner: clientAccount },
1166
- );
1167
-
1168
- await map.waitForSync({ timeout: 1000 });
1169
-
1170
- // Killing the client node so the serverNode can't load the map from it
1171
- clientNode.gracefulShutdown();
1172
-
1173
- const loadedMap = await serverNode.load(map._raw.id);
1174
-
1175
- expect(loadedMap).not.toBe("unavailable");
1176
- });
1177
- });
1178
-
1179
- describe("Creating and finding unique CoMaps", async () => {
1180
- test("Creating and finding unique CoMaps", async () => {
1181
- const group = Group.create();
1182
-
1183
- const Person = co.map({
1184
- name: z.string(),
1185
- _height: z.number(),
1186
- birthday: z.date(),
1187
- color: z.string(),
1188
- });
1189
-
1190
- const alice = Person.create(
1191
- {
1192
- name: "Alice",
1193
- _height: 100,
1194
- birthday: new Date("1990-01-01"),
1195
- color: "red",
1196
- },
1197
- { owner: group, unique: { name: "Alice" } },
1198
- );
1199
-
1200
- const foundAlice = Person.findUnique({ name: "Alice" }, group.id);
1201
- expect(foundAlice).toEqual(alice.id);
1202
- });
1203
-
1204
- test("complex discriminated union", () => {
1205
- const StringTag = co.map({
1206
- type: z.literal("string"),
1207
- stringValue: z.string(),
1208
- });
1209
-
1210
- const DateTag = co.map({
1211
- type: z.literal("date"),
1212
- dateValue: z.date(),
1213
- repeat: z.optional(
1214
- z.literal("daily").or(z.literal("weekly")).or(z.literal("monthly")),
1215
- ),
1216
- });
1217
-
1218
- const StringAttributeValue = co.map({
1219
- type: z.literal(["somethingElse", "string"]),
1220
- stringValue: z.string(),
1221
- });
1222
-
1223
- const NumberAttributeValue = co.map({
1224
- type: z.literal("number"),
1225
- numberValue: z.number(),
1226
- });
1227
-
1228
- const DateAttributeValue = co.map({
1229
- type: z.literal("date"),
1230
- dateValue: z.date(),
1231
- });
1232
-
1233
- const AttributeValue = z.discriminatedUnion("type", [
1234
- StringAttributeValue,
1235
- NumberAttributeValue,
1236
- DateAttributeValue,
1237
- ]);
1238
-
1239
- const AttributeTagKey = co.map({
1240
- key: z.string(),
1241
- });
1242
-
1243
- const AttributeTag = co.map({
1244
- type: z.literal("attribute"),
1245
- key: AttributeTagKey, // this is a covalue so that it can be referenced uniquely by other tags
1246
- attributeValue: AttributeValue,
1247
- });
1248
-
1249
- const Tag = z.discriminatedUnion("type", [
1250
- AttributeTag,
1251
- StringTag,
1252
- DateTag,
1253
- ]);
1254
-
1255
- const Wrapper = co.map({
1256
- tag: Tag,
1257
- });
1258
-
1259
- const wrapper = Wrapper.create({
1260
- tag: AttributeTag.create({
1261
- type: "attribute",
1262
- key: AttributeTagKey.create({ key: "name" }),
1263
- attributeValue: StringAttributeValue.create({
1264
- type: "string",
1265
- stringValue: "Alice",
1266
- }),
1267
- }),
1268
- });
1269
-
1270
- if (wrapper.tag.type === "attribute") {
1271
- expect(wrapper.tag.key.key).toEqual("name");
1272
- if (wrapper.tag.attributeValue.type === "string") {
1273
- expect(wrapper.tag.attributeValue.stringValue).toEqual("Alice");
1274
- }
1275
- }
1276
- });
1277
-
1278
- test("complex discriminated union with numeric discriminator value", () => {
1279
- const HttpError = co.map({
1280
- code: z.number(),
1281
- message: z.string(),
1282
- });
1283
-
1284
- const ClientError = co.map({
1285
- type: z.literal(400),
1286
- error: HttpError,
1287
- });
1288
-
1289
- const ServerError = co.map({
1290
- type: z.literal(500),
1291
- error: HttpError,
1292
- });
1293
-
1294
- const NetworkError = co.map({
1295
- type: z.literal(0),
1296
- error: HttpError,
1297
- });
1298
-
1299
- const ErrorResponse = z.discriminatedUnion("type", [
1300
- ClientError,
1301
- ServerError,
1302
- NetworkError,
1303
- ]);
1304
-
1305
- const ErrorWrapper = co.map({
1306
- response: ErrorResponse,
1307
- });
1308
-
1309
- const wrapper = ErrorWrapper.create({
1310
- response: ClientError.create({
1311
- type: 400,
1312
- error: HttpError.create({
1313
- code: 400,
1314
- message: "Bad Request",
1315
- }),
1316
- }),
1317
- });
1318
-
1319
- if (wrapper.response.type === 400) {
1320
- expect(wrapper.response.error.code).toEqual(400);
1321
- expect(wrapper.response.error.message).toEqual("Bad Request");
1322
- }
1323
-
1324
- const serverErrorWrapper = ErrorWrapper.create({
1325
- response: ServerError.create({
1326
- type: 500,
1327
- error: HttpError.create({
1328
- code: 500,
1329
- message: "Internal Server Error",
1330
- }),
1331
- }),
1332
- });
1333
-
1334
- if (serverErrorWrapper.response.type === 500) {
1335
- expect(serverErrorWrapper.response.error.code).toEqual(500);
1336
- expect(serverErrorWrapper.response.error.message).toEqual(
1337
- "Internal Server Error",
1338
- );
1339
- }
1340
-
1341
- const networkErrorWrapper = ErrorWrapper.create({
1342
- response: NetworkError.create({
1343
- type: 0,
1344
- error: HttpError.create({
1345
- code: 0,
1346
- message: "Network Error",
1347
- }),
1348
- }),
1349
- });
1350
-
1351
- if (networkErrorWrapper.response.type === 0) {
1352
- expect(networkErrorWrapper.response.error.code).toEqual(0);
1353
- expect(networkErrorWrapper.response.error.message).toEqual(
1354
- "Network Error",
1355
- );
1356
- }
1357
- });
1358
- });
1359
-
1360
- describe("castAs", () => {
1361
- test("should cast a co.map type", () => {
1362
- const Person = co.map({
1363
- name: z.string(),
1364
- });
1365
-
1366
- const PersonWithAge = co.map({
1367
- name: z.string(),
1368
- age: z.number().optional(),
1369
- });
1370
-
1371
- const person = Person.create({
1372
- name: "Alice",
1373
- });
1374
-
1375
- const personWithAge = person.castAs(PersonWithAge);
1376
-
1377
- personWithAge.age = 20;
1378
-
1379
- expect(personWithAge.age).toEqual(20);
1380
- });
1381
-
1382
- test("should still be able to autoload in-memory deps", () => {
1383
- const Dog = co.map({
1384
- name: z.string(),
1385
- });
1386
-
1387
- const Person = co.map({
1388
- name: z.string(),
1389
- dog: Dog,
1390
- });
1391
-
1392
- const PersonWithAge = co.map({
1393
- name: z.string(),
1394
- age: z.number().optional(),
1395
- dog: Dog,
1396
- });
1397
-
1398
- const person = Person.create({
1399
- name: "Alice",
1400
- dog: Dog.create({ name: "Rex" }),
1401
- });
1402
-
1403
- const personWithAge = person.castAs(PersonWithAge);
1404
-
1405
- personWithAge.age = 20;
1406
-
1407
- expect(personWithAge.age).toEqual(20);
1408
- expect(personWithAge.dog?.name).toEqual("Rex");
1409
- });
1410
- });
1411
-
1412
- describe("CoMap migration", () => {
1413
- test("should run on load", async () => {
1414
- const PersonV1 = co.map({
1415
- name: z.string(),
1416
- version: z.literal(1),
1417
- });
1418
-
1419
- const Person = co
1420
- .map({
1421
- name: z.string(),
1422
- age: z.number(),
1423
- version: z.literal([1, 2]),
1424
- })
1425
- .withMigration((person) => {
1426
- if (person.version === 1) {
1427
- person.age = 20;
1428
- person.version = 2;
1429
- }
1430
- });
1431
-
1432
- const person = PersonV1.create({
1433
- name: "Bob",
1434
- version: 1,
1435
- });
1436
-
1437
- expect(person?.name).toEqual("Bob");
1438
- expect(person?.version).toEqual(1);
1439
-
1440
- const loadedPerson = await Person.load(person.id);
1441
-
1442
- expect(loadedPerson?.name).toEqual("Bob");
1443
- expect(loadedPerson?.age).toEqual(20);
1444
- expect(loadedPerson?.version).toEqual(2);
1445
- });
1446
-
1447
- test("should handle group updates", async () => {
1448
- const Person = co
1449
- .map({
1450
- name: z.string(),
1451
- version: z.literal([1, 2]),
1452
- })
1453
- .withMigration((person) => {
1454
- if (person.version === 1) {
1455
- person.version = 2;
1456
-
1457
- person._owner.castAs(Group).addMember("everyone", "reader");
1458
- }
1459
- });
1460
-
1461
- const person = Person.create({
1462
- name: "Bob",
1463
- version: 1,
1464
- });
1465
-
1466
- expect(person?.name).toEqual("Bob");
1467
- expect(person?.version).toEqual(1);
1468
-
1469
- const loadedPerson = await Person.load(person.id);
1470
-
1471
- expect(loadedPerson?.name).toEqual("Bob");
1472
- expect(loadedPerson?.version).toEqual(2);
1473
-
1474
- const anotherAccount = await createJazzTestAccount();
1475
-
1476
- const loadedPersonFromAnotherAccount = await Person.load(person.id, {
1477
- loadAs: anotherAccount,
1478
- });
1479
-
1480
- expect(loadedPersonFromAnotherAccount?.name).toEqual("Bob");
1481
- });
1482
-
1483
- test("should throw an error if a migration is async", async () => {
1484
- const Person = co
1485
- .map({
1486
- name: z.string(),
1487
- version: z.number(),
1488
- })
1489
- // @ts-expect-error async function
1490
- .withMigration(async () => {});
1491
-
1492
- const person = Person.create({
1493
- name: "Bob",
1494
- version: 1,
1495
- });
1496
-
1497
- await expect(Person.load(person.id)).rejects.toThrow(
1498
- "Migration function cannot be async",
1499
- );
1500
- });
1501
-
1502
- test("should run only once", async () => {
1503
- const spy = vi.fn();
1504
- const Person = co
1505
- .map({
1506
- name: z.string(),
1507
- version: z.number(),
1508
- })
1509
- .withMigration((person) => {
1510
- spy(person);
1511
- });
1512
-
1513
- const person = Person.create({
1514
- name: "Bob",
1515
- version: 1,
1516
- });
1517
-
1518
- await Person.load(person.id);
1519
- await Person.load(person.id);
1520
- expect(spy).toHaveBeenCalledTimes(1);
1521
- });
1522
-
1523
- test("should not break recursive schemas", async () => {
1524
- const PersonV1 = co.map({
1525
- name: z.string(),
1526
- version: z.literal(1),
1527
- get friend() {
1528
- return PersonV1.optional();
1529
- },
1530
- });
1531
-
1532
- const Person = co
1533
- .map({
1534
- name: z.string(),
1535
- age: z.number(),
1536
- get friend() {
1537
- return Person.optional();
1538
- },
1539
- version: z.literal([1, 2]),
1540
- })
1541
- .withMigration((person) => {
1542
- if (person.version === 1) {
1543
- person.age = 20;
1544
- person.version = 2;
1545
- }
1546
- });
1547
-
1548
- const charlie = PersonV1.create({
1549
- name: "Charlie",
1550
- version: 1,
1551
- });
1552
-
1553
- const bob = PersonV1.create({
1554
- name: "Bob",
1555
- version: 1,
1556
- friend: charlie,
1557
- });
1558
-
1559
- const loaded = await Person.load(bob.id, {
1560
- resolve: {
1561
- friend: true,
1562
- },
1563
- });
1564
-
1565
- // Migration should run on both the person and their friend
1566
- expect(loaded?.name).toEqual("Bob");
1567
- expect(loaded?.age).toEqual(20);
1568
- expect(loaded?.version).toEqual(2);
1569
- expect(loaded?.friend?.name).toEqual("Charlie");
1570
- expect(loaded?.friend?.version).toEqual(2);
1571
- });
1572
- describe("Time", () => {
1573
- test("empty map created time", () => {
1574
- const currentTimestampInSeconds = Math.floor(Date.now() / 1000);
1575
- const emptyMap = co.map({}).create({});
1576
- const createdAtInSeconds = Math.floor(emptyMap._createdAt / 1000);
1577
-
1578
- expect(createdAtInSeconds).toEqual(currentTimestampInSeconds);
1579
- expect(emptyMap._lastUpdatedAt).toEqual(emptyMap._createdAt);
1580
- });
1581
-
1582
- test("created time and last updated time", async () => {
1583
- const Person = co.map({
1584
- name: z.string(),
1585
- });
1586
-
1587
- let currentTimestampInSeconds = Math.floor(Date.now() / 1000);
1588
- const person = Person.create({ name: "John" });
1589
-
1590
- const createdAt = person._createdAt;
1591
- const createdAtInSeconds = Math.floor(createdAt / 1000);
1592
- expect(createdAtInSeconds).toEqual(currentTimestampInSeconds);
1593
- expect(person._lastUpdatedAt).toEqual(createdAt);
1594
-
1595
- await new Promise((r) => setTimeout(r, 1000));
1596
- currentTimestampInSeconds = Math.floor(Date.now() / 1000);
1597
- person.name = "Jane";
1598
-
1599
- const lastUpdatedAtInSeconds = Math.floor(person._lastUpdatedAt / 1000);
1600
- expect(lastUpdatedAtInSeconds).toEqual(currentTimestampInSeconds);
1601
- expect(person._createdAt).toEqual(createdAt);
1602
- expect(person._lastUpdatedAt).not.toEqual(createdAt);
1603
- });
1604
-
1605
- test("comap with custom uniqueness", () => {
1606
- const Person = co.map({
1607
- name: z.string(),
1608
- });
1609
-
1610
- let currentTimestampInSeconds = Math.floor(Date.now() / 1000);
1611
- const person = Person.create(
1612
- { name: "John" },
1613
- { unique: "name", owner: Account.getMe() },
1614
- );
1615
-
1616
- const createdAt = person._createdAt;
1617
- const createdAtInSeconds = Math.floor(createdAt / 1000);
1618
- expect(createdAtInSeconds).toEqual(currentTimestampInSeconds);
1619
- });
1620
-
1621
- test("empty comap with custom uniqueness", () => {
1622
- const Person = co.map({
1623
- name: z.optional(z.string()),
1624
- });
1625
-
1626
- let currentTimestampInSeconds = Math.floor(Date.now() / 1000);
1627
- const person = Person.create(
1628
- {},
1629
- { unique: "name", owner: Account.getMe() },
1630
- );
1631
-
1632
- const createdAt = person._createdAt;
1633
- const createdAtInSeconds = Math.floor(createdAt / 1000);
1634
- expect(createdAtInSeconds).toEqual(currentTimestampInSeconds);
1635
- });
1636
- });
1637
- });