@livestore/common 0.3.0-dev.27 → 0.3.0-dev.29

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 (277) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +83 -221
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +33 -11
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +22 -15
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +15 -2
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts +1 -1
  11. package/dist/bounded-collections.d.ts.map +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  16. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  17. package/dist/devtools/devtools-messages-leader.d.ts +45 -45
  18. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  19. package/dist/devtools/devtools-messages-leader.js +11 -11
  20. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  21. package/dist/index.d.ts +2 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -5
  24. package/dist/index.js.map +1 -1
  25. package/dist/leader-thread/LeaderSyncProcessor.d.ts +25 -12
  26. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  27. package/dist/leader-thread/LeaderSyncProcessor.js +125 -89
  28. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  29. package/dist/leader-thread/{apply-mutation.d.ts → apply-event.d.ts} +7 -7
  30. package/dist/leader-thread/apply-event.d.ts.map +1 -0
  31. package/dist/leader-thread/apply-event.js +103 -0
  32. package/dist/leader-thread/apply-event.js.map +1 -0
  33. package/dist/leader-thread/eventlog.d.ts +27 -0
  34. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  35. package/dist/leader-thread/eventlog.js +123 -0
  36. package/dist/leader-thread/eventlog.js.map +1 -0
  37. package/dist/leader-thread/leader-worker-devtools.js +18 -18
  38. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  39. package/dist/leader-thread/make-leader-thread-layer.d.ts +16 -4
  40. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  41. package/dist/leader-thread/make-leader-thread-layer.js +23 -16
  42. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  43. package/dist/leader-thread/mod.d.ts +1 -1
  44. package/dist/leader-thread/mod.d.ts.map +1 -1
  45. package/dist/leader-thread/mod.js +1 -1
  46. package/dist/leader-thread/mod.js.map +1 -1
  47. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  48. package/dist/leader-thread/recreate-db.js +6 -8
  49. package/dist/leader-thread/recreate-db.js.map +1 -1
  50. package/dist/leader-thread/types.d.ts +11 -11
  51. package/dist/leader-thread/types.d.ts.map +1 -1
  52. package/dist/materializer-helper.d.ts +23 -0
  53. package/dist/materializer-helper.d.ts.map +1 -0
  54. package/dist/materializer-helper.js +70 -0
  55. package/dist/materializer-helper.js.map +1 -0
  56. package/dist/query-builder/api.d.ts +58 -53
  57. package/dist/query-builder/api.d.ts.map +1 -1
  58. package/dist/query-builder/api.js +3 -5
  59. package/dist/query-builder/api.js.map +1 -1
  60. package/dist/query-builder/astToSql.d.ts.map +1 -1
  61. package/dist/query-builder/astToSql.js +59 -37
  62. package/dist/query-builder/astToSql.js.map +1 -1
  63. package/dist/query-builder/impl.d.ts +2 -3
  64. package/dist/query-builder/impl.d.ts.map +1 -1
  65. package/dist/query-builder/impl.js +48 -46
  66. package/dist/query-builder/impl.js.map +1 -1
  67. package/dist/query-builder/impl.test.d.ts +86 -1
  68. package/dist/query-builder/impl.test.d.ts.map +1 -1
  69. package/dist/query-builder/impl.test.js +244 -36
  70. package/dist/query-builder/impl.test.js.map +1 -1
  71. package/dist/rehydrate-from-eventlog.d.ts +14 -0
  72. package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
  73. package/dist/{rehydrate-from-mutationlog.js → rehydrate-from-eventlog.js} +25 -26
  74. package/dist/rehydrate-from-eventlog.js.map +1 -0
  75. package/dist/schema/EventDef.d.ts +136 -0
  76. package/dist/schema/EventDef.d.ts.map +1 -0
  77. package/dist/schema/EventDef.js +58 -0
  78. package/dist/schema/EventDef.js.map +1 -0
  79. package/dist/schema/EventId.d.ts +2 -2
  80. package/dist/schema/EventId.d.ts.map +1 -1
  81. package/dist/schema/EventId.js +8 -2
  82. package/dist/schema/EventId.js.map +1 -1
  83. package/dist/schema/{MutationEvent.d.ts → LiveStoreEvent.d.ts} +56 -56
  84. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  85. package/dist/schema/{MutationEvent.js → LiveStoreEvent.js} +25 -25
  86. package/dist/schema/LiveStoreEvent.js.map +1 -0
  87. package/dist/schema/client-document-def.d.ts +223 -0
  88. package/dist/schema/client-document-def.d.ts.map +1 -0
  89. package/dist/schema/client-document-def.js +170 -0
  90. package/dist/schema/client-document-def.js.map +1 -0
  91. package/dist/schema/client-document-def.test.d.ts +2 -0
  92. package/dist/schema/client-document-def.test.d.ts.map +1 -0
  93. package/dist/schema/client-document-def.test.js +201 -0
  94. package/dist/schema/client-document-def.test.js.map +1 -0
  95. package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -1
  96. package/dist/schema/events.d.ts +2 -0
  97. package/dist/schema/events.d.ts.map +1 -0
  98. package/dist/schema/events.js +2 -0
  99. package/dist/schema/events.js.map +1 -0
  100. package/dist/schema/mod.d.ts +4 -3
  101. package/dist/schema/mod.d.ts.map +1 -1
  102. package/dist/schema/mod.js +4 -3
  103. package/dist/schema/mod.js.map +1 -1
  104. package/dist/schema/schema.d.ts +27 -23
  105. package/dist/schema/schema.d.ts.map +1 -1
  106. package/dist/schema/schema.js +45 -43
  107. package/dist/schema/schema.js.map +1 -1
  108. package/dist/schema/sqlite-state.d.ts +12 -0
  109. package/dist/schema/sqlite-state.d.ts.map +1 -0
  110. package/dist/schema/sqlite-state.js +36 -0
  111. package/dist/schema/sqlite-state.js.map +1 -0
  112. package/dist/schema/system-tables.d.ts +67 -98
  113. package/dist/schema/system-tables.d.ts.map +1 -1
  114. package/dist/schema/system-tables.js +62 -48
  115. package/dist/schema/system-tables.js.map +1 -1
  116. package/dist/schema/table-def.d.ts +26 -96
  117. package/dist/schema/table-def.d.ts.map +1 -1
  118. package/dist/schema/table-def.js +16 -64
  119. package/dist/schema/table-def.js.map +1 -1
  120. package/dist/schema/view.d.ts +3 -0
  121. package/dist/schema/view.d.ts.map +1 -0
  122. package/dist/schema/view.js +3 -0
  123. package/dist/schema/view.js.map +1 -0
  124. package/dist/schema-management/common.d.ts +4 -4
  125. package/dist/schema-management/common.d.ts.map +1 -1
  126. package/dist/schema-management/migrations.d.ts.map +1 -1
  127. package/dist/schema-management/migrations.js +6 -6
  128. package/dist/schema-management/migrations.js.map +1 -1
  129. package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
  130. package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
  131. package/dist/schema-management/validate-mutation-defs.js +17 -17
  132. package/dist/schema-management/validate-mutation-defs.js.map +1 -1
  133. package/dist/sync/ClientSessionSyncProcessor.d.ts +7 -7
  134. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  135. package/dist/sync/ClientSessionSyncProcessor.js +31 -30
  136. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  137. package/dist/sync/next/facts.d.ts +19 -19
  138. package/dist/sync/next/facts.d.ts.map +1 -1
  139. package/dist/sync/next/facts.js +2 -2
  140. package/dist/sync/next/facts.js.map +1 -1
  141. package/dist/sync/next/history-dag-common.d.ts +3 -3
  142. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  143. package/dist/sync/next/history-dag-common.js +1 -1
  144. package/dist/sync/next/history-dag-common.js.map +1 -1
  145. package/dist/sync/next/history-dag.js +1 -1
  146. package/dist/sync/next/history-dag.js.map +1 -1
  147. package/dist/sync/next/rebase-events.d.ts +7 -7
  148. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  149. package/dist/sync/next/rebase-events.js +5 -5
  150. package/dist/sync/next/rebase-events.js.map +1 -1
  151. package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
  152. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  153. package/dist/sync/next/test/compact-events.test.js +71 -71
  154. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  155. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +29 -29
  156. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  157. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +60 -25
  158. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  159. package/dist/sync/next/test/mod.d.ts +1 -1
  160. package/dist/sync/next/test/mod.d.ts.map +1 -1
  161. package/dist/sync/next/test/mod.js +1 -1
  162. package/dist/sync/next/test/mod.js.map +1 -1
  163. package/dist/sync/sync.d.ts +3 -3
  164. package/dist/sync/sync.d.ts.map +1 -1
  165. package/dist/sync/syncstate.d.ts +32 -32
  166. package/dist/sync/syncstate.d.ts.map +1 -1
  167. package/dist/sync/syncstate.js +31 -25
  168. package/dist/sync/syncstate.js.map +1 -1
  169. package/dist/sync/syncstate.test.js +165 -175
  170. package/dist/sync/syncstate.test.js.map +1 -1
  171. package/dist/sync/validate-push-payload.d.ts +2 -2
  172. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  173. package/dist/sync/validate-push-payload.js.map +1 -1
  174. package/dist/version.d.ts +1 -1
  175. package/dist/version.js +1 -1
  176. package/package.json +3 -3
  177. package/src/__tests__/fixture.ts +36 -15
  178. package/src/adapter-types.ts +23 -16
  179. package/src/debug-info.ts +1 -0
  180. package/src/devtools/devtools-messages-leader.ts +13 -13
  181. package/src/index.ts +2 -5
  182. package/src/leader-thread/LeaderSyncProcessor.ts +183 -122
  183. package/src/leader-thread/{apply-mutation.ts → apply-event.ts} +50 -74
  184. package/src/leader-thread/eventlog.ts +199 -0
  185. package/src/leader-thread/leader-worker-devtools.ts +18 -18
  186. package/src/leader-thread/make-leader-thread-layer.ts +51 -29
  187. package/src/leader-thread/mod.ts +1 -1
  188. package/src/leader-thread/recreate-db.ts +6 -9
  189. package/src/leader-thread/types.ts +12 -12
  190. package/src/materializer-helper.ts +110 -0
  191. package/src/query-builder/api.ts +79 -105
  192. package/src/query-builder/astToSql.ts +68 -39
  193. package/src/query-builder/impl.test.ts +264 -42
  194. package/src/query-builder/impl.ts +72 -56
  195. package/src/{rehydrate-from-mutationlog.ts → rehydrate-from-eventlog.ts} +33 -40
  196. package/src/schema/EventDef.ts +216 -0
  197. package/src/schema/EventId.ts +11 -3
  198. package/src/schema/{MutationEvent.ts → LiveStoreEvent.ts} +68 -69
  199. package/src/schema/client-document-def.test.ts +239 -0
  200. package/src/schema/client-document-def.ts +444 -0
  201. package/src/schema/db-schema/dsl/mod.ts +0 -1
  202. package/src/schema/events.ts +1 -0
  203. package/src/schema/mod.ts +4 -3
  204. package/src/schema/schema.ts +79 -69
  205. package/src/schema/sqlite-state.ts +62 -0
  206. package/src/schema/system-tables.ts +42 -53
  207. package/src/schema/table-def.ts +53 -209
  208. package/src/schema/view.ts +2 -0
  209. package/src/schema-management/common.ts +4 -4
  210. package/src/schema-management/migrations.ts +8 -9
  211. package/src/schema-management/validate-mutation-defs.ts +22 -24
  212. package/src/sync/ClientSessionSyncProcessor.ts +37 -36
  213. package/src/sync/next/facts.ts +31 -32
  214. package/src/sync/next/history-dag-common.ts +4 -4
  215. package/src/sync/next/history-dag.ts +1 -1
  216. package/src/sync/next/rebase-events.ts +13 -13
  217. package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
  218. package/src/sync/next/test/compact-events.test.ts +73 -73
  219. package/src/sync/next/test/event-fixtures.ts +219 -0
  220. package/src/sync/next/test/mod.ts +1 -1
  221. package/src/sync/sync.ts +3 -3
  222. package/src/sync/syncstate.test.ts +168 -179
  223. package/src/sync/syncstate.ts +48 -38
  224. package/src/sync/validate-push-payload.ts +2 -2
  225. package/src/version.ts +1 -1
  226. package/tmp/pack.tgz +0 -0
  227. package/tsconfig.json +1 -0
  228. package/dist/derived-mutations.d.ts +0 -109
  229. package/dist/derived-mutations.d.ts.map +0 -1
  230. package/dist/derived-mutations.js +0 -54
  231. package/dist/derived-mutations.js.map +0 -1
  232. package/dist/derived-mutations.test.d.ts +0 -2
  233. package/dist/derived-mutations.test.d.ts.map +0 -1
  234. package/dist/derived-mutations.test.js +0 -93
  235. package/dist/derived-mutations.test.js.map +0 -1
  236. package/dist/init-singleton-tables.d.ts +0 -4
  237. package/dist/init-singleton-tables.d.ts.map +0 -1
  238. package/dist/init-singleton-tables.js +0 -16
  239. package/dist/init-singleton-tables.js.map +0 -1
  240. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  241. package/dist/leader-thread/apply-mutation.js +0 -122
  242. package/dist/leader-thread/apply-mutation.js.map +0 -1
  243. package/dist/leader-thread/mutationlog.d.ts +0 -27
  244. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  245. package/dist/leader-thread/mutationlog.js +0 -124
  246. package/dist/leader-thread/mutationlog.js.map +0 -1
  247. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  248. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  249. package/dist/leader-thread/pull-queue-set.js +0 -38
  250. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  251. package/dist/mutation.d.ts +0 -20
  252. package/dist/mutation.d.ts.map +0 -1
  253. package/dist/mutation.js +0 -68
  254. package/dist/mutation.js.map +0 -1
  255. package/dist/query-info.d.ts +0 -41
  256. package/dist/query-info.d.ts.map +0 -1
  257. package/dist/query-info.js +0 -7
  258. package/dist/query-info.js.map +0 -1
  259. package/dist/rehydrate-from-mutationlog.d.ts +0 -15
  260. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  261. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  262. package/dist/schema/MutationEvent.d.ts.map +0 -1
  263. package/dist/schema/MutationEvent.js.map +0 -1
  264. package/dist/schema/mutations.d.ts +0 -115
  265. package/dist/schema/mutations.d.ts.map +0 -1
  266. package/dist/schema/mutations.js +0 -42
  267. package/dist/schema/mutations.js.map +0 -1
  268. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  269. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  270. package/src/derived-mutations.test.ts +0 -101
  271. package/src/derived-mutations.ts +0 -170
  272. package/src/init-singleton-tables.ts +0 -24
  273. package/src/leader-thread/mutationlog.ts +0 -202
  274. package/src/mutation.ts +0 -108
  275. package/src/query-info.ts +0 -83
  276. package/src/schema/mutations.ts +0 -193
  277. package/src/sync/next/test/mutation-fixtures.ts +0 -228
@@ -1,9 +1,9 @@
1
- import { casesHandled, shouldNeverHappen } from '@livestore/utils'
1
+ import { casesHandled, LS_DEV, shouldNeverHappen } from '@livestore/utils'
2
2
  import { Match, ReadonlyArray, Schema } from '@livestore/utils/effect'
3
3
 
4
4
  import { UnexpectedError } from '../adapter-types.js'
5
5
  import * as EventId from '../schema/EventId.js'
6
- import * as MutationEvent from '../schema/MutationEvent.js'
6
+ import * as LiveStoreEvent from '../schema/LiveStoreEvent.js'
7
7
 
8
8
  /**
9
9
  * SyncState represents the current sync state of a sync node relative to an upstream node.
@@ -43,7 +43,7 @@ import * as MutationEvent from '../schema/MutationEvent.js'
43
43
  * handling cases such as upstream rebase, advance and local push.
44
44
  */
45
45
  export class SyncState extends Schema.Class<SyncState>('SyncState')({
46
- pending: Schema.Array(MutationEvent.EncodedWithMeta),
46
+ pending: Schema.Array(LiveStoreEvent.EncodedWithMeta),
47
47
  /** What this node expects the next upstream node to have as its own local head */
48
48
  upstreamHead: EventId.EventId,
49
49
  /** Equivalent to `pending.at(-1)?.id` if there are pending events */
@@ -61,17 +61,17 @@ export class SyncState extends Schema.Class<SyncState>('SyncState')({
61
61
  */
62
62
  export class PayloadUpstreamRebase extends Schema.TaggedStruct('upstream-rebase', {
63
63
  /** Events which need to be rolled back */
64
- rollbackEvents: Schema.Array(MutationEvent.EncodedWithMeta),
64
+ rollbackEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
65
65
  /** Events which need to be applied after the rollback (already rebased by the upstream node) */
66
- newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
66
+ newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
67
67
  }) {}
68
68
 
69
69
  export class PayloadUpstreamAdvance extends Schema.TaggedStruct('upstream-advance', {
70
- newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
70
+ newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
71
71
  }) {}
72
72
 
73
73
  export class PayloadLocalPush extends Schema.TaggedStruct('local-push', {
74
- newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
74
+ newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
75
75
  }) {}
76
76
 
77
77
  export class Payload extends Schema.Union(PayloadUpstreamRebase, PayloadUpstreamAdvance, PayloadLocalPush) {}
@@ -110,9 +110,9 @@ export class MergeContext extends Schema.Class<MergeContext>('MergeContext')({
110
110
  export class MergeResultAdvance extends Schema.Class<MergeResultAdvance>('MergeResultAdvance')({
111
111
  _tag: Schema.Literal('advance'),
112
112
  newSyncState: SyncState,
113
- newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
113
+ newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
114
114
  /** Events which were previously pending but are now confirmed */
115
- confirmedEvents: Schema.Array(MutationEvent.EncodedWithMeta),
115
+ confirmedEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
116
116
  mergeContext: MergeContext,
117
117
  }) {
118
118
  toJSON = (): any => {
@@ -129,9 +129,9 @@ export class MergeResultAdvance extends Schema.Class<MergeResultAdvance>('MergeR
129
129
  export class MergeResultRebase extends Schema.Class<MergeResultRebase>('MergeResultRebase')({
130
130
  _tag: Schema.Literal('rebase'),
131
131
  newSyncState: SyncState,
132
- newEvents: Schema.Array(MutationEvent.EncodedWithMeta),
132
+ newEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
133
133
  /** Events which need to be rolled back */
134
- rollbackEvents: Schema.Array(MutationEvent.EncodedWithMeta),
134
+ rollbackEvents: Schema.Array(LiveStoreEvent.EncodedWithMeta),
135
135
  mergeContext: MergeContext,
136
136
  }) {
137
137
  toJSON = (): any => {
@@ -172,11 +172,16 @@ export class MergeResult extends Schema.Union(
172
172
  MergeResultUnexpectedError,
173
173
  ) {}
174
174
 
175
- const unexpectedError = (cause: unknown): MergeResultUnexpectedError =>
176
- MergeResultUnexpectedError.make({
175
+ const unexpectedError = (cause: unknown): MergeResultUnexpectedError => {
176
+ if (LS_DEV) {
177
+ debugger
178
+ }
179
+
180
+ return MergeResultUnexpectedError.make({
177
181
  _tag: 'unexpected-error',
178
182
  cause: new UnexpectedError({ cause }),
179
183
  })
184
+ }
180
185
 
181
186
  // TODO Idea: call merge recursively through hierarchy levels
182
187
  /*
@@ -194,12 +199,13 @@ export const merge = ({
194
199
  }: {
195
200
  syncState: SyncState
196
201
  payload: typeof Payload.Type
197
- isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean
198
- isEqualEvent: (a: MutationEvent.EncodedWithMeta, b: MutationEvent.EncodedWithMeta) => boolean
202
+ isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean
203
+ isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean
199
204
  /** This is used in the leader which should ignore client events when receiving an upstream-advance payload */
200
205
  ignoreClientEvents?: boolean
201
206
  }): typeof MergeResult.Type => {
202
207
  validateSyncState(syncState)
208
+ validatePayload(payload)
203
209
 
204
210
  const mergeContext = MergeContext.make({ payload, syncState })
205
211
 
@@ -269,17 +275,6 @@ export const merge = ({
269
275
  )
270
276
  }
271
277
 
272
- // Validate that the parent id of the first incoming event is known
273
- const knownEventGlobalIds = [...syncState.pending].flatMap((e) => [e.id.global, e.parentId.global])
274
- knownEventGlobalIds.push(syncState.upstreamHead.global)
275
- const firstNewEvent = payload.newEvents[0]!
276
- const hasUnknownParentId = knownEventGlobalIds.includes(firstNewEvent.parentId.global) === false
277
- if (hasUnknownParentId) {
278
- return unexpectedError(
279
- `Incoming events must have a known parent id. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`,
280
- )
281
- }
282
-
283
278
  const newUpstreamHead = payload.newEvents.at(-1)!.id
284
279
 
285
280
  const divergentPendingIndex = findDivergencePoint({
@@ -423,10 +418,10 @@ export const findDivergencePoint = ({
423
418
  isClientEvent,
424
419
  ignoreClientEvents,
425
420
  }: {
426
- existingEvents: ReadonlyArray<MutationEvent.EncodedWithMeta>
427
- incomingEvents: ReadonlyArray<MutationEvent.EncodedWithMeta>
428
- isEqualEvent: (a: MutationEvent.EncodedWithMeta, b: MutationEvent.EncodedWithMeta) => boolean
429
- isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean
421
+ existingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>
422
+ incomingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>
423
+ isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean
424
+ isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean
430
425
  ignoreClientEvents: boolean
431
426
  }): number => {
432
427
  if (ignoreClientEvents) {
@@ -458,10 +453,10 @@ const rebaseEvents = ({
458
453
  baseEventId,
459
454
  isClientEvent,
460
455
  }: {
461
- events: ReadonlyArray<MutationEvent.EncodedWithMeta>
456
+ events: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>
462
457
  baseEventId: EventId.EventId
463
- isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean
464
- }): ReadonlyArray<MutationEvent.EncodedWithMeta> => {
458
+ isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean
459
+ }): ReadonlyArray<LiveStoreEvent.EncodedWithMeta> => {
465
460
  let prevEventId = baseEventId
466
461
  return events.map((event) => {
467
462
  const isLocal = isClientEvent(event)
@@ -480,17 +475,30 @@ const rebaseEvents = ({
480
475
  */
481
476
  const _flattenMergeResults = (_updateResults: ReadonlyArray<MergeResult>) => {}
482
477
 
478
+ const validatePayload = (payload: typeof Payload.Type) => {
479
+ for (let i = 1; i < payload.newEvents.length; i++) {
480
+ if (EventId.isGreaterThanOrEqual(payload.newEvents[i - 1]!.id, payload.newEvents[i]!.id)) {
481
+ return unexpectedError(
482
+ `Events must be ordered in monotonically ascending order by eventId. Received: [${payload.newEvents.map((e) => EventId.toString(e.id)).join(', ')}]`,
483
+ )
484
+ }
485
+ }
486
+ }
487
+
483
488
  const validateSyncState = (syncState: SyncState) => {
484
489
  for (let i = 0; i < syncState.pending.length; i++) {
485
490
  const event = syncState.pending[i]!
486
491
  const nextEvent = syncState.pending[i + 1]
487
492
  if (nextEvent === undefined) break // Reached end of chain
488
493
 
489
- if (EventId.isGreaterThan(event.id, nextEvent.id)) {
490
- shouldNeverHappen('Events must be sorted in ascending order by eventId', {
491
- event,
492
- nextEvent,
493
- })
494
+ if (EventId.isGreaterThanOrEqual(event.id, nextEvent.id)) {
495
+ shouldNeverHappen(
496
+ `Events must be ordered in monotonically ascending order by eventId. Received: [${syncState.pending.map((e) => EventId.toString(e.id)).join(', ')}]`,
497
+ {
498
+ event,
499
+ nextEvent,
500
+ },
501
+ )
494
502
  }
495
503
 
496
504
  // If the global id has increased, then the client id must be 0
@@ -521,6 +529,8 @@ const validateSyncState = (syncState: SyncState) => {
521
529
  const validateMergeResult = (mergeResult: typeof MergeResult.Type) => {
522
530
  if (mergeResult._tag === 'unexpected-error' || mergeResult._tag === 'reject') return mergeResult
523
531
 
532
+ validateSyncState(mergeResult.newSyncState)
533
+
524
534
  // Ensure local head is always greater than or equal to upstream head
525
535
  if (EventId.isGreaterThan(mergeResult.newSyncState.upstreamHead, mergeResult.newSyncState.localHead)) {
526
536
  shouldNeverHappen('Local head must be greater than or equal to upstream head', {
@@ -1,11 +1,11 @@
1
1
  import { Effect } from '@livestore/utils/effect'
2
2
 
3
- import type { EventId, MutationEvent } from '../schema/mod.js'
3
+ import type { EventId, LiveStoreEvent } from '../schema/mod.js'
4
4
  import { InvalidPushError } from './sync.js'
5
5
 
6
6
  // TODO proper batch validation
7
7
  export const validatePushPayload = (
8
- batch: ReadonlyArray<MutationEvent.AnyEncodedGlobal>,
8
+ batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>,
9
9
  currentEventId: EventId.GlobalEventId,
10
10
  ) =>
11
11
  Effect.gen(function* () {
package/src/version.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // import packageJson from '../package.json' with { type: 'json' }
3
3
  // export const liveStoreVersion = packageJson.version
4
4
 
5
- export const liveStoreVersion = '0.3.0-dev.27' as const
5
+ export const liveStoreVersion = '0.3.0-dev.29' as const
6
6
 
7
7
  /**
8
8
  * This version number is incremented whenever the internal storage format changes in a breaking way.
package/tmp/pack.tgz CHANGED
Binary file
package/tsconfig.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "extends": "../../../tsconfig.base.json",
3
3
  "compilerOptions": {
4
+ "lib": ["ES2023"], // Needed for `Array.toSorted`
4
5
  "outDir": "./dist",
5
6
  "rootDir": "./src",
6
7
  "resolveJsonModule": true,
@@ -1,109 +0,0 @@
1
- import type { GetValForKey } from '@livestore/utils';
2
- import type { SqliteDsl } from './schema/db-schema/mod.js';
3
- import type * as MutationEvent from './schema/MutationEvent.js';
4
- import type * as DbSchema from './schema/table-def.js';
5
- export declare const makeDerivedMutationDefsForTable: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
6
- deriveMutations: {
7
- enabled: true;
8
- };
9
- }>>(table: TTableDef) => {
10
- insert: import("./schema/mutations.js").MutationDef<`_Derived_Create_${string}`, {
11
- readonly [x: string]: any;
12
- } & {
13
- readonly [x: string]: any;
14
- }, {
15
- readonly [x: string]: any;
16
- } & {
17
- readonly [x: string]: any;
18
- }>;
19
- update: import("./schema/mutations.js").MutationDef<`_Derived_Update_${string}`, {
20
- readonly where: {
21
- [x: string]: any;
22
- };
23
- readonly values: {
24
- [x: string]: any;
25
- };
26
- }, {
27
- readonly where: {
28
- [x: string]: any;
29
- };
30
- readonly values: {
31
- [x: string]: any;
32
- };
33
- }>;
34
- delete: import("./schema/mutations.js").MutationDef<`_Derived_Delete_${string}`, {
35
- readonly where: {
36
- [x: string]: any;
37
- };
38
- }, {
39
- readonly where: {
40
- [x: string]: any;
41
- };
42
- }>;
43
- };
44
- export declare const deriveCreateMutationDef: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
45
- deriveMutations: {
46
- enabled: true;
47
- };
48
- }>>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Create_${string}`, {
49
- readonly [x: string]: any;
50
- } & {
51
- readonly [x: string]: any;
52
- }, {
53
- readonly [x: string]: any;
54
- } & {
55
- readonly [x: string]: any;
56
- }>;
57
- export declare const deriveUpdateMutationDef: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
58
- deriveMutations: {
59
- enabled: true;
60
- };
61
- }>>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Update_${string}`, {
62
- readonly where: {
63
- [x: string]: any;
64
- };
65
- readonly values: {
66
- [x: string]: any;
67
- };
68
- }, {
69
- readonly where: {
70
- [x: string]: any;
71
- };
72
- readonly values: {
73
- [x: string]: any;
74
- };
75
- }>;
76
- export declare const deriveDeleteMutationDef: <TTableDef extends DbSchema.TableDefBase<DbSchema.DefaultSqliteTableDefConstrained, DbSchema.TableOptions & {
77
- deriveMutations: {
78
- enabled: true;
79
- };
80
- }>>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Delete_${string}`, {
81
- readonly where: {
82
- [x: string]: any;
83
- };
84
- }, {
85
- readonly where: {
86
- [x: string]: any;
87
- };
88
- }>;
89
- /**
90
- * Convenience helper functions on top of the derived mutation definitions.
91
- */
92
- export type DerivedMutationHelperFns<TColumns extends SqliteDsl.ConstraintColumns, TOptions extends DbSchema.TableOptions> = {
93
- insert: DerivedMutationHelperFns.InsertMutationFn<TColumns, TOptions>;
94
- update: DerivedMutationHelperFns.UpdateMutationFn<TColumns, TOptions>;
95
- delete: DerivedMutationHelperFns.DeleteMutationFn<TColumns, TOptions>;
96
- };
97
- export declare namespace DerivedMutationHelperFns {
98
- export type InsertMutationFn<TColumns extends SqliteDsl.ConstraintColumns, TOptions extends DbSchema.TableOptions> = SqliteDsl.AnyIfConstained<TColumns, UseShortcut<TOptions> extends true ? (values?: GetValForKey<SqliteDsl.FromColumns.InsertRowDecoded<TColumns>, 'value'>) => MutationEvent.PartialAnyDecoded : (values: SqliteDsl.FromColumns.InsertRowDecoded<TColumns>) => MutationEvent.PartialAnyDecoded>;
99
- export type UpdateMutationFn<TColumns extends SqliteDsl.ConstraintColumns, TOptions extends DbSchema.TableOptions> = SqliteDsl.AnyIfConstained<TColumns, UseShortcut<TOptions> extends true ? (values: Partial<GetValForKey<SqliteDsl.FromColumns.RowDecoded<TColumns>, 'value'>>) => MutationEvent.PartialAnyDecoded : (args: {
100
- where: Partial<SqliteDsl.FromColumns.RowDecoded<TColumns>>;
101
- values: Partial<SqliteDsl.FromColumns.RowDecoded<TColumns>>;
102
- }) => MutationEvent.PartialAnyDecoded>;
103
- export type DeleteMutationFn<TColumns extends SqliteDsl.ConstraintColumns, _TOptions extends DbSchema.TableOptions> = (args: {
104
- where: Partial<SqliteDsl.FromColumns.RowDecoded<TColumns>>;
105
- }) => MutationEvent.PartialAnyDecoded;
106
- type UseShortcut<TOptions extends DbSchema.TableOptions> = TOptions['isSingleColumn'] extends true ? TOptions['isSingleton'] extends true ? true : false : false;
107
- export {};
108
- }
109
- //# sourceMappingURL=derived-mutations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"derived-mutations.d.ts","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- import { ReadonlyRecord, Schema } from '@livestore/utils/effect';
2
- import { defineMutation } from './schema/mutations.js';
3
- import { getDefaultValuesDecoded } from './schema/schema-helpers.js';
4
- import { deleteRows, insertRow, updateRows } from './sql-queries/sql-queries.js';
5
- export const makeDerivedMutationDefsForTable = (table) => ({
6
- insert: deriveCreateMutationDef(table),
7
- update: deriveUpdateMutationDef(table),
8
- delete: deriveDeleteMutationDef(table),
9
- });
10
- export const deriveCreateMutationDef = (table) => {
11
- const tableName = table.sqliteDef.name;
12
- const [optionalFields, requiredColumns] = ReadonlyRecord.partition(table.sqliteDef.columns, (col) => col.nullable === false && col.default._tag === 'None');
13
- const insertSchema = Schema.Struct(ReadonlyRecord.map(requiredColumns, (col) => col.schema))
14
- .pipe(Schema.extend(Schema.partial(Schema.Struct(ReadonlyRecord.map(optionalFields, (col) => col.schema)))))
15
- .annotations({ title: `${tableName}:Insert` });
16
- return defineMutation(`_Derived_Create_${tableName}`, insertSchema, ({ id, ...explicitDefaultValues }) => {
17
- const defaultValues = getDefaultValuesDecoded(table, explicitDefaultValues);
18
- const [sql, bindValues] = insertRow({
19
- tableName: table.sqliteDef.name,
20
- columns: table.sqliteDef.columns,
21
- values: { ...defaultValues, id },
22
- });
23
- return { sql, bindValues, writeTables: new Set([tableName]) };
24
- }, { clientOnly: table.options.deriveMutations.clientOnly });
25
- };
26
- export const deriveUpdateMutationDef = (table) => {
27
- const tableName = table.sqliteDef.name;
28
- return defineMutation(`_Derived_Update_${tableName}`, Schema.Struct({
29
- where: Schema.partial(table.schema),
30
- values: Schema.partial(table.schema),
31
- }).annotations({ title: `${tableName}:Update` }), ({ where, values }) => {
32
- const [sql, bindValues] = updateRows({
33
- tableName: table.sqliteDef.name,
34
- columns: table.sqliteDef.columns,
35
- where,
36
- updateValues: values,
37
- });
38
- return { sql, bindValues, writeTables: new Set([tableName]) };
39
- }, { clientOnly: table.options.deriveMutations.clientOnly });
40
- };
41
- export const deriveDeleteMutationDef = (table) => {
42
- const tableName = table.sqliteDef.name;
43
- return defineMutation(`_Derived_Delete_${tableName}`, Schema.Struct({
44
- where: Schema.partial(table.schema),
45
- }), ({ where }) => {
46
- const [sql, bindValues] = deleteRows({
47
- tableName: table.sqliteDef.name,
48
- columns: table.sqliteDef.columns,
49
- where,
50
- });
51
- return { sql, bindValues, writeTables: new Set([tableName]) };
52
- }, { clientOnly: table.options.deriveMutations.clientOnly });
53
- };
54
- //# sourceMappingURL=derived-mutations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"derived-mutations.js","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=derived-mutations.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"derived-mutations.test.d.ts","sourceRoot":"","sources":["../src/derived-mutations.test.ts"],"names":[],"mappings":""}
@@ -1,93 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { appConfig, todos } from './__tests__/fixture.js';
3
- describe('derived mutations', () => {
4
- test('todos', () => {
5
- expect(patchId(todos.insert({ id: 't1', completed: true, text: 'Task 1' }))).toMatchInlineSnapshot(`
6
- {
7
- "args": {
8
- "completed": true,
9
- "id": "t1",
10
- "text": "Task 1",
11
- },
12
- "id": "00000000-0000-0000-0000-000000000000",
13
- "mutation": "_Derived_Create_todos",
14
- }
15
- `);
16
- expect(patchId(todos.update({ where: { id: 't1' }, values: { text: 'Task 1 - fixed' } }))).toMatchInlineSnapshot(`
17
- {
18
- "args": {
19
- "values": {
20
- "text": "Task 1 - fixed",
21
- },
22
- "where": {
23
- "id": "t1",
24
- },
25
- },
26
- "id": "00000000-0000-0000-0000-000000000000",
27
- "mutation": "_Derived_Update_todos",
28
- }
29
- `);
30
- expect(patchId(todos.delete({ where: { id: 't1' } }))).toMatchInlineSnapshot(`
31
- {
32
- "args": {
33
- "where": {
34
- "id": "t1",
35
- },
36
- },
37
- "id": "00000000-0000-0000-0000-000000000000",
38
- "mutation": "_Derived_Delete_todos",
39
- }
40
- `);
41
- });
42
- test('app_config', () => {
43
- expect(patchId(appConfig.insert())).toMatchInlineSnapshot(`
44
- {
45
- "args": {
46
- "id": "singleton",
47
- "value": {
48
- "value": undefined,
49
- },
50
- },
51
- "id": "00000000-0000-0000-0000-000000000000",
52
- "mutation": "_Derived_Create_app_config",
53
- }
54
- `);
55
- expect(patchId(appConfig.insert({ fontSize: 12, theme: 'dark' }))).toMatchInlineSnapshot(`
56
- {
57
- "args": {
58
- "id": "singleton",
59
- "value": {
60
- "value": {
61
- "fontSize": 12,
62
- "theme": "dark",
63
- },
64
- },
65
- },
66
- "id": "00000000-0000-0000-0000-000000000000",
67
- "mutation": "_Derived_Create_app_config",
68
- }
69
- `);
70
- expect(patchId(appConfig.update({ fontSize: 13 }))).toMatchInlineSnapshot(`
71
- {
72
- "args": {
73
- "values": {
74
- "value": {
75
- "fontSize": 13,
76
- },
77
- },
78
- "where": {
79
- "id": "singleton",
80
- },
81
- },
82
- "id": "00000000-0000-0000-0000-000000000000",
83
- "mutation": "_Derived_Update_app_config",
84
- }
85
- `);
86
- });
87
- });
88
- const patchId = (muationEvent) => {
89
- // TODO use new id paradigm
90
- const id = `00000000-0000-0000-0000-000000000000`;
91
- return { ...muationEvent, id };
92
- };
93
- //# sourceMappingURL=derived-mutations.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"derived-mutations.test.js","sourceRoot":"","sources":["../src/derived-mutations.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGzD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;KAUlG,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;KAahH,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;KAU5E,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QACtB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;KAWzD,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;KAcxF,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;KAezE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,CAAC,YAA6C,EAAE,EAAE;IAChE,2BAA2B;IAC3B,MAAM,EAAE,GAAG,sCAAsC,CAAA;IACjD,OAAO,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,CAAA;AAChC,CAAC,CAAA"}
@@ -1,4 +0,0 @@
1
- import type { SqliteDb } from './adapter-types.js';
2
- import type { LiveStoreSchema } from './schema/mod.js';
3
- export declare const initializeSingletonTables: (schema: LiveStoreSchema, db: SqliteDb) => void;
4
- //# sourceMappingURL=init-singleton-tables.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-singleton-tables.d.ts","sourceRoot":"","sources":["../src/init-singleton-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAItD,eAAO,MAAM,yBAAyB,GAAI,QAAQ,eAAe,EAAE,IAAI,QAAQ,SAkB9E,CAAA"}
@@ -1,16 +0,0 @@
1
- import { getDefaultValuesEncoded } from './schema/schema-helpers.js';
2
- import { prepareBindValues, sql } from './util.js';
3
- export const initializeSingletonTables = (schema, db) => {
4
- for (const [, tableDef] of schema.tables) {
5
- if (tableDef.options.isSingleton) {
6
- const defaultValues = getDefaultValuesEncoded(tableDef, undefined);
7
- const defaultColumnNames = [...Object.keys(defaultValues), 'id'];
8
- const columnValues = defaultColumnNames.map((name) => `$${name}`).join(', ');
9
- const tableName = tableDef.sqliteDef.name;
10
- const insertQuery = sql `insert into ${tableName} (${defaultColumnNames.join(', ')}) select ${columnValues} where not exists(select 1 from ${tableName} where id = 'singleton')`;
11
- const bindValues = prepareBindValues({ ...defaultValues, id: 'singleton' }, insertQuery);
12
- db.execute(insertQuery, bindValues);
13
- }
14
- }
15
- };
16
- //# sourceMappingURL=init-singleton-tables.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-singleton-tables.js","sourceRoot":"","sources":["../src/init-singleton-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAElD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAuB,EAAE,EAAY,EAAE,EAAE;IACjF,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;YAElE,MAAM,kBAAkB,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;YAChE,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAE5E,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAA;YACzC,MAAM,WAAW,GAAG,GAAG,CAAA,eAAe,SAAS,KAAK,kBAAkB,CAAC,IAAI,CACzE,IAAI,CACL,YAAY,YAAY,mCAAmC,SAAS,0BAA0B,CAAA;YAE/F,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,GAAG,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,CAAA;YAExF,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-mutation.d.ts","sourceRoot":"","sources":["../../src/leader-thread/apply-mutation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAyB,MAAM,yBAAyB,CAAA;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAA0C,MAAM,kBAAkB,CAAA;AAC/F,OAAO,EACL,OAAO,EAKR,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,iBAAiB,GAAI,6CAI/B;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,WAAW,EAAE,QAAQ,CAAA;IACrB,aAAa,EAAE,QAAQ,CAAA;CACxB,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAoGlC,CAAA;AAEJ,eAAO,MAAM,QAAQ,GAAI,4CAItB;IACD,EAAE,EAAE,QAAQ,CAAA;IACZ,aAAa,EAAE,QAAQ,CAAA;IACvB,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;CACtC,sCAsCE,CAAA"}