@aws-amplify/datastore 3.12.12 → 3.12.13-custom-pk.1
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/dist/aws-amplify-datastore.js +1854 -965
- package/dist/aws-amplify-datastore.js.map +1 -1
- package/dist/aws-amplify-datastore.min.js +7 -7
- package/dist/aws-amplify-datastore.min.js.map +1 -1
- package/lib/datastore/datastore.d.ts +13 -16
- package/lib/datastore/datastore.js +130 -63
- 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 +4 -3
- package/lib/storage/adapter/AsyncStorageAdapter.js +354 -203
- package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +14 -4
- package/lib/storage/adapter/AsyncStorageDatabase.js +65 -28
- package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +5 -4
- package/lib/storage/adapter/IndexedDBAdapter.js +389 -267
- package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib/storage/adapter/index.d.ts +1 -1
- package/lib/storage/storage.d.ts +1 -1
- package/lib/storage/storage.js +92 -27
- package/lib/storage/storage.js.map +1 -1
- package/lib/sync/index.d.ts +21 -4
- package/lib/sync/index.js +13 -11
- package/lib/sync/index.js.map +1 -1
- package/lib/sync/merger.d.ts +3 -3
- package/lib/sync/merger.js +7 -6
- package/lib/sync/merger.js.map +1 -1
- package/lib/sync/outbox.d.ts +2 -2
- package/lib/sync/outbox.js +11 -9
- package/lib/sync/outbox.js.map +1 -1
- package/lib/sync/processors/mutation.js +60 -42
- package/lib/sync/processors/mutation.js.map +1 -1
- package/lib/sync/processors/subscription.js.map +1 -1
- package/lib/sync/processors/sync.js.map +1 -1
- package/lib/sync/utils.d.ts +3 -2
- package/lib/sync/utils.js +61 -8
- package/lib/sync/utils.js.map +1 -1
- package/lib/types.d.ts +64 -25
- package/lib/types.js +10 -1
- package/lib/types.js.map +1 -1
- package/lib/util.d.ts +56 -24
- package/lib/util.js +334 -170
- package/lib/util.js.map +1 -1
- package/lib-esm/datastore/datastore.d.ts +13 -16
- package/lib-esm/datastore/datastore.js +132 -65
- 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 +4 -3
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js +355 -204
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageDatabase.d.ts +14 -4
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js +66 -29
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +5 -4
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +390 -268
- 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 +1 -1
- package/lib-esm/storage/storage.js +92 -27
- package/lib-esm/storage/storage.js.map +1 -1
- package/lib-esm/sync/index.d.ts +21 -4
- package/lib-esm/sync/index.js +15 -13
- package/lib-esm/sync/index.js.map +1 -1
- package/lib-esm/sync/merger.d.ts +3 -3
- package/lib-esm/sync/merger.js +7 -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 +12 -10
- package/lib-esm/sync/outbox.js.map +1 -1
- package/lib-esm/sync/processors/mutation.js +61 -43
- package/lib-esm/sync/processors/mutation.js.map +1 -1
- package/lib-esm/sync/processors/subscription.js.map +1 -1
- package/lib-esm/sync/processors/sync.js.map +1 -1
- package/lib-esm/sync/utils.d.ts +3 -2
- package/lib-esm/sync/utils.js +62 -10
- package/lib-esm/sync/utils.js.map +1 -1
- package/lib-esm/types.d.ts +64 -25
- package/lib-esm/types.js +9 -2
- package/lib-esm/types.js.map +1 -1
- package/lib-esm/util.d.ts +56 -24
- package/lib-esm/util.js +334 -170
- package/lib-esm/util.js.map +1 -1
- package/package.json +7 -7
- package/src/datastore/datastore.ts +253 -113
- package/src/predicates/index.ts +32 -10
- package/src/storage/adapter/AsyncStorageAdapter.ts +309 -93
- package/src/storage/adapter/AsyncStorageDatabase.ts +74 -26
- package/src/storage/adapter/IndexedDBAdapter.ts +319 -136
- package/src/storage/adapter/index.ts +1 -1
- package/src/storage/storage.ts +68 -21
- package/src/sync/index.ts +41 -26
- package/src/sync/merger.ts +14 -4
- package/src/sync/outbox.ts +21 -8
- package/src/sync/processors/mutation.ts +49 -45
- package/src/sync/processors/subscription.ts +0 -1
- package/src/sync/processors/sync.ts +1 -3
- package/src/sync/utils.ts +69 -12
- package/src/types.ts +181 -29
- package/src/util.ts +415 -176
|
@@ -69,11 +69,19 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
69
69
|
AsyncStorageAdapter.prototype.getStorenameForModel = function (modelConstructor) {
|
|
70
70
|
var namespace = this.namespaceResolver(modelConstructor);
|
|
71
71
|
var modelName = modelConstructor.name;
|
|
72
|
-
return
|
|
72
|
+
return util_1.getStorename(namespace, modelName);
|
|
73
73
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
// Retrieves primary key values from a model
|
|
75
|
+
AsyncStorageAdapter.prototype.getIndexKeyValuesFromModel = function (model) {
|
|
76
|
+
var modelConstructor = Object.getPrototypeOf(model)
|
|
77
|
+
.constructor;
|
|
78
|
+
var namespaceName = this.namespaceResolver(modelConstructor);
|
|
79
|
+
var keys = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
80
|
+
return util_1.extractPrimaryKeyValues(model, keys);
|
|
81
|
+
};
|
|
82
|
+
// Retrieves concatenated primary key values from a model
|
|
83
|
+
AsyncStorageAdapter.prototype.getIndexKeyValuesPath = function (model) {
|
|
84
|
+
return this.getIndexKeyValuesFromModel(model).join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
77
85
|
};
|
|
78
86
|
AsyncStorageAdapter.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName) {
|
|
79
87
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -120,7 +128,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
120
128
|
AsyncStorageAdapter.prototype.save = function (model, condition) {
|
|
121
129
|
var e_1, _a;
|
|
122
130
|
return __awaiter(this, void 0, void 0, function () {
|
|
123
|
-
var modelConstructor, storeName,
|
|
131
|
+
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, e_1_1;
|
|
124
132
|
var _this = this;
|
|
125
133
|
return __generator(this, function (_b) {
|
|
126
134
|
switch (_b.label) {
|
|
@@ -128,16 +136,18 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
128
136
|
modelConstructor = Object.getPrototypeOf(model)
|
|
129
137
|
.constructor;
|
|
130
138
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
131
|
-
connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[this.namespaceResolver(modelConstructor)], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
132
139
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
140
|
+
connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
133
141
|
set = new Set();
|
|
134
142
|
connectionStoreNames = Object.values(connectedModels).map(function (_a) {
|
|
135
143
|
var modelName = _a.modelName, item = _a.item, instance = _a.instance;
|
|
136
|
-
var storeName =
|
|
144
|
+
var storeName = util_1.getStorename(namespaceName, modelName);
|
|
137
145
|
set.add(storeName);
|
|
138
|
-
|
|
146
|
+
var keys = util_1.getIndexKeys(_this.schema.namespaces[namespaceName], modelName);
|
|
147
|
+
return { storeName: storeName, item: item, instance: instance, keys: keys };
|
|
139
148
|
});
|
|
140
|
-
|
|
149
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
150
|
+
return [4 /*yield*/, this.db.get(keyValuesPath, storeName)];
|
|
141
151
|
case 1:
|
|
142
152
|
fromDB = _b.sent();
|
|
143
153
|
if (condition && fromDB) {
|
|
@@ -160,14 +170,17 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
160
170
|
case 4:
|
|
161
171
|
if (!(connectionStoreNames_1_1 = _b.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 8];
|
|
162
172
|
resItem = connectionStoreNames_1_1.value;
|
|
163
|
-
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance;
|
|
164
|
-
|
|
165
|
-
|
|
173
|
+
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance, keys = resItem.keys;
|
|
174
|
+
itemKeyValues = keys.map(function (key) { return item[key]; });
|
|
175
|
+
itemKeyValuesPath = itemKeyValues.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
176
|
+
return [4 /*yield*/, this.db.get(itemKeyValuesPath, storeName_1)];
|
|
166
177
|
case 5:
|
|
167
178
|
fromDB_1 = _b.sent();
|
|
168
179
|
opType = fromDB_1 ? types_1.OpType.UPDATE : types_1.OpType.INSERT;
|
|
169
|
-
|
|
170
|
-
|
|
180
|
+
modelKeyValues = this.getIndexKeyValuesFromModel(model);
|
|
181
|
+
if (!(util_1.keysEqual(itemKeyValues, modelKeyValues) ||
|
|
182
|
+
opType === types_1.OpType.INSERT)) return [3 /*break*/, 7];
|
|
183
|
+
return [4 /*yield*/, this.db.save(item, storeName_1, keys, itemKeyValuesPath)];
|
|
171
184
|
case 6:
|
|
172
185
|
_b.sent();
|
|
173
186
|
result.push([instance, opType]);
|
|
@@ -199,7 +212,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
199
212
|
var records_1, records_1_1, records_2, records_2_1;
|
|
200
213
|
var e_2, _a, e_3, _b, e_4, _c;
|
|
201
214
|
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;
|
|
215
|
+
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
216
|
var _this = this;
|
|
204
217
|
return __generator(this, function (_e) {
|
|
205
218
|
switch (_e.label) {
|
|
@@ -208,7 +221,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
208
221
|
relations = namespace.relationships[srcModelName].relationTypes;
|
|
209
222
|
connectionStoreNames = relations.map(function (_a) {
|
|
210
223
|
var modelName = _a.modelName;
|
|
211
|
-
return
|
|
224
|
+
return util_1.getStorename(namespaceName, modelName);
|
|
212
225
|
});
|
|
213
226
|
modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
|
|
214
227
|
if (connectionStoreNames.length === 0) {
|
|
@@ -218,121 +231,171 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
218
231
|
}
|
|
219
232
|
_e.label = 1;
|
|
220
233
|
case 1:
|
|
221
|
-
_e.trys.push([1,
|
|
234
|
+
_e.trys.push([1, 38, 39, 44]);
|
|
222
235
|
relations_1 = __asyncValues(relations);
|
|
223
236
|
_e.label = 2;
|
|
224
237
|
case 2: return [4 /*yield*/, relations_1.next()];
|
|
225
238
|
case 3:
|
|
226
|
-
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/,
|
|
239
|
+
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
|
|
227
240
|
relation = relations_1_1.value;
|
|
228
|
-
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, relationType = relation.relationType;
|
|
229
|
-
storeName =
|
|
241
|
+
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, targetNames = relation.targetNames, relationType = relation.relationType;
|
|
242
|
+
storeName = util_1.getStorename(namespaceName, modelName);
|
|
230
243
|
modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, modelName);
|
|
231
244
|
_d = relationType;
|
|
232
245
|
switch (_d) {
|
|
233
246
|
case 'HAS_ONE': return [3 /*break*/, 4];
|
|
234
|
-
case 'BELONGS_TO': return [3 /*break*/,
|
|
235
|
-
case 'HAS_MANY': return [3 /*break*/,
|
|
247
|
+
case 'BELONGS_TO': return [3 /*break*/, 19];
|
|
248
|
+
case 'HAS_MANY': return [3 /*break*/, 34];
|
|
236
249
|
}
|
|
237
|
-
return [3 /*break*/,
|
|
250
|
+
return [3 /*break*/, 35];
|
|
238
251
|
case 4:
|
|
239
|
-
_e.trys.push([4,
|
|
252
|
+
_e.trys.push([4, 12, 13, 18]);
|
|
240
253
|
records_1 = __asyncValues(records);
|
|
241
254
|
_e.label = 5;
|
|
242
255
|
case 5: return [4 /*yield*/, records_1.next()];
|
|
243
256
|
case 6:
|
|
244
|
-
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/,
|
|
257
|
+
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/, 11];
|
|
245
258
|
recordItem = records_1_1.value;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
259
|
+
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 8];
|
|
260
|
+
getByFields = [];
|
|
261
|
+
allPresent = void 0;
|
|
262
|
+
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
263
|
+
allPresent = targetNames.every(function (targetName) {
|
|
264
|
+
return recordItem[targetName] != null;
|
|
265
|
+
});
|
|
266
|
+
if (!allPresent) {
|
|
267
|
+
return [3 /*break*/, 11];
|
|
268
|
+
}
|
|
269
|
+
getByFields = targetNames;
|
|
270
|
+
keys = getByFields
|
|
271
|
+
.map(function (getByField) { return recordItem[getByField]; })
|
|
272
|
+
.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
273
|
+
return [4 /*yield*/, this.db.get(keys, storeName)];
|
|
250
274
|
case 7:
|
|
251
275
|
connectionRecord = _e.sent();
|
|
252
276
|
recordItem[fieldName] =
|
|
253
277
|
connectionRecord &&
|
|
254
278
|
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
255
|
-
|
|
256
|
-
case 8:
|
|
257
|
-
|
|
258
|
-
|
|
279
|
+
return [3 /*break*/, 10];
|
|
280
|
+
case 8:
|
|
281
|
+
getByfield = recordItem[targetName]
|
|
282
|
+
? targetName
|
|
283
|
+
: fieldName;
|
|
284
|
+
if (!recordItem[getByfield])
|
|
285
|
+
return [3 /*break*/, 11];
|
|
286
|
+
key = recordItem[getByfield];
|
|
287
|
+
return [4 /*yield*/, this.db.get(key, storeName)];
|
|
288
|
+
case 9:
|
|
289
|
+
connectionRecord = _e.sent();
|
|
290
|
+
recordItem[fieldName] =
|
|
291
|
+
connectionRecord &&
|
|
292
|
+
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
293
|
+
_e.label = 10;
|
|
294
|
+
case 10: return [3 /*break*/, 5];
|
|
295
|
+
case 11: return [3 /*break*/, 18];
|
|
296
|
+
case 12:
|
|
259
297
|
e_3_1 = _e.sent();
|
|
260
298
|
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*/,
|
|
299
|
+
return [3 /*break*/, 18];
|
|
300
|
+
case 13:
|
|
301
|
+
_e.trys.push([13, , 16, 17]);
|
|
302
|
+
if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/, 15];
|
|
265
303
|
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
304
|
case 14:
|
|
305
|
+
_e.sent();
|
|
306
|
+
_e.label = 15;
|
|
307
|
+
case 15: return [3 /*break*/, 17];
|
|
308
|
+
case 16:
|
|
271
309
|
if (e_3) throw e_3.error;
|
|
272
310
|
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()];
|
|
311
|
+
case 17: return [7 /*endfinally*/];
|
|
312
|
+
case 18: return [3 /*break*/, 36];
|
|
280
313
|
case 19:
|
|
281
|
-
|
|
314
|
+
_e.trys.push([19, 27, 28, 33]);
|
|
315
|
+
records_2 = __asyncValues(records);
|
|
316
|
+
_e.label = 20;
|
|
317
|
+
case 20: return [4 /*yield*/, records_2.next()];
|
|
318
|
+
case 21:
|
|
319
|
+
if (!(records_2_1 = _e.sent(), !records_2_1.done)) return [3 /*break*/, 26];
|
|
282
320
|
recordItem = records_2_1.value;
|
|
283
|
-
if (!
|
|
284
|
-
|
|
285
|
-
|
|
321
|
+
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 23];
|
|
322
|
+
allPresent = void 0;
|
|
323
|
+
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
324
|
+
allPresent = targetNames.every(function (targetName) {
|
|
325
|
+
return recordItem[targetName] != null;
|
|
326
|
+
});
|
|
327
|
+
// If not present, there is not yet a connected record
|
|
328
|
+
if (!allPresent) {
|
|
329
|
+
return [3 /*break*/, 26];
|
|
330
|
+
}
|
|
331
|
+
keys = targetNames
|
|
332
|
+
.map(function (targetName) { return recordItem[targetName]; })
|
|
333
|
+
.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
334
|
+
return [4 /*yield*/, this.db.get(keys, storeName)];
|
|
335
|
+
case 22:
|
|
286
336
|
connectionRecord = _e.sent();
|
|
287
337
|
recordItem[fieldName] =
|
|
288
338
|
connectionRecord &&
|
|
289
339
|
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
340
|
+
targetNames === null || targetNames === void 0 ? void 0 : targetNames.map(function (targetName) {
|
|
341
|
+
delete recordItem[targetName];
|
|
342
|
+
});
|
|
343
|
+
return [3 /*break*/, 25];
|
|
294
344
|
case 23:
|
|
345
|
+
if (!recordItem[targetName]) return [3 /*break*/, 25];
|
|
346
|
+
key = recordItem[targetName];
|
|
347
|
+
return [4 /*yield*/, this.db.get(key, storeName)];
|
|
348
|
+
case 24:
|
|
349
|
+
connectionRecord = _e.sent();
|
|
350
|
+
recordItem[fieldName] =
|
|
351
|
+
connectionRecord &&
|
|
352
|
+
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
353
|
+
delete recordItem[targetName];
|
|
354
|
+
_e.label = 25;
|
|
355
|
+
case 25: return [3 /*break*/, 20];
|
|
356
|
+
case 26: return [3 /*break*/, 33];
|
|
357
|
+
case 27:
|
|
295
358
|
e_4_1 = _e.sent();
|
|
296
359
|
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*/,
|
|
360
|
+
return [3 /*break*/, 33];
|
|
361
|
+
case 28:
|
|
362
|
+
_e.trys.push([28, , 31, 32]);
|
|
363
|
+
if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/, 30];
|
|
301
364
|
return [4 /*yield*/, _c.call(records_2)];
|
|
302
|
-
case
|
|
365
|
+
case 29:
|
|
303
366
|
_e.sent();
|
|
304
|
-
_e.label =
|
|
305
|
-
case
|
|
306
|
-
case
|
|
367
|
+
_e.label = 30;
|
|
368
|
+
case 30: return [3 /*break*/, 32];
|
|
369
|
+
case 31:
|
|
307
370
|
if (e_4) throw e_4.error;
|
|
308
371
|
return [7 /*endfinally*/];
|
|
309
|
-
case
|
|
310
|
-
case
|
|
311
|
-
case
|
|
372
|
+
case 32: return [7 /*endfinally*/];
|
|
373
|
+
case 33: return [3 /*break*/, 36];
|
|
374
|
+
case 34:
|
|
312
375
|
// TODO: Lazy loading
|
|
313
|
-
return [3 /*break*/,
|
|
314
|
-
case
|
|
376
|
+
return [3 /*break*/, 36];
|
|
377
|
+
case 35:
|
|
315
378
|
util_1.exhaustiveCheck(relationType);
|
|
316
|
-
return [3 /*break*/,
|
|
317
|
-
case
|
|
318
|
-
case
|
|
319
|
-
case
|
|
379
|
+
return [3 /*break*/, 36];
|
|
380
|
+
case 36: return [3 /*break*/, 2];
|
|
381
|
+
case 37: return [3 /*break*/, 44];
|
|
382
|
+
case 38:
|
|
320
383
|
e_2_1 = _e.sent();
|
|
321
384
|
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*/,
|
|
385
|
+
return [3 /*break*/, 44];
|
|
386
|
+
case 39:
|
|
387
|
+
_e.trys.push([39, , 42, 43]);
|
|
388
|
+
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
|
|
326
389
|
return [4 /*yield*/, _a.call(relations_1)];
|
|
327
|
-
case
|
|
390
|
+
case 40:
|
|
328
391
|
_e.sent();
|
|
329
|
-
_e.label =
|
|
330
|
-
case
|
|
331
|
-
case
|
|
392
|
+
_e.label = 41;
|
|
393
|
+
case 41: return [3 /*break*/, 43];
|
|
394
|
+
case 42:
|
|
332
395
|
if (e_2) throw e_2.error;
|
|
333
396
|
return [7 /*endfinally*/];
|
|
334
|
-
case
|
|
335
|
-
case
|
|
397
|
+
case 43: return [7 /*endfinally*/];
|
|
398
|
+
case 44: return [2 /*return*/, records.map(function (record) {
|
|
336
399
|
return _this.modelInstanceCreator(modelConstructor, record);
|
|
337
400
|
})];
|
|
338
401
|
}
|
|
@@ -341,7 +404,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
341
404
|
};
|
|
342
405
|
AsyncStorageAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
|
|
343
406
|
return __awaiter(this, void 0, void 0, function () {
|
|
344
|
-
var storeName, namespaceName, predicates,
|
|
407
|
+
var storeName, namespaceName, predicates, keys, queryByKey, hasSort, hasPagination, records;
|
|
345
408
|
var _this = this;
|
|
346
409
|
return __generator(this, function (_a) {
|
|
347
410
|
switch (_a.label) {
|
|
@@ -349,7 +412,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
349
412
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
350
413
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
351
414
|
predicates = predicate && predicates_1.ModelPredicateCreator.getPredicates(predicate);
|
|
352
|
-
|
|
415
|
+
keys = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
416
|
+
queryByKey = predicates && this.keyValueFromPredicate(predicates, keys);
|
|
353
417
|
hasSort = pagination && pagination.sort;
|
|
354
418
|
hasPagination = pagination && pagination.limit;
|
|
355
419
|
return [4 /*yield*/, (function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -357,8 +421,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
357
421
|
return __generator(this, function (_a) {
|
|
358
422
|
switch (_a.label) {
|
|
359
423
|
case 0:
|
|
360
|
-
if (!
|
|
361
|
-
return [4 /*yield*/, this.
|
|
424
|
+
if (!queryByKey) return [3 /*break*/, 2];
|
|
425
|
+
return [4 /*yield*/, this.getByKey(storeName, queryByKey)];
|
|
362
426
|
case 1:
|
|
363
427
|
record = _a.sent();
|
|
364
428
|
return [2 /*return*/, record ? [record] : []];
|
|
@@ -386,12 +450,12 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
386
450
|
});
|
|
387
451
|
});
|
|
388
452
|
};
|
|
389
|
-
AsyncStorageAdapter.prototype.
|
|
453
|
+
AsyncStorageAdapter.prototype.getByKey = function (storeName, keyValuePath) {
|
|
390
454
|
return __awaiter(this, void 0, void 0, function () {
|
|
391
455
|
var record;
|
|
392
456
|
return __generator(this, function (_a) {
|
|
393
457
|
switch (_a.label) {
|
|
394
|
-
case 0: return [4 /*yield*/, this.db.get(
|
|
458
|
+
case 0: return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
395
459
|
case 1:
|
|
396
460
|
record = _a.sent();
|
|
397
461
|
return [2 /*return*/, record];
|
|
@@ -409,11 +473,33 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
409
473
|
});
|
|
410
474
|
});
|
|
411
475
|
};
|
|
412
|
-
AsyncStorageAdapter.prototype.
|
|
476
|
+
AsyncStorageAdapter.prototype.keyValueFromPredicate = function (predicates, keys) {
|
|
477
|
+
var e_5, _a;
|
|
413
478
|
var predicateObjs = predicates.predicates;
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
479
|
+
if (predicateObjs.length !== keys.length) {
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
var keyValues = [];
|
|
483
|
+
var _loop_1 = function (key) {
|
|
484
|
+
var predicateObj = predicateObjs.find(function (p) { return types_1.isPredicateObj(p) && p.field === key && p.operator === 'eq'; });
|
|
485
|
+
predicateObj && keyValues.push(predicateObj.operand);
|
|
486
|
+
};
|
|
487
|
+
try {
|
|
488
|
+
for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
|
|
489
|
+
var key = keys_1_1.value;
|
|
490
|
+
_loop_1(key);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
494
|
+
finally {
|
|
495
|
+
try {
|
|
496
|
+
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
|
|
497
|
+
}
|
|
498
|
+
finally { if (e_5) throw e_5.error; }
|
|
499
|
+
}
|
|
500
|
+
return keyValues.length === keys.length
|
|
501
|
+
? keyValues.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR)
|
|
502
|
+
: undefined;
|
|
417
503
|
};
|
|
418
504
|
AsyncStorageAdapter.prototype.filterOnPredicate = function (storeName, predicates) {
|
|
419
505
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -467,7 +553,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
467
553
|
};
|
|
468
554
|
AsyncStorageAdapter.prototype.delete = function (modelOrModelConstructor, condition) {
|
|
469
555
|
return __awaiter(this, void 0, void 0, function () {
|
|
470
|
-
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor,
|
|
556
|
+
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor, namespaceName, storeName, keyValuePath, fromDB, msg, predicates, predicateObjs, type, isValid, msg, relations, relations, deletedModels;
|
|
471
557
|
return __generator(this, function (_a) {
|
|
472
558
|
switch (_a.label) {
|
|
473
559
|
case 0:
|
|
@@ -508,10 +594,11 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
508
594
|
model = modelOrModelConstructor;
|
|
509
595
|
modelConstructor = Object.getPrototypeOf(model)
|
|
510
596
|
.constructor;
|
|
511
|
-
|
|
597
|
+
namespaceName = this.namespaceResolver(modelConstructor);
|
|
512
598
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
513
599
|
if (!condition) return [3 /*break*/, 11];
|
|
514
|
-
|
|
600
|
+
keyValuePath = this.getIndexKeyValuesPath(model);
|
|
601
|
+
return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
515
602
|
case 9:
|
|
516
603
|
fromDB = _a.sent();
|
|
517
604
|
if (fromDB === undefined) {
|
|
@@ -527,16 +614,14 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
527
614
|
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
528
615
|
throw new Error(msg);
|
|
529
616
|
}
|
|
530
|
-
relations = this.schema.namespaces[
|
|
531
|
-
|
|
532
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
617
|
+
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
618
|
+
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
533
619
|
case 10:
|
|
534
620
|
_a.sent();
|
|
535
621
|
return [3 /*break*/, 13];
|
|
536
622
|
case 11:
|
|
537
|
-
relations = this.schema.namespaces[
|
|
538
|
-
|
|
539
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
623
|
+
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
624
|
+
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
540
625
|
case 12:
|
|
541
626
|
_a.sent();
|
|
542
627
|
_a.label = 13;
|
|
@@ -555,9 +640,9 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
555
640
|
};
|
|
556
641
|
AsyncStorageAdapter.prototype.deleteItem = function (deleteQueue) {
|
|
557
642
|
var deleteQueue_1, deleteQueue_1_1;
|
|
558
|
-
var
|
|
643
|
+
var e_6, _a, e_7, _b;
|
|
559
644
|
return __awaiter(this, void 0, void 0, function () {
|
|
560
|
-
var deleteItem, storeName, items, items_1, items_1_1, item,
|
|
645
|
+
var deleteItem, storeName, items, items_1, items_1_1, item, keyValuesPath, e_7_1, e_6_1;
|
|
561
646
|
return __generator(this, function (_c) {
|
|
562
647
|
switch (_c.label) {
|
|
563
648
|
case 0:
|
|
@@ -580,16 +665,16 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
580
665
|
item = items_1_1.value;
|
|
581
666
|
if (!item) return [3 /*break*/, 7];
|
|
582
667
|
if (!(typeof item === 'object')) return [3 /*break*/, 7];
|
|
583
|
-
|
|
584
|
-
return [4 /*yield*/, this.db.delete(
|
|
668
|
+
keyValuesPath = this.getIndexKeyValuesPath(item);
|
|
669
|
+
return [4 /*yield*/, this.db.delete(keyValuesPath, storeName)];
|
|
585
670
|
case 6:
|
|
586
671
|
_c.sent();
|
|
587
672
|
_c.label = 7;
|
|
588
673
|
case 7: return [3 /*break*/, 4];
|
|
589
674
|
case 8: return [3 /*break*/, 15];
|
|
590
675
|
case 9:
|
|
591
|
-
|
|
592
|
-
|
|
676
|
+
e_7_1 = _c.sent();
|
|
677
|
+
e_7 = { error: e_7_1 };
|
|
593
678
|
return [3 /*break*/, 15];
|
|
594
679
|
case 10:
|
|
595
680
|
_c.trys.push([10, , 13, 14]);
|
|
@@ -600,14 +685,14 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
600
685
|
_c.label = 12;
|
|
601
686
|
case 12: return [3 /*break*/, 14];
|
|
602
687
|
case 13:
|
|
603
|
-
if (
|
|
688
|
+
if (e_7) throw e_7.error;
|
|
604
689
|
return [7 /*endfinally*/];
|
|
605
690
|
case 14: return [7 /*endfinally*/];
|
|
606
691
|
case 15: return [3 /*break*/, 1];
|
|
607
692
|
case 16: return [3 /*break*/, 23];
|
|
608
693
|
case 17:
|
|
609
|
-
|
|
610
|
-
|
|
694
|
+
e_6_1 = _c.sent();
|
|
695
|
+
e_6 = { error: e_6_1 };
|
|
611
696
|
return [3 /*break*/, 23];
|
|
612
697
|
case 18:
|
|
613
698
|
_c.trys.push([18, , 21, 22]);
|
|
@@ -618,7 +703,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
618
703
|
_c.label = 20;
|
|
619
704
|
case 20: return [3 /*break*/, 22];
|
|
620
705
|
case 21:
|
|
621
|
-
if (
|
|
706
|
+
if (e_6) throw e_6.error;
|
|
622
707
|
return [7 /*endfinally*/];
|
|
623
708
|
case 22: return [7 /*endfinally*/];
|
|
624
709
|
case 23: return [2 /*return*/];
|
|
@@ -636,22 +721,22 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
636
721
|
*/
|
|
637
722
|
AsyncStorageAdapter.prototype.deleteTraverse = function (relations, models, srcModel, nameSpace, deleteQueue) {
|
|
638
723
|
var relations_2, relations_2_1, models_1, models_1_1, models_2, models_2_1;
|
|
639
|
-
var
|
|
724
|
+
var e_8, _a, e_9, _b, e_10, _c;
|
|
640
725
|
return __awaiter(this, void 0, void 0, function () {
|
|
641
|
-
var rel, relationType, modelName, targetName, storeName, index, _d, model,
|
|
726
|
+
var rel, relationType, modelName, targetName, targetNames, associatedWith, storeName, index, _d, model, hasOneIndex_1, hasConnectedModelFields, keyValuesPath, values_1, isUnidirectionalConnection, 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
727
|
var _this = this;
|
|
643
728
|
return __generator(this, function (_e) {
|
|
644
729
|
switch (_e.label) {
|
|
645
730
|
case 0:
|
|
646
|
-
_e.trys.push([0,
|
|
731
|
+
_e.trys.push([0, 38, 39, 44]);
|
|
647
732
|
relations_2 = __asyncValues(relations);
|
|
648
733
|
_e.label = 1;
|
|
649
734
|
case 1: return [4 /*yield*/, relations_2.next()];
|
|
650
735
|
case 2:
|
|
651
|
-
if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/,
|
|
736
|
+
if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/, 37];
|
|
652
737
|
rel = relations_2_1.value;
|
|
653
|
-
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName;
|
|
654
|
-
storeName =
|
|
738
|
+
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
|
|
739
|
+
storeName = util_1.getStorename(nameSpace, modelName);
|
|
655
740
|
index = util_1.getIndex(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
656
741
|
.relationTypes, srcModel) ||
|
|
657
742
|
// if we were unable to find an index via relationTypes
|
|
@@ -661,114 +746,176 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
661
746
|
_d = relationType;
|
|
662
747
|
switch (_d) {
|
|
663
748
|
case 'HAS_ONE': return [3 /*break*/, 3];
|
|
664
|
-
case 'HAS_MANY': return [3 /*break*/,
|
|
665
|
-
case 'BELONGS_TO': return [3 /*break*/,
|
|
749
|
+
case 'HAS_MANY': return [3 /*break*/, 20];
|
|
750
|
+
case 'BELONGS_TO': return [3 /*break*/, 34];
|
|
666
751
|
}
|
|
667
|
-
return [3 /*break*/,
|
|
752
|
+
return [3 /*break*/, 35];
|
|
668
753
|
case 3:
|
|
669
|
-
_e.trys.push([3,
|
|
754
|
+
_e.trys.push([3, 13, 14, 19]);
|
|
670
755
|
models_1 = __asyncValues(models);
|
|
671
756
|
_e.label = 4;
|
|
672
757
|
case 4: return [4 /*yield*/, models_1.next()];
|
|
673
758
|
case 5:
|
|
674
|
-
if (!(models_1_1 = _e.sent(), !models_1_1.done)) return [3 /*break*/,
|
|
759
|
+
if (!(models_1_1 = _e.sent(), !models_1_1.done)) return [3 /*break*/, 12];
|
|
675
760
|
model = models_1_1.value;
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
761
|
+
if (!(targetNames && (targetNames === null || targetNames === void 0 ? void 0 : targetNames.length))) return [3 /*break*/, 8];
|
|
762
|
+
if (index) {
|
|
763
|
+
hasOneIndex_1 = index.split(util_1.IDENTIFIER_KEY_SEPARATOR);
|
|
764
|
+
}
|
|
765
|
+
else if (associatedWith) {
|
|
766
|
+
if (Array.isArray(associatedWith)) {
|
|
767
|
+
hasOneIndex_1 = associatedWith;
|
|
768
|
+
}
|
|
769
|
+
else {
|
|
770
|
+
hasOneIndex_1 = [associatedWith];
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
hasConnectedModelFields = targetNames.every(function (targetName) {
|
|
774
|
+
return model.hasOwnProperty(targetName);
|
|
775
|
+
});
|
|
776
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
777
|
+
isUnidirectionalConnection = hasOneIndex_1 === associatedWith;
|
|
778
|
+
if (hasConnectedModelFields && isUnidirectionalConnection) {
|
|
779
|
+
// Values will be that of the child model
|
|
780
|
+
values_1 = targetNames.map(function (targetName) { return model[targetName]; });
|
|
781
|
+
}
|
|
782
|
+
else {
|
|
783
|
+
// values will be that of the parent model
|
|
784
|
+
values_1 = keyValuesPath.split(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
785
|
+
}
|
|
786
|
+
if (values_1.length === 0)
|
|
787
|
+
return [3 /*break*/, 12];
|
|
681
788
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
682
789
|
case 6:
|
|
683
790
|
allRecords = _e.sent();
|
|
684
|
-
recordToDelete =
|
|
791
|
+
recordToDelete = void 0;
|
|
792
|
+
// values === targetNames
|
|
793
|
+
if (hasConnectedModelFields) {
|
|
794
|
+
/**
|
|
795
|
+
* Retrieve record by finding the record where all
|
|
796
|
+
* targetNames are present on the connected model.
|
|
797
|
+
*
|
|
798
|
+
*/
|
|
799
|
+
// recordToDelete = allRecords.filter(childItem =>
|
|
800
|
+
// values.every(value => childItem[value] != null)
|
|
801
|
+
// ) as T[];
|
|
802
|
+
recordToDelete = allRecords.filter(function (childItem) {
|
|
803
|
+
return hasOneIndex_1.every(function (index) { return values_1.includes(childItem[index]); });
|
|
804
|
+
});
|
|
805
|
+
}
|
|
806
|
+
else {
|
|
807
|
+
// values === keyValuePath
|
|
808
|
+
recordToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_1] === values_1; });
|
|
809
|
+
}
|
|
685
810
|
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
686
811
|
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
687
812
|
case 7:
|
|
688
813
|
_e.sent();
|
|
689
|
-
|
|
690
|
-
case 8:
|
|
691
|
-
|
|
814
|
+
return [3 /*break*/, 11];
|
|
815
|
+
case 8:
|
|
816
|
+
hasOneIndex_2 = index || associatedWith;
|
|
817
|
+
hasOneCustomField = targetName in model;
|
|
818
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
819
|
+
value_1 = hasOneCustomField
|
|
820
|
+
? model[targetName]
|
|
821
|
+
: keyValuesPath;
|
|
822
|
+
if (!value_1)
|
|
823
|
+
return [3 /*break*/, 12];
|
|
824
|
+
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
825
|
+
case 9:
|
|
826
|
+
allRecords = _e.sent();
|
|
827
|
+
recordToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_2] === value_1; });
|
|
828
|
+
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
829
|
+
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
692
830
|
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
831
|
_e.sent();
|
|
702
|
-
_e.label =
|
|
703
|
-
case
|
|
832
|
+
_e.label = 11;
|
|
833
|
+
case 11: return [3 /*break*/, 4];
|
|
834
|
+
case 12: return [3 /*break*/, 19];
|
|
835
|
+
case 13:
|
|
836
|
+
e_9_1 = _e.sent();
|
|
837
|
+
e_9 = { error: e_9_1 };
|
|
838
|
+
return [3 /*break*/, 19];
|
|
704
839
|
case 14:
|
|
705
|
-
|
|
706
|
-
return [
|
|
707
|
-
|
|
708
|
-
case
|
|
840
|
+
_e.trys.push([14, , 17, 18]);
|
|
841
|
+
if (!(models_1_1 && !models_1_1.done && (_b = models_1.return))) return [3 /*break*/, 16];
|
|
842
|
+
return [4 /*yield*/, _b.call(models_1)];
|
|
843
|
+
case 15:
|
|
844
|
+
_e.sent();
|
|
845
|
+
_e.label = 16;
|
|
846
|
+
case 16: return [3 /*break*/, 18];
|
|
709
847
|
case 17:
|
|
710
|
-
|
|
848
|
+
if (e_9) throw e_9.error;
|
|
849
|
+
return [7 /*endfinally*/];
|
|
850
|
+
case 18: return [7 /*endfinally*/];
|
|
851
|
+
case 19: return [3 /*break*/, 36];
|
|
852
|
+
case 20:
|
|
853
|
+
_e.trys.push([20, 27, 28, 33]);
|
|
711
854
|
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*/,
|
|
855
|
+
_e.label = 21;
|
|
856
|
+
case 21: return [4 /*yield*/, models_2.next()];
|
|
857
|
+
case 22:
|
|
858
|
+
if (!(models_2_1 = _e.sent(), !models_2_1.done)) return [3 /*break*/, 26];
|
|
716
859
|
model = models_2_1.value;
|
|
860
|
+
keyValues = this.getIndexKeyValuesFromModel(model);
|
|
717
861
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
718
|
-
case
|
|
862
|
+
case 23:
|
|
719
863
|
allRecords = _e.sent();
|
|
720
|
-
|
|
864
|
+
indices = index.split(util_1.IDENTIFIER_KEY_SEPARATOR);
|
|
865
|
+
childrenArray = allRecords.filter(function (childItem) {
|
|
866
|
+
return indices.every(function (index) { return keyValues.includes(childItem[index]); });
|
|
867
|
+
});
|
|
721
868
|
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
722
869
|
.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
870
|
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
871
|
_e.sent();
|
|
738
|
-
_e.label =
|
|
739
|
-
case
|
|
872
|
+
_e.label = 25;
|
|
873
|
+
case 25: return [3 /*break*/, 21];
|
|
874
|
+
case 26: return [3 /*break*/, 33];
|
|
875
|
+
case 27:
|
|
876
|
+
e_10_1 = _e.sent();
|
|
877
|
+
e_10 = { error: e_10_1 };
|
|
878
|
+
return [3 /*break*/, 33];
|
|
740
879
|
case 28:
|
|
741
|
-
|
|
880
|
+
_e.trys.push([28, , 31, 32]);
|
|
881
|
+
if (!(models_2_1 && !models_2_1.done && (_c = models_2.return))) return [3 /*break*/, 30];
|
|
882
|
+
return [4 /*yield*/, _c.call(models_2)];
|
|
883
|
+
case 29:
|
|
884
|
+
_e.sent();
|
|
885
|
+
_e.label = 30;
|
|
886
|
+
case 30: return [3 /*break*/, 32];
|
|
887
|
+
case 31:
|
|
888
|
+
if (e_10) throw e_10.error;
|
|
742
889
|
return [7 /*endfinally*/];
|
|
743
|
-
case
|
|
744
|
-
case
|
|
745
|
-
case
|
|
890
|
+
case 32: return [7 /*endfinally*/];
|
|
891
|
+
case 33: return [3 /*break*/, 36];
|
|
892
|
+
case 34:
|
|
746
893
|
// 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];
|
|
894
|
+
return [3 /*break*/, 36];
|
|
753
895
|
case 35:
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
case
|
|
758
|
-
|
|
759
|
-
|
|
896
|
+
util_1.exhaustiveCheck(relationType);
|
|
897
|
+
return [3 /*break*/, 36];
|
|
898
|
+
case 36: return [3 /*break*/, 1];
|
|
899
|
+
case 37: return [3 /*break*/, 44];
|
|
900
|
+
case 38:
|
|
901
|
+
e_8_1 = _e.sent();
|
|
902
|
+
e_8 = { error: e_8_1 };
|
|
903
|
+
return [3 /*break*/, 44];
|
|
904
|
+
case 39:
|
|
905
|
+
_e.trys.push([39, , 42, 43]);
|
|
906
|
+
if (!(relations_2_1 && !relations_2_1.done && (_a = relations_2.return))) return [3 /*break*/, 41];
|
|
760
907
|
return [4 /*yield*/, _a.call(relations_2)];
|
|
761
|
-
case
|
|
908
|
+
case 40:
|
|
762
909
|
_e.sent();
|
|
763
|
-
_e.label =
|
|
764
|
-
case
|
|
765
|
-
case
|
|
766
|
-
if (
|
|
910
|
+
_e.label = 41;
|
|
911
|
+
case 41: return [3 /*break*/, 43];
|
|
912
|
+
case 42:
|
|
913
|
+
if (e_8) throw e_8.error;
|
|
767
914
|
return [7 /*endfinally*/];
|
|
768
|
-
case
|
|
769
|
-
case
|
|
915
|
+
case 43: return [7 /*endfinally*/];
|
|
916
|
+
case 44:
|
|
770
917
|
deleteQueue.push({
|
|
771
|
-
storeName:
|
|
918
|
+
storeName: util_1.getStorename(nameSpace, srcModel),
|
|
772
919
|
items: models.map(function (record) {
|
|
773
920
|
return _this.modelInstanceCreator(_this.getModelConstructorByModelName(nameSpace, srcModel), record);
|
|
774
921
|
}),
|
|
@@ -794,21 +941,25 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
794
941
|
};
|
|
795
942
|
AsyncStorageAdapter.prototype.batchSave = function (modelConstructor, items) {
|
|
796
943
|
return __awaiter(this, void 0, void 0, function () {
|
|
797
|
-
var modelName, namespaceName, storeName, batch,
|
|
798
|
-
var
|
|
944
|
+
var modelName, namespaceName, storeName, keys, batch, _loop_2, this_1, items_2, items_2_1, item;
|
|
945
|
+
var e_11, _a;
|
|
946
|
+
var _this = this;
|
|
799
947
|
return __generator(this, function (_b) {
|
|
800
948
|
switch (_b.label) {
|
|
801
949
|
case 0:
|
|
802
950
|
modelName = modelConstructor.name;
|
|
803
951
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
804
|
-
storeName =
|
|
952
|
+
storeName = util_1.getStorename(namespaceName, modelName);
|
|
953
|
+
keys = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelName);
|
|
805
954
|
batch = [];
|
|
806
|
-
|
|
807
|
-
var
|
|
808
|
-
var connectedModels = util_1.traverseModel(
|
|
955
|
+
_loop_2 = function (item) {
|
|
956
|
+
var model = this_1.modelInstanceCreator(modelConstructor, item);
|
|
957
|
+
var connectedModels = util_1.traverseModel(modelName, model, this_1.schema.namespaces[namespaceName], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
|
|
958
|
+
var keyValuesPath = this_1.getIndexKeyValuesPath(model);
|
|
809
959
|
var instance = connectedModels.find(function (_a) {
|
|
810
960
|
var instance = _a.instance;
|
|
811
|
-
|
|
961
|
+
var instanceKeyValuesPath = _this.getIndexKeyValuesPath(instance);
|
|
962
|
+
return util_1.keysEqual([instanceKeyValuesPath], [keyValuesPath]);
|
|
812
963
|
}).instance;
|
|
813
964
|
batch.push(instance);
|
|
814
965
|
};
|
|
@@ -816,17 +967,17 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
816
967
|
try {
|
|
817
968
|
for (items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
818
969
|
item = items_2_1.value;
|
|
819
|
-
|
|
970
|
+
_loop_2(item);
|
|
820
971
|
}
|
|
821
972
|
}
|
|
822
|
-
catch (
|
|
973
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
823
974
|
finally {
|
|
824
975
|
try {
|
|
825
976
|
if (items_2_1 && !items_2_1.done && (_a = items_2.return)) _a.call(items_2);
|
|
826
977
|
}
|
|
827
|
-
finally { if (
|
|
978
|
+
finally { if (e_11) throw e_11.error; }
|
|
828
979
|
}
|
|
829
|
-
return [4 /*yield*/, this.db.batchSave(storeName, batch)];
|
|
980
|
+
return [4 /*yield*/, this.db.batchSave(storeName, batch, keys)];
|
|
830
981
|
case 1: return [2 /*return*/, _b.sent()];
|
|
831
982
|
}
|
|
832
983
|
});
|