@evolu/common 8.0.0-next.5 → 8.0.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 (236) hide show
  1. package/dist/src/Array.d.ts +279 -173
  2. package/dist/src/Array.d.ts.map +1 -1
  3. package/dist/src/Array.js +105 -101
  4. package/dist/src/Assert.d.ts +39 -44
  5. package/dist/src/Assert.d.ts.map +1 -1
  6. package/dist/src/Assert.js +38 -31
  7. package/dist/src/BigInt.d.ts +6 -3
  8. package/dist/src/BigInt.d.ts.map +1 -1
  9. package/dist/src/BigInt.js +5 -2
  10. package/dist/src/Brand.d.ts +27 -40
  11. package/dist/src/Brand.d.ts.map +1 -1
  12. package/dist/src/Buffer.d.ts +27 -11
  13. package/dist/src/Buffer.d.ts.map +1 -1
  14. package/dist/src/Cache.d.ts +9 -4
  15. package/dist/src/Cache.d.ts.map +1 -1
  16. package/dist/src/Cache.js +8 -3
  17. package/dist/src/Callbacks.d.ts +30 -19
  18. package/dist/src/Callbacks.d.ts.map +1 -1
  19. package/dist/src/Console.d.ts +145 -66
  20. package/dist/src/Console.d.ts.map +1 -1
  21. package/dist/src/Console.js +91 -43
  22. package/dist/src/Crypto.d.ts +85 -42
  23. package/dist/src/Crypto.d.ts.map +1 -1
  24. package/dist/src/Crypto.js +44 -20
  25. package/dist/src/Eq.d.ts +87 -21
  26. package/dist/src/Eq.d.ts.map +1 -1
  27. package/dist/src/Eq.js +67 -19
  28. package/dist/src/Error.d.ts +3 -3
  29. package/dist/src/Error.d.ts.map +1 -1
  30. package/dist/src/Function.d.ts +119 -58
  31. package/dist/src/Function.d.ts.map +1 -1
  32. package/dist/src/Function.js +86 -43
  33. package/dist/src/Http.d.ts +394 -0
  34. package/dist/src/Http.d.ts.map +1 -0
  35. package/dist/src/Http.js +102 -0
  36. package/dist/src/Identicon.d.ts +16 -7
  37. package/dist/src/Identicon.d.ts.map +1 -1
  38. package/dist/src/Identicon.js +14 -5
  39. package/dist/src/LeakDetector.d.ts +88 -0
  40. package/dist/src/LeakDetector.d.ts.map +1 -0
  41. package/dist/src/LeakDetector.js +86 -0
  42. package/dist/src/LockManager.d.ts +18 -9
  43. package/dist/src/LockManager.d.ts.map +1 -1
  44. package/dist/src/LockManager.js +7 -8
  45. package/dist/src/Lookup.d.ts +43 -13
  46. package/dist/src/Lookup.d.ts.map +1 -1
  47. package/dist/src/Lookup.js +28 -8
  48. package/dist/src/Microtask.d.ts +1 -1
  49. package/dist/src/Microtask.d.ts.map +1 -1
  50. package/dist/src/Microtask.js +3 -7
  51. package/dist/src/Number.d.ts +49 -13
  52. package/dist/src/Number.d.ts.map +1 -1
  53. package/dist/src/Number.js +34 -5
  54. package/dist/src/Object.d.ts +160 -40
  55. package/dist/src/Object.d.ts.map +1 -1
  56. package/dist/src/Object.js +92 -46
  57. package/dist/src/Option.d.ts +10 -7
  58. package/dist/src/Option.d.ts.map +1 -1
  59. package/dist/src/Option.js +9 -6
  60. package/dist/src/Order.d.ts +21 -21
  61. package/dist/src/Order.d.ts.map +1 -1
  62. package/dist/src/Order.js +18 -21
  63. package/dist/src/Platform.d.ts +31 -0
  64. package/dist/src/Platform.d.ts.map +1 -1
  65. package/dist/src/Platform.js +98 -0
  66. package/dist/src/Random.d.ts +32 -17
  67. package/dist/src/Random.d.ts.map +1 -1
  68. package/dist/src/Random.js +12 -8
  69. package/dist/src/Redacted.d.ts +43 -29
  70. package/dist/src/Redacted.d.ts.map +1 -1
  71. package/dist/src/Redacted.js +14 -3
  72. package/dist/src/Ref.d.ts +11 -3
  73. package/dist/src/Ref.d.ts.map +1 -1
  74. package/dist/src/Ref.js +2 -2
  75. package/dist/src/RefCount.d.ts +2 -6
  76. package/dist/src/RefCount.d.ts.map +1 -1
  77. package/dist/src/RefCount.js +33 -90
  78. package/dist/src/Relation.d.ts +70 -5
  79. package/dist/src/Relation.d.ts.map +1 -1
  80. package/dist/src/Relation.js +77 -2
  81. package/dist/src/Resource.d.ts +590 -155
  82. package/dist/src/Resource.d.ts.map +1 -1
  83. package/dist/src/Resource.js +592 -343
  84. package/dist/src/Result.d.ts +838 -191
  85. package/dist/src/Result.d.ts.map +1 -1
  86. package/dist/src/Result.js +163 -102
  87. package/dist/src/Schedule.d.ts +684 -231
  88. package/dist/src/Schedule.d.ts.map +1 -1
  89. package/dist/src/Schedule.js +766 -295
  90. package/dist/src/Set.d.ts +89 -40
  91. package/dist/src/Set.d.ts.map +1 -1
  92. package/dist/src/Set.js +50 -29
  93. package/dist/src/Sqlite.d.ts +29 -72
  94. package/dist/src/Sqlite.d.ts.map +1 -1
  95. package/dist/src/Sqlite.js +39 -45
  96. package/dist/src/StackTrace.d.ts +40 -0
  97. package/dist/src/StackTrace.d.ts.map +1 -0
  98. package/dist/src/StackTrace.js +140 -0
  99. package/dist/src/Store.d.ts +5 -4
  100. package/dist/src/Store.d.ts.map +1 -1
  101. package/dist/src/Store.js +5 -4
  102. package/dist/src/String.d.ts +7 -1
  103. package/dist/src/String.d.ts.map +1 -1
  104. package/dist/src/String.js +20 -7
  105. package/dist/src/Task.d.ts +3428 -1629
  106. package/dist/src/Task.d.ts.map +1 -1
  107. package/dist/src/Task.js +1876 -1279
  108. package/dist/src/Test.d.ts +17 -124
  109. package/dist/src/Test.d.ts.map +1 -1
  110. package/dist/src/Test.js +17 -68
  111. package/dist/src/Time.d.ts +108 -49
  112. package/dist/src/Time.d.ts.map +1 -1
  113. package/dist/src/Time.js +172 -73
  114. package/dist/src/Type.d.ts +3542 -1926
  115. package/dist/src/Type.d.ts.map +1 -1
  116. package/dist/src/Type.js +3070 -1784
  117. package/dist/src/Types.d.ts +200 -100
  118. package/dist/src/Types.d.ts.map +1 -1
  119. package/dist/src/Types.js +39 -8
  120. package/dist/src/WebSocket.d.ts +48 -23
  121. package/dist/src/WebSocket.d.ts.map +1 -1
  122. package/dist/src/WebSocket.js +15 -6
  123. package/dist/src/Worker.d.ts +94 -36
  124. package/dist/src/Worker.d.ts.map +1 -1
  125. package/dist/src/Worker.js +58 -24
  126. package/dist/src/index.d.ts +55 -52
  127. package/dist/src/index.d.ts.map +1 -1
  128. package/dist/src/index.js +3 -1
  129. package/dist/src/intl/cs.d.ts +94 -0
  130. package/dist/src/intl/cs.d.ts.map +1 -0
  131. package/dist/src/intl/cs.js +220 -0
  132. package/dist/src/intl/index.d.ts +7 -0
  133. package/dist/src/intl/index.d.ts.map +1 -0
  134. package/dist/src/intl/index.js +6 -0
  135. package/dist/src/local-first/Db.d.ts +12 -8
  136. package/dist/src/local-first/Db.d.ts.map +1 -1
  137. package/dist/src/local-first/Db.js +107 -130
  138. package/dist/src/local-first/Error.d.ts +4 -4
  139. package/dist/src/local-first/Evolu.d.ts +338 -92
  140. package/dist/src/local-first/Evolu.d.ts.map +1 -1
  141. package/dist/src/local-first/Evolu.js +47 -55
  142. package/dist/src/local-first/LocalAuth.d.ts +4 -4
  143. package/dist/src/local-first/LocalAuth.d.ts.map +1 -1
  144. package/dist/src/local-first/Owner.d.ts +61 -24
  145. package/dist/src/local-first/Owner.d.ts.map +1 -1
  146. package/dist/src/local-first/Owner.js +45 -8
  147. package/dist/src/local-first/Protocol.d.ts +44 -31
  148. package/dist/src/local-first/Protocol.d.ts.map +1 -1
  149. package/dist/src/local-first/Protocol.js +36 -13
  150. package/dist/src/local-first/Query.d.ts +147 -62
  151. package/dist/src/local-first/Query.d.ts.map +1 -1
  152. package/dist/src/local-first/Query.js +112 -58
  153. package/dist/src/local-first/Relay.d.ts +44 -14
  154. package/dist/src/local-first/Relay.d.ts.map +1 -1
  155. package/dist/src/local-first/Schema.d.ts +92 -41
  156. package/dist/src/local-first/Schema.d.ts.map +1 -1
  157. package/dist/src/local-first/Schema.js +25 -8
  158. package/dist/src/local-first/Shared.d.ts +23 -21
  159. package/dist/src/local-first/Shared.d.ts.map +1 -1
  160. package/dist/src/local-first/Shared.js +85 -42
  161. package/dist/src/local-first/Storage.d.ts +53 -32
  162. package/dist/src/local-first/Storage.d.ts.map +1 -1
  163. package/dist/src/local-first/Storage.js +194 -234
  164. package/dist/src/local-first/Timestamp.d.ts +21 -21
  165. package/dist/src/local-first/Timestamp.d.ts.map +1 -1
  166. package/dist/src/local-first/Timestamp.js +2 -2
  167. package/dist/src/local-first/index.d.ts +11 -11
  168. package/package.json +14 -13
  169. package/src/Array.ts +306 -205
  170. package/src/Assert.ts +48 -68
  171. package/src/BigInt.ts +6 -3
  172. package/src/Brand.ts +27 -40
  173. package/src/Buffer.ts +28 -12
  174. package/src/Cache.ts +9 -4
  175. package/src/Callbacks.ts +30 -19
  176. package/src/Console.ts +156 -84
  177. package/src/Crypto.ts +83 -41
  178. package/src/Eq.ts +95 -22
  179. package/src/Error.ts +5 -2
  180. package/src/Function.ts +167 -59
  181. package/src/Http.ts +549 -0
  182. package/src/Identicon.ts +16 -7
  183. package/src/LeakDetector.ts +182 -0
  184. package/src/LockManager.ts +43 -39
  185. package/src/Lookup.ts +62 -28
  186. package/src/Microtask.ts +19 -23
  187. package/src/Number.ts +64 -12
  188. package/src/Object.ts +173 -49
  189. package/src/Option.ts +10 -7
  190. package/src/Order.ts +23 -21
  191. package/src/Platform.ts +136 -0
  192. package/src/Polyfills.ts +6 -12
  193. package/src/Random.ts +32 -19
  194. package/src/Redacted.ts +44 -30
  195. package/src/Ref.ts +14 -6
  196. package/src/RefCount.ts +38 -80
  197. package/src/Relation.ts +202 -10
  198. package/src/Resource.ts +1199 -591
  199. package/src/Result.ts +930 -271
  200. package/src/Schedule.ts +859 -343
  201. package/src/Set.ts +89 -40
  202. package/src/Sqlite.ts +142 -137
  203. package/src/StackTrace.ts +230 -0
  204. package/src/Store.ts +8 -7
  205. package/src/String.ts +22 -5
  206. package/src/Task.ts +5109 -2845
  207. package/src/Test.ts +20 -167
  208. package/src/Time.ts +293 -90
  209. package/src/Type.ts +10034 -4117
  210. package/src/Types.ts +227 -101
  211. package/src/WebSocket.ts +64 -36
  212. package/src/Worker.ts +180 -72
  213. package/src/index.ts +55 -52
  214. package/src/intl/cs.ts +388 -0
  215. package/src/intl/index.ts +7 -0
  216. package/src/local-first/Db.ts +161 -190
  217. package/src/local-first/Error.ts +4 -4
  218. package/src/local-first/Evolu.ts +495 -250
  219. package/src/local-first/LocalAuth.ts +6 -12
  220. package/src/local-first/Owner.ts +58 -21
  221. package/src/local-first/Protocol.ts +49 -31
  222. package/src/local-first/Query.ts +146 -61
  223. package/src/local-first/Relay.ts +51 -21
  224. package/src/local-first/Schema.ts +109 -51
  225. package/src/local-first/Shared.ts +253 -214
  226. package/src/local-first/Storage.ts +266 -264
  227. package/src/local-first/Timestamp.ts +25 -18
  228. package/src/local-first/index.ts +11 -11
  229. package/dist/src/Skiplist.d.ts +0 -28
  230. package/dist/src/Skiplist.d.ts.map +0 -1
  231. package/dist/src/Skiplist.js +0 -64
  232. package/dist/src/Tracer.d.ts +0 -48
  233. package/dist/src/Tracer.d.ts.map +0 -1
  234. package/dist/src/Tracer.js +0 -6
  235. package/src/Skiplist.ts +0 -108
  236. package/src/Tracer.ts +0 -54
@@ -56,38 +56,35 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
56
56
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
57
57
  });
58
58
  import { appendToArray, firstInArray, } from "../Array.js";
59
- import { assert, assertNonEmptyReadonlyArray, assertType } from "../Assert.js";
59
+ import { assert, assertNonEmptyReadonlyArray, assertNonNullable, } from "../Assert.js";
60
60
  import { EncryptionKey, } from "../Crypto.js";
61
- import { exhaustiveCheck, lazyFalse, lazyVoid } from "../Function.js";
61
+ import { constFalse, constVoid } from "../Function.js";
62
62
  import { acquireLeaderLock } from "../LockManager.js";
63
- import { createRecord, getProperty, objectToEntries } from "../Object.js";
63
+ import { createMutableRecord, getOwnProp, objectToEntries } from "../Object.js";
64
64
  import { ok } from "../Result.js";
65
65
  import { booleanToSqliteBoolean, createSqlite, sql, SqliteBoolean, sqliteBooleanToBoolean, sqliteQueryStringToSqliteQuery, SqliteValue, } from "../Sqlite.js";
66
66
  import { callback } from "../Task.js";
67
67
  import { Millis, millisToDateIso } from "../Time.js";
68
- import { Id, IdBytes, idBytesToId, idToIdBytes, onePositiveInt, } from "../Type.js";
68
+ import { assertType, Id, IdBytes, idBytesToId, idToIdBytes, onePositiveInt, } from "../Type.js";
69
69
  import { ownerIdBytesToOwnerId, ownerIdToOwnerIdBytes } from "./Owner.js";
70
70
  import { applyProtocolMessageAsClient, createProtocolMessageForSync, decryptAndDecodeDbChange, encodeAndEncryptDbChange, protocolVersion, SubscriptionFlags, } from "./Protocol.js";
71
71
  import { ensureSqliteSchema, getEvoluSqliteSchema, systemColumns, } from "./Schema.js";
72
72
  import { consoleEntryOrErrorBroadcastChannelName } from "./Shared.js";
73
73
  import { createBaseSqliteStorage, createBaseSqliteStorageTables, DbChange, getTimestampInsertStrategy, readOwnerUsageOrDefault, updateOwnerUsage, } from "./Storage.js";
74
74
  import { createInitialTimestamp, defaultTimestampMaxDrift, receiveTimestamp, sendTimestamp, TimestampBytes, timestampBytesToTimestamp, timestampToTimestampBytes, } from "./Timestamp.js";
75
+ /**
76
+ * Starts the platform-agnostic Evolu DbWorker and owns its resources until the
77
+ * worker receives a dispose message or its {@link Run} is aborted.
78
+ */
75
79
  export const startDbWorker = (self) => async (run) => {
76
80
  const env_1 = { stack: [], error: void 0, hasError: false };
77
81
  try {
78
82
  const disposer = __addDisposableResource(env_1, new AsyncDisposableStack(), true);
79
83
  disposer.use(self);
80
84
  const { deps } = run;
81
- let initialized = false;
82
- const initMessage = await run.orThrow(callback(({ ok }) => {
83
- self.onMessage = (message) => {
84
- assert(!initialized, "DbWorker must be initialized only once");
85
- initialized = true;
86
- ok(message);
87
- };
85
+ const initMessage = await run.ok(callback(({ resolve }) => {
86
+ self.onMessage = (message) => resolve(ok(message));
88
87
  }));
89
- const console = deps.console.child(initMessage.name).child("DbWorker");
90
- console.setLevel(initMessage.consoleLevel);
91
88
  const port = disposer.use(deps.createMessagePort(initMessage.port));
92
89
  const consoleEntryOrErrorBroadcastChannel = disposer.use(deps.createBroadcastChannel(consoleEntryOrErrorBroadcastChannelName));
93
90
  disposer.defer(deps.consoleStoreOutputEntry.subscribe(() => {
@@ -98,17 +95,11 @@ export const startDbWorker = (self) => async (run) => {
98
95
  entry,
99
96
  });
100
97
  }));
101
- console.debug("createDbWorker");
102
- disposer.use(await run.orThrow(acquireLeaderLock(initMessage.name)));
103
- port.postMessage({ type: "LeaderAcquired", name: initMessage.name });
104
- const sqlite = disposer.use(await run.orThrow(createSqlite(initMessage.name, initMessage.memoryOnly
98
+ disposer.use(await run.ok(acquireLeaderLock(initMessage.name)));
99
+ const sqlite = disposer.use(await run.ok(createSqlite(initMessage.name, initMessage.memoryOnly
105
100
  ? { mode: "memory" }
106
101
  : { mode: "encrypted", encryptionKey: initMessage.encryptionKey })));
107
- console.debug("SQLite created");
108
- const baseSqliteStorage = createBaseSqliteStorage({
109
- sqlite,
110
- ...deps,
111
- });
102
+ const baseSqliteStorage = createBaseSqliteStorage({ sqlite, ...deps });
112
103
  const dbDeps = {
113
104
  ...deps,
114
105
  sqlite,
@@ -116,7 +107,6 @@ export const startDbWorker = (self) => async (run) => {
116
107
  baseSqliteStorage,
117
108
  timestampConfig: { maxDrift: defaultTimestampMaxDrift },
118
109
  };
119
- const dbWorkerRun = disposer.use(run.create());
120
110
  const currentSchema = getEvoluSqliteSchema(dbDeps)();
121
111
  const dbIsInitialized = "evolu_version" in currentSchema.tables;
122
112
  const clock = createClock(dbDeps)(dbIsInitialized);
@@ -134,117 +124,102 @@ export const startDbWorker = (self) => async (run) => {
134
124
  });
135
125
  },
136
126
  });
137
- const disposables = disposer.move();
138
- port.onMessage = (input) => {
139
- if (input.type === "Dispose") {
140
- if (!disposables.disposed)
141
- console.debug("disposeDbWorker");
142
- void disposables.disposeAsync();
143
- return;
144
- }
145
- const { callbackId, request } = input;
146
- const postQueuedResponse = (response) => {
147
- port.postMessage({ type: "OnQueuedResponse", callbackId, response }, response.type === "ForEvolu" && response.message.type === "Export"
148
- ? [response.message.file.buffer]
149
- : undefined);
150
- };
151
- switch (request.type) {
152
- case "ForEvolu": {
153
- switch (request.message.type) {
154
- case "Mutate": {
155
- const result = handleMutation({ ...dbDeps, clock })(request.message);
156
- if (!result.ok) {
157
- consoleEntryOrErrorBroadcastChannel.postMessage({
158
- type: "Error",
159
- error: result.error,
160
- });
161
- }
162
- else {
163
- postQueuedResponse({
164
- type: "ForEvolu",
165
- id: request.id,
166
- message: result.value,
167
- });
168
- }
169
- break;
170
- }
171
- case "Query":
172
- postQueuedResponse({
173
- type: "ForEvolu",
174
- id: request.id,
175
- message: {
176
- type: "Query",
177
- rowsByQuery: loadQueries(dbDeps)(request.message.queries),
178
- },
179
- });
180
- break;
181
- case "Export":
182
- postQueuedResponse({
183
- type: "ForEvolu",
184
- id: request.id,
185
- message: {
186
- type: "Export",
187
- file: dbDeps.sqlite.export(),
188
- },
189
- });
190
- break;
191
- default:
192
- exhaustiveCheck(request.message);
193
- }
194
- break;
127
+ const dbWorkerRun = disposer.use(run.create({ storage }));
128
+ port.postMessage({ type: "LeaderAcquired", name: initMessage.name });
129
+ await run.ok(callback(({ resolve }) => {
130
+ port.onMessage = (input) => {
131
+ if (input.type === "Dispose") {
132
+ resolve(ok());
133
+ return;
195
134
  }
196
- case "ForSharedWorker": {
197
- switch (request.message.type) {
198
- case "CreateSyncMessages": {
199
- const protocolMessagesByOwnerId = new Map();
200
- for (const owner of request.message.owners) {
201
- storage.setRequestContext(owner.encryptionKey);
202
- const protocolMessage = createProtocolMessageForSync({
203
- storage,
204
- console,
205
- })(owner.id, SubscriptionFlags.Subscribe);
206
- protocolMessagesByOwnerId.set(owner.id, protocolMessage);
207
- }
135
+ const { callbackId, request } = input;
136
+ const postQueuedResponse = (response) => {
137
+ port.postMessage({
138
+ type: "OnQueuedResponse",
139
+ callbackId,
140
+ response,
141
+ }, response.type === "ForEvolu" && response.message.type === "Export"
142
+ ? [response.message.file.buffer]
143
+ : undefined);
144
+ };
145
+ if (request.type === "ForSharedWorker") {
146
+ if (request.message.type === "ApplySyncMessage") {
147
+ const { owner, inputMessage } = request.message;
148
+ void dbWorkerRun(async (run) => {
149
+ storage.setRequestContext(owner.encryptionKey);
150
+ const result = await run.abortable(applyProtocolMessageAsClient(inputMessage, {
151
+ writeKey: owner.writeKey,
152
+ }));
208
153
  postQueuedResponse({
209
154
  type: "ForSharedWorker",
210
155
  message: {
211
- type: "CreateSyncMessages",
212
- protocolMessagesByOwnerId,
156
+ type: "ApplySyncMessage",
157
+ ownerId: owner.id,
158
+ didWriteMessages: storage.didWriteMessages(),
159
+ result,
213
160
  },
214
161
  });
215
- break;
216
- }
217
- case "ApplySyncMessage": {
218
- const { owner, inputMessage } = request.message;
219
- dbWorkerRun(async (run) => {
220
- const { storage } = run.deps;
221
- storage.setRequestContext(owner.encryptionKey);
222
- const result = await run(applyProtocolMessageAsClient(inputMessage, {
223
- writeKey: owner.writeKey,
224
- }));
225
- const didWriteMessages = storage.didWriteMessages();
226
- postQueuedResponse({
227
- type: "ForSharedWorker",
228
- message: {
229
- type: "ApplySyncMessage",
230
- ownerId: owner.id,
231
- didWriteMessages,
232
- result,
233
- },
234
- });
235
- return ok();
236
- }, { storage });
237
- break;
238
- }
239
- default:
240
- exhaustiveCheck(request.message);
162
+ return ok();
163
+ });
164
+ return;
241
165
  }
242
- break;
166
+ const protocolMessagesByOwnerId = new Map();
167
+ for (const owner of request.message.owners) {
168
+ storage.setRequestContext(owner.encryptionKey);
169
+ protocolMessagesByOwnerId.set(owner.id, createProtocolMessageForSync({
170
+ storage,
171
+ console: deps.console,
172
+ })(owner.id, SubscriptionFlags.Subscribe));
173
+ }
174
+ postQueuedResponse({
175
+ type: "ForSharedWorker",
176
+ message: {
177
+ type: "CreateSyncMessages",
178
+ protocolMessagesByOwnerId,
179
+ },
180
+ });
181
+ return;
243
182
  }
244
- default:
245
- exhaustiveCheck(request);
246
- }
247
- };
183
+ if (request.message.type === "Query") {
184
+ postQueuedResponse({
185
+ type: "ForEvolu",
186
+ id: request.id,
187
+ message: {
188
+ type: "Query",
189
+ rowsByQuery: loadQueries(dbDeps)(request.message.queries),
190
+ },
191
+ });
192
+ return;
193
+ }
194
+ if (request.message.type === "Export") {
195
+ postQueuedResponse({
196
+ type: "ForEvolu",
197
+ id: request.id,
198
+ message: {
199
+ type: "Export",
200
+ file: sqlite.export(),
201
+ },
202
+ });
203
+ return;
204
+ }
205
+ const result = handleMutation({ ...dbDeps, clock })(request.message);
206
+ if (!result.ok) {
207
+ consoleEntryOrErrorBroadcastChannel.postMessage({
208
+ type: "Error",
209
+ error: result.error,
210
+ });
211
+ return;
212
+ }
213
+ postQueuedResponse({
214
+ type: "ForEvolu",
215
+ id: request.id,
216
+ message: result.value,
217
+ });
218
+ };
219
+ return () => {
220
+ port.onMessage = null;
221
+ };
222
+ }));
248
223
  return ok();
249
224
  }
250
225
  catch (e_1) {
@@ -393,7 +368,7 @@ const tryApplyQuarantinedMessages = (deps) => {
393
368
  }
394
369
  };
395
370
  const validateColumnValue = (deps) => (table, column, _value) => {
396
- const schemaColumns = getProperty(deps.sqliteSchema.tables, table);
371
+ const schemaColumns = getOwnProp(deps.sqliteSchema.tables, table);
397
372
  return (schemaColumns != null &&
398
373
  (systemColumnsWithoutOwnerId.has(column) || schemaColumns.has(column)));
399
374
  };
@@ -454,8 +429,8 @@ const createClientStorage = (deps) => ({ onError, }) => {
454
429
  },
455
430
  didWriteMessages: () => didWriteMessages,
456
431
  // Not implemented yet.
457
- validateWriteKey: lazyFalse,
458
- setWriteKey: lazyVoid,
432
+ validateWriteKey: constFalse,
433
+ setWriteKey: constVoid,
459
434
  writeMessages: (ownerIdBytes, encryptedMessages) => () => {
460
435
  // TODO: Add quota checking for collaborative scenarios.
461
436
  // When receiving messages from other owners via relay broadcast,
@@ -502,7 +477,7 @@ const createClientStorage = (deps) => ({ onError, }) => {
502
477
  const { rows } = result;
503
478
  assertNonEmptyReadonlyArray(rows, "Every timestamp must have rows");
504
479
  const firstRow = firstInArray(rows);
505
- const values = createRecord();
480
+ const values = createMutableRecord();
506
481
  let isInsert = false;
507
482
  let isDelete = null;
508
483
  for (const r of rows) {
@@ -582,6 +557,7 @@ const applyLocalOnlyChange = (deps) => (change) => {
582
557
  const ownerId = change.ownerId;
583
558
  const columns = dbChangeToColumns(change, deps.time.now());
584
559
  for (const [column, value] of columns) {
560
+ assertNonNullable(value);
585
561
  deps.sqlite.exec(sql.prepared `
586
562
  insert into ${sql.identifier(change.table)}
587
563
  ("ownerId", "id", ${sql.identifier(column)})
@@ -601,6 +577,7 @@ const applyMessages = (deps) => (ownerId, messages) => {
601
577
  const idBytes = idToIdBytes(change.id);
602
578
  const timestampBytes = timestampToTimestampBytes(timestamp);
603
579
  for (const [column, value] of columns) {
580
+ assertNonNullable(value);
604
581
  if (validateColumnValue(deps)(change.table, column, value)) {
605
582
  applyColumnChange(deps)(ownerIdBytes, ownerId, change.table, idBytes, change.id, column, value, timestampBytes);
606
583
  }
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import type { DecryptWithXChaCha20Poly1305Error } from "../Crypto.js";
7
- import type { UnknownError } from "../Error.js";
8
- import type { ProtocolError } from "./Protocol.js";
9
- import type { TimestampError } from "./Timestamp.js";
6
+ import type { DecryptWithXChaCha20Poly1305Error } from "../Crypto.ts";
7
+ import type { UnknownError } from "../Error.ts";
8
+ import type { ProtocolError } from "./Protocol.ts";
9
+ import type { TimestampError } from "./Timestamp.ts";
10
10
  /** Represents errors that can occur in Evolu. */
11
11
  export type EvoluError = DecryptWithXChaCha20Poly1305Error | ProtocolError | TimestampError | UnknownError;
12
12
  //# sourceMappingURL=Error.d.ts.map