@verdant-web/store 3.12.1 → 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 (279) 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/errors.d.ts +8 -0
  43. package/dist/esm/errors.js +12 -0
  44. package/dist/esm/errors.js.map +1 -0
  45. package/dist/esm/files/EntityFile.d.ts +6 -3
  46. package/dist/esm/files/EntityFile.js +22 -19
  47. package/dist/esm/files/EntityFile.js.map +1 -1
  48. package/dist/esm/files/FileManager.d.ts +8 -39
  49. package/dist/esm/files/FileManager.js +15 -170
  50. package/dist/esm/files/FileManager.js.map +1 -1
  51. package/dist/esm/files/utils.d.ts +0 -1
  52. package/dist/esm/files/utils.js +0 -14
  53. package/dist/esm/files/utils.js.map +1 -1
  54. package/dist/esm/index.d.ts +1 -2
  55. package/dist/esm/index.js +0 -1
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/{metadata → persistence}/MessageCreator.d.ts +5 -6
  58. package/dist/esm/{metadata → persistence}/MessageCreator.js +31 -38
  59. package/dist/esm/persistence/MessageCreator.js.map +1 -0
  60. package/dist/esm/persistence/PersistenceFiles.d.ts +48 -0
  61. package/dist/esm/persistence/PersistenceFiles.js +160 -0
  62. package/dist/esm/persistence/PersistenceFiles.js.map +1 -0
  63. package/dist/esm/persistence/PersistenceMetadata.d.ts +69 -0
  64. package/dist/esm/persistence/PersistenceMetadata.js +302 -0
  65. package/dist/esm/persistence/PersistenceMetadata.js.map +1 -0
  66. package/dist/esm/persistence/PersistenceQueries.d.ts +34 -0
  67. package/dist/esm/persistence/PersistenceQueries.js +15 -0
  68. package/dist/esm/persistence/PersistenceQueries.js.map +1 -0
  69. package/dist/esm/persistence/PersistenceRebaser.d.ts +32 -0
  70. package/dist/esm/persistence/PersistenceRebaser.js +120 -0
  71. package/dist/esm/persistence/PersistenceRebaser.js.map +1 -0
  72. package/dist/esm/{IDBService.d.ts → persistence/idb/IdbService.d.ts} +9 -7
  73. package/dist/esm/{IDBService.js → persistence/idb/IdbService.js} +29 -8
  74. package/dist/esm/persistence/idb/IdbService.js.map +1 -0
  75. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +58 -0
  76. package/dist/esm/{files/FileStorage.js → persistence/idb/files/IdbPersistenceFileDb.js} +85 -50
  77. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -0
  78. package/dist/esm/persistence/idb/idbPersistence.d.ts +19 -0
  79. package/dist/esm/persistence/idb/idbPersistence.js +80 -0
  80. package/dist/esm/persistence/idb/idbPersistence.js.map +1 -0
  81. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +72 -0
  82. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +235 -0
  83. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -0
  84. package/dist/esm/{metadata → persistence/idb/metadata}/openMetadataDatabase.d.ts +3 -1
  85. package/dist/esm/{metadata → persistence/idb/metadata}/openMetadataDatabase.js +12 -3
  86. package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -0
  87. package/dist/esm/persistence/idb/queries/IdbQueryDb.d.ts +41 -0
  88. package/dist/esm/persistence/idb/queries/IdbQueryDb.js +174 -0
  89. package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +1 -0
  90. package/dist/esm/{migration → persistence/idb/queries/migration}/db.d.ts +1 -1
  91. package/dist/esm/{migration → persistence/idb/queries/migration}/db.js +10 -48
  92. package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -0
  93. package/dist/esm/persistence/idb/queries/migration/engine.d.ts +12 -0
  94. package/dist/esm/{migration → persistence/idb/queries/migration}/engine.js +29 -46
  95. package/dist/esm/persistence/idb/queries/migration/engine.js.map +1 -0
  96. package/dist/esm/{migration → persistence/idb/queries/migration}/migrations.d.ts +1 -3
  97. package/dist/esm/{migration → persistence/idb/queries/migration}/migrations.js +11 -10
  98. package/dist/esm/persistence/idb/queries/migration/migrations.js.map +1 -0
  99. package/dist/esm/{migration → persistence/idb/queries/migration}/openQueryDatabase.d.ts +1 -3
  100. package/dist/esm/{migration → persistence/idb/queries/migration}/openQueryDatabase.js +4 -7
  101. package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +1 -0
  102. package/dist/esm/{migration → persistence/idb/queries/migration}/paths.js +2 -2
  103. package/dist/esm/persistence/idb/queries/migration/paths.js.map +1 -0
  104. package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +1 -0
  105. package/dist/esm/persistence/idb/queries/migration/types.d.ts +6 -0
  106. package/dist/esm/persistence/idb/queries/migration/types.js.map +1 -0
  107. package/dist/esm/persistence/idb/queries/ranges.d.ts +2 -0
  108. package/dist/esm/persistence/idb/queries/ranges.js +66 -0
  109. package/dist/esm/persistence/idb/queries/ranges.js.map +1 -0
  110. package/dist/esm/{idb.d.ts → persistence/idb/util.d.ts} +11 -0
  111. package/dist/esm/{idb.js → persistence/idb/util.js} +58 -1
  112. package/dist/esm/persistence/idb/util.js.map +1 -0
  113. package/dist/esm/persistence/interfaces.d.ts +181 -0
  114. package/dist/esm/persistence/interfaces.js +2 -0
  115. package/dist/esm/persistence/interfaces.js.map +1 -0
  116. package/dist/esm/persistence/persistence.d.ts +4 -0
  117. package/dist/esm/persistence/persistence.js +126 -0
  118. package/dist/esm/persistence/persistence.js.map +1 -0
  119. package/dist/esm/queries/BaseQuery.d.ts +2 -1
  120. package/dist/esm/queries/BaseQuery.js +3 -0
  121. package/dist/esm/queries/BaseQuery.js.map +1 -1
  122. package/dist/esm/queries/CollectionQueries.d.ts +1 -1
  123. package/dist/esm/queries/FindAllQuery.js +1 -3
  124. package/dist/esm/queries/FindAllQuery.js.map +1 -1
  125. package/dist/esm/queries/FindInfiniteQuery.js +2 -5
  126. package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
  127. package/dist/esm/queries/FindOneQuery.js +1 -3
  128. package/dist/esm/queries/FindOneQuery.js.map +1 -1
  129. package/dist/esm/queries/FindPageQuery.js +1 -3
  130. package/dist/esm/queries/FindPageQuery.js.map +1 -1
  131. package/dist/esm/queries/QueryCache.d.ts +1 -1
  132. package/dist/esm/queries/QueryCache.js +4 -0
  133. package/dist/esm/queries/QueryCache.js.map +1 -1
  134. package/dist/esm/sync/FileSync.d.ts +23 -8
  135. package/dist/esm/sync/FileSync.js +76 -28
  136. package/dist/esm/sync/FileSync.js.map +1 -1
  137. package/dist/esm/sync/PresenceManager.d.ts +4 -3
  138. package/dist/esm/sync/PresenceManager.js +2 -2
  139. package/dist/esm/sync/PresenceManager.js.map +1 -1
  140. package/dist/esm/sync/PushPullSync.d.ts +4 -6
  141. package/dist/esm/sync/PushPullSync.js +13 -12
  142. package/dist/esm/sync/PushPullSync.js.map +1 -1
  143. package/dist/esm/sync/Sync.d.ts +9 -11
  144. package/dist/esm/sync/Sync.js +34 -29
  145. package/dist/esm/sync/Sync.js.map +1 -1
  146. package/dist/esm/sync/WebSocketSync.d.ts +4 -6
  147. package/dist/esm/sync/WebSocketSync.js +20 -22
  148. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  149. package/dist/esm/utils/Disposable.d.ts +5 -2
  150. package/dist/esm/utils/Disposable.js +3 -2
  151. package/dist/esm/utils/Disposable.js.map +1 -1
  152. package/dist/esm/utils/wip.d.ts +2 -0
  153. package/dist/esm/utils/wip.js +5 -0
  154. package/dist/esm/utils/wip.js.map +1 -0
  155. package/package.json +2 -2
  156. package/src/__tests__/batching.test.ts +6 -6
  157. package/src/__tests__/entities.test.ts +1 -1
  158. package/src/__tests__/fixtures/testStorage.ts +2 -10
  159. package/src/__tests__/queries.test.ts +1 -1
  160. package/src/backup.ts +3 -4
  161. package/src/client/Client.ts +69 -226
  162. package/src/client/ClientDescriptor.ts +53 -184
  163. package/src/context/Time.ts +35 -0
  164. package/src/context/context.ts +200 -0
  165. package/src/entities/DocumentManager.ts +0 -3
  166. package/src/entities/Entity.test.ts +9 -9
  167. package/src/entities/Entity.ts +6 -12
  168. package/src/entities/EntityCache.ts +0 -9
  169. package/src/entities/EntityMetadata.ts +4 -4
  170. package/src/entities/EntityStore.ts +26 -29
  171. package/src/entities/OperationBatcher.ts +9 -11
  172. package/src/errors.ts +13 -0
  173. package/src/files/EntityFile.ts +16 -5
  174. package/src/files/FileManager.ts +18 -245
  175. package/src/files/utils.ts +0 -15
  176. package/src/index.ts +2 -1
  177. package/src/{metadata → persistence}/MessageCreator.ts +46 -36
  178. package/src/persistence/PersistenceFiles.ts +227 -0
  179. package/src/persistence/PersistenceMetadata.ts +425 -0
  180. package/src/persistence/PersistenceQueries.ts +22 -0
  181. package/src/persistence/PersistenceRebaser.ts +171 -0
  182. package/src/{IDBService.ts → persistence/idb/IdbService.ts} +45 -12
  183. package/src/{files/FileStorage.ts → persistence/idb/files/IdbPersistenceFileDb.ts} +128 -86
  184. package/src/persistence/idb/idbPersistence.ts +116 -0
  185. package/src/persistence/idb/metadata/IdbMetadataDb.ts +460 -0
  186. package/src/{metadata → persistence/idb/metadata}/openMetadataDatabase.ts +21 -4
  187. package/src/persistence/idb/queries/IdbQueryDb.ts +251 -0
  188. package/src/{migration → persistence/idb/queries/migration}/db.ts +18 -72
  189. package/src/{migration → persistence/idb/queries/migration}/engine.ts +39 -62
  190. package/src/{migration → persistence/idb/queries/migration}/migrations.ts +13 -18
  191. package/src/{migration → persistence/idb/queries/migration}/openQueryDatabase.ts +5 -14
  192. package/src/{migration → persistence/idb/queries/migration}/paths.ts +4 -3
  193. package/src/persistence/idb/queries/migration/types.ts +8 -0
  194. package/src/persistence/idb/queries/ranges.ts +107 -0
  195. package/src/{idb.ts → persistence/idb/util.ts} +75 -0
  196. package/src/persistence/interfaces.ts +240 -0
  197. package/src/persistence/persistence.ts +223 -0
  198. package/src/queries/BaseQuery.ts +5 -1
  199. package/src/queries/CollectionQueries.ts +2 -2
  200. package/src/queries/FindAllQuery.ts +1 -3
  201. package/src/queries/FindInfiniteQuery.ts +2 -5
  202. package/src/queries/FindOneQuery.ts +1 -3
  203. package/src/queries/FindPageQuery.ts +1 -3
  204. package/src/queries/QueryCache.ts +20 -1
  205. package/src/sync/FileSync.ts +93 -30
  206. package/src/sync/PresenceManager.ts +5 -7
  207. package/src/sync/PushPullSync.ts +23 -19
  208. package/src/sync/Sync.ts +45 -36
  209. package/src/sync/WebSocketSync.ts +41 -27
  210. package/src/utils/Disposable.ts +7 -4
  211. package/src/utils/wip.ts +5 -0
  212. package/dist/esm/IDBService.js.map +0 -1
  213. package/dist/esm/__tests__/legacyOids.test.d.ts +0 -1
  214. package/dist/esm/__tests__/legacyOids.test.js +0 -352
  215. package/dist/esm/__tests__/legacyOids.test.js.map +0 -1
  216. package/dist/esm/context.d.ts +0 -45
  217. package/dist/esm/files/FileStorage.d.ts +0 -47
  218. package/dist/esm/files/FileStorage.js.map +0 -1
  219. package/dist/esm/idb.js.map +0 -1
  220. package/dist/esm/metadata/AckInfoStore.d.ts +0 -10
  221. package/dist/esm/metadata/AckInfoStore.js +0 -22
  222. package/dist/esm/metadata/AckInfoStore.js.map +0 -1
  223. package/dist/esm/metadata/BaselinesStore.d.ts +0 -40
  224. package/dist/esm/metadata/BaselinesStore.js +0 -102
  225. package/dist/esm/metadata/BaselinesStore.js.map +0 -1
  226. package/dist/esm/metadata/LocalReplicaStore.d.ts +0 -19
  227. package/dist/esm/metadata/LocalReplicaStore.js +0 -56
  228. package/dist/esm/metadata/LocalReplicaStore.js.map +0 -1
  229. package/dist/esm/metadata/MessageCreator.js.map +0 -1
  230. package/dist/esm/metadata/Metadata.d.ts +0 -146
  231. package/dist/esm/metadata/Metadata.js +0 -452
  232. package/dist/esm/metadata/Metadata.js.map +0 -1
  233. package/dist/esm/metadata/OperationsStore.d.ts +0 -62
  234. package/dist/esm/metadata/OperationsStore.js +0 -175
  235. package/dist/esm/metadata/OperationsStore.js.map +0 -1
  236. package/dist/esm/metadata/SchemaStore.d.ts +0 -9
  237. package/dist/esm/metadata/SchemaStore.js +0 -35
  238. package/dist/esm/metadata/SchemaStore.js.map +0 -1
  239. package/dist/esm/metadata/openMetadataDatabase.js.map +0 -1
  240. package/dist/esm/migration/db.js.map +0 -1
  241. package/dist/esm/migration/engine.d.ts +0 -15
  242. package/dist/esm/migration/engine.js.map +0 -1
  243. package/dist/esm/migration/errors.d.ts +0 -5
  244. package/dist/esm/migration/errors.js +0 -8
  245. package/dist/esm/migration/errors.js.map +0 -1
  246. package/dist/esm/migration/migrations.js.map +0 -1
  247. package/dist/esm/migration/openQueryDatabase.js.map +0 -1
  248. package/dist/esm/migration/openWIPDatabase.d.ts +0 -11
  249. package/dist/esm/migration/openWIPDatabase.js +0 -65
  250. package/dist/esm/migration/openWIPDatabase.js.map +0 -1
  251. package/dist/esm/migration/paths.js.map +0 -1
  252. package/dist/esm/migration/paths.test.js.map +0 -1
  253. package/dist/esm/migration/types.d.ts +0 -3
  254. package/dist/esm/migration/types.js.map +0 -1
  255. package/dist/esm/queries/QueryableStorage.d.ts +0 -20
  256. package/dist/esm/queries/QueryableStorage.js +0 -90
  257. package/dist/esm/queries/QueryableStorage.js.map +0 -1
  258. package/dist/esm/queries/dbQueries.d.ts +0 -22
  259. package/dist/esm/queries/dbQueries.js +0 -130
  260. package/dist/esm/queries/dbQueries.js.map +0 -1
  261. package/src/__tests__/legacyOids.test.ts +0 -375
  262. package/src/context.ts +0 -55
  263. package/src/metadata/AckInfoStore.ts +0 -30
  264. package/src/metadata/BaselinesStore.ts +0 -188
  265. package/src/metadata/LocalReplicaStore.ts +0 -79
  266. package/src/metadata/Metadata.ts +0 -685
  267. package/src/metadata/OperationsStore.ts +0 -332
  268. package/src/metadata/SchemaStore.ts +0 -47
  269. package/src/migration/errors.ts +0 -7
  270. package/src/migration/openWIPDatabase.ts +0 -97
  271. package/src/migration/types.ts +0 -4
  272. package/src/queries/QueryableStorage.ts +0 -122
  273. package/src/queries/dbQueries.ts +0 -161
  274. /package/dist/esm/{context.js → context/context.js} +0 -0
  275. /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.d.ts +0 -0
  276. /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.test.d.ts +0 -0
  277. /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.test.js +0 -0
  278. /package/dist/esm/{migration → persistence/idb/queries/migration}/types.js +0 -0
  279. /package/src/{migration → persistence/idb/queries/migration}/paths.test.ts +0 -0
@@ -1,33 +1,13 @@
1
- import { closeDatabase, globalIDB, storeRequestPromise } from '../idb.js';
2
- export async function getDatabaseVersion(indexedDB, namespace, version, log) {
3
- function openAndGetVersion(resolve, reject) {
4
- let currentVersion;
5
- let database;
6
- const request = indexedDB.open([namespace, 'collections'].join('_'), version);
7
- request.onupgradeneeded = async (event) => {
8
- currentVersion = event.oldVersion;
9
- const transaction = request.transaction;
10
- database = request.result;
11
- transaction.abort();
12
- };
13
- request.onsuccess = (event) => {
14
- resolve([request.result.version, request.result]);
15
- };
16
- request.onblocked = (event) => {
17
- // retry if blocked
18
- log === null || log === void 0 ? void 0 : log('Database blocked, waiting...');
19
- // setTimeout(() => {
20
- // openAndGetVersion(resolve, reject);
21
- // }, 200);
22
- };
23
- request.onerror = (event) => {
24
- // FIXME: this fails if the code is older than the local database
25
- resolve([currentVersion, database]);
26
- };
1
+ import { globalIDB, storeRequestPromise, openDatabase as baseOpenDatabase, getDocumentDbName, } from '../../util.js';
2
+ export async function getDatabaseVersion(indexedDB, namespace) {
3
+ var _a;
4
+ const databaseName = getDocumentDbName(namespace);
5
+ const dbInfo = await indexedDB.databases();
6
+ const existingDb = dbInfo.find((info) => info.name === databaseName);
7
+ if (existingDb) {
8
+ return (_a = existingDb.version) !== null && _a !== void 0 ? _a : 0;
27
9
  }
28
- const [currentVersion, db] = await new Promise(openAndGetVersion);
29
- await closeDatabase(db);
30
- return currentVersion;
10
+ return 0;
31
11
  }
32
12
  /**
33
13
  * Upgrades the database to the given version, using the given upgrader function.
@@ -72,25 +52,7 @@ export async function acquireLock(namespace, procedure) {
72
52
  }
73
53
  export async function openDatabase({ indexedDB = globalIDB, namespace, version, context, }) {
74
54
  context.log('debug', 'Opening database', namespace, 'at version', version);
75
- const db = await new Promise((resolve, reject) => {
76
- const request = indexedDB.open([namespace, 'collections'].join('_'), version);
77
- request.onupgradeneeded = async (event) => {
78
- const transaction = request.transaction;
79
- transaction.abort();
80
- context.log('error', 'Database upgrade needed, but not expected', 'Expected', version, 'Got', request.result.version);
81
- reject(request.error ||
82
- new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${version}, got ${request.result.version}`));
83
- };
84
- request.onsuccess = (event) => {
85
- resolve(request.result);
86
- };
87
- request.onblocked = (event) => {
88
- reject(new Error('Migration error: database blocked'));
89
- };
90
- request.onerror = (event) => {
91
- reject(new Error('Migration error: database error'));
92
- };
93
- });
55
+ const db = await baseOpenDatabase(getDocumentDbName(namespace), version, indexedDB);
94
56
  db.addEventListener('versionchange', (event) => {
95
57
  db.close();
96
58
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Migration, MigrationEngine } from '@verdant-web/common';
2
+ import { OpenDocumentDbContext } from './types.js';
3
+ export declare function getMigrationEngine({ migration, context, queryDb, }: {
4
+ log?: (...args: any[]) => void;
5
+ migration: Migration;
6
+ context: OpenDocumentDbContext;
7
+ queryDb: IDBDatabase;
8
+ }): MigrationEngine;
9
+ export declare function getInitialMigrationEngine({ migration, context, }: {
10
+ context: OpenDocumentDbContext;
11
+ migration: Migration;
12
+ }): MigrationEngine;
@@ -1,6 +1,6 @@
1
- import { addFieldDefaults, assert, assignOidsToAllSubObjects, cloneDeep, createOid, diffToPatches, getOid, initialToPatches, removeOidPropertiesFromAllSubObjects, } from '@verdant-web/common';
2
- import { findAllOids, findOneOid } from '../queries/dbQueries.js';
3
- function getMigrationMutations({ migration, meta, getMigrationNow, newOids, }) {
1
+ import { addFieldDefaults, assert, assignOidsToAllSubObjects, cloneDeep, createOid, diffToPatches, getOid, removeOidPropertiesFromAllSubObjects, } from '@verdant-web/common';
2
+ import { IdbQueryDb } from '../IdbQueryDb.js';
3
+ function getMigrationMutations({ migration, newOids, ctx, }) {
4
4
  return migration.allCollections.reduce((acc, collectionName) => {
5
5
  acc[collectionName] = {
6
6
  put: async (doc, options) => {
@@ -9,60 +9,53 @@ function getMigrationMutations({ migration, meta, getMigrationNow, newOids, }) {
9
9
  const primaryKey = doc[migration.newSchema.collections[collectionName].primaryKey];
10
10
  const oid = createOid(collectionName, primaryKey);
11
11
  newOids.push(oid);
12
- await meta.insertLocalOperations(initialToPatches(doc, oid, getMigrationNow, undefined, undefined, {
13
- authz: options === null || options === void 0 ? void 0 : options.access,
12
+ await ctx.time.withMigrationTime(migration.version, () => ctx.meta.insertData({
13
+ operations: ctx.patchCreator.createInitialize(doc, oid, options === null || options === void 0 ? void 0 : options.access),
14
+ isLocal: true,
14
15
  }));
15
16
  return doc;
16
17
  },
17
18
  delete: async (id) => {
18
19
  const rootOid = createOid(collectionName, id);
19
- const authz = await meta.getDocumentAuthz(rootOid);
20
- const allOids = await meta.getAllDocumentRelatedOids(rootOid);
21
- return meta.insertLocalOperations(allOids.map((oid) => ({
22
- oid,
23
- timestamp: getMigrationNow(),
24
- data: { op: 'delete' },
25
- authz,
26
- })));
20
+ await ctx.time.withMigrationTime(migration.version, () => ctx.meta.deleteDocument(rootOid));
27
21
  },
28
22
  };
29
23
  return acc;
30
24
  }, {});
31
25
  }
32
- function getMigrationQueries({ migration, context, meta, }) {
26
+ function getMigrationQueries({ migration, context, queryDb, }) {
27
+ const queries = new IdbQueryDb(queryDb, context);
33
28
  return migration.oldCollections.reduce((acc, collectionName) => {
34
29
  acc[collectionName] = {
35
30
  get: async (id) => {
36
31
  const oid = createOid(collectionName, id);
37
- const doc = await meta.getDocumentSnapshot(oid, {
32
+ const doc = await context.meta.getDocumentSnapshot(oid, {
38
33
  // only get the snapshot up to the previous version (newer operations may have synced)
39
- to: meta.time.now(migration.oldSchema.version),
34
+ to: context.time.nowWithVersion(migration.oldSchema.version),
40
35
  });
41
36
  return doc;
42
37
  },
43
38
  findOne: async (filter) => {
44
- const oid = await findOneOid({
39
+ const oid = await queries.findOneOid({
45
40
  collection: collectionName,
46
41
  index: filter,
47
- context,
48
42
  });
49
43
  if (!oid)
50
44
  return null;
51
- const doc = await meta.getDocumentSnapshot(oid, {
45
+ const doc = await context.meta.getDocumentSnapshot(oid, {
52
46
  // only get the snapshot up to the previous version (newer operations may have synced)
53
- to: meta.time.now(migration.oldSchema.version),
47
+ to: context.time.nowWithVersion(migration.oldSchema.version),
54
48
  });
55
49
  return doc;
56
50
  },
57
51
  findAll: async (filter) => {
58
- const oids = await findAllOids({
52
+ const { result: oids } = await queries.findAllOids({
59
53
  collection: collectionName,
60
54
  index: filter,
61
- context,
62
55
  });
63
- const docs = await Promise.all(oids.map((oid) => meta.getDocumentSnapshot(oid, {
56
+ const docs = await Promise.all(oids.map((oid) => context.meta.getDocumentSnapshot(oid, {
64
57
  // only get the snapshot up to the previous version (newer operations may have synced)
65
- to: meta.time.now(migration.oldSchema.version),
58
+ to: context.time.nowWithVersion(migration.oldSchema.version),
66
59
  })));
67
60
  return docs;
68
61
  },
@@ -70,29 +63,20 @@ function getMigrationQueries({ migration, context, meta, }) {
70
63
  return acc;
71
64
  }, {});
72
65
  }
73
- export function getMigrationEngine({ meta, migration, context, }) {
74
- function getMigrationNow() {
75
- return meta.time.zero(migration.version);
76
- }
66
+ export function getMigrationEngine({ migration, context, queryDb, }) {
77
67
  const newOids = new Array();
78
68
  const queries = getMigrationQueries({
79
69
  migration,
80
70
  context,
81
- meta,
71
+ queryDb,
82
72
  });
83
73
  const mutations = getMigrationMutations({
84
74
  migration,
85
- getMigrationNow,
86
75
  newOids,
87
- meta,
76
+ ctx: context,
88
77
  });
89
78
  const deleteCollection = async (collection) => {
90
- const allOids = await meta.getAllCollectionRelatedOids(collection);
91
- return meta.insertLocalOperations(allOids.map((oid) => ({
92
- oid,
93
- timestamp: getMigrationNow(),
94
- data: { op: 'delete' },
95
- })));
79
+ await context.meta.deleteCollection(collection);
96
80
  };
97
81
  const awaitables = new Array();
98
82
  const engine = {
@@ -108,7 +92,7 @@ export function getMigrationEngine({ meta, migration, context, }) {
108
92
  // when the snapshots themselves are derived from the same data...)
109
93
  // maybe don't use the findAll query, and instead go a level
110
94
  // lower to retain access to lower level data here?
111
- const authz = await meta.getDocumentAuthz(rootOid);
95
+ const authz = await context.meta.getDocumentAuthz(rootOid);
112
96
  const original = cloneDeep(doc);
113
97
  // @ts-ignore - excessive type resolution
114
98
  const newValue = await strategy(doc);
@@ -119,12 +103,15 @@ export function getMigrationEngine({ meta, migration, context, }) {
119
103
  removeOidPropertiesFromAllSubObjects(original);
120
104
  removeOidPropertiesFromAllSubObjects(newValue);
121
105
  assignOidsToAllSubObjects(newValue);
122
- const patches = diffToPatches(original, newValue, getMigrationNow, undefined, [], {
106
+ const patches = diffToPatches(original, newValue, () => context.time.zeroWithVersion(migration.version), undefined, [], {
123
107
  mergeUnknownObjects: true,
124
108
  authz,
125
109
  });
126
110
  if (patches.length > 0) {
127
- await meta.insertLocalOperations(patches);
111
+ await context.meta.insertData({
112
+ operations: patches,
113
+ isLocal: true,
114
+ });
128
115
  }
129
116
  }
130
117
  }));
@@ -135,10 +122,7 @@ export function getMigrationEngine({ meta, migration, context, }) {
135
122
  };
136
123
  return engine;
137
124
  }
138
- export function getInitialMigrationEngine({ meta, migration, context, }) {
139
- function getMigrationNow() {
140
- return meta.time.zero(migration.version);
141
- }
125
+ export function getInitialMigrationEngine({ migration, context, }) {
142
126
  const newOids = new Array();
143
127
  const queries = new Proxy({}, {
144
128
  get() {
@@ -147,9 +131,8 @@ export function getInitialMigrationEngine({ meta, migration, context, }) {
147
131
  });
148
132
  const mutations = getMigrationMutations({
149
133
  migration,
150
- getMigrationNow,
151
134
  newOids,
152
- meta,
135
+ ctx: context,
153
136
  });
154
137
  const engine = {
155
138
  log: context.log,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/engine.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
1
  import { Migration } from '@verdant-web/common';
2
- import { Metadata } from '../metadata/Metadata.js';
3
2
  import { OpenDocumentDbContext } from './types.js';
4
- export declare function runMigrations({ context, toRun, meta, indexedDB, namespace, }: {
3
+ export declare function runMigrations({ context, toRun, indexedDB, namespace, }: {
5
4
  context: OpenDocumentDbContext;
6
5
  toRun: Migration<any>[];
7
- meta: Metadata;
8
6
  indexedDB?: IDBFactory;
9
7
  /** This namespace value controls where the database being migrated is. */
10
8
  namespace?: string;
@@ -1,9 +1,9 @@
1
1
  import { createOid, decomposeOid, getIndexValues, getOidRoot, } from '@verdant-web/common';
2
2
  import { acquireLock, openDatabase, upgradeDatabase } from './db.js';
3
3
  import { getInitialMigrationEngine, getMigrationEngine } from './engine.js';
4
- import { closeDatabase } from '../idb.js';
4
+ import { closeDatabase } from '../../util.js';
5
5
  const globalIDB = typeof window !== 'undefined' ? window.indexedDB : undefined;
6
- export async function runMigrations({ context, toRun, meta, indexedDB = globalIDB, namespace = context.namespace, }) {
6
+ export async function runMigrations({ context, toRun, indexedDB = globalIDB, namespace = context.namespace, }) {
7
7
  await acquireLock(namespace, async () => {
8
8
  // now the fun part
9
9
  for (const migration of toRun) {
@@ -13,7 +13,6 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
13
13
  // migrations from 0 (i.e. initial migrations) don't attempt to open an existing db
14
14
  if (migration.oldSchema.version === 0) {
15
15
  engine = getInitialMigrationEngine({
16
- meta,
17
16
  migration,
18
17
  context,
19
18
  });
@@ -30,9 +29,9 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
30
29
  });
31
30
  // this will only write to our metadata store via operations!
32
31
  engine = getMigrationEngine({
33
- meta,
34
32
  migration,
35
- context: Object.assign(Object.assign({}, context), { documentDb: originalDatabase }),
33
+ context,
34
+ queryDb: originalDatabase,
36
35
  });
37
36
  try {
38
37
  await migration.migrate(engine);
@@ -75,9 +74,9 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
75
74
  * would be missing from findAll and findOne queries.
76
75
  */
77
76
  const docsWithUnappliedMigrations = await getDocsWithUnappliedMigrations({
78
- meta,
79
77
  currentVersion: migration.oldSchema.version,
80
78
  newVersion: migration.newSchema.version,
79
+ ctx: context,
81
80
  });
82
81
  // once the schema is ready, we can write back the migrated documents
83
82
  for (const collection of migration.allCollections) {
@@ -112,7 +111,7 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
112
111
  // );
113
112
  const snapshots = await Promise.all(oids.map(async (oid) => {
114
113
  try {
115
- const snap = await meta.getDocumentSnapshot(oid);
114
+ const snap = await context.meta.getDocumentSnapshot(oid);
116
115
  return [oid, snap];
117
116
  }
118
117
  catch (e) {
@@ -200,13 +199,15 @@ async function putView(store, view) {
200
199
  * that were not applied to their queryable snapshots because they were in the
201
200
  * future. These documents need to be refreshed in storage.
202
201
  */
203
- async function getDocsWithUnappliedMigrations({ meta, currentVersion, newVersion: _, }) {
202
+ async function getDocsWithUnappliedMigrations({ currentVersion, newVersion: _, ctx, }) {
204
203
  // scan for all operations in metadata after the current version.
205
204
  // this could be more efficient if also filtering below or equal newVersion but
206
205
  // that seems so unlikely in practice...
207
206
  const unappliedOperations = [];
208
- await meta.operations.iterateOverAllOperations((op) => unappliedOperations.push(op), {
209
- from: meta.time.zero(currentVersion + 1),
207
+ await ctx.meta.iterateAllOperations((op) => {
208
+ unappliedOperations.push(op);
209
+ }, {
210
+ from: ctx.time.zeroWithVersion(currentVersion + 1),
210
211
  });
211
212
  return Array.from(new Set(unappliedOperations.map((op) => getOidRoot(op.oid))));
212
213
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/migrations.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
1
  import { Migration } from '@verdant-web/common';
2
- import { Metadata } from '../metadata/Metadata.js';
3
2
  import { OpenDocumentDbContext } from './types.js';
4
- export declare function openQueryDatabase({ version, indexedDB, migrations, meta, context, }: {
3
+ export declare function openQueryDatabase({ version, indexedDB, migrations, context, }: {
5
4
  version: number;
6
5
  migrations: Migration<any>[];
7
6
  indexedDB?: IDBFactory;
8
- meta: Metadata;
9
7
  context: OpenDocumentDbContext;
10
8
  }): Promise<IDBDatabase>;
@@ -2,12 +2,9 @@ import { getDatabaseVersion, openDatabase } from './db.js';
2
2
  import { runMigrations } from './migrations.js';
3
3
  import { getMigrationPath } from './paths.js';
4
4
  const globalIDB = typeof window !== 'undefined' ? window.indexedDB : undefined;
5
- export async function openQueryDatabase({ version, indexedDB = globalIDB, migrations, meta, context, }) {
6
- if (context.schema.wip) {
7
- throw new Error('Cannot open a production client with a WIP schema!');
8
- }
9
- const currentVersion = await getDatabaseVersion(indexedDB, context.namespace, version, context.log);
10
- context.log('debug', 'Current database version:', currentVersion, 'target version:', version);
5
+ export async function openQueryDatabase({ version, indexedDB = globalIDB, migrations, context, }) {
6
+ const currentVersion = await getDatabaseVersion(indexedDB, context.namespace);
7
+ context.log('debug', 'Opening index database', context.namespace, 'Current database version:', currentVersion, 'target version:', version, context.schema.wip ? '(wip)' : '');
11
8
  const toRun = getMigrationPath({
12
9
  currentVersion,
13
10
  targetVersion: version,
@@ -15,7 +12,7 @@ export async function openQueryDatabase({ version, indexedDB = globalIDB, migrat
15
12
  });
16
13
  if (toRun.length > 0) {
17
14
  context.log('debug', 'Migrations to run:', toRun.map((m) => m.version));
18
- await runMigrations({ context, toRun, meta, indexedDB });
15
+ await runMigrations({ context, toRun, indexedDB });
19
16
  }
20
17
  return openDatabase({
21
18
  indexedDB,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openQueryDatabase.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/openQueryDatabase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,SAAS,GACd,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,SAAiB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACvC,OAAO,EACP,SAAS,GAAG,SAAS,EACrB,UAAU,EACV,OAAO,GAMP;IACA,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CACV,OAAO,EACP,wBAAwB,EACxB,OAAO,CAAC,SAAS,EACjB,2BAA2B,EAC3B,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC;IAEF,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC9B,cAAc;QACd,aAAa,EAAE,OAAO;QACtB,UAAU;KACV,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACV,OAAO,EACP,oBAAoB,EACpB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAC3B,CAAC;QACF,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,YAAY,CAAC;QACnB,SAAS;QACT,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO;QACP,OAAO;KACP,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { MigrationPathError } from './errors.js';
1
+ import { VerdantError } from '@verdant-web/common';
2
2
  export function getMigrationPath({ currentVersion, targetVersion, migrations, }) {
3
3
  const path = getNextPathStep({
4
4
  currentVersion,
@@ -6,7 +6,7 @@ export function getMigrationPath({ currentVersion, targetVersion, migrations, })
6
6
  migrations,
7
7
  });
8
8
  if (!path) {
9
- throw new MigrationPathError(`No migration path found from ${currentVersion} to ${targetVersion}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);
9
+ throw new VerdantError(VerdantError.Code.MigrationPathNotFound, undefined, `No migration path found from ${currentVersion} to ${targetVersion}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);
10
10
  }
11
11
  return path;
12
12
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,gBAAgB,CAAC,EAChC,cAAc,EACd,aAAa,EACb,UAAU,GAKV;IACA,MAAM,IAAI,GAAG,eAAe,CAAC;QAC5B,cAAc;QACd,aAAa;QACb,UAAU;KACV,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,YAAY,CACrB,YAAY,CAAC,IAAI,CAAC,qBAAqB,EACvC,SAAS,EACT,gCAAgC,cAAc,OAAO,aAAa,wHAAwH,CAC1L,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,EACxB,cAAc,EACd,aAAa,EACb,UAAU,GAKV;IACA,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,KAAK,cAAc,CAAC;SACrD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5D,0DAA0D;IAC1D,mEAAmE;IACnE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;QAC/B,6DAA6D;QAC7D,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACb,CAAC;QACD,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,6DAA6D;QAC7D,uBAAuB;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC;YAChC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;YACtC,aAAa;YACb,UAAU;SACV,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,uDAAuD;IACxD,CAAC;IAED,yEAAyE;IACzE,iEAAiE;IACjE,wBAAwB;IACxB,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/paths.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Context } from '../../../../context/context.js';
2
+ /** During migration, only a partial context is available */
3
+ export type OpenDocumentDbContext = Omit<Context, 'queries' | 'files'>;
4
+ export type MigrationDbRef = {
5
+ current: IDBDatabase;
6
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { CollectionFilter, StorageSchema } from '@verdant-web/common';
2
+ export declare function getRange(schema: StorageSchema, collection: string, index?: CollectionFilter): IDBKeyRange | undefined;
@@ -0,0 +1,66 @@
1
+ import { assert, createCompoundIndexValue, createLowerBoundIndexValue, createUpperBoundIndexValue, isMatchIndexFilter, isRangeIndexFilter, isSortIndexFilter, isStartsWithIndexFilter, sanitizeIndexValue, } from '@verdant-web/common';
2
+ const matchIndexToIdbKeyRange = (filter) => {
3
+ return IDBKeyRange.only(sanitizeIndexValue(filter.equals));
4
+ };
5
+ const sortIndexToIdbKeyRange = (filter) => {
6
+ return undefined;
7
+ };
8
+ const rangeIndexToIdbKeyRange = (filter) => {
9
+ const lower = filter.gte || filter.gt;
10
+ const upper = filter.lte || filter.lt;
11
+ if (lower === upper) {
12
+ return IDBKeyRange.only(sanitizeIndexValue(lower));
13
+ }
14
+ if (!lower) {
15
+ return IDBKeyRange.upperBound(sanitizeIndexValue(upper), !!filter.lt);
16
+ }
17
+ else if (!upper) {
18
+ return IDBKeyRange.lowerBound(sanitizeIndexValue(lower), !!filter.gt);
19
+ }
20
+ else {
21
+ return IDBKeyRange.bound(sanitizeIndexValue(lower), sanitizeIndexValue(upper), !!filter.gt, !!filter.lt);
22
+ }
23
+ };
24
+ const compoundIndexToIdbKeyRange = (
25
+ // FIXME:
26
+ schema, collection, filter) => {
27
+ // validate the usage of the compound index:
28
+ // - all match fields must be contiguous at the start of the compound order
29
+ const indexDefinition = schema.collections[collection].compounds[filter.where];
30
+ assert(indexDefinition, `Index ${filter.where} does not exist on collection ${collection}`);
31
+ const matchedKeys = Object.keys(filter.match).sort((a, b) => indexDefinition.of.indexOf(a) - indexDefinition.of.indexOf(b));
32
+ for (const key of matchedKeys) {
33
+ if (indexDefinition.of.indexOf(key) !== matchedKeys.indexOf(key)) {
34
+ throw new Error(`Compound index ${filter.where} does not have ${key} at the start of its order`);
35
+ }
36
+ }
37
+ const matchedValues = matchedKeys.map((key) => filter.match[key]);
38
+ // special case: all match fields are specified - we don't need a range
39
+ // query, just a single key query
40
+ if (matchedKeys.length === indexDefinition.of.length) {
41
+ return IDBKeyRange.only(createCompoundIndexValue(...matchedValues));
42
+ }
43
+ // create our bounds for the matched values
44
+ const lower = createLowerBoundIndexValue(...matchedValues);
45
+ const upper = createUpperBoundIndexValue(...matchedValues);
46
+ return IDBKeyRange.bound(lower, upper);
47
+ };
48
+ function startsWithIndexToIdbKeyRange(filter) {
49
+ const lower = filter.startsWith;
50
+ const upper = filter.startsWith + '\uffff';
51
+ return IDBKeyRange.bound(lower, upper);
52
+ }
53
+ export function getRange(schema, collection, index) {
54
+ if (!index)
55
+ return undefined;
56
+ if (isRangeIndexFilter(index))
57
+ return rangeIndexToIdbKeyRange(index);
58
+ if (isMatchIndexFilter(index))
59
+ return matchIndexToIdbKeyRange(index);
60
+ if (isSortIndexFilter(index))
61
+ return sortIndexToIdbKeyRange(index);
62
+ if (isStartsWithIndexFilter(index))
63
+ return startsWithIndexToIdbKeyRange(index);
64
+ return compoundIndexToIdbKeyRange(schema, collection, index);
65
+ }
66
+ //# sourceMappingURL=ranges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranges.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/queries/ranges.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EAGN,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EAGvB,kBAAkB,GAIlB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,uBAAuB,GAAG,CAAC,MAAkC,EAAE,EAAE;IACtE,OAAO,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAuB,EAAE,EAAE;IAC1D,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,MAAkC,EAAE,EAAE;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;IACtC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACP,OAAO,WAAW,CAAC,KAAK,CACvB,kBAAkB,CAAC,KAAK,CAAC,EACzB,kBAAkB,CAAC,KAAK,CAAC,EACzB,CAAC,CAAC,MAAM,CAAC,EAAE,EACX,CAAC,CAAC,MAAM,CAAC,EAAE,CACX,CAAC;IACH,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG;AAClC,SAAS;AACT,MAAW,EACX,UAAkB,EAClB,MAAqC,EACpC,EAAE;IACH,4CAA4C;IAC5C,2EAA2E;IAC3E,MAAM,eAAe,GACpB,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CACL,eAAe,EACf,SAAS,MAAM,CAAC,KAAK,iCAAiC,UAAU,EAAE,CAClE,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CACd,kBAAkB,MAAM,CAAC,KAAK,kBAAkB,GAAG,4BAA4B,CAC/E,CAAC;QACH,CAAC;IACF,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CACpC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAgC,CAAoB,CAC1E,CAAC;IAEF,uEAAuE;IACvE,iCAAiC;IACjC,IAAI,WAAW,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QACtD,OAAO,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,2CAA2C;IAC3C,MAAM,KAAK,GAAG,0BAA0B,CAAC,GAAG,aAAa,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,0BAA0B,CAAC,GAAG,aAAa,CAAC,CAAC;IAC3D,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,SAAS,4BAA4B,CAAC,MAA6B;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC3C,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,QAAQ,CACvB,MAAqB,EACrB,UAAkB,EAClB,KAAwB;IAExB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,kBAAkB,CAAC,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,kBAAkB,CAAC,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,uBAAuB,CAAC,KAAK,CAAC;QACjC,OAAO,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,0BAA0B,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC"}
@@ -6,6 +6,12 @@ export declare function getSizeOfObjectStore(database: IDBDatabase, storeName: s
6
6
  count: number;
7
7
  size: number;
8
8
  }>;
9
+ export declare function getSizesOfAllObjectStores(database: IDBDatabase): Promise<{
10
+ [storeName: string]: {
11
+ count: number;
12
+ size: number;
13
+ };
14
+ }>;
9
15
  export declare function getAllFromObjectStores(db: IDBDatabase, stores: string[]): Promise<any[][]>;
10
16
  export declare function closeDatabase(db: IDBDatabase): Promise<void>;
11
17
  export declare function deleteAllDatabases(namespace: string, indexedDB?: IDBFactory): Promise<void>;
@@ -17,3 +23,8 @@ export declare function createAbortableTransaction(db: IDBDatabase, storeNames:
17
23
  * its structure.
18
24
  */
19
25
  export declare function emptyDatabase(db: IDBDatabase): Promise<void>;
26
+ export declare function copyDatabase(from: IDBDatabase, to: IDBDatabase): Promise<void>;
27
+ export declare function openDatabase(name: string, expectedVersion: number, indexedDB?: IDBFactory): Promise<IDBDatabase>;
28
+ export declare function getMetadataDbName(namespace: string): string;
29
+ export declare function getDocumentDbName(namespace: string): string;
30
+ export declare function getNamespaceFromDatabaseInfo(info: IDBDatabaseInfo): string | undefined;
@@ -85,6 +85,17 @@ export function getSizeOfObjectStore(database, storeName) {
85
85
  };
86
86
  });
87
87
  }
88
+ export async function getSizesOfAllObjectStores(database) {
89
+ const storeNames = Array.from(database.objectStoreNames);
90
+ const promises = storeNames.map(async (storeName) => {
91
+ const result = await getSizeOfObjectStore(database, storeName);
92
+ return { [storeName]: result };
93
+ });
94
+ const results = await Promise.all(promises);
95
+ return results.reduce((acc, result_1) => {
96
+ return Object.assign(Object.assign({}, acc), result_1);
97
+ }, {});
98
+ }
88
99
  export function getAllFromObjectStores(db, stores) {
89
100
  const transaction = db.transaction(stores, 'readonly');
90
101
  const promises = stores.map((store) => {
@@ -158,4 +169,50 @@ export function emptyDatabase(db) {
158
169
  tx.onerror = () => reject(tx.error);
159
170
  });
160
171
  }
161
- //# sourceMappingURL=idb.js.map
172
+ export async function copyDatabase(from, to) {
173
+ await emptyDatabase(to);
174
+ const records = await getAllFromObjectStores(from, Array.from(from.objectStoreNames));
175
+ const writeTx = to.transaction(Array.from(to.objectStoreNames), 'readwrite');
176
+ for (let i = 0; i < records.length; i++) {
177
+ const store = writeTx.objectStore(from.objectStoreNames[i]);
178
+ for (const record of records[i]) {
179
+ store.add(record);
180
+ }
181
+ }
182
+ return new Promise((resolve, reject) => {
183
+ writeTx.oncomplete = () => resolve();
184
+ writeTx.onerror = () => reject(writeTx.error);
185
+ });
186
+ }
187
+ export function openDatabase(name, expectedVersion, indexedDB = window.indexedDB) {
188
+ return new Promise((resolve, reject) => {
189
+ const req = indexedDB.open(name, expectedVersion);
190
+ req.onsuccess = () => {
191
+ resolve(req.result);
192
+ };
193
+ req.onerror = () => {
194
+ reject(req.error);
195
+ };
196
+ req.onblocked = () => {
197
+ reject(new Error('Database blocked'));
198
+ };
199
+ req.onupgradeneeded = (event) => {
200
+ const db = req.result;
201
+ if (db.version !== expectedVersion) {
202
+ db.close();
203
+ reject(new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${expectedVersion}, got ${db.version}`));
204
+ }
205
+ };
206
+ });
207
+ }
208
+ export function getMetadataDbName(namespace) {
209
+ return [namespace, 'meta'].join('_');
210
+ }
211
+ export function getDocumentDbName(namespace) {
212
+ return [namespace, 'collections'].join('_');
213
+ }
214
+ export function getNamespaceFromDatabaseInfo(info) {
215
+ var _a;
216
+ return (_a = info.name) === null || _a === void 0 ? void 0 : _a.split('_')[0];
217
+ }
218
+ //# sourceMappingURL=util.js.map