@livestore/react 0.4.0-dev.22 → 0.4.0-dev.23

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 (65) hide show
  1. package/README.md +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/StoreRegistryContext.d.ts +1 -1
  4. package/dist/StoreRegistryContext.d.ts.map +1 -1
  5. package/dist/StoreRegistryContext.js +2 -2
  6. package/dist/StoreRegistryContext.js.map +1 -1
  7. package/dist/__tests__/fixture.d.ts +8 -280
  8. package/dist/__tests__/fixture.d.ts.map +1 -1
  9. package/dist/__tests__/fixture.js +8 -78
  10. package/dist/__tests__/fixture.js.map +1 -1
  11. package/dist/experimental/components/LiveList.d.ts.map +1 -1
  12. package/dist/experimental/components/LiveList.js +5 -4
  13. package/dist/experimental/components/LiveList.js.map +1 -1
  14. package/dist/mod.d.ts +4 -2
  15. package/dist/mod.d.ts.map +1 -1
  16. package/dist/mod.js +3 -2
  17. package/dist/mod.js.map +1 -1
  18. package/dist/useClientDocument.d.ts +1 -26
  19. package/dist/useClientDocument.d.ts.map +1 -1
  20. package/dist/useClientDocument.js +2 -13
  21. package/dist/useClientDocument.js.map +1 -1
  22. package/dist/useClientDocument.test.js +12 -4
  23. package/dist/useClientDocument.test.js.map +1 -1
  24. package/dist/useQuery.d.ts +3 -4
  25. package/dist/useQuery.d.ts.map +1 -1
  26. package/dist/useQuery.js +10 -80
  27. package/dist/useQuery.js.map +1 -1
  28. package/dist/useQuery.test.js +7 -8
  29. package/dist/useQuery.test.js.map +1 -1
  30. package/dist/useRcResource.d.ts.map +1 -1
  31. package/dist/useRcResource.js +9 -5
  32. package/dist/useRcResource.js.map +1 -1
  33. package/dist/useRcResource.test.js +1 -1
  34. package/dist/useRcResource.test.js.map +1 -1
  35. package/dist/useStore.d.ts +12 -1
  36. package/dist/useStore.d.ts.map +1 -1
  37. package/dist/useStore.js +21 -13
  38. package/dist/useStore.js.map +1 -1
  39. package/dist/useStore.test.js +53 -8
  40. package/dist/useStore.test.js.map +1 -1
  41. package/dist/useSyncStatus.d.ts +22 -0
  42. package/dist/useSyncStatus.d.ts.map +1 -0
  43. package/dist/useSyncStatus.js +28 -0
  44. package/dist/useSyncStatus.js.map +1 -0
  45. package/package.json +68 -25
  46. package/src/StoreRegistryContext.tsx +4 -3
  47. package/src/__snapshots__/useClientDocument.test.tsx.snap +112 -78
  48. package/src/__tests__/fixture.tsx +22 -105
  49. package/src/experimental/components/LiveList.tsx +9 -5
  50. package/src/mod.ts +4 -9
  51. package/src/useClientDocument.test.tsx +16 -6
  52. package/src/useClientDocument.ts +6 -56
  53. package/src/useQuery.test.tsx +8 -8
  54. package/src/useQuery.ts +28 -113
  55. package/src/useRcResource.test.tsx +1 -1
  56. package/src/useRcResource.ts +10 -5
  57. package/src/useStore.test.tsx +85 -9
  58. package/src/useStore.ts +30 -17
  59. package/src/useSyncStatus.ts +34 -0
  60. package/dist/utils/stack-info.d.ts +0 -4
  61. package/dist/utils/stack-info.d.ts.map +0 -1
  62. package/dist/utils/stack-info.js +0 -10
  63. package/dist/utils/stack-info.js.map +0 -1
  64. package/src/ambient.d.ts +0 -1
  65. package/src/utils/stack-info.ts +0 -13
@@ -1,10 +1,10 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { makeInMemoryAdapter } from '@livestore/adapter-web';
3
3
  import { StoreInternalsSymbol, StoreRegistry, storeOptions, } from '@livestore/livestore';
4
4
  import { shouldNeverHappen } from '@livestore/utils';
5
- import { act, render, renderHook, waitFor } from '@testing-library/react';
5
+ import { act, fireEvent, render, renderHook, waitFor } from '@testing-library/react';
6
6
  import * as React from 'react';
7
- import { describe, expect, it } from 'vitest';
7
+ import { describe, expect, it, vi } from 'vitest';
8
8
  import { schema } from "./__tests__/fixture.js";
9
9
  import { StoreRegistryProvider } from "./StoreRegistryContext.js";
10
10
  import { useStore } from "./useStore.js";
@@ -30,7 +30,7 @@ describe('experimental useStore', () => {
30
30
  const options = testStoreOptions();
31
31
  let view;
32
32
  await act(async () => {
33
- view = render(_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: _jsx("div", { "data-testid": "fallback" }), children: _jsx(StoreConsumer, { options: options }) }) }));
33
+ view = render(_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: makeSuspenseFallback(), children: _jsx(StoreConsumer, { options: options }) }) }));
34
34
  });
35
35
  const renderedView = view ?? shouldNeverHappen('render failed');
36
36
  // After loading completes, should show the actual content
@@ -41,7 +41,7 @@ describe('experimental useStore', () => {
41
41
  it('does not re-suspend on subsequent renders when store is already loaded', async () => {
42
42
  const storeRegistry = new StoreRegistry();
43
43
  const options = testStoreOptions();
44
- const Wrapper = ({ opts }) => (_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: _jsx("div", { "data-testid": "fallback" }), children: _jsx(StoreConsumer, { options: opts }) }) }));
44
+ const Wrapper = ({ opts }) => (_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: makeSuspenseFallback(), children: _jsx(StoreConsumer, { options: opts }) }) }));
45
45
  let view;
46
46
  await act(async () => {
47
47
  view = render(_jsx(Wrapper, { opts: options }));
@@ -51,8 +51,9 @@ describe('experimental useStore', () => {
51
51
  await waitForSuspenseResolved(renderedView);
52
52
  expect(renderedView.getByTestId('ready')).toBeDefined();
53
53
  // Rerender with new options object (but same storeId)
54
+ const rerenderOptions = cloneStoreOptions(options);
54
55
  await act(async () => {
55
- renderedView.rerender(_jsx(Wrapper, { opts: { ...options } }));
56
+ renderedView.rerender(_jsx(Wrapper, { opts: rerenderOptions }));
56
57
  });
57
58
  // Should not show fallback
58
59
  expect(renderedView.queryByTestId('fallback')).toBeNull();
@@ -121,6 +122,38 @@ describe('experimental useStore', () => {
121
122
  expect(storeB).not.toBe(storeA);
122
123
  await cleanupAfterUnmount(unmount);
123
124
  });
125
+ it('does not block useActionState transitions from committing', async () => {
126
+ const storeRegistry = new StoreRegistry();
127
+ const options = testStoreOptions();
128
+ const getOrLoadSpy = vi.spyOn(storeRegistry, 'getOrLoadPromise');
129
+ let view;
130
+ await act(async () => {
131
+ view = render(_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: makeSuspenseFallback(), children: _jsx(StoreWithActionState, { options: options }) }) }));
132
+ });
133
+ const renderedView = view ?? shouldNeverHappen('render failed');
134
+ // Wait for store to load
135
+ await waitForSuspenseResolved(renderedView);
136
+ expect(renderedView.getByTestId('state').textContent).toBe('none');
137
+ expect(renderedView.getByTestId('pending').textContent).toBe('false');
138
+ // After store is loaded, clear spy to only track calls during the transition render
139
+ getOrLoadSpy.mockClear();
140
+ // Trigger a useActionState transition
141
+ await act(async () => {
142
+ fireEvent.click(renderedView.getByTestId('submit'));
143
+ });
144
+ // getOrLoadPromise must be called on each render (not cached via useMemo).
145
+ // When the initial Promise is cached, React.use() is called with a resolved Promise
146
+ // on every subsequent render, which blocks React transitions (e.g. useActionState)
147
+ // from ever committing in browser environments.
148
+ expect(getOrLoadSpy).toHaveBeenCalled();
149
+ // The transition should commit: state updates and isPending returns to false
150
+ await waitFor(() => {
151
+ expect(renderedView.getByTestId('state').textContent).toBe('updated');
152
+ expect(renderedView.getByTestId('pending').textContent).toBe('false');
153
+ });
154
+ getOrLoadSpy.mockRestore();
155
+ await cleanupAfterUnmount(() => renderedView.unmount());
156
+ });
124
157
  // useStore doesn't handle unusedCacheTime=0 correctly because retain is called in useEffect (after render)
125
158
  // See https://github.com/livestorejs/livestore/issues/916
126
159
  it.skip('should load store with unusedCacheTime set to 0', async () => {
@@ -134,7 +167,7 @@ describe('experimental useStore', () => {
134
167
  };
135
168
  let view;
136
169
  await act(async () => {
137
- view = render(_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: _jsx("div", { "data-testid": "fallback" }), children: _jsx(StoreConsumerWithVerification, { opts: options }) }) }));
170
+ view = render(_jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: _jsx(React.Suspense, { fallback: makeSuspenseFallback(), children: _jsx(StoreConsumerWithVerification, { opts: options }) }) }));
138
171
  });
139
172
  const renderedView = view ?? shouldNeverHappen('render failed');
140
173
  await waitForSuspenseResolved(renderedView);
@@ -152,9 +185,21 @@ const StoreConsumer = ({ options }) => {
152
185
  useStore(options);
153
186
  return _jsx("div", { "data-testid": "ready" });
154
187
  };
188
+ /** Component that combines useStore with useActionState to test transition compatibility. */
189
+ const StoreWithActionState = ({ options }) => {
190
+ useStore(options);
191
+ const [state, dispatch, isPending] = React.useActionState((_prev, value) => value, undefined);
192
+ return (_jsxs("div", { children: [_jsx("button", { "data-testid": "submit",
193
+ // eslint-disable-next-line react-perf/jsx-no-new-function-as-prop -- test component
194
+ onClick: () => React.startTransition(() => dispatch('updated')), children: "Submit" }), _jsx("div", { "data-testid": "state", children: state ?? 'none' }), _jsx("div", { "data-testid": "pending", children: String(isPending) })] }));
195
+ };
196
+ const makeSuspenseFallback = () => React.createElement('div', { 'data-testid': 'fallback' });
197
+ const cloneStoreOptions = (options) => {
198
+ return { ...options };
199
+ };
155
200
  const makeProvider = (storeRegistry, { suspense = false } = {}) => ({ children }) => {
156
201
  let content = _jsx(StoreRegistryProvider, { storeRegistry: storeRegistry, children: children });
157
- if (suspense) {
202
+ if (suspense !== undefined) {
158
203
  content = _jsx(React.Suspense, { fallback: null, children: content });
159
204
  }
160
205
  return content;
@@ -1 +1 @@
1
- {"version":3,"file":"useStore.test.js","sourceRoot":"","sources":["../src/useStore.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useStore.test.js","sourceRoot":"","sources":["../src/useStore.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Store, SyncStatus } from '@livestore/livestore';
2
+ /**
3
+ * React hook that subscribes to sync status changes.
4
+ *
5
+ * Returns the current synchronization status between the client session and
6
+ * the leader thread. The component re-renders whenever the sync status changes.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * function SyncIndicator() {
11
+ * const status = store.useSyncStatus()
12
+ * return <span>{status.isSynced ? '✓ Synced' : `Syncing (${status.pendingCount} pending)...`}</span>
13
+ * }
14
+ * ```
15
+ *
16
+ * @param options - Options containing the store instance
17
+ * @returns The current sync status
18
+ */
19
+ export declare const useSyncStatus: (options: {
20
+ store: Store<any>;
21
+ }) => SyncStatus;
22
+ //# sourceMappingURL=useSyncStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSyncStatus.d.ts","sourceRoot":"","sources":["../src/useSyncStatus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS;IAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CAAE,KAAG,UAY9D,CAAA"}
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ /**
3
+ * React hook that subscribes to sync status changes.
4
+ *
5
+ * Returns the current synchronization status between the client session and
6
+ * the leader thread. The component re-renders whenever the sync status changes.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * function SyncIndicator() {
11
+ * const status = store.useSyncStatus()
12
+ * return <span>{status.isSynced ? '✓ Synced' : `Syncing (${status.pendingCount} pending)...`}</span>
13
+ * }
14
+ * ```
15
+ *
16
+ * @param options - Options containing the store instance
17
+ * @returns The current sync status
18
+ */
19
+ export const useSyncStatus = (options) => {
20
+ const { store } = options;
21
+ const [status, setStatus] = React.useState(() => store.syncStatus());
22
+ React.useEffect(() => {
23
+ return store.subscribeSyncStatus(setStatus);
24
+ }, [store]);
25
+ React.useDebugValue(`LiveStore:useSyncStatus:${status.isSynced === true ? 'synced' : 'pending'}`);
26
+ return status;
27
+ };
28
+ //# sourceMappingURL=useSyncStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSyncStatus.js","sourceRoot":"","sources":["../src/useSyncStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA8B,EAAc,EAAE;IAC1E,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAa,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;IAEhF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,KAAK,CAAC,aAAa,CAAC,2BAA2B,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;IAEjG,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,45 +1,88 @@
1
1
  {
2
2
  "name": "@livestore/react",
3
- "version": "0.4.0-dev.22",
3
+ "version": "0.4.0-dev.23",
4
+ "license": "Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/livestorejs/livestore.git"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "package.json",
12
+ "src"
13
+ ],
4
14
  "type": "module",
5
15
  "sideEffects": false,
6
16
  "exports": {
7
17
  ".": "./dist/mod.js",
8
18
  "./experimental": "./dist/experimental/mod.js"
9
19
  },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
10
23
  "dependencies": {
11
24
  "@opentelemetry/api": "1.9.0",
12
- "@livestore/common": "0.4.0-dev.22",
13
- "@livestore/livestore": "0.4.0-dev.22",
14
- "@livestore/utils": "0.4.0-dev.22"
25
+ "@livestore/common": "^0.4.0-dev.23",
26
+ "@livestore/framework-toolkit": "^0.4.0-dev.23",
27
+ "@livestore/livestore": "^0.4.0-dev.23",
28
+ "@livestore/utils": "^0.4.0-dev.23"
15
29
  },
16
30
  "devDependencies": {
17
31
  "@opentelemetry/sdk-trace-base": "2.2.0",
18
- "@testing-library/dom": "^10.4.1",
19
- "@testing-library/react": "^16.3.0",
20
- "@types/react": "19.1.13",
21
- "@types/react-dom": "19.1.9",
22
- "jsdom": "^26.1.0",
23
- "react": "19.1.0",
24
- "react-dom": "19.1.0",
25
- "react-window": "^1.8.11",
26
- "typescript": "5.9.2",
27
- "vite": "7.2.4",
32
+ "@testing-library/dom": "10.4.1",
33
+ "@testing-library/react": "16.3.1",
34
+ "@types/react": "19.2.7",
35
+ "@types/react-dom": "19.2.3",
36
+ "@types/react-window": "1.8.8",
37
+ "jsdom": "26.1.0",
38
+ "react": "19.2.3",
39
+ "react-dom": "19.2.3",
40
+ "react-window": "1.8.11",
41
+ "typescript": "5.9.3",
42
+ "vite": "7.3.1",
28
43
  "vitest": "3.2.4",
29
- "@livestore/utils-dev": "0.4.0-dev.22",
30
- "@livestore/adapter-web": "0.4.0-dev.22"
44
+ "@livestore/adapter-web": "^0.4.0-dev.23",
45
+ "@livestore/utils-dev": "^0.4.0-dev.23"
31
46
  },
32
- "files": [
33
- "package.json",
34
- "src",
35
- "dist"
36
- ],
37
- "license": "Apache-2.0",
38
47
  "peerDependencies": {
39
- "react": "^19.1.0"
48
+ "@effect/ai": "^0.35.0",
49
+ "@effect/cli": "^0.75.1",
50
+ "@effect/cluster": "^0.58.2",
51
+ "@effect/experimental": "^0.60.0",
52
+ "@effect/opentelemetry": "^0.63.0",
53
+ "@effect/platform": "^0.96.1",
54
+ "@effect/platform-browser": "^0.76.0",
55
+ "@effect/platform-bun": "^0.89.0",
56
+ "@effect/platform-node": "^0.106.0",
57
+ "@effect/printer": "^0.49.0",
58
+ "@effect/printer-ansi": "^0.49.0",
59
+ "@effect/rpc": "^0.75.1",
60
+ "@effect/sql": "^0.51.1",
61
+ "@effect/typeclass": "^0.40.0",
62
+ "@effect/vitest": "^0.29.0",
63
+ "@opentelemetry/api": "^1.9.0",
64
+ "@opentelemetry/resources": "^2.2.0",
65
+ "@standard-schema/spec": "^1.1.0",
66
+ "effect": "^3.21.2",
67
+ "react": "^19.0.0"
40
68
  },
41
- "publishConfig": {
42
- "access": "public"
69
+ "$genie": {
70
+ "source": "package.json.genie.ts",
71
+ "warning": "DO NOT EDIT - changes will be overwritten",
72
+ "workspaceClosureDirs": [
73
+ "packages/@livestore/adapter-web",
74
+ "packages/@livestore/common",
75
+ "packages/@livestore/common-cf",
76
+ "packages/@livestore/devtools-web-common",
77
+ "packages/@livestore/framework-toolkit",
78
+ "packages/@livestore/livestore",
79
+ "packages/@livestore/react",
80
+ "packages/@livestore/sqlite-wasm",
81
+ "packages/@livestore/utils",
82
+ "packages/@livestore/utils-dev",
83
+ "packages/@livestore/wa-sqlite",
84
+ "packages/@livestore/webmesh"
85
+ ]
43
86
  },
44
87
  "scripts": {
45
88
  "build": "tsc",
@@ -1,6 +1,7 @@
1
- import type { StoreRegistry } from '@livestore/livestore'
2
1
  import * as React from 'react'
3
2
 
3
+ import type { StoreRegistry } from '@livestore/livestore'
4
+
4
5
  export const StoreRegistryContext = React.createContext<StoreRegistry | undefined>(undefined)
5
6
 
6
7
  export type StoreRegistryProviderProps = {
@@ -59,11 +60,11 @@ export const StoreRegistryProvider = ({ storeRegistry, children }: StoreRegistry
59
60
  * ```
60
61
  */
61
62
  export const useStoreRegistry = (override?: StoreRegistry) => {
62
- if (override) return override
63
+ if (override !== undefined) return override
63
64
 
64
65
  const storeRegistry = React.use(StoreRegistryContext)
65
66
 
66
- if (!storeRegistry) throw new Error('useStoreRegistry() must be used within <StoreRegistryProvider>')
67
+ if (storeRegistry == null) throw new Error('useStoreRegistry() must be used within <StoreRegistryProvider>')
67
68
 
68
69
  return storeRegistry
69
70
  }
@@ -8,6 +8,9 @@ exports[`useClientDocument > otel > should update the data based on component ke
8
8
  "storeId": "default",
9
9
  },
10
10
  "children": [
11
+ {
12
+ "_name": "makeClientSessionSyncProcessor",
13
+ },
11
14
  {
12
15
  "_name": "livestore.in-memory-db:execute",
13
16
  "attributes": {
@@ -21,29 +24,31 @@ exports[`useClientDocument > otel > should update the data based on component ke
21
24
  },
22
25
  },
23
26
  {
24
- "_name": "@livestore/common:LeaderSyncProcessor:push",
25
- "attributes": {
26
- "batch": "undefined",
27
- "batchSize": 1,
28
- },
29
- },
30
- {
31
- "_name": "@livestore/common:LeaderSyncProcessor:push",
32
- "attributes": {
33
- "batch": "undefined",
34
- "batchSize": 1,
35
- },
36
- },
37
- {
38
- "_name": "client-session-sync-processor:pull",
39
- "attributes": {
40
- "code.stacktrace": "<STACKTRACE>",
41
- "span.label": "⚠︎ Interrupted",
42
- "status.interrupted": true,
43
- },
44
- },
45
- {
46
- "_name": "LiveStore:sync",
27
+ "_name": "client-session-sync-processor:boot",
28
+ "children": [
29
+ {
30
+ "_name": "@livestore/common:LeaderSyncProcessor:push",
31
+ "attributes": {
32
+ "batch": "undefined",
33
+ "batchSize": 1,
34
+ },
35
+ },
36
+ {
37
+ "_name": "@livestore/common:LeaderSyncProcessor:push",
38
+ "attributes": {
39
+ "batch": "undefined",
40
+ "batchSize": 1,
41
+ },
42
+ },
43
+ {
44
+ "_name": "client-session-sync-processor:pull",
45
+ "attributes": {
46
+ "code.stacktrace": "<STACKTRACE>",
47
+ "span.label": "⚠︎ Interrupted",
48
+ "status.interrupted": true,
49
+ },
50
+ },
51
+ ],
47
52
  },
48
53
  {
49
54
  "_name": "LiveStore:commits",
@@ -194,14 +199,10 @@ exports[`useClientDocument > otel > should update the data based on component ke
194
199
  },
195
200
  "children": [
196
201
  {
197
- "_name": "client-session-sync-processor:push",
198
- "attributes": {
199
- "batchSize": 1,
200
- "eventCounts": "{
201
- "UserInfoSet": 1
202
- }",
203
- "mergeResultTag": "advance",
204
- },
202
+ "_name": "client-session-sync-processor:encode-events",
203
+ },
204
+ {
205
+ "_name": "client-session-sync-processor:materialize-events",
205
206
  "children": [
206
207
  {
207
208
  "_name": "client-session-sync-processor:materialize-event",
@@ -220,6 +221,16 @@ exports[`useClientDocument > otel > should update the data based on component ke
220
221
  },
221
222
  ],
222
223
  },
224
+ {
225
+ "_name": "client-session-sync-processor:push",
226
+ "attributes": {
227
+ "batchSize": 1,
228
+ "eventCounts": "{
229
+ "UserInfoSet": 1
230
+ }",
231
+ "mergeResultTag": "advance",
232
+ },
233
+ },
223
234
  ],
224
235
  },
225
236
  {
@@ -232,14 +243,10 @@ exports[`useClientDocument > otel > should update the data based on component ke
232
243
  },
233
244
  "children": [
234
245
  {
235
- "_name": "client-session-sync-processor:push",
236
- "attributes": {
237
- "batchSize": 1,
238
- "eventCounts": "{
239
- "UserInfoSet": 1
240
- }",
241
- "mergeResultTag": "advance",
242
- },
246
+ "_name": "client-session-sync-processor:encode-events",
247
+ },
248
+ {
249
+ "_name": "client-session-sync-processor:materialize-events",
243
250
  "children": [
244
251
  {
245
252
  "_name": "client-session-sync-processor:materialize-event",
@@ -258,6 +265,16 @@ exports[`useClientDocument > otel > should update the data based on component ke
258
265
  },
259
266
  ],
260
267
  },
268
+ {
269
+ "_name": "client-session-sync-processor:push",
270
+ "attributes": {
271
+ "batchSize": 1,
272
+ "eventCounts": "{
273
+ "UserInfoSet": 1
274
+ }",
275
+ "mergeResultTag": "advance",
276
+ },
277
+ },
261
278
  ],
262
279
  },
263
280
  ]
@@ -271,6 +288,9 @@ exports[`useClientDocument > otel > should update the data based on component ke
271
288
  "storeId": "default",
272
289
  },
273
290
  "children": [
291
+ {
292
+ "_name": "makeClientSessionSyncProcessor",
293
+ },
274
294
  {
275
295
  "_name": "livestore.in-memory-db:execute",
276
296
  "attributes": {
@@ -284,29 +304,31 @@ exports[`useClientDocument > otel > should update the data based on component ke
284
304
  },
285
305
  },
286
306
  {
287
- "_name": "@livestore/common:LeaderSyncProcessor:push",
288
- "attributes": {
289
- "batch": "undefined",
290
- "batchSize": 1,
291
- },
292
- },
293
- {
294
- "_name": "@livestore/common:LeaderSyncProcessor:push",
295
- "attributes": {
296
- "batch": "undefined",
297
- "batchSize": 1,
298
- },
299
- },
300
- {
301
- "_name": "client-session-sync-processor:pull",
302
- "attributes": {
303
- "code.stacktrace": "<STACKTRACE>",
304
- "span.label": "⚠︎ Interrupted",
305
- "status.interrupted": true,
306
- },
307
- },
308
- {
309
- "_name": "LiveStore:sync",
307
+ "_name": "client-session-sync-processor:boot",
308
+ "children": [
309
+ {
310
+ "_name": "@livestore/common:LeaderSyncProcessor:push",
311
+ "attributes": {
312
+ "batch": "undefined",
313
+ "batchSize": 1,
314
+ },
315
+ },
316
+ {
317
+ "_name": "@livestore/common:LeaderSyncProcessor:push",
318
+ "attributes": {
319
+ "batch": "undefined",
320
+ "batchSize": 1,
321
+ },
322
+ },
323
+ {
324
+ "_name": "client-session-sync-processor:pull",
325
+ "attributes": {
326
+ "code.stacktrace": "<STACKTRACE>",
327
+ "span.label": "⚠︎ Interrupted",
328
+ "status.interrupted": true,
329
+ },
330
+ },
331
+ ],
310
332
  },
311
333
  {
312
334
  "_name": "LiveStore:commits",
@@ -395,14 +417,10 @@ exports[`useClientDocument > otel > should update the data based on component ke
395
417
  },
396
418
  "children": [
397
419
  {
398
- "_name": "client-session-sync-processor:push",
399
- "attributes": {
400
- "batchSize": 1,
401
- "eventCounts": "{
402
- "UserInfoSet": 1
403
- }",
404
- "mergeResultTag": "advance",
405
- },
420
+ "_name": "client-session-sync-processor:encode-events",
421
+ },
422
+ {
423
+ "_name": "client-session-sync-processor:materialize-events",
406
424
  "children": [
407
425
  {
408
426
  "_name": "client-session-sync-processor:materialize-event",
@@ -421,6 +439,16 @@ exports[`useClientDocument > otel > should update the data based on component ke
421
439
  },
422
440
  ],
423
441
  },
442
+ {
443
+ "_name": "client-session-sync-processor:push",
444
+ "attributes": {
445
+ "batchSize": 1,
446
+ "eventCounts": "{
447
+ "UserInfoSet": 1
448
+ }",
449
+ "mergeResultTag": "advance",
450
+ },
451
+ },
424
452
  ],
425
453
  },
426
454
  {
@@ -433,14 +461,10 @@ exports[`useClientDocument > otel > should update the data based on component ke
433
461
  },
434
462
  "children": [
435
463
  {
436
- "_name": "client-session-sync-processor:push",
437
- "attributes": {
438
- "batchSize": 1,
439
- "eventCounts": "{
440
- "UserInfoSet": 1
441
- }",
442
- "mergeResultTag": "advance",
443
- },
464
+ "_name": "client-session-sync-processor:encode-events",
465
+ },
466
+ {
467
+ "_name": "client-session-sync-processor:materialize-events",
444
468
  "children": [
445
469
  {
446
470
  "_name": "client-session-sync-processor:materialize-event",
@@ -459,6 +483,16 @@ exports[`useClientDocument > otel > should update the data based on component ke
459
483
  },
460
484
  ],
461
485
  },
486
+ {
487
+ "_name": "client-session-sync-processor:push",
488
+ "attributes": {
489
+ "batchSize": 1,
490
+ "eventCounts": "{
491
+ "UserInfoSet": 1
492
+ }",
493
+ "mergeResultTag": "advance",
494
+ },
495
+ },
462
496
  ],
463
497
  },
464
498
  ]