@verdant-web/store 3.12.0 → 4.0.0-next.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 (281) hide show
  1. package/dist/bundle/index.js +11 -13
  2. package/dist/bundle/index.js.map +4 -4
  3. package/dist/esm/__tests__/batching.test.js +5 -5
  4. package/dist/esm/__tests__/batching.test.js.map +1 -1
  5. package/dist/esm/__tests__/entities.test.js +1 -1
  6. package/dist/esm/__tests__/entities.test.js.map +1 -1
  7. package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -3
  8. package/dist/esm/__tests__/fixtures/testStorage.js +3 -3
  9. package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
  10. package/dist/esm/__tests__/queries.test.js.map +1 -1
  11. package/dist/esm/backup.d.ts +3 -4
  12. package/dist/esm/backup.js.map +1 -1
  13. package/dist/esm/client/Client.d.ts +28 -33
  14. package/dist/esm/client/Client.js +50 -161
  15. package/dist/esm/client/Client.js.map +1 -1
  16. package/dist/esm/client/ClientDescriptor.d.ts +8 -11
  17. package/dist/esm/client/ClientDescriptor.js +39 -141
  18. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  19. package/dist/esm/context/Time.d.ts +13 -0
  20. package/dist/esm/context/Time.js +27 -0
  21. package/dist/esm/context/Time.js.map +1 -0
  22. package/dist/esm/context/context.d.ts +170 -0
  23. package/dist/esm/{context.js.map → context/context.js.map} +1 -1
  24. package/dist/esm/entities/DocumentManager.js.map +1 -1
  25. package/dist/esm/entities/Entity.d.ts +4 -5
  26. package/dist/esm/entities/Entity.js +5 -3
  27. package/dist/esm/entities/Entity.js.map +1 -1
  28. package/dist/esm/entities/Entity.test.js +4 -3
  29. package/dist/esm/entities/Entity.test.js.map +1 -1
  30. package/dist/esm/entities/EntityCache.d.ts +0 -3
  31. package/dist/esm/entities/EntityCache.js +0 -9
  32. package/dist/esm/entities/EntityCache.js.map +1 -1
  33. package/dist/esm/entities/EntityMetadata.d.ts +1 -1
  34. package/dist/esm/entities/EntityMetadata.js +6 -5
  35. package/dist/esm/entities/EntityMetadata.js.map +1 -1
  36. package/dist/esm/entities/EntityStore.d.ts +2 -6
  37. package/dist/esm/entities/EntityStore.js +22 -16
  38. package/dist/esm/entities/EntityStore.js.map +1 -1
  39. package/dist/esm/entities/OperationBatcher.d.ts +2 -5
  40. package/dist/esm/entities/OperationBatcher.js +9 -7
  41. package/dist/esm/entities/OperationBatcher.js.map +1 -1
  42. package/dist/esm/entities/types.d.ts +1 -1
  43. package/dist/esm/errors.d.ts +8 -0
  44. package/dist/esm/errors.js +12 -0
  45. package/dist/esm/errors.js.map +1 -0
  46. package/dist/esm/files/EntityFile.d.ts +6 -3
  47. package/dist/esm/files/EntityFile.js +22 -19
  48. package/dist/esm/files/EntityFile.js.map +1 -1
  49. package/dist/esm/files/FileManager.d.ts +8 -39
  50. package/dist/esm/files/FileManager.js +15 -170
  51. package/dist/esm/files/FileManager.js.map +1 -1
  52. package/dist/esm/files/utils.d.ts +0 -1
  53. package/dist/esm/files/utils.js +0 -14
  54. package/dist/esm/files/utils.js.map +1 -1
  55. package/dist/esm/index.d.ts +1 -2
  56. package/dist/esm/index.js +0 -1
  57. package/dist/esm/index.js.map +1 -1
  58. package/dist/esm/{metadata → persistence}/MessageCreator.d.ts +5 -6
  59. package/dist/esm/{metadata → persistence}/MessageCreator.js +31 -38
  60. package/dist/esm/persistence/MessageCreator.js.map +1 -0
  61. package/dist/esm/persistence/PersistenceFiles.d.ts +48 -0
  62. package/dist/esm/persistence/PersistenceFiles.js +160 -0
  63. package/dist/esm/persistence/PersistenceFiles.js.map +1 -0
  64. package/dist/esm/persistence/PersistenceMetadata.d.ts +69 -0
  65. package/dist/esm/persistence/PersistenceMetadata.js +302 -0
  66. package/dist/esm/persistence/PersistenceMetadata.js.map +1 -0
  67. package/dist/esm/persistence/PersistenceQueries.d.ts +34 -0
  68. package/dist/esm/persistence/PersistenceQueries.js +15 -0
  69. package/dist/esm/persistence/PersistenceQueries.js.map +1 -0
  70. package/dist/esm/persistence/PersistenceRebaser.d.ts +32 -0
  71. package/dist/esm/persistence/PersistenceRebaser.js +120 -0
  72. package/dist/esm/persistence/PersistenceRebaser.js.map +1 -0
  73. package/dist/esm/{IDBService.d.ts → persistence/idb/IdbService.d.ts} +9 -7
  74. package/dist/esm/{IDBService.js → persistence/idb/IdbService.js} +29 -8
  75. package/dist/esm/persistence/idb/IdbService.js.map +1 -0
  76. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +58 -0
  77. package/dist/esm/{files/FileStorage.js → persistence/idb/files/IdbPersistenceFileDb.js} +85 -50
  78. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -0
  79. package/dist/esm/persistence/idb/idbPersistence.d.ts +19 -0
  80. package/dist/esm/persistence/idb/idbPersistence.js +80 -0
  81. package/dist/esm/persistence/idb/idbPersistence.js.map +1 -0
  82. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +72 -0
  83. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +235 -0
  84. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -0
  85. package/dist/esm/{metadata → persistence/idb/metadata}/openMetadataDatabase.d.ts +3 -1
  86. package/dist/esm/{metadata → persistence/idb/metadata}/openMetadataDatabase.js +12 -3
  87. package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -0
  88. package/dist/esm/persistence/idb/queries/IdbQueryDb.d.ts +41 -0
  89. package/dist/esm/persistence/idb/queries/IdbQueryDb.js +174 -0
  90. package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +1 -0
  91. package/dist/esm/{migration → persistence/idb/queries/migration}/db.d.ts +1 -1
  92. package/dist/esm/{migration → persistence/idb/queries/migration}/db.js +10 -48
  93. package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -0
  94. package/dist/esm/persistence/idb/queries/migration/engine.d.ts +12 -0
  95. package/dist/esm/{migration → persistence/idb/queries/migration}/engine.js +29 -46
  96. package/dist/esm/persistence/idb/queries/migration/engine.js.map +1 -0
  97. package/dist/esm/{migration → persistence/idb/queries/migration}/migrations.d.ts +1 -3
  98. package/dist/esm/{migration → persistence/idb/queries/migration}/migrations.js +11 -10
  99. package/dist/esm/persistence/idb/queries/migration/migrations.js.map +1 -0
  100. package/dist/esm/{migration → persistence/idb/queries/migration}/openQueryDatabase.d.ts +1 -3
  101. package/dist/esm/{migration → persistence/idb/queries/migration}/openQueryDatabase.js +4 -7
  102. package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +1 -0
  103. package/dist/esm/{migration → persistence/idb/queries/migration}/paths.js +2 -2
  104. package/dist/esm/persistence/idb/queries/migration/paths.js.map +1 -0
  105. package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +1 -0
  106. package/dist/esm/persistence/idb/queries/migration/types.d.ts +6 -0
  107. package/dist/esm/persistence/idb/queries/migration/types.js.map +1 -0
  108. package/dist/esm/persistence/idb/queries/ranges.d.ts +2 -0
  109. package/dist/esm/persistence/idb/queries/ranges.js +66 -0
  110. package/dist/esm/persistence/idb/queries/ranges.js.map +1 -0
  111. package/dist/esm/{idb.d.ts → persistence/idb/util.d.ts} +11 -0
  112. package/dist/esm/{idb.js → persistence/idb/util.js} +58 -1
  113. package/dist/esm/persistence/idb/util.js.map +1 -0
  114. package/dist/esm/persistence/interfaces.d.ts +181 -0
  115. package/dist/esm/persistence/interfaces.js +2 -0
  116. package/dist/esm/persistence/interfaces.js.map +1 -0
  117. package/dist/esm/persistence/persistence.d.ts +4 -0
  118. package/dist/esm/persistence/persistence.js +126 -0
  119. package/dist/esm/persistence/persistence.js.map +1 -0
  120. package/dist/esm/queries/BaseQuery.d.ts +2 -1
  121. package/dist/esm/queries/BaseQuery.js +3 -0
  122. package/dist/esm/queries/BaseQuery.js.map +1 -1
  123. package/dist/esm/queries/CollectionQueries.d.ts +1 -1
  124. package/dist/esm/queries/FindAllQuery.js +1 -3
  125. package/dist/esm/queries/FindAllQuery.js.map +1 -1
  126. package/dist/esm/queries/FindInfiniteQuery.js +2 -5
  127. package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
  128. package/dist/esm/queries/FindOneQuery.js +1 -3
  129. package/dist/esm/queries/FindOneQuery.js.map +1 -1
  130. package/dist/esm/queries/FindPageQuery.js +1 -3
  131. package/dist/esm/queries/FindPageQuery.js.map +1 -1
  132. package/dist/esm/queries/QueryCache.d.ts +1 -1
  133. package/dist/esm/queries/QueryCache.js +4 -0
  134. package/dist/esm/queries/QueryCache.js.map +1 -1
  135. package/dist/esm/sync/FileSync.d.ts +23 -8
  136. package/dist/esm/sync/FileSync.js +76 -28
  137. package/dist/esm/sync/FileSync.js.map +1 -1
  138. package/dist/esm/sync/PresenceManager.d.ts +4 -3
  139. package/dist/esm/sync/PresenceManager.js +2 -2
  140. package/dist/esm/sync/PresenceManager.js.map +1 -1
  141. package/dist/esm/sync/PushPullSync.d.ts +4 -6
  142. package/dist/esm/sync/PushPullSync.js +13 -12
  143. package/dist/esm/sync/PushPullSync.js.map +1 -1
  144. package/dist/esm/sync/Sync.d.ts +9 -11
  145. package/dist/esm/sync/Sync.js +34 -29
  146. package/dist/esm/sync/Sync.js.map +1 -1
  147. package/dist/esm/sync/WebSocketSync.d.ts +4 -6
  148. package/dist/esm/sync/WebSocketSync.js +20 -22
  149. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  150. package/dist/esm/utils/Disposable.d.ts +5 -2
  151. package/dist/esm/utils/Disposable.js +3 -2
  152. package/dist/esm/utils/Disposable.js.map +1 -1
  153. package/dist/esm/utils/wip.d.ts +2 -0
  154. package/dist/esm/utils/wip.js +5 -0
  155. package/dist/esm/utils/wip.js.map +1 -0
  156. package/package.json +2 -2
  157. package/src/__tests__/batching.test.ts +6 -6
  158. package/src/__tests__/entities.test.ts +1 -1
  159. package/src/__tests__/fixtures/testStorage.ts +2 -10
  160. package/src/__tests__/queries.test.ts +1 -1
  161. package/src/backup.ts +3 -4
  162. package/src/client/Client.ts +69 -226
  163. package/src/client/ClientDescriptor.ts +53 -184
  164. package/src/context/Time.ts +35 -0
  165. package/src/context/context.ts +200 -0
  166. package/src/entities/DocumentManager.ts +0 -3
  167. package/src/entities/Entity.test.ts +9 -9
  168. package/src/entities/Entity.ts +6 -12
  169. package/src/entities/EntityCache.ts +0 -9
  170. package/src/entities/EntityMetadata.ts +4 -4
  171. package/src/entities/EntityStore.ts +26 -29
  172. package/src/entities/OperationBatcher.ts +9 -11
  173. package/src/entities/types.ts +1 -1
  174. package/src/errors.ts +13 -0
  175. package/src/files/EntityFile.ts +16 -5
  176. package/src/files/FileManager.ts +18 -245
  177. package/src/files/utils.ts +0 -15
  178. package/src/index.ts +2 -1
  179. package/src/{metadata → persistence}/MessageCreator.ts +46 -36
  180. package/src/persistence/PersistenceFiles.ts +227 -0
  181. package/src/persistence/PersistenceMetadata.ts +425 -0
  182. package/src/persistence/PersistenceQueries.ts +22 -0
  183. package/src/persistence/PersistenceRebaser.ts +171 -0
  184. package/src/{IDBService.ts → persistence/idb/IdbService.ts} +45 -12
  185. package/src/{files/FileStorage.ts → persistence/idb/files/IdbPersistenceFileDb.ts} +128 -86
  186. package/src/persistence/idb/idbPersistence.ts +116 -0
  187. package/src/persistence/idb/metadata/IdbMetadataDb.ts +460 -0
  188. package/src/{metadata → persistence/idb/metadata}/openMetadataDatabase.ts +21 -4
  189. package/src/persistence/idb/queries/IdbQueryDb.ts +251 -0
  190. package/src/{migration → persistence/idb/queries/migration}/db.ts +18 -72
  191. package/src/{migration → persistence/idb/queries/migration}/engine.ts +39 -62
  192. package/src/{migration → persistence/idb/queries/migration}/migrations.ts +13 -18
  193. package/src/{migration → persistence/idb/queries/migration}/openQueryDatabase.ts +5 -14
  194. package/src/{migration → persistence/idb/queries/migration}/paths.ts +4 -3
  195. package/src/persistence/idb/queries/migration/types.ts +8 -0
  196. package/src/persistence/idb/queries/ranges.ts +107 -0
  197. package/src/{idb.ts → persistence/idb/util.ts} +75 -0
  198. package/src/persistence/interfaces.ts +240 -0
  199. package/src/persistence/persistence.ts +223 -0
  200. package/src/queries/BaseQuery.ts +5 -1
  201. package/src/queries/CollectionQueries.ts +2 -2
  202. package/src/queries/FindAllQuery.ts +1 -3
  203. package/src/queries/FindInfiniteQuery.ts +2 -5
  204. package/src/queries/FindOneQuery.ts +1 -3
  205. package/src/queries/FindPageQuery.ts +1 -3
  206. package/src/queries/QueryCache.ts +20 -1
  207. package/src/sync/FileSync.ts +93 -30
  208. package/src/sync/PresenceManager.ts +5 -7
  209. package/src/sync/PushPullSync.ts +23 -19
  210. package/src/sync/Sync.ts +45 -36
  211. package/src/sync/WebSocketSync.ts +41 -27
  212. package/src/utils/Disposable.ts +7 -4
  213. package/src/utils/wip.ts +5 -0
  214. package/dist/esm/IDBService.js.map +0 -1
  215. package/dist/esm/__tests__/legacyOids.test.d.ts +0 -1
  216. package/dist/esm/__tests__/legacyOids.test.js +0 -352
  217. package/dist/esm/__tests__/legacyOids.test.js.map +0 -1
  218. package/dist/esm/context.d.ts +0 -45
  219. package/dist/esm/files/FileStorage.d.ts +0 -47
  220. package/dist/esm/files/FileStorage.js.map +0 -1
  221. package/dist/esm/idb.js.map +0 -1
  222. package/dist/esm/metadata/AckInfoStore.d.ts +0 -10
  223. package/dist/esm/metadata/AckInfoStore.js +0 -22
  224. package/dist/esm/metadata/AckInfoStore.js.map +0 -1
  225. package/dist/esm/metadata/BaselinesStore.d.ts +0 -40
  226. package/dist/esm/metadata/BaselinesStore.js +0 -102
  227. package/dist/esm/metadata/BaselinesStore.js.map +0 -1
  228. package/dist/esm/metadata/LocalReplicaStore.d.ts +0 -19
  229. package/dist/esm/metadata/LocalReplicaStore.js +0 -56
  230. package/dist/esm/metadata/LocalReplicaStore.js.map +0 -1
  231. package/dist/esm/metadata/MessageCreator.js.map +0 -1
  232. package/dist/esm/metadata/Metadata.d.ts +0 -146
  233. package/dist/esm/metadata/Metadata.js +0 -452
  234. package/dist/esm/metadata/Metadata.js.map +0 -1
  235. package/dist/esm/metadata/OperationsStore.d.ts +0 -62
  236. package/dist/esm/metadata/OperationsStore.js +0 -175
  237. package/dist/esm/metadata/OperationsStore.js.map +0 -1
  238. package/dist/esm/metadata/SchemaStore.d.ts +0 -9
  239. package/dist/esm/metadata/SchemaStore.js +0 -35
  240. package/dist/esm/metadata/SchemaStore.js.map +0 -1
  241. package/dist/esm/metadata/openMetadataDatabase.js.map +0 -1
  242. package/dist/esm/migration/db.js.map +0 -1
  243. package/dist/esm/migration/engine.d.ts +0 -15
  244. package/dist/esm/migration/engine.js.map +0 -1
  245. package/dist/esm/migration/errors.d.ts +0 -5
  246. package/dist/esm/migration/errors.js +0 -8
  247. package/dist/esm/migration/errors.js.map +0 -1
  248. package/dist/esm/migration/migrations.js.map +0 -1
  249. package/dist/esm/migration/openQueryDatabase.js.map +0 -1
  250. package/dist/esm/migration/openWIPDatabase.d.ts +0 -11
  251. package/dist/esm/migration/openWIPDatabase.js +0 -65
  252. package/dist/esm/migration/openWIPDatabase.js.map +0 -1
  253. package/dist/esm/migration/paths.js.map +0 -1
  254. package/dist/esm/migration/paths.test.js.map +0 -1
  255. package/dist/esm/migration/types.d.ts +0 -3
  256. package/dist/esm/migration/types.js.map +0 -1
  257. package/dist/esm/queries/QueryableStorage.d.ts +0 -20
  258. package/dist/esm/queries/QueryableStorage.js +0 -90
  259. package/dist/esm/queries/QueryableStorage.js.map +0 -1
  260. package/dist/esm/queries/dbQueries.d.ts +0 -22
  261. package/dist/esm/queries/dbQueries.js +0 -130
  262. package/dist/esm/queries/dbQueries.js.map +0 -1
  263. package/src/__tests__/legacyOids.test.ts +0 -375
  264. package/src/context.ts +0 -55
  265. package/src/metadata/AckInfoStore.ts +0 -30
  266. package/src/metadata/BaselinesStore.ts +0 -188
  267. package/src/metadata/LocalReplicaStore.ts +0 -79
  268. package/src/metadata/Metadata.ts +0 -685
  269. package/src/metadata/OperationsStore.ts +0 -332
  270. package/src/metadata/SchemaStore.ts +0 -47
  271. package/src/migration/errors.ts +0 -7
  272. package/src/migration/openWIPDatabase.ts +0 -97
  273. package/src/migration/types.ts +0 -4
  274. package/src/queries/QueryableStorage.ts +0 -122
  275. package/src/queries/dbQueries.ts +0 -161
  276. /package/dist/esm/{context.js → context/context.js} +0 -0
  277. /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.d.ts +0 -0
  278. /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.test.d.ts +0 -0
  279. /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.test.js +0 -0
  280. /package/dist/esm/{migration → persistence/idb/queries/migration}/types.js +0 -0
  281. /package/src/{migration → persistence/idb/queries/migration}/paths.test.ts +0 -0
@@ -2,13 +2,12 @@ import { debounce, EventSubscriber, } from '@verdant-web/common';
2
2
  import { DocumentManager } from '../entities/DocumentManager.js';
3
3
  import { EntityStore } from '../entities/EntityStore.js';
4
4
  import { FileManager } from '../files/FileManager.js';
5
- import { closeDatabase, deleteAllDatabases, getSizeOfObjectStore, } from '../idb.js';
6
- import { supportLegacyExport, } from '../metadata/Metadata.js';
7
- import { openQueryDatabase } from '../migration/openQueryDatabase.js';
5
+ import { deleteAllDatabases } from '../persistence/idb/util.js';
8
6
  import { CollectionQueries } from '../queries/CollectionQueries.js';
9
7
  import { QueryCache } from '../queries/QueryCache.js';
10
8
  import { NoSync, ServerSync } from '../sync/Sync.js';
11
9
  import { getLatestVersion } from '../utils/versions.js';
10
+ import { importPersistence } from '../persistence/persistence.js';
12
11
  export class Client extends EventSubscriber {
13
12
  get sync() {
14
13
  return this._sync;
@@ -19,21 +18,9 @@ export class Client extends EventSubscriber {
19
18
  get documentManager() {
20
19
  return this._documentManager;
21
20
  }
22
- constructor(config, context, components) {
21
+ constructor(context) {
23
22
  super();
24
- this.config = config;
25
23
  this.context = context;
26
- this._closed = false;
27
- this.watchForVersionChange = () => {
28
- this.documentDb.addEventListener('versionchange', () => {
29
- var _a, _b;
30
- (_b = (_a = this.context).log) === null || _b === void 0 ? void 0 : _b.call(_a, 'warn', `Another tab has requested a version change for ${this.namespace}`);
31
- this.documentDb.close();
32
- if (typeof window !== 'undefined') {
33
- window.location.reload();
34
- }
35
- });
36
- };
37
24
  this.importingPromise = Promise.resolve();
38
25
  this.addData = async (data) => {
39
26
  var _a;
@@ -87,30 +74,17 @@ export class Client extends EventSubscriber {
87
74
  }
88
75
  };
89
76
  this.stats = async () => {
90
- var _a, _b;
91
- const collectionNames = Object.keys(this.schema.collections);
92
- let collections = {};
93
77
  if (this.disposed) {
94
78
  return {};
95
79
  }
96
- for (const collectionName of collectionNames) {
97
- try {
98
- collections[collectionName] = await getSizeOfObjectStore(this.documentDb, collectionName);
99
- }
100
- catch (err) {
101
- (_b = (_a = this.context).log) === null || _b === void 0 ? void 0 : _b.call(_a, 'error', err);
102
- }
103
- }
104
- if (this.disposed) {
105
- return { collections };
106
- }
107
- const meta = await this.meta.stats();
80
+ const collections = await this.context.queries.stats();
81
+ const meta = await this.context.meta.stats();
108
82
  const storage = typeof navigator !== 'undefined' &&
109
83
  typeof navigator.storage !== 'undefined' &&
110
84
  'estimate' in navigator.storage
111
85
  ? await navigator.storage.estimate()
112
86
  : undefined;
113
- const files = await this._fileManager.stats();
87
+ const files = await this.context.files.stats();
114
88
  // determine data:metadata ratio for total size of all collections vs metadata
115
89
  const totalCollectionsSize = Object.values(collections).reduce((acc, { size }) => acc + size, 0);
116
90
  const totalMetaSize = meta.baselinesSize.size + meta.operationsSize.size;
@@ -130,23 +104,24 @@ export class Client extends EventSubscriber {
130
104
  };
131
105
  this.close = async () => {
132
106
  var _a, _b;
133
- this._closed = true;
134
107
  this.sync.ignoreIncoming();
135
108
  await this._entities.flushAllBatches();
136
- this._fileManager.close();
109
+ // NOTE: this happens after flushing or else flushed data
110
+ // won't be written to storage or synced.
111
+ this.context.closing = true;
112
+ this.context.files.dispose();
137
113
  this.sync.stop();
138
114
  this.sync.destroy();
139
115
  // this step does have the potential to flush
140
116
  // changes to storage, so don't close metadata db yet
141
117
  await this._entities.destroy();
142
- this.meta.close();
118
+ this.context.queries.dispose();
119
+ this.context.meta.dispose();
143
120
  // the idea here is to flush the microtask queue -
144
121
  // we may have queued tasks related to queries that
145
122
  // we want to settle before closing the databases
146
123
  // to avoid invalid state errors
147
- await new Promise(async (resolve) => {
148
- await closeDatabase(this.documentDb);
149
- await closeDatabase(this.metaDb);
124
+ await new Promise((resolve) => {
150
125
  resolve();
151
126
  });
152
127
  (_b = (_a = this.context).log) === null || _b === void 0 ? void 0 : _b.call(_a, 'info', 'Client closed');
@@ -159,40 +134,15 @@ export class Client extends EventSubscriber {
159
134
  downloadRemoteFiles: true,
160
135
  }) => {
161
136
  this.context.log('info', 'Exporting data...');
162
- const metaExport = await this.meta.export();
163
- const filesExport = await this._fileManager.exportAll(downloadRemoteFiles);
164
- // split files into data and files
165
- const fileData = [];
166
- const files = [];
167
- for (const fileExport of filesExport) {
168
- const file = fileExport.file;
169
- delete fileExport.file;
170
- fileData.push(fileExport);
171
- if (file) {
172
- // rename with ID
173
- const asFile = new File([file], this.getFileExportName(fileExport.name, fileExport.id), {
174
- type: fileExport.type,
175
- });
176
- files.push(asFile);
177
- }
178
- else {
179
- this.context.log('warn', `File ${fileExport.id} was could not be loaded locally or from the server. It will be missing in the export.`);
180
- }
181
- }
137
+ const metaExport = await this.context.meta.export();
138
+ const { fileData, files } = await this.context.files.export(downloadRemoteFiles);
182
139
  return {
183
140
  data: metaExport,
184
141
  fileData,
185
142
  files,
186
143
  };
187
144
  };
188
- this.getFileExportName = (originalFileName, id) => {
189
- return `${id}___${originalFileName}`;
190
- };
191
- this.parseFileExportname = (name) => {
192
- const [id, originalFileName] = name.split('___');
193
- return { id, originalFileName };
194
- };
195
- this.import = async ({ data: rawData, fileData, files, }) => {
145
+ this.import = async ({ data, fileData, files }) => {
196
146
  /**
197
147
  * Importing is a pretty involved procedure because of the possibility of
198
148
  * importing an export from an older version of the schema. We can't add
@@ -206,80 +156,18 @@ export class Client extends EventSubscriber {
206
156
  * to the latest (current) version. These migrations are added to the imported
207
157
  * data to produce the final state.
208
158
  */
209
- var _a;
210
159
  // register importing promise to halt other data handling
211
160
  let resolve = () => { };
212
161
  this.importingPromise = new Promise((res) => {
213
162
  resolve = res;
214
163
  });
215
- const data = supportLegacyExport(rawData);
216
164
  this.context.log('info', 'Importing data...');
217
- // close the document DB
218
- await closeDatabase(this.context.documentDb);
219
- await this.meta.resetFrom(data);
220
- // re-attach files to their file data and import
221
- const fileToIdMap = new Map(files.map((file) => {
222
- const { id } = this.parseFileExportname(file.name);
223
- return [id, file];
224
- }));
225
- const importedFiles = fileData.map((fileData) => {
226
- const file = fileToIdMap.get(fileData.id);
227
- return Object.assign(Object.assign({}, fileData), { file });
228
- });
229
- await this._fileManager.importAll(importedFiles);
230
- // now delete the document DB, open it to the specified version
231
- // and run migrations to get it to the latest version
232
- const version = data.schemaVersion;
233
- const deleteReq = indexedDB.deleteDatabase([this.namespace, 'collections'].join('_'));
234
- await new Promise((resolve, reject) => {
235
- deleteReq.onsuccess = resolve;
236
- deleteReq.onerror = reject;
237
- });
238
- // reset our context to the imported schema for now
239
- const currentSchema = this.context.schema;
240
- if (currentSchema.version !== version) {
241
- const oldSchema = (_a = this.context.oldSchemas) === null || _a === void 0 ? void 0 : _a.find((s) => s.version === version);
242
- if (!oldSchema) {
243
- this.emit('developerError', new Error(`Could not find schema for version ${version}`));
244
- throw new Error(`Could not find schema for version ${version}`);
245
- }
246
- this.context.schema = oldSchema;
247
- }
248
- // now open the document DB empty at the specified version
249
- // and initialize it from the meta DB
250
- this.context.documentDb = await openQueryDatabase({
251
- meta: this.meta,
252
- migrations: this.config.migrations,
253
- context: this.context,
254
- version,
255
- });
256
- this.context.internalEvents.emit('documentDbChanged', this.documentDb);
257
- // re-initialize data
258
- this.context.log('info', 'Re-initializing data from imported data...');
259
- await this._entities.addData({
260
- operations: data.operations,
261
- baselines: data.baselines,
262
- reset: true,
263
- });
264
- // close the database and reopen to latest version, applying
265
- // migrations
266
- await closeDatabase(this.context.documentDb);
267
- this.context.log('info', 'Migrating up to latest schema...');
268
- // put the schema back
269
- this.context.schema = currentSchema;
270
- this.context.documentDb = await openQueryDatabase({
271
- meta: this.meta,
272
- migrations: this.config.migrations,
273
- context: this.context,
274
- version: currentSchema.version,
275
- });
276
- this.context.internalEvents.emit('documentDbChanged', this.documentDb);
277
- // re-establish watcher on database
278
- this.watchForVersionChange();
165
+ await importPersistence(this.context, { data, files, fileData });
279
166
  // finally... clear out memory cache of entities and
280
167
  // re-run all active queries.
281
- this.entities.clearCache();
282
- this._queryCache.forceRefreshAll();
168
+ // this.entities.clearCache();
169
+ // this._queryCache.forceRefreshAll();
170
+ // ^ this is now done via the persistenceReset internal event.
283
171
  resolve();
284
172
  };
285
173
  /**
@@ -307,42 +195,40 @@ export class Client extends EventSubscriber {
307
195
  * invoking this manually will not skip that 3 day waiting period.
308
196
  */
309
197
  this.__cleanupFilesImmediately = () => {
310
- return this._fileManager.tryCleanupDeletedFiles();
198
+ return this.context.files.cleanupDeletedFiles();
311
199
  };
312
200
  /**
313
201
  * Manually triggers storage rebasing. Follows normal
314
202
  * rebasing rules. Rebases already happen automatically
315
203
  * during normal operation, so you probably don't need this.
316
204
  */
317
- this.__manualRebase = () => this.meta.manualRebase();
318
- this.meta = components.meta;
205
+ this.__manualRebase = () => this.context.meta.manualRebase();
319
206
  this.collectionNames = Object.keys(context.schema.collections);
320
207
  this._sync =
321
- this.config.syncConfig && !context.schema.wip
322
- ? new ServerSync(this.config.syncConfig, {
323
- meta: this.meta,
208
+ this.context.config.sync && !context.schema.wip
209
+ ? new ServerSync(this.context.config.sync, {
324
210
  onData: this.addData,
325
211
  ctx: this.context,
326
212
  })
327
- : new NoSync({ meta: this.meta });
328
- if (context.schema.wip && this.config.syncConfig) {
213
+ : new NoSync(this.context);
214
+ if (context.schema.wip && this.context.config.sync) {
329
215
  context.log('warn', '⚠️⚠️ Sync is disabled for WIP schemas. Commit your schema changes to start syncing again. ⚠️⚠️');
330
216
  }
331
217
  this._fileManager = new FileManager({
332
- db: this.metaDb,
333
218
  sync: this.sync,
334
219
  context: this.context,
335
- config: this.config.files,
336
- meta: this.meta,
337
- });
338
- this._queryCache = new QueryCache({
339
- context,
340
220
  });
341
221
  this._entities = new EntityStore({
342
222
  ctx: this.context,
343
- meta: this.meta,
344
223
  files: this._fileManager,
345
224
  });
225
+ // note: query cache must be initialized after EntityStore,
226
+ // since EntityStore needs to clear its cache before queries
227
+ // refresh.
228
+ // FIXME: make this less fragile
229
+ this._queryCache = new QueryCache({
230
+ context,
231
+ });
346
232
  this._documentManager = new DocumentManager(this.schema, this._entities);
347
233
  const notifyFutureSeen = debounce(() => {
348
234
  this.emit('futureSeen');
@@ -351,14 +237,11 @@ export class Client extends EventSubscriber {
351
237
  this.context.globalEvents.subscribe('resetToServer', () => {
352
238
  this.emit('resetToServer');
353
239
  });
354
- this.watchForVersionChange();
355
- this.metaDb.addEventListener('versionchange', () => {
356
- var _a, _b;
357
- (_b = (_a = this.context).log) === null || _b === void 0 ? void 0 : _b.call(_a, 'warn', `Another tab has requested a version change for ${this.namespace}`);
358
- this.metaDb.close();
359
- if (typeof window !== 'undefined') {
360
- window.location.reload();
361
- }
240
+ this.context.globalEvents.subscribe('operation', (operation) => {
241
+ this.emit('operation', operation);
242
+ });
243
+ this.context.globalEvents.subscribe('rebase', () => {
244
+ this.emit('rebase');
362
245
  });
363
246
  // self-assign collection shortcuts. these are not typed
364
247
  // here but are typed in the generated code...
@@ -373,12 +256,6 @@ export class Client extends EventSubscriber {
373
256
  });
374
257
  }
375
258
  }
376
- get documentDb() {
377
- return this.context.documentDb;
378
- }
379
- get metaDb() {
380
- return this.context.metaDb;
381
- }
382
259
  get schema() {
383
260
  return this.context.schema;
384
261
  }
@@ -401,5 +278,17 @@ export class Client extends EventSubscriber {
401
278
  get batch() {
402
279
  return this.entities.batch;
403
280
  }
281
+ /**
282
+ * WARNING: the internal functions of the persistence layer
283
+ * are not guaranteed and cannot be relied upon for application
284
+ * behavior. They are subject to change without notice.
285
+ */
286
+ get __persistence() {
287
+ return {
288
+ meta: this.context.meta,
289
+ queries: this.context.queries,
290
+ files: this.context.files,
291
+ };
292
+ }
404
293
  }
405
294
  //# sourceMappingURL=Client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/client/Client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/client/Client.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
- import { Migration, Operation, StorageSchema } from '@verdant-web/common';
2
- import { FileManagerConfig } from '../files/FileManager.js';
1
+ import { Migration, StorageSchema } from '@verdant-web/common';
2
+ import { FileConfig } from '../context/context.js';
3
3
  import { ServerSyncOptions } from '../sync/Sync.js';
4
4
  import { UndoHistory } from '../UndoHistory.js';
5
5
  import { Client } from './Client.js';
6
6
  import { METADATA_VERSION_KEY } from './constants.js';
7
+ import { PersistenceImplementation } from '../persistence/interfaces.js';
7
8
  export interface ClientDescriptorOptions<Presence = any, Profile = any> {
8
9
  /** The schema used to create this client */
9
10
  schema: StorageSchema<any>;
10
- oldSchemas?: StorageSchema<any>[];
11
+ oldSchemas: StorageSchema<any>[];
11
12
  /** Migrations, in order, to upgrade to each successive version of the schema */
12
13
  migrations: Migration<any>[];
13
14
  /** Provide a sync config to turn on synchronization with a server */
@@ -28,6 +29,7 @@ export interface ClientDescriptorOptions<Presence = any, Profile = any> {
28
29
  */
29
30
  log?: (level: 'debug' | 'info' | 'warn' | 'error' | 'critical', ...args: any[]) => void;
30
31
  disableRebasing?: boolean;
32
+ rebaseTimeout?: number;
31
33
  /**
32
34
  * Provide a specific schema number to override the schema version
33
35
  * in the database. This is useful for testing migrations or recovering
@@ -38,13 +40,11 @@ export interface ClientDescriptorOptions<Presence = any, Profile = any> {
38
40
  /**
39
41
  * Configuration for file management
40
42
  */
41
- files?: FileManagerConfig;
43
+ files?: FileConfig;
42
44
  /**
43
- * Listen for operations as they are applied to the database.
44
- * Wouldn't recommend using this unless you know what you're doing.
45
- * It's a very hot code path...
45
+ * Override the default IndexedDB persistence implementation.
46
46
  */
47
- onOperation?: (operation: Operation) => void;
47
+ persistence?: PersistenceImplementation;
48
48
  /**
49
49
  * Enables experimental WeakRef usage to cull documents
50
50
  * from cache that aren't being used. This is a performance
@@ -71,9 +71,6 @@ export declare class ClientDescriptor<Presence = any, Profile = any, ClientImpl
71
71
  get namespace(): string;
72
72
  constructor(init: ClientDescriptorOptions<Presence, Profile>);
73
73
  private initialize;
74
- private initializeDatabases;
75
- private initializeWIPDatabases;
76
- private cleanupWIPDatabases;
77
74
  get current(): ClientImpl | undefined;
78
75
  get readyPromise(): Promise<ClientImpl>;
79
76
  get schema(): StorageSchema<any>;
@@ -1,13 +1,12 @@
1
- import { EventSubscriber, hashObject, } from '@verdant-web/common';
2
- import { Metadata } from '../metadata/Metadata.js';
3
- import { openMetadataDatabase, openWIPMetadataDatabase, } from '../metadata/openMetadataDatabase.js';
4
- import { openWIPDatabase } from '../migration/openWIPDatabase.js';
1
+ import { EventSubscriber, HybridLogicalClockTimestampProvider, PatchCreator, noop, } from '@verdant-web/common';
5
2
  import { UndoHistory } from '../UndoHistory.js';
6
3
  import { Client } from './Client.js';
7
- import { deleteAllDatabases, deleteDatabase, getAllDatabaseNamesAndVersions, } from '../idb.js';
4
+ import { deleteAllDatabases } from '../persistence/idb/util.js';
8
5
  import { FakeWeakRef } from '../FakeWeakRef.js';
9
6
  import { METADATA_VERSION_KEY } from './constants.js';
10
- import { openQueryDatabase } from '../migration/openQueryDatabase.js';
7
+ import { Time } from '../context/Time.js';
8
+ import { initializePersistence } from '../persistence/persistence.js';
9
+ import { IdbPersistence } from '../persistence/idb/idbPersistence.js';
11
10
  /**
12
11
  * Since storage initialization is async, this class wraps the core
13
12
  * Storage creation promise and exposes some metadata which can
@@ -24,24 +23,46 @@ export class ClientDescriptor {
24
23
  // if server-side and no alternative IndexedDB implementation was provided,
25
24
  // we can't initialize the storage
26
25
  if (typeof window === 'undefined' && !init.indexedDb) {
27
- throw new Error('A verdant client was initialized in an environment without IndexedDB. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of IDBFactory to the ClientDescriptor options.');
26
+ throw new Error('A Verdant client was initialized in an environment without IndexedDB. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of IDBFactory to the ClientDescriptor options.');
28
27
  }
29
28
  if (this._initializing || this._resolvedValue) {
30
29
  return this._readyPromise;
31
30
  }
32
31
  this._initializing = true;
33
32
  try {
34
- let storage;
35
- if (init.schema.wip) {
36
- storage = await this.initializeWIPDatabases(init);
37
- }
38
- else {
39
- storage = await this.initializeDatabases(init);
40
- this.cleanupWIPDatabases(init);
41
- }
42
- this.resolveReady(storage);
43
- this._resolvedValue = storage;
44
- return storage;
33
+ const time = new Time(new HybridLogicalClockTimestampProvider(), init.schema.version);
34
+ let ctx = {
35
+ closing: false,
36
+ entityEvents: new EventSubscriber(),
37
+ globalEvents: new EventSubscriber(),
38
+ internalEvents: new EventSubscriber(),
39
+ log: init.log || noop,
40
+ migrations: init.migrations,
41
+ namespace: init.namespace,
42
+ originalNamespace: init.namespace,
43
+ schema: init.schema,
44
+ oldSchemas: init.oldSchemas,
45
+ time,
46
+ undoHistory: init.undoHistory || new UndoHistory(),
47
+ weakRef: (val) => init.EXPERIMENTAL_weakRefs
48
+ ? new WeakRef(val)
49
+ : new FakeWeakRef(val),
50
+ patchCreator: new PatchCreator(() => time.now),
51
+ config: {
52
+ files: init.files,
53
+ sync: init.sync,
54
+ persistence: {
55
+ disableRebasing: init.disableRebasing,
56
+ rebaseTimeout: init.rebaseTimeout,
57
+ },
58
+ },
59
+ persistence: init.persistence || new IdbPersistence(init.indexedDb),
60
+ };
61
+ const context = await initializePersistence(ctx);
62
+ const client = new Client(context);
63
+ this.resolveReady(client);
64
+ this._resolvedValue = client;
65
+ return client;
45
66
  }
46
67
  catch (err) {
47
68
  if (err instanceof Error) {
@@ -56,129 +77,6 @@ export class ClientDescriptor {
56
77
  this._initializing = false;
57
78
  }
58
79
  };
59
- this.initializeDatabases = async (init) => {
60
- const metadataVersion = init[METADATA_VERSION_KEY];
61
- const { db: metaDb } = await openMetadataDatabase({
62
- indexedDB: init.indexedDb,
63
- log: init.log,
64
- namespace: init.namespace,
65
- metadataVersion,
66
- });
67
- const context = {
68
- namespace: this._namespace,
69
- metaDb,
70
- schema: init.schema,
71
- log: init.log || (() => { }),
72
- undoHistory: init.undoHistory || new UndoHistory(),
73
- entityEvents: new EventSubscriber(),
74
- globalEvents: new EventSubscriber(),
75
- internalEvents: new EventSubscriber(),
76
- weakRef: (value) => {
77
- if (init.EXPERIMENTAL_weakRefs) {
78
- return new WeakRef(value);
79
- }
80
- else {
81
- return new FakeWeakRef(value);
82
- }
83
- },
84
- migrations: init.migrations,
85
- oldSchemas: init.oldSchemas,
86
- };
87
- const meta = new Metadata({
88
- context,
89
- disableRebasing: init.disableRebasing,
90
- onOperation: init.onOperation,
91
- });
92
- // verify schema integrity
93
- await meta.updateSchema(init.schema, init.overrideSchemaConflict);
94
- const contextWithNow = Object.assign(context, {
95
- getNow: () => meta.now,
96
- });
97
- const documentDb = await openQueryDatabase({
98
- context: contextWithNow,
99
- version: init.schema.version,
100
- meta,
101
- migrations: init.migrations,
102
- indexedDB: init.indexedDb,
103
- });
104
- const fullContext = Object.assign(contextWithNow, { documentDb });
105
- const storage = new Client({
106
- syncConfig: init.sync,
107
- migrations: init.migrations,
108
- files: init.files,
109
- }, fullContext, {
110
- meta,
111
- });
112
- return storage;
113
- };
114
- this.initializeWIPDatabases = async (init) => {
115
- const schemaHash = hashObject(init.schema);
116
- console.info(`WIP schema in use. Opening database with hash ${schemaHash}`);
117
- const wipNamespace = `@@wip_${init.namespace}_${schemaHash}`;
118
- const { db: metaDb } = await openWIPMetadataDatabase({
119
- indexedDB: init.indexedDb,
120
- log: init.log,
121
- namespace: init.namespace,
122
- wipNamespace: wipNamespace,
123
- });
124
- const context = {
125
- namespace: this._namespace,
126
- metaDb,
127
- schema: init.schema,
128
- log: init.log || (() => { }),
129
- undoHistory: init.undoHistory || new UndoHistory(),
130
- entityEvents: new EventSubscriber(),
131
- globalEvents: new EventSubscriber(),
132
- internalEvents: new EventSubscriber(),
133
- weakRef: (value) => {
134
- if (init.EXPERIMENTAL_weakRefs) {
135
- return new WeakRef(value);
136
- }
137
- else {
138
- return new FakeWeakRef(value);
139
- }
140
- },
141
- migrations: init.migrations,
142
- oldSchemas: init.oldSchemas,
143
- };
144
- const meta = new Metadata({
145
- context,
146
- disableRebasing: init.disableRebasing,
147
- });
148
- const contextWithNow = Object.assign(context, {
149
- getNow: () => meta.now,
150
- });
151
- // verify schema integrity
152
- await meta.updateSchema(init.schema, init.overrideSchemaConflict);
153
- const documentDb = await openWIPDatabase({
154
- context: contextWithNow,
155
- version: init.schema.version,
156
- meta,
157
- migrations: init.migrations,
158
- indexedDB: init.indexedDb,
159
- wipNamespace,
160
- });
161
- const fullContext = Object.assign(contextWithNow, { documentDb });
162
- const storage = new Client({
163
- syncConfig: init.sync,
164
- migrations: init.migrations,
165
- files: init.files,
166
- }, fullContext, {
167
- meta,
168
- });
169
- return storage;
170
- };
171
- this.cleanupWIPDatabases = async (init) => {
172
- const databaseInfo = await getAllDatabaseNamesAndVersions(init.indexedDb);
173
- const wipDatabases = databaseInfo
174
- .filter((db) => { var _a; return (_a = db.name) === null || _a === void 0 ? void 0 : _a.startsWith('@@wip_'); })
175
- .map((db) => db.name);
176
- // don't clear a current WIP database.
177
- const wipDatabasesToDelete = wipDatabases.filter((db) => !db.startsWith(`@@wip_${init.namespace}_${hashObject(init.schema)}`));
178
- for (const db of wipDatabasesToDelete) {
179
- await deleteDatabase(db, init.indexedDb);
180
- }
181
- };
182
80
  this.open = () => this.initialize(this.init);
183
81
  this.close = async () => {
184
82
  if (this._resolvedValue) {