@aws-amplify/datastore 3.14.5-unstable.2 → 3.14.5

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 (178) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/build.js +5 -0
  3. package/dist/aws-amplify-datastore.js +92853 -0
  4. package/dist/aws-amplify-datastore.js.map +1 -0
  5. package/dist/aws-amplify-datastore.min.js +65 -0
  6. package/dist/aws-amplify-datastore.min.js.map +1 -0
  7. package/index.js +7 -0
  8. package/lib/authModeStrategies/multiAuthStrategy.js +64 -6
  9. package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
  10. package/lib/datastore/datastore.js +297 -703
  11. package/lib/datastore/datastore.js.map +1 -1
  12. package/lib/index.js +4 -6
  13. package/lib/index.js.map +1 -1
  14. package/lib/predicates/index.js +6 -127
  15. package/lib/predicates/index.js.map +1 -1
  16. package/lib/predicates/sort.js +4 -10
  17. package/lib/predicates/sort.js.map +1 -1
  18. package/lib/storage/adapter/AsyncStorageAdapter.js +381 -138
  19. package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
  20. package/lib/storage/adapter/AsyncStorageDatabase.js +98 -37
  21. package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
  22. package/lib/storage/adapter/InMemoryStore.js +67 -16
  23. package/lib/storage/adapter/InMemoryStore.js.map +1 -1
  24. package/lib/storage/adapter/InMemoryStore.native.js +4 -2
  25. package/lib/storage/adapter/InMemoryStore.native.js.map +1 -1
  26. package/lib/storage/adapter/IndexedDBAdapter.js +420 -272
  27. package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
  28. package/lib/storage/adapter/getDefaultAdapter/index.js +5 -3
  29. package/lib/storage/adapter/getDefaultAdapter/index.js.map +1 -1
  30. package/lib/storage/adapter/getDefaultAdapter/index.native.js +4 -2
  31. package/lib/storage/adapter/getDefaultAdapter/index.native.js.map +1 -1
  32. package/lib/storage/storage.js +143 -72
  33. package/lib/storage/storage.js.map +1 -1
  34. package/lib/sync/datastoreConnectivity.js +55 -6
  35. package/lib/sync/datastoreConnectivity.js.map +1 -1
  36. package/lib/sync/datastoreReachability/index.native.js +4 -2
  37. package/lib/sync/datastoreReachability/index.native.js.map +1 -1
  38. package/lib/sync/index.js +124 -49
  39. package/lib/sync/index.js.map +1 -1
  40. package/lib/sync/merger.js +74 -8
  41. package/lib/sync/merger.js.map +1 -1
  42. package/lib/sync/outbox.js +97 -24
  43. package/lib/sync/outbox.js.map +1 -1
  44. package/lib/sync/processors/errorMaps.js +35 -5
  45. package/lib/sync/processors/errorMaps.js.map +1 -1
  46. package/lib/sync/processors/mutation.js +131 -47
  47. package/lib/sync/processors/mutation.js.map +1 -1
  48. package/lib/sync/processors/subscription.js +102 -29
  49. package/lib/sync/processors/subscription.js.map +1 -1
  50. package/lib/sync/processors/sync.js +102 -26
  51. package/lib/sync/processors/sync.js.map +1 -1
  52. package/lib/sync/utils.js +103 -40
  53. package/lib/sync/utils.js.map +1 -1
  54. package/lib/types.js +39 -9
  55. package/lib/types.js.map +1 -1
  56. package/lib/util.js +188 -192
  57. package/lib/util.js.map +1 -1
  58. package/lib-esm/authModeStrategies/multiAuthStrategy.js +57 -2
  59. package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
  60. package/lib-esm/datastore/datastore.d.ts +8 -59
  61. package/lib-esm/datastore/datastore.js +234 -642
  62. package/lib-esm/datastore/datastore.js.map +1 -1
  63. package/lib-esm/index.d.ts +2 -3
  64. package/lib-esm/index.js +1 -2
  65. package/lib-esm/index.js.map +1 -1
  66. package/lib-esm/predicates/index.d.ts +2 -16
  67. package/lib-esm/predicates/index.js +7 -128
  68. package/lib-esm/predicates/index.js.map +1 -1
  69. package/lib-esm/predicates/sort.js +4 -10
  70. package/lib-esm/predicates/sort.js.map +1 -1
  71. package/lib-esm/storage/adapter/AsyncStorageAdapter.d.ts +1 -2
  72. package/lib-esm/storage/adapter/AsyncStorageAdapter.js +349 -109
  73. package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
  74. package/lib-esm/storage/adapter/AsyncStorageDatabase.js +68 -7
  75. package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
  76. package/lib-esm/storage/adapter/InMemoryStore.d.ts +1 -1
  77. package/lib-esm/storage/adapter/InMemoryStore.js +52 -1
  78. package/lib-esm/storage/adapter/InMemoryStore.js.map +1 -1
  79. package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +2 -4
  80. package/lib-esm/storage/adapter/IndexedDBAdapter.js +368 -227
  81. package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
  82. package/lib-esm/storage/adapter/getDefaultAdapter/index.js.map +1 -1
  83. package/lib-esm/storage/storage.d.ts +6 -7
  84. package/lib-esm/storage/storage.js +101 -33
  85. package/lib-esm/storage/storage.js.map +1 -1
  86. package/lib-esm/sync/datastoreConnectivity.js +47 -1
  87. package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
  88. package/lib-esm/sync/index.js +76 -4
  89. package/lib-esm/sync/index.js.map +1 -1
  90. package/lib-esm/sync/merger.js +67 -1
  91. package/lib-esm/sync/merger.js.map +1 -1
  92. package/lib-esm/sync/outbox.js +74 -1
  93. package/lib-esm/sync/outbox.js.map +1 -1
  94. package/lib-esm/sync/processors/errorMaps.js +32 -2
  95. package/lib-esm/sync/processors/errorMaps.js.map +1 -1
  96. package/lib-esm/sync/processors/mutation.js +93 -12
  97. package/lib-esm/sync/processors/mutation.js.map +1 -1
  98. package/lib-esm/sync/processors/subscription.js +69 -6
  99. package/lib-esm/sync/processors/subscription.js.map +1 -1
  100. package/lib-esm/sync/processors/sync.js +75 -2
  101. package/lib-esm/sync/processors/sync.js.map +1 -1
  102. package/lib-esm/sync/utils.d.ts +1 -1
  103. package/lib-esm/sync/utils.js +95 -32
  104. package/lib-esm/sync/utils.js.map +1 -1
  105. package/lib-esm/types.d.ts +10 -63
  106. package/lib-esm/types.js +38 -7
  107. package/lib-esm/types.js.map +1 -1
  108. package/lib-esm/util.d.ts +6 -39
  109. package/lib-esm/util.js +171 -171
  110. package/lib-esm/util.js.map +1 -1
  111. package/package.json +14 -21
  112. package/src/authModeStrategies/multiAuthStrategy.ts +2 -2
  113. package/src/datastore/datastore.ts +206 -699
  114. package/src/index.ts +0 -4
  115. package/src/predicates/index.ts +17 -143
  116. package/src/predicates/sort.ts +2 -8
  117. package/src/storage/adapter/AsyncStorageAdapter.ts +178 -56
  118. package/src/storage/adapter/AsyncStorageDatabase.ts +15 -16
  119. package/src/storage/adapter/InMemoryStore.ts +2 -5
  120. package/src/storage/adapter/IndexedDBAdapter.ts +191 -166
  121. package/src/storage/adapter/getDefaultAdapter/index.ts +2 -2
  122. package/src/storage/storage.ts +37 -56
  123. package/src/sync/datastoreConnectivity.ts +4 -4
  124. package/src/sync/index.ts +28 -22
  125. package/src/sync/merger.ts +1 -1
  126. package/src/sync/outbox.ts +6 -6
  127. package/src/sync/processors/errorMaps.ts +1 -1
  128. package/src/sync/processors/mutation.ts +19 -23
  129. package/src/sync/processors/subscription.ts +16 -20
  130. package/src/sync/processors/sync.ts +17 -17
  131. package/src/sync/utils.ts +48 -42
  132. package/src/types.ts +16 -128
  133. package/src/util.ts +150 -108
  134. package/webpack.config.dev.js +6 -0
  135. package/lib/authModeStrategies/defaultAuthStrategy.d.ts +0 -2
  136. package/lib/authModeStrategies/index.d.ts +0 -2
  137. package/lib/authModeStrategies/multiAuthStrategy.d.ts +0 -13
  138. package/lib/datastore/datastore.d.ts +0 -207
  139. package/lib/index.d.ts +0 -16
  140. package/lib/predicates/index.d.ts +0 -30
  141. package/lib/predicates/next.d.ts +0 -301
  142. package/lib/predicates/next.js +0 -816
  143. package/lib/predicates/next.js.map +0 -1
  144. package/lib/predicates/sort.d.ts +0 -8
  145. package/lib/ssr/index.d.ts +0 -3
  146. package/lib/storage/adapter/AsyncStorageAdapter.d.ts +0 -42
  147. package/lib/storage/adapter/AsyncStorageDatabase.d.ts +0 -39
  148. package/lib/storage/adapter/InMemoryStore.d.ts +0 -11
  149. package/lib/storage/adapter/InMemoryStore.native.d.ts +0 -1
  150. package/lib/storage/adapter/IndexedDBAdapter.d.ts +0 -61
  151. package/lib/storage/adapter/getDefaultAdapter/index.d.ts +0 -3
  152. package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -3
  153. package/lib/storage/adapter/index.d.ts +0 -9
  154. package/lib/storage/relationship.d.ts +0 -140
  155. package/lib/storage/relationship.js +0 -335
  156. package/lib/storage/relationship.js.map +0 -1
  157. package/lib/storage/storage.d.ts +0 -50
  158. package/lib/sync/datastoreConnectivity.d.ts +0 -16
  159. package/lib/sync/datastoreReachability/index.d.ts +0 -3
  160. package/lib/sync/datastoreReachability/index.native.d.ts +0 -3
  161. package/lib/sync/index.d.ts +0 -89
  162. package/lib/sync/merger.d.ts +0 -17
  163. package/lib/sync/outbox.d.ts +0 -27
  164. package/lib/sync/processors/errorMaps.d.ts +0 -17
  165. package/lib/sync/processors/mutation.d.ts +0 -58
  166. package/lib/sync/processors/subscription.d.ts +0 -33
  167. package/lib/sync/processors/sync.d.ts +0 -28
  168. package/lib/sync/utils.d.ts +0 -42
  169. package/lib/types.d.ts +0 -554
  170. package/lib/util.d.ts +0 -189
  171. package/lib-esm/predicates/next.d.ts +0 -301
  172. package/lib-esm/predicates/next.js +0 -812
  173. package/lib-esm/predicates/next.js.map +0 -1
  174. package/lib-esm/storage/relationship.d.ts +0 -140
  175. package/lib-esm/storage/relationship.js +0 -333
  176. package/lib-esm/storage/relationship.js.map +0 -1
  177. package/src/predicates/next.ts +0 -967
  178. package/src/storage/relationship.ts +0 -272
@@ -1,8 +1,88 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
39
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
40
+ var m = o[Symbol.asyncIterator], i;
41
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
42
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
43
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
44
+ };
45
+ var __read = (this && this.__read) || function (o, n) {
46
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
47
+ if (!m) return o;
48
+ var i = m.call(o), r, ar = [], e;
49
+ try {
50
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
51
+ }
52
+ catch (error) { e = { error: error }; }
53
+ finally {
54
+ try {
55
+ if (r && !r.done && (m = i["return"])) m.call(i);
56
+ }
57
+ finally { if (e) throw e.error; }
58
+ }
59
+ return ar;
60
+ };
61
+ var __values = (this && this.__values) || function(o) {
62
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
63
+ if (m) return m.call(o);
64
+ if (o && typeof o.length === "number") return {
65
+ next: function () {
66
+ if (o && i >= o.length) o = void 0;
67
+ return { value: o && o[i++], done: !o };
68
+ }
69
+ };
70
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
71
+ };
72
+ var __spread = (this && this.__spread) || function () {
73
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
74
+ return ar;
75
+ };
76
+ var __importStar = (this && this.__importStar) || function (mod) {
77
+ if (mod && mod.__esModule) return mod;
78
+ var result = {};
79
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
80
+ result["default"] = mod;
81
+ return result;
82
+ };
2
83
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
84
  var core_1 = require("@aws-amplify/core");
5
- var idb = tslib_1.__importStar(require("idb"));
85
+ var idb = __importStar(require("idb"));
6
86
  var predicates_1 = require("../../predicates");
7
87
  var types_1 = require("../../types");
8
88
  var util_1 = require("../../util");
@@ -42,9 +122,9 @@ var IndexedDBAdapter = /** @class */ (function () {
42
122
  return util_1.extractPrimaryKeyValues(model, keys);
43
123
  };
44
124
  IndexedDBAdapter.prototype.checkPrivate = function () {
45
- return tslib_1.__awaiter(this, void 0, void 0, function () {
125
+ return __awaiter(this, void 0, void 0, function () {
46
126
  var isPrivate;
47
- return tslib_1.__generator(this, function (_a) {
127
+ return __generator(this, function (_a) {
48
128
  switch (_a.label) {
49
129
  case 0: return [4 /*yield*/, util_1.isPrivateMode().then(function (isPrivate) {
50
130
  return isPrivate;
@@ -74,9 +154,9 @@ var IndexedDBAdapter = /** @class */ (function () {
74
154
  * https://github.com/aws-amplify/amplify-js/pull/10527
75
155
  */
76
156
  IndexedDBAdapter.prototype.setSafariCompatabilityMode = function () {
77
- return tslib_1.__awaiter(this, void 0, void 0, function () {
157
+ return __awaiter(this, void 0, void 0, function () {
78
158
  var _a;
79
- return tslib_1.__generator(this, function (_b) {
159
+ return __generator(this, function (_b) {
80
160
  switch (_b.label) {
81
161
  case 0:
82
162
  _a = this;
@@ -92,17 +172,17 @@ var IndexedDBAdapter = /** @class */ (function () {
92
172
  });
93
173
  };
94
174
  IndexedDBAdapter.prototype.getNamespaceAndModelFromStorename = function (storeName) {
95
- var _a = tslib_1.__read(storeName.split('_')), namespaceName = _a[0], modelNameArr = _a.slice(1);
175
+ var _a = __read(storeName.split('_')), namespaceName = _a[0], modelNameArr = _a.slice(1);
96
176
  return {
97
177
  namespaceName: namespaceName,
98
178
  modelName: modelNameArr.join('_'),
99
179
  };
100
180
  };
101
181
  IndexedDBAdapter.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName, sessionId) {
102
- return tslib_1.__awaiter(this, void 0, void 0, function () {
182
+ return __awaiter(this, void 0, void 0, function () {
103
183
  var VERSION, _a, error_1;
104
184
  var _this = this;
105
- return tslib_1.__generator(this, function (_b) {
185
+ return __generator(this, function (_b) {
106
186
  switch (_b.label) {
107
187
  case 0: return [4 /*yield*/, this.checkPrivate()];
108
188
  case 1:
@@ -135,11 +215,11 @@ var IndexedDBAdapter = /** @class */ (function () {
135
215
  VERSION = 3;
136
216
  _a = this;
137
217
  return [4 /*yield*/, idb.openDB(this.dbName, VERSION, {
138
- upgrade: function (db, oldVersion, newVersion, txn) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
218
+ upgrade: function (db, oldVersion, newVersion, txn) { return __awaiter(_this, void 0, void 0, function () {
139
219
  var _a, _b, storeName, origStore, tmpName, _c, namespaceName, modelName, newStore, cursor, count, e_1_1, error_2;
140
220
  var e_1, _d;
141
221
  var _this = this;
142
- return tslib_1.__generator(this, function (_e) {
222
+ return __generator(this, function (_e) {
143
223
  switch (_e.label) {
144
224
  case 0:
145
225
  if (oldVersion === 0) {
@@ -159,7 +239,7 @@ var IndexedDBAdapter = /** @class */ (function () {
159
239
  _e.label = 2;
160
240
  case 2:
161
241
  _e.trys.push([2, 11, 12, 13]);
162
- _a = tslib_1.__values(txn.objectStoreNames), _b = _a.next();
242
+ _a = __values(txn.objectStoreNames), _b = _a.next();
163
243
  _e.label = 3;
164
244
  case 3:
165
245
  if (!!_b.done) return [3 /*break*/, 10];
@@ -220,11 +300,11 @@ var IndexedDBAdapter = /** @class */ (function () {
220
300
  ];
221
301
  })
222
302
  .filter(function (_a) {
223
- var _b = tslib_1.__read(_a, 2), storeName = _b[1];
303
+ var _b = __read(_a, 2), storeName = _b[1];
224
304
  return !objectStoreNames.has(storeName);
225
305
  })
226
306
  .forEach(function (_a) {
227
- var _b = tslib_1.__read(_a, 2), modelName = _b[0], storeName = _b[1];
307
+ var _b = __read(_a, 2), modelName = _b[0], storeName = _b[1];
228
308
  _this.createObjectStoreForModel(db, namespaceName, storeName, modelName);
229
309
  });
230
310
  });
@@ -255,9 +335,9 @@ var IndexedDBAdapter = /** @class */ (function () {
255
335
  });
256
336
  };
257
337
  IndexedDBAdapter.prototype._get = function (storeOrStoreName, keyArr) {
258
- return tslib_1.__awaiter(this, void 0, void 0, function () {
338
+ return __awaiter(this, void 0, void 0, function () {
259
339
  var index, storeName, store, result;
260
- return tslib_1.__generator(this, function (_a) {
340
+ return __generator(this, function (_a) {
261
341
  switch (_a.label) {
262
342
  case 0:
263
343
  if (typeof storeOrStoreName === 'string') {
@@ -278,14 +358,14 @@ var IndexedDBAdapter = /** @class */ (function () {
278
358
  };
279
359
  IndexedDBAdapter.prototype.save = function (model, condition) {
280
360
  var e_2, _a;
281
- return tslib_1.__awaiter(this, void 0, void 0, function () {
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;
361
+ return __awaiter(this, void 0, void 0, function () {
362
+ 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;
283
363
  var _this = this;
284
- return tslib_1.__generator(this, function (_c) {
285
- switch (_c.label) {
364
+ return __generator(this, function (_b) {
365
+ switch (_b.label) {
286
366
  case 0: return [4 /*yield*/, this.checkPrivate()];
287
367
  case 1:
288
- _c.sent();
368
+ _b.sent();
289
369
  modelConstructor = Object.getPrototypeOf(model)
290
370
  .constructor;
291
371
  storeName = this.getStorenameForModel(modelConstructor);
@@ -299,15 +379,15 @@ var IndexedDBAdapter = /** @class */ (function () {
299
379
  var keys = util_1.getIndexKeys(_this.schema.namespaces[namespaceName], modelName);
300
380
  return { storeName: storeName, item: item, instance: instance, keys: keys };
301
381
  });
302
- tx = this.db.transaction(tslib_1.__spread([storeName], Array.from(set.values())), 'readwrite');
382
+ tx = this.db.transaction(__spread([storeName], Array.from(set.values())), 'readwrite');
303
383
  store = tx.objectStore(storeName);
304
384
  keyValues = this.getIndexKeyValuesFromModel(model);
305
385
  return [4 /*yield*/, this._get(store, keyValues)];
306
386
  case 2:
307
- fromDB = _c.sent();
387
+ fromDB = _b.sent();
308
388
  if (condition && fromDB) {
309
389
  predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
310
- _b = predicates || {}, predicateObjs = _b.predicates, type = _b.type;
390
+ predicateObjs = predicates.predicates, type = predicates.type;
311
391
  isValid = util_1.validatePredicate(fromDB, type, predicateObjs);
312
392
  if (!isValid) {
313
393
  msg = 'Conditional update failed';
@@ -316,14 +396,14 @@ var IndexedDBAdapter = /** @class */ (function () {
316
396
  }
317
397
  }
318
398
  result = [];
319
- _c.label = 3;
399
+ _b.label = 3;
320
400
  case 3:
321
- _c.trys.push([3, 11, 12, 17]);
322
- connectionStoreNames_1 = tslib_1.__asyncValues(connectionStoreNames);
323
- _c.label = 4;
401
+ _b.trys.push([3, 11, 12, 17]);
402
+ connectionStoreNames_1 = __asyncValues(connectionStoreNames);
403
+ _b.label = 4;
324
404
  case 4: return [4 /*yield*/, connectionStoreNames_1.next()];
325
405
  case 5:
326
- if (!(connectionStoreNames_1_1 = _c.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 10];
406
+ if (!(connectionStoreNames_1_1 = _b.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 10];
327
407
  resItem = connectionStoreNames_1_1.value;
328
408
  storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance, keys = resItem.keys;
329
409
  store_1 = tx.objectStore(storeName_1);
@@ -333,7 +413,7 @@ var IndexedDBAdapter = /** @class */ (function () {
333
413
  });
334
414
  return [4 /*yield*/, this._get(store_1, itemKeyValues)];
335
415
  case 6:
336
- fromDB_1 = _c.sent();
416
+ fromDB_1 = _b.sent();
337
417
  opType = fromDB_1 === undefined ? types_1.OpType.INSERT : types_1.OpType.UPDATE;
338
418
  modelKeyValues = this.getIndexKeyValuesFromModel(model);
339
419
  if (!(util_1.keysEqual(itemKeyValues, modelKeyValues) ||
@@ -342,25 +422,25 @@ var IndexedDBAdapter = /** @class */ (function () {
342
422
  .index('byPk')
343
423
  .getKey(this.canonicalKeyPath(itemKeyValues))];
344
424
  case 7:
345
- key = _c.sent();
425
+ key = _b.sent();
346
426
  return [4 /*yield*/, store_1.put(item, key)];
347
427
  case 8:
348
- _c.sent();
428
+ _b.sent();
349
429
  result.push([instance, opType]);
350
- _c.label = 9;
430
+ _b.label = 9;
351
431
  case 9: return [3 /*break*/, 4];
352
432
  case 10: return [3 /*break*/, 17];
353
433
  case 11:
354
- e_2_1 = _c.sent();
434
+ e_2_1 = _b.sent();
355
435
  e_2 = { error: e_2_1 };
356
436
  return [3 /*break*/, 17];
357
437
  case 12:
358
- _c.trys.push([12, , 15, 16]);
438
+ _b.trys.push([12, , 15, 16]);
359
439
  if (!(connectionStoreNames_1_1 && !connectionStoreNames_1_1.done && (_a = connectionStoreNames_1.return))) return [3 /*break*/, 14];
360
440
  return [4 /*yield*/, _a.call(connectionStoreNames_1)];
361
441
  case 13:
362
- _c.sent();
363
- _c.label = 14;
442
+ _b.sent();
443
+ _b.label = 14;
364
444
  case 14: return [3 /*break*/, 16];
365
445
  case 15:
366
446
  if (e_2) throw e_2.error;
@@ -368,40 +448,213 @@ var IndexedDBAdapter = /** @class */ (function () {
368
448
  case 16: return [7 /*endfinally*/];
369
449
  case 17: return [4 /*yield*/, tx.done];
370
450
  case 18:
371
- _c.sent();
451
+ _b.sent();
372
452
  return [2 /*return*/, result];
373
453
  }
374
454
  });
375
455
  });
376
456
  };
377
457
  IndexedDBAdapter.prototype.load = function (namespaceName, srcModelName, records) {
378
- return tslib_1.__awaiter(this, void 0, void 0, function () {
379
- var namespace, relations, connectionStoreNames, modelConstructor;
458
+ var records_1, records_1_1, records_2, records_2_1;
459
+ var e_3, _a, e_4, _b, e_5, _c;
460
+ return __awaiter(this, void 0, void 0, function () {
461
+ 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;
380
462
  var _this = this;
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) {
463
+ return __generator(this, function (_e) {
464
+ switch (_e.label) {
465
+ case 0:
466
+ namespace = this.schema.namespaces[namespaceName];
467
+ relations = namespace.relationships[srcModelName].relationTypes;
468
+ connectionStoreNames = relations.map(function (_a) {
469
+ var modelName = _a.modelName;
470
+ return util_1.getStorename(namespaceName, modelName);
471
+ });
472
+ modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
473
+ if (connectionStoreNames.length === 0) {
474
+ return [2 /*return*/, records.map(function (record) {
475
+ return _this.modelInstanceCreator(modelConstructor, record);
476
+ })];
477
+ }
478
+ tx = this.db.transaction(__spread(connectionStoreNames), 'readonly');
479
+ _e.label = 1;
480
+ case 1:
481
+ _e.trys.push([1, 38, 39, 44]);
482
+ relations_1 = __asyncValues(relations);
483
+ _e.label = 2;
484
+ case 2: return [4 /*yield*/, relations_1.next()];
485
+ case 3:
486
+ if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
487
+ relation = relations_1_1.value;
488
+ fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, targetNames = relation.targetNames;
489
+ storeName = util_1.getStorename(namespaceName, modelName);
490
+ store = tx.objectStore(storeName);
491
+ modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, modelName);
492
+ _d = relation.relationType;
493
+ switch (_d) {
494
+ case 'HAS_ONE': return [3 /*break*/, 4];
495
+ case 'BELONGS_TO': return [3 /*break*/, 19];
496
+ case 'HAS_MANY': return [3 /*break*/, 34];
497
+ }
498
+ return [3 /*break*/, 35];
499
+ case 4:
500
+ _e.trys.push([4, 12, 13, 18]);
501
+ records_1 = __asyncValues(records);
502
+ _e.label = 5;
503
+ case 5: return [4 /*yield*/, records_1.next()];
504
+ case 6:
505
+ if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/, 11];
506
+ recordItem = records_1_1.value;
507
+ if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 8];
508
+ getByFields = [];
509
+ allPresent = void 0;
510
+ // iterate through all targetnames to make sure they are all present in the recordItem
511
+ allPresent = targetNames.every(function (targetName) {
512
+ return recordItem[targetName] != null;
513
+ });
514
+ if (!allPresent) {
515
+ return [3 /*break*/, 11];
516
+ }
517
+ getByFields = targetNames;
518
+ keys = getByFields.map(function (getByField) { return recordItem[getByField]; });
519
+ return [4 /*yield*/, this._get(store, keys)];
520
+ case 7:
521
+ connectionRecord = _e.sent();
522
+ recordItem[fieldName] =
523
+ connectionRecord &&
524
+ this.modelInstanceCreator(modelConstructor_1, connectionRecord);
525
+ return [3 /*break*/, 10];
526
+ case 8:
527
+ getByfield = recordItem[targetName]
528
+ ? targetName
529
+ : fieldName;
530
+ // We break here, because the recordItem does not have 'team', the `getByField`
531
+ // extract the keys on the related model.
532
+ if (!recordItem[getByfield])
533
+ return [3 /*break*/, 11];
534
+ key = [recordItem[getByfield]];
535
+ return [4 /*yield*/, this._get(store, key)];
536
+ case 9:
537
+ connectionRecord = _e.sent();
538
+ recordItem[fieldName] =
539
+ connectionRecord &&
540
+ this.modelInstanceCreator(modelConstructor_1, connectionRecord);
541
+ _e.label = 10;
542
+ case 10: return [3 /*break*/, 5];
543
+ case 11: return [3 /*break*/, 18];
544
+ case 12:
545
+ e_4_1 = _e.sent();
546
+ e_4 = { error: e_4_1 };
547
+ return [3 /*break*/, 18];
548
+ case 13:
549
+ _e.trys.push([13, , 16, 17]);
550
+ if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/, 15];
551
+ return [4 /*yield*/, _b.call(records_1)];
552
+ case 14:
553
+ _e.sent();
554
+ _e.label = 15;
555
+ case 15: return [3 /*break*/, 17];
556
+ case 16:
557
+ if (e_4) throw e_4.error;
558
+ return [7 /*endfinally*/];
559
+ case 17: return [7 /*endfinally*/];
560
+ case 18: return [3 /*break*/, 36];
561
+ case 19:
562
+ _e.trys.push([19, 27, 28, 33]);
563
+ records_2 = __asyncValues(records);
564
+ _e.label = 20;
565
+ case 20: return [4 /*yield*/, records_2.next()];
566
+ case 21:
567
+ if (!(records_2_1 = _e.sent(), !records_2_1.done)) return [3 /*break*/, 26];
568
+ recordItem = records_2_1.value;
569
+ if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 23];
570
+ allPresent = void 0;
571
+ // iterate through all targetnames to make sure they are all present in the recordItem
572
+ allPresent = targetNames.every(function (targetName) {
573
+ return recordItem[targetName] != null;
574
+ });
575
+ // If not present, there is not yet a connected record
576
+ if (!allPresent) {
577
+ return [3 /*break*/, 26];
578
+ }
579
+ keys = targetNames
580
+ .filter(function (targetName) { var _a; return (_a = recordItem[targetName]) !== null && _a !== void 0 ? _a : false; })
581
+ .map(function (targetName) { return recordItem[targetName]; });
582
+ return [4 /*yield*/, this._get(store, keys)];
583
+ case 22:
584
+ connectionRecord = _e.sent();
585
+ recordItem[fieldName] =
586
+ connectionRecord &&
587
+ this.modelInstanceCreator(modelConstructor_1, connectionRecord);
588
+ targetNames === null || targetNames === void 0 ? void 0 : targetNames.map(function (targetName) {
589
+ delete recordItem[targetName];
590
+ });
591
+ return [3 /*break*/, 25];
592
+ case 23:
593
+ if (!recordItem[targetName]) return [3 /*break*/, 25];
594
+ key = [recordItem[targetName]];
595
+ return [4 /*yield*/, this._get(store, key)];
596
+ case 24:
597
+ connectionRecord = _e.sent();
598
+ recordItem[fieldName] =
599
+ connectionRecord &&
600
+ this.modelInstanceCreator(modelConstructor_1, connectionRecord);
601
+ delete recordItem[targetName];
602
+ _e.label = 25;
603
+ case 25: return [3 /*break*/, 20];
604
+ case 26: return [3 /*break*/, 33];
605
+ case 27:
606
+ e_5_1 = _e.sent();
607
+ e_5 = { error: e_5_1 };
608
+ return [3 /*break*/, 33];
609
+ case 28:
610
+ _e.trys.push([28, , 31, 32]);
611
+ if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/, 30];
612
+ return [4 /*yield*/, _c.call(records_2)];
613
+ case 29:
614
+ _e.sent();
615
+ _e.label = 30;
616
+ case 30: return [3 /*break*/, 32];
617
+ case 31:
618
+ if (e_5) throw e_5.error;
619
+ return [7 /*endfinally*/];
620
+ case 32: return [7 /*endfinally*/];
621
+ case 33: return [3 /*break*/, 36];
622
+ case 34:
623
+ // TODO: Lazy loading
624
+ return [3 /*break*/, 36];
625
+ case 35:
626
+ util_1.exhaustiveCheck(relation.relationType);
627
+ return [3 /*break*/, 36];
628
+ case 36: return [3 /*break*/, 2];
629
+ case 37: return [3 /*break*/, 44];
630
+ case 38:
631
+ e_3_1 = _e.sent();
632
+ e_3 = { error: e_3_1 };
633
+ return [3 /*break*/, 44];
634
+ case 39:
635
+ _e.trys.push([39, , 42, 43]);
636
+ if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
637
+ return [4 /*yield*/, _a.call(relations_1)];
638
+ case 40:
639
+ _e.sent();
640
+ _e.label = 41;
641
+ case 41: return [3 /*break*/, 43];
642
+ case 42:
643
+ if (e_3) throw e_3.error;
644
+ return [7 /*endfinally*/];
645
+ case 43: return [7 /*endfinally*/];
646
+ case 44: return [2 /*return*/, records.map(function (record) {
391
647
  return _this.modelInstanceCreator(modelConstructor, record);
392
648
  })];
393
649
  }
394
- return [2 /*return*/, records.map(function (record) {
395
- return _this.modelInstanceCreator(modelConstructor, record);
396
- })];
397
650
  });
398
651
  });
399
652
  };
400
653
  IndexedDBAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
401
- return tslib_1.__awaiter(this, void 0, void 0, function () {
654
+ return __awaiter(this, void 0, void 0, function () {
402
655
  var storeName, namespaceName, predicates, keyPath, queryByKey, hasSort, hasPagination, records;
403
656
  var _this = this;
404
- return tslib_1.__generator(this, function (_a) {
657
+ return __generator(this, function (_a) {
405
658
  switch (_a.label) {
406
659
  case 0: return [4 /*yield*/, this.checkPrivate()];
407
660
  case 1:
@@ -413,9 +666,9 @@ var IndexedDBAdapter = /** @class */ (function () {
413
666
  queryByKey = predicates && this.keyValueFromPredicate(predicates, keyPath);
414
667
  hasSort = pagination && pagination.sort;
415
668
  hasPagination = pagination && pagination.limit;
416
- return [4 /*yield*/, (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
669
+ return [4 /*yield*/, (function () { return __awaiter(_this, void 0, void 0, function () {
417
670
  var record, filtered, all;
418
- return tslib_1.__generator(this, function (_a) {
671
+ return __generator(this, function (_a) {
419
672
  switch (_a.label) {
420
673
  case 0:
421
674
  if (!queryByKey) return [3 /*break*/, 2];
@@ -444,7 +697,7 @@ var IndexedDBAdapter = /** @class */ (function () {
444
697
  });
445
698
  }); })()];
446
699
  case 2:
447
- records = (_a.sent());
700
+ records = _a.sent();
448
701
  return [4 /*yield*/, this.load(namespaceName, modelConstructor.name, records)];
449
702
  case 3: return [2 /*return*/, _a.sent()];
450
703
  }
@@ -452,18 +705,21 @@ var IndexedDBAdapter = /** @class */ (function () {
452
705
  });
453
706
  };
454
707
  IndexedDBAdapter.prototype.getByKey = function (storeName, keyValue) {
455
- return tslib_1.__awaiter(this, void 0, void 0, function () {
456
- return tslib_1.__generator(this, function (_a) {
708
+ return __awaiter(this, void 0, void 0, function () {
709
+ var record;
710
+ return __generator(this, function (_a) {
457
711
  switch (_a.label) {
458
712
  case 0: return [4 /*yield*/, this._get(storeName, keyValue)];
459
- case 1: return [2 /*return*/, _a.sent()];
713
+ case 1:
714
+ record = _a.sent();
715
+ return [2 /*return*/, record];
460
716
  }
461
717
  });
462
718
  });
463
719
  };
464
720
  IndexedDBAdapter.prototype.getAll = function (storeName) {
465
- return tslib_1.__awaiter(this, void 0, void 0, function () {
466
- return tslib_1.__generator(this, function (_a) {
721
+ return __awaiter(this, void 0, void 0, function () {
722
+ return __generator(this, function (_a) {
467
723
  switch (_a.label) {
468
724
  case 0: return [4 /*yield*/, this.db.getAll(storeName)];
469
725
  case 1: return [2 /*return*/, _a.sent()];
@@ -472,7 +728,7 @@ var IndexedDBAdapter = /** @class */ (function () {
472
728
  });
473
729
  };
474
730
  IndexedDBAdapter.prototype.keyValueFromPredicate = function (predicates, keyPath) {
475
- var e_3, _a;
731
+ var e_6, _a;
476
732
  var predicateObjs = predicates.predicates;
477
733
  if (predicateObjs.length !== keyPath.length) {
478
734
  return;
@@ -483,169 +739,58 @@ var IndexedDBAdapter = /** @class */ (function () {
483
739
  predicateObj && keyValues.push(predicateObj.operand);
484
740
  };
485
741
  try {
486
- for (var keyPath_1 = tslib_1.__values(keyPath), keyPath_1_1 = keyPath_1.next(); !keyPath_1_1.done; keyPath_1_1 = keyPath_1.next()) {
742
+ for (var keyPath_1 = __values(keyPath), keyPath_1_1 = keyPath_1.next(); !keyPath_1_1.done; keyPath_1_1 = keyPath_1.next()) {
487
743
  var key = keyPath_1_1.value;
488
744
  _loop_1(key);
489
745
  }
490
746
  }
491
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
747
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
492
748
  finally {
493
749
  try {
494
750
  if (keyPath_1_1 && !keyPath_1_1.done && (_a = keyPath_1.return)) _a.call(keyPath_1);
495
751
  }
496
- finally { if (e_3) throw e_3.error; }
752
+ finally { if (e_6) throw e_6.error; }
497
753
  }
498
754
  return keyValues.length === keyPath.length ? keyValues : undefined;
499
755
  };
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
- };
520
756
  IndexedDBAdapter.prototype.filterOnPredicate = function (storeName, predicates) {
521
- return tslib_1.__awaiter(this, void 0, void 0, function () {
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) {
757
+ return __awaiter(this, void 0, void 0, function () {
758
+ var predicateObjs, type, all, filtered;
759
+ return __generator(this, function (_a) {
760
+ switch (_a.label) {
527
761
  case 0:
528
762
  predicateObjs = predicates.predicates, type = predicates.type;
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];
763
+ return [4 /*yield*/, this.getAll(storeName)];
551
764
  case 1:
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:
765
+ all = _a.sent();
634
766
  filtered = predicateObjs
635
- ? candidateResults.filter(function (m) { return util_1.validatePredicate(m, type, predicateObjs); })
636
- : candidateResults;
767
+ ? all.filter(function (m) { return util_1.validatePredicate(m, type, predicateObjs); })
768
+ : all;
637
769
  return [2 /*return*/, filtered];
638
770
  }
639
771
  });
640
772
  });
641
773
  };
642
774
  IndexedDBAdapter.prototype.inMemoryPagination = function (records, pagination) {
643
- return util_1.inMemoryPagination(records, pagination);
775
+ if (pagination && records.length > 1) {
776
+ if (pagination.sort) {
777
+ var sortPredicates = predicates_1.ModelSortPredicateCreator.getPredicates(pagination.sort);
778
+ if (sortPredicates.length) {
779
+ var compareFn = util_1.sortCompareFunction(sortPredicates);
780
+ records.sort(compareFn);
781
+ }
782
+ }
783
+ var _a = pagination.page, page = _a === void 0 ? 0 : _a, _b = pagination.limit, limit = _b === void 0 ? 0 : _b;
784
+ var start = Math.max(0, page * limit) || 0;
785
+ var end = limit > 0 ? start + limit : records.length;
786
+ return records.slice(start, end);
787
+ }
788
+ return records;
644
789
  };
645
790
  IndexedDBAdapter.prototype.enginePagination = function (storeName, pagination) {
646
- return tslib_1.__awaiter(this, void 0, void 0, function () {
791
+ return __awaiter(this, void 0, void 0, function () {
647
792
  var result, _a, page, _b, limit, initialRecord, cursor, pageResults, hasLimit;
648
- return tslib_1.__generator(this, function (_c) {
793
+ return __generator(this, function (_c) {
649
794
  switch (_c.label) {
650
795
  case 0:
651
796
  if (!pagination) return [3 /*break*/, 7];
@@ -690,9 +835,9 @@ var IndexedDBAdapter = /** @class */ (function () {
690
835
  };
691
836
  IndexedDBAdapter.prototype.queryOne = function (modelConstructor, firstOrLast) {
692
837
  if (firstOrLast === void 0) { firstOrLast = types_1.QueryOne.FIRST; }
693
- return tslib_1.__awaiter(this, void 0, void 0, function () {
838
+ return __awaiter(this, void 0, void 0, function () {
694
839
  var storeName, cursor, result;
695
- return tslib_1.__generator(this, function (_a) {
840
+ return __generator(this, function (_a) {
696
841
  switch (_a.label) {
697
842
  case 0: return [4 /*yield*/, this.checkPrivate()];
698
843
  case 1:
@@ -711,13 +856,13 @@ var IndexedDBAdapter = /** @class */ (function () {
711
856
  });
712
857
  };
713
858
  IndexedDBAdapter.prototype.delete = function (modelOrModelConstructor, condition) {
714
- return tslib_1.__awaiter(this, void 0, void 0, function () {
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) {
859
+ return __awaiter(this, void 0, void 0, function () {
860
+ 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;
861
+ return __generator(this, function (_a) {
862
+ switch (_a.label) {
718
863
  case 0: return [4 /*yield*/, this.checkPrivate()];
719
864
  case 1:
720
- _b.sent();
865
+ _a.sent();
721
866
  deleteQueue = [];
722
867
  if (!util_1.isModelConstructor(modelOrModelConstructor)) return [3 /*break*/, 9];
723
868
  modelConstructor = modelOrModelConstructor;
@@ -725,16 +870,16 @@ var IndexedDBAdapter = /** @class */ (function () {
725
870
  storeName = this.getStorenameForModel(modelConstructor);
726
871
  return [4 /*yield*/, this.query(modelConstructor, condition)];
727
872
  case 2:
728
- models = _b.sent();
873
+ models = _a.sent();
729
874
  relations = this.schema.namespaces[nameSpace].relationships[modelConstructor.name]
730
875
  .relationTypes;
731
876
  if (!(condition !== undefined)) return [3 /*break*/, 5];
732
877
  return [4 /*yield*/, this.deleteTraverse(relations, models, modelConstructor.name, nameSpace, deleteQueue)];
733
878
  case 3:
734
- _b.sent();
879
+ _a.sent();
735
880
  return [4 /*yield*/, this.deleteItem(deleteQueue)];
736
881
  case 4:
737
- _b.sent();
882
+ _a.sent();
738
883
  deletedModels = deleteQueue.reduce(function (acc, _a) {
739
884
  var items = _a.items;
740
885
  return acc.concat(items);
@@ -742,7 +887,7 @@ var IndexedDBAdapter = /** @class */ (function () {
742
887
  return [2 /*return*/, [models, deletedModels]];
743
888
  case 5: return [4 /*yield*/, this.deleteTraverse(relations, models, modelConstructor.name, nameSpace, deleteQueue)];
744
889
  case 6:
745
- _b.sent();
890
+ _a.sent();
746
891
  // Delete all
747
892
  return [4 /*yield*/, this.db
748
893
  .transaction([storeName], 'readwrite')
@@ -750,7 +895,7 @@ var IndexedDBAdapter = /** @class */ (function () {
750
895
  .clear()];
751
896
  case 7:
752
897
  // Delete all
753
- _b.sent();
898
+ _a.sent();
754
899
  deletedModels = deleteQueue.reduce(function (acc, _a) {
755
900
  var items = _a.items;
756
901
  return acc.concat(items);
@@ -769,14 +914,14 @@ var IndexedDBAdapter = /** @class */ (function () {
769
914
  keyValues = this.getIndexKeyValuesFromModel(model);
770
915
  return [4 /*yield*/, this._get(store, keyValues)];
771
916
  case 10:
772
- fromDB = _b.sent();
917
+ fromDB = _a.sent();
773
918
  if (fromDB === undefined) {
774
919
  msg = 'Model instance not found in storage';
775
920
  logger.warn(msg, { model: model });
776
921
  return [2 /*return*/, [[model], []]];
777
922
  }
778
923
  predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
779
- _a = predicates, predicateObjs = _a.predicates, type = _a.type;
924
+ predicateObjs = predicates.predicates, type = predicates.type;
780
925
  isValid = util_1.validatePredicate(fromDB, type, predicateObjs);
781
926
  if (!isValid) {
782
927
  msg = 'Conditional update failed';
@@ -785,21 +930,21 @@ var IndexedDBAdapter = /** @class */ (function () {
785
930
  }
786
931
  return [4 /*yield*/, tx.done];
787
932
  case 11:
788
- _b.sent();
933
+ _a.sent();
789
934
  relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
790
935
  return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
791
936
  case 12:
792
- _b.sent();
937
+ _a.sent();
793
938
  return [3 /*break*/, 15];
794
939
  case 13:
795
940
  relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
796
941
  return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
797
942
  case 14:
798
- _b.sent();
799
- _b.label = 15;
943
+ _a.sent();
944
+ _a.label = 15;
800
945
  case 15: return [4 /*yield*/, this.deleteItem(deleteQueue)];
801
946
  case 16:
802
- _b.sent();
947
+ _a.sent();
803
948
  deletedModels = deleteQueue.reduce(function (acc, _a) {
804
949
  var items = _a.items;
805
950
  return acc.concat(items);
@@ -811,36 +956,37 @@ var IndexedDBAdapter = /** @class */ (function () {
811
956
  });
812
957
  };
813
958
  IndexedDBAdapter.prototype.deleteItem = function (deleteQueue) {
959
+ var deleteQueue_1, deleteQueue_1_1;
814
960
  var e_7, _a, e_8, _b;
815
- return tslib_1.__awaiter(this, void 0, void 0, function () {
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) {
961
+ return __awaiter(this, void 0, void 0, function () {
962
+ var connectionStoreNames, tx, deleteItem, storeName, items, store, items_1, items_1_1, item, key, keyValues, itemKey, e_8_1, e_7_1;
963
+ return __generator(this, function (_c) {
964
+ switch (_c.label) {
819
965
  case 0:
820
966
  connectionStoreNames = deleteQueue.map(function (_a) {
821
967
  var storeName = _a.storeName;
822
968
  return storeName;
823
969
  });
824
- tx = this.db.transaction(tslib_1.__spread(connectionStoreNames), 'readwrite');
825
- _e.label = 1;
970
+ tx = this.db.transaction(__spread(connectionStoreNames), 'readwrite');
971
+ _c.label = 1;
826
972
  case 1:
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()];
973
+ _c.trys.push([1, 22, 23, 28]);
974
+ deleteQueue_1 = __asyncValues(deleteQueue);
975
+ _c.label = 2;
976
+ case 2: return [4 /*yield*/, deleteQueue_1.next()];
831
977
  case 3:
832
- if (!(_d = _e.sent(), !_d.done)) return [3 /*break*/, 21];
833
- deleteItem = _d.value;
978
+ if (!(deleteQueue_1_1 = _c.sent(), !deleteQueue_1_1.done)) return [3 /*break*/, 21];
979
+ deleteItem = deleteQueue_1_1.value;
834
980
  storeName = deleteItem.storeName, items = deleteItem.items;
835
981
  store = tx.objectStore(storeName);
836
- _e.label = 4;
982
+ _c.label = 4;
837
983
  case 4:
838
- _e.trys.push([4, 14, 15, 20]);
839
- items_1 = tslib_1.__asyncValues(items);
840
- _e.label = 5;
984
+ _c.trys.push([4, 14, 15, 20]);
985
+ items_1 = __asyncValues(items);
986
+ _c.label = 5;
841
987
  case 5: return [4 /*yield*/, items_1.next()];
842
988
  case 6:
843
- if (!(items_1_1 = _e.sent(), !items_1_1.done)) return [3 /*break*/, 13];
989
+ if (!(items_1_1 = _c.sent(), !items_1_1.done)) return [3 /*break*/, 13];
844
990
  item = items_1_1.value;
845
991
  if (!item) return [3 /*break*/, 12];
846
992
  key = void 0;
@@ -850,33 +996,33 @@ var IndexedDBAdapter = /** @class */ (function () {
850
996
  .index('byPk')
851
997
  .getKey(this.canonicalKeyPath(keyValues))];
852
998
  case 7:
853
- key = _e.sent();
999
+ key = _c.sent();
854
1000
  return [3 /*break*/, 10];
855
1001
  case 8:
856
1002
  itemKey = item.toString();
857
1003
  return [4 /*yield*/, store.index('byPk').getKey(itemKey)];
858
1004
  case 9:
859
- key = _e.sent();
860
- _e.label = 10;
1005
+ key = _c.sent();
1006
+ _c.label = 10;
861
1007
  case 10:
862
1008
  if (!(key !== undefined)) return [3 /*break*/, 12];
863
1009
  return [4 /*yield*/, store.delete(key)];
864
1010
  case 11:
865
- _e.sent();
866
- _e.label = 12;
1011
+ _c.sent();
1012
+ _c.label = 12;
867
1013
  case 12: return [3 /*break*/, 5];
868
1014
  case 13: return [3 /*break*/, 20];
869
1015
  case 14:
870
- e_8_1 = _e.sent();
1016
+ e_8_1 = _c.sent();
871
1017
  e_8 = { error: e_8_1 };
872
1018
  return [3 /*break*/, 20];
873
1019
  case 15:
874
- _e.trys.push([15, , 18, 19]);
1020
+ _c.trys.push([15, , 18, 19]);
875
1021
  if (!(items_1_1 && !items_1_1.done && (_b = items_1.return))) return [3 /*break*/, 17];
876
1022
  return [4 /*yield*/, _b.call(items_1)];
877
1023
  case 16:
878
- _e.sent();
879
- _e.label = 17;
1024
+ _c.sent();
1025
+ _c.label = 17;
880
1026
  case 17: return [3 /*break*/, 19];
881
1027
  case 18:
882
1028
  if (e_8) throw e_8.error;
@@ -885,16 +1031,16 @@ var IndexedDBAdapter = /** @class */ (function () {
885
1031
  case 20: return [3 /*break*/, 2];
886
1032
  case 21: return [3 /*break*/, 28];
887
1033
  case 22:
888
- e_7_1 = _e.sent();
1034
+ e_7_1 = _c.sent();
889
1035
  e_7 = { error: e_7_1 };
890
1036
  return [3 /*break*/, 28];
891
1037
  case 23:
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)];
1038
+ _c.trys.push([23, , 26, 27]);
1039
+ if (!(deleteQueue_1_1 && !deleteQueue_1_1.done && (_a = deleteQueue_1.return))) return [3 /*break*/, 25];
1040
+ return [4 /*yield*/, _a.call(deleteQueue_1)];
895
1041
  case 24:
896
- _e.sent();
897
- _e.label = 25;
1042
+ _c.sent();
1043
+ _c.label = 25;
898
1044
  case 25: return [3 /*break*/, 27];
899
1045
  case 26:
900
1046
  if (e_7) throw e_7.error;
@@ -906,21 +1052,21 @@ var IndexedDBAdapter = /** @class */ (function () {
906
1052
  });
907
1053
  };
908
1054
  IndexedDBAdapter.prototype.deleteTraverse = function (relations, models, srcModel, nameSpace, deleteQueue) {
909
- var relations_1, relations_1_1, models_1, models_1_1, models_2, models_2_1;
1055
+ var relations_2, relations_2_1, models_1, models_1_1, models_2, models_2_1;
910
1056
  var e_9, _a, e_10, _b, e_11, _c;
911
- return tslib_1.__awaiter(this, void 0, void 0, function () {
1057
+ return __awaiter(this, void 0, void 0, function () {
912
1058
  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;
913
1059
  var _this = this;
914
- return tslib_1.__generator(this, function (_e) {
1060
+ return __generator(this, function (_e) {
915
1061
  switch (_e.label) {
916
1062
  case 0:
917
1063
  _e.trys.push([0, 38, 39, 44]);
918
- relations_1 = tslib_1.__asyncValues(relations);
1064
+ relations_2 = __asyncValues(relations);
919
1065
  _e.label = 1;
920
- case 1: return [4 /*yield*/, relations_1.next()];
1066
+ case 1: return [4 /*yield*/, relations_2.next()];
921
1067
  case 2:
922
- if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
923
- rel = relations_1_1.value;
1068
+ if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/, 37];
1069
+ rel = relations_2_1.value;
924
1070
  relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
925
1071
  storeName = util_1.getStorename(nameSpace, modelName);
926
1072
  _d = relationType;
@@ -932,7 +1078,7 @@ var IndexedDBAdapter = /** @class */ (function () {
932
1078
  return [3 /*break*/, 35];
933
1079
  case 3:
934
1080
  _e.trys.push([3, 13, 14, 19]);
935
- models_1 = tslib_1.__asyncValues(models);
1081
+ models_1 = __asyncValues(models);
936
1082
  _e.label = 4;
937
1083
  case 4: return [4 /*yield*/, models_1.next()];
938
1084
  case 5:
@@ -1009,7 +1155,7 @@ var IndexedDBAdapter = /** @class */ (function () {
1009
1155
  case 19: return [3 /*break*/, 36];
1010
1156
  case 20:
1011
1157
  _e.trys.push([20, 27, 28, 33]);
1012
- models_2 = tslib_1.__asyncValues(models);
1158
+ models_2 = __asyncValues(models);
1013
1159
  _e.label = 21;
1014
1160
  case 21: return [4 /*yield*/, models_2.next()];
1015
1161
  case 22:
@@ -1057,7 +1203,9 @@ var IndexedDBAdapter = /** @class */ (function () {
1057
1203
  case 34:
1058
1204
  // Intentionally blank
1059
1205
  return [3 /*break*/, 36];
1060
- case 35: throw new Error("Invalid relation type " + relationType);
1206
+ case 35:
1207
+ util_1.exhaustiveCheck(relationType);
1208
+ return [3 /*break*/, 36];
1061
1209
  case 36: return [3 /*break*/, 1];
1062
1210
  case 37: return [3 /*break*/, 44];
1063
1211
  case 38:
@@ -1066,8 +1214,8 @@ var IndexedDBAdapter = /** @class */ (function () {
1066
1214
  return [3 /*break*/, 44];
1067
1215
  case 39:
1068
1216
  _e.trys.push([39, , 42, 43]);
1069
- if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
1070
- return [4 /*yield*/, _a.call(relations_1)];
1217
+ if (!(relations_2_1 && !relations_2_1.done && (_a = relations_2.return))) return [3 /*break*/, 41];
1218
+ return [4 /*yield*/, _a.call(relations_2)];
1071
1219
  case 40:
1072
1220
  _e.sent();
1073
1221
  _e.label = 41;
@@ -1090,8 +1238,8 @@ var IndexedDBAdapter = /** @class */ (function () {
1090
1238
  };
1091
1239
  IndexedDBAdapter.prototype.clear = function () {
1092
1240
  var _a;
1093
- return tslib_1.__awaiter(this, void 0, void 0, function () {
1094
- return tslib_1.__generator(this, function (_b) {
1241
+ return __awaiter(this, void 0, void 0, function () {
1242
+ return __generator(this, function (_b) {
1095
1243
  switch (_b.label) {
1096
1244
  case 0: return [4 /*yield*/, this.checkPrivate()];
1097
1245
  case 1:
@@ -1108,11 +1256,11 @@ var IndexedDBAdapter = /** @class */ (function () {
1108
1256
  });
1109
1257
  };
1110
1258
  IndexedDBAdapter.prototype.batchSave = function (modelConstructor, items) {
1111
- return tslib_1.__awaiter(this, void 0, void 0, function () {
1259
+ return __awaiter(this, void 0, void 0, function () {
1112
1260
  var result, storeName, txn, store, _loop_2, this_1, items_2, items_2_1, item, e_12_1;
1113
1261
  var e_12, _a;
1114
1262
  var _this = this;
1115
- return tslib_1.__generator(this, function (_b) {
1263
+ return __generator(this, function (_b) {
1116
1264
  switch (_b.label) {
1117
1265
  case 0:
1118
1266
  if (items.length === 0) {
@@ -1127,7 +1275,7 @@ var IndexedDBAdapter = /** @class */ (function () {
1127
1275
  store = txn.store;
1128
1276
  _loop_2 = function (item) {
1129
1277
  var namespaceName, modelName, model, connectedModels, keyValues, _deleted, index, key, instance;
1130
- return tslib_1.__generator(this, function (_a) {
1278
+ return __generator(this, function (_a) {
1131
1279
  switch (_a.label) {
1132
1280
  case 0:
1133
1281
  namespaceName = this_1.namespaceResolver(modelConstructor);
@@ -1169,7 +1317,7 @@ var IndexedDBAdapter = /** @class */ (function () {
1169
1317
  _b.label = 2;
1170
1318
  case 2:
1171
1319
  _b.trys.push([2, 7, 8, 9]);
1172
- items_2 = tslib_1.__values(items), items_2_1 = items_2.next();
1320
+ items_2 = __values(items), items_2_1 = items_2.next();
1173
1321
  _b.label = 3;
1174
1322
  case 3:
1175
1323
  if (!!items_2_1.done) return [3 /*break*/, 6];
@@ -1206,7 +1354,7 @@ var IndexedDBAdapter = /** @class */ (function () {
1206
1354
  });
1207
1355
  var indexes = this.schema.namespaces[namespaceName].relationships[modelName].indexes;
1208
1356
  indexes.forEach(function (_a) {
1209
- var _b = tslib_1.__read(_a, 3), idxName = _b[0], keyPath = _b[1], options = _b[2];
1357
+ var _b = __read(_a, 3), idxName = _b[0], keyPath = _b[1], options = _b[2];
1210
1358
  store.createIndex(idxName, keyPath, options);
1211
1359
  });
1212
1360
  return store;