@evolu/common 3.1.8 → 4.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.
- package/dist/src/Config.d.ts +6 -0
- package/dist/src/Config.d.ts.map +1 -1
- package/dist/src/Config.js +1 -0
- package/dist/src/Crdt.d.ts +2 -2
- package/dist/src/Crdt.d.ts.map +1 -1
- package/dist/src/Crdt.js +2 -2
- package/dist/src/Crypto.d.ts +5 -4
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +2 -2
- package/dist/src/Db.d.ts +2 -2
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +1 -3
- package/dist/src/DbWorker.d.ts +8 -8
- package/dist/src/DbWorker.d.ts.map +1 -1
- package/dist/src/DbWorker.js +44 -28
- package/dist/src/Evolu.d.ts +3 -4
- package/dist/src/Evolu.d.ts.map +1 -1
- package/dist/src/Evolu.js +4 -9
- package/dist/src/OnCompletes.d.ts +3 -3
- package/dist/src/OnCompletes.d.ts.map +1 -1
- package/dist/src/OnCompletes.js +3 -3
- package/dist/src/Platform.d.ts +3 -1
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +1 -0
- package/dist/src/Sql.d.ts.map +1 -1
- package/dist/src/Sql.js +4 -3
- package/dist/src/Sqlite.d.ts +2 -2
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/SyncWorker.d.ts +3 -4
- package/dist/src/SyncWorker.d.ts.map +1 -1
- package/dist/src/SyncWorker.js +1 -1
- package/dist/src/Types.d.ts +13 -0
- package/dist/src/Types.d.ts.map +1 -0
- package/dist/src/Types.js +1 -0
- package/package.json +5 -5
- package/src/Config.ts +8 -0
- package/src/Crdt.ts +2 -2
- package/src/Crypto.ts +11 -7
- package/src/Db.ts +3 -5
- package/src/DbWorker.ts +54 -44
- package/src/Evolu.ts +10 -12
- package/src/OnCompletes.ts +4 -4
- package/src/Platform.ts +6 -5
- package/src/Sql.ts +4 -3
- package/src/Sqlite.ts +2 -2
- package/src/SyncWorker.ts +4 -6
- package/src/Types.ts +11 -0
package/dist/src/Config.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export interface Config {
|
|
|
13
13
|
* 1000 (5 minutes).
|
|
14
14
|
*/
|
|
15
15
|
readonly maxDrift: number;
|
|
16
|
+
/**
|
|
17
|
+
* Evolu application name. For now, this is only useful for localhost
|
|
18
|
+
* development, where we want each application to have its own database. The
|
|
19
|
+
* default value is: "Evolu".
|
|
20
|
+
*/
|
|
21
|
+
readonly name: string;
|
|
16
22
|
}
|
|
17
23
|
export declare const Config: Context.Tag<Config, Config>;
|
|
18
24
|
export declare const ConfigLive: (config?: Partial<Config>) => Layer.Layer<Config>;
|
package/dist/src/Config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,MAAM,WAAW,MAAM;IACrB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,MAAM,WAAW,MAAM;IACrB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,MAAM,6BAAiD,CAAC;AAErE,eAAO,MAAM,UAAU,YAAa,QAAQ,MAAM,CAAC,KAAG,WAAW,CAAC,MAAM,CAUrE,CAAC"}
|
package/dist/src/Config.js
CHANGED
package/dist/src/Crdt.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import * as Effect from "effect/Effect";
|
|
|
5
5
|
import * as Layer from "effect/Layer";
|
|
6
6
|
import * as Option from "effect/Option";
|
|
7
7
|
import { Config } from "./Config.js";
|
|
8
|
-
import {
|
|
8
|
+
import { NanoIdGenerator, NodeId } from "./Crypto.js";
|
|
9
9
|
export interface Timestamp {
|
|
10
10
|
readonly node: NodeId;
|
|
11
11
|
readonly millis: Millis;
|
|
@@ -33,7 +33,7 @@ export declare const timestampToString: (t: Timestamp) => TimestampString;
|
|
|
33
33
|
export declare const unsafeTimestampFromString: (s: TimestampString) => Timestamp;
|
|
34
34
|
export declare const timestampToHash: (t: Timestamp) => TimestampHash;
|
|
35
35
|
export declare const makeSyncTimestamp: (millis?: Millis) => Timestamp;
|
|
36
|
-
export declare const makeInitialTimestamp: Effect.Effect<Timestamp, never,
|
|
36
|
+
export declare const makeInitialTimestamp: Effect.Effect<Timestamp, never, NanoIdGenerator>;
|
|
37
37
|
export interface Time {
|
|
38
38
|
readonly now: Effect.Effect<Millis, TimestampTimeOutOfRangeError>;
|
|
39
39
|
}
|
package/dist/src/Crdt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Crdt.d.ts","sourceRoot":"","sources":["../../src/Crdt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Crdt.d.ts","sourceRoot":"","sources":["../../src/Crdt.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Crdt.js
CHANGED
|
@@ -9,7 +9,7 @@ import * as Option from "effect/Option";
|
|
|
9
9
|
import * as ReadonlyArray from "effect/ReadonlyArray";
|
|
10
10
|
import * as String from "effect/String";
|
|
11
11
|
import { Config } from "./Config.js";
|
|
12
|
-
import {
|
|
12
|
+
import { NanoIdGenerator, NodeId } from "./Crypto.js";
|
|
13
13
|
import { murmurhash } from "./Murmurhash.js";
|
|
14
14
|
export const AllowedTimeRange = {
|
|
15
15
|
greaterThan: 860934419999,
|
|
@@ -46,7 +46,7 @@ export const makeSyncTimestamp = (millis = initialMillis) => ({
|
|
|
46
46
|
counter: initialCounter,
|
|
47
47
|
node: syncNodeId,
|
|
48
48
|
});
|
|
49
|
-
export const makeInitialTimestamp =
|
|
49
|
+
export const makeInitialTimestamp = NanoIdGenerator.pipe(Effect.flatMap(({ nanoidAsNodeId }) => nanoidAsNodeId), Effect.map((node) => ({
|
|
50
50
|
millis: initialMillis,
|
|
51
51
|
counter: initialCounter,
|
|
52
52
|
node,
|
package/dist/src/Crypto.d.ts
CHANGED
|
@@ -20,14 +20,15 @@ export interface InvalidMnemonicError {
|
|
|
20
20
|
* provide a human-readable way of storing a private key.
|
|
21
21
|
*/
|
|
22
22
|
export type Mnemonic = string & Brand.Brand<"Mnemonic">;
|
|
23
|
-
export interface
|
|
24
|
-
readonly nanoid: Effect.Effect<
|
|
23
|
+
export interface NanoIdGenerator {
|
|
24
|
+
readonly nanoid: Effect.Effect<NanoId>;
|
|
25
25
|
readonly nanoidAsNodeId: Effect.Effect<NodeId>;
|
|
26
26
|
}
|
|
27
|
-
export declare const
|
|
27
|
+
export declare const NanoIdGenerator: Context.Tag<NanoIdGenerator, NanoIdGenerator>;
|
|
28
|
+
export type NanoId = string & Brand.Brand<"NanoId">;
|
|
28
29
|
export declare const NodeId: S.BrandSchema<string & Brand.Brand<"NodeId">, string, never>;
|
|
29
30
|
export type NodeId = S.Schema.To<typeof NodeId>;
|
|
30
|
-
export declare const
|
|
31
|
+
export declare const NanoIdGeneratorLive: Layer.Layer<NanoIdGenerator, never, never>;
|
|
31
32
|
export declare const slip21Derive: (seed: Uint8Array, path: ReadonlyArray<string>) => Effect.Effect<Uint8Array>;
|
|
32
33
|
/** Alias to xsalsa20poly1305, for compatibility with libsodium/nacl */
|
|
33
34
|
export interface SecretBox {
|
package/dist/src/Crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAM3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnE,QAAQ,CAAC,KAAK,EAAE,CACd,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,KAAK,2BAA+C,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;CACvC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAExD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAM3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnE,QAAQ,CAAC,KAAK,EAAE,CACd,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,KAAK,2BAA+C,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;CACvC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,eAAe,+CAE3B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEpD,eAAO,MAAM,MAAM,8DAGlB,CAAC;AACF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC;AAIhD,eAAO,MAAM,mBAAmB,4CAM/B,CAAC;AAIF,eAAO,MAAM,YAAY,SACjB,UAAU,QACV,cAAc,MAAM,CAAC,KAC1B,aAAa,CAAC,UAAU,CAWvB,CAAC;AAEL,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,CACb,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,KAClB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE/B,QAAQ,CAAC,IAAI,EAAE,CACb,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,UAAU,KACnB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,SAAS,mCAAuD,CAAC;AAE9E,eAAO,MAAM,aAAa,sCAgBzB,CAAC"}
|
package/dist/src/Crypto.js
CHANGED
|
@@ -9,10 +9,10 @@ import * as Effect from "effect/Effect";
|
|
|
9
9
|
import * as Layer from "effect/Layer";
|
|
10
10
|
import { customAlphabet, nanoid } from "nanoid";
|
|
11
11
|
export const Bip39 = Context.GenericTag("@services/Bip39");
|
|
12
|
-
export const
|
|
12
|
+
export const NanoIdGenerator = Context.GenericTag("@services/NanoIdGenerator");
|
|
13
13
|
export const NodeId = S.string.pipe(S.pattern(/^[\w-]{16}$/), S.brand("NodeId"));
|
|
14
14
|
const nanoidForNodeId = customAlphabet("0123456789abcdef", 16);
|
|
15
|
-
export const
|
|
15
|
+
export const NanoIdGeneratorLive = Layer.succeed(NanoIdGenerator, NanoIdGenerator.of({
|
|
16
16
|
nanoid: Effect.sync(() => nanoid()),
|
|
17
17
|
nanoidAsNodeId: Effect.sync(() => nanoidForNodeId()),
|
|
18
18
|
}));
|
package/dist/src/Db.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import * as ReadonlyArray from "effect/ReadonlyArray";
|
|
|
7
7
|
import * as ReadonlyRecord from "effect/ReadonlyRecord";
|
|
8
8
|
import * as Types from "effect/Types";
|
|
9
9
|
import * as Kysely from "kysely";
|
|
10
|
-
import { Bip39, Mnemonic,
|
|
10
|
+
import { Bip39, Mnemonic, NanoIdGenerator } from "./Crypto.js";
|
|
11
11
|
import { EvoluTypeError } from "./ErrorStore.js";
|
|
12
12
|
import { Id } from "./Model.js";
|
|
13
13
|
import { Owner } from "./Owner.js";
|
|
@@ -134,7 +134,7 @@ export declare const SqliteNoSuchTableOrColumnError: S.Schema<{
|
|
|
134
134
|
}, never>;
|
|
135
135
|
export type SqliteNoSuchTableOrColumnError = S.Schema.To<typeof SqliteNoSuchTableOrColumnError>;
|
|
136
136
|
export declare const someDefectToNoSuchTableOrColumnError: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, NoSuchTableOrColumnError | E, R>;
|
|
137
|
-
export declare const lazyInit: (mnemonic?: Mnemonic) => Effect.Effect<Owner, never, Sqlite | Bip39 |
|
|
137
|
+
export declare const lazyInit: (mnemonic?: Mnemonic) => Effect.Effect<Owner, never, Sqlite | Bip39 | NanoIdGenerator>;
|
|
138
138
|
export declare const ensureSchema: (tables: Tables) => Effect.Effect<void, never, Sqlite>;
|
|
139
139
|
export type RowsStore = Store<RowsStoreValue>;
|
|
140
140
|
export declare const RowsStore: Context.Tag<RowsStore, RowsStore>;
|
package/dist/src/Db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Db.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as AST from "@effect/schema/AST";
|
|
2
2
|
import * as S from "@effect/schema/Schema";
|
|
3
3
|
import { make } from "@effect/schema/Schema";
|
|
4
|
-
import { bytesToHex } from "@noble/ciphers/utils";
|
|
5
4
|
import * as Context from "effect/Context";
|
|
6
5
|
import * as Effect from "effect/Effect";
|
|
7
6
|
import * as Exit from "effect/Exit";
|
|
@@ -133,8 +132,7 @@ export const lazyInit = (mnemonic) => Effect.gen(function* (_) {
|
|
|
133
132
|
parameters: [
|
|
134
133
|
owner.id,
|
|
135
134
|
owner.mnemonic,
|
|
136
|
-
|
|
137
|
-
bytesToHex(owner.encryptionKey),
|
|
135
|
+
owner.encryptionKey,
|
|
138
136
|
timestampToString(initialTimestampString),
|
|
139
137
|
merkleTreeToString(initialMerkleTree),
|
|
140
138
|
],
|
package/dist/src/DbWorker.d.ts
CHANGED
|
@@ -4,18 +4,19 @@ import * as Layer from "effect/Layer";
|
|
|
4
4
|
import * as ReadonlyArray from "effect/ReadonlyArray";
|
|
5
5
|
import * as ReadonlyRecord from "effect/ReadonlyRecord";
|
|
6
6
|
import { Config } from "./Config.js";
|
|
7
|
-
import {
|
|
7
|
+
import { Millis } from "./Crdt.js";
|
|
8
|
+
import { Bip39, Mnemonic, NanoIdGenerator } from "./Crypto.js";
|
|
8
9
|
import { Queries, Query, Tables } from "./Db.js";
|
|
9
10
|
import { QueryPatches } from "./Diff.js";
|
|
10
11
|
import { EvoluError } from "./ErrorStore.js";
|
|
11
|
-
import { Id
|
|
12
|
+
import { Id } from "./Model.js";
|
|
12
13
|
import { OnCompleteId } from "./OnCompletes.js";
|
|
13
14
|
import { Owner } from "./Owner.js";
|
|
15
|
+
import { DbWorkerLock } from "./Platform.js";
|
|
14
16
|
import { Sqlite, Value } from "./Sqlite.js";
|
|
15
17
|
import { NewMessage, SyncState, SyncWorker, SyncWorkerOutputSyncResponse } from "./SyncWorker.js";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
onMessage: (output: DbWorkerOutput) => void;
|
|
18
|
+
import { Messaging } from "./Types.js";
|
|
19
|
+
export interface DbWorker extends Messaging<DbWorkerInput, DbWorkerOutput> {
|
|
19
20
|
}
|
|
20
21
|
export declare const DbWorker: Context.Tag<DbWorker, DbWorker>;
|
|
21
22
|
export type DbWorkerInput = DbWorkerInputInit | DbWorkerInputQuery | DbWorkerInputMutate | DbWorkerInputSync | DbWorkerInputReset | DbWorkerInputEnsureSchema | SyncWorkerOutputSyncResponse;
|
|
@@ -73,11 +74,10 @@ export interface Mutation {
|
|
|
73
74
|
readonly id: Id;
|
|
74
75
|
readonly values: ReadonlyRecord.ReadonlyRecord<string, Value | Date | boolean | undefined>;
|
|
75
76
|
readonly isInsert: boolean;
|
|
76
|
-
readonly now: SqliteDate;
|
|
77
77
|
readonly onCompleteId: OnCompleteId | null;
|
|
78
78
|
}
|
|
79
79
|
export declare const mutationsToNewMessages: (mutations: ReadonlyArray<Mutation>) => ReadonlyArray<NewMessage>;
|
|
80
|
-
export declare const upsertValueIntoTableRowColumn: (message: NewMessage, messages: ReadonlyArray<NewMessage
|
|
81
|
-
export declare const
|
|
80
|
+
export declare const upsertValueIntoTableRowColumn: (message: NewMessage, messages: ReadonlyArray<NewMessage>, millis: Millis) => Effect.Effect<void, never, Sqlite>;
|
|
81
|
+
export declare const DbWorkerCommonLive: Layer.Layer<DbWorker, never, Bip39 | NanoIdGenerator | Sqlite | DbWorkerLock | SyncWorker>;
|
|
82
82
|
export {};
|
|
83
83
|
//# sourceMappingURL=DbWorker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbWorker.d.ts","sourceRoot":"","sources":["../../src/DbWorker.ts"],"names":[],"mappings":"
|
|
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,4 +1,3 @@
|
|
|
1
|
-
import { hexToBytes } from "@noble/ciphers/utils";
|
|
2
1
|
import * as Context from "effect/Context";
|
|
3
2
|
import * as Effect from "effect/Effect";
|
|
4
3
|
import * as Function from "effect/Function";
|
|
@@ -9,12 +8,13 @@ import * as Option from "effect/Option";
|
|
|
9
8
|
import * as ReadonlyArray from "effect/ReadonlyArray";
|
|
10
9
|
import { Config, ConfigLive } from "./Config.js";
|
|
11
10
|
import { Time, TimeLive, diffMerkleTrees, insertIntoMerkleTree, makeSyncTimestamp, merkleTreeToString, receiveTimestamp, sendTimestamp, timestampToString, unsafeTimestampFromString, } from "./Crdt.js";
|
|
12
|
-
import { Bip39,
|
|
11
|
+
import { Bip39, NanoIdGenerator } from "./Crypto.js";
|
|
13
12
|
import { RowsStore, RowsStoreLive, deserializeQuery, ensureSchema, lazyInit, someDefectToNoSuchTableOrColumnError, transaction, } from "./Db.js";
|
|
14
13
|
import { makePatches } from "./Diff.js";
|
|
15
14
|
import { makeUnexpectedError } from "./ErrorStore.js";
|
|
16
15
|
import { cast } from "./Model.js";
|
|
17
16
|
import { Owner } from "./Owner.js";
|
|
17
|
+
import { DbWorkerLock } from "./Platform.js";
|
|
18
18
|
import * as Sql from "./Sql.js";
|
|
19
19
|
import { Sqlite } from "./Sqlite.js";
|
|
20
20
|
import { NewMessageEquivalence, SyncWorker, SyncWorkerPostMessage, } from "./SyncWorker.js";
|
|
@@ -25,8 +25,7 @@ const init = Effect.gen(function* (_) {
|
|
|
25
25
|
return yield* _(sqlite.exec(Sql.selectOwner), Effect.map(({ rows: [row] }) => ({
|
|
26
26
|
id: row.id,
|
|
27
27
|
mnemonic: row.mnemonic,
|
|
28
|
-
|
|
29
|
-
encryptionKey: hexToBytes(row.encryptionKey),
|
|
28
|
+
encryptionKey: row.encryptionKey,
|
|
30
29
|
})), someDefectToNoSuchTableOrColumnError, Effect.catchTag("NoSuchTableOrColumnError", () => lazyInit()));
|
|
31
30
|
});
|
|
32
31
|
const query = ({ queries, onCompleteIds = [], }) => Effect.gen(function* (_) {
|
|
@@ -44,23 +43,27 @@ const query = ({ queries, onCompleteIds = [], }) => Effect.gen(function* (_) {
|
|
|
44
43
|
}));
|
|
45
44
|
dbWorkerOnMessage({ _tag: "onQuery", queriesPatches, onCompleteIds });
|
|
46
45
|
});
|
|
47
|
-
const readTimestampAndMerkleTree = Sqlite.pipe(Effect.flatMap((sqlite) => sqlite.exec(Sql.selectOwnerTimestampAndMerkleTree)), Effect.map((
|
|
46
|
+
const readTimestampAndMerkleTree = Sqlite.pipe(Effect.flatMap((sqlite) => sqlite.exec(Sql.selectOwnerTimestampAndMerkleTree)), Effect.map(({ rows: [{ timestamp, merkleTree }] }) => ({
|
|
48
47
|
timestamp: unsafeTimestampFromString(timestamp),
|
|
49
48
|
merkleTree: merkleTree,
|
|
50
49
|
})));
|
|
51
|
-
export const mutationsToNewMessages = (mutations) => pipe(mutations, ReadonlyArray.map(({ id, isInsert,
|
|
50
|
+
export const mutationsToNewMessages = (mutations) => pipe(mutations, ReadonlyArray.map(({ id, isInsert, table, values }) => pipe(Object.entries(values),
|
|
51
|
+
// Filter values.
|
|
52
|
+
ReadonlyArray.filterMap(([key, value]) =>
|
|
52
53
|
// The value can be undefined if exactOptionalPropertyTypes isn't true.
|
|
53
54
|
// Don't insert nulls because null is the default value.
|
|
54
55
|
value === undefined || (isInsert && value == null)
|
|
55
56
|
? Option.none()
|
|
56
|
-
: Option.some([key, value])),
|
|
57
|
+
: Option.some([key, value])),
|
|
58
|
+
// Cast values.
|
|
59
|
+
ReadonlyArray.map(([key, value]) => [
|
|
57
60
|
key,
|
|
58
61
|
typeof value === "boolean"
|
|
59
62
|
? cast(value)
|
|
60
63
|
: value instanceof Date
|
|
61
64
|
? cast(value)
|
|
62
65
|
: value,
|
|
63
|
-
]), ReadonlyArray.
|
|
66
|
+
]), ReadonlyArray.map(([key, value]) => ({
|
|
64
67
|
table,
|
|
65
68
|
row: id,
|
|
66
69
|
column: key,
|
|
@@ -73,7 +76,7 @@ const ensureSchemaByNewMessages = (messages) => Effect.gen(function* (_) {
|
|
|
73
76
|
if (table == null) {
|
|
74
77
|
tablesMap.set(message.table, {
|
|
75
78
|
name: message.table,
|
|
76
|
-
columns: [message.column],
|
|
79
|
+
columns: [message.column, "createdAt", "updatedAt"],
|
|
77
80
|
});
|
|
78
81
|
return;
|
|
79
82
|
}
|
|
@@ -86,11 +89,19 @@ const ensureSchemaByNewMessages = (messages) => Effect.gen(function* (_) {
|
|
|
86
89
|
});
|
|
87
90
|
yield* _(ensureSchema(Array.from(tablesMap.values())));
|
|
88
91
|
});
|
|
89
|
-
export const upsertValueIntoTableRowColumn = (message, messages) => Effect.gen(function* (_) {
|
|
92
|
+
export const upsertValueIntoTableRowColumn = (message, messages, millis) => Effect.gen(function* (_) {
|
|
90
93
|
const sqlite = yield* _(Sqlite);
|
|
94
|
+
const createdAtOrUpdatedAt = cast(new Date(millis));
|
|
91
95
|
const insert = sqlite.exec({
|
|
92
96
|
sql: Sql.upsertValueIntoTableRowColumn(message.table, message.column),
|
|
93
|
-
parameters: [
|
|
97
|
+
parameters: [
|
|
98
|
+
message.row,
|
|
99
|
+
message.value,
|
|
100
|
+
createdAtOrUpdatedAt,
|
|
101
|
+
createdAtOrUpdatedAt,
|
|
102
|
+
message.value,
|
|
103
|
+
createdAtOrUpdatedAt,
|
|
104
|
+
],
|
|
94
105
|
});
|
|
95
106
|
yield* _(insert, someDefectToNoSuchTableOrColumnError, Effect.catchTag("NoSuchTableOrColumnError", () =>
|
|
96
107
|
// If one message fails, we ensure schema for all messages.
|
|
@@ -104,7 +115,8 @@ const applyMessages = ({ merkleTree, messages, }) => Effect.gen(function* (_) {
|
|
|
104
115
|
parameters: [message.table, message.row, message.column],
|
|
105
116
|
}), Effect.map((result) => result.rows), Effect.flatMap(ReadonlyArray.head), Effect.map((row) => row.timestamp), Effect.catchTag("NoSuchElementException", () => Effect.succeed(null)));
|
|
106
117
|
if (timestamp == null || timestamp < message.timestamp) {
|
|
107
|
-
|
|
118
|
+
const { millis } = unsafeTimestampFromString(message.timestamp);
|
|
119
|
+
yield* _(upsertValueIntoTableRowColumn(message, messages, millis));
|
|
108
120
|
}
|
|
109
121
|
if (timestamp == null || timestamp !== message.timestamp) {
|
|
110
122
|
const { changes } = yield* _(sqlite.exec({
|
|
@@ -135,7 +147,11 @@ const writeTimestampAndMerkleTree = ({ timestamp, merkleTree, }) => Effect.flatM
|
|
|
135
147
|
const mutate = ({ mutations, queries, }) => Effect.gen(function* (_) {
|
|
136
148
|
const [toSync, localOnly] = ReadonlyArray.partition(mutations, (item) => item.table.startsWith("_"));
|
|
137
149
|
const [toUpsert, toDelete] = ReadonlyArray.partition(localOnly, (item) => mutationsToNewMessages([item]).some((message) => message.column === "isDeleted" && message.value === 1)).map(mutationsToNewMessages);
|
|
138
|
-
yield* _(
|
|
150
|
+
const time = yield* _(Time);
|
|
151
|
+
for (const messageToUpsert of toUpsert) {
|
|
152
|
+
const now = yield* _(time.now);
|
|
153
|
+
yield* _(upsertValueIntoTableRowColumn(messageToUpsert, toUpsert, now));
|
|
154
|
+
}
|
|
139
155
|
const { exec } = yield* _(Sqlite);
|
|
140
156
|
yield* _(Effect.forEach(toDelete, ({ table, row }) => exec({ sql: Sql.deleteTableRow(table), parameters: [row] })));
|
|
141
157
|
if (toSync.length > 0) {
|
|
@@ -209,7 +225,8 @@ const handleSyncResponse = ({ messages, ...response }) => Effect.gen(function* (
|
|
|
209
225
|
const sync = ({ queries, }) => Effect.gen(function* (_) {
|
|
210
226
|
if (queries.length > 0)
|
|
211
227
|
yield* _(query({ queries }));
|
|
212
|
-
|
|
228
|
+
const syncWorkerPostMessage = yield* _(SyncWorkerPostMessage);
|
|
229
|
+
syncWorkerPostMessage({
|
|
213
230
|
_tag: "sync",
|
|
214
231
|
...(yield* _(readTimestampAndMerkleTree)),
|
|
215
232
|
syncUrl: (yield* _(Config)).syncUrl,
|
|
@@ -231,7 +248,7 @@ const reset = (input) => Effect.gen(function* (_) {
|
|
|
231
248
|
const onMessage = yield* _(DbWorkerOnMessage);
|
|
232
249
|
onMessage({ _tag: "onResetOrRestore" });
|
|
233
250
|
});
|
|
234
|
-
export const
|
|
251
|
+
export const DbWorkerCommonLive = Layer.effect(DbWorker, Effect.gen(function* (_) {
|
|
235
252
|
const syncWorker = yield* _(SyncWorker);
|
|
236
253
|
const onError = (error) => Effect.sync(() => {
|
|
237
254
|
dbWorker.onMessage({ _tag: "onError", error });
|
|
@@ -242,23 +259,23 @@ export const DbWorkerLive = Layer.effect(DbWorker, Effect.gen(function* (_) {
|
|
|
242
259
|
onError(output).pipe(Effect.runSync);
|
|
243
260
|
break;
|
|
244
261
|
case "SyncWorkerOutputSyncResponse":
|
|
245
|
-
postMessage(output);
|
|
262
|
+
dbWorker.postMessage(output);
|
|
246
263
|
break;
|
|
247
264
|
default:
|
|
248
265
|
dbWorker.onMessage({ _tag: "onSyncState", state: output });
|
|
249
266
|
}
|
|
250
267
|
};
|
|
251
|
-
const runContext = Context.empty().pipe(Context.add(Sqlite, yield* _(Sqlite)), Context.add(Bip39, yield* _(Bip39)), Context.add(
|
|
268
|
+
const runContext = Context.empty().pipe(Context.add(Sqlite, yield* _(Sqlite)), Context.add(Bip39, yield* _(Bip39)), Context.add(NanoIdGenerator, yield* _(NanoIdGenerator)), Context.add(DbWorkerOnMessage, (output) => {
|
|
252
269
|
dbWorker.onMessage(output);
|
|
253
270
|
}));
|
|
254
271
|
const run = (effect) => effect.pipe(Effect.catchAllDefect(makeUnexpectedError), transaction, Effect.catchAll(onError), Effect.provide(runContext), Effect.runPromise);
|
|
255
|
-
|
|
256
|
-
const
|
|
272
|
+
/** If init fails, we have to allow reset at least. */
|
|
273
|
+
const handleInputForInitFail = (input) => {
|
|
257
274
|
if (input._tag !== "reset")
|
|
258
275
|
return Promise.resolve(undefined);
|
|
259
276
|
return reset(input).pipe(run);
|
|
260
277
|
};
|
|
261
|
-
const
|
|
278
|
+
const makeHandleInputForInitSuccess = (config, owner) => {
|
|
262
279
|
let skipAllBecauseOfReset = false;
|
|
263
280
|
const layer = Layer.mergeAll(ConfigLive(config), Layer.succeed(Owner, owner), Layer.succeed(SyncWorkerPostMessage, syncWorker.postMessage), RowsStoreLive, TimeLive).pipe(Layer.memoize, Effect.scoped, Effect.runSync);
|
|
264
281
|
return (input) => {
|
|
@@ -278,21 +295,20 @@ export const DbWorkerLive = Layer.effect(DbWorker, Effect.gen(function* (_) {
|
|
|
278
295
|
}), Effect.provide(layer), run);
|
|
279
296
|
};
|
|
280
297
|
};
|
|
281
|
-
let
|
|
298
|
+
let handleInput = (input) => {
|
|
282
299
|
if (input._tag !== "init")
|
|
283
300
|
return run(makeUnexpectedError(new Error("init must be called first")));
|
|
284
|
-
|
|
301
|
+
handleInput = handleInputForInitFail;
|
|
285
302
|
return init.pipe(Effect.map((owner) => {
|
|
286
303
|
dbWorker.onMessage({ _tag: "onOwner", owner });
|
|
287
|
-
|
|
304
|
+
handleInput = makeHandleInputForInitSuccess(input.config, owner);
|
|
288
305
|
}), run);
|
|
289
306
|
};
|
|
290
|
-
|
|
291
|
-
const postMessage = (input) => {
|
|
292
|
-
messageQueue = messageQueue.then(() => write(input));
|
|
293
|
-
};
|
|
307
|
+
const dbWorkerLock = yield* _(DbWorkerLock);
|
|
294
308
|
const dbWorker = {
|
|
295
|
-
postMessage
|
|
309
|
+
postMessage: (input) => {
|
|
310
|
+
dbWorkerLock(() => handleInput(input));
|
|
311
|
+
},
|
|
296
312
|
onMessage: Function.constVoid,
|
|
297
313
|
};
|
|
298
314
|
return dbWorker;
|
package/dist/src/Evolu.d.ts
CHANGED
|
@@ -268,12 +268,12 @@ export declare const Evolu: Context.Tag<Evolu<DatabaseSchema>, Evolu<DatabaseSch
|
|
|
268
268
|
type CreateQuery<S extends DatabaseSchema> = <R extends Row>(queryCallback: QueryCallback<S, R>) => Query<R>;
|
|
269
269
|
type QueryCallback<S extends DatabaseSchema, R extends Row> = (db: Pick<Kysely.Kysely<QuerySchema<S>>, "selectFrom" | "fn">) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
270
270
|
type QuerySchema<S extends DatabaseSchema> = {
|
|
271
|
-
readonly [Table in keyof S]:
|
|
271
|
+
readonly [Table in keyof S]: NullableExceptForIdAndAutomaticColumns<{
|
|
272
272
|
readonly [Column in keyof S[Table]]: S[Table][Column];
|
|
273
273
|
}>;
|
|
274
274
|
};
|
|
275
|
-
type
|
|
276
|
-
readonly [K in keyof T]: K extends "id" ? T[K] : T[K] | null;
|
|
275
|
+
type NullableExceptForIdAndAutomaticColumns<T> = {
|
|
276
|
+
readonly [K in keyof T]: K extends "id" | "createdAt" | "updatedAt" ? T[K] : T[K] | null;
|
|
277
277
|
};
|
|
278
278
|
export declare const makeCreateQuery: <S extends DatabaseSchema = DatabaseSchema>() => CreateQuery<S>;
|
|
279
279
|
export interface LoadingPromises {
|
|
@@ -328,7 +328,6 @@ type PartialForNullable<T, NK extends keyof T = {
|
|
|
328
328
|
type Castable<T> = {
|
|
329
329
|
readonly [K in keyof T]: T[K] extends SqliteBoolean ? boolean | SqliteBoolean : T[K] extends null | SqliteBoolean ? null | boolean | SqliteBoolean : T[K] extends SqliteDate ? Date | SqliteDate : T[K] extends null | SqliteDate ? null | Date | SqliteDate : T[K];
|
|
330
330
|
};
|
|
331
|
-
/** EvoluCommonLive has only platform independent side-effects. */
|
|
332
331
|
export declare const EvoluCommonLive: Layer.Layer<Evolu<DatabaseSchema>, never, Config | PlatformName | FlushSync | AppState | DbWorker>;
|
|
333
332
|
/**
|
|
334
333
|
* The recipe for creating Evolu for a platform and UI library:
|
package/dist/src/Evolu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAK1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Evolu.js
CHANGED
|
@@ -9,13 +9,11 @@ import * as Number from "effect/Number";
|
|
|
9
9
|
import * as ReadonlyArray from "effect/ReadonlyArray";
|
|
10
10
|
import * as Kysely from "kysely";
|
|
11
11
|
import { Config, ConfigLive } from "./Config.js";
|
|
12
|
-
import {
|
|
13
|
-
import { NanoId, NanoIdLive } from "./Crypto.js";
|
|
12
|
+
import { NanoIdGenerator, NanoIdGeneratorLive } from "./Crypto.js";
|
|
14
13
|
import { RowsStore, RowsStoreLive, emptyRows, queryResultFromRows, schemaToTables, serializeQuery, } from "./Db.js";
|
|
15
14
|
import { DbWorker } from "./DbWorker.js";
|
|
16
15
|
import { applyPatches } from "./Diff.js";
|
|
17
16
|
import { makeErrorStore } from "./ErrorStore.js";
|
|
18
|
-
import { cast } from "./Model.js";
|
|
19
17
|
import { OnCompletes, OnCompletesLive } from "./OnCompletes.js";
|
|
20
18
|
import { AppState, FlushSync, PlatformName } from "./Platform.js";
|
|
21
19
|
import { makeStore } from "./Store.js";
|
|
@@ -155,9 +153,8 @@ export const SubscribedQueriesLive = Layer.effect(SubscribedQueries, Effect.gen(
|
|
|
155
153
|
}));
|
|
156
154
|
export const Mutate = Context.GenericTag("@services/Mutate");
|
|
157
155
|
const MutateLive = Layer.effect(Mutate, Effect.gen(function* (_) {
|
|
158
|
-
const nanoid = yield* _(
|
|
156
|
+
const { nanoid } = yield* _(NanoIdGenerator);
|
|
159
157
|
const onCompletes = yield* _(OnCompletes);
|
|
160
|
-
const time = yield* _(Time);
|
|
161
158
|
const subscribedQueries = yield* _(SubscribedQueries);
|
|
162
159
|
const loadingPromises = yield* _(LoadingPromises);
|
|
163
160
|
const dbWorker = yield* _(DbWorker);
|
|
@@ -165,7 +162,7 @@ const MutateLive = Layer.effect(Mutate, Effect.gen(function* (_) {
|
|
|
165
162
|
return Mutate.of((table, { id, ...values }, onComplete) => {
|
|
166
163
|
const isInsert = id == null;
|
|
167
164
|
if (isInsert)
|
|
168
|
-
id = Effect.runSync(nanoid
|
|
165
|
+
id = Effect.runSync(nanoid);
|
|
169
166
|
const onCompleteId = onComplete
|
|
170
167
|
? onCompletes.add(onComplete).pipe(Effect.runSync)
|
|
171
168
|
: null;
|
|
@@ -176,7 +173,6 @@ const MutateLive = Layer.effect(Mutate, Effect.gen(function* (_) {
|
|
|
176
173
|
id,
|
|
177
174
|
values,
|
|
178
175
|
isInsert,
|
|
179
|
-
now: cast(new Date(Effect.runSync(time.now))),
|
|
180
176
|
onCompleteId,
|
|
181
177
|
},
|
|
182
178
|
];
|
|
@@ -254,8 +250,7 @@ const EvoluCommon = Layer.effect(Evolu, Effect.gen(function* (_) {
|
|
|
254
250
|
platformName,
|
|
255
251
|
});
|
|
256
252
|
})).pipe(Layer.provide(Layer.mergeAll(LoadQueryLive, OnQueryLive, MutateLive)), Layer.provide(LoadingPromiseLive), Layer.provide(SubscribedQueriesLive), Layer.provide(Layer.merge(RowsStoreLive, OnCompletesLive)));
|
|
257
|
-
|
|
258
|
-
export const EvoluCommonLive = EvoluCommon.pipe(Layer.provide(Layer.merge(TimeLive, NanoIdLive)));
|
|
253
|
+
export const EvoluCommonLive = EvoluCommon.pipe(Layer.provide(NanoIdGeneratorLive));
|
|
259
254
|
/**
|
|
260
255
|
* The recipe for creating Evolu for a platform and UI library:
|
|
261
256
|
*
|
|
@@ -2,13 +2,13 @@ import * as Brand from "effect/Brand";
|
|
|
2
2
|
import * as Context from "effect/Context";
|
|
3
3
|
import * as Effect from "effect/Effect";
|
|
4
4
|
import * as Layer from "effect/Layer";
|
|
5
|
-
import { NanoId } from "./Crypto.js";
|
|
5
|
+
import { NanoId, NanoIdGenerator } from "./Crypto.js";
|
|
6
6
|
export interface OnCompletes {
|
|
7
7
|
readonly add: (onComplete: OnComplete) => Effect.Effect<OnCompleteId>;
|
|
8
8
|
readonly complete: (onCompleteIds: readonly OnCompleteId[]) => Effect.Effect<void>;
|
|
9
9
|
}
|
|
10
10
|
export type OnComplete = () => void;
|
|
11
|
-
export type OnCompleteId =
|
|
11
|
+
export type OnCompleteId = NanoId & Brand.Brand<"OnCompleteId">;
|
|
12
12
|
export declare const OnCompletes: Context.Tag<OnCompletes, OnCompletes>;
|
|
13
|
-
export declare const OnCompletesLive: Layer.Layer<OnCompletes, never,
|
|
13
|
+
export declare const OnCompletesLive: Layer.Layer<OnCompletes, never, NanoIdGenerator>;
|
|
14
14
|
//# sourceMappingURL=OnCompletes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnCompletes.d.ts","sourceRoot":"","sources":["../../src/OnCompletes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"OnCompletes.d.ts","sourceRoot":"","sources":["../../src/OnCompletes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAEtE,QAAQ,CAAC,QAAQ,EAAE,CACjB,aAAa,EAAE,SAAS,YAAY,EAAE,KACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC;AAEpC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAEhE,eAAO,MAAM,WAAW,uCAEvB,CAAC;AAEF,eAAO,MAAM,eAAe,kDA0B3B,CAAC"}
|
package/dist/src/OnCompletes.js
CHANGED
|
@@ -3,13 +3,13 @@ import * as Effect from "effect/Effect";
|
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
import * as Option from "effect/Option";
|
|
5
5
|
import * as ReadonlyArray from "effect/ReadonlyArray";
|
|
6
|
-
import {
|
|
6
|
+
import { NanoIdGenerator } from "./Crypto.js";
|
|
7
7
|
export const OnCompletes = Context.GenericTag("@services/OnCompletes");
|
|
8
8
|
export const OnCompletesLive = Layer.effect(OnCompletes, Effect.gen(function* (_) {
|
|
9
|
-
const nanoid = yield* _(
|
|
9
|
+
const { nanoid } = yield* _(NanoIdGenerator);
|
|
10
10
|
const map = new Map();
|
|
11
11
|
return OnCompletes.of({
|
|
12
|
-
add: (onComplete) => nanoid.
|
|
12
|
+
add: (onComplete) => nanoid.pipe(Effect.map((nanoid) => {
|
|
13
13
|
const id = nanoid;
|
|
14
14
|
map.set(id, onComplete);
|
|
15
15
|
return id;
|
package/dist/src/Platform.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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 type PlatformName = "server" | "web
|
|
4
|
+
export type PlatformName = "server" | "web" | "react-native";
|
|
5
5
|
export declare const PlatformName: Context.Tag<PlatformName, PlatformName>;
|
|
6
6
|
/**
|
|
7
7
|
* FlushSync lets you force React to flush any updates inside the provided
|
|
@@ -23,6 +23,8 @@ export interface SyncLock {
|
|
|
23
23
|
readonly release: Effect.Effect<void>;
|
|
24
24
|
}
|
|
25
25
|
export declare const SyncLock: Context.Tag<SyncLock, SyncLock>;
|
|
26
|
+
export type DbWorkerLock = (callback: () => Promise<void>) => void;
|
|
27
|
+
export declare const DbWorkerLock: Context.Tag<DbWorkerLock, DbWorkerLock>;
|
|
26
28
|
export type Fetch = (url: string, body: Uint8Array) => Effect.Effect<Response, FetchError>;
|
|
27
29
|
export declare const Fetch: Context.Tag<Fetch, Fetch>;
|
|
28
30
|
/**
|
|
@@ -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,
|
|
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,GAAG,QAAQ,GAAG,KAAK,GAAG,cAAc,CAAC;AAE7D,eAAO,MAAM,YAAY,yCAExB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAEvD,eAAO,MAAM,SAAS,mCAAuD,CAAC;AAE9E,eAAO,MAAM,oBAAoB,sCAEhC,CAAC;AAEF,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,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACnE,eAAO,MAAM,YAAY,yCAExB,CAAC;AAEF,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"}
|