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