@evolu/common 1.0.0 → 1.0.2
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/DbWorker.d.ts.map +1 -1
- package/dist/src/DbWorker.js +21 -13
- package/dist/src/Diff.js +1 -1
- package/dist/src/SyncWorker.d.ts.map +1 -1
- package/dist/src/SyncWorker.js +10 -5
- package/package.json +6 -6
- package/src/DbWorker.ts +39 -20
- package/src/Diff.ts +1 -1
- package/src/SyncWorker.ts +16 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbWorker.d.ts","sourceRoot":"","sources":["../../src/DbWorker.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,OAAO,EAGP,KAAK,
|
|
1
|
+
{"version":3,"file":"DbWorker.d.ts","sourceRoot":"","sources":["../../src/DbWorker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/DbWorker.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { hexToBytes } from "@noble/ciphers/utils";
|
|
2
|
-
import { Context, Effect, Function, Layer,
|
|
2
|
+
import { Context, Effect, Function, Layer, Option, ReadonlyArray, Ref, pipe, } from "effect";
|
|
3
3
|
import { Config, ConfigLive } from "./Config.js";
|
|
4
4
|
import { Bip39, NanoId } from "./Crypto.js";
|
|
5
5
|
import { Owner, ensureSchema, lazyInit, someDefectToNoSuchTableOrColumnError, transaction, } from "./Db.js";
|
|
@@ -244,21 +244,29 @@ export const DbWorkerLive = Layer.effect(DbWorker, Effect.gen(function* (_) {
|
|
|
244
244
|
const makeWriteForInitSuccess = (owner, config) => {
|
|
245
245
|
let skipAllBecauseOfReset = false;
|
|
246
246
|
const layer = Layer.mergeAll(ConfigLive(config), Layer.succeed(DbWorkerOnMessage, dbWorker.onMessage), Layer.succeed(Owner, owner), Layer.succeed(SyncWorkerPostMessage, syncWorker.postMessage), Layer.succeed(RowsCacheRef, rowsCacheRef), TimeLive);
|
|
247
|
+
const mapInputToEffect = (input) => {
|
|
248
|
+
switch (input._tag) {
|
|
249
|
+
case "init":
|
|
250
|
+
return makeUnexpectedError(new Error("init must be called once"));
|
|
251
|
+
case "query":
|
|
252
|
+
return query(input);
|
|
253
|
+
case "mutate":
|
|
254
|
+
return mutate(input);
|
|
255
|
+
case "sync":
|
|
256
|
+
return sync(input);
|
|
257
|
+
case "reset":
|
|
258
|
+
skipAllBecauseOfReset = true;
|
|
259
|
+
return reset(input);
|
|
260
|
+
case "ensureSchema":
|
|
261
|
+
return ensureSchema(input.tables);
|
|
262
|
+
case "SyncWorkerOutputSyncResponse":
|
|
263
|
+
return handleSyncResponse(input);
|
|
264
|
+
}
|
|
265
|
+
};
|
|
247
266
|
return (input) => {
|
|
248
267
|
if (skipAllBecauseOfReset)
|
|
249
268
|
return Promise.resolve(undefined);
|
|
250
|
-
return
|
|
251
|
-
init: () => makeUnexpectedError(new Error("init must be called once")),
|
|
252
|
-
query,
|
|
253
|
-
mutate,
|
|
254
|
-
sync,
|
|
255
|
-
reset: (input) => {
|
|
256
|
-
skipAllBecauseOfReset = true;
|
|
257
|
-
return reset(input);
|
|
258
|
-
},
|
|
259
|
-
ensureSchema: (input) => ensureSchema(input.tables),
|
|
260
|
-
SyncWorkerOutputSyncResponse: handleSyncResponse,
|
|
261
|
-
}), Effect.provide(layer), run);
|
|
269
|
+
return mapInputToEffect(input).pipe(Effect.provide(layer), run);
|
|
262
270
|
};
|
|
263
271
|
};
|
|
264
272
|
let write = (input) => {
|
package/dist/src/Diff.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncWorker.d.ts","sourceRoot":"","sources":["../../src/SyncWorker.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAGP,KAAK,
|
|
1
|
+
{"version":3,"file":"SyncWorker.d.ts","sourceRoot":"","sources":["../../src/SyncWorker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/SyncWorker.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { concatBytes } from "@noble/ciphers/utils";
|
|
2
2
|
import { BinaryReader, BinaryWriter } from "@protobuf-ts/runtime";
|
|
3
|
-
import { Context, Effect, Function, Layer,
|
|
3
|
+
import { Context, Effect, Function, Layer, Option, Predicate, ReadonlyArray, absurd, identity, } from "effect";
|
|
4
4
|
import { SecretBox } from "./Crypto.js";
|
|
5
5
|
import { makeUnexpectedError } from "./Errors.js";
|
|
6
6
|
import { merkleTreeToString, unsafeMerkleTreeFromString, } from "./MerkleTree.js";
|
|
@@ -122,11 +122,16 @@ export const SyncWorkerLive = Layer.effect(SyncWorker, Effect.gen(function* (_)
|
|
|
122
122
|
const onError = (error) => Effect.sync(() => {
|
|
123
123
|
syncWorker.onMessage(error);
|
|
124
124
|
});
|
|
125
|
+
const mapInputToEffect = (input) => {
|
|
126
|
+
switch (input._tag) {
|
|
127
|
+
case "sync":
|
|
128
|
+
return sync(input);
|
|
129
|
+
case "syncCompleted":
|
|
130
|
+
return syncLock.release;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
125
133
|
const postMessage = (input) => {
|
|
126
|
-
void
|
|
127
|
-
sync,
|
|
128
|
-
syncCompleted: () => syncLock.release,
|
|
129
|
-
}), Effect.catchAllDefect(makeUnexpectedError), Effect.catchAll(onError), Effect.provideService(SyncLock, syncLock), Effect.provideService(Fetch, fetch), Effect.provideService(SecretBox, secretBox), Effect.provideService(SyncWorkerOnMessage, syncWorker.onMessage), Effect.runPromise);
|
|
134
|
+
void mapInputToEffect(input).pipe(Effect.catchAllDefect(makeUnexpectedError), Effect.catchAll(onError), Effect.provideService(SyncLock, syncLock), Effect.provideService(Fetch, fetch), Effect.provideService(SecretBox, secretBox), Effect.provideService(SyncWorkerOnMessage, syncWorker.onMessage), Effect.runPromise);
|
|
130
135
|
};
|
|
131
136
|
const syncWorker = {
|
|
132
137
|
postMessage,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evolu/common",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Local-first platform designed for privacy, ease of use, and no vendor lock-in to sync and backup people's lifetime data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"evolu",
|
|
@@ -42,20 +42,20 @@
|
|
|
42
42
|
"nanoid": "^5.0.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@effect/schema": "^0.
|
|
45
|
+
"@effect/schema": "^0.39.2",
|
|
46
46
|
"@protobuf-ts/plugin": "^2.9.1",
|
|
47
47
|
"@protobuf-ts/protoc": "^2.9.1",
|
|
48
48
|
"array-shuffle": "^3.0.0",
|
|
49
|
-
"effect": "2.0.0-next.
|
|
49
|
+
"effect": "2.0.0-next.39",
|
|
50
50
|
"eslint": "^8.50.0",
|
|
51
51
|
"typescript": "^5.2.2",
|
|
52
|
-
"vitest": "^0.34.
|
|
52
|
+
"vitest": "^0.34.6",
|
|
53
53
|
"@evolu/tsconfig": "0.0.2",
|
|
54
54
|
"eslint-config-evolu": "0.0.2"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
|
-
"@effect/schema": "^0.
|
|
58
|
-
"effect": "2.0.0-next.
|
|
57
|
+
"@effect/schema": "^0.39.2",
|
|
58
|
+
"effect": "2.0.0-next.39"
|
|
59
59
|
},
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
package/src/DbWorker.ts
CHANGED
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
Effect,
|
|
6
6
|
Function,
|
|
7
7
|
Layer,
|
|
8
|
-
Match,
|
|
9
8
|
Option,
|
|
10
9
|
ReadonlyArray,
|
|
11
10
|
ReadonlyRecord,
|
|
@@ -25,7 +24,7 @@ import {
|
|
|
25
24
|
transaction,
|
|
26
25
|
} from "./Db.js";
|
|
27
26
|
import { QueryPatches, makePatches } from "./Diff.js";
|
|
28
|
-
import { EvoluError, makeUnexpectedError } from "./Errors.js";
|
|
27
|
+
import { EvoluError, UnexpectedError, makeUnexpectedError } from "./Errors.js";
|
|
29
28
|
import {
|
|
30
29
|
MerkleTree,
|
|
31
30
|
diffMerkleTrees,
|
|
@@ -631,26 +630,46 @@ export const DbWorkerLive = Layer.effect(
|
|
|
631
630
|
TimeLive,
|
|
632
631
|
);
|
|
633
632
|
|
|
633
|
+
const mapInputToEffect = (
|
|
634
|
+
input: DbWorkerInput,
|
|
635
|
+
): Effect.Effect<
|
|
636
|
+
| Sqlite
|
|
637
|
+
| RowsCacheRef
|
|
638
|
+
| DbWorkerOnMessage
|
|
639
|
+
| Owner
|
|
640
|
+
| Time
|
|
641
|
+
| Config
|
|
642
|
+
| SyncWorkerPostMessage
|
|
643
|
+
| Bip39
|
|
644
|
+
| NanoId,
|
|
645
|
+
| UnexpectedError
|
|
646
|
+
| TimestampDriftError
|
|
647
|
+
| TimestampCounterOverflowError
|
|
648
|
+
| TimestampError,
|
|
649
|
+
void
|
|
650
|
+
> => {
|
|
651
|
+
switch (input._tag) {
|
|
652
|
+
case "init":
|
|
653
|
+
return makeUnexpectedError(new Error("init must be called once"));
|
|
654
|
+
case "query":
|
|
655
|
+
return query(input);
|
|
656
|
+
case "mutate":
|
|
657
|
+
return mutate(input);
|
|
658
|
+
case "sync":
|
|
659
|
+
return sync(input);
|
|
660
|
+
case "reset":
|
|
661
|
+
skipAllBecauseOfReset = true;
|
|
662
|
+
return reset(input);
|
|
663
|
+
case "ensureSchema":
|
|
664
|
+
return ensureSchema(input.tables);
|
|
665
|
+
case "SyncWorkerOutputSyncResponse":
|
|
666
|
+
return handleSyncResponse(input);
|
|
667
|
+
}
|
|
668
|
+
};
|
|
669
|
+
|
|
634
670
|
return (input) => {
|
|
635
671
|
if (skipAllBecauseOfReset) return Promise.resolve(undefined);
|
|
636
|
-
|
|
637
|
-
return Match.value(input).pipe(
|
|
638
|
-
Match.tagsExhaustive({
|
|
639
|
-
init: () =>
|
|
640
|
-
makeUnexpectedError(new Error("init must be called once")),
|
|
641
|
-
query,
|
|
642
|
-
mutate,
|
|
643
|
-
sync,
|
|
644
|
-
reset: (input) => {
|
|
645
|
-
skipAllBecauseOfReset = true;
|
|
646
|
-
return reset(input);
|
|
647
|
-
},
|
|
648
|
-
ensureSchema: (input) => ensureSchema(input.tables),
|
|
649
|
-
SyncWorkerOutputSyncResponse: handleSyncResponse,
|
|
650
|
-
}),
|
|
651
|
-
Effect.provide(layer),
|
|
652
|
-
run,
|
|
653
|
-
);
|
|
672
|
+
return mapInputToEffect(input).pipe(Effect.provide(layer), run);
|
|
654
673
|
};
|
|
655
674
|
};
|
|
656
675
|
|
package/src/Diff.ts
CHANGED
package/src/SyncWorker.ts
CHANGED
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
Effect,
|
|
6
6
|
Function,
|
|
7
7
|
Layer,
|
|
8
|
-
Match,
|
|
9
8
|
Option,
|
|
10
9
|
Predicate,
|
|
11
10
|
ReadonlyArray,
|
|
@@ -318,12 +317,23 @@ export const SyncWorkerLive = Layer.effect(
|
|
|
318
317
|
syncWorker.onMessage(error);
|
|
319
318
|
});
|
|
320
319
|
|
|
320
|
+
const mapInputToEffect = (
|
|
321
|
+
input: SyncWorkerInput,
|
|
322
|
+
): Effect.Effect<
|
|
323
|
+
SyncLock | SyncWorkerOnMessage | Fetch | SecretBox,
|
|
324
|
+
never,
|
|
325
|
+
void
|
|
326
|
+
> => {
|
|
327
|
+
switch (input._tag) {
|
|
328
|
+
case "sync":
|
|
329
|
+
return sync(input);
|
|
330
|
+
case "syncCompleted":
|
|
331
|
+
return syncLock.release;
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
|
|
321
335
|
const postMessage: SyncWorker["postMessage"] = (input) => {
|
|
322
|
-
void
|
|
323
|
-
Match.tagsExhaustive({
|
|
324
|
-
sync,
|
|
325
|
-
syncCompleted: () => syncLock.release,
|
|
326
|
-
}),
|
|
336
|
+
void mapInputToEffect(input).pipe(
|
|
327
337
|
Effect.catchAllDefect(makeUnexpectedError),
|
|
328
338
|
Effect.catchAll(onError),
|
|
329
339
|
Effect.provideService(SyncLock, syncLock),
|