@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.
Files changed (151) hide show
  1. package/lib/authModeStrategies/defaultAuthStrategy.d.ts +2 -0
  2. package/lib/authModeStrategies/index.d.ts +2 -0
  3. package/lib/authModeStrategies/multiAuthStrategy.d.ts +13 -0
  4. package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
  5. package/lib/datastore/datastore.d.ts +207 -0
  6. package/lib/datastore/datastore.js +641 -144
  7. package/lib/datastore/datastore.js.map +1 -1
  8. package/lib/index.d.ts +16 -0
  9. package/lib/index.js +4 -0
  10. package/lib/index.js.map +1 -1
  11. package/lib/predicates/index.d.ts +30 -0
  12. package/lib/predicates/index.js +127 -6
  13. package/lib/predicates/index.js.map +1 -1
  14. package/lib/predicates/next.d.ts +342 -0
  15. package/lib/predicates/next.js +801 -0
  16. package/lib/predicates/next.js.map +1 -0
  17. package/lib/predicates/sort.d.ts +8 -0
  18. package/lib/predicates/sort.js +10 -4
  19. package/lib/predicates/sort.js.map +1 -1
  20. package/lib/ssr/index.d.ts +3 -0
  21. package/lib/storage/adapter/AsyncStorageAdapter.d.ts +42 -0
  22. package/lib/storage/adapter/AsyncStorageAdapter.js +106 -293
  23. package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
  24. package/lib/storage/adapter/AsyncStorageDatabase.d.ts +39 -0
  25. package/lib/storage/adapter/AsyncStorageDatabase.js +6 -5
  26. package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
  27. package/lib/storage/adapter/InMemoryStore.d.ts +11 -0
  28. package/lib/storage/adapter/InMemoryStore.js.map +1 -1
  29. package/lib/storage/adapter/InMemoryStore.native.d.ts +1 -0
  30. package/lib/storage/adapter/IndexedDBAdapter.d.ts +61 -0
  31. package/lib/storage/adapter/IndexedDBAdapter.js +223 -289
  32. package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
  33. package/lib/storage/adapter/getDefaultAdapter/index.d.ts +3 -0
  34. package/lib/storage/adapter/getDefaultAdapter/index.js.map +1 -1
  35. package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +3 -0
  36. package/lib/storage/adapter/index.d.ts +9 -0
  37. package/lib/storage/relationship.d.ts +140 -0
  38. package/lib/storage/relationship.js +335 -0
  39. package/lib/storage/relationship.js.map +1 -0
  40. package/lib/storage/storage.d.ts +50 -0
  41. package/lib/storage/storage.js +32 -16
  42. package/lib/storage/storage.js.map +1 -1
  43. package/lib/sync/datastoreConnectivity.d.ts +16 -0
  44. package/lib/sync/datastoreConnectivity.js.map +1 -1
  45. package/lib/sync/datastoreReachability/index.d.ts +3 -0
  46. package/lib/sync/datastoreReachability/index.native.d.ts +3 -0
  47. package/lib/sync/index.d.ts +89 -0
  48. package/lib/sync/index.js +2 -8
  49. package/lib/sync/index.js.map +1 -1
  50. package/lib/sync/merger.d.ts +17 -0
  51. package/lib/sync/merger.js.map +1 -1
  52. package/lib/sync/outbox.d.ts +27 -0
  53. package/lib/sync/outbox.js.map +1 -1
  54. package/lib/sync/processors/errorMaps.d.ts +17 -0
  55. package/lib/sync/processors/errorMaps.js +1 -1
  56. package/lib/sync/processors/errorMaps.js.map +1 -1
  57. package/lib/sync/processors/mutation.d.ts +58 -0
  58. package/lib/sync/processors/mutation.js +9 -6
  59. package/lib/sync/processors/mutation.js.map +1 -1
  60. package/lib/sync/processors/subscription.d.ts +33 -0
  61. package/lib/sync/processors/subscription.js +4 -1
  62. package/lib/sync/processors/subscription.js.map +1 -1
  63. package/lib/sync/processors/sync.d.ts +28 -0
  64. package/lib/sync/processors/sync.js.map +1 -1
  65. package/lib/sync/utils.d.ts +42 -0
  66. package/lib/sync/utils.js +30 -31
  67. package/lib/sync/utils.js.map +1 -1
  68. package/lib/types.d.ts +553 -0
  69. package/lib/types.js +6 -1
  70. package/lib/types.js.map +1 -1
  71. package/lib/util.d.ts +189 -0
  72. package/lib/util.js +174 -104
  73. package/lib/util.js.map +1 -1
  74. package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
  75. package/lib-esm/datastore/datastore.d.ts +59 -8
  76. package/lib-esm/datastore/datastore.js +643 -147
  77. package/lib-esm/datastore/datastore.js.map +1 -1
  78. package/lib-esm/index.d.ts +3 -2
  79. package/lib-esm/index.js +2 -1
  80. package/lib-esm/index.js.map +1 -1
  81. package/lib-esm/predicates/index.d.ts +16 -2
  82. package/lib-esm/predicates/index.js +128 -7
  83. package/lib-esm/predicates/index.js.map +1 -1
  84. package/lib-esm/predicates/next.d.ts +342 -0
  85. package/lib-esm/predicates/next.js +797 -0
  86. package/lib-esm/predicates/next.js.map +1 -0
  87. package/lib-esm/predicates/sort.js +10 -4
  88. package/lib-esm/predicates/sort.js.map +1 -1
  89. package/lib-esm/storage/adapter/AsyncStorageAdapter.d.ts +2 -1
  90. package/lib-esm/storage/adapter/AsyncStorageAdapter.js +108 -295
  91. package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
  92. package/lib-esm/storage/adapter/AsyncStorageDatabase.js +6 -5
  93. package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
  94. package/lib-esm/storage/adapter/InMemoryStore.d.ts +1 -1
  95. package/lib-esm/storage/adapter/InMemoryStore.js.map +1 -1
  96. package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +4 -2
  97. package/lib-esm/storage/adapter/IndexedDBAdapter.js +226 -292
  98. package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
  99. package/lib-esm/storage/adapter/getDefaultAdapter/index.js.map +1 -1
  100. package/lib-esm/storage/relationship.d.ts +140 -0
  101. package/lib-esm/storage/relationship.js +333 -0
  102. package/lib-esm/storage/relationship.js.map +1 -0
  103. package/lib-esm/storage/storage.d.ts +7 -6
  104. package/lib-esm/storage/storage.js +32 -16
  105. package/lib-esm/storage/storage.js.map +1 -1
  106. package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
  107. package/lib-esm/sync/index.js +3 -9
  108. package/lib-esm/sync/index.js.map +1 -1
  109. package/lib-esm/sync/merger.js.map +1 -1
  110. package/lib-esm/sync/outbox.js.map +1 -1
  111. package/lib-esm/sync/processors/errorMaps.js +1 -1
  112. package/lib-esm/sync/processors/errorMaps.js.map +1 -1
  113. package/lib-esm/sync/processors/mutation.js +10 -7
  114. package/lib-esm/sync/processors/mutation.js.map +1 -1
  115. package/lib-esm/sync/processors/subscription.js +4 -1
  116. package/lib-esm/sync/processors/subscription.js.map +1 -1
  117. package/lib-esm/sync/processors/sync.js.map +1 -1
  118. package/lib-esm/sync/utils.d.ts +1 -1
  119. package/lib-esm/sync/utils.js +31 -32
  120. package/lib-esm/sync/utils.js.map +1 -1
  121. package/lib-esm/types.d.ts +59 -7
  122. package/lib-esm/types.js +6 -2
  123. package/lib-esm/types.js.map +1 -1
  124. package/lib-esm/util.d.ts +39 -6
  125. package/lib-esm/util.js +170 -104
  126. package/lib-esm/util.js.map +1 -1
  127. package/package.json +14 -11
  128. package/src/authModeStrategies/multiAuthStrategy.ts +1 -1
  129. package/src/datastore/datastore.ts +680 -204
  130. package/src/index.ts +4 -0
  131. package/src/predicates/index.ts +143 -17
  132. package/src/predicates/next.ts +1016 -0
  133. package/src/predicates/sort.ts +8 -2
  134. package/src/storage/adapter/AsyncStorageAdapter.ts +56 -178
  135. package/src/storage/adapter/AsyncStorageDatabase.ts +16 -15
  136. package/src/storage/adapter/InMemoryStore.ts +5 -2
  137. package/src/storage/adapter/IndexedDBAdapter.ts +166 -191
  138. package/src/storage/adapter/getDefaultAdapter/index.ts +2 -2
  139. package/src/storage/relationship.ts +272 -0
  140. package/src/storage/storage.ts +56 -37
  141. package/src/sync/datastoreConnectivity.ts +4 -4
  142. package/src/sync/index.ts +22 -28
  143. package/src/sync/merger.ts +1 -1
  144. package/src/sync/outbox.ts +6 -6
  145. package/src/sync/processors/errorMaps.ts +1 -1
  146. package/src/sync/processors/mutation.ts +22 -17
  147. package/src/sync/processors/subscription.ts +19 -15
  148. package/src/sync/processors/sync.ts +16 -16
  149. package/src/sync/utils.ts +42 -48
  150. package/src/types.ts +116 -11
  151. 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 (_b) {
285
- switch (_b.label) {
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
- _b.sent();
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 = _b.sent();
307
+ fromDB = _c.sent();
308
308
  if (condition && fromDB) {
309
309
  predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
310
- predicateObjs = predicates.predicates, type = predicates.type;
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
- _b.label = 3;
319
+ _c.label = 3;
320
320
  case 3:
321
- _b.trys.push([3, 11, 12, 17]);
321
+ _c.trys.push([3, 11, 12, 17]);
322
322
  connectionStoreNames_1 = tslib_1.__asyncValues(connectionStoreNames);
323
- _b.label = 4;
323
+ _c.label = 4;
324
324
  case 4: return [4 /*yield*/, connectionStoreNames_1.next()];
325
325
  case 5:
326
- if (!(connectionStoreNames_1_1 = _b.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 10];
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 = _b.sent();
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 = _b.sent();
345
+ key = _c.sent();
346
346
  return [4 /*yield*/, store_1.put(item, key)];
347
347
  case 8:
348
- _b.sent();
348
+ _c.sent();
349
349
  result.push([instance, opType]);
350
- _b.label = 9;
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 = _b.sent();
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
- _b.trys.push([12, , 15, 16]);
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
- _b.sent();
363
- _b.label = 14;
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
- _b.sent();
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, tx, relations_1, relations_1_1, relation, fieldName, modelName, targetName, targetNames, storeName, store, modelConstructor_1, _d, recordItem, getByFields, allPresent, keys, connectionRecord, getByfield, key, connectionRecord, e_4_1, recordItem, allPresent, keys, connectionRecord, key, connectionRecord, e_5_1, e_3_1;
379
+ var namespace, relations, connectionStoreNames, modelConstructor;
382
380
  var _this = this;
383
- return tslib_1.__generator(this, function (_e) {
384
- switch (_e.label) {
385
- case 0:
386
- namespace = this.schema.namespaces[namespaceName];
387
- relations = namespace.relationships[srcModelName].relationTypes;
388
- connectionStoreNames = relations.map(function (_a) {
389
- var modelName = _a.modelName;
390
- return util_1.getStorename(namespaceName, modelName);
391
- });
392
- modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
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 e_6, _a;
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 (e_6_1) { e_6 = { error: e_6_1 }; }
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 (e_6) throw e_6.error; }
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, all, filtered;
677
- return tslib_1.__generator(this, function (_a) {
678
- switch (_a.label) {
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
- return [4 /*yield*/, this.getAll(storeName)];
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
- all = _a.sent();
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
- ? all.filter(function (m) { return util_1.validatePredicate(m, type, predicateObjs); })
686
- : all;
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
- if (pagination && records.length > 1) {
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 (_a) {
780
- switch (_a.label) {
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
- _a.sent();
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 = _a.sent();
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
- _a.sent();
734
+ _b.sent();
798
735
  return [4 /*yield*/, this.deleteItem(deleteQueue)];
799
736
  case 4:
800
- _a.sent();
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
- _a.sent();
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
- _a.sent();
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 = _a.sent();
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 = predicates.predicates, type = predicates.type;
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
- _a.sent();
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
- _a.sent();
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
- _a.sent();
862
- _a.label = 15;
798
+ _b.sent();
799
+ _b.label = 15;
863
800
  case 15: return [4 /*yield*/, this.deleteItem(deleteQueue)];
864
801
  case 16:
865
- _a.sent();
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 (_c) {
882
- switch (_c.label) {
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
- _c.label = 1;
825
+ _e.label = 1;
890
826
  case 1:
891
- _c.trys.push([1, 22, 23, 28]);
892
- deleteQueue_1 = tslib_1.__asyncValues(deleteQueue);
893
- _c.label = 2;
894
- case 2: return [4 /*yield*/, deleteQueue_1.next()];
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 (!(deleteQueue_1_1 = _c.sent(), !deleteQueue_1_1.done)) return [3 /*break*/, 21];
897
- deleteItem = deleteQueue_1_1.value;
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
- _c.label = 4;
836
+ _e.label = 4;
901
837
  case 4:
902
- _c.trys.push([4, 14, 15, 20]);
838
+ _e.trys.push([4, 14, 15, 20]);
903
839
  items_1 = tslib_1.__asyncValues(items);
904
- _c.label = 5;
840
+ _e.label = 5;
905
841
  case 5: return [4 /*yield*/, items_1.next()];
906
842
  case 6:
907
- if (!(items_1_1 = _c.sent(), !items_1_1.done)) return [3 /*break*/, 13];
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 = _c.sent();
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 = _c.sent();
924
- _c.label = 10;
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
- _c.sent();
930
- _c.label = 12;
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 = _c.sent();
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
- _c.trys.push([15, , 18, 19]);
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
- _c.sent();
943
- _c.label = 17;
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 = _c.sent();
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
- _c.trys.push([23, , 26, 27]);
957
- if (!(deleteQueue_1_1 && !deleteQueue_1_1.done && (_a = deleteQueue_1.return))) return [3 /*break*/, 25];
958
- return [4 /*yield*/, _a.call(deleteQueue_1)];
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
- _c.sent();
961
- _c.label = 25;
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 relations_2, relations_2_1, models_1, models_1_1, models_2, models_2_1;
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
- relations_2 = tslib_1.__asyncValues(relations);
918
+ relations_1 = tslib_1.__asyncValues(relations);
983
919
  _e.label = 1;
984
- case 1: return [4 /*yield*/, relations_2.next()];
920
+ case 1: return [4 /*yield*/, relations_1.next()];
985
921
  case 2:
986
- if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/, 37];
987
- rel = relations_2_1.value;
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 (!(relations_2_1 && !relations_2_1.done && (_a = relations_2.return))) return [3 /*break*/, 41];
1134
- return [4 /*yield*/, _a.call(relations_2)];
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;