@evolu/react-native 15.0.0-next.0 → 15.0.0-next.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/LICENSE +21 -0
- package/dist/src/LockManager.d.ts +13 -0
- package/dist/src/LockManager.d.ts.map +1 -0
- package/dist/src/LockManager.js +219 -0
- package/dist/src/Task.d.ts +4 -4
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +2 -2
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/shared.d.ts.map +1 -1
- package/dist/src/shared.js +8 -5
- package/dist/src/sqlite-drivers/createExpoSqliteDriver.d.ts.map +1 -1
- package/dist/src/sqlite-drivers/createExpoSqliteDriver.js +128 -45
- package/dist/src/sqlite-drivers/createOpSqliteDriver.d.ts.map +1 -1
- package/dist/src/sqlite-drivers/createOpSqliteDriver.js +115 -33
- package/package.json +16 -14
- package/src/LockManager.ts +325 -0
- package/src/Polyfills.ts +5 -9
- package/src/Task.ts +5 -5
- package/src/index.ts +1 -1
- package/src/shared.ts +17 -12
- package/src/sqlite-drivers/createExpoSqliteDriver.ts +23 -8
- package/src/sqlite-drivers/createOpSqliteDriver.ts +16 -4
- package/dist/src/Worker.d.ts +0 -30
- package/dist/src/Worker.d.ts.map +0 -1
- package/dist/src/Worker.js +0 -29
- package/src/Worker.ts +0 -54
|
@@ -5,15 +5,18 @@ import {
|
|
|
5
5
|
type CreateSqliteDriver,
|
|
6
6
|
type SqliteRow,
|
|
7
7
|
} from "@evolu/common";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
deleteDatabaseSync,
|
|
10
|
+
openDatabaseSync,
|
|
11
|
+
type SQLiteStatement,
|
|
12
|
+
} from "expo-sqlite";
|
|
9
13
|
|
|
10
14
|
export const createExpoSqliteDriver: CreateSqliteDriver =
|
|
11
15
|
(name, options) => () => {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
),
|
|
16
|
+
const databaseName = `evolu1-${name}.db`;
|
|
17
|
+
using disposer = new DisposableStack();
|
|
18
|
+
const db = disposer.adopt(
|
|
19
|
+
openDatabaseSync(options?.mode === "memory" ? ":memory:" : databaseName),
|
|
17
20
|
(db) => {
|
|
18
21
|
db.closeSync();
|
|
19
22
|
},
|
|
@@ -22,7 +25,7 @@ export const createExpoSqliteDriver: CreateSqliteDriver =
|
|
|
22
25
|
db.execSync(`PRAGMA key = "x'${bytesToHex(options.encryptionKey)}'"`);
|
|
23
26
|
}
|
|
24
27
|
|
|
25
|
-
const cache =
|
|
28
|
+
const cache = disposer.use(
|
|
26
29
|
createPreparedStatementsCache<SQLiteStatement>(
|
|
27
30
|
(sql) => db.prepareSync(sql),
|
|
28
31
|
(statement) => {
|
|
@@ -31,6 +34,8 @@ export const createExpoSqliteDriver: CreateSqliteDriver =
|
|
|
31
34
|
),
|
|
32
35
|
);
|
|
33
36
|
|
|
37
|
+
const disposables = disposer.move();
|
|
38
|
+
|
|
34
39
|
return ok({
|
|
35
40
|
exec: (query) => {
|
|
36
41
|
const execStatement = (statement: SQLiteStatement) => {
|
|
@@ -67,8 +72,18 @@ export const createExpoSqliteDriver: CreateSqliteDriver =
|
|
|
67
72
|
return new Uint8Array(file);
|
|
68
73
|
},
|
|
69
74
|
|
|
75
|
+
deleteDatabase: () => {
|
|
76
|
+
using deleteDisposer = new DisposableStack();
|
|
77
|
+
if (options?.mode !== "memory") {
|
|
78
|
+
deleteDisposer.defer(() => {
|
|
79
|
+
deleteDatabaseSync(databaseName);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
deleteDisposer.use(disposables);
|
|
83
|
+
},
|
|
84
|
+
|
|
70
85
|
[Symbol.dispose]: () => {
|
|
71
|
-
|
|
86
|
+
disposables.dispose();
|
|
72
87
|
},
|
|
73
88
|
});
|
|
74
89
|
};
|
|
@@ -11,8 +11,8 @@ import { open, type PreparedStatement } from "@op-engineering/op-sqlite";
|
|
|
11
11
|
export const createOpSqliteDriver: CreateSqliteDriver =
|
|
12
12
|
(name, options) => () => {
|
|
13
13
|
// https://op-engineering.github.io/op-sqlite/docs/configuration#in-memory
|
|
14
|
-
|
|
15
|
-
const db =
|
|
14
|
+
using disposer = new DisposableStack();
|
|
15
|
+
const db = disposer.adopt(
|
|
16
16
|
open(
|
|
17
17
|
options?.mode === "memory"
|
|
18
18
|
? { name: `inMemoryDb`, location: ":memory:" }
|
|
@@ -28,7 +28,7 @@ export const createOpSqliteDriver: CreateSqliteDriver =
|
|
|
28
28
|
},
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
const cache =
|
|
31
|
+
const cache = disposer.use(
|
|
32
32
|
createPreparedStatementsCache<PreparedStatement>(
|
|
33
33
|
(sql) => db.prepareStatement(sql),
|
|
34
34
|
// op-sqlite doesn't have API for that
|
|
@@ -36,6 +36,8 @@ export const createOpSqliteDriver: CreateSqliteDriver =
|
|
|
36
36
|
),
|
|
37
37
|
);
|
|
38
38
|
|
|
39
|
+
const disposables = disposer.move();
|
|
40
|
+
|
|
39
41
|
return ok({
|
|
40
42
|
exec: (query) => {
|
|
41
43
|
const prepared = cache.get(query);
|
|
@@ -57,8 +59,18 @@ export const createOpSqliteDriver: CreateSqliteDriver =
|
|
|
57
59
|
throw new Error("TODO: Not implemented yet");
|
|
58
60
|
},
|
|
59
61
|
|
|
62
|
+
deleteDatabase: () => {
|
|
63
|
+
using deleteDisposer = new DisposableStack();
|
|
64
|
+
if (options?.mode !== "memory") {
|
|
65
|
+
deleteDisposer.defer(() => {
|
|
66
|
+
db.delete();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
deleteDisposer.use(disposables);
|
|
70
|
+
},
|
|
71
|
+
|
|
60
72
|
[Symbol.dispose]: () => {
|
|
61
|
-
|
|
73
|
+
disposables.dispose();
|
|
62
74
|
},
|
|
63
75
|
});
|
|
64
76
|
};
|
package/dist/src/Worker.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { type MessageChannel, type MessagePort, type NativeMessagePort, type SharedWorker, type SharedWorkerSelf, type Worker, type WorkerSelf } from "@evolu/common";
|
|
2
|
-
/**
|
|
3
|
-
* Creates an in-memory {@link Worker} for React Native.
|
|
4
|
-
*
|
|
5
|
-
* Since React Native doesn't support Web Workers yet, this runs in the main
|
|
6
|
-
* thread. Messages are queued until `onMessage` is assigned.
|
|
7
|
-
*/
|
|
8
|
-
export declare const createWorker: <Input, Output>(initWorker: (self: WorkerSelf<Input, Output>) => void) => Worker<Input, Output>;
|
|
9
|
-
/**
|
|
10
|
-
* Creates an in-memory {@link SharedWorker} for React Native.
|
|
11
|
-
*
|
|
12
|
-
* Since React Native doesn't support SharedWorkers, this runs in the main
|
|
13
|
-
* thread. Messages are queued until `onMessage` is assigned.
|
|
14
|
-
*/
|
|
15
|
-
export declare const createSharedWorker: <Input, Output>(initWorker: (self: SharedWorkerSelf<Input, Output>) => void) => SharedWorker<Input, Output>;
|
|
16
|
-
/**
|
|
17
|
-
* Creates an in-memory {@link MessageChannel} for React Native.
|
|
18
|
-
*
|
|
19
|
-
* Since React Native doesn't support MessageChannel yet, this creates two
|
|
20
|
-
* connected ports running in-process. Messages are queued until `onMessage` is
|
|
21
|
-
* assigned.
|
|
22
|
-
*/
|
|
23
|
-
export declare const createMessageChannel: <Input, Output = never>() => MessageChannel<Input, Output>;
|
|
24
|
-
/**
|
|
25
|
-
* Creates an Evolu {@link MessagePort} from a "native" port.
|
|
26
|
-
*
|
|
27
|
-
* Uses the shared in-memory native-port registry from `@evolu/common`.
|
|
28
|
-
*/
|
|
29
|
-
export declare const createMessagePort: <Input, Output = never>(nativePort: NativeMessagePort<Input, Output>) => MessagePort<Input, Output>;
|
|
30
|
-
//# sourceMappingURL=Worker.d.ts.map
|
package/dist/src/Worker.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.d.ts","sourceRoot":"","sources":["../../src/Worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,EAAE,MAAM,EACxC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KACpD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAmC,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,EAAE,MAAM,EAC9C,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAC1D,YAAY,CAAC,KAAK,EAAE,MAAM,CAAyC,CAAC;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,EAAE,MAAM,GAAG,KAAK,OAAK,cAAc,CAC3E,KAAK,EACL,MAAM,CACwC,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,EAAE,MAAM,GAAG,KAAK,EACrD,YAAY,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,KAC3C,WAAW,CAAC,KAAK,EAAE,MAAM,CAAwC,CAAC"}
|
package/dist/src/Worker.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { createMessageChannel as createCommonMessageChannel, createMessagePort as createCommonMessagePort, createSharedWorker as createCommonSharedWorker, createWorker as createCommonWorker, } from "@evolu/common";
|
|
2
|
-
/**
|
|
3
|
-
* Creates an in-memory {@link Worker} for React Native.
|
|
4
|
-
*
|
|
5
|
-
* Since React Native doesn't support Web Workers yet, this runs in the main
|
|
6
|
-
* thread. Messages are queued until `onMessage` is assigned.
|
|
7
|
-
*/
|
|
8
|
-
export const createWorker = (initWorker) => createCommonWorker(initWorker);
|
|
9
|
-
/**
|
|
10
|
-
* Creates an in-memory {@link SharedWorker} for React Native.
|
|
11
|
-
*
|
|
12
|
-
* Since React Native doesn't support SharedWorkers, this runs in the main
|
|
13
|
-
* thread. Messages are queued until `onMessage` is assigned.
|
|
14
|
-
*/
|
|
15
|
-
export const createSharedWorker = (initWorker) => createCommonSharedWorker(initWorker);
|
|
16
|
-
/**
|
|
17
|
-
* Creates an in-memory {@link MessageChannel} for React Native.
|
|
18
|
-
*
|
|
19
|
-
* Since React Native doesn't support MessageChannel yet, this creates two
|
|
20
|
-
* connected ports running in-process. Messages are queued until `onMessage` is
|
|
21
|
-
* assigned.
|
|
22
|
-
*/
|
|
23
|
-
export const createMessageChannel = () => createCommonMessageChannel();
|
|
24
|
-
/**
|
|
25
|
-
* Creates an Evolu {@link MessagePort} from a "native" port.
|
|
26
|
-
*
|
|
27
|
-
* Uses the shared in-memory native-port registry from `@evolu/common`.
|
|
28
|
-
*/
|
|
29
|
-
export const createMessagePort = (nativePort) => createCommonMessagePort(nativePort);
|
package/src/Worker.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createMessageChannel as createCommonMessageChannel,
|
|
3
|
-
createMessagePort as createCommonMessagePort,
|
|
4
|
-
createSharedWorker as createCommonSharedWorker,
|
|
5
|
-
createWorker as createCommonWorker,
|
|
6
|
-
type MessageChannel,
|
|
7
|
-
type MessagePort,
|
|
8
|
-
type NativeMessagePort,
|
|
9
|
-
type SharedWorker,
|
|
10
|
-
type SharedWorkerSelf,
|
|
11
|
-
type Worker,
|
|
12
|
-
type WorkerSelf,
|
|
13
|
-
} from "@evolu/common";
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Creates an in-memory {@link Worker} for React Native.
|
|
17
|
-
*
|
|
18
|
-
* Since React Native doesn't support Web Workers yet, this runs in the main
|
|
19
|
-
* thread. Messages are queued until `onMessage` is assigned.
|
|
20
|
-
*/
|
|
21
|
-
export const createWorker = <Input, Output>(
|
|
22
|
-
initWorker: (self: WorkerSelf<Input, Output>) => void,
|
|
23
|
-
): Worker<Input, Output> => createCommonWorker(initWorker);
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Creates an in-memory {@link SharedWorker} for React Native.
|
|
27
|
-
*
|
|
28
|
-
* Since React Native doesn't support SharedWorkers, this runs in the main
|
|
29
|
-
* thread. Messages are queued until `onMessage` is assigned.
|
|
30
|
-
*/
|
|
31
|
-
export const createSharedWorker = <Input, Output>(
|
|
32
|
-
initWorker: (self: SharedWorkerSelf<Input, Output>) => void,
|
|
33
|
-
): SharedWorker<Input, Output> => createCommonSharedWorker(initWorker);
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Creates an in-memory {@link MessageChannel} for React Native.
|
|
37
|
-
*
|
|
38
|
-
* Since React Native doesn't support MessageChannel yet, this creates two
|
|
39
|
-
* connected ports running in-process. Messages are queued until `onMessage` is
|
|
40
|
-
* assigned.
|
|
41
|
-
*/
|
|
42
|
-
export const createMessageChannel = <Input, Output = never>(): MessageChannel<
|
|
43
|
-
Input,
|
|
44
|
-
Output
|
|
45
|
-
> => createCommonMessageChannel<Input, Output>();
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Creates an Evolu {@link MessagePort} from a "native" port.
|
|
49
|
-
*
|
|
50
|
-
* Uses the shared in-memory native-port registry from `@evolu/common`.
|
|
51
|
-
*/
|
|
52
|
-
export const createMessagePort = <Input, Output = never>(
|
|
53
|
-
nativePort: NativeMessagePort<Input, Output>,
|
|
54
|
-
): MessagePort<Input, Output> => createCommonMessagePort(nativePort);
|