@evolu/common 6.0.1-preview.19 → 6.0.1-preview.20
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.
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +1 -1
- package/dist/src/Buffer.d.ts +1 -1
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Buffer.js +1 -1
- package/dist/src/CallbackRegistry.d.ts +53 -0
- package/dist/src/CallbackRegistry.d.ts.map +1 -0
- package/dist/src/CallbackRegistry.js +25 -0
- package/dist/src/Console.d.ts +31 -6
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +72 -9
- package/dist/src/Crypto.d.ts +48 -37
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +27 -50
- package/dist/src/Evolu/Db.d.ts +138 -66
- package/dist/src/Evolu/Db.d.ts.map +1 -1
- package/dist/src/Evolu/Db.js +248 -645
- package/dist/src/Evolu/Diff.d.ts +3 -3
- package/dist/src/Evolu/Diff.d.ts.map +1 -1
- package/dist/src/Evolu/Diff.js +7 -5
- package/dist/src/Evolu/Evolu.d.ts +79 -116
- package/dist/src/Evolu/Evolu.d.ts.map +1 -1
- package/dist/src/Evolu/Evolu.js +275 -132
- package/dist/src/Evolu/Internal.d.ts +0 -2
- package/dist/src/Evolu/Internal.d.ts.map +1 -1
- package/dist/src/Evolu/Internal.js +0 -2
- package/dist/src/Evolu/LocalAuth.d.ts +144 -0
- package/dist/src/Evolu/LocalAuth.d.ts.map +1 -0
- package/dist/src/Evolu/LocalAuth.js +171 -0
- package/dist/src/Evolu/Owner.d.ts +129 -83
- package/dist/src/Evolu/Owner.d.ts.map +1 -1
- package/dist/src/Evolu/Owner.js +80 -89
- package/dist/src/Evolu/Platform.d.ts +9 -7
- package/dist/src/Evolu/Platform.d.ts.map +1 -1
- package/dist/src/Evolu/Protocol.d.ts +114 -191
- package/dist/src/Evolu/Protocol.d.ts.map +1 -1
- package/dist/src/Evolu/Protocol.js +409 -416
- package/dist/src/Evolu/Public.d.ts +6 -8
- package/dist/src/Evolu/Public.d.ts.map +1 -1
- package/dist/src/Evolu/Public.js +2 -3
- package/dist/src/Evolu/PublicKysely.js +3 -3
- package/dist/src/Evolu/Relay.d.ts +1 -2
- package/dist/src/Evolu/Relay.d.ts.map +1 -1
- package/dist/src/Evolu/Relay.js +11 -9
- package/dist/src/Evolu/Schema.d.ts +88 -27
- package/dist/src/Evolu/Schema.d.ts.map +1 -1
- package/dist/src/Evolu/Schema.js +141 -24
- package/dist/src/Evolu/Storage.d.ts +158 -14
- package/dist/src/Evolu/Storage.d.ts.map +1 -1
- package/dist/src/Evolu/Storage.js +32 -32
- package/dist/src/Evolu/Sync.d.ts +77 -13
- package/dist/src/Evolu/Sync.d.ts.map +1 -1
- package/dist/src/Evolu/Sync.js +453 -20
- package/dist/src/Evolu/Timestamp.d.ts +29 -27
- package/dist/src/Evolu/Timestamp.d.ts.map +1 -1
- package/dist/src/Evolu/Timestamp.js +20 -18
- package/dist/src/ManyToManyMap.d.ts +74 -10
- package/dist/src/ManyToManyMap.d.ts.map +1 -1
- package/dist/src/ManyToManyMap.js +41 -6
- package/dist/src/Random.d.ts +3 -2
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/RefCountedResourceManager.d.ts +119 -0
- package/dist/src/RefCountedResourceManager.d.ts.map +1 -0
- package/dist/src/RefCountedResourceManager.js +197 -0
- package/dist/src/Result.d.ts +144 -22
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +5 -2
- package/dist/src/Sqlite.d.ts +20 -4
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +50 -8
- package/dist/src/Task.d.ts +511 -0
- package/dist/src/Task.d.ts.map +1 -0
- package/dist/src/Task.js +410 -0
- package/dist/src/Time.d.ts +59 -0
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +87 -4
- package/dist/src/Type.d.ts +431 -341
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +458 -466
- package/dist/src/WebSocket.d.ts +5 -2
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +12 -13
- package/dist/src/Worker.d.ts +39 -11
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +22 -4
- package/dist/src/index.d.ts +2 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -3
- package/package.json +7 -7
- package/src/Assert.ts +2 -4
- package/src/Buffer.ts +1 -1
- package/src/CallbackRegistry.ts +84 -0
- package/src/Console.ts +91 -11
- package/src/Crypto.ts +78 -91
- package/src/Evolu/Db.ts +455 -947
- package/src/Evolu/Diff.ts +7 -5
- package/src/Evolu/Evolu.ts +545 -307
- package/src/Evolu/Internal.ts +0 -2
- package/src/Evolu/LocalAuth.ts +422 -0
- package/src/Evolu/Owner.ts +191 -131
- package/src/Evolu/Platform.ts +9 -9
- package/src/Evolu/Protocol.ts +536 -653
- package/src/Evolu/Public.ts +7 -9
- package/src/Evolu/PublicKysely.ts +3 -3
- package/src/Evolu/Relay.ts +17 -12
- package/src/Evolu/Schema.ts +271 -66
- package/src/Evolu/Storage.ts +263 -55
- package/src/Evolu/Sync.ts +758 -37
- package/src/Evolu/Timestamp.ts +30 -35
- package/src/ManyToManyMap.ts +127 -24
- package/src/Random.ts +3 -2
- package/src/RefCountedResourceManager.ts +368 -0
- package/src/Result.ts +149 -23
- package/src/Sqlite.ts +59 -24
- package/src/Task.ts +779 -0
- package/src/Time.ts +168 -4
- package/src/Type.ts +657 -695
- package/src/WebSocket.ts +23 -17
- package/src/Worker.ts +72 -23
- package/src/index.ts +2 -3
- package/dist/src/Callbacks.d.ts +0 -20
- package/dist/src/Callbacks.d.ts.map +0 -1
- package/dist/src/Callbacks.js +0 -18
- package/dist/src/Evolu/Config.d.ts +0 -82
- package/dist/src/Evolu/Config.d.ts.map +0 -1
- package/dist/src/Evolu/Config.js +0 -9
- package/dist/src/Evolu/Kysely.d.ts +0 -6
- package/dist/src/Evolu/Kysely.d.ts.map +0 -1
- package/dist/src/Evolu/Kysely.js +0 -21
- package/dist/src/NanoId.d.ts +0 -27
- package/dist/src/NanoId.d.ts.map +0 -1
- package/dist/src/NanoId.js +0 -6
- package/dist/src/Promise.d.ts +0 -180
- package/dist/src/Promise.d.ts.map +0 -1
- package/dist/src/Promise.js +0 -176
- package/src/Callbacks.ts +0 -43
- package/src/Evolu/Config.ts +0 -97
- package/src/Evolu/Kysely.ts +0 -38
- package/src/NanoId.ts +0 -39
- package/src/Promise.ts +0 -295
package/src/Sqlite.ts
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
|
+
import { Brand } from "./Brand.js";
|
|
1
2
|
import { ConsoleDep } from "./Console.js";
|
|
3
|
+
import { EncryptionKey } from "./Crypto.js";
|
|
2
4
|
import { createTransferableError, TransferableError } from "./Error.js";
|
|
3
5
|
import { err, ok, Result, tryAsync, trySync } from "./Result.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
Null,
|
|
7
|
-
Number,
|
|
8
|
-
SimpleName,
|
|
9
|
-
String,
|
|
10
|
-
transform,
|
|
11
|
-
Uint8Array,
|
|
12
|
-
union,
|
|
13
|
-
} from "./Type.js";
|
|
14
|
-
import { Predicate, IntentionalNever } from "./Types.js";
|
|
15
|
-
import { Brand } from "./Brand.js";
|
|
6
|
+
import { Null, Number, SimpleName, String, Uint8Array, union } from "./Type.js";
|
|
7
|
+
import { IntentionalNever, Predicate } from "./Types.js";
|
|
16
8
|
|
|
17
9
|
/**
|
|
18
10
|
* SQLite driver interface. This is the minimal interface that platform-specific
|
|
@@ -34,6 +26,7 @@ export interface CreateSqliteDriverDep {
|
|
|
34
26
|
|
|
35
27
|
export interface SqliteDriverOptions {
|
|
36
28
|
memory?: boolean;
|
|
29
|
+
encryptionKey?: EncryptionKey | undefined;
|
|
37
30
|
}
|
|
38
31
|
|
|
39
32
|
/**
|
|
@@ -149,13 +142,13 @@ export const createSqlite =
|
|
|
149
142
|
exec: (query) =>
|
|
150
143
|
trySync(
|
|
151
144
|
() => {
|
|
152
|
-
deps.console?.log("[sql]", query);
|
|
145
|
+
deps.console?.log("[sql]", { query });
|
|
153
146
|
|
|
154
147
|
const result = maybeLogSqliteQueryExecutionTime(query, () =>
|
|
155
148
|
driver.exec(query, isSqlMutation(query.sql)),
|
|
156
149
|
);
|
|
157
150
|
|
|
158
|
-
deps.console?.log("[sql]", result);
|
|
151
|
+
deps.console?.log("[sql]", { result });
|
|
159
152
|
|
|
160
153
|
return result as IntentionalNever;
|
|
161
154
|
},
|
|
@@ -367,8 +360,38 @@ const isSqlMutationRegEx = new RegExp(
|
|
|
367
360
|
"i",
|
|
368
361
|
);
|
|
369
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Removes SQL line comments (--) from a SQL string without using regex to avoid
|
|
365
|
+
* ReDoS vulnerabilities.
|
|
366
|
+
*/
|
|
367
|
+
const removeSqlComments = (sql: string): string => {
|
|
368
|
+
let result = "";
|
|
369
|
+
let i = 0;
|
|
370
|
+
|
|
371
|
+
while (i < sql.length) {
|
|
372
|
+
// Check for comment start
|
|
373
|
+
if (i < sql.length - 1 && sql[i] === "-" && sql[i + 1] === "-") {
|
|
374
|
+
// Skip until end of line or end of string
|
|
375
|
+
i += 2;
|
|
376
|
+
while (i < sql.length && sql[i] !== "\n") {
|
|
377
|
+
i++;
|
|
378
|
+
}
|
|
379
|
+
// Keep the newline if present
|
|
380
|
+
if (i < sql.length && sql[i] === "\n") {
|
|
381
|
+
result += "\n";
|
|
382
|
+
i++;
|
|
383
|
+
}
|
|
384
|
+
} else {
|
|
385
|
+
result += sql[i];
|
|
386
|
+
i++;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return result;
|
|
391
|
+
};
|
|
392
|
+
|
|
370
393
|
export const isSqlMutation: Predicate<string> = (sql) =>
|
|
371
|
-
isSqlMutationRegEx.test(sql
|
|
394
|
+
isSqlMutationRegEx.test(removeSqlComments(sql));
|
|
372
395
|
|
|
373
396
|
export interface SqliteQueryPlanRow {
|
|
374
397
|
id: number;
|
|
@@ -386,13 +409,14 @@ export const explainSqliteQueryPlan =
|
|
|
386
409
|
if (!result.ok) return result;
|
|
387
410
|
|
|
388
411
|
// eslint-disable-next-line no-console
|
|
389
|
-
console.log("
|
|
412
|
+
console.log("[explainSqliteQueryPlan]", query);
|
|
390
413
|
// eslint-disable-next-line no-console
|
|
391
414
|
console.log(
|
|
392
415
|
drawSqliteQueryPlan(
|
|
393
416
|
result.value.rows as unknown as Array<SqliteQueryPlanRow>,
|
|
394
417
|
),
|
|
395
418
|
);
|
|
419
|
+
|
|
396
420
|
return ok();
|
|
397
421
|
};
|
|
398
422
|
|
|
@@ -416,15 +440,26 @@ const drawSqliteQueryPlan = (rows: Array<SqliteQueryPlanRow>): string =>
|
|
|
416
440
|
|
|
417
441
|
/**
|
|
418
442
|
* SQLite represents boolean values using `0` (false) and `1` (true) instead of
|
|
419
|
-
* a dedicated boolean type.
|
|
420
|
-
*
|
|
443
|
+
* a dedicated boolean type.
|
|
444
|
+
*
|
|
445
|
+
* Use {@link sqliteTrue} and {@link sqliteFalse} constants for better
|
|
446
|
+
* readability.
|
|
421
447
|
*
|
|
422
448
|
* See: https://www.sqlite.org/quirks.html#no_separate_boolean_datatype
|
|
423
449
|
*/
|
|
424
|
-
export const SqliteBoolean =
|
|
425
|
-
Boolean,
|
|
426
|
-
union(0, 1),
|
|
427
|
-
(value) => ok(value ? (1 as const) : (0 as const)),
|
|
428
|
-
(value) => value === 1,
|
|
429
|
-
);
|
|
450
|
+
export const SqliteBoolean = union(0, 1);
|
|
430
451
|
export type SqliteBoolean = typeof SqliteBoolean.Type;
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Represents the {@link SqliteBoolean} value for `true`.
|
|
455
|
+
*
|
|
456
|
+
* See {@link SqliteBoolean}.
|
|
457
|
+
*/
|
|
458
|
+
export const sqliteTrue = 1;
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Represents the {@link SqliteBoolean} value for `false`.
|
|
462
|
+
*
|
|
463
|
+
* See {@link SqliteBoolean}.
|
|
464
|
+
*/
|
|
465
|
+
export const sqliteFalse = 0;
|