Compare commits

...

12 Commits

Author SHA1 Message Date
Guido D'Orsi
14f52dbc4e Merge pull request #2365 from garden-co/changeset-release/main
Version Packages
2025-05-26 12:48:04 +02:00
github-actions[bot]
82e4256e26 Version Packages 2025-05-26 10:07:42 +00:00
Guido D'Orsi
5e253cc717 chore: version bump 2025-05-26 11:12:59 +02:00
Guido D'Orsi
0c1663505c Merge pull request #2363 from garden-co/changeset-release/main
Version Packages
2025-05-26 11:07:20 +02:00
github-actions[bot]
ad85703373 Version Packages 2025-05-25 15:01:21 +00:00
Guido D'Orsi
3a6ec3791c Merge pull request #2364 from garden-co/fix/storage-group-deps
feat(react): API for SSR and Server Components
2025-05-25 16:58:34 +02:00
Guido D'Orsi
f9590f9120 feat(react): API for SSR and Server Components 2025-05-25 16:54:29 +02:00
Guido D'Orsi
706ebf87da Merge pull request #2357 from balazshevesi/main
Fix docs
2025-05-25 16:24:47 +02:00
Guido D'Orsi
00dd317a5d Merge pull request #2362 from garden-co/fix/storage-group-deps
fix(storage): align groups dependencies calculation to LocalNode
2025-05-25 16:24:04 +02:00
Guido D'Orsi
5ced45fb90 test: cover the group dependency loading with a test (temporary) 2025-05-25 15:35:00 +02:00
Guido D'Orsi
23daa7cdde fix(storage): align groups dependencies calculation to LocalNode 2025-05-25 14:34:50 +02:00
Balazs Hevesi
1b9b9273e5 Update 0-14-0.mdx 2025-05-23 22:18:05 +02:00
133 changed files with 1472 additions and 256 deletions

View File

@@ -1,5 +1,28 @@
# betterauth
## 0.1.19
### Patch Changes
- jazz-betterauth-server-plugin@0.14.16
- jazz-inspector@0.14.16
- jazz-react@0.14.16
- jazz-react-auth-betterauth@0.14.16
- jazz-tools@0.14.16
- jazz-betterauth-client-plugin@0.14.16
## 0.1.18
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-betterauth-server-plugin@0.14.15
- jazz-inspector@0.14.15
- jazz-react-auth-betterauth@0.14.15
- jazz-tools@0.14.15
- jazz-betterauth-client-plugin@0.14.15
## 0.1.17
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "betterauth",
"version": "0.1.17",
"version": "0.1.19",
"private": true,
"type": "module",
"scripts": {

View File

@@ -1,5 +1,21 @@
# chat-rn-expo-clerk
## 1.0.139
### Patch Changes
- jazz-expo@0.14.16
- jazz-tools@0.14.16
- jazz-react-native-media-images@0.14.16
## 1.0.138
### Patch Changes
- jazz-expo@0.14.15
- jazz-tools@0.14.15
- jazz-react-native-media-images@0.14.15
## 1.0.137
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "chat-rn-expo-clerk",
"main": "index.js",
"version": "1.0.137",
"version": "1.0.139",
"scripts": {
"build": "expo export -p ios",
"start": "expo start",

View File

@@ -1,5 +1,19 @@
# chat-rn-expo
## 1.0.7
### Patch Changes
- jazz-expo@0.14.16
- jazz-tools@0.14.16
## 1.0.6
### Patch Changes
- jazz-expo@0.14.15
- jazz-tools@0.14.15
## 1.0.5
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "chat-rn-expo",
"version": "1.0.5",
"version": "1.0.7",
"main": "index.ts",
"scripts": {
"build": "expo prebuild",

View File

@@ -1,5 +1,25 @@
# chat-rn
## 1.0.134
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-transport-ws@0.14.16
- jazz-react-native@0.14.16
- jazz-tools@0.14.16
## 1.0.133
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- jazz-react-native@0.14.15
- cojson-transport-ws@0.14.15
- jazz-tools@0.14.15
## 1.0.132
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "chat-rn",
"version": "1.0.132",
"version": "1.0.134",
"main": "index.js",
"scripts": {
"android": "react-native run-android",

View File

@@ -1,5 +1,21 @@
# chat-vue
## 0.0.114
### Patch Changes
- jazz-browser@0.14.16
- jazz-tools@0.14.16
- jazz-vue@0.14.16
## 0.0.113
### Patch Changes
- jazz-browser@0.14.15
- jazz-tools@0.14.15
- jazz-vue@0.14.15
## 0.0.112
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "chat-vue",
"version": "0.0.112",
"version": "0.0.114",
"private": true,
"type": "module",
"scripts": {

View File

@@ -1,5 +1,22 @@
# jazz-example-chat
## 0.0.214
### Patch Changes
- jazz-inspector@0.14.16
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.213
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-inspector@0.14.15
- jazz-tools@0.14.15
## 0.0.212
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-chat",
"private": true,
"version": "0.0.212",
"version": "0.0.214",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,22 @@
# minimal-auth-clerk
## 0.0.113
### Patch Changes
- jazz-react@0.14.16
- jazz-react-auth-clerk@0.14.16
- jazz-tools@0.14.16
## 0.0.112
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-react-auth-clerk@0.14.15
- jazz-tools@0.14.15
## 0.0.111
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "clerk",
"private": true,
"version": "0.0.111",
"version": "0.0.113",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,21 @@
# file-share-svelte
## 0.0.98
### Patch Changes
- jazz-svelte@0.14.16
- jazz-tools@0.14.16
- jazz-inspector-element@0.14.16
## 0.0.97
### Patch Changes
- jazz-svelte@0.14.15
- jazz-tools@0.14.15
- jazz-inspector-element@0.14.15
## 0.0.96
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "file-share-svelte",
"version": "0.0.96",
"version": "0.0.98",
"private": true,
"type": "module",
"scripts": {

View File

@@ -1,5 +1,22 @@
# jazz-tailwind-demo-auth-starter
## 0.0.53
### Patch Changes
- jazz-inspector@0.14.16
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.52
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-inspector@0.14.15
- jazz-tools@0.14.15
## 0.0.51
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "filestream",
"private": true,
"version": "0.0.51",
"version": "0.0.53",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# form
## 0.1.54
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.1.53
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.1.52
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "form",
"private": true,
"version": "0.1.52",
"version": "0.1.54",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# image-upload
## 0.0.110
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.109
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.108
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "image-upload",
"private": true,
"version": "0.0.108",
"version": "0.0.110",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,23 @@
# jazz-example-inspector
## 0.0.163
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-transport-ws@0.14.16
- jazz-inspector@0.14.16
## 0.0.162
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- cojson-transport-ws@0.14.15
- jazz-inspector@0.14.15
## 0.0.161
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-inspector-app",
"private": true,
"version": "0.0.161",
"version": "0.0.163",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# jazz-nextjs
## 0.1.3
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.1.2
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.1.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-nextjs",
"version": "0.1.1",
"version": "0.1.3",
"private": true,
"scripts": {
"dev": "next dev --turbopack",

View File

@@ -1,7 +1,7 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
import { Jazz } from "./jazz";
import { Jazz } from "../jazz";
const geistSans = Geist({
variable: "--font-geist-sans",

View File

@@ -2,6 +2,7 @@
import { useAccount } from "jazz-react";
import { Account } from "jazz-tools";
import Link from "next/link";
export default function Home() {
const { me } = useAccount(Account, {
@@ -34,6 +35,12 @@ export default function Home() {
}}
/>
</label>
<Link
href={`/profile/${me?.profile.id}`}
className="bg-blue-500 text-white px-4 py-2 rounded-md"
>
Your profile name in a Server Component
</Link>
</div>
);
}

View File

@@ -0,0 +1,23 @@
import { jazzSSR } from "@/jazzSSR";
import { Profile } from "jazz-tools";
export default async function ServerSidePage(props: {
params: Promise<{ profileId: string }>;
}) {
const { profileId } = await props.params;
const profile = await Profile.load(profileId, {
loadAs: jazzSSR,
});
return (
<div className="flex flex-col items-center justify-center h-screen gap-4">
<h1 className="text-2xl font-bold">SSR rendering example with Jazz</h1>
<div className="text-sm text-gray-500 w-1/2 text-center">
This is a server component!
</div>
<label>
<div className="text-sm">Your profile name "{profile?.name}"</div>
</label>
</div>
);
}

View File

@@ -0,0 +1,5 @@
import { createSSRJazzAgent } from "jazz-react/ssr";
export const jazzSSR = createSSRJazzAgent({
peer: "wss://cloud.jazz.tools/",
});

View File

@@ -1,5 +1,20 @@
# multi-cursors
## 0.0.106
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.105
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.104
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "multi-cursors",
"private": true,
"version": "0.0.104",
"version": "0.0.106",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,22 @@
# multiauth
## 0.0.54
### Patch Changes
- jazz-react@0.14.16
- jazz-react-auth-clerk@0.14.16
- jazz-tools@0.14.16
## 0.0.53
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-react-auth-clerk@0.14.15
- jazz-tools@0.14.15
## 0.0.52
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "multiauth",
"private": true,
"version": "0.0.52",
"version": "0.0.54",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,22 @@
# jazz-example-musicplayer
## 0.0.135
### Patch Changes
- jazz-inspector@0.14.16
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.134
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-inspector@0.14.15
- jazz-tools@0.14.15
## 0.0.133
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-music-player",
"private": true,
"version": "0.0.133",
"version": "0.0.135",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# organization
## 0.0.106
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.105
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.104
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "organization",
"private": true,
"version": "0.0.104",
"version": "0.0.106",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,19 @@
# passkey-svelte
## 0.0.100
### Patch Changes
- jazz-svelte@0.14.16
- jazz-tools@0.14.16
## 0.0.99
### Patch Changes
- jazz-svelte@0.14.15
- jazz-tools@0.14.15
## 0.0.98
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "passkey-svelte",
"version": "0.0.98",
"version": "0.0.100",
"type": "module",
"private": true,
"scripts": {

View File

@@ -1,5 +1,20 @@
# minimal-auth-passkey
## 0.0.111
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.110
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.109
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "passkey",
"private": true,
"version": "0.0.109",
"version": "0.0.111",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# passphrase
## 0.0.108
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.107
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.106
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "passphrase",
"private": true,
"version": "0.0.106",
"version": "0.0.108",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# jazz-password-manager
## 0.0.132
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.131
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.130
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-password-manager",
"private": true,
"version": "0.0.130",
"version": "0.0.132",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# jazz-example-pets
## 0.0.230
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.229
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.228
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-pets",
"private": true,
"version": "0.0.228",
"version": "0.0.230",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,20 @@
# reactions
## 0.0.110
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.109
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.108
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "reactions",
"private": true,
"version": "0.0.108",
"version": "0.0.110",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,22 @@
# richtext-tiptap
## 0.1.23
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
- jazz-richtext-tiptap@0.1.21
## 0.1.22
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
- jazz-richtext-tiptap@0.1.20
## 0.1.21
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "richtext-tiptap",
"private": true,
"version": "0.1.21",
"version": "0.1.23",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,22 @@
# richtext
## 0.0.100
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
- jazz-richtext-prosemirror@0.1.32
## 0.0.99
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
- jazz-richtext-prosemirror@0.1.31
## 0.0.98
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "richtext",
"private": true,
"version": "0.0.98",
"version": "0.0.100",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,21 @@
# todo-vue
## 0.0.112
### Patch Changes
- jazz-browser@0.14.16
- jazz-tools@0.14.16
- jazz-vue@0.14.16
## 0.0.111
### Patch Changes
- jazz-browser@0.14.15
- jazz-tools@0.14.15
- jazz-vue@0.14.15
## 0.0.110
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "todo-vue",
"version": "0.0.110",
"version": "0.0.112",
"private": true,
"type": "module",
"scripts": {

View File

@@ -1,5 +1,20 @@
# jazz-example-todo
## 0.0.229
### Patch Changes
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.228
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-tools@0.14.15
## 0.0.227
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "jazz-example-todo",
"private": true,
"version": "0.0.227",
"version": "0.0.229",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -1,5 +1,22 @@
# version-history
## 0.0.108
### Patch Changes
- jazz-inspector@0.14.16
- jazz-react@0.14.16
- jazz-tools@0.14.16
## 0.0.107
### Patch Changes
- Updated dependencies [f9590f9]
- jazz-react@0.14.15
- jazz-inspector@0.14.15
- jazz-tools@0.14.15
## 0.0.106
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "version-history",
"private": true,
"version": "0.0.106",
"version": "0.0.108",
"type": "module",
"scripts": {
"dev": "vite",

View File

@@ -15,8 +15,6 @@ We're still in the process of:
- completing all the details of this upgrade guide
</small>
**Note: React Native is currently broken based on an [underlying Zod v4 issue](https://github.com/colinhacks/zod/issues/4148).**
If you see something broken, please let us know on [Discord](https://discord.gg/utDMjHYg42) and check back in a couple hours.
Thanks for your patience!

View File

@@ -1,5 +1,21 @@
# cojson-storage-indexeddb
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-storage@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson-storage@0.14.15
- cojson@0.14.15
## 0.14.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "cojson-storage-indexeddb",
"version": "0.14.1",
"version": "0.14.16",
"main": "dist/index.js",
"type": "module",
"types": "dist/index.d.ts",

View File

@@ -1,12 +1,21 @@
import { LocalNode } from "cojson";
import { StorageManagerAsync } from "cojson-storage";
import { WasmCrypto } from "cojson/crypto/WasmCrypto";
import { expect, test, vi } from "vitest";
import { afterEach, beforeEach, expect, test, vi } from "vitest";
import { IDBStorage } from "../index.js";
import { toSimplifiedMessages } from "./messagesTestUtils.js";
import { trackMessages, waitFor } from "./testUtils.js";
const Crypto = await WasmCrypto.create();
let syncMessages: ReturnType<typeof trackMessages>;
beforeEach(() => {
syncMessages = trackMessages();
});
afterEach(() => {
syncMessages.restore();
});
test("Should be able to initialize and load from empty DB", async () => {
const agentSecret = Crypto.newRandomAgentSecret();
@@ -33,8 +42,6 @@ test("should sync and load data from storage", async () => {
Crypto,
);
const node1Sync = trackMessages(node1);
const peer = await IDBStorage.asPeer();
node1.syncManager.addPeer(peer);
@@ -53,7 +60,7 @@ test("should sync and load data from storage", async () => {
Map: map.core,
Group: group.core,
},
node1Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -64,7 +71,8 @@ test("should sync and load data from storage", async () => {
]
`);
node1Sync.restore();
node1.gracefulShutdown();
syncMessages.clear();
const node2 = new LocalNode(
agentSecret,
@@ -72,8 +80,6 @@ test("should sync and load data from storage", async () => {
Crypto,
);
const node2Sync = trackMessages(node2);
const peer2 = await IDBStorage.asPeer();
node2.syncManager.addPeer(peer2);
@@ -91,7 +97,7 @@ test("should sync and load data from storage", async () => {
Map: map.core,
Group: group.core,
},
node2Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -100,8 +106,6 @@ test("should sync and load data from storage", async () => {
"storage -> CONTENT Map header: true new: After: 0 New: 1",
]
`);
node2Sync.restore();
});
test("should send an empty content message if there is no content", async () => {
@@ -113,8 +117,6 @@ test("should send an empty content message if there is no content", async () =>
Crypto,
);
const node1Sync = trackMessages(node1);
const peer = await IDBStorage.asPeer();
node1.syncManager.addPeer(peer);
@@ -131,7 +133,7 @@ test("should send an empty content message if there is no content", async () =>
Map: map.core,
Group: group.core,
},
node1Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -142,7 +144,8 @@ test("should send an empty content message if there is no content", async () =>
]
`);
node1Sync.restore();
syncMessages.clear();
node1.gracefulShutdown();
const node2 = new LocalNode(
agentSecret,
@@ -150,8 +153,6 @@ test("should send an empty content message if there is no content", async () =>
Crypto,
);
const node2Sync = trackMessages(node2);
const peer2 = await IDBStorage.asPeer();
node2.syncManager.addPeer(peer2);
@@ -167,7 +168,7 @@ test("should send an empty content message if there is no content", async () =>
Map: map.core,
Group: group.core,
},
node2Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -176,8 +177,6 @@ test("should send an empty content message if there is no content", async () =>
"storage -> CONTENT Map header: true new: ",
]
`);
node2Sync.restore();
});
test("should load dependencies correctly (group inheritance)", async () => {
@@ -189,8 +188,6 @@ test("should load dependencies correctly (group inheritance)", async () => {
Crypto,
);
const node1Sync = trackMessages(node1);
const peer = await IDBStorage.asPeer();
node1.syncManager.addPeer(peer);
@@ -213,7 +210,7 @@ test("should load dependencies correctly (group inheritance)", async () => {
Group: group.core,
ParentGroup: parentGroup.core,
},
node1Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -226,7 +223,8 @@ test("should load dependencies correctly (group inheritance)", async () => {
]
`);
node1Sync.restore();
syncMessages.clear();
node1.gracefulShutdown();
const node2 = new LocalNode(
agentSecret,
@@ -234,8 +232,6 @@ test("should load dependencies correctly (group inheritance)", async () => {
Crypto,
);
const node2Sync = trackMessages(node2);
const peer2 = await IDBStorage.asPeer();
node2.syncManager.addPeer(peer2);
@@ -253,7 +249,7 @@ test("should load dependencies correctly (group inheritance)", async () => {
Group: group.core,
ParentGroup: parentGroup.core,
},
node2Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -274,8 +270,6 @@ test("should not send the same dependency value twice", async () => {
Crypto,
);
const node1Sync = trackMessages(node1);
const peer = await IDBStorage.asPeer();
node1.syncManager.addPeer(peer);
@@ -293,7 +287,8 @@ test("should not send the same dependency value twice", async () => {
await new Promise((resolve) => setTimeout(resolve, 200));
node1Sync.restore();
syncMessages.clear();
node1.gracefulShutdown();
const node2 = new LocalNode(
agentSecret,
@@ -301,8 +296,6 @@ test("should not send the same dependency value twice", async () => {
Crypto,
);
const node2Sync = trackMessages(node2);
const peer2 = await IDBStorage.asPeer();
node2.syncManager.addPeer(peer2);
@@ -323,7 +316,7 @@ test("should not send the same dependency value twice", async () => {
ParentGroup: parentGroup.core,
MapFromParent: mapFromParent.core,
},
node2Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -349,8 +342,6 @@ test("should recover from data loss", async () => {
Crypto,
);
const node1Sync = trackMessages(node1);
const peer = await IDBStorage.asPeer();
node1.syncManager.addPeer(peer);
@@ -384,7 +375,7 @@ test("should recover from data loss", async () => {
Map: map.core,
Group: group.core,
},
node1Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -399,7 +390,8 @@ test("should recover from data loss", async () => {
]
`);
node1Sync.restore();
syncMessages.clear();
node1.gracefulShutdown();
const node2 = new LocalNode(
agentSecret,
@@ -407,8 +399,6 @@ test("should recover from data loss", async () => {
Crypto,
);
const node2Sync = trackMessages(node2);
const peer2 = await IDBStorage.asPeer();
node2.syncManager.addPeer(peer2);
@@ -432,7 +422,7 @@ test("should recover from data loss", async () => {
Map: map.core,
Group: group.core,
},
node2Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -491,7 +481,7 @@ test("should sync multiple sessions in a single content message", async () => {
Crypto,
);
const node3Sync = trackMessages(node3);
syncMessages.clear();
node3.syncManager.addPeer(await IDBStorage.asPeer());
@@ -508,7 +498,7 @@ test("should sync multiple sessions in a single content message", async () => {
Map: map.core,
Group: group.core,
},
node3Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -517,8 +507,6 @@ test("should sync multiple sessions in a single content message", async () => {
"storage -> CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
]
`);
node3Sync.restore();
});
test("large coValue upload streaming", async () => {
@@ -559,7 +547,7 @@ test("large coValue upload streaming", async () => {
Crypto,
);
const node2Sync = trackMessages(node2);
syncMessages.clear();
node2.syncManager.addPeer(await IDBStorage.asPeer());
@@ -581,7 +569,7 @@ test("large coValue upload streaming", async () => {
Map: largeMap.core,
Group: group.core,
},
node2Sync.messages,
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
@@ -598,3 +586,80 @@ test("large coValue upload streaming", async () => {
]
`);
});
test("should sync and load accounts from storage", async () => {
const agentSecret = Crypto.newRandomAgentSecret();
const { node: node1, accountID } = await LocalNode.withNewlyCreatedAccount({
crypto: Crypto,
initialAgentSecret: agentSecret,
peersToLoadFrom: [await IDBStorage.asPeer()],
creationProps: {
name: "test",
},
});
const account1 = node1.getCoValue(accountID);
const profile = node1.expectProfileLoaded(accountID);
const profileGroup = profile.group;
await new Promise((resolve) => setTimeout(resolve, 200));
expect(
toSimplifiedMessages(
{
Account: account1,
Profile: profile.core,
ProfileGroup: profileGroup.core,
},
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
"client -> CONTENT Account header: true new: After: 0 New: 4",
"storage -> KNOWN Account sessions: header/4",
"client -> CONTENT ProfileGroup header: true new: After: 0 New: 5",
"storage -> KNOWN ProfileGroup sessions: header/5",
"client -> CONTENT Profile header: true new: After: 0 New: 1",
"storage -> KNOWN Profile sessions: header/1",
]
`);
node1.gracefulShutdown();
syncMessages.restore();
syncMessages = trackMessages();
const node2 = await LocalNode.withLoadedAccount({
crypto: Crypto,
accountSecret: agentSecret,
accountID,
peersToLoadFrom: [await IDBStorage.asPeer()],
sessionID: Crypto.newRandomSessionID(Crypto.getAgentID(agentSecret)),
});
await new Promise((resolve) => setTimeout(resolve, 200));
expect(
toSimplifiedMessages(
{
Account: account1,
Profile: profile.core,
ProfileGroup: profileGroup.core,
},
syncMessages.messages,
),
).toMatchInlineSnapshot(`
[
"client -> LOAD Account sessions: empty",
"storage -> CONTENT Account header: true new: After: 0 New: 4",
"client -> KNOWN Account sessions: header/4",
"client -> LOAD Profile sessions: empty",
"storage -> CONTENT ProfileGroup header: true new: After: 0 New: 5",
"storage -> CONTENT Profile header: true new: After: 0 New: 1",
"client -> KNOWN ProfileGroup sessions: header/5",
"client -> KNOWN Profile sessions: header/1",
]
`);
expect(node2.getCoValue(accountID).isAvailable()).toBeTruthy();
});

View File

@@ -1,8 +1,11 @@
import type { LocalNode, SyncMessage } from "cojson";
import { cojsonInternals } from "cojson";
import { StorageManagerAsync } from "cojson-storage";
import { onTestFinished } from "vitest";
export function trackMessages(node: LocalNode) {
const { SyncManager } = cojsonInternals;
export function trackMessages() {
const messages: {
from: "client" | "server" | "storage";
msg: SyncMessage;
@@ -10,7 +13,7 @@ export function trackMessages(node: LocalNode) {
const originalHandleSyncMessage =
StorageManagerAsync.prototype.handleSyncMessage;
const originalNodeSyncMessage = node.syncManager.handleSyncMessage;
const originalNodeSyncMessage = SyncManager.prototype.handleSyncMessage;
StorageManagerAsync.prototype.handleSyncMessage = async function (msg) {
messages.push({
@@ -20,7 +23,7 @@ export function trackMessages(node: LocalNode) {
return originalHandleSyncMessage.call(this, msg);
};
node.syncManager.handleSyncMessage = async function (msg, peer) {
SyncManager.prototype.handleSyncMessage = async function (msg, peer) {
messages.push({
from: "storage",
msg,
@@ -30,7 +33,12 @@ export function trackMessages(node: LocalNode) {
const restore = () => {
StorageManagerAsync.prototype.handleSyncMessage = originalHandleSyncMessage;
node.syncManager.handleSyncMessage = originalNodeSyncMessage;
SyncManager.prototype.handleSyncMessage = originalNodeSyncMessage;
messages.length = 0;
};
const clear = () => {
messages.length = 0;
};
onTestFinished(() => {
@@ -40,6 +48,7 @@ export function trackMessages(node: LocalNode) {
return {
messages,
restore,
clear,
};
}

View File

@@ -1,5 +1,21 @@
# cojson-storage-sqlite
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-storage@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson-storage@0.14.15
- cojson@0.14.15
## 0.14.1
### Patch Changes

View File

@@ -1,13 +1,13 @@
{
"name": "cojson-storage-sqlite",
"type": "module",
"version": "0.14.1",
"version": "0.14.16",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "MIT",
"dependencies": {
"better-sqlite3": "^11.7.0",
"cojson": "workspace:0.14.1",
"cojson": "workspace:0.14.16",
"cojson-storage": "workspace:*"
},
"devDependencies": {

View File

@@ -1,5 +1,20 @@
# cojson-storage
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
## 0.14.15
### Patch Changes
- 23daa7c: Align the processing of the group dependencies between LocalNode and Storage.
- Updated dependencies [23daa7c]
- cojson@0.14.15
## 0.14.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "cojson-storage",
"version": "0.14.1",
"version": "0.14.16",
"main": "dist/index.js",
"type": "module",
"types": "dist/index.d.ts",

View File

@@ -15,15 +15,9 @@ import type {
StoredCoValueRow,
StoredSessionRow,
} from "./types.js";
import NewContentMessage = CojsonInternalTypes.NewContentMessage;
import KnownStateMessage = CojsonInternalTypes.KnownStateMessage;
import RawCoID = CojsonInternalTypes.RawCoID;
type OutputMessageMap = Record<
RawCoID,
{ knownMessage: KnownStateMessage; contentMessages?: NewContentMessage[] }
>;
export class StorageManagerAsync {
private readonly toLocalNode: OutgoingSyncQueue;
private readonly dbClient: DBClientInterfaceAsync;
@@ -179,10 +173,10 @@ export class StorageManagerAsync {
coValueRow: StoredCoValueRow,
contentMessage: CojsonInternalTypes.NewContentMessage,
) {
const dependedOnCoValuesList = getDependedOnCoValues({
coValueRow,
newContentMessages: [contentMessage],
});
const dependedOnCoValuesList = getDependedOnCoValues(
coValueRow.header,
contentMessage,
);
for (const dependedOnCoValue of dependedOnCoValuesList) {
if (this.loadedCoValues.has(dependedOnCoValue)) {

View File

@@ -180,10 +180,10 @@ export class StorageManagerSync {
coValueRow: StoredCoValueRow,
contentMessage: CojsonInternalTypes.NewContentMessage,
) {
const dependedOnCoValuesList = getDependedOnCoValues({
coValueRow,
newContentMessages: [contentMessage],
});
const dependedOnCoValuesList = getDependedOnCoValues(
coValueRow.header,
contentMessage,
);
for (const dependedOnCoValue of dependedOnCoValuesList) {
if (this.loadedCoValues.has(dependedOnCoValue)) {

View File

@@ -5,6 +5,7 @@ import {
type Stringified,
cojsonInternals,
} from "cojson";
import type { RawCoID } from "cojson";
import type {
StoredCoValueRow,
StoredSessionRow,
@@ -42,31 +43,29 @@ export function collectNewTxs({
sessionEntry.lastSignature = signature;
}
export function getDependedOnCoValues({
coValueRow,
newContentMessages,
}: {
coValueRow: StoredCoValueRow;
newContentMessages: CojsonInternalTypes.NewContentMessage[];
}) {
return coValueRow.header.ruleset.type === "group"
? getGroupDependedOnCoValues(newContentMessages)
: coValueRow.header.ruleset.type === "ownedByGroup"
? getOwnedByGroupDependedOnCoValues(coValueRow, newContentMessages)
: [];
}
function getGroupDependedOnCoValues(
newContentMessages: CojsonInternalTypes.NewContentMessage[],
export function getDependedOnCoValues(
header: CojsonInternalTypes.CoValueHeader,
contentMessage: CojsonInternalTypes.NewContentMessage,
) {
const keys: CojsonInternalTypes.RawCoID[] = [];
const deps = new Set<RawCoID>();
/**
* Collect all the signing keys inside the transactions to list all the
* dependencies required to correctly access the CoValue.
*/
for (const piece of newContentMessages) {
for (const sessionEntry of Object.values(piece.new)) {
for (const sessionID of Object.keys(contentMessage.new) as SessionID[]) {
const accountId = cojsonInternals.accountOrAgentIDfromSessionID(sessionID);
if (
cojsonInternals.isAccountID(accountId) &&
accountId !== contentMessage.id
) {
deps.add(accountId);
}
}
if (header.ruleset.type === "group") {
/**
* Collect all the signing keys inside the transactions to list all the
* dependencies required to correctly access the CoValue.
*/
for (const sessionEntry of Object.values(contentMessage.new)) {
for (const tx of sessionEntry.newTransactions) {
if (tx.privacy !== "trusting") continue;
@@ -83,7 +82,7 @@ function getGroupDependedOnCoValues(
const key = cojsonInternals.getGroupDependentKey(change.key);
if (key) {
keys.push(key);
deps.add(key);
}
}
}
@@ -91,36 +90,11 @@ function getGroupDependedOnCoValues(
}
}
return keys;
}
function getOwnedByGroupDependedOnCoValues(
coValueRow: StoredCoValueRow,
newContentMessages: CojsonInternalTypes.NewContentMessage[],
) {
if (coValueRow.header.ruleset.type !== "ownedByGroup") return [];
const keys: CojsonInternalTypes.RawCoID[] = [coValueRow.header.ruleset.group];
/**
* Collect all the signing keys inside the transactions to list all the
* dependencies required to correctly access the CoValue.
*/
for (const piece of newContentMessages) {
for (const sessionID of Object.keys(piece.new) as SessionID[]) {
const accountId =
cojsonInternals.accountOrAgentIDfromSessionID(sessionID);
if (
cojsonInternals.isAccountID(accountId) &&
accountId !== coValueRow.id
) {
keys.push(accountId);
}
}
if (header.ruleset.type === "ownedByGroup") {
deps.add(header.ruleset.group);
}
return keys;
return deps;
}
function safeParseChanges(changes: Stringified<JsonValue[]>) {

View File

@@ -13,7 +13,7 @@ function getMockedCoValueId() {
function generateNewContentMessage(
privacy: "trusting" | "private",
changes: any[],
accountId?: `co_z${string}`,
accountId: `co_z${string}`,
) {
return {
action: "content",
@@ -46,18 +46,21 @@ describe("getDependedOnCoValues", () => {
},
} as any;
const result = getDependedOnCoValues({
coValueRow,
newContentMessages: [
generateNewContentMessage("trusting", [
const accountId = getMockedCoValueId();
const result = getDependedOnCoValues(
coValueRow.header,
generateNewContentMessage(
"trusting",
[
{ op: "set", key: "co_zabc123", value: "test" },
{ op: "set", key: "parent_co_zdef456", value: "test" },
{ op: "set", key: "normal_key", value: "test" },
]),
],
});
],
accountId,
),
);
expect(result).toEqual(["co_zabc123", "co_zdef456"]);
expect(result).toEqual(new Set([accountId, "co_zabc123", "co_zdef456"]));
});
it("should not throw on malformed JSON", () => {
@@ -70,9 +73,12 @@ describe("getDependedOnCoValues", () => {
},
} as any;
const message = generateNewContentMessage("trusting", [
{ op: "set", key: "co_zabc123", value: "test" },
]);
const accountId = getMockedCoValueId();
const message = generateNewContentMessage(
"trusting",
[{ op: "set", key: "co_zabc123", value: "test" }],
accountId,
);
message.new["invalid_session" as SessionID] = {
after: 0,
@@ -86,12 +92,9 @@ describe("getDependedOnCoValues", () => {
],
};
const result = getDependedOnCoValues({
coValueRow,
newContentMessages: [message],
});
const result = getDependedOnCoValues(coValueRow.header, message);
expect(result).toEqual(["co_zabc123"]);
expect(result).toEqual(new Set([accountId, "co_zabc123"]));
});
it("should return dependencies for ownedByGroup ruleset", () => {
@@ -123,12 +126,9 @@ describe("getDependedOnCoValues", () => {
newTransactions: [],
};
const result = getDependedOnCoValues({
coValueRow,
newContentMessages: [message],
});
const result = getDependedOnCoValues(coValueRow.header, message);
expect(result).toEqual([groupId, accountId]);
expect(result).toEqual(new Set([groupId, accountId]));
});
it("should return empty array for other ruleset types", () => {
@@ -141,18 +141,21 @@ describe("getDependedOnCoValues", () => {
},
} as any;
const result = getDependedOnCoValues({
coValueRow,
newContentMessages: [
generateNewContentMessage("trusting", [
const accountId = getMockedCoValueId();
const result = getDependedOnCoValues(
coValueRow.header,
generateNewContentMessage(
"trusting",
[
{ op: "set", key: "co_zabc123", value: "test" },
{ op: "set", key: "parent_co_zdef456", value: "test" },
{ op: "set", key: "normal_key", value: "test" },
]),
],
});
],
accountId,
),
);
expect(result).toEqual([]);
expect(result).toEqual(new Set([accountId]));
});
it("should ignore non-trusting transactions in group ruleset", () => {
@@ -165,15 +168,17 @@ describe("getDependedOnCoValues", () => {
},
} as any;
const result = getDependedOnCoValues({
coValueRow,
newContentMessages: [
generateNewContentMessage("private", [
{ op: "set", key: "co_zabc123", value: "test" },
]),
],
});
const accountId = getMockedCoValueId();
expect(result).toEqual([]);
const result = getDependedOnCoValues(
coValueRow.header,
generateNewContentMessage(
"private",
[{ op: "set", key: "co_zabc123", value: "test" }],
accountId,
),
);
expect(result).toEqual(new Set([accountId]));
});
});

View File

@@ -21,7 +21,6 @@ import { fixtures } from "./fixtureMessages.js";
type RawCoID = CojsonInternalTypes.RawCoID;
type NewContentMessage = CojsonInternalTypes.NewContentMessage;
type Transaction = CojsonInternalTypes.Transaction;
vi.mock("../syncUtils");
const coValueIdToLoad = "co_zKwG8NyfZ8GXqcjDHY4NS3SbU2m";
@@ -58,7 +57,7 @@ describe("DB sync manager", () => {
syncManager.sendStateMessage = vi.fn();
// No dependencies found
vi.mocked(getDependedOnCoValues).mockReturnValue([]);
vi.mocked(getDependedOnCoValues).mockReturnValue(new Set());
});
afterEach(() => {
@@ -135,7 +134,7 @@ describe("DB sync manager", () => {
// Fetch dependencies of the current dependency for the future recursion iterations
vi.mocked(getDependedOnCoValues).mockImplementation(
({ coValueRow }) => dependenciesTreeWithLoop[coValueRow.id] || [],
(_, msg) => new Set(dependenciesTreeWithLoop[msg.id] || []),
);
await syncManager.handleSyncMessage(loadMsg);

View File

@@ -1,5 +1,19 @@
# cojson-transport-nodejs-ws
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
## 0.14.1
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "cojson-transport-ws",
"type": "module",
"version": "0.14.1",
"version": "0.14.16",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "MIT",

View File

@@ -1,5 +1,17 @@
# cojson
## 0.14.16
### Patch Changes
- 5e253cc: Version bump
## 0.14.15
### Patch Changes
- 23daa7c: Align the processing of the group dependencies between LocalNode and Storage.
## 0.14.1
### Patch Changes

View File

@@ -25,7 +25,7 @@
},
"type": "module",
"license": "MIT",
"version": "0.14.1",
"version": "0.14.16",
"devDependencies": {
"@opentelemetry/sdk-metrics": "^2.0.0",
"typescript": "catalog:"

View File

@@ -72,6 +72,7 @@ import type {
import {
DisconnectedError,
PingTimeoutError,
SyncManager,
emptyKnownState,
} from "./sync.js";
@@ -102,6 +103,7 @@ export const cojsonInternals = {
getGroupDependentKeyList,
getGroupDependentKey,
disablePermissionErrors,
SyncManager,
CO_VALUE_LOADING_CONFIG,
setCoValueLoadingRetryDelay(delay: number) {
CO_VALUE_LOADING_CONFIG.RETRY_DELAY = delay;

View File

@@ -1,5 +1,25 @@
# jazz-auth-betterauth
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- jazz-browser@0.14.16
- jazz-tools@0.14.16
- jazz-betterauth-client-plugin@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- jazz-browser@0.14.15
- jazz-tools@0.14.15
- jazz-betterauth-client-plugin@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-auth-betterauth",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,23 @@
# jazz-auth-clerk
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- jazz-browser@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- jazz-browser@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,14 +1,14 @@
{
"name": "jazz-auth-clerk",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "MIT",
"dependencies": {
"cojson": "workspace:0.14.1",
"jazz-browser": "workspace:0.14.14",
"jazz-tools": "workspace:0.14.14"
"cojson": "workspace:0.14.16",
"jazz-browser": "workspace:0.14.16",
"jazz-tools": "workspace:0.14.16"
},
"scripts": {
"format-and-lint": "biome check .",

View File

@@ -1,5 +1,17 @@
# jazz-betterauth-client-plugin
## 0.14.16
### Patch Changes
- jazz-betterauth-server-plugin@0.14.16
## 0.14.15
### Patch Changes
- jazz-betterauth-server-plugin@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-betterauth-client-plugin",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,23 @@
# jazz-betterauth-server-plugin
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- jazz-browser@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- jazz-browser@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-betterauth-server-plugin",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "dist/index.js",
"types": "src/index.ts",

View File

@@ -1,5 +1,19 @@
# jazz-browser-media-images
## 0.14.16
### Patch Changes
- jazz-browser@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- jazz-browser@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-browser-media-images",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
@@ -8,8 +8,8 @@
"dependencies": {
"@types/image-blob-reduce": "^4.1.1",
"image-blob-reduce": "^4.1.0",
"jazz-browser": "workspace:0.14.14",
"jazz-tools": "workspace:0.14.14",
"jazz-browser": "workspace:0.14.16",
"jazz-tools": "workspace:0.14.16",
"pica": "^9.0.1"
},
"scripts": {

View File

@@ -1,5 +1,25 @@
# jazz-browser
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-storage-indexeddb@0.14.16
- cojson-transport-ws@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- cojson-storage-indexeddb@0.14.15
- cojson-transport-ws@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-browser",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",

View File

@@ -1,5 +1,29 @@
# jazz-browser
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-transport-ws@0.14.16
- jazz-auth-clerk@0.14.16
- jazz-react-core@0.14.16
- jazz-react-native-core@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- jazz-react-native-core@0.14.15
- cojson-transport-ws@0.14.15
- jazz-auth-clerk@0.14.15
- jazz-react-core@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-expo",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",

View File

@@ -1,5 +1,19 @@
# jazz-inspector-element
## 0.14.16
### Patch Changes
- jazz-inspector@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- jazz-inspector@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-inspector-element",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "./dist/main.js",
"types": "./dist/main.d.ts",

View File

@@ -1,5 +1,23 @@
# jazz-inspector
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- jazz-react-core@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- jazz-react-core@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "jazz-inspector",
"version": "0.14.14",
"version": "0.14.16",
"type": "module",
"main": "./dist/app.js",
"types": "./dist/app.d.ts",

View File

@@ -1,5 +1,23 @@
# jazz-autosub
## 0.14.16
### Patch Changes
- Updated dependencies [5e253cc]
- cojson@0.14.16
- cojson-transport-ws@0.14.16
- jazz-tools@0.14.16
## 0.14.15
### Patch Changes
- Updated dependencies [23daa7c]
- cojson@0.14.15
- cojson-transport-ws@0.14.15
- jazz-tools@0.14.15
## 0.14.14
### Patch Changes

View File

@@ -5,7 +5,7 @@
"types": "dist/index.d.ts",
"type": "module",
"license": "MIT",
"version": "0.14.14",
"version": "0.14.16",
"dependencies": {
"cojson": "workspace:*",
"cojson-transport-ws": "workspace:*",

Some files were not shown because too many files have changed in this diff Show More