@aws-amplify/datastore 3.7.3 → 3.7.4-custom-pk.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +144 -17
- package/README.md +154 -0
- package/dist/aws-amplify-datastore.js +3740 -1599
- package/dist/aws-amplify-datastore.js.map +1 -1
- package/dist/aws-amplify-datastore.min.js +25 -95
- package/dist/aws-amplify-datastore.min.js.map +1 -1
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +2 -2
- package/lib/authModeStrategies/multiAuthStrategy.js +32 -26
- package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib/datastore/datastore.d.ts +17 -16
- package/lib/datastore/datastore.js +291 -83
- package/lib/datastore/datastore.js.map +1 -1
- package/lib/index.d.ts +3 -19
- package/lib/predicates/index.d.ts +3 -2
- package/lib/predicates/index.js +12 -2
- package/lib/predicates/index.js.map +1 -1
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +6 -2
- package/lib/storage/adapter/AsyncStorageAdapter.js +361 -193
- package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +4 -4
- package/lib/storage/adapter/AsyncStorageDatabase.js +59 -28
- package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib/storage/adapter/InMemoryStore.js +2 -2
- package/lib/storage/adapter/InMemoryStore.js.map +1 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +7 -2
- package/lib/storage/adapter/IndexedDBAdapter.js +454 -252
- package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib/storage/adapter/index.d.ts +1 -1
- package/lib/storage/storage.d.ts +3 -3
- package/lib/storage/storage.js +106 -28
- package/lib/storage/storage.js.map +1 -1
- package/lib/sync/index.d.ts +23 -7
- package/lib/sync/index.js +18 -17
- package/lib/sync/index.js.map +1 -1
- package/lib/sync/merger.d.ts +3 -3
- package/lib/sync/merger.js +8 -6
- package/lib/sync/merger.js.map +1 -1
- package/lib/sync/outbox.d.ts +2 -2
- package/lib/sync/outbox.js +12 -9
- package/lib/sync/outbox.js.map +1 -1
- package/lib/sync/processors/errorMaps.d.ts +17 -0
- package/lib/sync/processors/errorMaps.js +125 -0
- package/lib/sync/processors/errorMaps.js.map +1 -0
- package/lib/sync/processors/mutation.d.ts +22 -4
- package/lib/sync/processors/mutation.js +119 -51
- package/lib/sync/processors/mutation.js.map +1 -1
- package/lib/sync/processors/subscription.d.ts +4 -2
- package/lib/sync/processors/subscription.js +76 -41
- package/lib/sync/processors/subscription.js.map +1 -1
- package/lib/sync/processors/sync.d.ts +4 -2
- package/lib/sync/processors/sync.js +62 -27
- package/lib/sync/processors/sync.js.map +1 -1
- package/lib/sync/utils.d.ts +3 -2
- package/lib/sync/utils.js +58 -7
- package/lib/sync/utils.js.map +1 -1
- package/lib/types.d.ts +90 -34
- package/lib/types.js +31 -2
- package/lib/types.js.map +1 -1
- package/lib/util.d.ts +48 -33
- package/lib/util.js +219 -57
- package/lib/util.js.map +1 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.d.ts +2 -2
- package/lib-esm/authModeStrategies/multiAuthStrategy.js +32 -26
- package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib-esm/datastore/datastore.d.ts +17 -16
- package/lib-esm/datastore/datastore.js +293 -85
- package/lib-esm/datastore/datastore.js.map +1 -1
- package/lib-esm/index.d.ts +3 -19
- package/lib-esm/predicates/index.d.ts +3 -2
- package/lib-esm/predicates/index.js +13 -3
- package/lib-esm/predicates/index.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageAdapter.d.ts +6 -2
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js +361 -193
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageDatabase.d.ts +4 -4
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js +60 -29
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib-esm/storage/adapter/InMemoryStore.js +2 -2
- package/lib-esm/storage/adapter/InMemoryStore.js.map +1 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +7 -2
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +454 -252
- package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/index.d.ts +1 -1
- package/lib-esm/storage/storage.d.ts +3 -3
- package/lib-esm/storage/storage.js +106 -28
- package/lib-esm/storage/storage.js.map +1 -1
- package/lib-esm/sync/index.d.ts +23 -7
- package/lib-esm/sync/index.js +20 -19
- package/lib-esm/sync/index.js.map +1 -1
- package/lib-esm/sync/merger.d.ts +3 -3
- package/lib-esm/sync/merger.js +8 -6
- package/lib-esm/sync/merger.js.map +1 -1
- package/lib-esm/sync/outbox.d.ts +2 -2
- package/lib-esm/sync/outbox.js +13 -10
- package/lib-esm/sync/outbox.js.map +1 -1
- package/lib-esm/sync/processors/errorMaps.d.ts +17 -0
- package/lib-esm/sync/processors/errorMaps.js +119 -0
- package/lib-esm/sync/processors/errorMaps.js.map +1 -0
- package/lib-esm/sync/processors/mutation.d.ts +22 -4
- package/lib-esm/sync/processors/mutation.js +122 -54
- package/lib-esm/sync/processors/mutation.js.map +1 -1
- package/lib-esm/sync/processors/subscription.d.ts +4 -2
- package/lib-esm/sync/processors/subscription.js +77 -42
- package/lib-esm/sync/processors/subscription.js.map +1 -1
- package/lib-esm/sync/processors/sync.d.ts +4 -2
- package/lib-esm/sync/processors/sync.js +62 -27
- package/lib-esm/sync/processors/sync.js.map +1 -1
- package/lib-esm/sync/utils.d.ts +3 -2
- package/lib-esm/sync/utils.js +58 -8
- package/lib-esm/sync/utils.js.map +1 -1
- package/lib-esm/types.d.ts +90 -34
- package/lib-esm/types.js +29 -3
- package/lib-esm/types.js.map +1 -1
- package/lib-esm/util.d.ts +48 -33
- package/lib-esm/util.js +207 -54
- package/lib-esm/util.js.map +1 -1
- package/package.json +10 -9
- package/src/authModeStrategies/multiAuthStrategy.ts +24 -21
- package/src/datastore/datastore.ts +448 -148
- package/src/predicates/index.ts +32 -10
- package/src/storage/adapter/AsyncStorageAdapter.ts +305 -78
- package/src/storage/adapter/AsyncStorageDatabase.ts +65 -26
- package/src/storage/adapter/InMemoryStore.ts +2 -2
- package/src/storage/adapter/IndexedDBAdapter.ts +344 -101
- package/src/storage/adapter/index.ts +1 -1
- package/src/storage/storage.ts +85 -24
- package/src/sync/index.ts +74 -58
- package/src/sync/merger.ts +16 -4
- package/src/sync/outbox.ts +22 -8
- package/src/sync/processors/errorMaps.ts +93 -0
- package/src/sync/processors/mutation.ts +143 -84
- package/src/sync/processors/subscription.ts +67 -36
- package/src/sync/processors/sync.ts +37 -12
- package/src/sync/utils.ts +67 -16
- package/src/types.ts +252 -50
- package/src/util.ts +256 -42
- package/ssr/package.json +1 -1
|
@@ -63,6 +63,7 @@ var predicates_1 = require("../../predicates");
|
|
|
63
63
|
var types_1 = require("../../types");
|
|
64
64
|
var util_1 = require("../../util");
|
|
65
65
|
var logger = new core_1.ConsoleLogger('DataStore');
|
|
66
|
+
var DEFAULT_PRIMARY_KEY_SEPARATOR = '#';
|
|
66
67
|
var AsyncStorageAdapter = /** @class */ (function () {
|
|
67
68
|
function AsyncStorageAdapter() {
|
|
68
69
|
}
|
|
@@ -75,6 +76,45 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
75
76
|
var storeName = namespace + "_" + modelName;
|
|
76
77
|
return storeName;
|
|
77
78
|
};
|
|
79
|
+
// Returns primary keys for a model
|
|
80
|
+
AsyncStorageAdapter.prototype.getIndexKeys = function (namespaceName, modelName) {
|
|
81
|
+
var _a;
|
|
82
|
+
var namespace = this.schema.namespaces[namespaceName];
|
|
83
|
+
var keyPath = (_a = namespace === null || namespace === void 0 ? void 0 : namespace.keys[modelName]) === null || _a === void 0 ? void 0 : _a.primaryKey;
|
|
84
|
+
if (keyPath) {
|
|
85
|
+
return keyPath;
|
|
86
|
+
}
|
|
87
|
+
return ['id'];
|
|
88
|
+
};
|
|
89
|
+
// Retrieves concatenated primary key values from a model
|
|
90
|
+
AsyncStorageAdapter.prototype.getIndexKeyValuesPath = function (model) {
|
|
91
|
+
var modelConstructor = Object.getPrototypeOf(model)
|
|
92
|
+
.constructor;
|
|
93
|
+
var namespaceName = this.namespaceResolver(modelConstructor);
|
|
94
|
+
var keys = this.getIndexKeys(namespaceName, modelConstructor.name);
|
|
95
|
+
// Retrieve key values from model
|
|
96
|
+
var keyValues = keys.map(function (field) { return model[field]; });
|
|
97
|
+
// Return concatenated key values
|
|
98
|
+
return keyValues.join(DEFAULT_PRIMARY_KEY_SEPARATOR);
|
|
99
|
+
};
|
|
100
|
+
// Retrieves concatenated primary key values from a model
|
|
101
|
+
AsyncStorageAdapter.prototype.getIndexKeyValues = function (model) {
|
|
102
|
+
var modelConstructor = Object.getPrototypeOf(model)
|
|
103
|
+
.constructor;
|
|
104
|
+
var namespaceName = this.namespaceResolver(modelConstructor);
|
|
105
|
+
var keys = this.getIndexKeys(namespaceName, modelConstructor.name);
|
|
106
|
+
// Retrieve key values from model
|
|
107
|
+
return keys.map(function (field) { return model[field]; });
|
|
108
|
+
};
|
|
109
|
+
AsyncStorageAdapter.prototype.keysEqual = function (keysA, keysB) {
|
|
110
|
+
if (keysA.length !== keysB.length) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
if (keysA.length === 1) {
|
|
114
|
+
return keysA[0] === keysB[0];
|
|
115
|
+
}
|
|
116
|
+
return keysA.every(function (key, idx) { return key === keysB[idx]; });
|
|
117
|
+
};
|
|
78
118
|
AsyncStorageAdapter.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName) {
|
|
79
119
|
return __awaiter(this, void 0, void 0, function () {
|
|
80
120
|
var error_1;
|
|
@@ -120,7 +160,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
120
160
|
AsyncStorageAdapter.prototype.save = function (model, condition) {
|
|
121
161
|
var e_1, _a;
|
|
122
162
|
return __awaiter(this, void 0, void 0, function () {
|
|
123
|
-
var modelConstructor, storeName,
|
|
163
|
+
var modelConstructor, storeName, namespaceName, connectedModels, set, connectionStoreNames, keyValuesPath, fromDB, predicates, predicateObjs, type, isValid, msg, result, connectionStoreNames_1, connectionStoreNames_1_1, resItem, storeName_1, item, instance, keys, itemKeyValues, itemKeyValuesPath, fromDB_1, opType, modelKeyValues, keysEqual, e_1_1;
|
|
124
164
|
var _this = this;
|
|
125
165
|
return __generator(this, function (_b) {
|
|
126
166
|
switch (_b.label) {
|
|
@@ -128,16 +168,18 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
128
168
|
modelConstructor = Object.getPrototypeOf(model)
|
|
129
169
|
.constructor;
|
|
130
170
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
131
|
-
connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[this.namespaceResolver(modelConstructor)], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
132
171
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
172
|
+
connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
133
173
|
set = new Set();
|
|
134
174
|
connectionStoreNames = Object.values(connectedModels).map(function (_a) {
|
|
135
175
|
var modelName = _a.modelName, item = _a.item, instance = _a.instance;
|
|
136
176
|
var storeName = _this.getStorename(namespaceName, modelName);
|
|
137
177
|
set.add(storeName);
|
|
138
|
-
|
|
178
|
+
var keys = _this.getIndexKeys(namespaceName, modelName);
|
|
179
|
+
return { storeName: storeName, item: item, instance: instance, keys: keys };
|
|
139
180
|
});
|
|
140
|
-
|
|
181
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
182
|
+
return [4 /*yield*/, this.db.get(keyValuesPath, storeName)];
|
|
141
183
|
case 1:
|
|
142
184
|
fromDB = _b.sent();
|
|
143
185
|
if (condition && fromDB) {
|
|
@@ -160,14 +202,17 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
160
202
|
case 4:
|
|
161
203
|
if (!(connectionStoreNames_1_1 = _b.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 8];
|
|
162
204
|
resItem = connectionStoreNames_1_1.value;
|
|
163
|
-
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance;
|
|
164
|
-
|
|
165
|
-
|
|
205
|
+
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance, keys = resItem.keys;
|
|
206
|
+
itemKeyValues = keys.map(function (key) { return item[key]; });
|
|
207
|
+
itemKeyValuesPath = itemKeyValues.join(DEFAULT_PRIMARY_KEY_SEPARATOR);
|
|
208
|
+
return [4 /*yield*/, this.db.get(itemKeyValuesPath, storeName_1)];
|
|
166
209
|
case 5:
|
|
167
210
|
fromDB_1 = _b.sent();
|
|
168
211
|
opType = fromDB_1 ? types_1.OpType.UPDATE : types_1.OpType.INSERT;
|
|
169
|
-
|
|
170
|
-
|
|
212
|
+
modelKeyValues = this.getIndexKeyValues(model);
|
|
213
|
+
keysEqual = this.keysEqual(itemKeyValues, modelKeyValues);
|
|
214
|
+
if (!(keysEqual || opType === types_1.OpType.INSERT)) return [3 /*break*/, 7];
|
|
215
|
+
return [4 /*yield*/, this.db.save(item, storeName_1, keys, itemKeyValuesPath)];
|
|
171
216
|
case 6:
|
|
172
217
|
_b.sent();
|
|
173
218
|
result.push([instance, opType]);
|
|
@@ -199,7 +244,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
199
244
|
var records_1, records_1_1, records_2, records_2_1;
|
|
200
245
|
var e_2, _a, e_3, _b, e_4, _c;
|
|
201
246
|
return __awaiter(this, void 0, void 0, function () {
|
|
202
|
-
var namespace, relations, connectionStoreNames, modelConstructor, relations_1, relations_1_1, relation, fieldName, modelName, targetName, relationType, storeName, modelConstructor_1, _d, recordItem, getByfield, connectionRecord, e_3_1, recordItem, connectionRecord, e_4_1, e_2_1;
|
|
247
|
+
var namespace, relations, connectionStoreNames, modelConstructor, relations_1, relations_1_1, relation, fieldName, modelName, targetName, targetNames, relationType, storeName, modelConstructor_1, _d, recordItem, getByFields, allPresent, keys, connectionRecord, getByfield, key, connectionRecord, e_3_1, recordItem, allPresent, keys, connectionRecord, key, connectionRecord, e_4_1, e_2_1;
|
|
203
248
|
var _this = this;
|
|
204
249
|
return __generator(this, function (_e) {
|
|
205
250
|
switch (_e.label) {
|
|
@@ -218,121 +263,171 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
218
263
|
}
|
|
219
264
|
_e.label = 1;
|
|
220
265
|
case 1:
|
|
221
|
-
_e.trys.push([1,
|
|
266
|
+
_e.trys.push([1, 38, 39, 44]);
|
|
222
267
|
relations_1 = __asyncValues(relations);
|
|
223
268
|
_e.label = 2;
|
|
224
269
|
case 2: return [4 /*yield*/, relations_1.next()];
|
|
225
270
|
case 3:
|
|
226
|
-
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/,
|
|
271
|
+
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
|
|
227
272
|
relation = relations_1_1.value;
|
|
228
|
-
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, relationType = relation.relationType;
|
|
273
|
+
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, targetNames = relation.targetNames, relationType = relation.relationType;
|
|
229
274
|
storeName = this.getStorename(namespaceName, modelName);
|
|
230
275
|
modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, modelName);
|
|
231
276
|
_d = relationType;
|
|
232
277
|
switch (_d) {
|
|
233
278
|
case 'HAS_ONE': return [3 /*break*/, 4];
|
|
234
|
-
case 'BELONGS_TO': return [3 /*break*/,
|
|
235
|
-
case 'HAS_MANY': return [3 /*break*/,
|
|
279
|
+
case 'BELONGS_TO': return [3 /*break*/, 19];
|
|
280
|
+
case 'HAS_MANY': return [3 /*break*/, 34];
|
|
236
281
|
}
|
|
237
|
-
return [3 /*break*/,
|
|
282
|
+
return [3 /*break*/, 35];
|
|
238
283
|
case 4:
|
|
239
|
-
_e.trys.push([4,
|
|
284
|
+
_e.trys.push([4, 12, 13, 18]);
|
|
240
285
|
records_1 = __asyncValues(records);
|
|
241
286
|
_e.label = 5;
|
|
242
287
|
case 5: return [4 /*yield*/, records_1.next()];
|
|
243
288
|
case 6:
|
|
244
|
-
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/,
|
|
289
|
+
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/, 11];
|
|
245
290
|
recordItem = records_1_1.value;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
291
|
+
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 8];
|
|
292
|
+
getByFields = [];
|
|
293
|
+
allPresent = void 0;
|
|
294
|
+
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
295
|
+
allPresent = targetNames.every(function (targetName) {
|
|
296
|
+
return recordItem[targetName] != null;
|
|
297
|
+
});
|
|
298
|
+
if (!allPresent) {
|
|
299
|
+
return [3 /*break*/, 11];
|
|
300
|
+
}
|
|
301
|
+
getByFields = targetNames;
|
|
302
|
+
keys = getByFields
|
|
303
|
+
.map(function (getByField) { return recordItem[getByField]; })
|
|
304
|
+
.join(DEFAULT_PRIMARY_KEY_SEPARATOR);
|
|
305
|
+
return [4 /*yield*/, this.db.get(keys, storeName)];
|
|
250
306
|
case 7:
|
|
251
307
|
connectionRecord = _e.sent();
|
|
252
308
|
recordItem[fieldName] =
|
|
253
309
|
connectionRecord &&
|
|
254
310
|
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
255
|
-
|
|
256
|
-
case 8:
|
|
257
|
-
|
|
258
|
-
|
|
311
|
+
return [3 /*break*/, 10];
|
|
312
|
+
case 8:
|
|
313
|
+
getByfield = recordItem[targetName]
|
|
314
|
+
? targetName
|
|
315
|
+
: fieldName;
|
|
316
|
+
if (!recordItem[getByfield])
|
|
317
|
+
return [3 /*break*/, 11];
|
|
318
|
+
key = recordItem[getByfield];
|
|
319
|
+
return [4 /*yield*/, this.db.get(key, storeName)];
|
|
320
|
+
case 9:
|
|
321
|
+
connectionRecord = _e.sent();
|
|
322
|
+
recordItem[fieldName] =
|
|
323
|
+
connectionRecord &&
|
|
324
|
+
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
325
|
+
_e.label = 10;
|
|
326
|
+
case 10: return [3 /*break*/, 5];
|
|
327
|
+
case 11: return [3 /*break*/, 18];
|
|
328
|
+
case 12:
|
|
259
329
|
e_3_1 = _e.sent();
|
|
260
330
|
e_3 = { error: e_3_1 };
|
|
261
|
-
return [3 /*break*/,
|
|
262
|
-
case
|
|
263
|
-
_e.trys.push([
|
|
264
|
-
if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/,
|
|
331
|
+
return [3 /*break*/, 18];
|
|
332
|
+
case 13:
|
|
333
|
+
_e.trys.push([13, , 16, 17]);
|
|
334
|
+
if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/, 15];
|
|
265
335
|
return [4 /*yield*/, _b.call(records_1)];
|
|
266
|
-
case 12:
|
|
267
|
-
_e.sent();
|
|
268
|
-
_e.label = 13;
|
|
269
|
-
case 13: return [3 /*break*/, 15];
|
|
270
336
|
case 14:
|
|
337
|
+
_e.sent();
|
|
338
|
+
_e.label = 15;
|
|
339
|
+
case 15: return [3 /*break*/, 17];
|
|
340
|
+
case 16:
|
|
271
341
|
if (e_3) throw e_3.error;
|
|
272
342
|
return [7 /*endfinally*/];
|
|
273
|
-
case
|
|
274
|
-
case
|
|
275
|
-
case 17:
|
|
276
|
-
_e.trys.push([17, 23, 24, 29]);
|
|
277
|
-
records_2 = __asyncValues(records);
|
|
278
|
-
_e.label = 18;
|
|
279
|
-
case 18: return [4 /*yield*/, records_2.next()];
|
|
343
|
+
case 17: return [7 /*endfinally*/];
|
|
344
|
+
case 18: return [3 /*break*/, 36];
|
|
280
345
|
case 19:
|
|
281
|
-
|
|
346
|
+
_e.trys.push([19, 27, 28, 33]);
|
|
347
|
+
records_2 = __asyncValues(records);
|
|
348
|
+
_e.label = 20;
|
|
349
|
+
case 20: return [4 /*yield*/, records_2.next()];
|
|
350
|
+
case 21:
|
|
351
|
+
if (!(records_2_1 = _e.sent(), !records_2_1.done)) return [3 /*break*/, 26];
|
|
282
352
|
recordItem = records_2_1.value;
|
|
283
|
-
if (!
|
|
284
|
-
|
|
285
|
-
|
|
353
|
+
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 23];
|
|
354
|
+
allPresent = void 0;
|
|
355
|
+
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
356
|
+
allPresent = targetNames.every(function (targetName) {
|
|
357
|
+
return recordItem[targetName] != null;
|
|
358
|
+
});
|
|
359
|
+
// If not present, there is not yet a connected record
|
|
360
|
+
if (!allPresent) {
|
|
361
|
+
return [3 /*break*/, 26];
|
|
362
|
+
}
|
|
363
|
+
keys = targetNames
|
|
364
|
+
.map(function (targetName) { return recordItem[targetName]; })
|
|
365
|
+
.join(DEFAULT_PRIMARY_KEY_SEPARATOR);
|
|
366
|
+
return [4 /*yield*/, this.db.get(keys, storeName)];
|
|
367
|
+
case 22:
|
|
286
368
|
connectionRecord = _e.sent();
|
|
287
369
|
recordItem[fieldName] =
|
|
288
370
|
connectionRecord &&
|
|
289
371
|
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
372
|
+
targetNames === null || targetNames === void 0 ? void 0 : targetNames.map(function (targetName) {
|
|
373
|
+
delete recordItem[targetName];
|
|
374
|
+
});
|
|
375
|
+
return [3 /*break*/, 25];
|
|
294
376
|
case 23:
|
|
377
|
+
if (!recordItem[targetName]) return [3 /*break*/, 25];
|
|
378
|
+
key = recordItem[targetName];
|
|
379
|
+
return [4 /*yield*/, this.db.get(key, storeName)];
|
|
380
|
+
case 24:
|
|
381
|
+
connectionRecord = _e.sent();
|
|
382
|
+
recordItem[fieldName] =
|
|
383
|
+
connectionRecord &&
|
|
384
|
+
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
385
|
+
delete recordItem[targetName];
|
|
386
|
+
_e.label = 25;
|
|
387
|
+
case 25: return [3 /*break*/, 20];
|
|
388
|
+
case 26: return [3 /*break*/, 33];
|
|
389
|
+
case 27:
|
|
295
390
|
e_4_1 = _e.sent();
|
|
296
391
|
e_4 = { error: e_4_1 };
|
|
297
|
-
return [3 /*break*/,
|
|
298
|
-
case
|
|
299
|
-
_e.trys.push([
|
|
300
|
-
if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/,
|
|
392
|
+
return [3 /*break*/, 33];
|
|
393
|
+
case 28:
|
|
394
|
+
_e.trys.push([28, , 31, 32]);
|
|
395
|
+
if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/, 30];
|
|
301
396
|
return [4 /*yield*/, _c.call(records_2)];
|
|
302
|
-
case
|
|
397
|
+
case 29:
|
|
303
398
|
_e.sent();
|
|
304
|
-
_e.label =
|
|
305
|
-
case
|
|
306
|
-
case
|
|
399
|
+
_e.label = 30;
|
|
400
|
+
case 30: return [3 /*break*/, 32];
|
|
401
|
+
case 31:
|
|
307
402
|
if (e_4) throw e_4.error;
|
|
308
403
|
return [7 /*endfinally*/];
|
|
309
|
-
case
|
|
310
|
-
case
|
|
311
|
-
case
|
|
404
|
+
case 32: return [7 /*endfinally*/];
|
|
405
|
+
case 33: return [3 /*break*/, 36];
|
|
406
|
+
case 34:
|
|
312
407
|
// TODO: Lazy loading
|
|
313
|
-
return [3 /*break*/,
|
|
314
|
-
case
|
|
408
|
+
return [3 /*break*/, 36];
|
|
409
|
+
case 35:
|
|
315
410
|
util_1.exhaustiveCheck(relationType);
|
|
316
|
-
return [3 /*break*/,
|
|
317
|
-
case
|
|
318
|
-
case
|
|
319
|
-
case
|
|
411
|
+
return [3 /*break*/, 36];
|
|
412
|
+
case 36: return [3 /*break*/, 2];
|
|
413
|
+
case 37: return [3 /*break*/, 44];
|
|
414
|
+
case 38:
|
|
320
415
|
e_2_1 = _e.sent();
|
|
321
416
|
e_2 = { error: e_2_1 };
|
|
322
|
-
return [3 /*break*/,
|
|
323
|
-
case
|
|
324
|
-
_e.trys.push([
|
|
325
|
-
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/,
|
|
417
|
+
return [3 /*break*/, 44];
|
|
418
|
+
case 39:
|
|
419
|
+
_e.trys.push([39, , 42, 43]);
|
|
420
|
+
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
|
|
326
421
|
return [4 /*yield*/, _a.call(relations_1)];
|
|
327
|
-
case
|
|
422
|
+
case 40:
|
|
328
423
|
_e.sent();
|
|
329
|
-
_e.label =
|
|
330
|
-
case
|
|
331
|
-
case
|
|
424
|
+
_e.label = 41;
|
|
425
|
+
case 41: return [3 /*break*/, 43];
|
|
426
|
+
case 42:
|
|
332
427
|
if (e_2) throw e_2.error;
|
|
333
428
|
return [7 /*endfinally*/];
|
|
334
|
-
case
|
|
335
|
-
case
|
|
429
|
+
case 43: return [7 /*endfinally*/];
|
|
430
|
+
case 44: return [2 /*return*/, records.map(function (record) {
|
|
336
431
|
return _this.modelInstanceCreator(modelConstructor, record);
|
|
337
432
|
})];
|
|
338
433
|
}
|
|
@@ -341,7 +436,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
341
436
|
};
|
|
342
437
|
AsyncStorageAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
|
|
343
438
|
return __awaiter(this, void 0, void 0, function () {
|
|
344
|
-
var storeName, namespaceName, predicates,
|
|
439
|
+
var storeName, namespaceName, predicates, keys, queryByKey, hasSort, hasPagination, records;
|
|
345
440
|
var _this = this;
|
|
346
441
|
return __generator(this, function (_a) {
|
|
347
442
|
switch (_a.label) {
|
|
@@ -349,7 +444,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
349
444
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
350
445
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
351
446
|
predicates = predicate && predicates_1.ModelPredicateCreator.getPredicates(predicate);
|
|
352
|
-
|
|
447
|
+
keys = this.getIndexKeys(namespaceName, modelConstructor.name);
|
|
448
|
+
queryByKey = predicates && this.keyValueFromPredicate(predicates, keys);
|
|
353
449
|
hasSort = pagination && pagination.sort;
|
|
354
450
|
hasPagination = pagination && pagination.limit;
|
|
355
451
|
return [4 /*yield*/, (function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -357,8 +453,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
357
453
|
return __generator(this, function (_a) {
|
|
358
454
|
switch (_a.label) {
|
|
359
455
|
case 0:
|
|
360
|
-
if (!
|
|
361
|
-
return [4 /*yield*/, this.
|
|
456
|
+
if (!queryByKey) return [3 /*break*/, 2];
|
|
457
|
+
return [4 /*yield*/, this.getByKey(storeName, queryByKey)];
|
|
362
458
|
case 1:
|
|
363
459
|
record = _a.sent();
|
|
364
460
|
return [2 /*return*/, record ? [record] : []];
|
|
@@ -386,12 +482,12 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
386
482
|
});
|
|
387
483
|
});
|
|
388
484
|
};
|
|
389
|
-
AsyncStorageAdapter.prototype.
|
|
485
|
+
AsyncStorageAdapter.prototype.getByKey = function (storeName, keyValuePath) {
|
|
390
486
|
return __awaiter(this, void 0, void 0, function () {
|
|
391
487
|
var record;
|
|
392
488
|
return __generator(this, function (_a) {
|
|
393
489
|
switch (_a.label) {
|
|
394
|
-
case 0: return [4 /*yield*/, this.db.get(
|
|
490
|
+
case 0: return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
395
491
|
case 1:
|
|
396
492
|
record = _a.sent();
|
|
397
493
|
return [2 /*return*/, record];
|
|
@@ -409,11 +505,33 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
409
505
|
});
|
|
410
506
|
});
|
|
411
507
|
};
|
|
412
|
-
AsyncStorageAdapter.prototype.
|
|
508
|
+
AsyncStorageAdapter.prototype.keyValueFromPredicate = function (predicates, keys) {
|
|
509
|
+
var e_5, _a;
|
|
413
510
|
var predicateObjs = predicates.predicates;
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
511
|
+
if (predicateObjs.length !== keys.length) {
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
var keyValues = [];
|
|
515
|
+
var _loop_1 = function (key) {
|
|
516
|
+
var predicateObj = predicateObjs.find(function (p) { return types_1.isPredicateObj(p) && p.field === key && p.operator === 'eq'; });
|
|
517
|
+
predicateObj && keyValues.push(predicateObj.operand);
|
|
518
|
+
};
|
|
519
|
+
try {
|
|
520
|
+
for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
|
|
521
|
+
var key = keys_1_1.value;
|
|
522
|
+
_loop_1(key);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
526
|
+
finally {
|
|
527
|
+
try {
|
|
528
|
+
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
|
|
529
|
+
}
|
|
530
|
+
finally { if (e_5) throw e_5.error; }
|
|
531
|
+
}
|
|
532
|
+
return keyValues.length === keys.length
|
|
533
|
+
? keyValues.join(DEFAULT_PRIMARY_KEY_SEPARATOR)
|
|
534
|
+
: undefined;
|
|
417
535
|
};
|
|
418
536
|
AsyncStorageAdapter.prototype.filterOnPredicate = function (storeName, predicates) {
|
|
419
537
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -467,7 +585,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
467
585
|
};
|
|
468
586
|
AsyncStorageAdapter.prototype.delete = function (modelOrModelConstructor, condition) {
|
|
469
587
|
return __awaiter(this, void 0, void 0, function () {
|
|
470
|
-
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor,
|
|
588
|
+
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor, namespaceName, storeName, keyValuePath, fromDB, msg, predicates, predicateObjs, type, isValid, msg, relations, relations, deletedModels;
|
|
471
589
|
return __generator(this, function (_a) {
|
|
472
590
|
switch (_a.label) {
|
|
473
591
|
case 0:
|
|
@@ -508,10 +626,11 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
508
626
|
model = modelOrModelConstructor;
|
|
509
627
|
modelConstructor = Object.getPrototypeOf(model)
|
|
510
628
|
.constructor;
|
|
511
|
-
|
|
629
|
+
namespaceName = this.namespaceResolver(modelConstructor);
|
|
512
630
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
513
631
|
if (!condition) return [3 /*break*/, 11];
|
|
514
|
-
|
|
632
|
+
keyValuePath = this.getIndexKeyValuesPath(model);
|
|
633
|
+
return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
515
634
|
case 9:
|
|
516
635
|
fromDB = _a.sent();
|
|
517
636
|
if (fromDB === undefined) {
|
|
@@ -527,16 +646,14 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
527
646
|
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
528
647
|
throw new Error(msg);
|
|
529
648
|
}
|
|
530
|
-
relations = this.schema.namespaces[
|
|
531
|
-
|
|
532
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
649
|
+
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
650
|
+
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
533
651
|
case 10:
|
|
534
652
|
_a.sent();
|
|
535
653
|
return [3 /*break*/, 13];
|
|
536
654
|
case 11:
|
|
537
|
-
relations = this.schema.namespaces[
|
|
538
|
-
|
|
539
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
655
|
+
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
656
|
+
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
540
657
|
case 12:
|
|
541
658
|
_a.sent();
|
|
542
659
|
_a.label = 13;
|
|
@@ -555,9 +672,9 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
555
672
|
};
|
|
556
673
|
AsyncStorageAdapter.prototype.deleteItem = function (deleteQueue) {
|
|
557
674
|
var deleteQueue_1, deleteQueue_1_1;
|
|
558
|
-
var
|
|
675
|
+
var e_6, _a, e_7, _b;
|
|
559
676
|
return __awaiter(this, void 0, void 0, function () {
|
|
560
|
-
var deleteItem, storeName, items, items_1, items_1_1, item,
|
|
677
|
+
var deleteItem, storeName, items, items_1, items_1_1, item, keyValuesPath, e_7_1, e_6_1;
|
|
561
678
|
return __generator(this, function (_c) {
|
|
562
679
|
switch (_c.label) {
|
|
563
680
|
case 0:
|
|
@@ -580,16 +697,16 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
580
697
|
item = items_1_1.value;
|
|
581
698
|
if (!item) return [3 /*break*/, 7];
|
|
582
699
|
if (!(typeof item === 'object')) return [3 /*break*/, 7];
|
|
583
|
-
|
|
584
|
-
return [4 /*yield*/, this.db.delete(
|
|
700
|
+
keyValuesPath = this.getIndexKeyValuesPath(item);
|
|
701
|
+
return [4 /*yield*/, this.db.delete(keyValuesPath, storeName)];
|
|
585
702
|
case 6:
|
|
586
703
|
_c.sent();
|
|
587
704
|
_c.label = 7;
|
|
588
705
|
case 7: return [3 /*break*/, 4];
|
|
589
706
|
case 8: return [3 /*break*/, 15];
|
|
590
707
|
case 9:
|
|
591
|
-
|
|
592
|
-
|
|
708
|
+
e_7_1 = _c.sent();
|
|
709
|
+
e_7 = { error: e_7_1 };
|
|
593
710
|
return [3 /*break*/, 15];
|
|
594
711
|
case 10:
|
|
595
712
|
_c.trys.push([10, , 13, 14]);
|
|
@@ -600,14 +717,14 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
600
717
|
_c.label = 12;
|
|
601
718
|
case 12: return [3 /*break*/, 14];
|
|
602
719
|
case 13:
|
|
603
|
-
if (
|
|
720
|
+
if (e_7) throw e_7.error;
|
|
604
721
|
return [7 /*endfinally*/];
|
|
605
722
|
case 14: return [7 /*endfinally*/];
|
|
606
723
|
case 15: return [3 /*break*/, 1];
|
|
607
724
|
case 16: return [3 /*break*/, 23];
|
|
608
725
|
case 17:
|
|
609
|
-
|
|
610
|
-
|
|
726
|
+
e_6_1 = _c.sent();
|
|
727
|
+
e_6 = { error: e_6_1 };
|
|
611
728
|
return [3 /*break*/, 23];
|
|
612
729
|
case 18:
|
|
613
730
|
_c.trys.push([18, , 21, 22]);
|
|
@@ -618,7 +735,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
618
735
|
_c.label = 20;
|
|
619
736
|
case 20: return [3 /*break*/, 22];
|
|
620
737
|
case 21:
|
|
621
|
-
if (
|
|
738
|
+
if (e_6) throw e_6.error;
|
|
622
739
|
return [7 /*endfinally*/];
|
|
623
740
|
case 22: return [7 /*endfinally*/];
|
|
624
741
|
case 23: return [2 /*return*/];
|
|
@@ -636,21 +753,21 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
636
753
|
*/
|
|
637
754
|
AsyncStorageAdapter.prototype.deleteTraverse = function (relations, models, srcModel, nameSpace, deleteQueue) {
|
|
638
755
|
var relations_2, relations_2_1, models_1, models_1_1, models_2, models_2_1;
|
|
639
|
-
var
|
|
756
|
+
var e_8, _a, e_9, _b, e_10, _c;
|
|
640
757
|
return __awaiter(this, void 0, void 0, function () {
|
|
641
|
-
var rel, relationType, modelName, targetName, storeName, index, _d, model,
|
|
758
|
+
var rel, relationType, modelName, targetName, targetNames, associatedWith, storeName, index, _d, model, hasOneIndex_1, hasConnectedModelFields, keyValuesPath, values_1, allRecords, recordToDelete, hasOneIndex_2, hasOneCustomField, keyValuesPath, value_1, allRecords, recordToDelete, e_9_1, model, keyValues, allRecords, indices, childrenArray, e_10_1, e_8_1;
|
|
642
759
|
var _this = this;
|
|
643
760
|
return __generator(this, function (_e) {
|
|
644
761
|
switch (_e.label) {
|
|
645
762
|
case 0:
|
|
646
|
-
_e.trys.push([0,
|
|
763
|
+
_e.trys.push([0, 38, 39, 44]);
|
|
647
764
|
relations_2 = __asyncValues(relations);
|
|
648
765
|
_e.label = 1;
|
|
649
766
|
case 1: return [4 /*yield*/, relations_2.next()];
|
|
650
767
|
case 2:
|
|
651
|
-
if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/,
|
|
768
|
+
if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/, 37];
|
|
652
769
|
rel = relations_2_1.value;
|
|
653
|
-
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName;
|
|
770
|
+
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
|
|
654
771
|
storeName = this.getStorename(nameSpace, modelName);
|
|
655
772
|
index = util_1.getIndex(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
656
773
|
.relationTypes, srcModel) ||
|
|
@@ -661,112 +778,159 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
661
778
|
_d = relationType;
|
|
662
779
|
switch (_d) {
|
|
663
780
|
case 'HAS_ONE': return [3 /*break*/, 3];
|
|
664
|
-
case 'HAS_MANY': return [3 /*break*/,
|
|
665
|
-
case 'BELONGS_TO': return [3 /*break*/,
|
|
781
|
+
case 'HAS_MANY': return [3 /*break*/, 20];
|
|
782
|
+
case 'BELONGS_TO': return [3 /*break*/, 34];
|
|
666
783
|
}
|
|
667
|
-
return [3 /*break*/,
|
|
784
|
+
return [3 /*break*/, 35];
|
|
668
785
|
case 3:
|
|
669
|
-
_e.trys.push([3,
|
|
786
|
+
_e.trys.push([3, 13, 14, 19]);
|
|
670
787
|
models_1 = __asyncValues(models);
|
|
671
788
|
_e.label = 4;
|
|
672
789
|
case 4: return [4 /*yield*/, models_1.next()];
|
|
673
790
|
case 5:
|
|
674
|
-
if (!(models_1_1 = _e.sent(), !models_1_1.done)) return [3 /*break*/,
|
|
791
|
+
if (!(models_1_1 = _e.sent(), !models_1_1.done)) return [3 /*break*/, 12];
|
|
675
792
|
model = models_1_1.value;
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
793
|
+
if (!(targetNames && (targetNames === null || targetNames === void 0 ? void 0 : targetNames.length))) return [3 /*break*/, 8];
|
|
794
|
+
hasOneIndex_1 = index || associatedWith;
|
|
795
|
+
hasConnectedModelFields = targetNames.every(function (targetName) {
|
|
796
|
+
return model.hasOwnProperty(targetName);
|
|
797
|
+
});
|
|
798
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
799
|
+
if (hasConnectedModelFields) {
|
|
800
|
+
// Values will be that of the child model
|
|
801
|
+
values_1 = targetNames.map(function (targetName) { return model[targetName]; });
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
// values will be that of the parent model
|
|
805
|
+
values_1 = keyValuesPath;
|
|
806
|
+
}
|
|
807
|
+
if (values_1.length === 0)
|
|
808
|
+
return [3 /*break*/, 12];
|
|
681
809
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
682
810
|
case 6:
|
|
683
811
|
allRecords = _e.sent();
|
|
684
|
-
recordToDelete =
|
|
812
|
+
recordToDelete = void 0;
|
|
813
|
+
// values === targetNames
|
|
814
|
+
if (hasConnectedModelFields) {
|
|
815
|
+
/**
|
|
816
|
+
* Retrieve record by finding the record where all
|
|
817
|
+
* targetNames are present on the connected model
|
|
818
|
+
*/
|
|
819
|
+
recordToDelete = allRecords.filter(function (childItem) {
|
|
820
|
+
return values_1.every(function (value) { return childItem[value] != null; });
|
|
821
|
+
});
|
|
822
|
+
}
|
|
823
|
+
else {
|
|
824
|
+
// values === keyValuePath
|
|
825
|
+
recordToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_1] === values_1; });
|
|
826
|
+
}
|
|
685
827
|
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
686
828
|
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
687
829
|
case 7:
|
|
688
830
|
_e.sent();
|
|
689
|
-
|
|
690
|
-
case 8:
|
|
691
|
-
|
|
831
|
+
return [3 /*break*/, 11];
|
|
832
|
+
case 8:
|
|
833
|
+
hasOneIndex_2 = index || associatedWith;
|
|
834
|
+
hasOneCustomField = targetName in model;
|
|
835
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
836
|
+
value_1 = hasOneCustomField
|
|
837
|
+
? model[targetName]
|
|
838
|
+
: keyValuesPath;
|
|
839
|
+
if (!value_1)
|
|
840
|
+
return [3 /*break*/, 12];
|
|
841
|
+
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
842
|
+
case 9:
|
|
843
|
+
allRecords = _e.sent();
|
|
844
|
+
recordToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_2] === value_1; });
|
|
845
|
+
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
846
|
+
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
692
847
|
case 10:
|
|
693
|
-
e_8_1 = _e.sent();
|
|
694
|
-
e_8 = { error: e_8_1 };
|
|
695
|
-
return [3 /*break*/, 16];
|
|
696
|
-
case 11:
|
|
697
|
-
_e.trys.push([11, , 14, 15]);
|
|
698
|
-
if (!(models_1_1 && !models_1_1.done && (_b = models_1.return))) return [3 /*break*/, 13];
|
|
699
|
-
return [4 /*yield*/, _b.call(models_1)];
|
|
700
|
-
case 12:
|
|
701
848
|
_e.sent();
|
|
702
|
-
_e.label =
|
|
703
|
-
case
|
|
849
|
+
_e.label = 11;
|
|
850
|
+
case 11: return [3 /*break*/, 4];
|
|
851
|
+
case 12: return [3 /*break*/, 19];
|
|
852
|
+
case 13:
|
|
853
|
+
e_9_1 = _e.sent();
|
|
854
|
+
e_9 = { error: e_9_1 };
|
|
855
|
+
return [3 /*break*/, 19];
|
|
704
856
|
case 14:
|
|
705
|
-
|
|
706
|
-
return [
|
|
707
|
-
|
|
708
|
-
case
|
|
857
|
+
_e.trys.push([14, , 17, 18]);
|
|
858
|
+
if (!(models_1_1 && !models_1_1.done && (_b = models_1.return))) return [3 /*break*/, 16];
|
|
859
|
+
return [4 /*yield*/, _b.call(models_1)];
|
|
860
|
+
case 15:
|
|
861
|
+
_e.sent();
|
|
862
|
+
_e.label = 16;
|
|
863
|
+
case 16: return [3 /*break*/, 18];
|
|
709
864
|
case 17:
|
|
710
|
-
|
|
865
|
+
if (e_9) throw e_9.error;
|
|
866
|
+
return [7 /*endfinally*/];
|
|
867
|
+
case 18: return [7 /*endfinally*/];
|
|
868
|
+
case 19: return [3 /*break*/, 36];
|
|
869
|
+
case 20:
|
|
870
|
+
_e.trys.push([20, 27, 28, 33]);
|
|
711
871
|
models_2 = __asyncValues(models);
|
|
712
|
-
_e.label =
|
|
713
|
-
case
|
|
714
|
-
case
|
|
715
|
-
if (!(models_2_1 = _e.sent(), !models_2_1.done)) return [3 /*break*/,
|
|
872
|
+
_e.label = 21;
|
|
873
|
+
case 21: return [4 /*yield*/, models_2.next()];
|
|
874
|
+
case 22:
|
|
875
|
+
if (!(models_2_1 = _e.sent(), !models_2_1.done)) return [3 /*break*/, 26];
|
|
716
876
|
model = models_2_1.value;
|
|
877
|
+
keyValues = this.getIndexKeyValues(model);
|
|
717
878
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
718
|
-
case
|
|
879
|
+
case 23:
|
|
719
880
|
allRecords = _e.sent();
|
|
720
|
-
|
|
881
|
+
indices = index.split('-');
|
|
882
|
+
childrenArray = allRecords.filter(function (childItem) {
|
|
883
|
+
return indices.every(function (index) { return keyValues.includes(childItem[index]); });
|
|
884
|
+
});
|
|
721
885
|
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
722
886
|
.relationTypes, childrenArray, modelName, nameSpace, deleteQueue)];
|
|
723
|
-
case 21:
|
|
724
|
-
_e.sent();
|
|
725
|
-
_e.label = 22;
|
|
726
|
-
case 22: return [3 /*break*/, 18];
|
|
727
|
-
case 23: return [3 /*break*/, 30];
|
|
728
887
|
case 24:
|
|
729
|
-
e_9_1 = _e.sent();
|
|
730
|
-
e_9 = { error: e_9_1 };
|
|
731
|
-
return [3 /*break*/, 30];
|
|
732
|
-
case 25:
|
|
733
|
-
_e.trys.push([25, , 28, 29]);
|
|
734
|
-
if (!(models_2_1 && !models_2_1.done && (_c = models_2.return))) return [3 /*break*/, 27];
|
|
735
|
-
return [4 /*yield*/, _c.call(models_2)];
|
|
736
|
-
case 26:
|
|
737
888
|
_e.sent();
|
|
738
|
-
_e.label =
|
|
739
|
-
case
|
|
889
|
+
_e.label = 25;
|
|
890
|
+
case 25: return [3 /*break*/, 21];
|
|
891
|
+
case 26: return [3 /*break*/, 33];
|
|
892
|
+
case 27:
|
|
893
|
+
e_10_1 = _e.sent();
|
|
894
|
+
e_10 = { error: e_10_1 };
|
|
895
|
+
return [3 /*break*/, 33];
|
|
740
896
|
case 28:
|
|
741
|
-
|
|
897
|
+
_e.trys.push([28, , 31, 32]);
|
|
898
|
+
if (!(models_2_1 && !models_2_1.done && (_c = models_2.return))) return [3 /*break*/, 30];
|
|
899
|
+
return [4 /*yield*/, _c.call(models_2)];
|
|
900
|
+
case 29:
|
|
901
|
+
_e.sent();
|
|
902
|
+
_e.label = 30;
|
|
903
|
+
case 30: return [3 /*break*/, 32];
|
|
904
|
+
case 31:
|
|
905
|
+
if (e_10) throw e_10.error;
|
|
742
906
|
return [7 /*endfinally*/];
|
|
743
|
-
case
|
|
744
|
-
case
|
|
745
|
-
case
|
|
907
|
+
case 32: return [7 /*endfinally*/];
|
|
908
|
+
case 33: return [3 /*break*/, 36];
|
|
909
|
+
case 34:
|
|
746
910
|
// Intentionally blank
|
|
747
|
-
return [3 /*break*/,
|
|
748
|
-
case 32:
|
|
749
|
-
util_1.exhaustiveCheck(relationType);
|
|
750
|
-
return [3 /*break*/, 33];
|
|
751
|
-
case 33: return [3 /*break*/, 1];
|
|
752
|
-
case 34: return [3 /*break*/, 41];
|
|
911
|
+
return [3 /*break*/, 36];
|
|
753
912
|
case 35:
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
case
|
|
758
|
-
|
|
759
|
-
|
|
913
|
+
util_1.exhaustiveCheck(relationType);
|
|
914
|
+
return [3 /*break*/, 36];
|
|
915
|
+
case 36: return [3 /*break*/, 1];
|
|
916
|
+
case 37: return [3 /*break*/, 44];
|
|
917
|
+
case 38:
|
|
918
|
+
e_8_1 = _e.sent();
|
|
919
|
+
e_8 = { error: e_8_1 };
|
|
920
|
+
return [3 /*break*/, 44];
|
|
921
|
+
case 39:
|
|
922
|
+
_e.trys.push([39, , 42, 43]);
|
|
923
|
+
if (!(relations_2_1 && !relations_2_1.done && (_a = relations_2.return))) return [3 /*break*/, 41];
|
|
760
924
|
return [4 /*yield*/, _a.call(relations_2)];
|
|
761
|
-
case
|
|
925
|
+
case 40:
|
|
762
926
|
_e.sent();
|
|
763
|
-
_e.label =
|
|
764
|
-
case
|
|
765
|
-
case
|
|
766
|
-
if (
|
|
927
|
+
_e.label = 41;
|
|
928
|
+
case 41: return [3 /*break*/, 43];
|
|
929
|
+
case 42:
|
|
930
|
+
if (e_8) throw e_8.error;
|
|
767
931
|
return [7 /*endfinally*/];
|
|
768
|
-
case
|
|
769
|
-
case
|
|
932
|
+
case 43: return [7 /*endfinally*/];
|
|
933
|
+
case 44:
|
|
770
934
|
deleteQueue.push({
|
|
771
935
|
storeName: this.getStorename(nameSpace, srcModel),
|
|
772
936
|
items: models.map(function (record) {
|
|
@@ -794,21 +958,25 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
794
958
|
};
|
|
795
959
|
AsyncStorageAdapter.prototype.batchSave = function (modelConstructor, items) {
|
|
796
960
|
return __awaiter(this, void 0, void 0, function () {
|
|
797
|
-
var modelName, namespaceName, storeName, batch,
|
|
798
|
-
var
|
|
961
|
+
var modelName, namespaceName, storeName, keys, batch, _loop_2, this_1, items_2, items_2_1, item;
|
|
962
|
+
var e_11, _a;
|
|
963
|
+
var _this = this;
|
|
799
964
|
return __generator(this, function (_b) {
|
|
800
965
|
switch (_b.label) {
|
|
801
966
|
case 0:
|
|
802
967
|
modelName = modelConstructor.name;
|
|
803
968
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
804
969
|
storeName = this.getStorename(namespaceName, modelName);
|
|
970
|
+
keys = this.getIndexKeys(namespaceName, modelName);
|
|
805
971
|
batch = [];
|
|
806
|
-
|
|
807
|
-
var
|
|
808
|
-
var connectedModels = util_1.traverseModel(
|
|
972
|
+
_loop_2 = function (item) {
|
|
973
|
+
var model = this_1.modelInstanceCreator(modelConstructor, item);
|
|
974
|
+
var connectedModels = util_1.traverseModel(modelName, model, this_1.schema.namespaces[namespaceName], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
|
|
975
|
+
var keyValuesPath = this_1.getIndexKeyValuesPath(model);
|
|
809
976
|
var instance = connectedModels.find(function (_a) {
|
|
810
977
|
var instance = _a.instance;
|
|
811
|
-
|
|
978
|
+
var instanceKeyValuesPath = _this.getIndexKeyValuesPath(instance);
|
|
979
|
+
return _this.keysEqual([instanceKeyValuesPath], [keyValuesPath]);
|
|
812
980
|
}).instance;
|
|
813
981
|
batch.push(instance);
|
|
814
982
|
};
|
|
@@ -816,17 +984,17 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
816
984
|
try {
|
|
817
985
|
for (items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
818
986
|
item = items_2_1.value;
|
|
819
|
-
|
|
987
|
+
_loop_2(item);
|
|
820
988
|
}
|
|
821
989
|
}
|
|
822
|
-
catch (
|
|
990
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
823
991
|
finally {
|
|
824
992
|
try {
|
|
825
993
|
if (items_2_1 && !items_2_1.done && (_a = items_2.return)) _a.call(items_2);
|
|
826
994
|
}
|
|
827
|
-
finally { if (
|
|
995
|
+
finally { if (e_11) throw e_11.error; }
|
|
828
996
|
}
|
|
829
|
-
return [4 /*yield*/, this.db.batchSave(storeName, batch)];
|
|
997
|
+
return [4 /*yield*/, this.db.batchSave(storeName, batch, keys)];
|
|
830
998
|
case 1: return [2 /*return*/, _b.sent()];
|
|
831
999
|
}
|
|
832
1000
|
});
|