@workglow/indexeddb 0.3.23 → 0.3.25
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.
|
@@ -166,11 +166,19 @@ export declare class IndexedDbTabularStorage<Schema extends DataPortSchemaObject
|
|
|
166
166
|
private matchesCriteria;
|
|
167
167
|
deleteSearch(criteria: DeleteSearchCriteria<Entity>): Promise<void>;
|
|
168
168
|
/**
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
169
|
+
* Compare-and-swap `updateWhere`: opens a single `readwrite` transaction
|
|
170
|
+
* on the object store, walks the first cursor row satisfying `match`,
|
|
171
|
+
* applies `patch` in place via `cursor.update()`, and resolves on
|
|
172
|
+
* `tx.oncomplete`. Two concurrent callers with overlapping `match`
|
|
173
|
+
* criteria therefore serialize on the underlying IDB transaction rather
|
|
174
|
+
* than racing between a `query()` and a `put()`. Uniqueness is enforced
|
|
175
|
+
* by IDB's native UNIQUE indexes — a patch that collides with another
|
|
176
|
+
* row rejects the cursor request with `ConstraintError`, which aborts
|
|
177
|
+
* the transaction (mirroring how {@link put} propagates the same error).
|
|
178
|
+
*
|
|
179
|
+
* The cursor source is picked with the same equality-prefix planner
|
|
180
|
+
* {@link createIndexedRange} uses for {@link count}: an index scan when
|
|
181
|
+
* an equality prefix narrows the criteria, otherwise a full store scan.
|
|
174
182
|
*/
|
|
175
183
|
updateWhere(match: SearchCriteria<Entity>, patch: Partial<Entity>): Promise<Entity | undefined>;
|
|
176
184
|
private getEqualityCriterionValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDbTabularStorage.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDbTabularStorage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IndexedDbTabularStorage.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDbTabularStorage.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/browser.js
CHANGED
|
@@ -1295,11 +1295,49 @@ class IndexedDbTabularStorage extends BaseTabularStorage {
|
|
|
1295
1295
|
}
|
|
1296
1296
|
async updateWhere(match, patch) {
|
|
1297
1297
|
this.assertPatchKeepsPrimaryKey(patch);
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1298
|
+
this.validateQueryParams(match);
|
|
1299
|
+
const db = await this.getDb();
|
|
1300
|
+
return new Promise((resolve, reject) => {
|
|
1301
|
+
let tx;
|
|
1302
|
+
try {
|
|
1303
|
+
tx = db.transaction(this.table, "readwrite");
|
|
1304
|
+
} catch (err) {
|
|
1305
|
+
reject(err);
|
|
1306
|
+
return;
|
|
1307
|
+
}
|
|
1308
|
+
const store = tx.objectStore(this.table);
|
|
1309
|
+
const plan = this.createIndexedRange(store, match);
|
|
1310
|
+
const source = plan?.source ?? store;
|
|
1311
|
+
const range = plan?.range;
|
|
1312
|
+
let updated;
|
|
1313
|
+
tx.oncomplete = () => {
|
|
1314
|
+
if (updated !== undefined) {
|
|
1315
|
+
safeEmit(this.events, "put", updated);
|
|
1316
|
+
this.hybridManager?.notifyLocalChange();
|
|
1317
|
+
}
|
|
1318
|
+
resolve(updated);
|
|
1319
|
+
};
|
|
1320
|
+
tx.onerror = () => reject(tx.error);
|
|
1321
|
+
tx.onabort = () => reject(tx.error ?? new Error("updateWhere transaction aborted"));
|
|
1322
|
+
const request = source.openCursor(range);
|
|
1323
|
+
request.onerror = () => reject(request.error);
|
|
1324
|
+
request.onsuccess = () => {
|
|
1325
|
+
const cursor = request.result;
|
|
1326
|
+
if (!cursor)
|
|
1327
|
+
return;
|
|
1328
|
+
const record = cursor.value;
|
|
1329
|
+
if (!this.matchesCriteria(record, match)) {
|
|
1330
|
+
cursor.continue();
|
|
1331
|
+
return;
|
|
1332
|
+
}
|
|
1333
|
+
const candidate = { ...record, ...patch };
|
|
1334
|
+
const updateRequest = cursor.update(candidate);
|
|
1335
|
+
updateRequest.onsuccess = () => {
|
|
1336
|
+
updated = candidate;
|
|
1337
|
+
};
|
|
1338
|
+
updateRequest.onerror = () => {};
|
|
1339
|
+
};
|
|
1340
|
+
});
|
|
1303
1341
|
}
|
|
1304
1342
|
getEqualityCriterionValue(criteria, column) {
|
|
1305
1343
|
const criterion = criteria[column];
|
|
@@ -1681,4 +1719,4 @@ export {
|
|
|
1681
1719
|
IDB_KV_REPOSITORY
|
|
1682
1720
|
};
|
|
1683
1721
|
|
|
1684
|
-
//# debugId=
|
|
1722
|
+
//# debugId=86F7376EC84C3D3064756E2164756E21
|