@livestore/common 0.3.1-dev.0 → 0.3.2-dev.0

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 (185) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +35 -0
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -0
  4. package/dist/ClientSessionLeaderThreadProxy.js +6 -0
  5. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -0
  6. package/dist/adapter-types.d.ts +10 -156
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +5 -49
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/defs.d.ts +20 -0
  11. package/dist/defs.d.ts.map +1 -0
  12. package/dist/defs.js +12 -0
  13. package/dist/defs.js.map +1 -0
  14. package/dist/devtools/devtools-messages-client-session.d.ts +23 -21
  15. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  16. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  17. package/dist/devtools/devtools-messages-leader.d.ts +26 -24
  18. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  19. package/dist/errors.d.ts +50 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +36 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/leader-thread/LeaderSyncProcessor.d.ts +6 -7
  28. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  29. package/dist/leader-thread/LeaderSyncProcessor.js +122 -123
  30. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  31. package/dist/leader-thread/eventlog.d.ts +17 -6
  32. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  33. package/dist/leader-thread/eventlog.js +34 -17
  34. package/dist/leader-thread/eventlog.js.map +1 -1
  35. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  36. package/dist/leader-thread/leader-worker-devtools.js +1 -2
  37. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  38. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  39. package/dist/leader-thread/make-leader-thread-layer.js +37 -7
  40. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  41. package/dist/leader-thread/materialize-event.d.ts +3 -3
  42. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  43. package/dist/leader-thread/materialize-event.js +27 -10
  44. package/dist/leader-thread/materialize-event.js.map +1 -1
  45. package/dist/leader-thread/mod.d.ts +2 -0
  46. package/dist/leader-thread/mod.d.ts.map +1 -1
  47. package/dist/leader-thread/mod.js +2 -0
  48. package/dist/leader-thread/mod.js.map +1 -1
  49. package/dist/leader-thread/recreate-db.d.ts +13 -6
  50. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  51. package/dist/leader-thread/recreate-db.js +1 -3
  52. package/dist/leader-thread/recreate-db.js.map +1 -1
  53. package/dist/leader-thread/types.d.ts +6 -7
  54. package/dist/leader-thread/types.d.ts.map +1 -1
  55. package/dist/make-client-session.d.ts +1 -1
  56. package/dist/make-client-session.d.ts.map +1 -1
  57. package/dist/make-client-session.js +1 -1
  58. package/dist/make-client-session.js.map +1 -1
  59. package/dist/materializer-helper.d.ts +13 -2
  60. package/dist/materializer-helper.d.ts.map +1 -1
  61. package/dist/materializer-helper.js +25 -11
  62. package/dist/materializer-helper.js.map +1 -1
  63. package/dist/rematerialize-from-eventlog.d.ts +1 -1
  64. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  65. package/dist/rematerialize-from-eventlog.js +12 -4
  66. package/dist/rematerialize-from-eventlog.js.map +1 -1
  67. package/dist/schema/EventDef.d.ts +8 -3
  68. package/dist/schema/EventDef.d.ts.map +1 -1
  69. package/dist/schema/EventDef.js +5 -2
  70. package/dist/schema/EventDef.js.map +1 -1
  71. package/dist/schema/EventSequenceNumber.d.ts +20 -2
  72. package/dist/schema/EventSequenceNumber.d.ts.map +1 -1
  73. package/dist/schema/EventSequenceNumber.js +71 -19
  74. package/dist/schema/EventSequenceNumber.js.map +1 -1
  75. package/dist/schema/EventSequenceNumber.test.js +88 -3
  76. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  77. package/dist/schema/LiveStoreEvent.d.ts +56 -8
  78. package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
  79. package/dist/schema/LiveStoreEvent.js +34 -8
  80. package/dist/schema/LiveStoreEvent.js.map +1 -1
  81. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +2 -2
  82. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  83. package/dist/schema/state/sqlite/db-schema/hash.js +3 -1
  84. package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -1
  85. package/dist/schema/state/sqlite/mod.d.ts +1 -1
  86. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  87. package/dist/schema/state/sqlite/query-builder/api.d.ts +36 -9
  88. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  89. package/dist/schema/state/sqlite/query-builder/api.js.map +1 -1
  90. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  91. package/dist/schema/state/sqlite/query-builder/impl.js +16 -11
  92. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  93. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +1 -86
  94. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -1
  95. package/dist/schema/state/sqlite/query-builder/impl.test.js +34 -20
  96. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  97. package/dist/schema/state/sqlite/system-tables.d.ts +380 -432
  98. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
  99. package/dist/schema/state/sqlite/system-tables.js +8 -17
  100. package/dist/schema/state/sqlite/system-tables.js.map +1 -1
  101. package/dist/schema/state/sqlite/table-def.d.ts +2 -2
  102. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  103. package/dist/schema-management/migrations.d.ts +3 -1
  104. package/dist/schema-management/migrations.d.ts.map +1 -1
  105. package/dist/schema-management/migrations.js.map +1 -1
  106. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  107. package/dist/sql-queries/sql-queries.js +2 -0
  108. package/dist/sql-queries/sql-queries.js.map +1 -1
  109. package/dist/sqlite-db-helper.d.ts +7 -0
  110. package/dist/sqlite-db-helper.d.ts.map +1 -0
  111. package/dist/sqlite-db-helper.js +29 -0
  112. package/dist/sqlite-db-helper.js.map +1 -0
  113. package/dist/sqlite-types.d.ts +72 -0
  114. package/dist/sqlite-types.d.ts.map +1 -0
  115. package/dist/sqlite-types.js +5 -0
  116. package/dist/sqlite-types.js.map +1 -0
  117. package/dist/sync/ClientSessionSyncProcessor.d.ts +12 -3
  118. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  119. package/dist/sync/ClientSessionSyncProcessor.js +37 -19
  120. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  121. package/dist/sync/next/graphology.d.ts.map +1 -1
  122. package/dist/sync/next/graphology.js +0 -6
  123. package/dist/sync/next/graphology.js.map +1 -1
  124. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  125. package/dist/sync/next/rebase-events.js +1 -0
  126. package/dist/sync/next/rebase-events.js.map +1 -1
  127. package/dist/sync/next/test/compact-events.test.js +1 -1
  128. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  129. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  130. package/dist/sync/next/test/event-fixtures.js +12 -3
  131. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  132. package/dist/sync/sync.d.ts +2 -0
  133. package/dist/sync/sync.d.ts.map +1 -1
  134. package/dist/sync/sync.js +3 -0
  135. package/dist/sync/sync.js.map +1 -1
  136. package/dist/sync/syncstate.d.ts +13 -4
  137. package/dist/sync/syncstate.d.ts.map +1 -1
  138. package/dist/sync/syncstate.js +23 -10
  139. package/dist/sync/syncstate.js.map +1 -1
  140. package/dist/sync/syncstate.test.js +17 -17
  141. package/dist/sync/syncstate.test.js.map +1 -1
  142. package/dist/version.d.ts +1 -1
  143. package/dist/version.js +1 -1
  144. package/package.json +7 -6
  145. package/src/ClientSessionLeaderThreadProxy.ts +40 -0
  146. package/src/adapter-types.ts +19 -161
  147. package/src/defs.ts +17 -0
  148. package/src/errors.ts +49 -0
  149. package/src/index.ts +1 -0
  150. package/src/leader-thread/LeaderSyncProcessor.ts +157 -181
  151. package/src/leader-thread/eventlog.ts +78 -54
  152. package/src/leader-thread/leader-worker-devtools.ts +1 -2
  153. package/src/leader-thread/make-leader-thread-layer.ts +52 -8
  154. package/src/leader-thread/materialize-event.ts +33 -12
  155. package/src/leader-thread/mod.ts +2 -0
  156. package/src/leader-thread/recreate-db.ts +99 -91
  157. package/src/leader-thread/types.ts +10 -12
  158. package/src/make-client-session.ts +2 -2
  159. package/src/materializer-helper.ts +45 -19
  160. package/src/rematerialize-from-eventlog.ts +12 -4
  161. package/src/schema/EventDef.ts +16 -4
  162. package/src/schema/EventSequenceNumber.test.ts +120 -3
  163. package/src/schema/EventSequenceNumber.ts +95 -23
  164. package/src/schema/LiveStoreEvent.ts +49 -8
  165. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +2 -2
  166. package/src/schema/state/sqlite/db-schema/hash.ts +3 -3
  167. package/src/schema/state/sqlite/mod.ts +1 -1
  168. package/src/schema/state/sqlite/query-builder/api.ts +39 -9
  169. package/src/schema/state/sqlite/query-builder/impl.test.ts +60 -20
  170. package/src/schema/state/sqlite/query-builder/impl.ts +15 -12
  171. package/src/schema/state/sqlite/system-tables.ts +9 -22
  172. package/src/schema/state/sqlite/table-def.ts +2 -2
  173. package/src/schema-management/migrations.ts +3 -1
  174. package/src/sql-queries/sql-queries.ts +2 -0
  175. package/src/sqlite-db-helper.ts +41 -0
  176. package/src/sqlite-types.ts +76 -0
  177. package/src/sync/ClientSessionSyncProcessor.ts +51 -28
  178. package/src/sync/next/graphology.ts +0 -6
  179. package/src/sync/next/rebase-events.ts +1 -0
  180. package/src/sync/next/test/compact-events.test.ts +1 -1
  181. package/src/sync/next/test/event-fixtures.ts +12 -3
  182. package/src/sync/sync.ts +3 -0
  183. package/src/sync/syncstate.test.ts +17 -17
  184. package/src/sync/syncstate.ts +31 -10
  185. package/src/version.ts +1 -1
@@ -1,30 +1,22 @@
1
- import type { Cause, Queue, Scope, SubscriptionRef, WebChannel } from '@livestore/utils/effect'
2
- import { Effect, Schema, Stream } from '@livestore/utils/effect'
3
-
1
+ import {
2
+ type Cause,
3
+ type Effect,
4
+ type Queue,
5
+ Schema,
6
+ type Scope,
7
+ type SubscriptionRef,
8
+ type WebChannel,
9
+ } from '@livestore/utils/effect'
10
+
11
+ import type { ClientSessionLeaderThreadProxy } from './ClientSessionLeaderThreadProxy.js'
4
12
  import type * as Devtools from './devtools/mod.js'
5
- import * as EventSequenceNumber from './schema/EventSequenceNumber.js'
6
- import type { LiveStoreEvent, LiveStoreSchema } from './schema/mod.js'
7
- import type { LeaderAheadError } from './sync/sync.js'
8
- import type { PayloadUpstream, SyncState } from './sync/syncstate.js'
9
- import type { PreparedBindValues } from './util.js'
10
-
11
- export interface PreparedStatement {
12
- execute(bindValues: PreparedBindValues | undefined, options?: { onRowsChanged?: (rowsChanged: number) => void }): void
13
- select<T>(bindValues: PreparedBindValues | undefined): ReadonlyArray<T>
14
- finalize(): void
15
- sql: string
16
- }
17
-
18
- export type SqliteDbSession = {
19
- changeset: () => Uint8Array | undefined
20
- finish: () => void
21
- }
22
-
23
- export type SqliteDbChangeset = {
24
- // TODO combining changesets (requires changes in the SQLite WASM binding)
25
- invert: () => SqliteDbChangeset
26
- apply: () => void
27
- }
13
+ import type { IntentionalShutdownCause, SyncError, UnexpectedError } from './errors.js'
14
+ import type { LiveStoreSchema } from './schema/mod.js'
15
+ import type { SqliteDb } from './sqlite-types.js'
16
+ export * as ClientSessionLeaderThreadProxy from './ClientSessionLeaderThreadProxy.js'
17
+ export * from './defs.js'
18
+ export * from './errors.js'
19
+ export * from './sqlite-types.js'
28
20
 
29
21
  export interface ClientSession {
30
22
  /** SQLite database with synchronous API running in the same thread (usually in-memory) */
@@ -34,87 +26,13 @@ export interface ClientSession {
34
26
  sessionId: string
35
27
  /** Status info whether current session is leader or not */
36
28
  lockStatus: SubscriptionRef.SubscriptionRef<LockStatus>
37
- shutdown: (cause: Cause.Cause<UnexpectedError | IntentionalShutdownCause>) => Effect.Effect<void>
29
+ shutdown: (cause: Cause.Cause<UnexpectedError | IntentionalShutdownCause | SyncError>) => Effect.Effect<void>
38
30
  /** A proxy API to communicate with the leader thread */
39
31
  leaderThread: ClientSessionLeaderThreadProxy
40
32
  /** A unique identifier for the current instance of the client session. Used for debugging purposes. */
41
33
  debugInstanceId: string
42
34
  }
43
35
 
44
- export const LeaderPullCursor = Schema.Struct({
45
- mergeCounter: Schema.Number,
46
- eventNum: EventSequenceNumber.EventSequenceNumber,
47
- })
48
-
49
- export type LeaderPullCursor = typeof LeaderPullCursor.Type
50
-
51
- export interface ClientSessionLeaderThreadProxy {
52
- events: {
53
- pull: (args: {
54
- cursor: LeaderPullCursor
55
- }) => Stream.Stream<{ payload: typeof PayloadUpstream.Type; mergeCounter: number }, UnexpectedError>
56
- /** It's important that a client session doesn't call `push` concurrently. */
57
- push(batch: ReadonlyArray<LiveStoreEvent.AnyEncoded>): Effect.Effect<void, UnexpectedError | LeaderAheadError>
58
- }
59
- /** The initial state after the leader thread has booted */
60
- readonly initialState: {
61
- /** The latest event sequence number during boot. Used for the client session to resume syncing. */
62
- readonly leaderHead: EventSequenceNumber.EventSequenceNumber
63
- /** The migrations report from the leader thread */
64
- readonly migrationsReport: MigrationsReport
65
- }
66
- export: Effect.Effect<Uint8Array, UnexpectedError>
67
- getEventlogData: Effect.Effect<Uint8Array, UnexpectedError>
68
- getSyncState: Effect.Effect<SyncState, UnexpectedError>
69
- /** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
70
- sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnexpectedError>
71
- }
72
-
73
- /**
74
- * Common interface for SQLite databases used by LiveStore to facilitate a consistent API across different platforms.
75
- * Always assumes a synchronous SQLite build with the `bytecode` and `session` extensions enabled.
76
- * Can be either in-memory or persisted to disk.
77
- */
78
- export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
79
- _tag: 'SqliteDb'
80
- metadata: TMetadata
81
- prepare(queryStr: string): PreparedStatement
82
- execute(
83
- queryStr: string,
84
- bindValues?: PreparedBindValues | undefined,
85
- options?: { onRowsChanged?: (rowsChanged: number) => void },
86
- ): void
87
- select<T>(queryStr: string, bindValues?: PreparedBindValues | undefined): ReadonlyArray<T>
88
- export(): Uint8Array
89
- import: (data: Uint8Array | SqliteDb<TReq>) => void
90
- close(): void
91
- destroy(): void
92
- session(): SqliteDbSession
93
- makeChangeset: (data: Uint8Array) => SqliteDbChangeset
94
- }
95
-
96
- // TODO refactor this helper type. It's quite cumbersome to use and should be revisited.
97
- export type MakeSqliteDb<
98
- TReq = { dbPointer: number; persistenceInfo: PersistenceInfo },
99
- TInput_ extends { _tag: string } = { _tag: string },
100
- TMetadata_ extends TReq = TReq,
101
- R = never,
102
- > = <
103
- TInput extends TInput_,
104
- TMetadata extends TMetadata_ & { _tag: TInput['_tag'] } = TMetadata_ & { _tag: TInput['_tag'] },
105
- >(
106
- input: TInput,
107
- ) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnexpectedError, R>
108
-
109
- export const PersistenceInfo = Schema.Struct(
110
- {
111
- fileName: Schema.String,
112
- },
113
- { key: Schema.String, value: Schema.Any },
114
- ).annotations({ title: 'LiveStore.PersistenceInfo' })
115
-
116
- export type PersistenceInfo<With extends {} = {}> = typeof PersistenceInfo.Type & With
117
-
118
36
  export type ResetMode = 'all-data' | 'only-app-db'
119
37
 
120
38
  export const BootStateProgress = Schema.Struct({
@@ -159,50 +77,6 @@ export type SessionIdSymbol = typeof SessionIdSymbol
159
77
 
160
78
  export type LockStatus = 'has-lock' | 'no-lock'
161
79
 
162
- export class UnexpectedError extends Schema.TaggedError<UnexpectedError>()('LiveStore.UnexpectedError', {
163
- cause: Schema.Defect,
164
- note: Schema.optional(Schema.String),
165
- payload: Schema.optional(Schema.Any),
166
- }) {
167
- static mapToUnexpectedError = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
168
- effect.pipe(
169
- Effect.mapError((cause) => (Schema.is(UnexpectedError)(cause) ? cause : new UnexpectedError({ cause }))),
170
- Effect.catchAllDefect((cause) => new UnexpectedError({ cause })),
171
- )
172
-
173
- static mapToUnexpectedErrorStream = <A, E, R>(stream: Stream.Stream<A, E, R>) =>
174
- stream.pipe(
175
- Stream.mapError((cause) => (Schema.is(UnexpectedError)(cause) ? cause : new UnexpectedError({ cause }))),
176
- )
177
- }
178
-
179
- export class IntentionalShutdownCause extends Schema.TaggedError<IntentionalShutdownCause>()(
180
- 'LiveStore.IntentionalShutdownCause',
181
- {
182
- reason: Schema.Literal('devtools-reset', 'devtools-import', 'adapter-reset', 'manual'),
183
- },
184
- ) {}
185
-
186
- export class StoreInterrupted extends Schema.TaggedError<StoreInterrupted>()('LiveStore.StoreInterrupted', {
187
- reason: Schema.String,
188
- }) {}
189
-
190
- export class SqliteError extends Schema.TaggedError<SqliteError>()('LiveStore.SqliteError', {
191
- query: Schema.optional(
192
- Schema.Struct({
193
- sql: Schema.String,
194
- bindValues: Schema.Union(Schema.Record({ key: Schema.String, value: Schema.Any }), Schema.Array(Schema.Any)),
195
- }),
196
- ),
197
- /** The SQLite result code */
198
- // code: Schema.optional(Schema.Number),
199
- // Added string support for Expo SQLite (we should refactor this to have a unified error type)
200
- code: Schema.optional(Schema.Union(Schema.Number, Schema.String)),
201
- /** The original SQLite3 error */
202
- cause: Schema.Defect,
203
- note: Schema.optional(Schema.String),
204
- }) {}
205
-
206
80
  // TODO possibly allow a combination of these options
207
81
  // TODO allow a way to stream the migration progress back to the app
208
82
  export type MigrationOptions =
@@ -253,19 +127,3 @@ export interface AdapterArgs {
253
127
  */
254
128
  syncPayload: Schema.JsonValue | undefined
255
129
  }
256
-
257
- export const MigrationsReportEntry = Schema.Struct({
258
- tableName: Schema.String,
259
- hashes: Schema.Struct({
260
- expected: Schema.Number,
261
- actual: Schema.optional(Schema.Number),
262
- }),
263
- })
264
-
265
- export const MigrationsReport = Schema.Struct({
266
- migrations: Schema.Array(MigrationsReportEntry),
267
- })
268
-
269
- export type MigrationsReport = typeof MigrationsReport.Type
270
-
271
- export type MigrationsReportEntry = typeof MigrationsReportEntry.Type
package/src/defs.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { Schema } from '@livestore/utils/effect'
2
+
3
+ export const MigrationsReportEntry = Schema.Struct({
4
+ tableName: Schema.String,
5
+ hashes: Schema.Struct({
6
+ expected: Schema.Number,
7
+ actual: Schema.optional(Schema.Number),
8
+ }),
9
+ })
10
+
11
+ export const MigrationsReport = Schema.Struct({
12
+ migrations: Schema.Array(MigrationsReportEntry),
13
+ })
14
+
15
+ export type MigrationsReport = typeof MigrationsReport.Type
16
+
17
+ export type MigrationsReportEntry = typeof MigrationsReportEntry.Type
package/src/errors.ts ADDED
@@ -0,0 +1,49 @@
1
+ import { Effect, Schema, Stream } from '@livestore/utils/effect'
2
+
3
+ export class UnexpectedError extends Schema.TaggedError<UnexpectedError>()('LiveStore.UnexpectedError', {
4
+ cause: Schema.Defect,
5
+ note: Schema.optional(Schema.String),
6
+ payload: Schema.optional(Schema.Any),
7
+ }) {
8
+ static mapToUnexpectedError = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
9
+ effect.pipe(
10
+ Effect.mapError((cause) => (Schema.is(UnexpectedError)(cause) ? cause : new UnexpectedError({ cause }))),
11
+ Effect.catchAllDefect((cause) => new UnexpectedError({ cause })),
12
+ )
13
+
14
+ static mapToUnexpectedErrorStream = <A, E, R>(stream: Stream.Stream<A, E, R>) =>
15
+ stream.pipe(
16
+ Stream.mapError((cause) => (Schema.is(UnexpectedError)(cause) ? cause : new UnexpectedError({ cause }))),
17
+ )
18
+ }
19
+
20
+ export class SyncError extends Schema.TaggedError<SyncError>()('LiveStore.SyncError', {
21
+ cause: Schema.Defect,
22
+ }) {}
23
+
24
+ export class IntentionalShutdownCause extends Schema.TaggedError<IntentionalShutdownCause>()(
25
+ 'LiveStore.IntentionalShutdownCause',
26
+ {
27
+ reason: Schema.Literal('devtools-reset', 'devtools-import', 'adapter-reset', 'manual'),
28
+ },
29
+ ) {}
30
+
31
+ export class StoreInterrupted extends Schema.TaggedError<StoreInterrupted>()('LiveStore.StoreInterrupted', {
32
+ reason: Schema.String,
33
+ }) {}
34
+
35
+ export class SqliteError extends Schema.TaggedError<SqliteError>()('LiveStore.SqliteError', {
36
+ query: Schema.optional(
37
+ Schema.Struct({
38
+ sql: Schema.String,
39
+ bindValues: Schema.Union(Schema.Record({ key: Schema.String, value: Schema.Any }), Schema.Array(Schema.Any)),
40
+ }),
41
+ ),
42
+ /** The SQLite result code */
43
+ // code: Schema.optional(Schema.Number),
44
+ // Added string support for Expo SQLite (we should refactor this to have a unified error type)
45
+ code: Schema.optional(Schema.Union(Schema.Number, Schema.String)),
46
+ /** The original SQLite3 error */
47
+ cause: Schema.Defect,
48
+ note: Schema.optional(Schema.String),
49
+ }) {}
package/src/index.ts CHANGED
@@ -13,3 +13,4 @@ export * from './schema/state/sqlite/query-builder/mod.js'
13
13
  export * as SyncState from './sync/syncstate.js'
14
14
  export * from './otel.js'
15
15
  export * from './make-client-session.js'
16
+ export * as SqliteDbHelper from './sqlite-db-helper.js'