@evolu/common 4.1.1 → 5.0.1
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/README.md +1 -1
- package/dist/src/Config.d.ts +27 -30
- package/dist/src/Config.d.ts.map +1 -1
- package/dist/src/Config.js +32 -5
- package/dist/src/Crdt.d.ts +5 -4
- package/dist/src/Crdt.d.ts.map +1 -1
- package/dist/src/Crdt.js +27 -24
- package/dist/src/Crypto.d.ts +16 -10
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +24 -11
- package/dist/src/Db.d.ts +58 -78
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +368 -170
- package/dist/src/Diff.d.ts +9 -3
- package/dist/src/Diff.d.ts.map +1 -1
- package/dist/src/Diff.js +12 -11
- package/dist/src/Error.d.ts +15 -0
- package/dist/src/Error.d.ts.map +1 -0
- package/dist/src/Error.js +14 -0
- package/dist/src/Evolu.d.ts +139 -91
- package/dist/src/Evolu.d.ts.map +1 -1
- package/dist/src/Evolu.js +267 -239
- package/dist/src/Model.d.ts +52 -0
- package/dist/src/Model.d.ts.map +1 -1
- package/dist/src/Model.js +47 -5
- package/dist/src/Owner.d.ts.map +1 -1
- package/dist/src/Owner.js +14 -8
- package/dist/src/Platform.d.ts +24 -34
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +9 -31
- package/dist/src/Public.d.ts +3 -5
- package/dist/src/Public.d.ts.map +1 -1
- package/dist/src/Public.js +2 -3
- package/dist/src/Sqlite.d.ts +25 -16
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +28 -20
- package/dist/src/Store.d.ts.map +1 -1
- package/dist/src/Sync.d.ts +70 -0
- package/dist/src/Sync.d.ts.map +1 -0
- package/dist/src/Sync.js +126 -0
- package/dist/src/index.d.ts +2 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -5
- package/package.json +12 -10
- package/src/Config.ts +77 -36
- package/src/Crdt.ts +61 -76
- package/src/Crypto.ts +83 -60
- package/src/Db.ts +782 -352
- package/src/Diff.ts +23 -21
- package/src/Error.ts +29 -0
- package/src/Evolu.ts +599 -499
- package/src/Model.ts +102 -6
- package/src/Owner.ts +24 -24
- package/src/Platform.ts +33 -81
- package/src/Public.ts +3 -5
- package/src/Sqlite.ts +81 -44
- package/src/Sync.ts +306 -0
- package/src/index.ts +2 -5
- package/dist/src/DbWorker.d.ts +0 -82
- package/dist/src/DbWorker.d.ts.map +0 -1
- package/dist/src/DbWorker.js +0 -335
- package/dist/src/ErrorStore.d.ts +0 -29
- package/dist/src/ErrorStore.d.ts.map +0 -1
- package/dist/src/ErrorStore.js +0 -13
- package/dist/src/OnCompletes.d.ts +0 -14
- package/dist/src/OnCompletes.d.ts.map +0 -1
- package/dist/src/OnCompletes.js +0 -25
- package/dist/src/SyncWorker.d.ts +0 -80
- package/dist/src/SyncWorker.d.ts.map +0 -1
- package/dist/src/SyncWorker.js +0 -150
- package/dist/src/Types.d.ts +0 -13
- package/dist/src/Types.d.ts.map +0 -1
- package/dist/src/Types.js +0 -1
- package/src/DbWorker.ts +0 -721
- package/src/ErrorStore.ts +0 -46
- package/src/OnCompletes.ts +0 -51
- package/src/SyncWorker.ts +0 -361
- package/src/Types.ts +0 -11
package/src/Diff.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import * as Arr from "effect/Array";
|
|
1
2
|
import * as Predicate from "effect/Predicate";
|
|
2
|
-
import
|
|
3
|
-
import { Query, Row } from "./Db.js";
|
|
3
|
+
import type { Query, Row } from "./Db.js";
|
|
4
4
|
import { Value } from "./Sqlite.js";
|
|
5
5
|
|
|
6
6
|
export interface QueryPatches {
|
|
@@ -21,25 +21,27 @@ export interface ReplaceAtPatch {
|
|
|
21
21
|
readonly value: Row;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export const applyPatches =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
export const applyPatches = (
|
|
25
|
+
patches: ReadonlyArray<Patch>,
|
|
26
|
+
current: ReadonlyArray<Row>,
|
|
27
|
+
): ReadonlyArray<Row> =>
|
|
28
|
+
patches.reduce((next, patch) => {
|
|
29
|
+
switch (patch.op) {
|
|
30
|
+
case "replaceAll":
|
|
31
|
+
return patch.value;
|
|
32
|
+
case "replaceAt": {
|
|
33
|
+
return Arr.replace(next, patch.index, patch.value);
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
}
|
|
36
|
+
}, current);
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
/**
|
|
39
|
+
* We detect only changes in the whole result and in-place edits. In the future,
|
|
40
|
+
* we will add more heuristics. We will probably not implement the Myers diff
|
|
41
|
+
* algorithm because it's faster to rerender all than to compute many detailed
|
|
42
|
+
* patches. We will only implement logic a developer would implement manually,
|
|
43
|
+
* if necessary.
|
|
44
|
+
*/
|
|
43
45
|
export const makePatches = (
|
|
44
46
|
previousRows: ReadonlyArray<Row> | undefined,
|
|
45
47
|
nextRows: ReadonlyArray<Row>,
|
|
@@ -90,8 +92,8 @@ export const areEqual = (
|
|
|
90
92
|
return true;
|
|
91
93
|
}
|
|
92
94
|
|
|
93
|
-
const aIsArray =
|
|
94
|
-
const bIsArray =
|
|
95
|
+
const aIsArray = Arr.isArray(a);
|
|
96
|
+
const bIsArray = Arr.isArray(b);
|
|
95
97
|
if (aIsArray && bIsArray) {
|
|
96
98
|
if (a.length !== b.length) return false;
|
|
97
99
|
for (let i = 0; i < a.length; i++)
|
package/src/Error.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TimestampError } from "./Crdt.js";
|
|
2
|
+
|
|
3
|
+
/** The EvoluError type is used to represent errors that can occur in Evolu. */
|
|
4
|
+
export type EvoluError = TimestampError | UnexpectedError;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* UnexpectedError represents errors that can occur unexpectedly anywhere, even
|
|
8
|
+
* in third-party libraries, because Evolu uses Effect to track all errors.
|
|
9
|
+
*/
|
|
10
|
+
export interface UnexpectedError {
|
|
11
|
+
readonly _tag: "UnexpectedError";
|
|
12
|
+
readonly error: unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const makeUnexpectedError = (error: unknown): UnexpectedError => ({
|
|
16
|
+
_tag: "UnexpectedError",
|
|
17
|
+
error,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
/** Error isn't a structured cloneable object. */
|
|
21
|
+
export const ensureTransferableError = (error: unknown): unknown => {
|
|
22
|
+
if (error instanceof Error)
|
|
23
|
+
return {
|
|
24
|
+
message: error.message,
|
|
25
|
+
name: error.name,
|
|
26
|
+
stack: error.stack,
|
|
27
|
+
};
|
|
28
|
+
return error;
|
|
29
|
+
};
|