@aws-amplify/datastore 3.12.6-next.32 → 3.12.6-next.41
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/lib/authModeStrategies/defaultAuthStrategy.d.ts +2 -0
- package/lib/authModeStrategies/index.d.ts +2 -0
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +13 -0
- package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib/datastore/datastore.d.ts +207 -0
- package/lib/datastore/datastore.js +641 -144
- package/lib/datastore/datastore.js.map +1 -1
- package/lib/index.d.ts +16 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/predicates/index.d.ts +30 -0
- package/lib/predicates/index.js +127 -6
- package/lib/predicates/index.js.map +1 -1
- package/lib/predicates/next.d.ts +342 -0
- package/lib/predicates/next.js +801 -0
- package/lib/predicates/next.js.map +1 -0
- package/lib/predicates/sort.d.ts +8 -0
- package/lib/predicates/sort.js +10 -4
- package/lib/predicates/sort.js.map +1 -1
- package/lib/ssr/index.d.ts +3 -0
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +42 -0
- package/lib/storage/adapter/AsyncStorageAdapter.js +106 -293
- package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +39 -0
- package/lib/storage/adapter/AsyncStorageDatabase.js +6 -5
- package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib/storage/adapter/InMemoryStore.d.ts +11 -0
- package/lib/storage/adapter/InMemoryStore.js.map +1 -1
- package/lib/storage/adapter/InMemoryStore.native.d.ts +1 -0
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +61 -0
- package/lib/storage/adapter/IndexedDBAdapter.js +223 -289
- package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib/storage/adapter/getDefaultAdapter/index.d.ts +3 -0
- package/lib/storage/adapter/getDefaultAdapter/index.js.map +1 -1
- package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +3 -0
- package/lib/storage/adapter/index.d.ts +9 -0
- package/lib/storage/relationship.d.ts +140 -0
- package/lib/storage/relationship.js +335 -0
- package/lib/storage/relationship.js.map +1 -0
- package/lib/storage/storage.d.ts +50 -0
- package/lib/storage/storage.js +32 -16
- package/lib/storage/storage.js.map +1 -1
- package/lib/sync/datastoreConnectivity.d.ts +16 -0
- package/lib/sync/datastoreConnectivity.js.map +1 -1
- package/lib/sync/datastoreReachability/index.d.ts +3 -0
- package/lib/sync/datastoreReachability/index.native.d.ts +3 -0
- package/lib/sync/index.d.ts +89 -0
- package/lib/sync/index.js +2 -8
- package/lib/sync/index.js.map +1 -1
- package/lib/sync/merger.d.ts +17 -0
- package/lib/sync/merger.js.map +1 -1
- package/lib/sync/outbox.d.ts +27 -0
- package/lib/sync/outbox.js.map +1 -1
- package/lib/sync/processors/errorMaps.d.ts +17 -0
- package/lib/sync/processors/errorMaps.js +1 -1
- package/lib/sync/processors/errorMaps.js.map +1 -1
- package/lib/sync/processors/mutation.d.ts +58 -0
- package/lib/sync/processors/mutation.js +9 -6
- package/lib/sync/processors/mutation.js.map +1 -1
- package/lib/sync/processors/subscription.d.ts +33 -0
- package/lib/sync/processors/subscription.js +4 -1
- package/lib/sync/processors/subscription.js.map +1 -1
- package/lib/sync/processors/sync.d.ts +28 -0
- package/lib/sync/processors/sync.js.map +1 -1
- package/lib/sync/utils.d.ts +42 -0
- package/lib/sync/utils.js +30 -31
- package/lib/sync/utils.js.map +1 -1
- package/lib/types.d.ts +553 -0
- package/lib/types.js +6 -1
- package/lib/types.js.map +1 -1
- package/lib/util.d.ts +189 -0
- package/lib/util.js +174 -104
- package/lib/util.js.map +1 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib-esm/datastore/datastore.d.ts +59 -8
- package/lib-esm/datastore/datastore.js +643 -147
- package/lib-esm/datastore/datastore.js.map +1 -1
- package/lib-esm/index.d.ts +3 -2
- package/lib-esm/index.js +2 -1
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/predicates/index.d.ts +16 -2
- package/lib-esm/predicates/index.js +128 -7
- package/lib-esm/predicates/index.js.map +1 -1
- package/lib-esm/predicates/next.d.ts +342 -0
- package/lib-esm/predicates/next.js +797 -0
- package/lib-esm/predicates/next.js.map +1 -0
- package/lib-esm/predicates/sort.js +10 -4
- package/lib-esm/predicates/sort.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageAdapter.d.ts +2 -1
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js +108 -295
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js +6 -5
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib-esm/storage/adapter/InMemoryStore.d.ts +1 -1
- package/lib-esm/storage/adapter/InMemoryStore.js.map +1 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +4 -2
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +226 -292
- package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/getDefaultAdapter/index.js.map +1 -1
- package/lib-esm/storage/relationship.d.ts +140 -0
- package/lib-esm/storage/relationship.js +333 -0
- package/lib-esm/storage/relationship.js.map +1 -0
- package/lib-esm/storage/storage.d.ts +7 -6
- package/lib-esm/storage/storage.js +32 -16
- package/lib-esm/storage/storage.js.map +1 -1
- package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
- package/lib-esm/sync/index.js +3 -9
- package/lib-esm/sync/index.js.map +1 -1
- package/lib-esm/sync/merger.js.map +1 -1
- package/lib-esm/sync/outbox.js.map +1 -1
- package/lib-esm/sync/processors/errorMaps.js +1 -1
- package/lib-esm/sync/processors/errorMaps.js.map +1 -1
- package/lib-esm/sync/processors/mutation.js +10 -7
- package/lib-esm/sync/processors/mutation.js.map +1 -1
- package/lib-esm/sync/processors/subscription.js +4 -1
- package/lib-esm/sync/processors/subscription.js.map +1 -1
- package/lib-esm/sync/processors/sync.js.map +1 -1
- package/lib-esm/sync/utils.d.ts +1 -1
- package/lib-esm/sync/utils.js +31 -32
- package/lib-esm/sync/utils.js.map +1 -1
- package/lib-esm/types.d.ts +59 -7
- package/lib-esm/types.js +6 -2
- package/lib-esm/types.js.map +1 -1
- package/lib-esm/util.d.ts +39 -6
- package/lib-esm/util.js +170 -104
- package/lib-esm/util.js.map +1 -1
- package/package.json +14 -11
- package/src/authModeStrategies/multiAuthStrategy.ts +1 -1
- package/src/datastore/datastore.ts +680 -204
- package/src/index.ts +4 -0
- package/src/predicates/index.ts +143 -17
- package/src/predicates/next.ts +1016 -0
- package/src/predicates/sort.ts +8 -2
- package/src/storage/adapter/AsyncStorageAdapter.ts +56 -178
- package/src/storage/adapter/AsyncStorageDatabase.ts +16 -15
- package/src/storage/adapter/InMemoryStore.ts +5 -2
- package/src/storage/adapter/IndexedDBAdapter.ts +166 -191
- package/src/storage/adapter/getDefaultAdapter/index.ts +2 -2
- package/src/storage/relationship.ts +272 -0
- package/src/storage/storage.ts +56 -37
- package/src/sync/datastoreConnectivity.ts +4 -4
- package/src/sync/index.ts +22 -28
- package/src/sync/merger.ts +1 -1
- package/src/sync/outbox.ts +6 -6
- package/src/sync/processors/errorMaps.ts +1 -1
- package/src/sync/processors/mutation.ts +22 -17
- package/src/sync/processors/subscription.ts +19 -15
- package/src/sync/processors/sync.ts +16 -16
- package/src/sync/utils.ts +42 -48
- package/src/types.ts +116 -11
- package/src/util.ts +108 -150
|
@@ -279,13 +279,13 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
279
279
|
IndexedDBAdapter.prototype.save = function (model, condition) {
|
|
280
280
|
var e_2, _a;
|
|
281
281
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
282
|
-
var modelConstructor, storeName, namespaceName, connectedModels, set, connectionStoreNames, tx, store, keyValues, fromDB, predicates, predicateObjs, type, isValid, msg, result, connectionStoreNames_1, connectionStoreNames_1_1, resItem, storeName_1, item, instance, keys, store_1, itemKeyValues, fromDB_1, opType, modelKeyValues, key, e_2_1;
|
|
282
|
+
var modelConstructor, storeName, namespaceName, connectedModels, set, connectionStoreNames, tx, store, keyValues, fromDB, predicates, _b, predicateObjs, type, isValid, msg, result, connectionStoreNames_1, connectionStoreNames_1_1, resItem, storeName_1, item, instance, keys, store_1, itemKeyValues, fromDB_1, opType, modelKeyValues, key, e_2_1;
|
|
283
283
|
var _this = this;
|
|
284
|
-
return tslib_1.__generator(this, function (
|
|
285
|
-
switch (
|
|
284
|
+
return tslib_1.__generator(this, function (_c) {
|
|
285
|
+
switch (_c.label) {
|
|
286
286
|
case 0: return [4 /*yield*/, this.checkPrivate()];
|
|
287
287
|
case 1:
|
|
288
|
-
|
|
288
|
+
_c.sent();
|
|
289
289
|
modelConstructor = Object.getPrototypeOf(model)
|
|
290
290
|
.constructor;
|
|
291
291
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
@@ -304,10 +304,10 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
304
304
|
keyValues = this.getIndexKeyValuesFromModel(model);
|
|
305
305
|
return [4 /*yield*/, this._get(store, keyValues)];
|
|
306
306
|
case 2:
|
|
307
|
-
fromDB =
|
|
307
|
+
fromDB = _c.sent();
|
|
308
308
|
if (condition && fromDB) {
|
|
309
309
|
predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
|
|
310
|
-
predicateObjs =
|
|
310
|
+
_b = predicates || {}, predicateObjs = _b.predicates, type = _b.type;
|
|
311
311
|
isValid = util_1.validatePredicate(fromDB, type, predicateObjs);
|
|
312
312
|
if (!isValid) {
|
|
313
313
|
msg = 'Conditional update failed';
|
|
@@ -316,14 +316,14 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
result = [];
|
|
319
|
-
|
|
319
|
+
_c.label = 3;
|
|
320
320
|
case 3:
|
|
321
|
-
|
|
321
|
+
_c.trys.push([3, 11, 12, 17]);
|
|
322
322
|
connectionStoreNames_1 = tslib_1.__asyncValues(connectionStoreNames);
|
|
323
|
-
|
|
323
|
+
_c.label = 4;
|
|
324
324
|
case 4: return [4 /*yield*/, connectionStoreNames_1.next()];
|
|
325
325
|
case 5:
|
|
326
|
-
if (!(connectionStoreNames_1_1 =
|
|
326
|
+
if (!(connectionStoreNames_1_1 = _c.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 10];
|
|
327
327
|
resItem = connectionStoreNames_1_1.value;
|
|
328
328
|
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance, keys = resItem.keys;
|
|
329
329
|
store_1 = tx.objectStore(storeName_1);
|
|
@@ -333,7 +333,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
333
333
|
});
|
|
334
334
|
return [4 /*yield*/, this._get(store_1, itemKeyValues)];
|
|
335
335
|
case 6:
|
|
336
|
-
fromDB_1 =
|
|
336
|
+
fromDB_1 = _c.sent();
|
|
337
337
|
opType = fromDB_1 === undefined ? types_1.OpType.INSERT : types_1.OpType.UPDATE;
|
|
338
338
|
modelKeyValues = this.getIndexKeyValuesFromModel(model);
|
|
339
339
|
if (!(util_1.keysEqual(itemKeyValues, modelKeyValues) ||
|
|
@@ -342,25 +342,25 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
342
342
|
.index('byPk')
|
|
343
343
|
.getKey(this.canonicalKeyPath(itemKeyValues))];
|
|
344
344
|
case 7:
|
|
345
|
-
key =
|
|
345
|
+
key = _c.sent();
|
|
346
346
|
return [4 /*yield*/, store_1.put(item, key)];
|
|
347
347
|
case 8:
|
|
348
|
-
|
|
348
|
+
_c.sent();
|
|
349
349
|
result.push([instance, opType]);
|
|
350
|
-
|
|
350
|
+
_c.label = 9;
|
|
351
351
|
case 9: return [3 /*break*/, 4];
|
|
352
352
|
case 10: return [3 /*break*/, 17];
|
|
353
353
|
case 11:
|
|
354
|
-
e_2_1 =
|
|
354
|
+
e_2_1 = _c.sent();
|
|
355
355
|
e_2 = { error: e_2_1 };
|
|
356
356
|
return [3 /*break*/, 17];
|
|
357
357
|
case 12:
|
|
358
|
-
|
|
358
|
+
_c.trys.push([12, , 15, 16]);
|
|
359
359
|
if (!(connectionStoreNames_1_1 && !connectionStoreNames_1_1.done && (_a = connectionStoreNames_1.return))) return [3 /*break*/, 14];
|
|
360
360
|
return [4 /*yield*/, _a.call(connectionStoreNames_1)];
|
|
361
361
|
case 13:
|
|
362
|
-
|
|
363
|
-
|
|
362
|
+
_c.sent();
|
|
363
|
+
_c.label = 14;
|
|
364
364
|
case 14: return [3 /*break*/, 16];
|
|
365
365
|
case 15:
|
|
366
366
|
if (e_2) throw e_2.error;
|
|
@@ -368,203 +368,32 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
368
368
|
case 16: return [7 /*endfinally*/];
|
|
369
369
|
case 17: return [4 /*yield*/, tx.done];
|
|
370
370
|
case 18:
|
|
371
|
-
|
|
371
|
+
_c.sent();
|
|
372
372
|
return [2 /*return*/, result];
|
|
373
373
|
}
|
|
374
374
|
});
|
|
375
375
|
});
|
|
376
376
|
};
|
|
377
377
|
IndexedDBAdapter.prototype.load = function (namespaceName, srcModelName, records) {
|
|
378
|
-
var records_1, records_1_1, records_2, records_2_1;
|
|
379
|
-
var e_3, _a, e_4, _b, e_5, _c;
|
|
380
378
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
381
|
-
var namespace, relations, connectionStoreNames, modelConstructor
|
|
379
|
+
var namespace, relations, connectionStoreNames, modelConstructor;
|
|
382
380
|
var _this = this;
|
|
383
|
-
return tslib_1.__generator(this, function (
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
if (connectionStoreNames.length === 0) {
|
|
394
|
-
return [2 /*return*/, records.map(function (record) {
|
|
395
|
-
return _this.modelInstanceCreator(modelConstructor, record);
|
|
396
|
-
})];
|
|
397
|
-
}
|
|
398
|
-
tx = this.db.transaction(tslib_1.__spread(connectionStoreNames), 'readonly');
|
|
399
|
-
_e.label = 1;
|
|
400
|
-
case 1:
|
|
401
|
-
_e.trys.push([1, 38, 39, 44]);
|
|
402
|
-
relations_1 = tslib_1.__asyncValues(relations);
|
|
403
|
-
_e.label = 2;
|
|
404
|
-
case 2: return [4 /*yield*/, relations_1.next()];
|
|
405
|
-
case 3:
|
|
406
|
-
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
|
|
407
|
-
relation = relations_1_1.value;
|
|
408
|
-
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, targetNames = relation.targetNames;
|
|
409
|
-
storeName = util_1.getStorename(namespaceName, modelName);
|
|
410
|
-
store = tx.objectStore(storeName);
|
|
411
|
-
modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, modelName);
|
|
412
|
-
_d = relation.relationType;
|
|
413
|
-
switch (_d) {
|
|
414
|
-
case 'HAS_ONE': return [3 /*break*/, 4];
|
|
415
|
-
case 'BELONGS_TO': return [3 /*break*/, 19];
|
|
416
|
-
case 'HAS_MANY': return [3 /*break*/, 34];
|
|
417
|
-
}
|
|
418
|
-
return [3 /*break*/, 35];
|
|
419
|
-
case 4:
|
|
420
|
-
_e.trys.push([4, 12, 13, 18]);
|
|
421
|
-
records_1 = tslib_1.__asyncValues(records);
|
|
422
|
-
_e.label = 5;
|
|
423
|
-
case 5: return [4 /*yield*/, records_1.next()];
|
|
424
|
-
case 6:
|
|
425
|
-
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/, 11];
|
|
426
|
-
recordItem = records_1_1.value;
|
|
427
|
-
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 8];
|
|
428
|
-
getByFields = [];
|
|
429
|
-
allPresent = void 0;
|
|
430
|
-
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
431
|
-
allPresent = targetNames.every(function (targetName) {
|
|
432
|
-
return recordItem[targetName] != null;
|
|
433
|
-
});
|
|
434
|
-
if (!allPresent) {
|
|
435
|
-
return [3 /*break*/, 11];
|
|
436
|
-
}
|
|
437
|
-
getByFields = targetNames;
|
|
438
|
-
keys = getByFields.map(function (getByField) { return recordItem[getByField]; });
|
|
439
|
-
return [4 /*yield*/, this._get(store, keys)];
|
|
440
|
-
case 7:
|
|
441
|
-
connectionRecord = _e.sent();
|
|
442
|
-
recordItem[fieldName] =
|
|
443
|
-
connectionRecord &&
|
|
444
|
-
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
445
|
-
return [3 /*break*/, 10];
|
|
446
|
-
case 8:
|
|
447
|
-
getByfield = recordItem[targetName]
|
|
448
|
-
? targetName
|
|
449
|
-
: fieldName;
|
|
450
|
-
// We break here, because the recordItem does not have 'team', the `getByField`
|
|
451
|
-
// extract the keys on the related model.
|
|
452
|
-
if (!recordItem[getByfield])
|
|
453
|
-
return [3 /*break*/, 11];
|
|
454
|
-
key = [recordItem[getByfield]];
|
|
455
|
-
return [4 /*yield*/, this._get(store, key)];
|
|
456
|
-
case 9:
|
|
457
|
-
connectionRecord = _e.sent();
|
|
458
|
-
recordItem[fieldName] =
|
|
459
|
-
connectionRecord &&
|
|
460
|
-
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
461
|
-
_e.label = 10;
|
|
462
|
-
case 10: return [3 /*break*/, 5];
|
|
463
|
-
case 11: return [3 /*break*/, 18];
|
|
464
|
-
case 12:
|
|
465
|
-
e_4_1 = _e.sent();
|
|
466
|
-
e_4 = { error: e_4_1 };
|
|
467
|
-
return [3 /*break*/, 18];
|
|
468
|
-
case 13:
|
|
469
|
-
_e.trys.push([13, , 16, 17]);
|
|
470
|
-
if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/, 15];
|
|
471
|
-
return [4 /*yield*/, _b.call(records_1)];
|
|
472
|
-
case 14:
|
|
473
|
-
_e.sent();
|
|
474
|
-
_e.label = 15;
|
|
475
|
-
case 15: return [3 /*break*/, 17];
|
|
476
|
-
case 16:
|
|
477
|
-
if (e_4) throw e_4.error;
|
|
478
|
-
return [7 /*endfinally*/];
|
|
479
|
-
case 17: return [7 /*endfinally*/];
|
|
480
|
-
case 18: return [3 /*break*/, 36];
|
|
481
|
-
case 19:
|
|
482
|
-
_e.trys.push([19, 27, 28, 33]);
|
|
483
|
-
records_2 = tslib_1.__asyncValues(records);
|
|
484
|
-
_e.label = 20;
|
|
485
|
-
case 20: return [4 /*yield*/, records_2.next()];
|
|
486
|
-
case 21:
|
|
487
|
-
if (!(records_2_1 = _e.sent(), !records_2_1.done)) return [3 /*break*/, 26];
|
|
488
|
-
recordItem = records_2_1.value;
|
|
489
|
-
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 23];
|
|
490
|
-
allPresent = void 0;
|
|
491
|
-
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
492
|
-
allPresent = targetNames.every(function (targetName) {
|
|
493
|
-
return recordItem[targetName] != null;
|
|
494
|
-
});
|
|
495
|
-
// If not present, there is not yet a connected record
|
|
496
|
-
if (!allPresent) {
|
|
497
|
-
return [3 /*break*/, 26];
|
|
498
|
-
}
|
|
499
|
-
keys = targetNames.map(function (targetName) { return recordItem[targetName]; });
|
|
500
|
-
return [4 /*yield*/, this._get(store, keys)];
|
|
501
|
-
case 22:
|
|
502
|
-
connectionRecord = _e.sent();
|
|
503
|
-
recordItem[fieldName] =
|
|
504
|
-
connectionRecord &&
|
|
505
|
-
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
506
|
-
targetNames === null || targetNames === void 0 ? void 0 : targetNames.map(function (targetName) {
|
|
507
|
-
delete recordItem[targetName];
|
|
508
|
-
});
|
|
509
|
-
return [3 /*break*/, 25];
|
|
510
|
-
case 23:
|
|
511
|
-
if (!recordItem[targetName]) return [3 /*break*/, 25];
|
|
512
|
-
key = [recordItem[targetName]];
|
|
513
|
-
return [4 /*yield*/, this._get(store, key)];
|
|
514
|
-
case 24:
|
|
515
|
-
connectionRecord = _e.sent();
|
|
516
|
-
recordItem[fieldName] =
|
|
517
|
-
connectionRecord &&
|
|
518
|
-
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
519
|
-
delete recordItem[targetName];
|
|
520
|
-
_e.label = 25;
|
|
521
|
-
case 25: return [3 /*break*/, 20];
|
|
522
|
-
case 26: return [3 /*break*/, 33];
|
|
523
|
-
case 27:
|
|
524
|
-
e_5_1 = _e.sent();
|
|
525
|
-
e_5 = { error: e_5_1 };
|
|
526
|
-
return [3 /*break*/, 33];
|
|
527
|
-
case 28:
|
|
528
|
-
_e.trys.push([28, , 31, 32]);
|
|
529
|
-
if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/, 30];
|
|
530
|
-
return [4 /*yield*/, _c.call(records_2)];
|
|
531
|
-
case 29:
|
|
532
|
-
_e.sent();
|
|
533
|
-
_e.label = 30;
|
|
534
|
-
case 30: return [3 /*break*/, 32];
|
|
535
|
-
case 31:
|
|
536
|
-
if (e_5) throw e_5.error;
|
|
537
|
-
return [7 /*endfinally*/];
|
|
538
|
-
case 32: return [7 /*endfinally*/];
|
|
539
|
-
case 33: return [3 /*break*/, 36];
|
|
540
|
-
case 34:
|
|
541
|
-
// TODO: Lazy loading
|
|
542
|
-
return [3 /*break*/, 36];
|
|
543
|
-
case 35:
|
|
544
|
-
util_1.exhaustiveCheck(relation.relationType);
|
|
545
|
-
return [3 /*break*/, 36];
|
|
546
|
-
case 36: return [3 /*break*/, 2];
|
|
547
|
-
case 37: return [3 /*break*/, 44];
|
|
548
|
-
case 38:
|
|
549
|
-
e_3_1 = _e.sent();
|
|
550
|
-
e_3 = { error: e_3_1 };
|
|
551
|
-
return [3 /*break*/, 44];
|
|
552
|
-
case 39:
|
|
553
|
-
_e.trys.push([39, , 42, 43]);
|
|
554
|
-
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
|
|
555
|
-
return [4 /*yield*/, _a.call(relations_1)];
|
|
556
|
-
case 40:
|
|
557
|
-
_e.sent();
|
|
558
|
-
_e.label = 41;
|
|
559
|
-
case 41: return [3 /*break*/, 43];
|
|
560
|
-
case 42:
|
|
561
|
-
if (e_3) throw e_3.error;
|
|
562
|
-
return [7 /*endfinally*/];
|
|
563
|
-
case 43: return [7 /*endfinally*/];
|
|
564
|
-
case 44: return [2 /*return*/, records.map(function (record) {
|
|
381
|
+
return tslib_1.__generator(this, function (_a) {
|
|
382
|
+
namespace = this.schema.namespaces[namespaceName];
|
|
383
|
+
relations = namespace.relationships[srcModelName].relationTypes;
|
|
384
|
+
connectionStoreNames = relations.map(function (_a) {
|
|
385
|
+
var modelName = _a.modelName;
|
|
386
|
+
return util_1.getStorename(namespaceName, modelName);
|
|
387
|
+
});
|
|
388
|
+
modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
|
|
389
|
+
if (connectionStoreNames.length === 0) {
|
|
390
|
+
return [2 /*return*/, records.map(function (record) {
|
|
565
391
|
return _this.modelInstanceCreator(modelConstructor, record);
|
|
566
392
|
})];
|
|
567
393
|
}
|
|
394
|
+
return [2 /*return*/, records.map(function (record) {
|
|
395
|
+
return _this.modelInstanceCreator(modelConstructor, record);
|
|
396
|
+
})];
|
|
568
397
|
});
|
|
569
398
|
});
|
|
570
399
|
};
|
|
@@ -615,7 +444,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
615
444
|
});
|
|
616
445
|
}); })()];
|
|
617
446
|
case 2:
|
|
618
|
-
records = _a.sent();
|
|
447
|
+
records = (_a.sent());
|
|
619
448
|
return [4 /*yield*/, this.load(namespaceName, modelConstructor.name, records)];
|
|
620
449
|
case 3: return [2 /*return*/, _a.sent()];
|
|
621
450
|
}
|
|
@@ -624,13 +453,10 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
624
453
|
};
|
|
625
454
|
IndexedDBAdapter.prototype.getByKey = function (storeName, keyValue) {
|
|
626
455
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
627
|
-
var record;
|
|
628
456
|
return tslib_1.__generator(this, function (_a) {
|
|
629
457
|
switch (_a.label) {
|
|
630
458
|
case 0: return [4 /*yield*/, this._get(storeName, keyValue)];
|
|
631
|
-
case 1:
|
|
632
|
-
record = _a.sent();
|
|
633
|
-
return [2 /*return*/, record];
|
|
459
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
634
460
|
}
|
|
635
461
|
});
|
|
636
462
|
});
|
|
@@ -646,7 +472,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
646
472
|
});
|
|
647
473
|
};
|
|
648
474
|
IndexedDBAdapter.prototype.keyValueFromPredicate = function (predicates, keyPath) {
|
|
649
|
-
var
|
|
475
|
+
var e_3, _a;
|
|
650
476
|
var predicateObjs = predicates.predicates;
|
|
651
477
|
if (predicateObjs.length !== keyPath.length) {
|
|
652
478
|
return;
|
|
@@ -662,48 +488,159 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
662
488
|
_loop_1(key);
|
|
663
489
|
}
|
|
664
490
|
}
|
|
665
|
-
catch (
|
|
491
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
666
492
|
finally {
|
|
667
493
|
try {
|
|
668
494
|
if (keyPath_1_1 && !keyPath_1_1.done && (_a = keyPath_1.return)) _a.call(keyPath_1);
|
|
669
495
|
}
|
|
670
|
-
finally { if (
|
|
496
|
+
finally { if (e_3) throw e_3.error; }
|
|
671
497
|
}
|
|
672
498
|
return keyValues.length === keyPath.length ? keyValues : undefined;
|
|
673
499
|
};
|
|
500
|
+
IndexedDBAdapter.prototype.matchingIndex = function (storeName, fieldName, transaction) {
|
|
501
|
+
var e_4, _a;
|
|
502
|
+
var store = transaction.objectStore(storeName);
|
|
503
|
+
try {
|
|
504
|
+
for (var _b = tslib_1.__values(store.indexNames), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
505
|
+
var name_1 = _c.value;
|
|
506
|
+
var idx = store.index(name_1);
|
|
507
|
+
if (idx.keyPath === fieldName) {
|
|
508
|
+
return idx;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
513
|
+
finally {
|
|
514
|
+
try {
|
|
515
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
516
|
+
}
|
|
517
|
+
finally { if (e_4) throw e_4.error; }
|
|
518
|
+
}
|
|
519
|
+
};
|
|
674
520
|
IndexedDBAdapter.prototype.filterOnPredicate = function (storeName, predicates) {
|
|
675
521
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
676
|
-
var predicateObjs, type,
|
|
677
|
-
|
|
678
|
-
|
|
522
|
+
var predicateObjs, type, candidateResults, fieldPredicates, txn, predicateIndexes, actualPredicateIndexes, predicateIndex, distinctResults, predicateIndexes_1, predicateIndexes_1_1, predicateIndex, resultGroup, resultGroup_1, resultGroup_1_1, item, e_5_1, filtered;
|
|
523
|
+
var e_5, _a, e_6, _b;
|
|
524
|
+
var _this = this;
|
|
525
|
+
return tslib_1.__generator(this, function (_c) {
|
|
526
|
+
switch (_c.label) {
|
|
679
527
|
case 0:
|
|
680
528
|
predicateObjs = predicates.predicates, type = predicates.type;
|
|
681
|
-
|
|
529
|
+
// the predicate objects we care about tend to be nested at least
|
|
530
|
+
// one level down: `{and: {or: {and: { <the predicates we want> }}}}`
|
|
531
|
+
// so, we unpack and/or groups until we find a group with more than 1
|
|
532
|
+
// child OR a child that is not a group (and is therefore a predicate "object").
|
|
533
|
+
while (predicateObjs.length === 1 && types_1.isPredicateGroup(predicateObjs[0])) {
|
|
534
|
+
type = predicateObjs[0].type;
|
|
535
|
+
predicateObjs = predicateObjs[0].predicates;
|
|
536
|
+
}
|
|
537
|
+
fieldPredicates = predicateObjs.filter(function (p) {
|
|
538
|
+
return types_1.isPredicateObj(p);
|
|
539
|
+
});
|
|
540
|
+
txn = this.db.transaction(storeName);
|
|
541
|
+
predicateIndexes = fieldPredicates.map(function (p) {
|
|
542
|
+
return {
|
|
543
|
+
predicate: p,
|
|
544
|
+
index: _this.matchingIndex(storeName, String(p.field), txn),
|
|
545
|
+
};
|
|
546
|
+
});
|
|
547
|
+
// Explicitly wait for txns from index queries to complete before proceding.
|
|
548
|
+
// This helps ensure IndexedDB is in a stable, ready state. Else, subseqeuent
|
|
549
|
+
// qeuries can sometimes appear to deadlock (at least in FakeIndexedDB).
|
|
550
|
+
return [4 /*yield*/, txn.done];
|
|
682
551
|
case 1:
|
|
683
|
-
|
|
552
|
+
// Explicitly wait for txns from index queries to complete before proceding.
|
|
553
|
+
// This helps ensure IndexedDB is in a stable, ready state. Else, subseqeuent
|
|
554
|
+
// qeuries can sometimes appear to deadlock (at least in FakeIndexedDB).
|
|
555
|
+
_c.sent();
|
|
556
|
+
if (!(type === 'and')) return [3 /*break*/, 6];
|
|
557
|
+
actualPredicateIndexes = predicateIndexes.filter(function (i) { return i.index && i.predicate.operator === 'eq'; });
|
|
558
|
+
if (!(actualPredicateIndexes.length > 0)) return [3 /*break*/, 3];
|
|
559
|
+
predicateIndex = actualPredicateIndexes[0];
|
|
560
|
+
return [4 /*yield*/, predicateIndex.index.getAll(predicateIndex.predicate.operand)];
|
|
561
|
+
case 2:
|
|
562
|
+
candidateResults = (_c.sent());
|
|
563
|
+
return [3 /*break*/, 5];
|
|
564
|
+
case 3: return [4 /*yield*/, this.getAll(storeName)];
|
|
565
|
+
case 4:
|
|
566
|
+
// no usable indexes
|
|
567
|
+
candidateResults = (_c.sent());
|
|
568
|
+
_c.label = 5;
|
|
569
|
+
case 5: return [3 /*break*/, 20];
|
|
570
|
+
case 6:
|
|
571
|
+
if (!(type === 'or')) return [3 /*break*/, 18];
|
|
572
|
+
if (!(predicateIndexes.length > 0 &&
|
|
573
|
+
predicateIndexes.every(function (i) { return i.index && i.predicate.operator === 'eq'; }))) return [3 /*break*/, 15];
|
|
574
|
+
distinctResults = new Map();
|
|
575
|
+
_c.label = 7;
|
|
576
|
+
case 7:
|
|
577
|
+
_c.trys.push([7, 12, 13, 14]);
|
|
578
|
+
predicateIndexes_1 = tslib_1.__values(predicateIndexes), predicateIndexes_1_1 = predicateIndexes_1.next();
|
|
579
|
+
_c.label = 8;
|
|
580
|
+
case 8:
|
|
581
|
+
if (!!predicateIndexes_1_1.done) return [3 /*break*/, 11];
|
|
582
|
+
predicateIndex = predicateIndexes_1_1.value;
|
|
583
|
+
return [4 /*yield*/, predicateIndex.index.getAll(predicateIndex.predicate.operand)];
|
|
584
|
+
case 9:
|
|
585
|
+
resultGroup = (_c.sent());
|
|
586
|
+
try {
|
|
587
|
+
for (resultGroup_1 = (e_6 = void 0, tslib_1.__values(resultGroup)), resultGroup_1_1 = resultGroup_1.next(); !resultGroup_1_1.done; resultGroup_1_1 = resultGroup_1.next()) {
|
|
588
|
+
item = resultGroup_1_1.value;
|
|
589
|
+
// TODO: custom PK
|
|
590
|
+
distinctResults.set(item.id, item);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
594
|
+
finally {
|
|
595
|
+
try {
|
|
596
|
+
if (resultGroup_1_1 && !resultGroup_1_1.done && (_b = resultGroup_1.return)) _b.call(resultGroup_1);
|
|
597
|
+
}
|
|
598
|
+
finally { if (e_6) throw e_6.error; }
|
|
599
|
+
}
|
|
600
|
+
_c.label = 10;
|
|
601
|
+
case 10:
|
|
602
|
+
predicateIndexes_1_1 = predicateIndexes_1.next();
|
|
603
|
+
return [3 /*break*/, 8];
|
|
604
|
+
case 11: return [3 /*break*/, 14];
|
|
605
|
+
case 12:
|
|
606
|
+
e_5_1 = _c.sent();
|
|
607
|
+
e_5 = { error: e_5_1 };
|
|
608
|
+
return [3 /*break*/, 14];
|
|
609
|
+
case 13:
|
|
610
|
+
try {
|
|
611
|
+
if (predicateIndexes_1_1 && !predicateIndexes_1_1.done && (_a = predicateIndexes_1.return)) _a.call(predicateIndexes_1);
|
|
612
|
+
}
|
|
613
|
+
finally { if (e_5) throw e_5.error; }
|
|
614
|
+
return [7 /*endfinally*/];
|
|
615
|
+
case 14:
|
|
616
|
+
// we could conceivably check for special conditions and return early here.
|
|
617
|
+
// but, this is simpler and has not yet had a measurable performance impact.
|
|
618
|
+
candidateResults = Array.from(distinctResults.values());
|
|
619
|
+
return [3 /*break*/, 17];
|
|
620
|
+
case 15: return [4 /*yield*/, this.getAll(storeName)];
|
|
621
|
+
case 16:
|
|
622
|
+
// either no usable indexes or not all conditions can use one.
|
|
623
|
+
candidateResults = (_c.sent());
|
|
624
|
+
_c.label = 17;
|
|
625
|
+
case 17: return [3 /*break*/, 20];
|
|
626
|
+
case 18: return [4 /*yield*/, this.getAll(storeName)];
|
|
627
|
+
case 19:
|
|
628
|
+
// nothing intelligent we can do with `not` groups unless or until we start
|
|
629
|
+
// smashing comparison operators against indexes -- at which point we could
|
|
630
|
+
// perform some reversal here.
|
|
631
|
+
candidateResults = (_c.sent());
|
|
632
|
+
_c.label = 20;
|
|
633
|
+
case 20:
|
|
684
634
|
filtered = predicateObjs
|
|
685
|
-
?
|
|
686
|
-
:
|
|
635
|
+
? candidateResults.filter(function (m) { return util_1.validatePredicate(m, type, predicateObjs); })
|
|
636
|
+
: candidateResults;
|
|
687
637
|
return [2 /*return*/, filtered];
|
|
688
638
|
}
|
|
689
639
|
});
|
|
690
640
|
});
|
|
691
641
|
};
|
|
692
642
|
IndexedDBAdapter.prototype.inMemoryPagination = function (records, pagination) {
|
|
693
|
-
|
|
694
|
-
if (pagination.sort) {
|
|
695
|
-
var sortPredicates = predicates_1.ModelSortPredicateCreator.getPredicates(pagination.sort);
|
|
696
|
-
if (sortPredicates.length) {
|
|
697
|
-
var compareFn = util_1.sortCompareFunction(sortPredicates);
|
|
698
|
-
records.sort(compareFn);
|
|
699
|
-
}
|
|
700
|
-
}
|
|
701
|
-
var _a = pagination.page, page = _a === void 0 ? 0 : _a, _b = pagination.limit, limit = _b === void 0 ? 0 : _b;
|
|
702
|
-
var start = Math.max(0, page * limit) || 0;
|
|
703
|
-
var end = limit > 0 ? start + limit : records.length;
|
|
704
|
-
return records.slice(start, end);
|
|
705
|
-
}
|
|
706
|
-
return records;
|
|
643
|
+
return util_1.inMemoryPagination(records, pagination);
|
|
707
644
|
};
|
|
708
645
|
IndexedDBAdapter.prototype.enginePagination = function (storeName, pagination) {
|
|
709
646
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
@@ -775,12 +712,12 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
775
712
|
};
|
|
776
713
|
IndexedDBAdapter.prototype.delete = function (modelOrModelConstructor, condition) {
|
|
777
714
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
778
|
-
var deleteQueue, modelConstructor, nameSpace, storeName, models, relations, deletedModels, deletedModels, model, modelConstructor, namespaceName, storeName, tx, store, keyValues, fromDB, msg, predicates, predicateObjs, type, isValid, msg, relations, relations, deletedModels;
|
|
779
|
-
return tslib_1.__generator(this, function (
|
|
780
|
-
switch (
|
|
715
|
+
var deleteQueue, modelConstructor, nameSpace, storeName, models, relations, deletedModels, deletedModels, model, modelConstructor, namespaceName, storeName, tx, store, keyValues, fromDB, msg, predicates, _a, predicateObjs, type, isValid, msg, relations, relations, deletedModels;
|
|
716
|
+
return tslib_1.__generator(this, function (_b) {
|
|
717
|
+
switch (_b.label) {
|
|
781
718
|
case 0: return [4 /*yield*/, this.checkPrivate()];
|
|
782
719
|
case 1:
|
|
783
|
-
|
|
720
|
+
_b.sent();
|
|
784
721
|
deleteQueue = [];
|
|
785
722
|
if (!util_1.isModelConstructor(modelOrModelConstructor)) return [3 /*break*/, 9];
|
|
786
723
|
modelConstructor = modelOrModelConstructor;
|
|
@@ -788,16 +725,16 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
788
725
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
789
726
|
return [4 /*yield*/, this.query(modelConstructor, condition)];
|
|
790
727
|
case 2:
|
|
791
|
-
models =
|
|
728
|
+
models = _b.sent();
|
|
792
729
|
relations = this.schema.namespaces[nameSpace].relationships[modelConstructor.name]
|
|
793
730
|
.relationTypes;
|
|
794
731
|
if (!(condition !== undefined)) return [3 /*break*/, 5];
|
|
795
732
|
return [4 /*yield*/, this.deleteTraverse(relations, models, modelConstructor.name, nameSpace, deleteQueue)];
|
|
796
733
|
case 3:
|
|
797
|
-
|
|
734
|
+
_b.sent();
|
|
798
735
|
return [4 /*yield*/, this.deleteItem(deleteQueue)];
|
|
799
736
|
case 4:
|
|
800
|
-
|
|
737
|
+
_b.sent();
|
|
801
738
|
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
802
739
|
var items = _a.items;
|
|
803
740
|
return acc.concat(items);
|
|
@@ -805,7 +742,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
805
742
|
return [2 /*return*/, [models, deletedModels]];
|
|
806
743
|
case 5: return [4 /*yield*/, this.deleteTraverse(relations, models, modelConstructor.name, nameSpace, deleteQueue)];
|
|
807
744
|
case 6:
|
|
808
|
-
|
|
745
|
+
_b.sent();
|
|
809
746
|
// Delete all
|
|
810
747
|
return [4 /*yield*/, this.db
|
|
811
748
|
.transaction([storeName], 'readwrite')
|
|
@@ -813,7 +750,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
813
750
|
.clear()];
|
|
814
751
|
case 7:
|
|
815
752
|
// Delete all
|
|
816
|
-
|
|
753
|
+
_b.sent();
|
|
817
754
|
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
818
755
|
var items = _a.items;
|
|
819
756
|
return acc.concat(items);
|
|
@@ -832,14 +769,14 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
832
769
|
keyValues = this.getIndexKeyValuesFromModel(model);
|
|
833
770
|
return [4 /*yield*/, this._get(store, keyValues)];
|
|
834
771
|
case 10:
|
|
835
|
-
fromDB =
|
|
772
|
+
fromDB = _b.sent();
|
|
836
773
|
if (fromDB === undefined) {
|
|
837
774
|
msg = 'Model instance not found in storage';
|
|
838
775
|
logger.warn(msg, { model: model });
|
|
839
776
|
return [2 /*return*/, [[model], []]];
|
|
840
777
|
}
|
|
841
778
|
predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
|
|
842
|
-
predicateObjs =
|
|
779
|
+
_a = predicates, predicateObjs = _a.predicates, type = _a.type;
|
|
843
780
|
isValid = util_1.validatePredicate(fromDB, type, predicateObjs);
|
|
844
781
|
if (!isValid) {
|
|
845
782
|
msg = 'Conditional update failed';
|
|
@@ -848,21 +785,21 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
848
785
|
}
|
|
849
786
|
return [4 /*yield*/, tx.done];
|
|
850
787
|
case 11:
|
|
851
|
-
|
|
788
|
+
_b.sent();
|
|
852
789
|
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
853
790
|
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
854
791
|
case 12:
|
|
855
|
-
|
|
792
|
+
_b.sent();
|
|
856
793
|
return [3 /*break*/, 15];
|
|
857
794
|
case 13:
|
|
858
795
|
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
859
796
|
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
860
797
|
case 14:
|
|
861
|
-
|
|
862
|
-
|
|
798
|
+
_b.sent();
|
|
799
|
+
_b.label = 15;
|
|
863
800
|
case 15: return [4 /*yield*/, this.deleteItem(deleteQueue)];
|
|
864
801
|
case 16:
|
|
865
|
-
|
|
802
|
+
_b.sent();
|
|
866
803
|
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
867
804
|
var items = _a.items;
|
|
868
805
|
return acc.concat(items);
|
|
@@ -874,37 +811,36 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
874
811
|
});
|
|
875
812
|
};
|
|
876
813
|
IndexedDBAdapter.prototype.deleteItem = function (deleteQueue) {
|
|
877
|
-
var deleteQueue_1, deleteQueue_1_1;
|
|
878
814
|
var e_7, _a, e_8, _b;
|
|
879
815
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
880
|
-
var connectionStoreNames, tx, deleteItem, storeName, items, store, items_1, items_1_1, item, key, keyValues, itemKey, e_8_1, e_7_1;
|
|
881
|
-
return tslib_1.__generator(this, function (
|
|
882
|
-
switch (
|
|
816
|
+
var connectionStoreNames, tx, _c, _d, deleteItem, storeName, items, store, items_1, items_1_1, item, key, keyValues, itemKey, e_8_1, e_7_1;
|
|
817
|
+
return tslib_1.__generator(this, function (_e) {
|
|
818
|
+
switch (_e.label) {
|
|
883
819
|
case 0:
|
|
884
820
|
connectionStoreNames = deleteQueue.map(function (_a) {
|
|
885
821
|
var storeName = _a.storeName;
|
|
886
822
|
return storeName;
|
|
887
823
|
});
|
|
888
824
|
tx = this.db.transaction(tslib_1.__spread(connectionStoreNames), 'readwrite');
|
|
889
|
-
|
|
825
|
+
_e.label = 1;
|
|
890
826
|
case 1:
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
case 2: return [4 /*yield*/,
|
|
827
|
+
_e.trys.push([1, 22, 23, 28]);
|
|
828
|
+
_c = tslib_1.__asyncValues(deleteQueue);
|
|
829
|
+
_e.label = 2;
|
|
830
|
+
case 2: return [4 /*yield*/, _c.next()];
|
|
895
831
|
case 3:
|
|
896
|
-
if (!(
|
|
897
|
-
deleteItem =
|
|
832
|
+
if (!(_d = _e.sent(), !_d.done)) return [3 /*break*/, 21];
|
|
833
|
+
deleteItem = _d.value;
|
|
898
834
|
storeName = deleteItem.storeName, items = deleteItem.items;
|
|
899
835
|
store = tx.objectStore(storeName);
|
|
900
|
-
|
|
836
|
+
_e.label = 4;
|
|
901
837
|
case 4:
|
|
902
|
-
|
|
838
|
+
_e.trys.push([4, 14, 15, 20]);
|
|
903
839
|
items_1 = tslib_1.__asyncValues(items);
|
|
904
|
-
|
|
840
|
+
_e.label = 5;
|
|
905
841
|
case 5: return [4 /*yield*/, items_1.next()];
|
|
906
842
|
case 6:
|
|
907
|
-
if (!(items_1_1 =
|
|
843
|
+
if (!(items_1_1 = _e.sent(), !items_1_1.done)) return [3 /*break*/, 13];
|
|
908
844
|
item = items_1_1.value;
|
|
909
845
|
if (!item) return [3 /*break*/, 12];
|
|
910
846
|
key = void 0;
|
|
@@ -914,33 +850,33 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
914
850
|
.index('byPk')
|
|
915
851
|
.getKey(this.canonicalKeyPath(keyValues))];
|
|
916
852
|
case 7:
|
|
917
|
-
key =
|
|
853
|
+
key = _e.sent();
|
|
918
854
|
return [3 /*break*/, 10];
|
|
919
855
|
case 8:
|
|
920
856
|
itemKey = item.toString();
|
|
921
857
|
return [4 /*yield*/, store.index('byPk').getKey(itemKey)];
|
|
922
858
|
case 9:
|
|
923
|
-
key =
|
|
924
|
-
|
|
859
|
+
key = _e.sent();
|
|
860
|
+
_e.label = 10;
|
|
925
861
|
case 10:
|
|
926
862
|
if (!(key !== undefined)) return [3 /*break*/, 12];
|
|
927
863
|
return [4 /*yield*/, store.delete(key)];
|
|
928
864
|
case 11:
|
|
929
|
-
|
|
930
|
-
|
|
865
|
+
_e.sent();
|
|
866
|
+
_e.label = 12;
|
|
931
867
|
case 12: return [3 /*break*/, 5];
|
|
932
868
|
case 13: return [3 /*break*/, 20];
|
|
933
869
|
case 14:
|
|
934
|
-
e_8_1 =
|
|
870
|
+
e_8_1 = _e.sent();
|
|
935
871
|
e_8 = { error: e_8_1 };
|
|
936
872
|
return [3 /*break*/, 20];
|
|
937
873
|
case 15:
|
|
938
|
-
|
|
874
|
+
_e.trys.push([15, , 18, 19]);
|
|
939
875
|
if (!(items_1_1 && !items_1_1.done && (_b = items_1.return))) return [3 /*break*/, 17];
|
|
940
876
|
return [4 /*yield*/, _b.call(items_1)];
|
|
941
877
|
case 16:
|
|
942
|
-
|
|
943
|
-
|
|
878
|
+
_e.sent();
|
|
879
|
+
_e.label = 17;
|
|
944
880
|
case 17: return [3 /*break*/, 19];
|
|
945
881
|
case 18:
|
|
946
882
|
if (e_8) throw e_8.error;
|
|
@@ -949,16 +885,16 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
949
885
|
case 20: return [3 /*break*/, 2];
|
|
950
886
|
case 21: return [3 /*break*/, 28];
|
|
951
887
|
case 22:
|
|
952
|
-
e_7_1 =
|
|
888
|
+
e_7_1 = _e.sent();
|
|
953
889
|
e_7 = { error: e_7_1 };
|
|
954
890
|
return [3 /*break*/, 28];
|
|
955
891
|
case 23:
|
|
956
|
-
|
|
957
|
-
if (!(
|
|
958
|
-
return [4 /*yield*/, _a.call(
|
|
892
|
+
_e.trys.push([23, , 26, 27]);
|
|
893
|
+
if (!(_d && !_d.done && (_a = _c.return))) return [3 /*break*/, 25];
|
|
894
|
+
return [4 /*yield*/, _a.call(_c)];
|
|
959
895
|
case 24:
|
|
960
|
-
|
|
961
|
-
|
|
896
|
+
_e.sent();
|
|
897
|
+
_e.label = 25;
|
|
962
898
|
case 25: return [3 /*break*/, 27];
|
|
963
899
|
case 26:
|
|
964
900
|
if (e_7) throw e_7.error;
|
|
@@ -970,7 +906,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
970
906
|
});
|
|
971
907
|
};
|
|
972
908
|
IndexedDBAdapter.prototype.deleteTraverse = function (relations, models, srcModel, nameSpace, deleteQueue) {
|
|
973
|
-
var
|
|
909
|
+
var relations_1, relations_1_1, models_1, models_1_1, models_2, models_2_1;
|
|
974
910
|
var e_9, _a, e_10, _b, e_11, _c;
|
|
975
911
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
976
912
|
var rel, relationType, modelName, targetName, targetNames, associatedWith, storeName, _d, model, hasOneIndex, values, recordToDelete, index, values, value, recordToDelete, e_10_1, model, index, keyValues, childrenArray, e_11_1, e_9_1;
|
|
@@ -979,12 +915,12 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
979
915
|
switch (_e.label) {
|
|
980
916
|
case 0:
|
|
981
917
|
_e.trys.push([0, 38, 39, 44]);
|
|
982
|
-
|
|
918
|
+
relations_1 = tslib_1.__asyncValues(relations);
|
|
983
919
|
_e.label = 1;
|
|
984
|
-
case 1: return [4 /*yield*/,
|
|
920
|
+
case 1: return [4 /*yield*/, relations_1.next()];
|
|
985
921
|
case 2:
|
|
986
|
-
if (!(
|
|
987
|
-
rel =
|
|
922
|
+
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
|
|
923
|
+
rel = relations_1_1.value;
|
|
988
924
|
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
|
|
989
925
|
storeName = util_1.getStorename(nameSpace, modelName);
|
|
990
926
|
_d = relationType;
|
|
@@ -1119,9 +1055,7 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
1119
1055
|
case 34:
|
|
1120
1056
|
// Intentionally blank
|
|
1121
1057
|
return [3 /*break*/, 36];
|
|
1122
|
-
case 35:
|
|
1123
|
-
util_1.exhaustiveCheck(relationType);
|
|
1124
|
-
return [3 /*break*/, 36];
|
|
1058
|
+
case 35: throw new Error("Invalid relation type " + relationType);
|
|
1125
1059
|
case 36: return [3 /*break*/, 1];
|
|
1126
1060
|
case 37: return [3 /*break*/, 44];
|
|
1127
1061
|
case 38:
|
|
@@ -1130,8 +1064,8 @@ var IndexedDBAdapter = /** @class */ (function () {
|
|
|
1130
1064
|
return [3 /*break*/, 44];
|
|
1131
1065
|
case 39:
|
|
1132
1066
|
_e.trys.push([39, , 42, 43]);
|
|
1133
|
-
if (!(
|
|
1134
|
-
return [4 /*yield*/, _a.call(
|
|
1067
|
+
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
|
|
1068
|
+
return [4 /*yield*/, _a.call(relations_1)];
|
|
1135
1069
|
case 40:
|
|
1136
1070
|
_e.sent();
|
|
1137
1071
|
_e.label = 41;
|