@evolu/common 3.1.2 → 3.1.3

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 (53) hide show
  1. package/dist/src/Config.d.ts +1 -1
  2. package/dist/src/Config.d.ts.map +1 -1
  3. package/dist/src/Config.js +1 -1
  4. package/dist/src/Crdt.d.ts +7 -7
  5. package/dist/src/Crdt.d.ts.map +1 -1
  6. package/dist/src/Crdt.js +1 -1
  7. package/dist/src/Crypto.d.ts +11 -11
  8. package/dist/src/Crypto.d.ts.map +1 -1
  9. package/dist/src/Crypto.js +3 -3
  10. package/dist/src/Db.d.ts +20 -20
  11. package/dist/src/Db.d.ts.map +1 -1
  12. package/dist/src/Db.js +1 -1
  13. package/dist/src/DbWorker.d.ts +2 -2
  14. package/dist/src/DbWorker.d.ts.map +1 -1
  15. package/dist/src/DbWorker.js +3 -3
  16. package/dist/src/ErrorStore.d.ts +2 -2
  17. package/dist/src/ErrorStore.d.ts.map +1 -1
  18. package/dist/src/Evolu.d.ts +5 -5
  19. package/dist/src/Evolu.d.ts.map +1 -1
  20. package/dist/src/Evolu.js +6 -6
  21. package/dist/src/Model.d.ts +8 -8
  22. package/dist/src/OnCompletes.d.ts +3 -3
  23. package/dist/src/OnCompletes.d.ts.map +1 -1
  24. package/dist/src/OnCompletes.js +1 -1
  25. package/dist/src/Owner.d.ts +1 -1
  26. package/dist/src/Owner.d.ts.map +1 -1
  27. package/dist/src/Owner.js +1 -1
  28. package/dist/src/Platform.d.ts +5 -5
  29. package/dist/src/Platform.d.ts.map +1 -1
  30. package/dist/src/Platform.js +5 -5
  31. package/dist/src/Sqlite.d.ts +1 -1
  32. package/dist/src/Sqlite.d.ts.map +1 -1
  33. package/dist/src/Sqlite.js +1 -1
  34. package/dist/src/Store.d.ts +2 -2
  35. package/dist/src/Store.d.ts.map +1 -1
  36. package/dist/src/SyncWorker.d.ts +1 -1
  37. package/dist/src/SyncWorker.d.ts.map +1 -1
  38. package/dist/src/SyncWorker.js +3 -3
  39. package/package.json +6 -6
  40. package/src/Config.ts +2 -4
  41. package/src/Crdt.ts +8 -8
  42. package/src/Crypto.ts +11 -13
  43. package/src/Db.ts +17 -18
  44. package/src/DbWorker.ts +24 -22
  45. package/src/ErrorStore.ts +1 -1
  46. package/src/Evolu.ts +14 -10
  47. package/src/Model.ts +1 -1
  48. package/src/OnCompletes.ts +5 -5
  49. package/src/Owner.ts +2 -2
  50. package/src/Platform.ts +11 -9
  51. package/src/Sqlite.ts +2 -4
  52. package/src/Store.ts +2 -4
  53. package/src/SyncWorker.ts +12 -8
package/dist/src/Owner.js CHANGED
@@ -2,7 +2,7 @@ import * as Context from "effect/Context";
2
2
  import * as Effect from "effect/Effect";
3
3
  import { urlAlphabet } from "nanoid";
4
4
  import { Bip39, slip21Derive } from "./Crypto.js";
5
- export const Owner = Context.Tag();
5
+ export const Owner = Context.GenericTag("@services/Owner");
6
6
  export const makeOwner = (mnemonic) => Effect.gen(function* (_) {
7
7
  const bip39 = yield* _(Bip39);
8
8
  if (mnemonic == null)
@@ -10,12 +10,12 @@ export interface SyncLock {
10
10
  * Try to acquire a sync lock. The caller must not call sync if a sync lock
11
11
  * can't be acquired.
12
12
  */
13
- readonly acquire: Effect.Effect<never, never, boolean>;
13
+ readonly acquire: Effect.Effect<boolean>;
14
14
  /** Release a sync lock. */
15
- readonly release: Effect.Effect<never, never, void>;
15
+ readonly release: Effect.Effect<void>;
16
16
  }
17
17
  export declare const SyncLock: Context.Tag<SyncLock, SyncLock>;
18
- export type Fetch = (url: string, body: Uint8Array) => Effect.Effect<never, FetchError, Response>;
18
+ export type Fetch = (url: string, body: Uint8Array) => Effect.Effect<Response, FetchError>;
19
19
  export declare const Fetch: Context.Tag<Fetch, Fetch>;
20
20
  /**
21
21
  * This error occurs when there is a problem with the network connection, or the
@@ -24,13 +24,13 @@ export declare const Fetch: Context.Tag<Fetch, Fetch>;
24
24
  export interface FetchError {
25
25
  readonly _tag: "FetchError";
26
26
  }
27
- export declare const FetchLive: Layer.Layer<never, never, Fetch>;
27
+ export declare const FetchLive: Layer.Layer<Fetch, never, never>;
28
28
  interface AppStateConfig {
29
29
  readonly onRequestSync: () => void;
30
30
  }
31
31
  export interface AppState {
32
32
  readonly init: (config: AppStateConfig) => void;
33
- readonly reset: Effect.Effect<never, never, void>;
33
+ readonly reset: Effect.Effect<void>;
34
34
  }
35
35
  export declare const AppState: Context.Tag<AppState, AppState>;
36
36
  /** To detect whether DOM can be used. */
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,eAAe,GACf,kBAAkB,GAClB,cAAc,CAAC;AAEnB,eAAO,MAAM,YAAY,yCAA8B,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAEvD,eAAO,MAAM,SAAS,mCAA2B,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEvD,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;CACrD;AAED,eAAO,MAAM,QAAQ,iCAA0B,CAAC;AAEhD,MAAM,MAAM,KAAK,GAAG,CAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,KACb,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,KAAK,2BAAuB,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,kCAgBrB,CAAC;AAEF,UAAU,cAAc;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,QAAQ,iCAA0B,CAAC;AAEhD,yCAAyC;AACzC,eAAO,MAAM,SAAS,SAYlB,CAAC"}
1
+ {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,eAAe,GACf,kBAAkB,GAClB,cAAc,CAAC;AAEnB,eAAO,MAAM,YAAY,yCAExB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAEvD,eAAO,MAAM,SAAS,mCAAuD,CAAC;AAE9E,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzC,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,iCAAqD,CAAC;AAE3E,MAAM,MAAM,KAAK,GAAG,CAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,KACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEzC,eAAO,MAAM,KAAK,2BAA+C,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,kCAgBrB,CAAC;AAEF,UAAU,cAAc;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,QAAQ,iCAAqD,CAAC;AAE3E,yCAAyC;AACzC,eAAO,MAAM,SAAS,SAYlB,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import * as Context from "effect/Context";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Layer from "effect/Layer";
4
- export const PlatformName = Context.Tag();
5
- export const FlushSync = Context.Tag();
6
- export const SyncLock = Context.Tag();
7
- export const Fetch = Context.Tag();
4
+ export const PlatformName = Context.GenericTag("@services/PlatformName");
5
+ export const FlushSync = Context.GenericTag("@services/FlushSync");
6
+ export const SyncLock = Context.GenericTag("@services/SyncLock");
7
+ export const Fetch = Context.GenericTag("@services/Fetch");
8
8
  export const FetchLive = Layer.succeed(Fetch, Fetch.of((url, body) => Effect.tryPromise({
9
9
  try: () => fetch(url, {
10
10
  method: "POST",
@@ -16,7 +16,7 @@ export const FetchLive = Layer.succeed(Fetch, Fetch.of((url, body) => Effect.try
16
16
  }),
17
17
  catch: () => ({ _tag: "FetchError" }),
18
18
  })));
19
- export const AppState = Context.Tag();
19
+ export const AppState = Context.GenericTag("@services/AppState");
20
20
  /** To detect whether DOM can be used. */
21
21
  export const canUseDom = (() => {
22
22
  // IDK why try-catch is necessary, but it is.
@@ -3,7 +3,7 @@ import * as Effect from "effect/Effect";
3
3
  import * as Predicate from "effect/Predicate";
4
4
  import * as ReadonlyRecord from "effect/ReadonlyRecord";
5
5
  export interface Sqlite {
6
- readonly exec: (arg: string | SqliteQuery) => Effect.Effect<never, never, ExecResult>;
6
+ readonly exec: (arg: string | SqliteQuery) => Effect.Effect<ExecResult>;
7
7
  }
8
8
  export declare const Sqlite: Context.Tag<Sqlite, Sqlite>;
9
9
  export interface SqliteQuery {
@@ -1 +1 @@
1
- {"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,CACb,GAAG,EAAE,MAAM,GAAG,WAAW,KACtB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,MAAM,6BAAwB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAC;AACvD,KAAK,UAAU,GAAG,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AACrC,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtE,UAAU,UAAU;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,UAAU,CACpD,KAAK,EACL,iBAAiB,CAE4D,CAAC;AAEhF,eAAO,MAAM,oBAAoB,WACvB,cAAc,KAAK,CAAC,KAC3B,WAAW,EAGX,CAAC;AAEJ,eAAO,MAAM,iBAAiB,QAAS,MAAM,GAAG,WAAW,KAAG,WAG7D,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,SAAS,EAAE,KAAG,SAAS,EAC1C,CAAC;AA0BnB,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CACpB,CAAC"}
1
+ {"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;CACzE;AAED,eAAO,MAAM,MAAM,6BAAiD,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAC;AACvD,KAAK,UAAU,GAAG,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AACrC,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtE,UAAU,UAAU;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,UAAU,CACpD,KAAK,EACL,iBAAiB,CAE4D,CAAC;AAEhF,eAAO,MAAM,oBAAoB,WACvB,cAAc,KAAK,CAAC,KAC3B,WAAW,EAGX,CAAC;AAEJ,eAAO,MAAM,iBAAiB,QAAS,MAAM,GAAG,WAAW,KAAG,WAG7D,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,SAAS,EAAE,KAAG,SAAS,EAC1C,CAAC;AA0BnB,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CACpB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import * as Context from "effect/Context";
2
2
  import * as Predicate from "effect/Predicate";
3
- export const Sqlite = Context.Tag();
3
+ export const Sqlite = Context.GenericTag("@services/Sqlite");
4
4
  export const isJsonObjectOrArray = (value) => value !== null && typeof value === "object" && !Predicate.isUint8Array(value);
5
5
  export const valuesToSqliteValues = (values) => values.map((value) => isJsonObjectOrArray(value) ? JSON.stringify(value) : value);
6
6
  export const ensureSqliteQuery = (arg) => {
@@ -4,7 +4,7 @@ export type Unsubscribe = () => void;
4
4
  export interface Store<T> {
5
5
  readonly subscribe: (listener: Listener) => Unsubscribe;
6
6
  readonly getState: () => T;
7
- readonly setState: (state: T) => Effect.Effect<never, never, void>;
7
+ readonly setState: (state: T) => Effect.Effect<void>;
8
8
  }
9
- export declare const makeStore: <T>(initialState: T) => Effect.Effect<never, never, Store<T>>;
9
+ export declare const makeStore: <T>(initialState: T) => Effect.Effect<Store<T>, never, never>;
10
10
  //# sourceMappingURL=Store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/Store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,KAAK,CAAC,CAAC;IAEtB,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAG3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;CACpE;AAED,eAAO,MAAM,SAAS,+DA4BlB,CAAC"}
1
+ {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/Store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,KAAK,CAAC,CAAC;IAEtB,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAG3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,eAAO,MAAM,SAAS,+DA0BlB,CAAC"}
@@ -76,6 +76,6 @@ export interface SyncStateServerError {
76
76
  export interface SyncStatePaymentRequiredError {
77
77
  readonly _tag: "PaymentRequiredError";
78
78
  }
79
- export declare const SyncWorkerLive: Layer.Layer<SecretBox | SyncLock | Fetch, never, SyncWorker>;
79
+ export declare const SyncWorkerLive: Layer.Layer<SyncWorker, never, SecretBox | SyncLock | Fetch>;
80
80
  export {};
81
81
  //# sourceMappingURL=SyncWorker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SyncWorker.d.ts","sourceRoot":"","sources":["../../src/SyncWorker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAGlD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAKtC,OAAO,EACL,UAAU,EACV,MAAM,EACN,SAAS,EACT,eAAe,EAGhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAuB,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOhD,OAAO,EAAqB,KAAK,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED,eAAO,MAAM,UAAU,qCAA4B,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AAE9D,eAAO,MAAM,qBAAqB,sBARF,eAAe,KAAK,IAAI,UAAxB,eAAe,KAAK,IAAI,CAQiB,CAAC;AAE1E,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,4BAA4B,CAAC;AAEjC,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,WAAW,CAAC,UAAU,CAOjB,CAAC;AAEtD,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC;AAED,UAAU,4BAA4B;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC;AAMD,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,4BAA4B,GAC5B,yBAAyB,GACzB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,KAAK,EACV,qBAAqB,GACrB,oBAAoB,GACpB,6BAA6B,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;CACvC;AAiLD,eAAO,MAAM,cAAc,8DAqC1B,CAAC"}
1
+ {"version":3,"file":"SyncWorker.d.ts","sourceRoot":"","sources":["../../src/SyncWorker.ts"],"names":[],"mappings":"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"}
@@ -15,13 +15,13 @@ import { SecretBox } from "./Crypto.js";
15
15
  import { makeUnexpectedError } from "./ErrorStore.js";
16
16
  import { Fetch, SyncLock } from "./Platform.js";
17
17
  import { MessageContent, SyncRequest, SyncResponse, } from "./Protobuf.js";
18
- export const SyncWorker = Context.Tag();
19
- export const SyncWorkerPostMessage = Context.Tag();
18
+ export const SyncWorker = Context.GenericTag("@services/SyncWorker");
19
+ export const SyncWorkerPostMessage = Context.GenericTag("@services/SyncWorkerPostMessage");
20
20
  export const NewMessageEquivalence = (a, b) => a.table === b.table &&
21
21
  a.row === b.row &&
22
22
  a.column === b.column &&
23
23
  JSON.stringify(a.value) === JSON.stringify(b.value);
24
- const SyncWorkerOnMessage = Context.Tag();
24
+ const SyncWorkerOnMessage = Context.GenericTag("@services/SyncWorkerOnMessage");
25
25
  const version1 = new Uint8Array([0, 1]);
26
26
  const valueToProtobuf = (value) => {
27
27
  switch (typeof value) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolu/common",
3
- "version": "3.1.2",
3
+ "version": "3.1.3",
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",
@@ -44,7 +44,7 @@
44
44
  "README.md"
45
45
  ],
46
46
  "dependencies": {
47
- "@noble/ciphers": "^0.4.1",
47
+ "@noble/ciphers": "^0.5.1",
48
48
  "@noble/hashes": "^1.3.3",
49
49
  "@protobuf-ts/runtime": "^2.9.3",
50
50
  "@scure/bip39": "^1.2.2",
@@ -52,11 +52,11 @@
52
52
  "nanoid": "^5.0.5"
53
53
  },
54
54
  "devDependencies": {
55
- "@effect/schema": "^0.61.7",
55
+ "@effect/schema": "^0.62.1",
56
56
  "@protobuf-ts/plugin": "^2.9.3",
57
57
  "@protobuf-ts/protoc": "^2.9.3",
58
58
  "array-shuffle": "^3.0.0",
59
- "effect": "2.2.5",
59
+ "effect": "2.3.1",
60
60
  "eslint": "^8.56.0",
61
61
  "typescript": "^5.3.3",
62
62
  "vitest": "^1.2.2",
@@ -64,8 +64,8 @@
64
64
  "eslint-config-evolu": "1.0.0"
65
65
  },
66
66
  "peerDependencies": {
67
- "@effect/schema": "^0.61.7",
68
- "effect": "2.2.5"
67
+ "@effect/schema": "^0.62.1",
68
+ "effect": "2.3.1"
69
69
  },
70
70
  "publishConfig": {
71
71
  "access": "public"
package/src/Config.ts CHANGED
@@ -18,11 +18,9 @@ export interface Config {
18
18
  readonly maxDrift: number;
19
19
  }
20
20
 
21
- export const Config = Context.Tag<Config>();
21
+ export const Config = Context.GenericTag<Config>("@services/Config");
22
22
 
23
- export const ConfigLive = (
24
- config?: Partial<Config>,
25
- ): Layer.Layer<never, never, Config> =>
23
+ export const ConfigLive = (config?: Partial<Config>): Layer.Layer<Config> =>
26
24
  Layer.succeed(
27
25
  Config,
28
26
  Config.of({
package/src/Crdt.ts CHANGED
@@ -98,10 +98,10 @@ export const makeInitialTimestamp = NanoId.pipe(
98
98
  );
99
99
 
100
100
  export interface Time {
101
- readonly now: Effect.Effect<never, TimestampTimeOutOfRangeError, Millis>;
101
+ readonly now: Effect.Effect<Millis, TimestampTimeOutOfRangeError>;
102
102
  }
103
103
 
104
- export const Time = Context.Tag<Time>();
104
+ export const Time = Context.GenericTag<Time>("@services/Time");
105
105
 
106
106
  export const TimeLive = Layer.succeed(
107
107
  Time,
@@ -149,9 +149,9 @@ export interface TimestampTimeOutOfRangeError {
149
149
  const getNextMillis = (
150
150
  millis: ReadonlyArray<Millis>,
151
151
  ): Effect.Effect<
152
- Time | Config,
152
+ Millis,
153
153
  TimestampDriftError | TimestampTimeOutOfRangeError,
154
- Millis
154
+ Time | Config
155
155
  > =>
156
156
  Effect.gen(function* (_) {
157
157
  const time = yield* _(Time);
@@ -186,11 +186,11 @@ const counterMin = S.decodeSync(Counter)(0);
186
186
  export const sendTimestamp = (
187
187
  timestamp: Timestamp,
188
188
  ): Effect.Effect<
189
- Time | Config,
189
+ Timestamp,
190
190
  | TimestampDriftError
191
191
  | TimestampCounterOverflowError
192
192
  | TimestampTimeOutOfRangeError,
193
- Timestamp
193
+ Time | Config
194
194
  > =>
195
195
  Effect.gen(function* (_) {
196
196
  const millis = yield* _(getNextMillis([timestamp.millis]));
@@ -208,12 +208,12 @@ export const receiveTimestamp = ({
208
208
  readonly local: Timestamp;
209
209
  readonly remote: Timestamp;
210
210
  }): Effect.Effect<
211
- Time | Config,
211
+ Timestamp,
212
212
  | TimestampDriftError
213
213
  | TimestampCounterOverflowError
214
214
  | TimestampDuplicateNodeError
215
215
  | TimestampTimeOutOfRangeError,
216
- Timestamp
216
+ Time | Config
217
217
  > =>
218
218
  Effect.gen(function* (_) {
219
219
  if (local.node === remote.node)
package/src/Crypto.ts CHANGED
@@ -12,18 +12,16 @@ import { customAlphabet, nanoid } from "nanoid";
12
12
 
13
13
  // TODO: Add dynamic import error.
14
14
  export interface Bip39 {
15
- readonly make: Effect.Effect<never, never, Mnemonic>;
15
+ readonly make: Effect.Effect<Mnemonic>;
16
16
 
17
- readonly toSeed: (
18
- mnemonic: Mnemonic,
19
- ) => Effect.Effect<never, never, Uint8Array>;
17
+ readonly toSeed: (mnemonic: Mnemonic) => Effect.Effect<Uint8Array>;
20
18
 
21
19
  readonly parse: (
22
20
  mnemonic: string,
23
- ) => Effect.Effect<never, InvalidMnemonicError, Mnemonic>;
21
+ ) => Effect.Effect<Mnemonic, InvalidMnemonicError>;
24
22
  }
25
23
 
26
- export const Bip39 = Context.Tag<Bip39>();
24
+ export const Bip39 = Context.GenericTag<Bip39>("@services/Bip39");
27
25
 
28
26
  export interface InvalidMnemonicError {
29
27
  readonly _tag: "InvalidMnemonicError";
@@ -39,11 +37,11 @@ export interface InvalidMnemonicError {
39
37
  export type Mnemonic = string & Brand.Brand<"Mnemonic">;
40
38
 
41
39
  export interface NanoId {
42
- readonly nanoid: Effect.Effect<never, never, string>;
43
- readonly nanoidAsNodeId: Effect.Effect<never, never, NodeId>;
40
+ readonly nanoid: Effect.Effect<string>;
41
+ readonly nanoidAsNodeId: Effect.Effect<NodeId>;
44
42
  }
45
43
 
46
- export const NanoId = Context.Tag<NanoId>();
44
+ export const NanoId = Context.GenericTag<NanoId>("@services/NanoId");
47
45
 
48
46
  export const NodeId = S.string.pipe(
49
47
  S.pattern(/^[\w-]{16}$/),
@@ -66,7 +64,7 @@ export const NanoIdLive = Layer.succeed(
66
64
  export const slip21Derive = (
67
65
  seed: Uint8Array,
68
66
  path: ReadonlyArray<string>,
69
- ): Effect.Effect<never, never, Uint8Array> =>
67
+ ): Effect.Effect<Uint8Array> =>
70
68
  Effect.sync(() => {
71
69
  let m = hmac(sha512, "Symmetric key seed", seed);
72
70
  for (let i = 0; i < path.length; i++) {
@@ -84,15 +82,15 @@ export interface SecretBox {
84
82
  readonly seal: (
85
83
  key: Uint8Array,
86
84
  plaintext: Uint8Array,
87
- ) => Effect.Effect<never, never, Uint8Array>;
85
+ ) => Effect.Effect<Uint8Array>;
88
86
 
89
87
  readonly open: (
90
88
  key: Uint8Array,
91
89
  ciphertext: Uint8Array,
92
- ) => Effect.Effect<never, never, Uint8Array>;
90
+ ) => Effect.Effect<Uint8Array>;
93
91
  }
94
92
 
95
- export const SecretBox = Context.Tag<SecretBox>();
93
+ export const SecretBox = Context.GenericTag<SecretBox>("@services/SecretBox");
96
94
 
97
95
  export const SecretBoxLive = Layer.succeed(
98
96
  SecretBox,
package/src/Db.ts CHANGED
@@ -73,12 +73,11 @@ export const table = <Fields extends TableFields>(
73
73
  ? ValidateFieldsNames<Fields> extends true
74
74
  ? ValidateFieldsHasId<Fields> extends true
75
75
  ? S.Schema<
76
- never,
77
76
  Types.Simplify<
78
- S.FromStruct<Fields> & S.Schema.From<typeof ReservedColumns>
77
+ S.ToStruct<Fields> & S.Schema.To<typeof ReservedColumns>
79
78
  >,
80
79
  Types.Simplify<
81
- S.ToStruct<Fields> & S.Schema.To<typeof ReservedColumns>
80
+ S.FromStruct<Fields> & S.Schema.From<typeof ReservedColumns>
82
81
  >
83
82
  >
84
83
  : EvoluTypeError<"table() called without id column.">
@@ -92,7 +91,7 @@ const ReservedColumns = S.struct({
92
91
  isDeleted: SqliteBoolean,
93
92
  });
94
93
 
95
- type TableFields = Record<string, S.Schema<never, any, any>>;
94
+ type TableFields = Record<string, S.Schema<any>>;
96
95
 
97
96
  type ValidateFieldsTypes<Fields extends TableFields> =
98
97
  keyof Fields extends infer K
@@ -100,7 +99,7 @@ type ValidateFieldsTypes<Fields extends TableFields> =
100
99
  ? Fields[K] extends TableFields
101
100
  ? ValidateFieldsTypes<Fields[K]>
102
101
  : // eslint-disable-next-line @typescript-eslint/no-unused-vars
103
- Fields[K] extends S.Schema<never, infer _I, infer A>
102
+ Fields[K] extends S.Schema<infer A, infer _I>
104
103
  ? A extends Value
105
104
  ? true
106
105
  : false
@@ -259,9 +258,9 @@ export interface Table {
259
258
 
260
259
  // https://github.com/Effect-TS/schema/releases/tag/v0.18.0
261
260
  const getPropertySignatures = <I extends { [K in keyof A]: any }, A>(
262
- schema: S.Schema<never, I, A>,
263
- ): { [K in keyof A]: S.Schema<never, I[K], A[K]> } => {
264
- const out: Record<PropertyKey, S.Schema<never, any, any>> = {};
261
+ schema: S.Schema<A, I>,
262
+ ): { [K in keyof A]: S.Schema<A[K], I[K]> } => {
263
+ const out: Record<PropertyKey, S.Schema<any>> = {};
265
264
  const propertySignatures = AST.getPropertySignatures(schema.ast);
266
265
  for (let i = 0; i < propertySignatures.length; i++) {
267
266
  const propertySignature = propertySignatures[i];
@@ -271,7 +270,7 @@ const getPropertySignatures = <I extends { [K in keyof A]: any }, A>(
271
270
  return out as any;
272
271
  };
273
272
 
274
- export const schemaToTables = (schema: S.Schema<never, any, any>): Tables =>
273
+ export const schemaToTables = (schema: S.Schema<any>): Tables =>
275
274
  pipe(
276
275
  getPropertySignatures(schema),
277
276
  ReadonlyRecord.toEntries,
@@ -284,8 +283,8 @@ export const schemaToTables = (schema: S.Schema<never, any, any>): Tables =>
284
283
  );
285
284
 
286
285
  export const transaction = <R, E, A>(
287
- effect: Effect.Effect<R, E, A>,
288
- ): Effect.Effect<Sqlite | R, E, A> =>
286
+ effect: Effect.Effect<A, E, R>,
287
+ ): Effect.Effect<A, E, Sqlite | R> =>
289
288
  Effect.flatMap(Sqlite, (sqlite) =>
290
289
  Effect.acquireUseRelease(
291
290
  sqlite.exec("BEGIN"),
@@ -323,7 +322,7 @@ export const someDefectToNoSuchTableOrColumnError = Effect.catchSomeDefect(
323
322
 
324
323
  export const lazyInit = (
325
324
  mnemonic?: Mnemonic,
326
- ): Effect.Effect<Sqlite | Bip39 | NanoId, never, Owner> =>
325
+ ): Effect.Effect<Owner, never, Sqlite | Bip39 | NanoId> =>
327
326
  Effect.gen(function* (_) {
328
327
  const [owner, sqlite, initialTimestampString] = yield* _(
329
328
  Effect.all([makeOwner(mnemonic), Sqlite, makeInitialTimestamp], {
@@ -354,9 +353,9 @@ export const lazyInit = (
354
353
  });
355
354
 
356
355
  const getTables: Effect.Effect<
357
- Sqlite,
356
+ ReadonlyArray<string>,
358
357
  never,
359
- ReadonlyArray<string>
358
+ Sqlite
360
359
  > = Sqlite.pipe(
361
360
  Effect.flatMap((sqlite) =>
362
361
  sqlite.exec(`SELECT "name" FROM "sqlite_schema" WHERE "type" = 'table'`),
@@ -370,7 +369,7 @@ const getTables: Effect.Effect<
370
369
  const updateTable = ({
371
370
  name,
372
371
  columns,
373
- }: Table): Effect.Effect<Sqlite, never, void> =>
372
+ }: Table): Effect.Effect<void, never, Sqlite> =>
374
373
  Effect.gen(function* (_) {
375
374
  const sqlite = yield* _(Sqlite);
376
375
  const sql = yield* _(
@@ -396,7 +395,7 @@ const updateTable = ({
396
395
  const createTable = ({
397
396
  name,
398
397
  columns,
399
- }: Table): Effect.Effect<Sqlite, never, void> =>
398
+ }: Table): Effect.Effect<void, never, Sqlite> =>
400
399
  Effect.flatMap(Sqlite, (sqlite) =>
401
400
  sqlite.exec(`
402
401
  CREATE TABLE ${name} (
@@ -414,7 +413,7 @@ const createTable = ({
414
413
 
415
414
  export const ensureSchema = (
416
415
  tables: Tables,
417
- ): Effect.Effect<Sqlite, never, void> =>
416
+ ): Effect.Effect<void, never, Sqlite> =>
418
417
  Effect.flatMap(getTables, (existingTables) =>
419
418
  Effect.forEach(
420
419
  tables,
@@ -427,7 +426,7 @@ export const ensureSchema = (
427
426
  );
428
427
 
429
428
  export type RowsStore = Store<RowsStoreValue>;
430
- export const RowsStore = Context.Tag<RowsStore>();
429
+ export const RowsStore = Context.GenericTag<RowsStore>("@services/RowsStore");
431
430
 
432
431
  type RowsStoreValue = ReadonlyMap<Query, ReadonlyArray<Row>>;
433
432
 
package/src/DbWorker.ts CHANGED
@@ -64,7 +64,7 @@ export interface DbWorker {
64
64
  onMessage: (output: DbWorkerOutput) => void;
65
65
  }
66
66
 
67
- export const DbWorker = Context.Tag<DbWorker>();
67
+ export const DbWorker = Context.GenericTag<DbWorker>("@services/DbWorker");
68
68
 
69
69
  export type DbWorkerInput =
70
70
  | DbWorkerInputInit
@@ -108,7 +108,9 @@ interface DbWorkerInputEnsureSchema {
108
108
 
109
109
  type DbWorkerOnMessage = DbWorker["onMessage"];
110
110
 
111
- const DbWorkerOnMessage = Context.Tag<DbWorkerOnMessage>();
111
+ const DbWorkerOnMessage = Context.GenericTag<DbWorkerOnMessage>(
112
+ "@services/DbWorkerOnMessage",
113
+ );
112
114
 
113
115
  export type DbWorkerOutput =
114
116
  | DbWorkerOutputOnError
@@ -182,7 +184,7 @@ const query = ({
182
184
  }: {
183
185
  readonly queries: Queries;
184
186
  readonly onCompleteIds?: ReadonlyArray<OnCompleteId>;
185
- }): Effect.Effect<Sqlite | RowsStore | DbWorkerOnMessage, never, void> =>
187
+ }): Effect.Effect<void, never, Sqlite | RowsStore | DbWorkerOnMessage> =>
186
188
  Effect.gen(function* (_) {
187
189
  const sqlite = yield* _(Sqlite);
188
190
  const rowsStore = yield* _(RowsStore);
@@ -271,7 +273,7 @@ export const mutationsToNewMessages = (
271
273
 
272
274
  const ensureSchemaByNewMessages = (
273
275
  messages: ReadonlyArray<NewMessage>,
274
- ): Effect.Effect<Sqlite, never, void> =>
276
+ ): Effect.Effect<void, never, Sqlite> =>
275
277
  Effect.gen(function* (_) {
276
278
  const tablesMap = new Map<string, Table>();
277
279
  messages.forEach((message) => {
@@ -295,7 +297,7 @@ const ensureSchemaByNewMessages = (
295
297
  export const upsertValueIntoTableRowColumn = (
296
298
  message: NewMessage,
297
299
  messages: ReadonlyArray<NewMessage>,
298
- ): Effect.Effect<Sqlite, never, void> =>
300
+ ): Effect.Effect<void, never, Sqlite> =>
299
301
  Effect.gen(function* (_) {
300
302
  const sqlite = yield* _(Sqlite);
301
303
 
@@ -320,7 +322,7 @@ const applyMessages = ({
320
322
  }: {
321
323
  merkleTree: MerkleTree;
322
324
  messages: ReadonlyArray<Message>;
323
- }): Effect.Effect<Sqlite, never, MerkleTree> =>
325
+ }): Effect.Effect<MerkleTree, never, Sqlite> =>
324
326
  Effect.gen(function* (_) {
325
327
  const sqlite = yield* _(Sqlite);
326
328
 
@@ -366,7 +368,7 @@ const applyMessages = ({
366
368
  const writeTimestampAndMerkleTree = ({
367
369
  timestamp,
368
370
  merkleTree,
369
- }: TimestampAndMerkleTree): Effect.Effect<Sqlite, never, void> =>
371
+ }: TimestampAndMerkleTree): Effect.Effect<void, never, Sqlite> =>
370
372
  Effect.flatMap(Sqlite, (sqlite) =>
371
373
  sqlite.exec({
372
374
  sql: Sql.updateOwnerTimestampAndMerkleTree,
@@ -381,17 +383,17 @@ const mutate = ({
381
383
  mutations,
382
384
  queries,
383
385
  }: DbWorkerInputMutate): Effect.Effect<
386
+ void,
387
+ | TimestampDriftError
388
+ | TimestampCounterOverflowError
389
+ | TimestampTimeOutOfRangeError,
384
390
  | Sqlite
385
391
  | Owner
386
392
  | Time
387
393
  | Config
388
394
  | RowsStore
389
395
  | DbWorkerOnMessage
390
- | SyncWorkerPostMessage,
391
- | TimestampDriftError
392
- | TimestampCounterOverflowError
393
- | TimestampTimeOutOfRangeError,
394
- void
396
+ | SyncWorkerPostMessage
395
397
  > =>
396
398
  Effect.gen(function* (_) {
397
399
  const [toSync, localOnly] = ReadonlyArray.partition(mutations, (item) =>
@@ -455,9 +457,9 @@ const handleSyncResponse = ({
455
457
  messages,
456
458
  ...response
457
459
  }: SyncWorkerOutputSyncResponse): Effect.Effect<
458
- Sqlite | Time | Config | DbWorkerOnMessage | SyncWorkerPostMessage | Owner,
460
+ void,
459
461
  TimestampError,
460
- void
462
+ Sqlite | Time | Config | DbWorkerOnMessage | SyncWorkerPostMessage | Owner
461
463
  > =>
462
464
  Effect.gen(function* (_) {
463
465
  let { timestamp, merkleTree } = yield* _(readTimestampAndMerkleTree);
@@ -523,14 +525,14 @@ const handleSyncResponse = ({
523
525
  const sync = ({
524
526
  queries,
525
527
  }: DbWorkerInputSync): Effect.Effect<
528
+ void,
529
+ never,
526
530
  | Sqlite
527
531
  | Config
528
532
  | DbWorkerOnMessage
529
533
  | SyncWorkerPostMessage
530
534
  | Owner
531
- | RowsStore,
532
- never,
533
- void
535
+ | RowsStore
534
536
  > =>
535
537
  Effect.gen(function* (_) {
536
538
  if (queries.length > 0) yield* _(query({ queries }));
@@ -547,7 +549,7 @@ const sync = ({
547
549
 
548
550
  const reset = (
549
551
  input: DbWorkerInputReset,
550
- ): Effect.Effect<Sqlite | Bip39 | NanoId | DbWorkerOnMessage, never, void> =>
552
+ ): Effect.Effect<void, never, Sqlite | Bip39 | NanoId | DbWorkerOnMessage> =>
551
553
  Effect.gen(function* (_) {
552
554
  const sqlite = yield* _(Sqlite);
553
555
 
@@ -577,7 +579,7 @@ export const DbWorkerLive = Layer.effect(
577
579
  Effect.gen(function* (_) {
578
580
  const syncWorker = yield* _(SyncWorker);
579
581
 
580
- const onError = (error: EvoluError): Effect.Effect<never, never, void> =>
582
+ const onError = (error: EvoluError): Effect.Effect<void> =>
581
583
  Effect.sync(() => {
582
584
  dbWorker.onMessage({ _tag: "onError", error });
583
585
  });
@@ -606,9 +608,9 @@ export const DbWorkerLive = Layer.effect(
606
608
 
607
609
  const run = (
608
610
  effect: Effect.Effect<
609
- Sqlite | Bip39 | NanoId | DbWorkerOnMessage,
611
+ void,
610
612
  EvoluError,
611
- void
613
+ Sqlite | Bip39 | NanoId | DbWorkerOnMessage
612
614
  >,
613
615
  ): Promise<void> =>
614
616
  effect.pipe(
@@ -636,7 +638,7 @@ export const DbWorkerLive = Layer.effect(
636
638
  Layer.succeed(SyncWorkerPostMessage, syncWorker.postMessage),
637
639
  RowsStoreLive,
638
640
  TimeLive,
639
- );
641
+ ).pipe(Layer.memoize, Effect.scoped, Effect.runSync);
640
642
 
641
643
  return (input) => {
642
644
  if (skipAllBecauseOfReset) return Promise.resolve(undefined);
package/src/ErrorStore.ts CHANGED
@@ -19,7 +19,7 @@ export interface UnexpectedError {
19
19
 
20
20
  export const makeUnexpectedError = (
21
21
  error: unknown,
22
- ): Effect.Effect<never, UnexpectedError, never> => {
22
+ ): Effect.Effect<never, UnexpectedError> => {
23
23
  const isError = error instanceof Error;
24
24
 
25
25
  return Effect.fail({