@instantdb/core 1.0.2 → 1.0.3-branch-idb-fix.24363677444.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/utils/PersistedObject.test.ts +32 -0
- package/dist/commonjs/IndexedDBStorage.d.ts +1 -0
- package/dist/commonjs/IndexedDBStorage.d.ts.map +1 -1
- package/dist/commonjs/IndexedDBStorage.js +85 -72
- package/dist/commonjs/IndexedDBStorage.js.map +1 -1
- package/dist/commonjs/Reactor.d.ts +1 -1
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Stream.d.ts +1 -4
- package/dist/commonjs/Stream.d.ts.map +1 -1
- package/dist/commonjs/Stream.js +12 -63
- package/dist/commonjs/Stream.js.map +1 -1
- package/dist/commonjs/index.d.ts +3 -3
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/esm/IndexedDBStorage.d.ts +1 -0
- package/dist/esm/IndexedDBStorage.d.ts.map +1 -1
- package/dist/esm/IndexedDBStorage.js +85 -72
- package/dist/esm/IndexedDBStorage.js.map +1 -1
- package/dist/esm/Reactor.d.ts +1 -1
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Stream.d.ts +1 -4
- package/dist/esm/Stream.d.ts.map +1 -1
- package/dist/esm/Stream.js +12 -63
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/standalone/index.js +939 -972
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/IndexedDBStorage.ts +86 -74
- package/src/Stream.ts +16 -85
- package/src/index.ts +1 -5
|
@@ -391,3 +391,35 @@ test('PersistedObject garbage collects when we exceed max age', async () => {
|
|
|
391
391
|
|
|
392
392
|
expect(snapshot3).toStrictEqual({});
|
|
393
393
|
});
|
|
394
|
+
|
|
395
|
+
test('IndexedDBStorage recovers when the database connection closes', async () => {
|
|
396
|
+
const idb = new IndexedDBStorage(randomUUID(), 'kv');
|
|
397
|
+
|
|
398
|
+
await idb.setItem('key1', 'value1');
|
|
399
|
+
expect(await idb.getItem('key1')).toBe('value1');
|
|
400
|
+
|
|
401
|
+
// Simulate the browser closing the connection unexpectedly.
|
|
402
|
+
// Remove the onclose handler so recovery relies entirely on _withRetry
|
|
403
|
+
// catching the InvalidStateError (the same codepath as the original bug).
|
|
404
|
+
const db = await idb._dbPromise;
|
|
405
|
+
db.onclose = null;
|
|
406
|
+
db.close();
|
|
407
|
+
|
|
408
|
+
// All operations should recover transparently
|
|
409
|
+
await idb.setItem('key2', 'value2');
|
|
410
|
+
expect(await idb.getItem('key1')).toBe('value1');
|
|
411
|
+
expect(await idb.getItem('key2')).toBe('value2');
|
|
412
|
+
|
|
413
|
+
await idb.multiSet([
|
|
414
|
+
['key3', 'value3'],
|
|
415
|
+
['key4', 'value4'],
|
|
416
|
+
]);
|
|
417
|
+
expect(await idb.getItem('key3')).toBe('value3');
|
|
418
|
+
expect(await idb.getItem('key4')).toBe('value4');
|
|
419
|
+
|
|
420
|
+
const keys = await idb.getAllKeys();
|
|
421
|
+
expect(keys.sort()).toStrictEqual(['key1', 'key2', 'key3', 'key4']);
|
|
422
|
+
|
|
423
|
+
await idb.removeItem('key4');
|
|
424
|
+
expect(await idb.getItem('key4')).toBe(null);
|
|
425
|
+
});
|
|
@@ -8,6 +8,7 @@ export default class IndexedDBStorage extends StoreInterface {
|
|
|
8
8
|
constructor(appId: string, storeName: StoreInterfaceStoreName);
|
|
9
9
|
_init(): Promise<IDBDatabase>;
|
|
10
10
|
_upgradeStore(event: IDBVersionChangeEvent): void;
|
|
11
|
+
_withRetry<T>(fn: (db: IDBDatabase) => Promise<T>): Promise<T>;
|
|
11
12
|
getItem(k: string): Promise<any>;
|
|
12
13
|
setItem(k: string, v: any): Promise<void>;
|
|
13
14
|
multiSet(keyValuePairs: Array<[string, any]>): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDBStorage.d.ts","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EACd,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAmLpC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,uBAAuB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAErB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB;IAQ7D,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"IndexedDBStorage.d.ts","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EACd,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAmLpC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,uBAAuB,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAErB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB;IAQ7D,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IA4C7B,aAAa,CAAC,KAAK,EAAE,qBAAqB;IAcpC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAc9D,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAoBhC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAczC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5D,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAetC"}
|
|
@@ -173,6 +173,15 @@ class IndexedDBStorage extends PersistedObject_ts_1.StoreInterface {
|
|
|
173
173
|
request.onsuccess = (event) => {
|
|
174
174
|
const target = event.target;
|
|
175
175
|
const db = target.result;
|
|
176
|
+
// Browsers can close IndexedDB connections unexpectedly
|
|
177
|
+
// (e.g. backgrounded tabs, memory pressure, version changes from
|
|
178
|
+
// other tabs). Re-init so the next operation gets a fresh connection.
|
|
179
|
+
db.onclose = () => {
|
|
180
|
+
this._dbPromise = this._init();
|
|
181
|
+
};
|
|
182
|
+
db.onversionchange = () => {
|
|
183
|
+
db.close();
|
|
184
|
+
};
|
|
176
185
|
if (!requiresUpgrade) {
|
|
177
186
|
const p = upgradePromises.get(this.dbName);
|
|
178
187
|
if (!p) {
|
|
@@ -205,91 +214,95 @@ class IndexedDBStorage extends PersistedObject_ts_1.StoreInterface {
|
|
|
205
214
|
}
|
|
206
215
|
}
|
|
207
216
|
}
|
|
217
|
+
// Browsers can close IndexedDB connections unexpectedly (backgrounded tabs,
|
|
218
|
+
// memory pressure, cross-tab version changes, etc.), causing
|
|
219
|
+
// `db.transaction()` to throw InvalidStateError. This helper catches that
|
|
220
|
+
// error and retries once with a fresh connection.
|
|
221
|
+
async _withRetry(fn) {
|
|
222
|
+
try {
|
|
223
|
+
const db = await this._dbPromise;
|
|
224
|
+
return await fn(db);
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
if (e instanceof DOMException && e.name === 'InvalidStateError') {
|
|
228
|
+
this._dbPromise = this._init();
|
|
229
|
+
const db = await this._dbPromise;
|
|
230
|
+
return await fn(db);
|
|
231
|
+
}
|
|
232
|
+
throw e;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
208
235
|
async getItem(k) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
236
|
+
return this._withRetry((db) => {
|
|
237
|
+
return new Promise((resolve, reject) => {
|
|
238
|
+
const transaction = db.transaction([this._storeName], 'readonly');
|
|
239
|
+
const objectStore = transaction.objectStore(this._storeName);
|
|
240
|
+
const request = objectStore.get(k);
|
|
241
|
+
request.onerror = () => {
|
|
242
|
+
reject(request.error);
|
|
243
|
+
};
|
|
244
|
+
request.onsuccess = () => {
|
|
245
|
+
if (request.result) {
|
|
246
|
+
resolve(request.result);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
resolve(null);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
});
|
|
225
253
|
});
|
|
226
254
|
}
|
|
227
255
|
async setItem(k, v) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
reject(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
resolve();
|
|
238
|
-
};
|
|
256
|
+
return this._withRetry((db) => {
|
|
257
|
+
return new Promise((resolve, reject) => {
|
|
258
|
+
const transaction = db.transaction([this._storeName], 'readwrite');
|
|
259
|
+
const objectStore = transaction.objectStore(this._storeName);
|
|
260
|
+
objectStore.put(v, k);
|
|
261
|
+
transaction.oncomplete = () => resolve();
|
|
262
|
+
transaction.onerror = () => reject(transaction.error);
|
|
263
|
+
transaction.onabort = () => reject(transaction.error);
|
|
264
|
+
});
|
|
239
265
|
});
|
|
240
266
|
}
|
|
241
|
-
// Performs all writes in a transaction so that all succeed or none succeed.
|
|
242
267
|
async multiSet(keyValuePairs) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
transaction.abort();
|
|
255
|
-
reject(event);
|
|
256
|
-
};
|
|
257
|
-
request.onsuccess = (_event) => {
|
|
258
|
-
requests.delete(request);
|
|
259
|
-
// Last request to finish resolves the transaction
|
|
260
|
-
if (requests.size === 0) {
|
|
261
|
-
resolve();
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
}
|
|
268
|
+
return this._withRetry((db) => {
|
|
269
|
+
return new Promise((resolve, reject) => {
|
|
270
|
+
const transaction = db.transaction([this._storeName], 'readwrite');
|
|
271
|
+
const objectStore = transaction.objectStore(this._storeName);
|
|
272
|
+
for (const [k, v] of keyValuePairs) {
|
|
273
|
+
objectStore.put(v, k);
|
|
274
|
+
}
|
|
275
|
+
transaction.oncomplete = () => resolve();
|
|
276
|
+
transaction.onerror = () => reject(transaction.error);
|
|
277
|
+
transaction.onabort = () => reject(transaction.error);
|
|
278
|
+
});
|
|
265
279
|
});
|
|
266
280
|
}
|
|
267
281
|
async removeItem(k) {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
reject(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
resolve();
|
|
278
|
-
};
|
|
282
|
+
return this._withRetry((db) => {
|
|
283
|
+
return new Promise((resolve, reject) => {
|
|
284
|
+
const transaction = db.transaction([this._storeName], 'readwrite');
|
|
285
|
+
const objectStore = transaction.objectStore(this._storeName);
|
|
286
|
+
objectStore.delete(k);
|
|
287
|
+
transaction.oncomplete = () => resolve();
|
|
288
|
+
transaction.onerror = () => reject(transaction.error);
|
|
289
|
+
transaction.onabort = () => reject(transaction.error);
|
|
290
|
+
});
|
|
279
291
|
});
|
|
280
292
|
}
|
|
281
293
|
async getAllKeys() {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
294
|
+
return this._withRetry((db) => {
|
|
295
|
+
return new Promise((resolve, reject) => {
|
|
296
|
+
const transaction = db.transaction([this._storeName], 'readonly');
|
|
297
|
+
const objectStore = transaction.objectStore(this._storeName);
|
|
298
|
+
const request = objectStore.getAllKeys();
|
|
299
|
+
request.onerror = () => {
|
|
300
|
+
reject(request.error);
|
|
301
|
+
};
|
|
302
|
+
request.onsuccess = () => {
|
|
303
|
+
resolve(request.result.filter((x) => typeof x === 'string'));
|
|
304
|
+
};
|
|
305
|
+
});
|
|
293
306
|
});
|
|
294
307
|
}
|
|
295
308
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDBStorage.js","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Meta,\n META_KEY,\n ObjectMeta,\n StoreInterface,\n StoreInterfaceStoreName,\n} from './utils/PersistedObject.ts';\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;\n\nconst storeNames = ['kv', 'querySubs', 'syncSubs'] as const;\n\n// Check that we're not missing a store name in storeNames\ntype MissingStoreNames = Exclude<\n StoreInterfaceStoreName,\n (typeof storeNames)[number]\n>;\nconst _exhaustiveCheck: never = null as MissingStoreNames;\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 const objects = {};\n for (const [hash, v] of Object.entries(subs)) {\n const value = typeof v === 'string' ? JSON.parse(v) : v;\n if (value.lastAccessed) {\n const objectMeta: ObjectMeta = {\n createdAt: value.lastAccessed,\n updatedAt: value.lastAccessed,\n size: value.result?.store?.triples?.length ?? 0,\n };\n objects[hash] = objectMeta;\n }\n const putReq = querySubStore.put(value, hash);\n putReqs.add(putReq);\n }\n const meta: Meta<string> = { objects };\n const metaPutReq = querySubStore.put(meta, META_KEY);\n putReqs.add(metaPutReq);\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, v6Db: IDBDatabase): Promise<void> {\n const v5db = await existingDb(`instant_${appId}_5`);\n if (!v5db) {\n return;\n }\n\n const data: Array<[string, any]> = await new Promise((resolve, reject) => {\n const v5Tx = v5db.transaction(['kv'], 'readonly');\n const objectStore = v5Tx.objectStore('kv');\n const cursorReq = objectStore.openCursor();\n cursorReq.onerror = (event) => {\n reject(event);\n };\n const data: Array<[string, any]> = [];\n cursorReq.onsuccess = () => {\n const cursor = cursorReq.result;\n if (cursor) {\n const key = cursor.key as string;\n const value = cursor.value;\n data.push([key, value]);\n cursor.continue();\n } else {\n resolve(data);\n }\n };\n cursorReq.onerror = (event) => {\n reject(event);\n };\n });\n\n const v6Tx = v6Db.transaction(['kv', 'querySubs'], 'readwrite');\n\n const kvStore = v6Tx.objectStore('kv');\n const querySubStore = v6Tx.objectStore('querySubs');\n\n const promises: Promise<any>[] = [];\n const kvMeta: Meta<string> = { objects: {} };\n for (const [key, value] of data) {\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 const objectMeta: ObjectMeta = {\n createdAt: Date.now(),\n updatedAt: Date.now(),\n size: 0,\n };\n kvMeta.objects[key] = objectMeta;\n break;\n }\n }\n }\n const p = moveKvEntry5To6(META_KEY, kvMeta, kvStore);\n promises.push(p);\n await Promise.all(promises);\n await new Promise((resolve, reject) => {\n v6Tx.oncomplete = (e) => resolve(e);\n v6Tx.onerror = (e) => reject(e);\n v6Tx.onabort = (e) => reject(e);\n });\n}\n\n// We create many IndexedDBStorage instances that talk to the same\n// underlying db, but we only get one `onupgradeneeded` event. This holds\n// the upgrade promises so that we wait until upgrade finishes before\n// we start writing.\nconst upgradePromises = new Map();\n\nexport default class IndexedDBStorage extends StoreInterface {\n dbName: string;\n _storeName: StoreInterfaceStoreName;\n _appId: string;\n _prefix: string;\n _dbPromise: Promise<IDBDatabase>;\n\n constructor(appId: string, storeName: StoreInterfaceStoreName) {\n super(appId, 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 let requiresUpgrade = false;\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 if (!requiresUpgrade) {\n const p = upgradePromises.get(this.dbName);\n if (!p) {\n resolve(db);\n } else {\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n } else {\n const p = upgrade5To6(this._appId, db).catch((e) => {\n logErrorCb('Error upgrading store from version 5 to 6.')(e);\n });\n upgradePromises.set(this.dbName, p);\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n };\n\n request.onupgradeneeded = (event) => {\n requiresUpgrade = true;\n this._upgradeStore(event);\n };\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 }\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], 'readonly');\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 {\n Meta,\n META_KEY,\n ObjectMeta,\n StoreInterface,\n StoreInterfaceStoreName,\n} from './utils/PersistedObject.ts';\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;\n\nconst storeNames = ['kv', 'querySubs', 'syncSubs'] as const;\n\n// Check that we're not missing a store name in storeNames\ntype MissingStoreNames = Exclude<\n StoreInterfaceStoreName,\n (typeof storeNames)[number]\n>;\nconst _exhaustiveCheck: never = null as MissingStoreNames;\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 const objects = {};\n for (const [hash, v] of Object.entries(subs)) {\n const value = typeof v === 'string' ? JSON.parse(v) : v;\n if (value.lastAccessed) {\n const objectMeta: ObjectMeta = {\n createdAt: value.lastAccessed,\n updatedAt: value.lastAccessed,\n size: value.result?.store?.triples?.length ?? 0,\n };\n objects[hash] = objectMeta;\n }\n const putReq = querySubStore.put(value, hash);\n putReqs.add(putReq);\n }\n const meta: Meta<string> = { objects };\n const metaPutReq = querySubStore.put(meta, META_KEY);\n putReqs.add(metaPutReq);\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, v6Db: IDBDatabase): Promise<void> {\n const v5db = await existingDb(`instant_${appId}_5`);\n if (!v5db) {\n return;\n }\n\n const data: Array<[string, any]> = await new Promise((resolve, reject) => {\n const v5Tx = v5db.transaction(['kv'], 'readonly');\n const objectStore = v5Tx.objectStore('kv');\n const cursorReq = objectStore.openCursor();\n cursorReq.onerror = (event) => {\n reject(event);\n };\n const data: Array<[string, any]> = [];\n cursorReq.onsuccess = () => {\n const cursor = cursorReq.result;\n if (cursor) {\n const key = cursor.key as string;\n const value = cursor.value;\n data.push([key, value]);\n cursor.continue();\n } else {\n resolve(data);\n }\n };\n cursorReq.onerror = (event) => {\n reject(event);\n };\n });\n\n const v6Tx = v6Db.transaction(['kv', 'querySubs'], 'readwrite');\n\n const kvStore = v6Tx.objectStore('kv');\n const querySubStore = v6Tx.objectStore('querySubs');\n\n const promises: Promise<any>[] = [];\n const kvMeta: Meta<string> = { objects: {} };\n for (const [key, value] of data) {\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 const objectMeta: ObjectMeta = {\n createdAt: Date.now(),\n updatedAt: Date.now(),\n size: 0,\n };\n kvMeta.objects[key] = objectMeta;\n break;\n }\n }\n }\n const p = moveKvEntry5To6(META_KEY, kvMeta, kvStore);\n promises.push(p);\n await Promise.all(promises);\n await new Promise((resolve, reject) => {\n v6Tx.oncomplete = (e) => resolve(e);\n v6Tx.onerror = (e) => reject(e);\n v6Tx.onabort = (e) => reject(e);\n });\n}\n\n// We create many IndexedDBStorage instances that talk to the same\n// underlying db, but we only get one `onupgradeneeded` event. This holds\n// the upgrade promises so that we wait until upgrade finishes before\n// we start writing.\nconst upgradePromises = new Map();\n\nexport default class IndexedDBStorage extends StoreInterface {\n dbName: string;\n _storeName: StoreInterfaceStoreName;\n _appId: string;\n _prefix: string;\n _dbPromise: Promise<IDBDatabase>;\n\n constructor(appId: string, storeName: StoreInterfaceStoreName) {\n super(appId, 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 let requiresUpgrade = false;\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 // Browsers can close IndexedDB connections unexpectedly\n // (e.g. backgrounded tabs, memory pressure, version changes from\n // other tabs). Re-init so the next operation gets a fresh connection.\n db.onclose = () => {\n this._dbPromise = this._init();\n };\n db.onversionchange = () => {\n db.close();\n };\n if (!requiresUpgrade) {\n const p = upgradePromises.get(this.dbName);\n if (!p) {\n resolve(db);\n } else {\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n } else {\n const p = upgrade5To6(this._appId, db).catch((e) => {\n logErrorCb('Error upgrading store from version 5 to 6.')(e);\n });\n upgradePromises.set(this.dbName, p);\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n };\n\n request.onupgradeneeded = (event) => {\n requiresUpgrade = true;\n this._upgradeStore(event);\n };\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 }\n\n // Browsers can close IndexedDB connections unexpectedly (backgrounded tabs,\n // memory pressure, cross-tab version changes, etc.), causing\n // `db.transaction()` to throw InvalidStateError. This helper catches that\n // error and retries once with a fresh connection.\n async _withRetry<T>(fn: (db: IDBDatabase) => Promise<T>): Promise<T> {\n try {\n const db = await this._dbPromise;\n return await fn(db);\n } catch (e) {\n if (e instanceof DOMException && e.name === 'InvalidStateError') {\n this._dbPromise = this._init();\n const db = await this._dbPromise;\n return await fn(db);\n }\n throw e;\n }\n }\n\n async getItem(k: string): Promise<any> {\n return this._withRetry((db) => {\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 = () => {\n reject(request.error);\n };\n request.onsuccess = () => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n });\n }\n\n async setItem(k: string, v: any): Promise<void> {\n return this._withRetry((db) => {\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n objectStore.put(v, k);\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n transaction.onabort = () => reject(transaction.error);\n });\n });\n }\n\n async multiSet(keyValuePairs: Array<[string, any]>): Promise<void> {\n return this._withRetry((db) => {\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n for (const [k, v] of keyValuePairs) {\n objectStore.put(v, k);\n }\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n transaction.onabort = () => reject(transaction.error);\n });\n });\n }\n\n async removeItem(k: string): Promise<void> {\n return this._withRetry((db) => {\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n objectStore.delete(k);\n\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n transaction.onabort = () => reject(transaction.error);\n });\n });\n }\n\n async getAllKeys(): Promise<string[]> {\n return this._withRetry((db) => {\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.getAllKeys();\n request.onerror = () => {\n reject(request.error);\n };\n request.onsuccess = () => {\n resolve(request.result.filter((x) => typeof x === 'string'));\n };\n });\n });\n }\n}\n"]}
|
|
@@ -131,7 +131,7 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
131
131
|
_handleReceive(connId: any, msg: any): void;
|
|
132
132
|
_sessionId: any;
|
|
133
133
|
createWriteStream(opts: any): import("./Stream.ts").InstantWritableStream<string>;
|
|
134
|
-
createReadStream(opts: any):
|
|
134
|
+
createReadStream(opts: any): ReadableStream<string>;
|
|
135
135
|
_pendingMutations(): any;
|
|
136
136
|
_updatePendingMutations(f: any): void;
|
|
137
137
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":";;;;;;;AAiNA;;GAEG;AACH,6BAFwD,UAAU,SAArD,OAAQ,eAAe,EAAE,eAAgB;IAuEpD,8KAmIC;IAvMD,uCAAuC;IACvC,OADW,CAAC,CAAC,UAAU,GAAG,SAAS,CAC7B;IACN,mBAAiB;IACjB,qBAAoB;IACpB,eAA2B;IAE3B,mEAAmE;IACnE,WADW,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CACrD;IAEV,8BAA8B;IAC9B,mCAAG;IAEH,wBAAwB;IACxB,YADW,SAAS,CACT;IACX,4BAA4B;IAC5B,gBADW,aAAa,CACT;IAEf,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,0BAA2B;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,oBAAqB;IACrB,gEAAgE;IAChE,wBADW,OAAO,CAAC,IAAI,GAAG;QAAC,KAAK,EAAE;YAAC,OAAO,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC,GAAG,IAAI,CAC9B;IAE9B,+DAA+D;IAC/D,YADW,IAAI,GAAG,OAAO,sBAAsB,EAAE,SAAS,CACxC;IAElB,yCAAyC;IACzC,mBADU,gBAAgB,GAAG,SAAS,CACpB;IAElB,mFAAmF;IACnF,QADW,MAAM,CAAC,MAAM,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAC,CAAC,CACnE;IACZ,sCAAsC;IACtC,oBADW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACV;IACxB,cAAe;IACf,uBAAqB;IACrB,mBAAoB;IACpB,kFAAkF;IAClF,oBADW;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,GAAG,GAAG,SAAS,CAAA;KAAC,CACF;IAC5E,wBAAsB;IACtB,uBAAwB;IACxB,qBAAqB;IACrB,MADW,MAAM,CACZ;IACL,8BAAyB;IACzB,sCAAiC;IACjC,oCAAsC;IACtC,mCAAmC;IACnC,kBADU,eAAe,GAAG,IAAI,CACR;IAYtB,qBAAwD;IAYxD,cAAmE;IAkMrE,sBAKC;IAxFD,sEAEC;IAED,uCAAuC;IACvC,2BADY,eAAe,QAG1B;IAED,4BAKC;IAED,gCAOC;IAED;;;;MAMC;IAED,mCAIC;IAED,iCA0CC;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,QAoC5E;IAED,wCAKC;IAED,aAAc,QAAG,EAAE,aAAQ,EAAE,cAAS,SAmBpC;IAEF,0CAgBC;IAED;;;;;;OAMG;IACH,iBAJW,GAAG,UACH;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC;KAAE,8BAChC,OAAO,QA8BjB;IAED,4CAwRC;IAtQK,gBAAmC;IAwQzC,kFAEC;IAED,
|
|
1
|
+
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,6 @@ export type ReadableStreamCtor = {
|
|
|
9
9
|
export interface InstantWritableStream<T> extends WritableStream<T> {
|
|
10
10
|
streamId: () => Promise<string>;
|
|
11
11
|
}
|
|
12
|
-
export interface InstantReadableStream<T> extends ReadableStream<T> {
|
|
13
|
-
streamId: () => Promise<string>;
|
|
14
|
-
}
|
|
15
12
|
type StartStreamMsg = {
|
|
16
13
|
op: 'start-stream';
|
|
17
14
|
'client-id': string;
|
|
@@ -103,7 +100,7 @@ export declare class InstantStream {
|
|
|
103
100
|
streamId?: string | null | undefined;
|
|
104
101
|
byteOffset?: number | null | undefined;
|
|
105
102
|
ruleParams?: RuleParams | null | undefined;
|
|
106
|
-
}):
|
|
103
|
+
}): ReadableStream<string>;
|
|
107
104
|
private startWriteStream;
|
|
108
105
|
private registerWriteStream;
|
|
109
106
|
private appendStream;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/Stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,GAAG,GAAG,EACV,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAClC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,CAAC,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,GAAG,GAAG,EACV,gBAAgB,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAC7C,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,CAAC,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,qBAAqB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACjE,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/Stream.ts"],"names":[],"mappings":"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"}
|
package/dist/commonjs/Stream.js
CHANGED
|
@@ -357,14 +357,10 @@ function createReadStream({ RStream, opts, startStream, cancelStream, }) {
|
|
|
357
357
|
let eventId;
|
|
358
358
|
let closed = false;
|
|
359
359
|
const closeCbs = [];
|
|
360
|
-
|
|
361
|
-
// Resolved stream id from the server
|
|
362
|
-
let streamId_ = null;
|
|
363
|
-
let error_ = null;
|
|
364
|
-
function markClosed(error) {
|
|
360
|
+
function markClosed() {
|
|
365
361
|
closed = true;
|
|
366
362
|
for (const cb of closeCbs) {
|
|
367
|
-
cb(
|
|
363
|
+
cb();
|
|
368
364
|
}
|
|
369
365
|
}
|
|
370
366
|
function addCloseCb(cb) {
|
|
@@ -376,22 +372,9 @@ function createReadStream({ RStream, opts, startStream, cancelStream, }) {
|
|
|
376
372
|
}
|
|
377
373
|
};
|
|
378
374
|
}
|
|
379
|
-
function addStreamIdCb(cb) {
|
|
380
|
-
streamIdCbs.push(cb);
|
|
381
|
-
if (streamId_) {
|
|
382
|
-
cb(streamId_);
|
|
383
|
-
}
|
|
384
|
-
return () => {
|
|
385
|
-
const i = streamIdCbs.indexOf(cb);
|
|
386
|
-
if (i !== -1) {
|
|
387
|
-
streamIdCbs.splice(i, 1);
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
375
|
function error(controller, e) {
|
|
392
|
-
error_ = e;
|
|
393
376
|
controller.error(e);
|
|
394
|
-
markClosed(
|
|
377
|
+
markClosed();
|
|
395
378
|
}
|
|
396
379
|
let fetchFailures = 0;
|
|
397
380
|
async function runStartStream(opts, controller) {
|
|
@@ -413,10 +396,6 @@ function createReadStream({ RStream, opts, startStream, cancelStream, }) {
|
|
|
413
396
|
canceled = true;
|
|
414
397
|
return;
|
|
415
398
|
}
|
|
416
|
-
streamId_ = item.streamId;
|
|
417
|
-
for (const cb of streamIdCbs) {
|
|
418
|
-
cb(streamId_);
|
|
419
|
-
}
|
|
420
399
|
let discardLen = seenOffset - item.offset;
|
|
421
400
|
if (item.files && item.files.length) {
|
|
422
401
|
const fetchAbort = new AbortController();
|
|
@@ -530,38 +509,7 @@ function createReadStream({ RStream, opts, startStream, cancelStream, }) {
|
|
|
530
509
|
markClosed();
|
|
531
510
|
}
|
|
532
511
|
}
|
|
533
|
-
|
|
534
|
-
constructor(source, strategy) {
|
|
535
|
-
super(source, strategy);
|
|
536
|
-
}
|
|
537
|
-
async streamId() {
|
|
538
|
-
if (streamId_) {
|
|
539
|
-
return streamId_;
|
|
540
|
-
}
|
|
541
|
-
if (error_) {
|
|
542
|
-
throw error_;
|
|
543
|
-
}
|
|
544
|
-
return new Promise((resolve, reject) => {
|
|
545
|
-
const cleanupFns = [];
|
|
546
|
-
const cleanup = () => {
|
|
547
|
-
for (const f of cleanupFns) {
|
|
548
|
-
f();
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
|
-
const resolveCb = (streamId) => {
|
|
552
|
-
resolve(streamId);
|
|
553
|
-
cleanup();
|
|
554
|
-
};
|
|
555
|
-
const rejectCb = (e) => {
|
|
556
|
-
reject(e || new InstantError_ts_1.InstantError('Stream is closed.'));
|
|
557
|
-
cleanup();
|
|
558
|
-
};
|
|
559
|
-
cleanupFns.push(addStreamIdCb(resolveCb));
|
|
560
|
-
cleanupFns.push(addCloseCb(rejectCb));
|
|
561
|
-
});
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
const stream = new RStreamEnhanced({
|
|
512
|
+
const stream = new RStream({
|
|
565
513
|
start(controller) {
|
|
566
514
|
start(controller);
|
|
567
515
|
},
|
|
@@ -735,13 +683,14 @@ class InstantStream {
|
|
|
735
683
|
delete this.readStreamIterators[eventId];
|
|
736
684
|
return;
|
|
737
685
|
}
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
686
|
+
if (msg.files?.length || msg.content) {
|
|
687
|
+
iterator.push({
|
|
688
|
+
type: 'append',
|
|
689
|
+
offset: msg.offset,
|
|
690
|
+
files: msg.files,
|
|
691
|
+
content: msg.content,
|
|
692
|
+
});
|
|
693
|
+
}
|
|
745
694
|
if (msg.done) {
|
|
746
695
|
iterator.close();
|
|
747
696
|
delete this.readStreamIterators[eventId];
|