@livestore/livestore 0.3.2-dev.0 → 0.3.2-dev.10

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 (97) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/QueryCache.d.ts +4 -6
  3. package/dist/QueryCache.d.ts.map +1 -1
  4. package/dist/QueryCache.js +2 -3
  5. package/dist/QueryCache.js.map +1 -1
  6. package/dist/SqliteDbWrapper.d.ts.map +1 -1
  7. package/dist/SqliteDbWrapper.js +1 -2
  8. package/dist/SqliteDbWrapper.js.map +1 -1
  9. package/dist/SqliteDbWrapper.test.js +1 -1
  10. package/dist/effect/LiveStore.d.ts +2 -2
  11. package/dist/effect/LiveStore.js +1 -1
  12. package/dist/effect/mod.d.ts +2 -2
  13. package/dist/effect/mod.d.ts.map +1 -1
  14. package/dist/effect/mod.js +2 -2
  15. package/dist/effect/mod.js.map +1 -1
  16. package/dist/internal/mod.d.ts +2 -2
  17. package/dist/internal/mod.js +2 -2
  18. package/dist/live-queries/base-class.d.ts +4 -4
  19. package/dist/live-queries/base-class.d.ts.map +1 -1
  20. package/dist/live-queries/base-class.js +1 -1
  21. package/dist/live-queries/base-class.js.map +1 -1
  22. package/dist/live-queries/client-document-get-query.d.ts +1 -1
  23. package/dist/live-queries/computed.d.ts +4 -4
  24. package/dist/live-queries/computed.js +2 -2
  25. package/dist/live-queries/db-query.d.ts +4 -4
  26. package/dist/live-queries/db-query.js +4 -4
  27. package/dist/live-queries/db-query.test.js +12 -14
  28. package/dist/live-queries/db-query.test.js.map +1 -1
  29. package/dist/live-queries/mod.d.ts +4 -4
  30. package/dist/live-queries/mod.js +4 -4
  31. package/dist/live-queries/signal.d.ts +4 -4
  32. package/dist/live-queries/signal.js +1 -1
  33. package/dist/live-queries/signal.test.js +3 -3
  34. package/dist/mod.d.ts +56 -14
  35. package/dist/mod.d.ts.map +1 -1
  36. package/dist/mod.js +9 -9
  37. package/dist/mod.js.map +1 -1
  38. package/dist/reactive.d.ts.map +1 -1
  39. package/dist/reactive.js +1 -2
  40. package/dist/reactive.js.map +1 -1
  41. package/dist/reactive.test.js +1 -1
  42. package/dist/store/create-store.d.ts +6 -3
  43. package/dist/store/create-store.d.ts.map +1 -1
  44. package/dist/store/create-store.js +3 -2
  45. package/dist/store/create-store.js.map +1 -1
  46. package/dist/store/devtools.d.ts +3 -3
  47. package/dist/store/devtools.js +2 -2
  48. package/dist/store/store-types.d.ts +7 -4
  49. package/dist/store/store-types.d.ts.map +1 -1
  50. package/dist/store/store-types.js.map +1 -1
  51. package/dist/store/store.d.ts +7 -7
  52. package/dist/store/store.d.ts.map +1 -1
  53. package/dist/store/store.js +7 -6
  54. package/dist/store/store.js.map +1 -1
  55. package/dist/utils/dev.d.ts.map +1 -1
  56. package/dist/utils/dev.js +0 -1
  57. package/dist/utils/dev.js.map +1 -1
  58. package/dist/utils/stack-info.test.js +1 -1
  59. package/dist/utils/tests/fixture.d.ts +79 -10
  60. package/dist/utils/tests/fixture.d.ts.map +1 -1
  61. package/dist/utils/tests/fixture.js +16 -3
  62. package/dist/utils/tests/fixture.js.map +1 -1
  63. package/dist/utils/tests/mod.d.ts +3 -3
  64. package/dist/utils/tests/mod.d.ts.map +1 -1
  65. package/dist/utils/tests/mod.js +3 -3
  66. package/dist/utils/tests/mod.js.map +1 -1
  67. package/dist/utils/tests/otel.d.ts.map +1 -1
  68. package/dist/utils/tests/otel.js.map +1 -1
  69. package/package.json +9 -35
  70. package/src/QueryCache.ts +5 -7
  71. package/src/SqliteDbWrapper.test.ts +1 -1
  72. package/src/SqliteDbWrapper.ts +1 -3
  73. package/src/ambient.d.ts +0 -2
  74. package/src/effect/LiveStore.ts +2 -2
  75. package/src/effect/mod.ts +4 -4
  76. package/src/internal/mod.ts +2 -2
  77. package/src/live-queries/__snapshots__/db-query.test.ts.snap +14 -14
  78. package/src/live-queries/base-class.ts +11 -10
  79. package/src/live-queries/client-document-get-query.ts +1 -1
  80. package/src/live-queries/computed.ts +5 -5
  81. package/src/live-queries/db-query.test.ts +12 -14
  82. package/src/live-queries/db-query.ts +7 -7
  83. package/src/live-queries/mod.ts +4 -4
  84. package/src/live-queries/signal.test.ts +3 -3
  85. package/src/live-queries/signal.ts +4 -4
  86. package/src/mod.ts +33 -39
  87. package/src/reactive.test.ts +1 -1
  88. package/src/reactive.ts +2 -4
  89. package/src/store/create-store.ts +8 -3
  90. package/src/store/devtools.ts +5 -5
  91. package/src/store/store-types.ts +13 -4
  92. package/src/store/store.ts +11 -10
  93. package/src/utils/dev.ts +0 -1
  94. package/src/utils/stack-info.test.ts +1 -1
  95. package/src/utils/tests/fixture.ts +18 -3
  96. package/src/utils/tests/mod.ts +3 -3
  97. package/src/utils/tests/otel.ts +1 -0
@@ -1,16 +1,14 @@
1
- import { sql } from '@livestore/common'
2
- import { rawSqlEvent } from '@livestore/common/schema'
3
1
  import { Effect, ReadonlyRecord, Schema } from '@livestore/utils/effect'
4
2
  import { Vitest } from '@livestore/utils-dev/node-vitest'
5
3
  import * as otel from '@opentelemetry/api'
6
4
  import { BasicTracerProvider, InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
7
5
  import { expect } from 'vitest'
8
6
 
9
- import * as RG from '../reactive.js'
10
- import { makeTodoMvc, tables } from '../utils/tests/fixture.js'
11
- import { getSimplifiedRootSpan } from '../utils/tests/otel.js'
12
- import { computed } from './computed.js'
13
- import { queryDb } from './db-query.js'
7
+ import * as RG from '../reactive.ts'
8
+ import { events, makeTodoMvc, tables } from '../utils/tests/fixture.ts'
9
+ import { getSimplifiedRootSpan } from '../utils/tests/otel.ts'
10
+ import { computed } from './computed.ts'
11
+ import { queryDb } from './db-query.ts'
14
12
 
15
13
  /*
16
14
  TODO write tests for:
@@ -65,7 +63,7 @@ Vitest.describe('otel', () => {
65
63
  })
66
64
  expect(store.query(query$)).toMatchInlineSnapshot('[]')
67
65
 
68
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }))
66
+ store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false }))
69
67
 
70
68
  expect(store.query(query$)).toMatchInlineSnapshot(`
71
69
  [
@@ -119,7 +117,7 @@ Vitest.describe('otel', () => {
119
117
 
120
118
  expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot()
121
119
 
122
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }))
120
+ store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false }))
123
121
 
124
122
  expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot()
125
123
 
@@ -167,7 +165,7 @@ Vitest.describe('otel', () => {
167
165
  }
168
166
  `)
169
167
 
170
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }))
168
+ store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false }))
171
169
 
172
170
  expect(store.query(query$)).toMatchInlineSnapshot(`
173
171
  {
@@ -212,7 +210,7 @@ Vitest.describe('otel', () => {
212
210
  expect(callbackResults).toHaveLength(1)
213
211
  expect(callbackResults[0]).toMatchObject(defaultTodo)
214
212
 
215
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }))
213
+ store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false }))
216
214
 
217
215
  expect(callbackResults).toHaveLength(2)
218
216
  expect(callbackResults[1]).toMatchObject({
@@ -264,14 +262,14 @@ Vitest.describe('otel', () => {
264
262
  expect(callbackResults1).toHaveLength(1)
265
263
  expect(callbackResults2).toHaveLength(1)
266
264
 
267
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t3', 'read book', 0)` }))
265
+ store.commit(events.todoCreated({ id: 't3', text: 'read book', completed: false }))
268
266
 
269
267
  expect(callbackResults1).toHaveLength(2)
270
268
  expect(callbackResults2).toHaveLength(2)
271
269
 
272
270
  unsubscribe1()
273
271
 
274
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t4', 'cook dinner', 0)` }))
272
+ store.commit(events.todoCreated({ id: 't4', text: 'cook dinner', completed: false }))
275
273
 
276
274
  expect(callbackResults1).toHaveLength(2)
277
275
  expect(callbackResults2).toHaveLength(3)
@@ -307,7 +305,7 @@ Vitest.describe('otel', () => {
307
305
  expect(callbackResults).toHaveLength(1)
308
306
  expect(callbackResults[0]).toEqual([])
309
307
 
310
- store.commit(rawSqlEvent({ sql: sql`INSERT INTO todos (id, text, completed) VALUES ('t5', 'clean house', 1)` }))
308
+ store.commit(events.todoCreated({ id: 't5', text: 'clean house', completed: true }))
311
309
 
312
310
  expect(callbackResults).toHaveLength(2)
313
311
  expect(callbackResults[1]).toHaveLength(1)
@@ -13,13 +13,13 @@ import { deepEqual, shouldNeverHappen } from '@livestore/utils'
13
13
  import { Predicate, Schema, TreeFormatter } from '@livestore/utils/effect'
14
14
  import * as otel from '@opentelemetry/api'
15
15
 
16
- import type { Thunk } from '../reactive.js'
17
- import { isThunk, NOT_REFRESHED_YET } from '../reactive.js'
18
- import type { RefreshReason } from '../store/store-types.js'
19
- import { isValidFunctionString } from '../utils/function-string.js'
20
- import type { DepKey, GetAtomResult, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from './base-class.js'
21
- import { depsToString, LiveStoreQueryBase, makeGetAtomResult, withRCMap } from './base-class.js'
22
- import { makeExecBeforeFirstRun, rowQueryLabel } from './client-document-get-query.js'
16
+ import type { Thunk } from '../reactive.ts'
17
+ import { isThunk, NOT_REFRESHED_YET } from '../reactive.ts'
18
+ import type { RefreshReason } from '../store/store-types.ts'
19
+ import { isValidFunctionString } from '../utils/function-string.ts'
20
+ import type { DepKey, GetAtomResult, LiveQueryDef, ReactivityGraph, ReactivityGraphContext } from './base-class.ts'
21
+ import { depsToString, LiveStoreQueryBase, makeGetAtomResult, withRCMap } from './base-class.ts'
22
+ import { makeExecBeforeFirstRun, rowQueryLabel } from './client-document-get-query.ts'
23
23
 
24
24
  export type QueryInputRaw<TDecoded, TEncoded> = {
25
25
  query: string
@@ -1,4 +1,4 @@
1
- export * from './base-class.js'
2
- export * from './computed.js'
3
- export * from './db-query.js'
4
- export * from './signal.js'
1
+ export * from './base-class.ts'
2
+ export * from './computed.ts'
3
+ export * from './db-query.ts'
4
+ export * from './signal.ts'
@@ -2,9 +2,9 @@ import { Effect } from '@livestore/utils/effect'
2
2
  import { Vitest } from '@livestore/utils-dev/node-vitest'
3
3
  import { expect } from 'vitest'
4
4
 
5
- import { makeTodoMvc } from '../utils/tests/fixture.js'
6
- import { computed } from './computed.js'
7
- import { signal } from './signal.js'
5
+ import { makeTodoMvc } from '../utils/tests/fixture.ts'
6
+ import { computed } from './computed.ts'
7
+ import { signal } from './signal.ts'
8
8
 
9
9
  Vitest.describe('signal', () => {
10
10
  Vitest.scopedLive('should be able to create a signal', () =>
@@ -1,9 +1,9 @@
1
1
  import { nanoid } from '@livestore/utils/nanoid'
2
2
 
3
- import type * as RG from '../reactive.js'
4
- import type { RefreshReason } from '../store/store-types.js'
5
- import type { ISignal, ReactivityGraph, ReactivityGraphContext, SignalDef } from './base-class.js'
6
- import { LiveStoreQueryBase, withRCMap } from './base-class.js'
3
+ import type * as RG from '../reactive.ts'
4
+ import type { RefreshReason } from '../store/store-types.ts'
5
+ import type { ISignal, ReactivityGraph, ReactivityGraphContext, SignalDef } from './base-class.ts'
6
+ import { LiveStoreQueryBase, withRCMap } from './base-class.ts'
7
7
 
8
8
  export const signal = <T>(
9
9
  defaultValue: T,
package/src/mod.ts CHANGED
@@ -1,51 +1,45 @@
1
- export { Store } from './store/store.js'
2
- export { createStore, createStorePromise, type CreateStoreOptions } from './store/create-store.js'
3
- export type { QueryDebugInfo, RefreshReason, OtelOptions } from './store/store-types.js'
4
- // We're re-exporting `Schema` from `effect` for convenience
5
- export { Schema } from '@livestore/utils/effect'
6
-
7
- export {
8
- type LiveStoreContext,
9
- type LiveStoreContextRunning,
10
- type ShutdownDeferred,
11
- makeShutdownDeferred,
12
- } from './store/store-types.js'
13
-
14
- export { SqliteDbWrapper, emptyDebugInfo } from './SqliteDbWrapper.js'
15
-
16
- export {
17
- queryDb,
18
- computed,
19
- signal,
20
- type LiveQuery,
21
- type LiveQueryDef,
22
- type Signal,
23
- type SignalDef,
24
- type RcRef,
25
- } from './live-queries/mod.js'
26
-
27
- export * from '@livestore/common/schema'
1
+ export type { Adapter, ClientSession, PreparedStatement } from '@livestore/common'
28
2
  export {
29
- sql,
30
- SessionIdSymbol,
3
+ type Bindable,
31
4
  type BootStatus,
32
- type SqliteDb,
33
5
  type DebugInfo,
6
+ IntentionalShutdownCause,
34
7
  type MutableDebugInfo,
35
- prepareBindValues,
36
- type Bindable,
37
8
  type PreparedBindValues,
38
- type QueryBuilderAst,
9
+ prepareBindValues,
10
+ provideOtel,
39
11
  type QueryBuilder,
12
+ type QueryBuilderAst,
40
13
  type RowQuery,
14
+ SessionIdSymbol,
15
+ type SqliteDb,
41
16
  StoreInterrupted,
42
- IntentionalShutdownCause,
43
- provideOtel,
17
+ sql,
44
18
  } from '@livestore/common'
45
-
19
+ export * from '@livestore/common/schema'
46
20
  export { deepEqual } from '@livestore/utils'
21
+ // We're re-exporting `Schema` from `effect` for convenience
22
+ export { Schema } from '@livestore/utils/effect'
47
23
  export { nanoid } from '@livestore/utils/nanoid'
48
24
 
49
- export * from './utils/stack-info.js'
50
-
51
- export type { ClientSession, Adapter, PreparedStatement } from '@livestore/common'
25
+ export {
26
+ computed,
27
+ type LiveQuery,
28
+ type LiveQueryDef,
29
+ queryDb,
30
+ type RcRef,
31
+ type Signal,
32
+ type SignalDef,
33
+ signal,
34
+ } from './live-queries/mod.ts'
35
+ export { emptyDebugInfo, SqliteDbWrapper } from './SqliteDbWrapper.ts'
36
+ export { type CreateStoreOptions, createStore, createStorePromise } from './store/create-store.ts'
37
+ export { Store } from './store/store.ts'
38
+ export type { OtelOptions, QueryDebugInfo, RefreshReason } from './store/store-types.ts'
39
+ export {
40
+ type LiveStoreContext,
41
+ type LiveStoreContextRunning,
42
+ makeShutdownDeferred,
43
+ type ShutdownDeferred,
44
+ } from './store/store-types.ts'
45
+ export * from './utils/stack-info.ts'
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
 
3
- import { ReactiveGraph } from './reactive.js'
3
+ import { ReactiveGraph } from './reactive.ts'
4
4
 
5
5
  describe('a trivial graph', () => {
6
6
  const makeGraph = () => {
package/src/reactive.ts CHANGED
@@ -21,13 +21,11 @@
21
21
  // is maintained eagerly as edges are added and removed.)
22
22
  // - At every thunk we check value equality with the previous value and cutoff propagation if possible.
23
23
 
24
- /* eslint-disable prefer-arrow/prefer-arrow-functions */
25
-
26
24
  import { BoundArray } from '@livestore/common'
27
25
  import { deepEqual, shouldNeverHappen } from '@livestore/utils'
28
26
  import type { Types } from '@livestore/utils/effect'
29
27
  import type * as otel from '@opentelemetry/api'
30
- // import { getDurationMsFromSpan } from './otel.js'
28
+ // import { getDurationMsFromSpan } from './otel.ts'
31
29
 
32
30
  export const NOT_REFRESHED_YET = Symbol.for('NOT_REFRESHED_YET')
33
31
  export type NOT_REFRESHED_YET = typeof NOT_REFRESHED_YET
@@ -279,7 +277,7 @@ export class ReactiveGraph<
279
277
  return compute(atom, otelContext, debugRefreshReason)
280
278
  }
281
279
 
282
- let debugInfo: TDebugThunkInfo | undefined
280
+ let debugInfo: TDebugThunkInfo | undefined
283
281
  const setDebugInfo = (debugInfo_: TDebugThunkInfo) => {
284
282
  debugInfo = debugInfo_
285
283
  }
@@ -3,6 +3,7 @@ import type {
3
3
  BootStatus,
4
4
  ClientSession,
5
5
  ClientSessionDevtoolsChannel,
6
+ ClientSessionSyncProcessorSimulationParams,
6
7
  IntentionalShutdownCause,
7
8
  MigrationsReport,
8
9
  } from '@livestore/common'
@@ -29,13 +30,13 @@ import {
29
30
  import { nanoid } from '@livestore/utils/nanoid'
30
31
  import * as otel from '@opentelemetry/api'
31
32
 
32
- import { connectDevtoolsToStore } from './devtools.js'
33
- import { Store } from './store.js'
33
+ import { connectDevtoolsToStore } from './devtools.ts'
34
+ import { Store } from './store.ts'
34
35
  import type {
35
36
  LiveStoreContextRunning as LiveStoreContextRunning_,
36
37
  OtelOptions,
37
38
  ShutdownDeferred,
38
- } from './store-types.js'
39
+ } from './store-types.ts'
39
40
 
40
41
  export const DEFAULT_PARAMS = {
41
42
  leaderPushBatchSize: 100,
@@ -120,6 +121,9 @@ export interface CreateStoreOptions<TSchema extends LiveStoreSchema, TContext =
120
121
  syncPayload?: Schema.JsonValue
121
122
  params?: {
122
123
  leaderPushBatchSize?: number
124
+ simulation?: {
125
+ clientSessionSyncProcessor: typeof ClientSessionSyncProcessorSimulationParams.Type
126
+ }
123
127
  }
124
128
  debug?: {
125
129
  instanceId?: string
@@ -274,6 +278,7 @@ export const createStore = <TSchema extends LiveStoreSchema = LiveStoreSchema, T
274
278
  storeId,
275
279
  params: {
276
280
  leaderPushBatchSize: params?.leaderPushBatchSize ?? DEFAULT_PARAMS.leaderPushBatchSize,
281
+ simulation: params?.simulation,
277
282
  },
278
283
  })
279
284
 
@@ -5,11 +5,11 @@ import type { WebChannel } from '@livestore/utils/effect'
5
5
  import { Effect, Stream } from '@livestore/utils/effect'
6
6
  import { nanoid } from '@livestore/utils/nanoid'
7
7
 
8
- import type { LiveQuery, ReactivityGraph } from '../live-queries/base-class.js'
9
- import { NOT_REFRESHED_YET } from '../reactive.js'
10
- import type { SqliteDbWrapper } from '../SqliteDbWrapper.js'
11
- import { emptyDebugInfo as makeEmptyDebugInfo } from '../SqliteDbWrapper.js'
12
- import type { ReferenceCountedSet } from '../utils/data-structures.js'
8
+ import type { LiveQuery, ReactivityGraph } from '../live-queries/base-class.ts'
9
+ import { NOT_REFRESHED_YET } from '../reactive.ts'
10
+ import type { SqliteDbWrapper } from '../SqliteDbWrapper.ts'
11
+ import { emptyDebugInfo as makeEmptyDebugInfo } from '../SqliteDbWrapper.ts'
12
+ import type { ReferenceCountedSet } from '../utils/data-structures.ts'
13
13
 
14
14
  type IStore = {
15
15
  clientSession: ClientSession
@@ -1,12 +1,18 @@
1
- import type { ClientSession, IntentionalShutdownCause, StoreInterrupted, UnexpectedError } from '@livestore/common'
1
+ import type {
2
+ ClientSession,
3
+ ClientSessionSyncProcessorSimulationParams,
4
+ IntentionalShutdownCause,
5
+ StoreInterrupted,
6
+ UnexpectedError,
7
+ } from '@livestore/common'
2
8
  import type { EventSequenceNumber, LiveStoreEvent, LiveStoreSchema } from '@livestore/common/schema'
3
9
  import type { Effect, Runtime, Scope } from '@livestore/utils/effect'
4
10
  import { Deferred } from '@livestore/utils/effect'
5
11
  import type * as otel from '@opentelemetry/api'
6
12
 
7
- import type { DebugRefreshReasonBase } from '../reactive.js'
8
- import type { StackInfo } from '../utils/stack-info.js'
9
- import type { Store } from './store.js'
13
+ import type { DebugRefreshReasonBase } from '../reactive.ts'
14
+ import type { StackInfo } from '../utils/stack-info.ts'
15
+ import type { Store } from './store.ts'
10
16
 
11
17
  export type LiveStoreContext =
12
18
  | LiveStoreContextRunning
@@ -49,6 +55,9 @@ export type StoreOptions<TSchema extends LiveStoreSchema = LiveStoreSchema, TCon
49
55
  batchUpdates: (runUpdates: () => void) => void
50
56
  params: {
51
57
  leaderPushBatchSize: number
58
+ simulation?: {
59
+ clientSessionSyncProcessor: typeof ClientSessionSyncProcessorSimulationParams.Type
60
+ }
52
61
  }
53
62
  __runningInDevtools: boolean
54
63
  }
@@ -32,15 +32,15 @@ import type {
32
32
  ReactivityGraph,
33
33
  ReactivityGraphContext,
34
34
  SignalDef,
35
- } from '../live-queries/base-class.js'
36
- import { makeReactivityGraph } from '../live-queries/base-class.js'
37
- import { makeExecBeforeFirstRun } from '../live-queries/client-document-get-query.js'
38
- import { queryDb } from '../live-queries/db-query.js'
39
- import type { Ref } from '../reactive.js'
40
- import { SqliteDbWrapper } from '../SqliteDbWrapper.js'
41
- import { ReferenceCountedSet } from '../utils/data-structures.js'
42
- import { downloadBlob, exposeDebugUtils } from '../utils/dev.js'
43
- import type { StackInfo } from '../utils/stack-info.js'
35
+ } from '../live-queries/base-class.ts'
36
+ import { makeReactivityGraph } from '../live-queries/base-class.ts'
37
+ import { makeExecBeforeFirstRun } from '../live-queries/client-document-get-query.ts'
38
+ import { queryDb } from '../live-queries/db-query.ts'
39
+ import type { Ref } from '../reactive.ts'
40
+ import { SqliteDbWrapper } from '../SqliteDbWrapper.ts'
41
+ import { ReferenceCountedSet } from '../utils/data-structures.ts'
42
+ import { downloadBlob, exposeDebugUtils } from '../utils/dev.ts'
43
+ import type { StackInfo } from '../utils/stack-info.ts'
44
44
  import type {
45
45
  RefreshReason,
46
46
  StoreCommitOptions,
@@ -48,7 +48,7 @@ import type {
48
48
  StoreOptions,
49
49
  StoreOtel,
50
50
  Unsubscribe,
51
- } from './store-types.js'
51
+ } from './store-types.ts'
52
52
 
53
53
  if (isDevEnv()) {
54
54
  exposeDebugUtils()
@@ -195,6 +195,7 @@ export class Store<TSchema extends LiveStoreSchema = LiveStoreSchema, TContext =
195
195
  span: syncSpan,
196
196
  params: {
197
197
  leaderPushBatchSize: params.leaderPushBatchSize,
198
+ simulation: params.simulation?.clientSessionSyncProcessor,
198
199
  },
199
200
  confirmUnsavedChanges,
200
201
  })
package/src/utils/dev.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { isDevEnv } from '@livestore/utils'
2
2
  import { Effect } from '@livestore/utils/effect'
3
3
 
4
- /* eslint-disable unicorn/prefer-global-this */
5
4
  export const downloadBlob = (
6
5
  data: Uint8Array | Blob | string,
7
6
  fileName: string,
@@ -1,6 +1,6 @@
1
1
  import { expect, it } from 'vitest'
2
2
 
3
- import { extractStackInfoFromStackTrace } from './stack-info.js'
3
+ import { extractStackInfoFromStackTrace } from './stack-info.ts'
4
4
 
5
5
  it('RouteLink stacktrace', async () => {
6
6
  const stackTrace = `\
@@ -1,6 +1,6 @@
1
1
  import { makeInMemoryAdapter } from '@livestore/adapter-web'
2
2
  import { provideOtel } from '@livestore/common'
3
- import { createStore, makeSchema, State } from '@livestore/livestore'
3
+ import { createStore, Events, makeSchema, State } from '@livestore/livestore'
4
4
  import { Effect, Schema } from '@livestore/utils/effect'
5
5
  import type * as otel from '@opentelemetry/api'
6
6
 
@@ -37,8 +37,23 @@ export const app = State.SQLite.clientDocument({
37
37
 
38
38
  export const tables = { todos, app }
39
39
 
40
- export const state = State.SQLite.makeState({ tables, materializers: {} })
41
- export const schema = makeSchema({ state, events: {} })
40
+ export const events = {
41
+ todoCreated: Events.synced({
42
+ name: 'todo.created',
43
+ schema: Schema.Struct({
44
+ id: Schema.String,
45
+ text: Schema.String,
46
+ completed: Schema.Boolean,
47
+ }),
48
+ }),
49
+ }
50
+
51
+ const materializers = State.SQLite.materializers(events, {
52
+ 'todo.created': ({ id, text, completed }) => tables.todos.insert({ id, text, completed }),
53
+ })
54
+
55
+ export const state = State.SQLite.makeState({ tables, materializers })
56
+ export const schema = makeSchema({ state, events })
42
57
 
43
58
  export const makeTodoMvc = ({
44
59
  otelTracer,
@@ -1,3 +1,3 @@
1
- export * from './fixture.js'
2
- export * from './otel.js'
3
- export * as RG from '../../reactive.js'
1
+ export * as RG from '../../reactive.ts'
2
+ export * from './fixture.ts'
3
+ export * from './otel.ts'
@@ -1,6 +1,7 @@
1
1
  import { identity } from '@livestore/utils/effect'
2
2
  import type { Attributes } from '@opentelemetry/api'
3
3
  import type { InMemorySpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base'
4
+
4
5
  type SimplifiedNestedSpan = { _name: string; attributes: any; children: SimplifiedNestedSpan[] }
5
6
 
6
7
  export const getSimplifiedRootSpan = (