@instantdb/core 0.22.56-experimental.persisted-object-2.19489861867.1 → 0.22.56-experimental.persisted-object-2.19512376560.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/src/Reactor.test.js +68 -0
- package/__tests__/src/utils/PersistedObject.test.ts +1 -3
- package/dist/commonjs/IndexedDBStorage.d.ts.map +1 -1
- package/dist/commonjs/IndexedDBStorage.js +10 -10
- package/dist/commonjs/IndexedDBStorage.js.map +1 -1
- package/dist/commonjs/Reactor.d.ts +0 -1
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +43 -33
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/SyncTable.d.ts.map +1 -1
- package/dist/commonjs/SyncTable.js +0 -1
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/utils/PersistedObject.d.ts +1 -0
- package/dist/commonjs/utils/PersistedObject.d.ts.map +1 -1
- package/dist/commonjs/utils/PersistedObject.js +18 -4
- package/dist/commonjs/utils/PersistedObject.js.map +1 -1
- package/dist/esm/IndexedDBStorage.d.ts.map +1 -1
- package/dist/esm/IndexedDBStorage.js +10 -10
- package/dist/esm/IndexedDBStorage.js.map +1 -1
- package/dist/esm/Reactor.d.ts +0 -1
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +43 -33
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/SyncTable.d.ts.map +1 -1
- package/dist/esm/SyncTable.js +0 -1
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/utils/PersistedObject.d.ts +1 -0
- package/dist/esm/utils/PersistedObject.d.ts.map +1 -1
- package/dist/esm/utils/PersistedObject.js +18 -4
- package/dist/esm/utils/PersistedObject.js.map +1 -1
- package/dist/standalone/index.js +426 -395
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/IndexedDBStorage.ts +12 -10
- package/src/Reactor.js +46 -36
- package/src/SyncTable.ts +0 -1
- package/src/utils/PersistedObject.ts +19 -5
|
@@ -403,3 +403,71 @@ test("we don't cleanup mutations we're still waiting on", async () => {
|
|
|
403
403
|
|
|
404
404
|
expect(remainingKeys).toStrictEqual([ev2]);
|
|
405
405
|
});
|
|
406
|
+
|
|
407
|
+
test('getLocalId always returns the same id', async () => {
|
|
408
|
+
const appId = uuid();
|
|
409
|
+
|
|
410
|
+
const idbs = new Map();
|
|
411
|
+
|
|
412
|
+
// Class that reuses the same underlying storage for indexeddb.
|
|
413
|
+
// This will make fake-indexeddb act more like the browser, otherwise
|
|
414
|
+
// we get a fresh in-memory store each time we call indexedDB.open
|
|
415
|
+
class IDBStorage {
|
|
416
|
+
constructor(appId, dbName) {
|
|
417
|
+
if (idbs.get(dbName)) {
|
|
418
|
+
return idbs.get(dbName);
|
|
419
|
+
}
|
|
420
|
+
const idb = new IndexedDBStorage(appId, dbName);
|
|
421
|
+
idbs.set(dbName, idb);
|
|
422
|
+
return idb;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
const reactor = new Reactor({
|
|
427
|
+
appId,
|
|
428
|
+
pendingTxCleanupTimeout: 1,
|
|
429
|
+
pendingMutationCleanupThreshold: 0,
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
reactor._initStorage(IDBStorage);
|
|
433
|
+
|
|
434
|
+
const promises = [];
|
|
435
|
+
|
|
436
|
+
const ids = new Set();
|
|
437
|
+
|
|
438
|
+
for (const _ of [...new Array(1000)]) {
|
|
439
|
+
const p = reactor.getLocalId('id').then((id) => ids.add(id));
|
|
440
|
+
promises.push(p);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
await Promise.all(promises);
|
|
444
|
+
|
|
445
|
+
expect(ids.size).toBe(1);
|
|
446
|
+
await reactor.querySubs.flush();
|
|
447
|
+
|
|
448
|
+
await reactor.kv.flush();
|
|
449
|
+
|
|
450
|
+
const reactor2 = new Reactor({
|
|
451
|
+
appId,
|
|
452
|
+
pendingTxCleanupTimeout: 1,
|
|
453
|
+
pendingMutationCleanupThreshold: 0,
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
async function idbSnapshot(idb, { includeMeta }) {
|
|
457
|
+
const keys = await idb.getAllKeys();
|
|
458
|
+
const res = {};
|
|
459
|
+
for (const key of keys) {
|
|
460
|
+
if (key === '__meta' && !includeMeta) {
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
res[key] = await idb.getItem(key);
|
|
464
|
+
}
|
|
465
|
+
return res;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
reactor2._initStorage(IDBStorage);
|
|
469
|
+
|
|
470
|
+
const id = await reactor2.getLocalId('id');
|
|
471
|
+
|
|
472
|
+
expect(id).toStrictEqual([...ids][0]);
|
|
473
|
+
});
|
|
@@ -323,7 +323,7 @@ test('PersistedObject garbage collects when we exceed max age', async () => {
|
|
|
323
323
|
(_k, x) => x,
|
|
324
324
|
(_k, x) => x,
|
|
325
325
|
(v) => v,
|
|
326
|
-
|
|
326
|
+
devNullLogger,
|
|
327
327
|
{
|
|
328
328
|
saveThrottleMs: 0,
|
|
329
329
|
gc: {
|
|
@@ -344,9 +344,7 @@ test('PersistedObject garbage collects when we exceed max age', async () => {
|
|
|
344
344
|
PO.updateInPlace((prev) => {
|
|
345
345
|
prev[k] = i as number;
|
|
346
346
|
});
|
|
347
|
-
console.time('Flush');
|
|
348
347
|
await PO.flush();
|
|
349
|
-
console.timeEnd('Flush');
|
|
350
348
|
}
|
|
351
349
|
|
|
352
350
|
// @ts-expect-error: allow access to private fields for test
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDBStorage.d.ts","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,KAAK,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,UAAU,CAAC;AAgIjD,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,OAAO;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAErB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;IAO/C,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAkB7B,aAAa,CAAC,KAAK,EAAE,qBAAqB;
|
|
1
|
+
{"version":3,"file":"IndexedDBStorage.d.ts","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,KAAK,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,UAAU,CAAC;AAgIjD,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,OAAO;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAErB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;IAO/C,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAkB7B,aAAa,CAAC,KAAK,EAAE,qBAAqB;IAcpC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmBhC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5D,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CActC"}
|
|
@@ -73,7 +73,7 @@ function upgradeQuerySubs5To6(hash, value, querySubStore) {
|
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function moveKvEntry5To6(k, value, kvStore) {
|
|
77
77
|
return __awaiter(this, void 0, void 0, function* () {
|
|
78
78
|
const request = kvStore.put(value, k);
|
|
79
79
|
return new Promise((resolve, reject) => {
|
|
@@ -82,17 +82,17 @@ function moveKv5To6(k, value, kvStore) {
|
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
-
function upgrade5To6(appId,
|
|
85
|
+
function upgrade5To6(appId, v6Tx) {
|
|
86
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
-
const
|
|
88
|
-
if (!
|
|
87
|
+
const v5db = yield existingDb(`instant_${appId}_5`);
|
|
88
|
+
if (!v5db) {
|
|
89
89
|
return;
|
|
90
90
|
}
|
|
91
|
-
const kvStore =
|
|
92
|
-
const querySubStore =
|
|
91
|
+
const kvStore = v6Tx.objectStore('kv');
|
|
92
|
+
const querySubStore = v6Tx.objectStore('querySubs');
|
|
93
93
|
return new Promise((resolve, reject) => {
|
|
94
|
-
const
|
|
95
|
-
const objectStore =
|
|
94
|
+
const v5Tx = v5db.transaction(['kv'], 'readwrite');
|
|
95
|
+
const objectStore = v5Tx.objectStore('kv');
|
|
96
96
|
const cursorReq = objectStore.openCursor();
|
|
97
97
|
cursorReq.onerror = (event) => {
|
|
98
98
|
reject(event);
|
|
@@ -110,7 +110,7 @@ function upgrade5To6(appId, v5Tx) {
|
|
|
110
110
|
break;
|
|
111
111
|
}
|
|
112
112
|
default: {
|
|
113
|
-
const p =
|
|
113
|
+
const p = moveKvEntry5To6(key, value, kvStore);
|
|
114
114
|
promises.push(p);
|
|
115
115
|
break;
|
|
116
116
|
}
|
|
@@ -155,7 +155,7 @@ class IndexedDBStorage {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
const tx = target.transaction;
|
|
158
|
-
upgrade5To6(this._appId, tx);
|
|
158
|
+
upgrade5To6(this._appId, tx).catch(logErrorCb('Error upgrading store from version 5 to 6.'));
|
|
159
159
|
}
|
|
160
160
|
getItem(k) {
|
|
161
161
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDBStorage.js","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Storage } from './utils/PersistedObject.ts';\n\ntype StoreName = 'kv' | 'querySubs' | 'syncSubs';\n\n// Any time these are updates to the data format or new stores are added,\n// the version must be updated.\n// onupgradeneeded will be called, which is where you can\n// move objects from one idb to another.\n// We create a new IDB for each version change instead of\n// using their built-in versioning because they have no ability\n// to roll back and if multiple tabs are active, then you'll just\n// be stuck.\nconst version = 6;\nconst storeNames = ['kv', 'querySubs', 'syncSubs'];\n\nfunction logErrorCb(source: string) {\n return function logError(event) {\n console.error('Error in IndexedDB event', { source, event });\n };\n}\n\nasync function existingDb(name: string): Promise<IDBDatabase | null> {\n return new Promise((resolve) => {\n const request = indexedDB.open(name);\n\n request.onerror = (_event) => {\n resolve(null);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => {\n const target = event.target as IDBOpenDBRequest;\n target.transaction.abort();\n resolve(null);\n };\n });\n}\n\nasync function upgradeQuerySubs5To6(\n hash: string,\n value: any,\n querySubStore: IDBObjectStore,\n): Promise<void> {\n const subs =\n // Backwards compatibility for older versions where we JSON.stringified before storing\n typeof value === 'string' ? JSON.parse(value) : value;\n if (!subs) {\n return;\n }\n const putReqs: Set<IDBRequest<IDBValidKey>> = new Set();\n return new Promise((resolve, reject) => {\n for (const [hash, value] of Object.entries(subs)) {\n const putReq = querySubStore.put(value, hash);\n putReqs.add(putReq);\n }\n for (const r of putReqs) {\n r.onsuccess = () => {\n putReqs.delete(r);\n if (putReqs.size === 0) {\n resolve();\n }\n };\n r.onerror = (event) => {\n logErrorCb(`Move ${hash} to querySubs store failed`);\n reject(event);\n };\n }\n });\n}\n\nasync function moveKv5To6(\n k: string,\n value: any,\n kvStore: IDBObjectStore,\n): Promise<void> {\n const request = kvStore.put(value, k);\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve();\n request.onerror = (event) => reject(event);\n });\n}\n\nasync function upgrade5To6(appId: string, v5Tx: IDBTransaction): Promise<void> {\n const v4db = await existingDb(`instant_${appId}_4`);\n if (!v4db) {\n return;\n }\n\n const kvStore = v5Tx.objectStore('kv');\n const querySubStore = v5Tx.objectStore('querySubs');\n\n return new Promise((resolve, reject) => {\n const v4Tx = v4db.transaction(['kv'], 'readwrite');\n const objectStore = v4Tx.objectStore('kv');\n const cursorReq = objectStore.openCursor();\n cursorReq.onerror = (event) => {\n reject(event);\n };\n const promises = [];\n cursorReq.onsuccess = () => {\n const cursor = cursorReq.result;\n if (cursor) {\n const key = cursor.key;\n const value = cursor.value;\n switch (key) {\n case 'querySubs': {\n const p = upgradeQuerySubs5To6(key, value, querySubStore);\n promises.push(p);\n break;\n }\n default: {\n const p = moveKv5To6(key as string, value, kvStore);\n promises.push(p);\n break;\n }\n }\n } else {\n Promise.all(promises)\n .then(() => resolve())\n .catch(reject);\n }\n };\n });\n}\n\nexport default class IndexedDBStorage implements Storage {\n dbName: string;\n _storeName: string;\n _appId: string;\n _prefix: string;\n _dbPromise: Promise<IDBDatabase>;\n\n constructor(appId: string, storeName: StoreName) {\n this.dbName = `instant_${appId}_${version}`;\n this._storeName = storeName;\n this._appId = appId;\n this._dbPromise = this._init();\n }\n\n _init(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => this._upgradeStore(event);\n });\n }\n\n _upgradeStore(event: IDBVersionChangeEvent) {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n for (const storeName of storeNames) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n }\n const tx = target.transaction;\n upgrade5To6(this._appId, tx);\n }\n\n async getItem(k: string): Promise<any> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readonly');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.get(k);\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n }\n\n async setItem(k: string, v: any): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.put(v, k);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n // Performs all writes in a transaction so that all succeed or none succeed.\n async multiSet(keyValuePairs: Array<[string, any]>): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const requests: Set<IDBRequest<IDBValidKey>> = new Set();\n for (const [k, v] of keyValuePairs) {\n const request = objectStore.put(v, k);\n requests.add(request);\n }\n\n for (const request of requests) {\n request.onerror = (event) => {\n transaction.abort();\n reject(event);\n };\n request.onsuccess = (_event) => {\n requests.delete(request);\n // Last request to finish resolves the transaction\n if (requests.size === 0) {\n resolve();\n }\n };\n }\n });\n }\n\n async removeItem(k: string): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.delete(k);\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n async getAllKeys(): Promise<string[]> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.getAllKeys();\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n resolve(request.result.filter((x) => typeof x === 'string'));\n };\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IndexedDBStorage.js","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Storage } from './utils/PersistedObject.ts';\n\ntype StoreName = 'kv' | 'querySubs' | 'syncSubs';\n\n// Any time these are updates to the data format or new stores are added,\n// the version must be updated.\n// onupgradeneeded will be called, which is where you can\n// move objects from one idb to another.\n// We create a new IDB for each version change instead of\n// using their built-in versioning because they have no ability\n// to roll back and if multiple tabs are active, then you'll just\n// be stuck.\nconst version = 6;\nconst storeNames = ['kv', 'querySubs', 'syncSubs'];\n\nfunction logErrorCb(source: string) {\n return function logError(event) {\n console.error('Error in IndexedDB event', { source, event });\n };\n}\n\nasync function existingDb(name: string): Promise<IDBDatabase | null> {\n return new Promise((resolve) => {\n const request = indexedDB.open(name);\n\n request.onerror = (_event) => {\n resolve(null);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => {\n const target = event.target as IDBOpenDBRequest;\n target.transaction.abort();\n resolve(null);\n };\n });\n}\n\nasync function upgradeQuerySubs5To6(\n hash: string,\n value: any,\n querySubStore: IDBObjectStore,\n): Promise<void> {\n const subs =\n // Backwards compatibility for older versions where we JSON.stringified before storing\n typeof value === 'string' ? JSON.parse(value) : value;\n if (!subs) {\n return;\n }\n const putReqs: Set<IDBRequest<IDBValidKey>> = new Set();\n return new Promise((resolve, reject) => {\n for (const [hash, value] of Object.entries(subs)) {\n const putReq = querySubStore.put(value, hash);\n putReqs.add(putReq);\n }\n for (const r of putReqs) {\n r.onsuccess = () => {\n putReqs.delete(r);\n if (putReqs.size === 0) {\n resolve();\n }\n };\n r.onerror = (event) => {\n logErrorCb(`Move ${hash} to querySubs store failed`);\n reject(event);\n };\n }\n });\n}\n\nasync function moveKvEntry5To6(\n k: string,\n value: any,\n kvStore: IDBObjectStore,\n): Promise<void> {\n const request = kvStore.put(value, k);\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve();\n request.onerror = (event) => reject(event);\n });\n}\n\nasync function upgrade5To6(appId: string, v6Tx: IDBTransaction): Promise<void> {\n const v5db = await existingDb(`instant_${appId}_5`);\n if (!v5db) {\n return;\n }\n\n const kvStore = v6Tx.objectStore('kv');\n const querySubStore = v6Tx.objectStore('querySubs');\n\n return new Promise((resolve, reject) => {\n const v5Tx = v5db.transaction(['kv'], 'readwrite');\n const objectStore = v5Tx.objectStore('kv');\n const cursorReq = objectStore.openCursor();\n cursorReq.onerror = (event) => {\n reject(event);\n };\n const promises = [];\n cursorReq.onsuccess = () => {\n const cursor = cursorReq.result;\n if (cursor) {\n const key = cursor.key;\n const value = cursor.value;\n switch (key) {\n case 'querySubs': {\n const p = upgradeQuerySubs5To6(key, value, querySubStore);\n promises.push(p);\n break;\n }\n default: {\n const p = moveKvEntry5To6(key as string, value, kvStore);\n promises.push(p);\n break;\n }\n }\n } else {\n Promise.all(promises)\n .then(() => resolve())\n .catch(reject);\n }\n };\n });\n}\n\nexport default class IndexedDBStorage implements Storage {\n dbName: string;\n _storeName: string;\n _appId: string;\n _prefix: string;\n _dbPromise: Promise<IDBDatabase>;\n\n constructor(appId: string, storeName: StoreName) {\n this.dbName = `instant_${appId}_${version}`;\n this._storeName = storeName;\n this._appId = appId;\n this._dbPromise = this._init();\n }\n\n _init(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => this._upgradeStore(event);\n });\n }\n\n _upgradeStore(event: IDBVersionChangeEvent) {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n for (const storeName of storeNames) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n }\n const tx = target.transaction;\n upgrade5To6(this._appId, tx).catch(\n logErrorCb('Error upgrading store from version 5 to 6.'),\n );\n }\n\n async getItem(k: string): Promise<any> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readonly');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.get(k);\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n }\n\n async setItem(k: string, v: any): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.put(v, k);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n // Performs all writes in a transaction so that all succeed or none succeed.\n async multiSet(keyValuePairs: Array<[string, any]>): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const requests: Set<IDBRequest<IDBValidKey>> = new Set();\n for (const [k, v] of keyValuePairs) {\n const request = objectStore.put(v, k);\n requests.add(request);\n }\n\n for (const request of requests) {\n request.onerror = (event) => {\n transaction.abort();\n reject(event);\n };\n request.onsuccess = (_event) => {\n requests.delete(request);\n // Last request to finish resolves the transaction\n if (requests.size === 0) {\n resolve();\n }\n };\n }\n });\n }\n\n async removeItem(k: string): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.delete(k);\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n async getAllKeys(): Promise<string[]> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.getAllKeys();\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n resolve(request.result.filter((x) => typeof x === 'string'));\n };\n });\n }\n}\n"]}
|
|
@@ -96,7 +96,6 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
96
96
|
hint?: unknown;
|
|
97
97
|
}): void;
|
|
98
98
|
_setStatus(status: any, err: any): void;
|
|
99
|
-
_onMergeQuerySub: (_k: any, storageSub: any, inMemorySub: any) => any;
|
|
100
99
|
_onMergeKv: (key: any, storageV: any, inMemoryV: any) => any;
|
|
101
100
|
_flushEnqueuedRoomData(roomId: any): void;
|
|
102
101
|
_handleReceive(connId: any, msg: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"AA8KA;;GAEG;AACH,6BAFwD,UAAU,SAArD,OAAQ,eAAe,EAAE,eAAgB;IA8DpD,sJAgHC;IA3KD,WAAM;IACN,mBAAiB;IACjB,qBAAoB;IACpB,eAA2B;IAE3B,8BAA8B;IAC9B,0CAAU;IAEV,8BAA8B;IAC9B,mCAAG;IAEH,wEAAwE;IACxE,UADW,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,GAAG,CAAC;QAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,CAAC,CAAC,CACtD;IACd,gFAAgF;IAChF,eADW,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC,CACzD;IACnB,eAAa;IACb,gBAAc;IACd,wBAAsB;IACtB,2BAAyB;IACzB,YAAO;IACP,qCAAkC;IAClC,yBAA2B;IAC3B,4BAAwB;IACxB,yBAAyB;IACzB,YADW,UAAU,CACV;IACX,4BAA4B;IAC5B,gBADW,aAAa,CACF;IAEtB,qCAAqC;IACrC,cADW,sBAAsB,CACpB;IACb,6BAA6B;IAC7B,OADW,OAAO,GAAG,IAAI,CACZ;IACb,qBAAsB;IACtB,mBAAqB;IACrB,yDAAyD;IACzD,wBADW,OAAO,CAAC,IAAI,GAAG;QAAC,KAAK,EAAE;YAAC,OAAO,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC,CACvB;IAE9B,+DAA+D;IAC/D,YADW,IAAI,GAAG,OAAO,sBAAsB,EAAE,SAAS,CACxC;IAElB,yCAAyC;IACzC,mBADU,gBAAgB,GAAG,SAAS,CACpB;IAElB,iEAAiE;IACjE,QADW,MAAM,CAAC,MAAM,EAAE;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAC,CAAC,CACjD;IACZ,sCAAsC;IACtC,oBADW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACV;IACxB,cAAe;IACf,uBAAqB;IACrB,mBAAoB;IACpB;;;;MAA4E;IAC5E,wBAAsB;IACtB,uBAAwB;IACxB,qBAAqB;IACrB,MADW,MAAM,CACZ;IACL,8BAAyB;IACzB,sCAAiC;IACjC,oCAAsC;IAYpC,qBAAwD;IAYxD,cAAmE;IAsCnE,sBAeC;IAiHH,sBAKC;IA/ED,gCAOC;IAED;;;;MAMC;IAED,mCAIC;IAED,iCAiDC;IASD;;;;OAIG;IACH,2BAJW,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAI,OAAO,WACxD,MAAM,aACN;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,QA+B5E;IAED,wCAIC;IAED,aAAc,QAAG,EAAE,aAAQ,EAAE,cAAS,SAmBpC;IAEF,0CAgBC;IAED,4CA+OC;IA7NK,gBAAmC;IA+NzC,yBAEC;IAED,sCAMC;IAED;;;;OAIG;IACH,6BAJW,SAAS,GAAG,OAAO,WACnB,MAAM,YACN;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,QAoB3E;IAED,oCAqEC;IAED,oEAKC;IAED,4BAOC;IAKD,oBAAqB,MAAC,SAGpB;IAEF,0CASC;IAED;wBA/eM,CAAH;kCAifF;IAED;;;;;;;;;OASG;IACH,uDAuBC;IAED,2CAwCC;IAED,sDAQC;IAED,8CAMC;IAED,uCAEC;IAED,uCASC;IAaD,kEA8EC;IAED,sDAEC;IAKD,uBAkCC;IAED,0CAA0C;IAC1C,6BA2CC;IAED,6EAOC;IAED,0DAA0D;IAC1D,YAAa,SAAI,UASf;IAEF,qBAAsB,SAAI,UAQxB;IAEF,mBAAoB,SAAI,EAAE,UAAK,UAG7B;IAEF,mCAAmC;IACnC,kBAOC;IAED,wBAKC;IAED,wEAAwE;IACxE,SAAU,WAAM,kBAqBd;IAEF;;;;OAIG;IACH,UAAW,SAJA,GAIO,EAAE,QAHT,GAGc,kBAsBvB;IAEF,iBAIC;IAED;;;;;;OAMG;IACH,iDAqCC;IAKD,4DAA4D;IAC5D,8BA4BC;IAED;;OAEG;IACH,wCAeC;IAED;;;;OAIG;IACH,wCAiBC;IAED,qCAKC;IAED,kDAkBC;IAED,mBAAoB,MAAC,UA+BnB;IAEF,sBAAuB,MAAC,UAmBtB;IAEF,oBAAqB,MAAC,UAWpB;IAEF,+BAsBE;IAEF,oBAAqB,MAAC,UAgCpB;IAEF,qBAqDC;IAED;;;;;;;OAOG;IACH,oCAgBC;IAID,8BAoDC;IAED;;;OAGG;IACH;;;;OA+CC;IAED;eArhDkC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAC;OAuhDlD;IAED,+CAMC;IAED,mCAgBC;IAED,wBAMC;IAED,+CAQC;IAED,oCAUC;IAED,gCAEC;IAED,0CAEC;IAED,wBAIC;IAED,8CAEC;IAED,yCAKC;IAED;;;;MAEC;IAED,gCAGC;IAED;;;OAsBC;IAED,oCAGC;IAED,+CAiBC;IAED,+BAaC;IAED;;+CAMC;IAED;;;wCAYC;IAED,uEAQC;IAED,iDAOC;IAED,8DAoBC;IAED,kCAIC;IAED;;;;;;;OAOG;IACH,oDAJG;QAAuB,UAAU,EAAzB,MAAM;QACS,WAAW,EAA1B,MAAM;KACd,GAAU,MAAM,CAKlB;IAED;;;;OAIG;IACH,6CAHG;QAAuB,IAAI,EAAnB,MAAM;QACU,YAAY,GAA5B,MAAM;KAChB,mCAaA;IAED,oBAGC;IAED;;;;;OAKG;IACH,kDAJG;QAAuB,UAAU,EAAzB,MAAM;QACS,OAAO,EAAtB,MAAM;QAC6B,KAAK,GAAxC,MAAM,GAAG,IAAI,GAAG,SAAS;KACnC,mCAeA;IAKD;;;;OAIG;IACH,iBAJW,MAAM,oBACN,GAAG,GAAG,IAAI,GAAG,SAAS,cA4BhC;IAED,gCAiBC;IAMD;;;;;;;;;;;MAUC;IAGD,oEAsBC;IAED,8CAMC;IAED,2CAGC;IAED,iCAEC;IAED,0DAKC;IAGD,8EAuBC;IAED,uCAIC;IAED,oDAaC;IAED,mDAyBC;IAED,gDAWC;IAKD;;;;;aAeC;IAED,uEAQC;IAED,6DAoBC;IAED,4DAWC;IAKD,oFAWC;IAED,8DAWC;IAKD,+CAaC;IAED,wCAWC;CACF;qBA9yEa,OAAO,gBAAgB,EAAE,MAAM;;4BAE/B,OAAO,iBAAiB,EAAE,aAAa;qCACvC,OAAO,iBAAiB,EAAE,sBAAsB;gCAxB9B,4BAA4B;yBADnC,qBAAqB;0BAoBpB,gBAAgB;yBAxBjB,cAAc;4BACX,iBAAiB;6BAHhB,uBAAuB;kCAClB,4BAA4B"}
|
package/dist/commonjs/Reactor.js
CHANGED
|
@@ -172,6 +172,14 @@ function kvToStorage(key, x) {
|
|
|
172
172
|
return x;
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
+
function onMergeQuerySub(_k, storageSub, inMemorySub) {
|
|
176
|
+
const storageResult = storageSub === null || storageSub === void 0 ? void 0 : storageSub.result;
|
|
177
|
+
const memoryResult = inMemorySub === null || inMemorySub === void 0 ? void 0 : inMemorySub.result;
|
|
178
|
+
if (storageResult && !memoryResult && inMemorySub) {
|
|
179
|
+
inMemorySub.result = storageResult;
|
|
180
|
+
}
|
|
181
|
+
return inMemorySub || storageSub;
|
|
182
|
+
}
|
|
175
183
|
function sortedMutationEntries(entries) {
|
|
176
184
|
return [...entries].sort((a, b) => {
|
|
177
185
|
const [ka, muta] = a;
|
|
@@ -225,15 +233,6 @@ class Reactor {
|
|
|
225
233
|
this._beforeUnloadCbs = [];
|
|
226
234
|
this._dataForQueryCache = {};
|
|
227
235
|
this._inFlightMutationEventIds = new Set();
|
|
228
|
-
this._onMergeQuerySub = (_k, storageSub, inMemorySub) => {
|
|
229
|
-
const storageResult = storageSub === null || storageSub === void 0 ? void 0 : storageSub.result;
|
|
230
|
-
const memoryResult = inMemorySub === null || inMemorySub === void 0 ? void 0 : inMemorySub.result;
|
|
231
|
-
if (storageResult && !memoryResult && inMemorySub) {
|
|
232
|
-
inMemorySub.result = storageResult;
|
|
233
|
-
}
|
|
234
|
-
return inMemorySub || storageSub;
|
|
235
|
-
};
|
|
236
|
-
// XXX: Move out of class
|
|
237
236
|
this._onMergeKv = (key, storageV, inMemoryV) => {
|
|
238
237
|
var _a, _b;
|
|
239
238
|
switch (key) {
|
|
@@ -253,8 +252,7 @@ class Reactor {
|
|
|
253
252
|
return muts;
|
|
254
253
|
}
|
|
255
254
|
default:
|
|
256
|
-
|
|
257
|
-
return storageV || inMemoryV;
|
|
255
|
+
return inMemoryV || storageV;
|
|
258
256
|
}
|
|
259
257
|
};
|
|
260
258
|
// ---------------------------
|
|
@@ -298,8 +296,6 @@ class Reactor {
|
|
|
298
296
|
const txSteps = instaml.transform({
|
|
299
297
|
attrs: this.optimisticAttrs(),
|
|
300
298
|
schema: this.config.schema,
|
|
301
|
-
// XXX: How are we going to do this?
|
|
302
|
-
// XXX: This should only look at currently active subs
|
|
303
299
|
stores: Object.values(this.querySubs.currentValue).map((sub) => { var _a; return (_a = sub === null || sub === void 0 ? void 0 : sub.result) === null || _a === void 0 ? void 0 : _a.store; }),
|
|
304
300
|
useDateObjects: this.config.useDateObjects,
|
|
305
301
|
}, chunks);
|
|
@@ -504,7 +500,7 @@ class Reactor {
|
|
|
504
500
|
.then(() => this.notifyOne(hash));
|
|
505
501
|
}
|
|
506
502
|
_initStorage(Storage) {
|
|
507
|
-
this.querySubs = new PersistedObject_ts_1.PersistedObject(new Storage(this.config.appId, 'querySubs'),
|
|
503
|
+
this.querySubs = new PersistedObject_ts_1.PersistedObject(new Storage(this.config.appId, 'querySubs'), onMergeQuerySub, querySubToStorage, (_key, x) => querySubFromStorage(x, this.config.useDateObjects),
|
|
508
504
|
// objectSize
|
|
509
505
|
(x) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = x.result) === null || _a === void 0 ? void 0 : _a.store) === null || _b === void 0 ? void 0 : _b.triples) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0; }, this._log, {
|
|
510
506
|
preloadEntryCount: 10,
|
|
@@ -638,13 +634,16 @@ class Reactor {
|
|
|
638
634
|
const triples = (0, instaqlResult_js_1.extractTriples)(result);
|
|
639
635
|
const store = s.createStore(this.attrs, triples, enableCardinalityInference, this._linkIndex, this.config.useDateObjects);
|
|
640
636
|
this.querySubs.updateInPlace((prev) => {
|
|
637
|
+
if (!prev[hash]) {
|
|
638
|
+
this._log.error('Missing value in querySubs', { hash, q });
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
641
|
prev[hash].result = {
|
|
642
642
|
store,
|
|
643
643
|
pageInfo,
|
|
644
644
|
aggregate,
|
|
645
645
|
processedTxId: msg['processed-tx-id'],
|
|
646
646
|
};
|
|
647
|
-
return prev;
|
|
648
647
|
});
|
|
649
648
|
this._cleanupPendingMutationsQueries();
|
|
650
649
|
this.notifyOne(hash);
|
|
@@ -695,13 +694,15 @@ class Reactor {
|
|
|
695
694
|
const newStore = this._applyOptimisticUpdates(store, mutations, processedTxId);
|
|
696
695
|
const pageInfo = (_b = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b['page-info'];
|
|
697
696
|
const aggregate = (_d = (_c = result === null || result === void 0 ? void 0 : result[0]) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d['aggregate'];
|
|
698
|
-
return { hash, store: newStore, pageInfo, aggregate };
|
|
697
|
+
return { q, hash, store: newStore, pageInfo, aggregate };
|
|
699
698
|
});
|
|
700
|
-
updates.forEach(({ hash, store, pageInfo, aggregate }) => {
|
|
699
|
+
updates.forEach(({ hash, q, store, pageInfo, aggregate }) => {
|
|
701
700
|
this.querySubs.updateInPlace((prev) => {
|
|
701
|
+
if (!prev[hash]) {
|
|
702
|
+
this._log.error('Missing value in querySubs', { hash, q });
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
702
705
|
prev[hash].result = { store, pageInfo, aggregate, processedTxId };
|
|
703
|
-
// XXX: remove return prev
|
|
704
|
-
return prev;
|
|
705
706
|
});
|
|
706
707
|
});
|
|
707
708
|
this._cleanupPendingMutationsQueries();
|
|
@@ -789,8 +790,7 @@ class Reactor {
|
|
|
789
790
|
}
|
|
790
791
|
_pendingMutations() {
|
|
791
792
|
var _a;
|
|
792
|
-
|
|
793
|
-
return ret;
|
|
793
|
+
return (_a = this.kv.currentValue.pendingMutations) !== null && _a !== void 0 ? _a : new Map();
|
|
794
794
|
}
|
|
795
795
|
_updatePendingMutations(f) {
|
|
796
796
|
this.kv.updateInPlace((prev) => {
|
|
@@ -806,8 +806,7 @@ class Reactor {
|
|
|
806
806
|
* @param {{message: string, type?: string, status?: number, hint?: unknown}} errorMsg
|
|
807
807
|
*/
|
|
808
808
|
_handleMutationError(status, eventId, errorMsg) {
|
|
809
|
-
|
|
810
|
-
const mut = (_a = this.kv.currentValue.pendingMutations) === null || _a === void 0 ? void 0 : _a.get(eventId);
|
|
809
|
+
const mut = this._pendingMutations().get(eventId);
|
|
811
810
|
if (mut && (status !== 'timeout' || !mut['tx-id'])) {
|
|
812
811
|
this._updatePendingMutations((prev) => {
|
|
813
812
|
prev.delete(eventId);
|
|
@@ -1144,15 +1143,17 @@ class Reactor {
|
|
|
1144
1143
|
/** Re-compute all subscriptions */
|
|
1145
1144
|
notifyAll() {
|
|
1146
1145
|
Object.keys(this.queryCbs).forEach((hash) => {
|
|
1147
|
-
this.
|
|
1146
|
+
this.querySubs
|
|
1147
|
+
.waitForKeyToLoad(hash)
|
|
1148
|
+
.then(() => this.notifyOne(hash))
|
|
1149
|
+
.catch(() => this.notifyOne(hash));
|
|
1148
1150
|
});
|
|
1149
1151
|
}
|
|
1150
|
-
// XXX: This will have to be more targeted to just the hashes that have been loaded
|
|
1151
1152
|
loadedNotifyAll() {
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1153
|
+
this.kv
|
|
1154
|
+
.waitForKeyToLoad('pendingMutations')
|
|
1155
|
+
.then(() => this.notifyAll())
|
|
1156
|
+
.catch(() => this.notifyAll());
|
|
1156
1157
|
}
|
|
1157
1158
|
shutdown() {
|
|
1158
1159
|
var _a;
|
|
@@ -1550,10 +1551,19 @@ class Reactor {
|
|
|
1550
1551
|
this._currentUserCached = Object.assign({ isLoading: false }, errorV);
|
|
1551
1552
|
return errorV;
|
|
1552
1553
|
}
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1554
|
+
try {
|
|
1555
|
+
const user = yield this._getCurrentUser();
|
|
1556
|
+
const userV = { user: user, error: undefined };
|
|
1557
|
+
this._currentUserCached = Object.assign({ isLoading: false }, userV);
|
|
1558
|
+
return userV;
|
|
1559
|
+
}
|
|
1560
|
+
catch (e) {
|
|
1561
|
+
return {
|
|
1562
|
+
user: undefined,
|
|
1563
|
+
isLoading: false,
|
|
1564
|
+
error: { message: (e === null || e === void 0 ? void 0 : e.message) || 'Error loading user' },
|
|
1565
|
+
};
|
|
1566
|
+
}
|
|
1557
1567
|
});
|
|
1558
1568
|
}
|
|
1559
1569
|
_hasCurrentUser() {
|