@verdant-web/store 3.3.2 → 3.4.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.
Files changed (272) hide show
  1. package/dist/bundle/index.js +8 -8
  2. package/dist/bundle/index.js.map +4 -4
  3. package/dist/esm/BackoffScheduler.js.map +1 -1
  4. package/dist/esm/IDBService.js.map +1 -1
  5. package/dist/esm/UndoHistory.js.map +1 -1
  6. package/dist/esm/__tests__/documents.test.js.map +1 -1
  7. package/dist/esm/__tests__/queries.test.js.map +1 -1
  8. package/dist/esm/backup.js.map +1 -1
  9. package/dist/esm/client/Client.d.ts +2 -24
  10. package/dist/esm/client/Client.js +7 -0
  11. package/dist/esm/client/Client.js.map +1 -1
  12. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  13. package/dist/esm/entities/Entity.js.map +1 -1
  14. package/dist/esm/entities/EntityCache.js.map +1 -1
  15. package/dist/esm/entities/EntityMetadata.d.ts +2 -2
  16. package/dist/esm/entities/EntityMetadata.js.map +1 -1
  17. package/dist/esm/entities/EntityStore.d.ts +1 -0
  18. package/dist/esm/entities/EntityStore.js.map +1 -1
  19. package/dist/esm/entities/OperationBatcher.js.map +1 -1
  20. package/dist/esm/files/EntityFile.js.map +1 -1
  21. package/dist/esm/files/FileManager.d.ts +1 -0
  22. package/dist/esm/files/FileManager.js +3 -0
  23. package/dist/esm/files/FileManager.js.map +1 -1
  24. package/dist/esm/files/FileStorage.js.map +1 -1
  25. package/dist/esm/files/utils.js.map +1 -1
  26. package/dist/esm/idb.js.map +1 -1
  27. package/dist/esm/metadata/AckInfoStore.js.map +1 -1
  28. package/dist/esm/metadata/BaselinesStore.d.ts +4 -4
  29. package/dist/esm/metadata/LocalReplicaStore.js.map +1 -1
  30. package/dist/esm/metadata/MessageCreator.js.map +1 -1
  31. package/dist/esm/metadata/Metadata.d.ts +1 -1
  32. package/dist/esm/metadata/Metadata.js.map +1 -1
  33. package/dist/esm/metadata/OperationsStore.js.map +1 -1
  34. package/dist/esm/metadata/SchemaStore.js.map +1 -1
  35. package/dist/esm/metadata/openMetadataDatabase.js.map +1 -1
  36. package/dist/esm/migration/db.js.map +1 -1
  37. package/dist/esm/migration/openDatabase.js.map +1 -1
  38. package/dist/esm/migration/paths.js.map +1 -1
  39. package/dist/esm/queries/BaseQuery.js.map +1 -1
  40. package/dist/esm/queries/QueryCache.js.map +1 -1
  41. package/dist/esm/queries/QueryableStorage.js.map +1 -1
  42. package/dist/esm/queries/dbQueries.js.map +1 -1
  43. package/dist/esm/queries/keys.js.map +1 -1
  44. package/dist/esm/queries/ranges.js.map +1 -1
  45. package/dist/esm/queries/utils.js.map +1 -1
  46. package/dist/esm/sync/FileSync.js.map +1 -1
  47. package/dist/esm/sync/Heartbeat.js.map +1 -1
  48. package/dist/esm/sync/PresenceManager.js.map +1 -1
  49. package/dist/esm/sync/PushPullSync.js.map +1 -1
  50. package/dist/esm/sync/ServerSyncEndpointProvider.js.map +1 -1
  51. package/dist/esm/sync/Sync.d.ts +1 -1
  52. package/dist/esm/sync/Sync.js.map +1 -1
  53. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  54. package/package.json +9 -10
  55. package/src/client/Client.ts +8 -1
  56. package/src/files/FileManager.ts +4 -0
  57. package/src/sync/Sync.ts +2 -2
  58. package/dist/cjs/BackoffScheduler.d.ts +0 -19
  59. package/dist/cjs/BackoffScheduler.js +0 -45
  60. package/dist/cjs/BackoffScheduler.js.map +0 -1
  61. package/dist/cjs/DocumentManager.d.ts +0 -28
  62. package/dist/cjs/DocumentManager.js +0 -45
  63. package/dist/cjs/DocumentManager.js.map +0 -1
  64. package/dist/cjs/FakeWeakRef.d.ts +0 -11
  65. package/dist/cjs/FakeWeakRef.js +0 -19
  66. package/dist/cjs/FakeWeakRef.js.map +0 -1
  67. package/dist/cjs/IDBService.d.ts +0 -30
  68. package/dist/cjs/IDBService.js +0 -101
  69. package/dist/cjs/IDBService.js.map +0 -1
  70. package/dist/cjs/UndoHistory.d.ts +0 -16
  71. package/dist/cjs/UndoHistory.js +0 -55
  72. package/dist/cjs/UndoHistory.js.map +0 -1
  73. package/dist/cjs/__tests__/batching.test.d.ts +0 -1
  74. package/dist/cjs/__tests__/batching.test.js +0 -47
  75. package/dist/cjs/__tests__/batching.test.js.map +0 -1
  76. package/dist/cjs/__tests__/documents.test.d.ts +0 -1
  77. package/dist/cjs/__tests__/documents.test.js +0 -468
  78. package/dist/cjs/__tests__/documents.test.js.map +0 -1
  79. package/dist/cjs/__tests__/fixtures/testStorage.d.ts +0 -76
  80. package/dist/cjs/__tests__/fixtures/testStorage.js +0 -96
  81. package/dist/cjs/__tests__/fixtures/testStorage.js.map +0 -1
  82. package/dist/cjs/__tests__/legacyOids.test.d.ts +0 -1
  83. package/dist/cjs/__tests__/legacyOids.test.js +0 -354
  84. package/dist/cjs/__tests__/legacyOids.test.js.map +0 -1
  85. package/dist/cjs/__tests__/mutations.test.d.ts +0 -1
  86. package/dist/cjs/__tests__/mutations.test.js +0 -48
  87. package/dist/cjs/__tests__/mutations.test.js.map +0 -1
  88. package/dist/cjs/__tests__/queries.test.d.ts +0 -1
  89. package/dist/cjs/__tests__/queries.test.js +0 -323
  90. package/dist/cjs/__tests__/queries.test.js.map +0 -1
  91. package/dist/cjs/__tests__/setup/indexedDB.d.ts +0 -1
  92. package/dist/cjs/__tests__/setup/indexedDB.js +0 -16
  93. package/dist/cjs/__tests__/setup/indexedDB.js.map +0 -1
  94. package/dist/cjs/__tests__/undo.test.d.ts +0 -1
  95. package/dist/cjs/__tests__/undo.test.js +0 -94
  96. package/dist/cjs/__tests__/undo.test.js.map +0 -1
  97. package/dist/cjs/backup.d.ts +0 -10
  98. package/dist/cjs/backup.js +0 -58
  99. package/dist/cjs/backup.js.map +0 -1
  100. package/dist/cjs/client/Client.d.ts +0 -120
  101. package/dist/cjs/client/Client.js +0 -300
  102. package/dist/cjs/client/Client.js.map +0 -1
  103. package/dist/cjs/client/ClientDescriptor.d.ts +0 -76
  104. package/dist/cjs/client/ClientDescriptor.js +0 -213
  105. package/dist/cjs/client/ClientDescriptor.js.map +0 -1
  106. package/dist/cjs/client/constants.d.ts +0 -1
  107. package/dist/cjs/client/constants.js +0 -5
  108. package/dist/cjs/client/constants.js.map +0 -1
  109. package/dist/cjs/constants.d.ts +0 -1
  110. package/dist/cjs/constants.js +0 -5
  111. package/dist/cjs/constants.js.map +0 -1
  112. package/dist/cjs/context.d.ts +0 -38
  113. package/dist/cjs/context.js +0 -3
  114. package/dist/cjs/context.js.map +0 -1
  115. package/dist/cjs/entities/Entity.d.ts +0 -148
  116. package/dist/cjs/entities/Entity.js +0 -711
  117. package/dist/cjs/entities/Entity.js.map +0 -1
  118. package/dist/cjs/entities/Entity.test.d.ts +0 -1
  119. package/dist/cjs/entities/Entity.test.js +0 -194
  120. package/dist/cjs/entities/Entity.test.js.map +0 -1
  121. package/dist/cjs/entities/EntityCache.d.ts +0 -15
  122. package/dist/cjs/entities/EntityCache.js +0 -39
  123. package/dist/cjs/entities/EntityCache.js.map +0 -1
  124. package/dist/cjs/entities/EntityMetadata.d.ts +0 -68
  125. package/dist/cjs/entities/EntityMetadata.js +0 -261
  126. package/dist/cjs/entities/EntityMetadata.js.map +0 -1
  127. package/dist/cjs/entities/EntityStore.d.ts +0 -80
  128. package/dist/cjs/entities/EntityStore.js +0 -352
  129. package/dist/cjs/entities/EntityStore.js.map +0 -1
  130. package/dist/cjs/entities/OperationBatcher.d.ts +0 -52
  131. package/dist/cjs/entities/OperationBatcher.js +0 -165
  132. package/dist/cjs/entities/OperationBatcher.js.map +0 -1
  133. package/dist/cjs/entities/types.d.ts +0 -103
  134. package/dist/cjs/entities/types.js +0 -3
  135. package/dist/cjs/entities/types.js.map +0 -1
  136. package/dist/cjs/files/EntityFile.d.ts +0 -35
  137. package/dist/cjs/files/EntityFile.js +0 -81
  138. package/dist/cjs/files/EntityFile.js.map +0 -1
  139. package/dist/cjs/files/FileManager.d.ts +0 -46
  140. package/dist/cjs/files/FileManager.js +0 -174
  141. package/dist/cjs/files/FileManager.js.map +0 -1
  142. package/dist/cjs/files/FileStorage.d.ts +0 -39
  143. package/dist/cjs/files/FileStorage.js +0 -110
  144. package/dist/cjs/files/FileStorage.js.map +0 -1
  145. package/dist/cjs/files/utils.d.ts +0 -10
  146. package/dist/cjs/files/utils.js +0 -62
  147. package/dist/cjs/files/utils.js.map +0 -1
  148. package/dist/cjs/files/utils.test.d.ts +0 -1
  149. package/dist/cjs/files/utils.test.js +0 -81
  150. package/dist/cjs/files/utils.test.js.map +0 -1
  151. package/dist/cjs/idb.d.ts +0 -13
  152. package/dist/cjs/idb.js +0 -158
  153. package/dist/cjs/idb.js.map +0 -1
  154. package/dist/cjs/index.d.ts +0 -23
  155. package/dist/cjs/index.js +0 -25
  156. package/dist/cjs/index.js.map +0 -1
  157. package/dist/cjs/metadata/AckInfoStore.d.ts +0 -10
  158. package/dist/cjs/metadata/AckInfoStore.js +0 -26
  159. package/dist/cjs/metadata/AckInfoStore.js.map +0 -1
  160. package/dist/cjs/metadata/BaselinesStore.d.ts +0 -40
  161. package/dist/cjs/metadata/BaselinesStore.js +0 -106
  162. package/dist/cjs/metadata/BaselinesStore.js.map +0 -1
  163. package/dist/cjs/metadata/LocalReplicaStore.d.ts +0 -18
  164. package/dist/cjs/metadata/LocalReplicaStore.js +0 -62
  165. package/dist/cjs/metadata/LocalReplicaStore.js.map +0 -1
  166. package/dist/cjs/metadata/MessageCreator.d.ts +0 -19
  167. package/dist/cjs/metadata/MessageCreator.js +0 -128
  168. package/dist/cjs/metadata/MessageCreator.js.map +0 -1
  169. package/dist/cjs/metadata/Metadata.d.ts +0 -135
  170. package/dist/cjs/metadata/Metadata.js +0 -408
  171. package/dist/cjs/metadata/Metadata.js.map +0 -1
  172. package/dist/cjs/metadata/OperationsStore.d.ts +0 -62
  173. package/dist/cjs/metadata/OperationsStore.js +0 -179
  174. package/dist/cjs/metadata/OperationsStore.js.map +0 -1
  175. package/dist/cjs/metadata/SchemaStore.d.ts +0 -9
  176. package/dist/cjs/metadata/SchemaStore.js +0 -39
  177. package/dist/cjs/metadata/SchemaStore.js.map +0 -1
  178. package/dist/cjs/metadata/openMetadataDatabase.d.ts +0 -19
  179. package/dist/cjs/metadata/openMetadataDatabase.js +0 -220
  180. package/dist/cjs/metadata/openMetadataDatabase.js.map +0 -1
  181. package/dist/cjs/migration/db.d.ts +0 -8
  182. package/dist/cjs/migration/db.js +0 -112
  183. package/dist/cjs/migration/db.js.map +0 -1
  184. package/dist/cjs/migration/errors.d.ts +0 -5
  185. package/dist/cjs/migration/errors.js +0 -12
  186. package/dist/cjs/migration/errors.js.map +0 -1
  187. package/dist/cjs/migration/openDatabase.d.ts +0 -20
  188. package/dist/cjs/migration/openDatabase.js +0 -468
  189. package/dist/cjs/migration/openDatabase.js.map +0 -1
  190. package/dist/cjs/migration/paths.d.ts +0 -6
  191. package/dist/cjs/migration/paths.js +0 -53
  192. package/dist/cjs/migration/paths.js.map +0 -1
  193. package/dist/cjs/migration/paths.test.d.ts +0 -1
  194. package/dist/cjs/migration/paths.test.js +0 -91
  195. package/dist/cjs/migration/paths.test.js.map +0 -1
  196. package/dist/cjs/queries/BaseQuery.d.ts +0 -53
  197. package/dist/cjs/queries/BaseQuery.js +0 -148
  198. package/dist/cjs/queries/BaseQuery.js.map +0 -1
  199. package/dist/cjs/queries/CollectionQueries.d.ts +0 -55
  200. package/dist/cjs/queries/CollectionQueries.js +0 -92
  201. package/dist/cjs/queries/CollectionQueries.js.map +0 -1
  202. package/dist/cjs/queries/FindAllQuery.d.ts +0 -12
  203. package/dist/cjs/queries/FindAllQuery.js +0 -44
  204. package/dist/cjs/queries/FindAllQuery.js.map +0 -1
  205. package/dist/cjs/queries/FindInfiniteQuery.d.ts +0 -19
  206. package/dist/cjs/queries/FindInfiniteQuery.js +0 -70
  207. package/dist/cjs/queries/FindInfiniteQuery.js.map +0 -1
  208. package/dist/cjs/queries/FindOneQuery.d.ts +0 -12
  209. package/dist/cjs/queries/FindOneQuery.js +0 -43
  210. package/dist/cjs/queries/FindOneQuery.js.map +0 -1
  211. package/dist/cjs/queries/FindPageQuery.d.ts +0 -24
  212. package/dist/cjs/queries/FindPageQuery.js +0 -77
  213. package/dist/cjs/queries/FindPageQuery.js.map +0 -1
  214. package/dist/cjs/queries/GetQuery.d.ts +0 -10
  215. package/dist/cjs/queries/GetQuery.js +0 -30
  216. package/dist/cjs/queries/GetQuery.js.map +0 -1
  217. package/dist/cjs/queries/QueryCache.d.ts +0 -17
  218. package/dist/cjs/queries/QueryCache.js +0 -46
  219. package/dist/cjs/queries/QueryCache.js.map +0 -1
  220. package/dist/cjs/queries/QueryableStorage.d.ts +0 -20
  221. package/dist/cjs/queries/QueryableStorage.js +0 -94
  222. package/dist/cjs/queries/QueryableStorage.js.map +0 -1
  223. package/dist/cjs/queries/dbQueries.d.ts +0 -22
  224. package/dist/cjs/queries/dbQueries.js +0 -136
  225. package/dist/cjs/queries/dbQueries.js.map +0 -1
  226. package/dist/cjs/queries/keys.d.ts +0 -10
  227. package/dist/cjs/queries/keys.js +0 -34
  228. package/dist/cjs/queries/keys.js.map +0 -1
  229. package/dist/cjs/queries/ranges.d.ts +0 -2
  230. package/dist/cjs/queries/ranges.js +0 -70
  231. package/dist/cjs/queries/ranges.js.map +0 -1
  232. package/dist/cjs/queries/types.d.ts +0 -6
  233. package/dist/cjs/queries/types.js +0 -3
  234. package/dist/cjs/queries/types.js.map +0 -1
  235. package/dist/cjs/queries/utils.d.ts +0 -3
  236. package/dist/cjs/queries/utils.js +0 -25
  237. package/dist/cjs/queries/utils.js.map +0 -1
  238. package/dist/cjs/sync/FileSync.d.ts +0 -24
  239. package/dist/cjs/sync/FileSync.js +0 -87
  240. package/dist/cjs/sync/FileSync.js.map +0 -1
  241. package/dist/cjs/sync/Heartbeat.d.ts +0 -25
  242. package/dist/cjs/sync/Heartbeat.js +0 -64
  243. package/dist/cjs/sync/Heartbeat.js.map +0 -1
  244. package/dist/cjs/sync/PresenceManager.d.ts +0 -55
  245. package/dist/cjs/sync/PresenceManager.js +0 -126
  246. package/dist/cjs/sync/PresenceManager.js.map +0 -1
  247. package/dist/cjs/sync/PushPullSync.d.ts +0 -39
  248. package/dist/cjs/sync/PushPullSync.js +0 -159
  249. package/dist/cjs/sync/PushPullSync.js.map +0 -1
  250. package/dist/cjs/sync/ServerSyncEndpointProvider.d.ts +0 -34
  251. package/dist/cjs/sync/ServerSyncEndpointProvider.js +0 -69
  252. package/dist/cjs/sync/ServerSyncEndpointProvider.js.map +0 -1
  253. package/dist/cjs/sync/Sync.d.ts +0 -160
  254. package/dist/cjs/sync/Sync.js +0 -293
  255. package/dist/cjs/sync/Sync.js.map +0 -1
  256. package/dist/cjs/sync/WebSocketSync.d.ts +0 -44
  257. package/dist/cjs/sync/WebSocketSync.js +0 -221
  258. package/dist/cjs/sync/WebSocketSync.js.map +0 -1
  259. package/dist/cjs/types.d.ts +0 -12
  260. package/dist/cjs/types.js +0 -3
  261. package/dist/cjs/types.js.map +0 -1
  262. package/dist/cjs/utils/Disposable.d.ts +0 -6
  263. package/dist/cjs/utils/Disposable.js +0 -19
  264. package/dist/cjs/utils/Disposable.js.map +0 -1
  265. package/dist/cjs/utils/Resolvable.d.ts +0 -8
  266. package/dist/cjs/utils/Resolvable.js +0 -23
  267. package/dist/cjs/utils/Resolvable.js.map +0 -1
  268. package/dist/cjs/vanilla.d.ts +0 -1
  269. package/dist/cjs/vanilla.js +0 -28
  270. package/dist/cjs/vanilla.js.map +0 -1
  271. package/dist/tsconfig-cjs.tsbuildinfo +0 -1
  272. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRange = void 0;
4
- const common_1 = require("@verdant-web/common");
5
- const matchIndexToIdbKeyRange = (filter) => {
6
- return IDBKeyRange.only((0, common_1.sanitizeIndexValue)(filter.equals));
7
- };
8
- const sortIndexToIdbKeyRange = (filter) => {
9
- return undefined;
10
- };
11
- const rangeIndexToIdbKeyRange = (filter) => {
12
- const lower = filter.gte || filter.gt;
13
- const upper = filter.lte || filter.lt;
14
- if (lower === upper) {
15
- return IDBKeyRange.only((0, common_1.sanitizeIndexValue)(lower));
16
- }
17
- if (!lower) {
18
- return IDBKeyRange.upperBound((0, common_1.sanitizeIndexValue)(upper), !!filter.lt);
19
- }
20
- else if (!upper) {
21
- return IDBKeyRange.lowerBound((0, common_1.sanitizeIndexValue)(lower), !!filter.gt);
22
- }
23
- else {
24
- return IDBKeyRange.bound((0, common_1.sanitizeIndexValue)(lower), (0, common_1.sanitizeIndexValue)(upper), !!filter.gt, !!filter.lt);
25
- }
26
- };
27
- const compoundIndexToIdbKeyRange = (
28
- // FIXME:
29
- schema, collection, filter) => {
30
- // validate the usage of the compound index:
31
- // - all match fields must be contiguous at the start of the compound order
32
- const indexDefinition = schema.collections[collection].compounds[filter.where];
33
- (0, common_1.assert)(indexDefinition, `Index ${filter.where} does not exist on collection ${collection}`);
34
- const matchedKeys = Object.keys(filter.match).sort((a, b) => indexDefinition.of.indexOf(a) - indexDefinition.of.indexOf(b));
35
- for (const key of matchedKeys) {
36
- if (indexDefinition.of.indexOf(key) !== matchedKeys.indexOf(key)) {
37
- throw new Error(`Compound index ${filter.where} does not have ${key} at the start of its order`);
38
- }
39
- }
40
- const matchedValues = matchedKeys.map((key) => filter.match[key]);
41
- // special case: all match fields are specified - we don't need a range
42
- // query, just a single key query
43
- if (matchedKeys.length === indexDefinition.of.length) {
44
- return IDBKeyRange.only((0, common_1.createCompoundIndexValue)(...matchedValues));
45
- }
46
- // create our bounds for the matched values
47
- const lower = (0, common_1.createLowerBoundIndexValue)(...matchedValues);
48
- const upper = (0, common_1.createUpperBoundIndexValue)(...matchedValues);
49
- return IDBKeyRange.bound(lower, upper);
50
- };
51
- function startsWithIndexToIdbKeyRange(filter) {
52
- const lower = filter.startsWith;
53
- const upper = filter.startsWith + '\uffff';
54
- return IDBKeyRange.bound(lower, upper);
55
- }
56
- function getRange(schema, collection, index) {
57
- if (!index)
58
- return undefined;
59
- if ((0, common_1.isRangeIndexFilter)(index))
60
- return rangeIndexToIdbKeyRange(index);
61
- if ((0, common_1.isMatchIndexFilter)(index))
62
- return matchIndexToIdbKeyRange(index);
63
- if ((0, common_1.isSortIndexFilter)(index))
64
- return sortIndexToIdbKeyRange(index);
65
- if ((0, common_1.isStartsWithIndexFilter)(index))
66
- return startsWithIndexToIdbKeyRange(index);
67
- return compoundIndexToIdbKeyRange(schema, collection, index);
68
- }
69
- exports.getRange = getRange;
70
- //# sourceMappingURL=ranges.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ranges.js","sourceRoot":"","sources":["../../../src/queries/ranges.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { FindAllQuery } from './FindAllQuery.js';
2
- import type { FindPageQuery } from './FindPageQuery.js';
3
- import type { FindOneQuery } from './FindOneQuery.js';
4
- import type { FindInfiniteQuery } from './FindInfiniteQuery.js';
5
- import type { GetQuery } from './GetQuery.js';
6
- export type Query<T> = FindAllQuery<T> | FindPageQuery<T> | FindOneQuery<T> | FindInfiniteQuery<T> | GetQuery<T>;
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queries/types.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- import { CollectionIndexFilter } from '@verdant-web/common';
2
- export declare function filterResultSet(results: any): any;
3
- export declare function areIndexesEqual(a?: CollectionIndexFilter, b?: CollectionIndexFilter): boolean | undefined;
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.areIndexesEqual = exports.filterResultSet = void 0;
4
- const common_1 = require("@verdant-web/common");
5
- const Entity_js_1 = require("../entities/Entity.js");
6
- function existsFilter(x) {
7
- return x !== null;
8
- }
9
- function filterResultSet(results) {
10
- if (Array.isArray(results)) {
11
- return results.map(filterResultSet).filter(existsFilter);
12
- }
13
- else if (results instanceof Entity_js_1.Entity) {
14
- return results.deleted ? null : results;
15
- }
16
- else {
17
- return results;
18
- }
19
- }
20
- exports.filterResultSet = filterResultSet;
21
- function areIndexesEqual(a, b) {
22
- return (!a && !b) || (a && b && (0, common_1.hashObject)(a) === (0, common_1.hashObject)(b));
23
- }
24
- exports.areIndexesEqual = areIndexesEqual;
25
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/queries/utils.ts"],"names":[],"mappings":";;;AAAA,gDAAwE;AACxE,qDAA+C;AAE/C,SAAS,YAAY,CAAI,CAAW;IACnC,OAAO,CAAC,KAAK,IAAI,CAAC;AACnB,CAAC;AAED,SAAgB,eAAe,CAAC,OAAY;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACzD;SAAM,IAAI,OAAO,YAAY,kBAAM,EAAE;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;KACxC;SAAM;QACN,OAAO,OAAO,CAAC;KACf;AACF,CAAC;AARD,0CAQC;AAED,SAAgB,eAAe,CAC9B,CAAyB,EACzB,CAAyB;IAEzB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAA,mBAAU,EAAC,CAAC,CAAC,KAAK,IAAA,mBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AALD,0CAKC"}
@@ -1,24 +0,0 @@
1
- import { FileData } from '@verdant-web/common';
2
- import { ServerSyncEndpointProvider } from './ServerSyncEndpointProvider.js';
3
- export interface FileUploadResult {
4
- success: boolean;
5
- retry: boolean;
6
- }
7
- export type FilePullResult = {
8
- success: true;
9
- data: FileData;
10
- } | {
11
- success: false;
12
- retry: boolean;
13
- error?: any;
14
- };
15
- export declare class FileSync {
16
- private endpointProvider;
17
- private log;
18
- constructor({ endpointProvider, log, }: {
19
- endpointProvider: ServerSyncEndpointProvider;
20
- log: (...args: any[]) => any;
21
- });
22
- uploadFile: (data: FileData) => Promise<FileUploadResult>;
23
- getFile: (id: string) => Promise<FilePullResult>;
24
- }
@@ -1,87 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FileSync = void 0;
4
- class FileSync {
5
- constructor({ endpointProvider, log, }) {
6
- this.uploadFile = async (data) => {
7
- const file = data.file;
8
- if (!file) {
9
- throw new Error('Cannot upload a non-local file');
10
- }
11
- // multipart upload
12
- const { files: fileEndpoint, token } = await this.endpointProvider.getEndpoints();
13
- const formData = new window.FormData();
14
- formData.append('file', file);
15
- try {
16
- const response = await fetch(fileEndpoint + `/${data.id}`, {
17
- method: 'POST',
18
- body: formData,
19
- credentials: 'include',
20
- headers: {
21
- Authorization: `Bearer ${token}`,
22
- },
23
- });
24
- if (response.ok) {
25
- this.log('info', 'File upload successful');
26
- return {
27
- success: true,
28
- retry: false,
29
- };
30
- }
31
- else {
32
- this.log('error', 'File upload failed', response.status, await response.text());
33
- return {
34
- success: false,
35
- retry: response.status >= 500,
36
- };
37
- }
38
- }
39
- catch (e) {
40
- this.log('error', 'File upload failed', e);
41
- return {
42
- success: false,
43
- retry: true,
44
- };
45
- }
46
- };
47
- this.getFile = async (id) => {
48
- const { files: fileEndpoint, token } = await this.endpointProvider.getEndpoints();
49
- try {
50
- const response = await fetch(fileEndpoint + `/${id}`, {
51
- method: 'GET',
52
- credentials: 'include',
53
- headers: {
54
- 'Content-Type': 'application/json',
55
- Authorization: `Bearer ${token}`,
56
- },
57
- });
58
- if (response.ok) {
59
- const data = await response.json();
60
- return {
61
- success: true,
62
- data,
63
- };
64
- }
65
- else {
66
- this.log('error', 'File information fetch failed', response.status, await response.text());
67
- return {
68
- success: false,
69
- retry: response.status >= 500 || response.status === 404,
70
- };
71
- }
72
- }
73
- catch (e) {
74
- this.log('error', 'File information fetch failed', e);
75
- return {
76
- success: false,
77
- error: e,
78
- retry: true,
79
- };
80
- }
81
- };
82
- this.endpointProvider = endpointProvider;
83
- this.log = log;
84
- }
85
- }
86
- exports.FileSync = FileSync;
87
- //# sourceMappingURL=FileSync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileSync.js","sourceRoot":"","sources":["../../../src/sync/FileSync.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { EventSubscriber } from '@verdant-web/common';
2
- export declare class Heartbeat extends EventSubscriber<{
3
- missed: () => void;
4
- beat: () => void;
5
- }> {
6
- private _interval;
7
- private deadlineLength;
8
- private nextBeat;
9
- private deadline;
10
- get interval(): number;
11
- constructor({ interval, deadlineLength, restartOnTabFocus, }?: {
12
- interval?: number;
13
- deadlineLength?: number;
14
- restartOnTabFocus?: boolean;
15
- });
16
- keepAlive: () => void;
17
- start: (immediate?: boolean) => void;
18
- stop: () => void;
19
- private beat;
20
- private onDeadline;
21
- /**
22
- * Only takes affect after the next beat
23
- */
24
- setInterval: (interval: number) => void;
25
- }
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Heartbeat = void 0;
4
- const common_1 = require("@verdant-web/common");
5
- class Heartbeat extends common_1.EventSubscriber {
6
- get interval() {
7
- return this._interval;
8
- }
9
- constructor({ interval = 15 * 1000, deadlineLength = 3 * 1000, restartOnTabFocus = true, } = {}) {
10
- super();
11
- this.nextBeat = null;
12
- this.deadline = null;
13
- this.keepAlive = () => {
14
- if (this.deadline) {
15
- clearTimeout(this.deadline);
16
- this.deadline = null;
17
- this.start();
18
- }
19
- };
20
- this.start = (immediate = false) => {
21
- this.stop();
22
- if (immediate) {
23
- this.beat();
24
- }
25
- else {
26
- this.nextBeat = setTimeout(this.beat, this._interval);
27
- }
28
- };
29
- this.stop = () => {
30
- if (this.nextBeat) {
31
- clearTimeout(this.nextBeat);
32
- }
33
- if (this.deadline) {
34
- clearTimeout(this.deadline);
35
- }
36
- };
37
- this.beat = async () => {
38
- this.emit('beat');
39
- this.deadline = setTimeout(this.onDeadline, this.deadlineLength);
40
- };
41
- this.onDeadline = () => {
42
- this.deadline = null;
43
- this.emit('missed');
44
- };
45
- /**
46
- * Only takes affect after the next beat
47
- */
48
- this.setInterval = (interval) => {
49
- this._interval = interval;
50
- };
51
- this._interval = interval;
52
- this.deadlineLength = deadlineLength;
53
- if (typeof window !== 'undefined' && restartOnTabFocus) {
54
- window.addEventListener('pageshow', () => this.start(true));
55
- document.addEventListener('visibilitychange', () => {
56
- if (document.visibilityState === 'visible') {
57
- this.start(true);
58
- }
59
- });
60
- }
61
- }
62
- }
63
- exports.Heartbeat = Heartbeat;
64
- //# sourceMappingURL=Heartbeat.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Heartbeat.js","sourceRoot":"","sources":["../../../src/sync/Heartbeat.ts"],"names":[],"mappings":";;;AAAA,gDAAsD;AAEtD,MAAa,SAAU,SAAQ,wBAG7B;IAMD,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,YAAY,EACX,QAAQ,GAAG,EAAE,GAAG,IAAI,EACpB,cAAc,GAAG,CAAC,GAAG,IAAI,EACzB,iBAAiB,GAAG,IAAI,MAKrB,EAAE;QACL,KAAK,EAAE,CAAC;QAhBD,aAAQ,GAA0B,IAAI,CAAC;QACvC,aAAQ,GAA0B,IAAI,CAAC;QA4B/C,cAAS,GAAG,GAAG,EAAE;YAChB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;aACb;QACF,CAAC,CAAC;QAEF,UAAK,GAAG,CAAC,SAAS,GAAG,KAAK,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,SAAS,EAAE;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;aACZ;iBAAM;gBACN,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACtD;QACF,CAAC,CAAC;QAEF,SAAI,GAAG,GAAG,EAAE;YACX,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5B;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAClB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5B;QACF,CAAC,CAAC;QAEM,SAAI,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAClE,CAAC,CAAC;QAEM,eAAU,GAAG,GAAG,EAAE;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF;;WAEG;QACH,gBAAW,GAAG,CAAC,QAAgB,EAAE,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC3B,CAAC,CAAC;QArDD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,iBAAiB,EAAE;YACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBAClD,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE;oBAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBACjB;YACF,CAAC,CAAC,CAAC;SACH;IACF,CAAC;CA4CD;AA7ED,8BA6EC"}
@@ -1,55 +0,0 @@
1
- import { ServerMessage, EventSubscriber } from '@verdant-web/common';
2
- import type { UserInfo } from '../index.js';
3
- import { LocalReplicaInfo, LocalReplicaStore } from '../metadata/LocalReplicaStore.js';
4
- export declare const HANDLE_MESSAGE: unique symbol;
5
- export declare class PresenceManager<Profile = any, Presence = any> extends EventSubscriber<{
6
- /**
7
- * Fired when a particular peer's presence changes
8
- */
9
- peerChanged: (userId: string, presence: UserInfo<Profile, Presence>) => void;
10
- /**
11
- * Fired immediately when a change to local presence is made. This change may not
12
- * yet have been sent to the server (see: "update" event)
13
- */
14
- selfChanged: (presence: UserInfo<Profile, Presence>) => void;
15
- /** Fired when any number of peer presences have changed */
16
- peersChanged: (peers: Record<string, UserInfo<Profile, Presence>>) => void;
17
- /** Fired when a peer presence goes offline */
18
- peerLeft: (userId: string, lastPresence: UserInfo<Profile, Presence>) => void;
19
- /** Fired after local presence changes are flushed to the server. */
20
- update: (presence: Partial<Presence>) => void;
21
- load: () => void;
22
- }> {
23
- private _peers;
24
- private _self;
25
- private _selfReplicaIds;
26
- private _peerIds;
27
- private _updateBatcher;
28
- private _updateBatch;
29
- get self(): UserInfo<Profile, Presence>;
30
- get peers(): Record<string, UserInfo<Profile, Presence>>;
31
- get peerIds(): string[];
32
- get everyone(): {
33
- [x: string]: UserInfo<Profile, Presence>;
34
- };
35
- get selfReplicaIds(): Set<string>;
36
- constructor({ initialPresence, updateBatchTimeout, defaultProfile, replicaStore, }: {
37
- initialPresence: Presence;
38
- defaultProfile: Profile;
39
- updateBatchTimeout?: number;
40
- replicaStore: LocalReplicaStore;
41
- });
42
- /**
43
- * Decides if an update is for the local user or not. Even if it's a different replica
44
- * than the local one.
45
- *
46
- * If the replicaId matches, we use that first - we may not know the local replica's User ID yet,
47
- * e.g. on the first presence update.
48
- *
49
- * Otherwise, match the user ID to our local copy.
50
- */
51
- private isSelf;
52
- [HANDLE_MESSAGE]: (localReplicaInfo: LocalReplicaInfo, message: ServerMessage) => Promise<void>;
53
- update: (presence: Partial<Presence>) => Promise<void>;
54
- flushPresenceUpdates: (presenceUpdates: Partial<Presence>[]) => void;
55
- }
@@ -1,126 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.PresenceManager = exports.HANDLE_MESSAGE = void 0;
5
- const common_1 = require("@verdant-web/common");
6
- exports.HANDLE_MESSAGE = Symbol('handleMessage');
7
- class PresenceManager extends common_1.EventSubscriber {
8
- get self() {
9
- return this._self;
10
- }
11
- get peers() {
12
- return this._peers;
13
- }
14
- get peerIds() {
15
- return this._peerIds;
16
- }
17
- get everyone() {
18
- const everyone = Object.assign({}, this._peers);
19
- everyone[this.self.id] = this.self;
20
- return everyone;
21
- }
22
- get selfReplicaIds() {
23
- return this._selfReplicaIds;
24
- }
25
- constructor({ initialPresence, updateBatchTimeout = 200, defaultProfile, replicaStore, }) {
26
- super();
27
- this._peers = {};
28
- this._self = { profile: {} };
29
- // keep track of own replica IDs - applications may care if we're "alone" but with multiple devices.
30
- this._selfReplicaIds = new Set();
31
- this._peerIds = new Array();
32
- /**
33
- * Decides if an update is for the local user or not. Even if it's a different replica
34
- * than the local one.
35
- *
36
- * If the replicaId matches, we use that first - we may not know the local replica's User ID yet,
37
- * e.g. on the first presence update.
38
- *
39
- * Otherwise, match the user ID to our local copy.
40
- */
41
- this.isSelf = (localReplicaInfo, userInfo) => {
42
- return (localReplicaInfo.id === userInfo.replicaId ||
43
- this._selfReplicaIds.has(userInfo.replicaId) ||
44
- this._self.id === userInfo.id);
45
- };
46
- this[_a] = async (localReplicaInfo, message) => {
47
- let peersChanged = false;
48
- const peerIdsSet = new Set(this.peerIds);
49
- if (message.type === 'presence-changed') {
50
- if (this.isSelf(localReplicaInfo, message.userInfo)) {
51
- this._self = message.userInfo;
52
- this._selfReplicaIds.add(message.userInfo.replicaId);
53
- this.emit('selfChanged', message.userInfo);
54
- }
55
- else {
56
- peerIdsSet.add(message.userInfo.id);
57
- this._peers[message.userInfo.id] = message.userInfo;
58
- peersChanged = true;
59
- this.emit('peerChanged', message.userInfo.id, message.userInfo);
60
- }
61
- }
62
- else if (message.type === 'sync-resp') {
63
- // reset to provided presence data, which includes all peers.
64
- this._peers = {};
65
- peerIdsSet.clear();
66
- for (const [id, userInfo] of Object.entries(message.peerPresence)) {
67
- if (this.isSelf(localReplicaInfo, userInfo)) {
68
- this._self = userInfo;
69
- this._selfReplicaIds.add(userInfo.replicaId);
70
- this.emit('selfChanged', userInfo);
71
- }
72
- else {
73
- peersChanged = true;
74
- peerIdsSet.add(id);
75
- this._peers[id] = userInfo;
76
- this.emit('peerChanged', id, userInfo);
77
- }
78
- }
79
- }
80
- else if (message.type === 'presence-offline') {
81
- peerIdsSet.delete(message.userId);
82
- this._selfReplicaIds.delete(message.replicaId);
83
- const lastPresence = this._peers[message.userId];
84
- delete this._peers[message.userId];
85
- peersChanged = true;
86
- this.emit('peerLeft', message.userId, lastPresence);
87
- }
88
- if (peersChanged) {
89
- this._peerIds = Array.from(peerIdsSet);
90
- this.emit('peersChanged', this._peers);
91
- }
92
- };
93
- this.update = async (presence) => {
94
- this._updateBatch.update({
95
- items: [presence],
96
- });
97
- // proactively update the local presence
98
- this.self.presence = Object.assign(Object.assign({}, this.self.presence), presence);
99
- this.emit('selfChanged', this.self);
100
- };
101
- this.flushPresenceUpdates = (presenceUpdates) => {
102
- const presence = presenceUpdates.reduce((acc, update) => {
103
- return Object.assign(Object.assign({}, acc), update);
104
- }, this.self.presence);
105
- this.emit('update', presence);
106
- };
107
- this.self.presence = initialPresence;
108
- this.self.profile = defaultProfile;
109
- this.self.id = '';
110
- this.self.replicaId = '';
111
- // set the local replica ID as soon as it's loaded
112
- replicaStore.get().then((info) => {
113
- this.self.replicaId = info.id;
114
- });
115
- this._updateBatcher = new common_1.Batcher(this.flushPresenceUpdates);
116
- this._updateBatch = this._updateBatcher.add({
117
- max: 25,
118
- timeout: updateBatchTimeout,
119
- items: [],
120
- key: 'default',
121
- });
122
- }
123
- }
124
- exports.PresenceManager = PresenceManager;
125
- _a = exports.HANDLE_MESSAGE;
126
- //# sourceMappingURL=PresenceManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PresenceManager.js","sourceRoot":"","sources":["../../../src/sync/PresenceManager.ts"],"names":[],"mappings":";;;;AAAA,gDAK6B;AAOhB,QAAA,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAEtD,MAAa,eAGX,SAAQ,wBAiBR;IASD,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ;QACX,MAAM,QAAQ,qBAAQ,IAAI,CAAC,MAAM,CAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACnC,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,IAAI,cAAc;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC7B,CAAC;IAED,YAAY,EACX,eAAe,EACf,kBAAkB,GAAG,GAAG,EACxB,cAAc,EACd,YAAY,GAMZ;QACA,KAAK,EAAE,CAAC;QAzCD,WAAM,GAAG,EAAiD,CAAC;QAC3D,UAAK,GAAG,EAAE,OAAO,EAAE,EAAE,EAAiC,CAAC;QAC/D,oGAAoG;QAC5F,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,aAAQ,GAAG,IAAI,KAAK,EAAU,CAAC;QAyDvC;;;;;;;;WAQG;QACK,WAAM,GAAG,CAChB,gBAAkC,EAClC,QAAqC,EACpC,EAAE;YACH,OAAO,CACN,gBAAgB,CAAC,EAAE,KAAK,QAAQ,CAAC,SAAS;gBAC1C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAC7B,CAAC;QACH,CAAC,CAAC;QAEF,QAAgB,GAAG,KAAK,EACvB,gBAAkC,EAClC,OAAsB,EACrB,EAAE;YACH,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjD,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE;gBACxC,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACpD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;oBAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;iBAC3C;qBAAM;oBACN,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;oBACpD,YAAY,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;iBAChE;aACD;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;gBACxC,6DAA6D;gBAC7D,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACjB,UAAU,CAAC,KAAK,EAAE,CAAC;gBAEnB,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAClE,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE;wBAC5C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;wBACtB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;wBAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;qBACnC;yBAAM;wBACN,YAAY,GAAG,IAAI,CAAC;wBACpB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACnB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;wBAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;qBACvC;iBACD;aACD;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE;gBAC/C,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnC,YAAY,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;aACpD;YACD,IAAI,YAAY,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACvC;QACF,CAAC,CAAC;QAEF,WAAM,GAAG,KAAK,EAAE,QAA2B,EAAE,EAAE;YAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACxB,KAAK,EAAE,CAAC,QAAQ,CAAC;aACjB,CAAC,CAAC;YACH,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,mCAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAK,QAAQ,CAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC;QAEF,yBAAoB,GAAG,CAAC,eAAoC,EAAE,EAAE;YAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACvD,uCAAY,GAAG,GAAK,MAAM,EAAG;YAC9B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC,CAAC;QAtGD,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEzB,kDAAkD;QAClD,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAC3C,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,kBAAkB;YAC3B,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,SAAS;SACd,CAAC,CAAC;IACJ,CAAC;CAsFD;AAtKD,0CAsKC;KAhEC,sBAAc"}
@@ -1,39 +0,0 @@
1
- import { ClientMessage, EventSubscriber } from '@verdant-web/common';
2
- import { Metadata } from '../metadata/Metadata.js';
3
- import { PresenceManager } from './PresenceManager.js';
4
- import { ServerSyncEndpointProvider } from './ServerSyncEndpointProvider.js';
5
- import { SyncTransport, SyncTransportEvents } from './Sync.js';
6
- export declare class PushPullSync extends EventSubscriber<SyncTransportEvents> implements SyncTransport {
7
- readonly meta: Metadata;
8
- readonly presence: PresenceManager;
9
- private endpointProvider;
10
- private heartbeat;
11
- private fetch;
12
- readonly mode = "pull";
13
- private log;
14
- private _isConnected;
15
- private _status;
16
- private _hasSynced;
17
- constructor({ endpointProvider, meta, presence, interval, log, fetch, }: {
18
- endpointProvider: ServerSyncEndpointProvider;
19
- meta: Metadata;
20
- presence: PresenceManager;
21
- interval?: number;
22
- log?: (...args: any[]) => any;
23
- fetch?: typeof window.fetch;
24
- });
25
- setInterval: (interval: number) => void;
26
- get interval(): number;
27
- private sendRequest;
28
- private handleServerMessage;
29
- send: (message: ClientMessage) => Promise<void> | undefined;
30
- start(): void;
31
- stop(): void;
32
- destroy: () => void;
33
- reconnect(): void;
34
- ignoreIncoming(): void;
35
- private onHeartbeat;
36
- private onHeartbeatMissed;
37
- get isConnected(): boolean;
38
- get status(): "active" | "paused";
39
- }