@openmrs/esm-offline 4.0.0-pre.0 → 4.0.0-pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +7 -7
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +123 -24
- package/.turbo/turbo-typescript.log +2 -2
- package/dist/dynamic-offline-data.d.ts +156 -0
- package/dist/dynamic-offline-data.test.d.ts +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/mode.d.ts +10 -0
- package/dist/offline-db.d.ts +20 -0
- package/dist/offline-patient-data.d.ts +30 -0
- package/dist/openmrs-esm-offline.js +1 -1
- package/dist/openmrs-esm-offline.js.map +1 -1
- package/dist/public.d.ts +8 -0
- package/dist/service-worker-http-headers.d.ts +36 -0
- package/dist/service-worker-messaging.d.ts +28 -0
- package/dist/service-worker.d.ts +18 -0
- package/dist/sync.d.ts +151 -0
- package/dist/sync.test.d.ts +1 -0
- package/dist/uuid.d.ts +5 -0
- package/package.json +6 -6
- package/src/dynamic-offline-data.test.ts +70 -0
- package/src/dynamic-offline-data.ts +348 -0
- package/src/index.ts +2 -0
- package/src/offline-db.ts +35 -0
- package/src/offline-patient-data.ts +31 -191
- package/src/public.ts +2 -1
- package/src/service-worker.ts +1 -1
- package/src/sync.test.ts +3 -3
- package/src/sync.ts +2 -22
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
[32m@openmrs/esm-offline:build: [0mcache hit, replaying output [
|
|
1
|
+
[32m@openmrs/esm-offline:build: [0mcache hit, replaying output [2m1364214084b08f2a[0m
|
|
2
2
|
[32m@openmrs/esm-offline:build: [0m$ webpack --mode=production
|
|
3
|
-
[32m@openmrs/esm-offline:build: [0masset openmrs-esm-offline.js
|
|
4
|
-
[32m@openmrs/esm-offline:build: [0morphan modules
|
|
3
|
+
[32m@openmrs/esm-offline:build: [0masset openmrs-esm-offline.js 112 KiB [emitted] [minimized] (name: main) 1 related asset
|
|
4
|
+
[32m@openmrs/esm-offline:build: [0morphan modules 164 KiB [orphan] 26 modules
|
|
5
5
|
[32m@openmrs/esm-offline:build: [0mruntime modules 2.02 KiB 7 modules
|
|
6
|
-
[32m@openmrs/esm-offline:build: [0mbuilt modules
|
|
7
|
-
[32m@openmrs/esm-offline:build: [0m cacheable modules
|
|
6
|
+
[32m@openmrs/esm-offline:build: [0mbuilt modules 177 KiB [built]
|
|
7
|
+
[32m@openmrs/esm-offline:build: [0m cacheable modules 176 KiB
|
|
8
8
|
[32m@openmrs/esm-offline:build: [0m modules by path ../../../node_modules/systemjs-webpack-interop/ 3.27 KiB
|
|
9
9
|
[32m@openmrs/esm-offline:build: [0m ../../../node_modules/systemjs-webpack-interop/auto-public-path/1.js 89 bytes [built] [code generated]
|
|
10
10
|
[32m@openmrs/esm-offline:build: [0m ../../../node_modules/systemjs-webpack-interop/auto-public-path/auto-public-path.js 846 bytes [built] [code generated]
|
|
11
11
|
[32m@openmrs/esm-offline:build: [0m ../../../node_modules/systemjs-webpack-interop/public-path.js 2.36 KiB [built] [code generated]
|
|
12
|
-
[32m@openmrs/esm-offline:build: [0m ./src/index.ts +
|
|
12
|
+
[32m@openmrs/esm-offline:build: [0m ./src/index.ts + 16 modules 149 KiB [built] [code generated]
|
|
13
13
|
[32m@openmrs/esm-offline:build: [0m ../../../node_modules/regenerator-runtime/runtime.js 24.3 KiB [built] [code generated]
|
|
14
14
|
[32m@openmrs/esm-offline:build: [0m modules by path external "@openmrs/ 84 bytes
|
|
15
15
|
[32m@openmrs/esm-offline:build: [0m external "@openmrs/esm-api" 42 bytes [built] [code generated]
|
|
16
16
|
[32m@openmrs/esm-offline:build: [0m external "@openmrs/esm-state" 42 bytes [built] [code generated]
|
|
17
|
-
[32m@openmrs/esm-offline:build: [0mwebpack 5.70.0 compiled successfully in
|
|
17
|
+
[32m@openmrs/esm-offline:build: [0mwebpack 5.70.0 compiled successfully in 10780 ms
|
package/.turbo/turbo-lint.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[32m@openmrs/esm-offline:lint: [0mcache hit, replaying output [
|
|
1
|
+
[32m@openmrs/esm-offline:lint: [0mcache hit, replaying output [2mea6024db99e36a2e[0m
|
|
2
2
|
[32m@openmrs/esm-offline:lint: [0m$ eslint src --ext ts,tsx
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,24 +1,123 @@
|
|
|
1
|
-
[
|
|
2
|
-
[
|
|
3
|
-
[
|
|
4
|
-
[
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
21
|
-
[
|
|
22
|
-
[
|
|
23
|
-
[
|
|
24
|
-
[
|
|
1
|
+
[36m@openmrs/esm-offline:test: [0mcache hit, replaying output [2m1a48812f0c130a46[0m
|
|
2
|
+
[36m@openmrs/esm-offline:test: [0m$ jest --config jest.config.js --passWithNoTests
|
|
3
|
+
[36m@openmrs/esm-offline:test: [0mPASS src/sync.test.ts (14.915 s)
|
|
4
|
+
[36m@openmrs/esm-offline:test: [0mPASS src/dynamic-offline-data.test.ts (16.473 s)
|
|
5
|
+
[36m@openmrs/esm-offline:test: [0m ● Console
|
|
6
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
7
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
8
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","users":"00000000-0000-0000-0000-000000000000"} on dynamicOfflineData would benefit of a compound index [type+users]
|
|
9
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
10
|
+
[36m@openmrs/esm-offline:test: [0m 149 | const db = new OfflineDb();
|
|
11
|
+
[36m@openmrs/esm-offline:test: [0m 150 | return await db.dynamicOfflineData
|
|
12
|
+
[36m@openmrs/esm-offline:test: [0m > 151 | .where(filter)
|
|
13
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
14
|
+
[36m@openmrs/esm-offline:test: [0m 152 | .toArray()
|
|
15
|
+
[36m@openmrs/esm-offline:test: [0m 153 | .catch(Dexie.errnames.DatabaseClosed, () => []);
|
|
16
|
+
[36m@openmrs/esm-offline:test: [0m 154 | }
|
|
17
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
18
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
19
|
+
[36m@openmrs/esm-offline:test: [0m at where (src/dynamic-offline-data.ts:151:6)
|
|
20
|
+
[36m@openmrs/esm-offline:test: [0m at Object.getDynamicOfflineDataEntriesFor [as getDynamicOfflineDataEntries] (src/dynamic-offline-data.ts:135:16)
|
|
21
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:28:21)
|
|
22
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
23
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
24
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","users":"00000000-0000-0000-0000-000000000000"} on dynamicOfflineData would benefit of a compound index [type+users]
|
|
25
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
26
|
+
[36m@openmrs/esm-offline:test: [0m 149 | const db = new OfflineDb();
|
|
27
|
+
[36m@openmrs/esm-offline:test: [0m 150 | return await db.dynamicOfflineData
|
|
28
|
+
[36m@openmrs/esm-offline:test: [0m > 151 | .where(filter)
|
|
29
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
30
|
+
[36m@openmrs/esm-offline:test: [0m 152 | .toArray()
|
|
31
|
+
[36m@openmrs/esm-offline:test: [0m 153 | .catch(Dexie.errnames.DatabaseClosed, () => []);
|
|
32
|
+
[36m@openmrs/esm-offline:test: [0m 154 | }
|
|
33
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
34
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
35
|
+
[36m@openmrs/esm-offline:test: [0m at where (src/dynamic-offline-data.ts:151:6)
|
|
36
|
+
[36m@openmrs/esm-offline:test: [0m at Object.getDynamicOfflineDataEntriesFor [as getDynamicOfflineDataEntries] (src/dynamic-offline-data.ts:135:16)
|
|
37
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:39:21)
|
|
38
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
39
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
40
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","users":"user-id-1"} on dynamicOfflineData would benefit of a compound index [type+users]
|
|
41
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
42
|
+
[36m@openmrs/esm-offline:test: [0m 149 | const db = new OfflineDb();
|
|
43
|
+
[36m@openmrs/esm-offline:test: [0m 150 | return await db.dynamicOfflineData
|
|
44
|
+
[36m@openmrs/esm-offline:test: [0m > 151 | .where(filter)
|
|
45
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
46
|
+
[36m@openmrs/esm-offline:test: [0m 152 | .toArray()
|
|
47
|
+
[36m@openmrs/esm-offline:test: [0m 153 | .catch(Dexie.errnames.DatabaseClosed, () => []);
|
|
48
|
+
[36m@openmrs/esm-offline:test: [0m 154 | }
|
|
49
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
50
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
51
|
+
[36m@openmrs/esm-offline:test: [0m at Object.where [as getDynamicOfflineDataEntriesFor] (src/dynamic-offline-data.ts:151:6)
|
|
52
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:47:79)
|
|
53
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
54
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
55
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","identifier":"123","users":"00000000-0000-0000-0000-000000000000"} on dynamicOfflineData would benefit of a compound index [type+identifier+users]
|
|
56
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
57
|
+
[36m@openmrs/esm-offline:test: [0m 233 | const db = new OfflineDb();
|
|
58
|
+
[36m@openmrs/esm-offline:test: [0m 234 | const existingEntry = await db.dynamicOfflineData
|
|
59
|
+
[36m@openmrs/esm-offline:test: [0m > 235 | .get({
|
|
60
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
61
|
+
[36m@openmrs/esm-offline:test: [0m 236 | type,
|
|
62
|
+
[36m@openmrs/esm-offline:test: [0m 237 | identifier,
|
|
63
|
+
[36m@openmrs/esm-offline:test: [0m 238 | users: userId,
|
|
64
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
65
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
66
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.get (../../../node_modules/dexie/src/classes/table/table.ts:77:19)
|
|
67
|
+
[36m@openmrs/esm-offline:test: [0m at get (src/dynamic-offline-data.ts:235:6)
|
|
68
|
+
[36m@openmrs/esm-offline:test: [0m at Object.removeDynamicOfflineDataFor [as removeDynamicOfflineData] (src/dynamic-offline-data.ts:218:16)
|
|
69
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:56:5)
|
|
70
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
71
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
72
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","users":"00000000-0000-0000-0000-000000000000"} on dynamicOfflineData would benefit of a compound index [type+users]
|
|
73
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
74
|
+
[36m@openmrs/esm-offline:test: [0m 149 | const db = new OfflineDb();
|
|
75
|
+
[36m@openmrs/esm-offline:test: [0m 150 | return await db.dynamicOfflineData
|
|
76
|
+
[36m@openmrs/esm-offline:test: [0m > 151 | .where(filter)
|
|
77
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
78
|
+
[36m@openmrs/esm-offline:test: [0m 152 | .toArray()
|
|
79
|
+
[36m@openmrs/esm-offline:test: [0m 153 | .catch(Dexie.errnames.DatabaseClosed, () => []);
|
|
80
|
+
[36m@openmrs/esm-offline:test: [0m 154 | }
|
|
81
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
82
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
83
|
+
[36m@openmrs/esm-offline:test: [0m at where (src/dynamic-offline-data.ts:151:6)
|
|
84
|
+
[36m@openmrs/esm-offline:test: [0m at Object.getDynamicOfflineDataEntriesFor [as getDynamicOfflineDataEntries] (src/dynamic-offline-data.ts:135:16)
|
|
85
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:57:21)
|
|
86
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
87
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
88
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","identifier":"123","users":"user-id-1"} on dynamicOfflineData would benefit of a compound index [type+identifier+users]
|
|
89
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
90
|
+
[36m@openmrs/esm-offline:test: [0m 233 | const db = new OfflineDb();
|
|
91
|
+
[36m@openmrs/esm-offline:test: [0m 234 | const existingEntry = await db.dynamicOfflineData
|
|
92
|
+
[36m@openmrs/esm-offline:test: [0m > 235 | .get({
|
|
93
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
94
|
+
[36m@openmrs/esm-offline:test: [0m 236 | type,
|
|
95
|
+
[36m@openmrs/esm-offline:test: [0m 237 | identifier,
|
|
96
|
+
[36m@openmrs/esm-offline:test: [0m 238 | users: userId,
|
|
97
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
98
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
99
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.get (../../../node_modules/dexie/src/classes/table/table.ts:77:19)
|
|
100
|
+
[36m@openmrs/esm-offline:test: [0m at Object.get [as removeDynamicOfflineDataFor] (src/dynamic-offline-data.ts:235:6)
|
|
101
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:64:66)
|
|
102
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
103
|
+
[36m@openmrs/esm-offline:test: [0m console.warn
|
|
104
|
+
[36m@openmrs/esm-offline:test: [0m The query {"type":"test","users":"user-id-2"} on dynamicOfflineData would benefit of a compound index [type+users]
|
|
105
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
106
|
+
[36m@openmrs/esm-offline:test: [0m 149 | const db = new OfflineDb();
|
|
107
|
+
[36m@openmrs/esm-offline:test: [0m 150 | return await db.dynamicOfflineData
|
|
108
|
+
[36m@openmrs/esm-offline:test: [0m > 151 | .where(filter)
|
|
109
|
+
[36m@openmrs/esm-offline:test: [0m | ^
|
|
110
|
+
[36m@openmrs/esm-offline:test: [0m 152 | .toArray()
|
|
111
|
+
[36m@openmrs/esm-offline:test: [0m 153 | .catch(Dexie.errnames.DatabaseClosed, () => []);
|
|
112
|
+
[36m@openmrs/esm-offline:test: [0m 154 | }
|
|
113
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
114
|
+
[36m@openmrs/esm-offline:test: [0m at Table.Object.<anonymous>.Table.where (../../../node_modules/dexie/src/classes/table/table.ts:118:42)
|
|
115
|
+
[36m@openmrs/esm-offline:test: [0m at Object.where [as getDynamicOfflineDataEntriesFor] (src/dynamic-offline-data.ts:151:6)
|
|
116
|
+
[36m@openmrs/esm-offline:test: [0m at Object.<anonymous> (src/dynamic-offline-data.test.ts:66:79)
|
|
117
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
118
|
+
[36m@openmrs/esm-offline:test: [0m
|
|
119
|
+
[36m@openmrs/esm-offline:test: [0mTest Suites: 2 passed, 2 total
|
|
120
|
+
[36m@openmrs/esm-offline:test: [0mTests: 14 passed, 14 total
|
|
121
|
+
[36m@openmrs/esm-offline:test: [0mSnapshots: 0 total
|
|
122
|
+
[36m@openmrs/esm-offline:test: [0mTime: 20.647 s
|
|
123
|
+
[36m@openmrs/esm-offline:test: [0mRan all test suites.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[
|
|
2
|
-
[
|
|
1
|
+
[32m@openmrs/esm-offline:typescript: [0mcache hit, replaying output [2m7455ab648603336c[0m
|
|
2
|
+
[32m@openmrs/esm-offline:typescript: [0m$ tsc
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A handler for synchronizing dynamically declared offline data.
|
|
3
|
+
* Can be setup using the {@link setupDynamicOfflineDataHandler} function.
|
|
4
|
+
*/
|
|
5
|
+
export interface DynamicOfflineDataHandler {
|
|
6
|
+
/**
|
|
7
|
+
* A string uniquely identifying the handler.
|
|
8
|
+
*/
|
|
9
|
+
id: string;
|
|
10
|
+
/**
|
|
11
|
+
* The type of offline data handled by this handler.
|
|
12
|
+
* See {@link DynamicOfflineData.type} for details.
|
|
13
|
+
*/
|
|
14
|
+
type: string;
|
|
15
|
+
/**
|
|
16
|
+
* A human-readable string representing the handler.
|
|
17
|
+
* If provided, the handler can be rendered in the UI using that string.
|
|
18
|
+
*/
|
|
19
|
+
displayName?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Evaluates whether the given offline data is correctly synced at this point in time from the perspective
|
|
22
|
+
* of this single handler.
|
|
23
|
+
* If `false`, the handler would have to (re-)sync the data in order for offline mode to properly work.
|
|
24
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
25
|
+
* @param abortSignal An {@link AbortSignal} which can be used to cancel the operation.
|
|
26
|
+
*/
|
|
27
|
+
isSynced(identifier: string, abortSignal?: AbortSignal): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Synchronizes the given offline data.
|
|
30
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
31
|
+
* @param abortSignal An {@link AbortSignal} which can be used to cancel the operation.
|
|
32
|
+
*/
|
|
33
|
+
sync(identifier: string, abortSignal?: AbortSignal): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Represents the registration of a single dynamic offline data entry.
|
|
37
|
+
*/
|
|
38
|
+
export interface DynamicOfflineData {
|
|
39
|
+
/**
|
|
40
|
+
* The internal ID of the data entry, as assigned by the IndexedDB where it is stored.
|
|
41
|
+
*/
|
|
42
|
+
id?: number;
|
|
43
|
+
/**
|
|
44
|
+
* The underlying type used for categorizing the data entry.
|
|
45
|
+
* Examples could be `"patient"` or `"form"`.
|
|
46
|
+
*/
|
|
47
|
+
type: string;
|
|
48
|
+
/**
|
|
49
|
+
* The externally provided identifier of the data entry.
|
|
50
|
+
* This is typically the ID of the resource as assigned by a remote API.
|
|
51
|
+
*/
|
|
52
|
+
identifier: string;
|
|
53
|
+
/**
|
|
54
|
+
* The UUIDs of the users who need this data entry available offline.
|
|
55
|
+
*/
|
|
56
|
+
users: Array<string>;
|
|
57
|
+
/**
|
|
58
|
+
* If this entry has already been synced, returns the result of that last sync attempt.
|
|
59
|
+
* Otherwise this is `undefined`.
|
|
60
|
+
*/
|
|
61
|
+
syncState?: DynamicOfflineDataSyncState;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Represents the result of syncing a given {@link DynamicOfflineData} entry.
|
|
65
|
+
*/
|
|
66
|
+
export interface DynamicOfflineDataSyncState {
|
|
67
|
+
/**
|
|
68
|
+
* The time when the entry has been synced the last time.
|
|
69
|
+
*/
|
|
70
|
+
syncedOn: Date;
|
|
71
|
+
/**
|
|
72
|
+
* The ID of the user who has triggered the data synchronization.
|
|
73
|
+
*/
|
|
74
|
+
syncedBy: string;
|
|
75
|
+
/**
|
|
76
|
+
* The IDs of the handlers which successfully synchronized their data.
|
|
77
|
+
*/
|
|
78
|
+
succeededHandlers: Array<string>;
|
|
79
|
+
/**
|
|
80
|
+
* The IDs of the handlers which failed to synchronize their data.
|
|
81
|
+
*/
|
|
82
|
+
erroredHandlers: Array<string>;
|
|
83
|
+
/**
|
|
84
|
+
* A collection of the errors caught while synchronizing, per handler.
|
|
85
|
+
*/
|
|
86
|
+
errors: Array<{
|
|
87
|
+
handlerId: string;
|
|
88
|
+
message: string;
|
|
89
|
+
}>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Returns all handlers which have been setup using the {@link setupDynamicOfflineDataHandler} function.
|
|
93
|
+
*/
|
|
94
|
+
export declare function getDynamicOfflineDataHandlers(): DynamicOfflineDataHandler[];
|
|
95
|
+
/**
|
|
96
|
+
* Sets up a handler for synchronizing dynamic offline data.
|
|
97
|
+
* See {@link DynamicOfflineDataHandler} for details.
|
|
98
|
+
* @param handler The handler to be setup.
|
|
99
|
+
*/
|
|
100
|
+
export declare function setupDynamicOfflineDataHandler(handler: DynamicOfflineDataHandler): void;
|
|
101
|
+
/**
|
|
102
|
+
* Returns all {@link DynamicOfflineData} entries which registered for the currently logged in user.
|
|
103
|
+
* Optionally returns only entries of a given type.
|
|
104
|
+
* @param type The type of the entries to be returned. If `undefined`, returns all types.
|
|
105
|
+
*/
|
|
106
|
+
export declare function getDynamicOfflineDataEntries(type?: string): Promise<Array<DynamicOfflineData>>;
|
|
107
|
+
/**
|
|
108
|
+
* Returns all {@link DynamicOfflineData} entries which registered for the given user.
|
|
109
|
+
* Optionally returns only entries of a given type.
|
|
110
|
+
* @param userId The ID of the user whose entries are to be retrieved.
|
|
111
|
+
* @param type The type of the entries to be returned. If `undefined`, returns all types.
|
|
112
|
+
*/
|
|
113
|
+
export declare function getDynamicOfflineDataEntriesFor(userId: string, type?: string): Promise<Array<DynamicOfflineData>>;
|
|
114
|
+
/**
|
|
115
|
+
* Declares that dynamic offline data of the given {@link type} with the given {@link identifier}
|
|
116
|
+
* should be made available offline for the currently logged in user.
|
|
117
|
+
* @param type The type of the offline data. See {@link DynamicOfflineData} for details.
|
|
118
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
119
|
+
*/
|
|
120
|
+
export declare function putDynamicOfflineData(type: string, identifier: string): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Declares that dynamic offline data of the given {@link type} with the given {@link identifier}
|
|
123
|
+
* should be made available offline for the user with the given ID.
|
|
124
|
+
* @param userId The ID of the user for whom the dynamic offline data should be made available.
|
|
125
|
+
* @param type The type of the offline data. See {@link DynamicOfflineData} for details.
|
|
126
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
127
|
+
*/
|
|
128
|
+
export declare function putDynamicOfflineDataFor(userId: string, type: string, identifier: string): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Declares that dynamic offline data of the given {@link type} with the given {@link identifier}
|
|
131
|
+
* no longer needs to be available offline for the currently logged in user.
|
|
132
|
+
* @param type The type of the offline data. See {@link DynamicOfflineData} for details.
|
|
133
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
134
|
+
*/
|
|
135
|
+
export declare function removeDynamicOfflineData(type: string, identifier: string): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Declares that dynamic offline data of the given {@link type} with the given {@link identifier}
|
|
138
|
+
* no longer needs to be available offline for the user with the given ID.
|
|
139
|
+
* @param userId The ID of the user who doesn't require the specified offline data.
|
|
140
|
+
* @param type The type of the offline data. See {@link DynamicOfflineData} for details.
|
|
141
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
142
|
+
*/
|
|
143
|
+
export declare function removeDynamicOfflineDataFor(userId: string, type: string, identifier: string): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Synchronizes all offline data entries of the given {@link type} for the currently logged in user.
|
|
146
|
+
* @param type The type of the offline data. See {@link DynamicOfflineData} for details.
|
|
147
|
+
* @param abortSignal An {@link AbortSignal} which can be used to cancel the operation.
|
|
148
|
+
*/
|
|
149
|
+
export declare function syncAllDynamicOfflineData(type: string, abortSignal?: AbortSignal): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Synchronizes a single offline data entry of the given {@link type} for the currently logged in user.
|
|
152
|
+
* @param type The type of the offline data. See {@link DynamicOfflineData} for details.
|
|
153
|
+
* @param identifier The identifier of the offline data. See {@link DynamicOfflineData} for details.
|
|
154
|
+
* @param abortSignal An {@link AbortSignal} which can be used to cancel the operation.
|
|
155
|
+
*/
|
|
156
|
+
export declare function syncDynamicOfflineData(type: string, identifier: string, abortSignal?: AbortSignal): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "fake-indexeddb/auto";
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./service-worker";
|
|
2
|
+
export * from "./service-worker-http-headers";
|
|
3
|
+
export * from "./service-worker-messaging";
|
|
4
|
+
export * from "./mode";
|
|
5
|
+
export * from "./sync";
|
|
6
|
+
export * from "./uuid";
|
|
7
|
+
export * from "./offline-patient-data";
|
|
8
|
+
export * from "./dynamic-offline-data";
|
|
9
|
+
export { getOfflineDb } from "./offline-db";
|
package/dist/mode.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** @module @category Offline */
|
|
2
|
+
export declare type OfflineMode = "on" | "off" | "unavailable";
|
|
3
|
+
export interface OfflineModeResult {
|
|
4
|
+
current: OfflineMode;
|
|
5
|
+
notAvailable: boolean;
|
|
6
|
+
active: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function getCurrentOfflineMode(): OfflineModeResult;
|
|
9
|
+
export declare function setCurrentOfflineMode(mode: OfflineMode): void;
|
|
10
|
+
export declare function activateOfflineCapability(): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import Dexie, { Table } from "dexie";
|
|
2
|
+
import { DynamicOfflineData } from "./dynamic-offline-data";
|
|
3
|
+
import { SyncItem } from "./sync";
|
|
4
|
+
/**
|
|
5
|
+
* Accesses the central IndexedDB used by the `esm-offline` module to persist offline related state.
|
|
6
|
+
* Leverages the `dexie` library for IndexedDB management.
|
|
7
|
+
*/
|
|
8
|
+
export declare class OfflineDb extends Dexie {
|
|
9
|
+
/**
|
|
10
|
+
* The table used to store the data of the offline synchronization queue (aka "sync queue" / "offline actions").
|
|
11
|
+
*/
|
|
12
|
+
syncQueue: Table<SyncItem, number>;
|
|
13
|
+
dynamicOfflineData: Table<DynamicOfflineData, number>;
|
|
14
|
+
constructor();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @internal Temporarily added for esm-offline-tools-app and workarounds. Please don't use elsewhere.
|
|
18
|
+
* @deprecated Should/Will be removed in the future per the above reason.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getOfflineDb(): OfflineDb;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
2
|
+
export interface OfflinePatientDataSyncStore {
|
|
3
|
+
offlinePatientDataSyncState: Record<string, OfflinePatientDataSyncState>;
|
|
4
|
+
handlers: Record<string, OfflinePatientDataSyncHandler>;
|
|
5
|
+
}
|
|
6
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
7
|
+
export interface OfflinePatientDataSyncState {
|
|
8
|
+
readonly timestamp: Date;
|
|
9
|
+
readonly syncingHandlers: Array<string>;
|
|
10
|
+
readonly syncedHandlers: Array<string>;
|
|
11
|
+
readonly failedHandlers: Array<string>;
|
|
12
|
+
readonly errors: Record<string, string>;
|
|
13
|
+
abort(): boolean;
|
|
14
|
+
}
|
|
15
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
16
|
+
export interface OfflinePatientDataSyncHandler {
|
|
17
|
+
readonly displayName: string;
|
|
18
|
+
onOfflinePatientAdded(args: OfflinePatientArgs): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
21
|
+
export interface OfflinePatientArgs {
|
|
22
|
+
patientUuid: string;
|
|
23
|
+
signal: AbortSignal;
|
|
24
|
+
}
|
|
25
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
26
|
+
export declare function getOfflinePatientDataStore(): import("unistore").Store<OfflinePatientDataSyncStore>;
|
|
27
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
28
|
+
export declare function registerOfflinePatientHandler(identifier: string, handler: OfflinePatientDataSyncHandler): void;
|
|
29
|
+
/** @deprecated Will be removed once all modules have been migrated to the new dynamic offline data API. */
|
|
30
|
+
export declare function syncOfflinePatientData(patientUuid: string): Promise<void>;
|