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