@aws-amplify/datastore 4.1.1 → 4.1.2
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 +8 -0
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +52 -28
- package/lib/storage/adapter/AsyncStorageAdapter.js +212 -476
- package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +53 -28
- package/lib/storage/adapter/IndexedDBAdapter.js +589 -892
- package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib/storage/adapter/StorageAdapterBase.d.ts +146 -0
- package/lib/storage/adapter/StorageAdapterBase.js +479 -0
- package/lib/storage/adapter/StorageAdapterBase.js.map +1 -0
- package/lib-esm/storage/adapter/AsyncStorageAdapter.d.ts +52 -28
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js +215 -479
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +53 -28
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +588 -891
- package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/StorageAdapterBase.d.ts +146 -0
- package/lib-esm/storage/adapter/StorageAdapterBase.js +477 -0
- package/lib-esm/storage/adapter/StorageAdapterBase.js.map +1 -0
- package/package.json +6 -6
- package/src/storage/adapter/AsyncStorageAdapter.ts +239 -543
- package/src/storage/adapter/AsyncStorageDatabase.ts +2 -2
- package/src/storage/adapter/IndexedDBAdapter.ts +423 -786
- package/src/storage/adapter/StorageAdapterBase.ts +639 -0
|
@@ -1,107 +1,133 @@
|
|
|
1
|
-
import { __asyncValues, __awaiter, __generator, __values } from "tslib";
|
|
2
|
-
import { ConsoleLogger as Logger } from '@aws-amplify/core';
|
|
1
|
+
import { __asyncValues, __awaiter, __extends, __generator, __values } from "tslib";
|
|
3
2
|
import AsyncStorageDatabase from './AsyncStorageDatabase';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
var
|
|
8
|
-
|
|
3
|
+
import { OpType, QueryOne, } from '../../types';
|
|
4
|
+
import { DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, getIndex, getIndexFromAssociation, traverseModel, validatePredicate, inMemoryPagination, keysEqual, getStorename, getIndexKeys, IDENTIFIER_KEY_SEPARATOR, } from '../../util';
|
|
5
|
+
import { StorageAdapterBase } from './StorageAdapterBase';
|
|
6
|
+
var AsyncStorageAdapter = /** @class */ (function (_super) {
|
|
7
|
+
__extends(AsyncStorageAdapter, _super);
|
|
9
8
|
function AsyncStorageAdapter() {
|
|
9
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
// no-ops for this adapter
|
|
12
|
+
AsyncStorageAdapter.prototype.preSetUpChecks = function () {
|
|
13
|
+
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
14
|
+
return [2 /*return*/];
|
|
15
|
+
}); });
|
|
15
16
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var namespaceName = this.namespaceResolver(modelConstructor);
|
|
21
|
-
var keys = getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
22
|
-
return extractPrimaryKeyValues(model, keys);
|
|
17
|
+
AsyncStorageAdapter.prototype.preOpCheck = function () {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
19
|
+
return [2 /*return*/];
|
|
20
|
+
}); });
|
|
23
21
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Open AsyncStorage database
|
|
24
|
+
* Create new DB if one doesn't exist
|
|
25
|
+
*
|
|
26
|
+
* Called by `StorageAdapterBase.setUp()`
|
|
27
|
+
*
|
|
28
|
+
* @returns AsyncStorageDatabase instance
|
|
29
|
+
*/
|
|
30
|
+
AsyncStorageAdapter.prototype.initDb = function () {
|
|
29
31
|
return __awaiter(this, void 0, void 0, function () {
|
|
30
|
-
var
|
|
31
|
-
var _this = this;
|
|
32
|
+
var db;
|
|
32
33
|
return __generator(this, function (_a) {
|
|
33
34
|
switch (_a.label) {
|
|
34
35
|
case 0:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
_this.reject = rej;
|
|
39
|
-
});
|
|
40
|
-
return [3 /*break*/, 3];
|
|
41
|
-
case 1: return [4 /*yield*/, this.initPromise];
|
|
42
|
-
case 2:
|
|
36
|
+
db = new AsyncStorageDatabase();
|
|
37
|
+
return [4 /*yield*/, db.init()];
|
|
38
|
+
case 1:
|
|
43
39
|
_a.sent();
|
|
44
|
-
return [2 /*return
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
return [4 /*yield*/, this.db.init()];
|
|
56
|
-
case 5:
|
|
40
|
+
return [2 /*return*/, db];
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
AsyncStorageAdapter.prototype.clear = function () {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
return __generator(this, function (_a) {
|
|
48
|
+
switch (_a.label) {
|
|
49
|
+
case 0: return [4 /*yield*/, this.db.clear()];
|
|
50
|
+
case 1:
|
|
57
51
|
_a.sent();
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
case 7:
|
|
62
|
-
error_1 = _a.sent();
|
|
63
|
-
this.reject(error_1);
|
|
64
|
-
return [3 /*break*/, 8];
|
|
65
|
-
case 8: return [2 /*return*/];
|
|
52
|
+
this.db = undefined;
|
|
53
|
+
this.initPromise = undefined;
|
|
54
|
+
return [2 /*return*/];
|
|
66
55
|
}
|
|
67
56
|
});
|
|
68
57
|
});
|
|
69
58
|
};
|
|
70
|
-
AsyncStorageAdapter.prototype.
|
|
71
|
-
var e_1, _a;
|
|
59
|
+
AsyncStorageAdapter.prototype.batchSave = function (modelConstructor, items) {
|
|
72
60
|
return __awaiter(this, void 0, void 0, function () {
|
|
73
|
-
var
|
|
61
|
+
var modelName, namespaceName, storeName, keys, batch, _loop_1, this_1, items_1, items_1_1, item;
|
|
62
|
+
var e_1, _a;
|
|
74
63
|
var _this = this;
|
|
64
|
+
return __generator(this, function (_b) {
|
|
65
|
+
switch (_b.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
if (items.length === 0) {
|
|
68
|
+
return [2 /*return*/, []];
|
|
69
|
+
}
|
|
70
|
+
modelName = modelConstructor.name;
|
|
71
|
+
namespaceName = this.namespaceResolver(modelConstructor);
|
|
72
|
+
storeName = getStorename(namespaceName, modelName);
|
|
73
|
+
keys = getIndexKeys(this.schema.namespaces[namespaceName], modelName);
|
|
74
|
+
batch = [];
|
|
75
|
+
_loop_1 = function (item) {
|
|
76
|
+
var model = this_1.modelInstanceCreator(modelConstructor, item);
|
|
77
|
+
var connectedModels = traverseModel(modelName, model, this_1.schema.namespaces[namespaceName], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
|
|
78
|
+
var keyValuesPath = this_1.getIndexKeyValuesPath(model);
|
|
79
|
+
var instance = connectedModels.find(function (_a) {
|
|
80
|
+
var instance = _a.instance;
|
|
81
|
+
var instanceKeyValuesPath = _this.getIndexKeyValuesPath(instance);
|
|
82
|
+
return keysEqual([instanceKeyValuesPath], [keyValuesPath]);
|
|
83
|
+
}).instance;
|
|
84
|
+
batch.push(instance);
|
|
85
|
+
};
|
|
86
|
+
this_1 = this;
|
|
87
|
+
try {
|
|
88
|
+
for (items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
|
|
89
|
+
item = items_1_1.value;
|
|
90
|
+
_loop_1(item);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
94
|
+
finally {
|
|
95
|
+
try {
|
|
96
|
+
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
|
|
97
|
+
}
|
|
98
|
+
finally { if (e_1) throw e_1.error; }
|
|
99
|
+
}
|
|
100
|
+
return [4 /*yield*/, this.db.batchSave(storeName, batch, keys)];
|
|
101
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
AsyncStorageAdapter.prototype._get = function (storeName, keyArr) {
|
|
107
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
108
|
+
var itemKeyValuesPath;
|
|
109
|
+
return __generator(this, function (_a) {
|
|
110
|
+
switch (_a.label) {
|
|
111
|
+
case 0:
|
|
112
|
+
itemKeyValuesPath = keyArr.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
113
|
+
return [4 /*yield*/, this.db.get(itemKeyValuesPath, storeName)];
|
|
114
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
AsyncStorageAdapter.prototype.save = function (model, condition) {
|
|
120
|
+
var e_2, _a;
|
|
121
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
122
|
+
var _b, storeName, connectionStoreNames, modelKeyValues, fromDB, result, connectionStoreNames_1, connectionStoreNames_1_1, resItem, storeName_1, item, instance, keys, itemKeyValues, fromDB_1, opType, e_2_1;
|
|
75
123
|
return __generator(this, function (_c) {
|
|
76
124
|
switch (_c.label) {
|
|
77
125
|
case 0:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
storeName = this.getStorenameForModel(modelConstructor);
|
|
81
|
-
namespaceName = this.namespaceResolver(modelConstructor);
|
|
82
|
-
connectedModels = traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
83
|
-
set = new Set();
|
|
84
|
-
connectionStoreNames = Object.values(connectedModels).map(function (_a) {
|
|
85
|
-
var modelName = _a.modelName, item = _a.item, instance = _a.instance;
|
|
86
|
-
var storeName = getStorename(namespaceName, modelName);
|
|
87
|
-
set.add(storeName);
|
|
88
|
-
var keys = getIndexKeys(_this.schema.namespaces[namespaceName], modelName);
|
|
89
|
-
return { storeName: storeName, item: item, instance: instance, keys: keys };
|
|
90
|
-
});
|
|
91
|
-
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
92
|
-
return [4 /*yield*/, this.db.get(keyValuesPath, storeName)];
|
|
126
|
+
_b = this.saveMetadata(model), storeName = _b.storeName, connectionStoreNames = _b.connectionStoreNames, modelKeyValues = _b.modelKeyValues;
|
|
127
|
+
return [4 /*yield*/, this._get(storeName, modelKeyValues)];
|
|
93
128
|
case 1:
|
|
94
129
|
fromDB = _c.sent();
|
|
95
|
-
|
|
96
|
-
predicates = ModelPredicateCreator.getPredicates(condition);
|
|
97
|
-
_b = predicates, predicateObjs = _b.predicates, type = _b.type;
|
|
98
|
-
isValid = validatePredicate(fromDB, type, predicateObjs);
|
|
99
|
-
if (!isValid) {
|
|
100
|
-
msg = 'Conditional update failed';
|
|
101
|
-
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
102
|
-
throw new Error(msg);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
130
|
+
this.validateSaveCondition(condition, fromDB);
|
|
105
131
|
result = [];
|
|
106
132
|
_c.label = 2;
|
|
107
133
|
case 2:
|
|
@@ -114,15 +140,13 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
114
140
|
resItem = connectionStoreNames_1_1.value;
|
|
115
141
|
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance, keys = resItem.keys;
|
|
116
142
|
itemKeyValues = keys.map(function (key) { return item[key]; });
|
|
117
|
-
|
|
118
|
-
return [4 /*yield*/, this.db.get(itemKeyValuesPath, storeName_1)];
|
|
143
|
+
return [4 /*yield*/, this._get(storeName_1, itemKeyValues)];
|
|
119
144
|
case 5:
|
|
120
145
|
fromDB_1 = _c.sent();
|
|
121
146
|
opType = fromDB_1 ? OpType.UPDATE : OpType.INSERT;
|
|
122
|
-
modelKeyValues = this.getIndexKeyValuesFromModel(model);
|
|
123
147
|
if (!(keysEqual(itemKeyValues, modelKeyValues) ||
|
|
124
148
|
opType === OpType.INSERT)) return [3 /*break*/, 7];
|
|
125
|
-
return [4 /*yield*/, this.db.save(item, storeName_1, keys,
|
|
149
|
+
return [4 /*yield*/, this.db.save(item, storeName_1, keys, itemKeyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR))];
|
|
126
150
|
case 6:
|
|
127
151
|
_c.sent();
|
|
128
152
|
result.push([instance, opType]);
|
|
@@ -130,8 +154,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
130
154
|
case 7: return [3 /*break*/, 3];
|
|
131
155
|
case 8: return [3 /*break*/, 15];
|
|
132
156
|
case 9:
|
|
133
|
-
|
|
134
|
-
|
|
157
|
+
e_2_1 = _c.sent();
|
|
158
|
+
e_2 = { error: e_2_1 };
|
|
135
159
|
return [3 /*break*/, 15];
|
|
136
160
|
case 10:
|
|
137
161
|
_c.trys.push([10, , 13, 14]);
|
|
@@ -142,7 +166,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
142
166
|
_c.label = 12;
|
|
143
167
|
case 12: return [3 /*break*/, 14];
|
|
144
168
|
case 13:
|
|
145
|
-
if (
|
|
169
|
+
if (e_2) throw e_2.error;
|
|
146
170
|
return [7 /*endfinally*/];
|
|
147
171
|
case 14: return [7 /*endfinally*/];
|
|
148
172
|
case 15: return [2 /*return*/, result];
|
|
@@ -150,50 +174,22 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
150
174
|
});
|
|
151
175
|
});
|
|
152
176
|
};
|
|
153
|
-
AsyncStorageAdapter.prototype.load = function (namespaceName, srcModelName, records) {
|
|
154
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
155
|
-
var namespace, relations, connectionStoreNames, modelConstructor;
|
|
156
|
-
var _this = this;
|
|
157
|
-
return __generator(this, function (_a) {
|
|
158
|
-
namespace = this.schema.namespaces[namespaceName];
|
|
159
|
-
relations = namespace.relationships[srcModelName].relationTypes;
|
|
160
|
-
connectionStoreNames = relations.map(function (_a) {
|
|
161
|
-
var modelName = _a.modelName;
|
|
162
|
-
return getStorename(namespaceName, modelName);
|
|
163
|
-
});
|
|
164
|
-
modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
|
|
165
|
-
if (connectionStoreNames.length === 0) {
|
|
166
|
-
return [2 /*return*/, records.map(function (record) {
|
|
167
|
-
return _this.modelInstanceCreator(modelConstructor, record);
|
|
168
|
-
})];
|
|
169
|
-
}
|
|
170
|
-
return [2 /*return*/, records.map(function (record) {
|
|
171
|
-
return _this.modelInstanceCreator(modelConstructor, record);
|
|
172
|
-
})];
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
};
|
|
176
177
|
AsyncStorageAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
|
|
177
178
|
return __awaiter(this, void 0, void 0, function () {
|
|
178
|
-
var storeName, namespaceName,
|
|
179
|
+
var _a, storeName, namespaceName, queryByKey, predicates, hasSort, hasPagination, records;
|
|
179
180
|
var _this = this;
|
|
180
|
-
return __generator(this, function (
|
|
181
|
-
switch (
|
|
181
|
+
return __generator(this, function (_b) {
|
|
182
|
+
switch (_b.label) {
|
|
182
183
|
case 0:
|
|
183
|
-
|
|
184
|
-
namespaceName = this.namespaceResolver(modelConstructor);
|
|
185
|
-
predicates = predicate && ModelPredicateCreator.getPredicates(predicate);
|
|
186
|
-
keys = getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
187
|
-
queryByKey = predicates && this.keyValueFromPredicate(predicates, keys);
|
|
188
|
-
hasSort = pagination && pagination.sort;
|
|
189
|
-
hasPagination = pagination && pagination.limit;
|
|
184
|
+
_a = this.queryMetadata(modelConstructor, predicate, pagination), storeName = _a.storeName, namespaceName = _a.namespaceName, queryByKey = _a.queryByKey, predicates = _a.predicates, hasSort = _a.hasSort, hasPagination = _a.hasPagination;
|
|
190
185
|
return [4 /*yield*/, (function () { return __awaiter(_this, void 0, void 0, function () {
|
|
191
|
-
var record, filtered, all;
|
|
186
|
+
var keyValues, record, filtered, all;
|
|
192
187
|
return __generator(this, function (_a) {
|
|
193
188
|
switch (_a.label) {
|
|
194
189
|
case 0:
|
|
195
190
|
if (!queryByKey) return [3 /*break*/, 2];
|
|
196
|
-
|
|
191
|
+
keyValues = queryByKey.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
192
|
+
return [4 /*yield*/, this.getByKey(storeName, keyValues)];
|
|
197
193
|
case 1:
|
|
198
194
|
record = _a.sent();
|
|
199
195
|
return [2 /*return*/, record ? [record] : []];
|
|
@@ -214,22 +210,19 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
214
210
|
});
|
|
215
211
|
}); })()];
|
|
216
212
|
case 1:
|
|
217
|
-
records = (
|
|
213
|
+
records = (_b.sent());
|
|
218
214
|
return [4 /*yield*/, this.load(namespaceName, modelConstructor.name, records)];
|
|
219
|
-
case 2: return [2 /*return*/,
|
|
215
|
+
case 2: return [2 /*return*/, _b.sent()];
|
|
220
216
|
}
|
|
221
217
|
});
|
|
222
218
|
});
|
|
223
219
|
};
|
|
224
220
|
AsyncStorageAdapter.prototype.getByKey = function (storeName, keyValuePath) {
|
|
225
221
|
return __awaiter(this, void 0, void 0, function () {
|
|
226
|
-
var record;
|
|
227
222
|
return __generator(this, function (_a) {
|
|
228
223
|
switch (_a.label) {
|
|
229
224
|
case 0: return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
230
|
-
case 1:
|
|
231
|
-
record = _a.sent();
|
|
232
|
-
return [2 /*return*/, record];
|
|
225
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
233
226
|
}
|
|
234
227
|
});
|
|
235
228
|
});
|
|
@@ -244,34 +237,6 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
244
237
|
});
|
|
245
238
|
});
|
|
246
239
|
};
|
|
247
|
-
AsyncStorageAdapter.prototype.keyValueFromPredicate = function (predicates, keys) {
|
|
248
|
-
var e_2, _a;
|
|
249
|
-
var predicateObjs = predicates.predicates;
|
|
250
|
-
if (predicateObjs.length !== keys.length) {
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
var keyValues = [];
|
|
254
|
-
var _loop_1 = function (key) {
|
|
255
|
-
var predicateObj = predicateObjs.find(function (p) { return isPredicateObj(p) && p.field === key && p.operator === 'eq'; });
|
|
256
|
-
predicateObj && keyValues.push(predicateObj.operand);
|
|
257
|
-
};
|
|
258
|
-
try {
|
|
259
|
-
for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
|
|
260
|
-
var key = keys_1_1.value;
|
|
261
|
-
_loop_1(key);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
265
|
-
finally {
|
|
266
|
-
try {
|
|
267
|
-
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
|
|
268
|
-
}
|
|
269
|
-
finally { if (e_2) throw e_2.error; }
|
|
270
|
-
}
|
|
271
|
-
return keyValues.length === keys.length
|
|
272
|
-
? keyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR)
|
|
273
|
-
: undefined;
|
|
274
|
-
};
|
|
275
240
|
AsyncStorageAdapter.prototype.filterOnPredicate = function (storeName, predicates) {
|
|
276
241
|
return __awaiter(this, void 0, void 0, function () {
|
|
277
242
|
var predicateObjs, type, all, filtered;
|
|
@@ -309,97 +274,10 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
309
274
|
});
|
|
310
275
|
});
|
|
311
276
|
};
|
|
312
|
-
AsyncStorageAdapter.prototype.delete = function (modelOrModelConstructor, condition) {
|
|
313
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
314
|
-
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor, nameSpace, storeName, keyValuePath, fromDB, msg, predicates, _a, predicateObjs, type, isValid, msg, relations, relations, deletedModels;
|
|
315
|
-
return __generator(this, function (_b) {
|
|
316
|
-
switch (_b.label) {
|
|
317
|
-
case 0:
|
|
318
|
-
deleteQueue = [];
|
|
319
|
-
if (!isModelConstructor(modelOrModelConstructor)) return [3 /*break*/, 8];
|
|
320
|
-
modelConstructor = modelOrModelConstructor;
|
|
321
|
-
nameSpace = this.namespaceResolver(modelConstructor);
|
|
322
|
-
return [4 /*yield*/, this.query(modelConstructor, condition)];
|
|
323
|
-
case 1:
|
|
324
|
-
models = _b.sent();
|
|
325
|
-
relations = this.schema.namespaces[nameSpace].relationships[modelConstructor.name]
|
|
326
|
-
.relationTypes;
|
|
327
|
-
if (!(condition !== undefined)) return [3 /*break*/, 4];
|
|
328
|
-
return [4 /*yield*/, this.deleteTraverse(relations, models, modelConstructor.name, nameSpace, deleteQueue)];
|
|
329
|
-
case 2:
|
|
330
|
-
_b.sent();
|
|
331
|
-
return [4 /*yield*/, this.deleteItem(deleteQueue)];
|
|
332
|
-
case 3:
|
|
333
|
-
_b.sent();
|
|
334
|
-
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
335
|
-
var items = _a.items;
|
|
336
|
-
return acc.concat(items);
|
|
337
|
-
}, []);
|
|
338
|
-
return [2 /*return*/, [models, deletedModels]];
|
|
339
|
-
case 4: return [4 /*yield*/, this.deleteTraverse(relations, models, modelConstructor.name, nameSpace, deleteQueue)];
|
|
340
|
-
case 5:
|
|
341
|
-
_b.sent();
|
|
342
|
-
return [4 /*yield*/, this.deleteItem(deleteQueue)];
|
|
343
|
-
case 6:
|
|
344
|
-
_b.sent();
|
|
345
|
-
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
346
|
-
var items = _a.items;
|
|
347
|
-
return acc.concat(items);
|
|
348
|
-
}, []);
|
|
349
|
-
return [2 /*return*/, [models, deletedModels]];
|
|
350
|
-
case 7: return [3 /*break*/, 15];
|
|
351
|
-
case 8:
|
|
352
|
-
model = modelOrModelConstructor;
|
|
353
|
-
modelConstructor = Object.getPrototypeOf(model)
|
|
354
|
-
.constructor;
|
|
355
|
-
nameSpace = this.namespaceResolver(modelConstructor);
|
|
356
|
-
storeName = this.getStorenameForModel(modelConstructor);
|
|
357
|
-
if (!condition) return [3 /*break*/, 11];
|
|
358
|
-
keyValuePath = this.getIndexKeyValuesPath(model);
|
|
359
|
-
return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
360
|
-
case 9:
|
|
361
|
-
fromDB = _b.sent();
|
|
362
|
-
if (fromDB === undefined) {
|
|
363
|
-
msg = 'Model instance not found in storage';
|
|
364
|
-
logger.warn(msg, { model: model });
|
|
365
|
-
return [2 /*return*/, [[model], []]];
|
|
366
|
-
}
|
|
367
|
-
predicates = ModelPredicateCreator.getPredicates(condition);
|
|
368
|
-
_a = predicates, predicateObjs = _a.predicates, type = _a.type;
|
|
369
|
-
isValid = validatePredicate(fromDB, type, predicateObjs);
|
|
370
|
-
if (!isValid) {
|
|
371
|
-
msg = 'Conditional update failed';
|
|
372
|
-
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
373
|
-
throw new Error(msg);
|
|
374
|
-
}
|
|
375
|
-
relations = this.schema.namespaces[nameSpace].relationships[modelConstructor.name].relationTypes;
|
|
376
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
377
|
-
case 10:
|
|
378
|
-
_b.sent();
|
|
379
|
-
return [3 /*break*/, 13];
|
|
380
|
-
case 11:
|
|
381
|
-
relations = this.schema.namespaces[nameSpace].relationships[modelConstructor.name].relationTypes;
|
|
382
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
383
|
-
case 12:
|
|
384
|
-
_b.sent();
|
|
385
|
-
_b.label = 13;
|
|
386
|
-
case 13: return [4 /*yield*/, this.deleteItem(deleteQueue)];
|
|
387
|
-
case 14:
|
|
388
|
-
_b.sent();
|
|
389
|
-
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
390
|
-
var items = _a.items;
|
|
391
|
-
return acc.concat(items);
|
|
392
|
-
}, []);
|
|
393
|
-
return [2 /*return*/, [[model], deletedModels]];
|
|
394
|
-
case 15: return [2 /*return*/];
|
|
395
|
-
}
|
|
396
|
-
});
|
|
397
|
-
});
|
|
398
|
-
};
|
|
399
277
|
AsyncStorageAdapter.prototype.deleteItem = function (deleteQueue) {
|
|
400
278
|
var e_3, _a, e_4, _b;
|
|
401
279
|
return __awaiter(this, void 0, void 0, function () {
|
|
402
|
-
var _c, _d, deleteItem, storeName, items,
|
|
280
|
+
var _c, _d, deleteItem, storeName, items, items_2, items_2_1, item, keyValuesPath, e_4_1, e_3_1;
|
|
403
281
|
return __generator(this, function (_e) {
|
|
404
282
|
switch (_e.label) {
|
|
405
283
|
case 0:
|
|
@@ -414,12 +292,12 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
414
292
|
_e.label = 3;
|
|
415
293
|
case 3:
|
|
416
294
|
_e.trys.push([3, 9, 10, 15]);
|
|
417
|
-
|
|
295
|
+
items_2 = __asyncValues(items);
|
|
418
296
|
_e.label = 4;
|
|
419
|
-
case 4: return [4 /*yield*/,
|
|
297
|
+
case 4: return [4 /*yield*/, items_2.next()];
|
|
420
298
|
case 5:
|
|
421
|
-
if (!(
|
|
422
|
-
item =
|
|
299
|
+
if (!(items_2_1 = _e.sent(), !items_2_1.done)) return [3 /*break*/, 8];
|
|
300
|
+
item = items_2_1.value;
|
|
423
301
|
if (!item) return [3 /*break*/, 7];
|
|
424
302
|
if (!(typeof item === 'object')) return [3 /*break*/, 7];
|
|
425
303
|
keyValuesPath = this.getIndexKeyValuesPath(item);
|
|
@@ -435,8 +313,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
435
313
|
return [3 /*break*/, 15];
|
|
436
314
|
case 10:
|
|
437
315
|
_e.trys.push([10, , 13, 14]);
|
|
438
|
-
if (!(
|
|
439
|
-
return [4 /*yield*/, _b.call(
|
|
316
|
+
if (!(items_2_1 && !items_2_1.done && (_b = items_2.return))) return [3 /*break*/, 12];
|
|
317
|
+
return [4 /*yield*/, _b.call(items_2)];
|
|
440
318
|
case 11:
|
|
441
319
|
_e.sent();
|
|
442
320
|
_e.label = 12;
|
|
@@ -469,85 +347,59 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
469
347
|
});
|
|
470
348
|
};
|
|
471
349
|
/**
|
|
472
|
-
*
|
|
473
|
-
*
|
|
474
|
-
* @param
|
|
350
|
+
* Gets related Has One record for `model`
|
|
351
|
+
*
|
|
352
|
+
* @param model
|
|
475
353
|
* @param srcModel
|
|
476
|
-
* @param
|
|
477
|
-
* @param
|
|
354
|
+
* @param namespace
|
|
355
|
+
* @param rel
|
|
356
|
+
* @returns
|
|
478
357
|
*/
|
|
479
|
-
AsyncStorageAdapter.prototype.
|
|
480
|
-
var relations_1, relations_1_1, models_1, models_1_1, models_2, models_2_1;
|
|
481
|
-
var e_5, _a, e_6, _b, e_7, _c;
|
|
358
|
+
AsyncStorageAdapter.prototype.getHasOneChild = function (model, srcModel, namespace, rel) {
|
|
482
359
|
return __awaiter(this, void 0, void 0, function () {
|
|
483
|
-
var
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
switch (_f.label) {
|
|
360
|
+
var hasOneIndex, modelName, targetNames, associatedWith, storeName, index, hasConnectedModelFields, keyValuesPath, values, isUnidirectionalConnection, allRecords, recordToDelete;
|
|
361
|
+
return __generator(this, function (_a) {
|
|
362
|
+
switch (_a.label) {
|
|
487
363
|
case 0:
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
case 1: return [4 /*yield*/, relations_1.next()];
|
|
492
|
-
case 2:
|
|
493
|
-
if (!(relations_1_1 = _f.sent(), !relations_1_1.done)) return [3 /*break*/, 41];
|
|
494
|
-
rel = relations_1_1.value;
|
|
495
|
-
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
|
|
496
|
-
storeName = getStorename(nameSpace, modelName);
|
|
497
|
-
index = getIndex(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
364
|
+
modelName = rel.modelName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
|
|
365
|
+
storeName = getStorename(namespace, modelName);
|
|
366
|
+
index = getIndex(this.schema.namespaces[namespace].relationships[modelName]
|
|
498
367
|
.relationTypes, srcModel) ||
|
|
499
368
|
// if we were unable to find an index via relationTypes
|
|
500
369
|
// i.e. for keyName connections, attempt to find one by the
|
|
501
370
|
// associatedWith property
|
|
502
|
-
getIndexFromAssociation(this.schema.namespaces[
|
|
503
|
-
_d = relationType;
|
|
504
|
-
switch (_d) {
|
|
505
|
-
case 'HAS_ONE': return [3 /*break*/, 3];
|
|
506
|
-
case 'HAS_MANY': return [3 /*break*/, 23];
|
|
507
|
-
case 'BELONGS_TO': return [3 /*break*/, 38];
|
|
508
|
-
}
|
|
509
|
-
return [3 /*break*/, 39];
|
|
510
|
-
case 3:
|
|
511
|
-
_f.trys.push([3, 16, 17, 22]);
|
|
512
|
-
models_1 = __asyncValues(models);
|
|
513
|
-
_f.label = 4;
|
|
514
|
-
case 4: return [4 /*yield*/, models_1.next()];
|
|
515
|
-
case 5:
|
|
516
|
-
if (!(models_1_1 = _f.sent(), !models_1_1.done)) return [3 /*break*/, 15];
|
|
517
|
-
model = models_1_1.value;
|
|
518
|
-
if (!(targetNames && (targetNames === null || targetNames === void 0 ? void 0 : targetNames.length))) return [3 /*break*/, 8];
|
|
371
|
+
getIndexFromAssociation(this.schema.namespaces[namespace].relationships[modelName].indexes, rel.associatedWith);
|
|
519
372
|
if (index) {
|
|
520
|
-
|
|
373
|
+
hasOneIndex = index.split(IDENTIFIER_KEY_SEPARATOR);
|
|
521
374
|
}
|
|
522
375
|
else if (associatedWith) {
|
|
523
376
|
if (Array.isArray(associatedWith)) {
|
|
524
|
-
|
|
377
|
+
hasOneIndex = associatedWith;
|
|
525
378
|
}
|
|
526
379
|
else {
|
|
527
|
-
|
|
380
|
+
hasOneIndex = [associatedWith];
|
|
528
381
|
}
|
|
529
382
|
}
|
|
530
383
|
hasConnectedModelFields = targetNames.every(function (targetName) {
|
|
531
384
|
return model.hasOwnProperty(targetName);
|
|
532
385
|
});
|
|
533
386
|
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
534
|
-
isUnidirectionalConnection =
|
|
387
|
+
isUnidirectionalConnection = hasOneIndex === associatedWith;
|
|
535
388
|
if (hasConnectedModelFields && isUnidirectionalConnection) {
|
|
536
389
|
// Values will be that of the child model
|
|
537
|
-
|
|
390
|
+
values = targetNames
|
|
538
391
|
.filter(function (targetName) { var _a; return (_a = model[targetName]) !== null && _a !== void 0 ? _a : false; })
|
|
539
392
|
.map(function (targetName) { return model[targetName]; });
|
|
540
393
|
}
|
|
541
394
|
else {
|
|
542
395
|
// values will be that of the parent model
|
|
543
|
-
|
|
396
|
+
values = keyValuesPath.split(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
544
397
|
}
|
|
545
|
-
if (
|
|
546
|
-
return [
|
|
398
|
+
if (values.length === 0)
|
|
399
|
+
return [2 /*return*/];
|
|
547
400
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
548
|
-
case
|
|
549
|
-
allRecords =
|
|
550
|
-
recordToDelete = void 0;
|
|
401
|
+
case 1:
|
|
402
|
+
allRecords = _a.sent();
|
|
551
403
|
// values === targetNames
|
|
552
404
|
if (hasConnectedModelFields) {
|
|
553
405
|
/**
|
|
@@ -555,206 +407,90 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
555
407
|
* targetNames are present on the connected model.
|
|
556
408
|
*
|
|
557
409
|
*/
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
// ) as T[];
|
|
561
|
-
recordToDelete = allRecords.filter(function (childItem) {
|
|
562
|
-
return hasOneIndex_1.every(function (index) { return values_1.includes(childItem[index]); });
|
|
410
|
+
recordToDelete = allRecords.find(function (childItem) {
|
|
411
|
+
return hasOneIndex.every(function (index) { return values.includes(childItem[index]); });
|
|
563
412
|
});
|
|
564
413
|
}
|
|
565
414
|
else {
|
|
566
415
|
// values === keyValuePath
|
|
567
|
-
recordToDelete = allRecords.
|
|
416
|
+
recordToDelete = allRecords.find(function (childItem) { return childItem[hasOneIndex] === values; });
|
|
568
417
|
}
|
|
569
|
-
return [
|
|
570
|
-
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
571
|
-
case 7:
|
|
572
|
-
_f.sent();
|
|
573
|
-
return [3 /*break*/, 14];
|
|
574
|
-
case 8:
|
|
575
|
-
hasOneIndex_2 = index || associatedWith;
|
|
576
|
-
hasOneCustomField = targetName in model;
|
|
577
|
-
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
578
|
-
value_1 = hasOneCustomField
|
|
579
|
-
? model[targetName]
|
|
580
|
-
: keyValuesPath;
|
|
581
|
-
if (!value_1)
|
|
582
|
-
return [3 /*break*/, 15];
|
|
583
|
-
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
584
|
-
case 9:
|
|
585
|
-
allRecords = _f.sent();
|
|
586
|
-
recordsToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_2] === value_1; });
|
|
587
|
-
if (!recordsToDelete.length) return [3 /*break*/, 11];
|
|
588
|
-
return [4 /*yield*/, this.load(nameSpace, modelName, recordsToDelete)];
|
|
589
|
-
case 10:
|
|
590
|
-
_e = _f.sent();
|
|
591
|
-
return [3 /*break*/, 12];
|
|
592
|
-
case 11:
|
|
593
|
-
_e = [];
|
|
594
|
-
_f.label = 12;
|
|
595
|
-
case 12:
|
|
596
|
-
modelsToDelete = _e;
|
|
597
|
-
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
598
|
-
.relationTypes, modelsToDelete, modelName, nameSpace, deleteQueue)];
|
|
599
|
-
case 13:
|
|
600
|
-
_f.sent();
|
|
601
|
-
_f.label = 14;
|
|
602
|
-
case 14: return [3 /*break*/, 4];
|
|
603
|
-
case 15: return [3 /*break*/, 22];
|
|
604
|
-
case 16:
|
|
605
|
-
e_6_1 = _f.sent();
|
|
606
|
-
e_6 = { error: e_6_1 };
|
|
607
|
-
return [3 /*break*/, 22];
|
|
608
|
-
case 17:
|
|
609
|
-
_f.trys.push([17, , 20, 21]);
|
|
610
|
-
if (!(models_1_1 && !models_1_1.done && (_b = models_1.return))) return [3 /*break*/, 19];
|
|
611
|
-
return [4 /*yield*/, _b.call(models_1)];
|
|
612
|
-
case 18:
|
|
613
|
-
_f.sent();
|
|
614
|
-
_f.label = 19;
|
|
615
|
-
case 19: return [3 /*break*/, 21];
|
|
616
|
-
case 20:
|
|
617
|
-
if (e_6) throw e_6.error;
|
|
618
|
-
return [7 /*endfinally*/];
|
|
619
|
-
case 21: return [7 /*endfinally*/];
|
|
620
|
-
case 22: return [3 /*break*/, 40];
|
|
621
|
-
case 23:
|
|
622
|
-
_f.trys.push([23, 31, 32, 37]);
|
|
623
|
-
models_2 = __asyncValues(models);
|
|
624
|
-
_f.label = 24;
|
|
625
|
-
case 24: return [4 /*yield*/, models_2.next()];
|
|
626
|
-
case 25:
|
|
627
|
-
if (!(models_2_1 = _f.sent(), !models_2_1.done)) return [3 /*break*/, 30];
|
|
628
|
-
model = models_2_1.value;
|
|
629
|
-
keyValues = this.getIndexKeyValuesFromModel(model);
|
|
630
|
-
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
631
|
-
case 26:
|
|
632
|
-
allRecords = _f.sent();
|
|
633
|
-
indices = index.split(IDENTIFIER_KEY_SEPARATOR);
|
|
634
|
-
childRecords = allRecords.filter(function (childItem) {
|
|
635
|
-
return indices.every(function (index) { return keyValues.includes(childItem[index]); });
|
|
636
|
-
});
|
|
637
|
-
return [4 /*yield*/, this.load(nameSpace, modelName, childRecords)];
|
|
638
|
-
case 27:
|
|
639
|
-
childModels = _f.sent();
|
|
640
|
-
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
641
|
-
.relationTypes, childModels, modelName, nameSpace, deleteQueue)];
|
|
642
|
-
case 28:
|
|
643
|
-
_f.sent();
|
|
644
|
-
_f.label = 29;
|
|
645
|
-
case 29: return [3 /*break*/, 24];
|
|
646
|
-
case 30: return [3 /*break*/, 37];
|
|
647
|
-
case 31:
|
|
648
|
-
e_7_1 = _f.sent();
|
|
649
|
-
e_7 = { error: e_7_1 };
|
|
650
|
-
return [3 /*break*/, 37];
|
|
651
|
-
case 32:
|
|
652
|
-
_f.trys.push([32, , 35, 36]);
|
|
653
|
-
if (!(models_2_1 && !models_2_1.done && (_c = models_2.return))) return [3 /*break*/, 34];
|
|
654
|
-
return [4 /*yield*/, _c.call(models_2)];
|
|
655
|
-
case 33:
|
|
656
|
-
_f.sent();
|
|
657
|
-
_f.label = 34;
|
|
658
|
-
case 34: return [3 /*break*/, 36];
|
|
659
|
-
case 35:
|
|
660
|
-
if (e_7) throw e_7.error;
|
|
661
|
-
return [7 /*endfinally*/];
|
|
662
|
-
case 36: return [7 /*endfinally*/];
|
|
663
|
-
case 37: return [3 /*break*/, 40];
|
|
664
|
-
case 38:
|
|
665
|
-
// Intentionally blank
|
|
666
|
-
return [3 /*break*/, 40];
|
|
667
|
-
case 39: throw new Error("Invalid relationType " + relationType);
|
|
668
|
-
case 40: return [3 /*break*/, 1];
|
|
669
|
-
case 41: return [3 /*break*/, 48];
|
|
670
|
-
case 42:
|
|
671
|
-
e_5_1 = _f.sent();
|
|
672
|
-
e_5 = { error: e_5_1 };
|
|
673
|
-
return [3 /*break*/, 48];
|
|
674
|
-
case 43:
|
|
675
|
-
_f.trys.push([43, , 46, 47]);
|
|
676
|
-
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 45];
|
|
677
|
-
return [4 /*yield*/, _a.call(relations_1)];
|
|
678
|
-
case 44:
|
|
679
|
-
_f.sent();
|
|
680
|
-
_f.label = 45;
|
|
681
|
-
case 45: return [3 /*break*/, 47];
|
|
682
|
-
case 46:
|
|
683
|
-
if (e_5) throw e_5.error;
|
|
684
|
-
return [7 /*endfinally*/];
|
|
685
|
-
case 47: return [7 /*endfinally*/];
|
|
686
|
-
case 48:
|
|
687
|
-
deleteQueue.push({
|
|
688
|
-
storeName: getStorename(nameSpace, srcModel),
|
|
689
|
-
items: models.map(function (record) {
|
|
690
|
-
return _this.modelInstanceCreator(_this.getModelConstructorByModelName(nameSpace, srcModel), record);
|
|
691
|
-
}),
|
|
692
|
-
});
|
|
693
|
-
return [2 /*return*/];
|
|
418
|
+
return [2 /*return*/, recordToDelete];
|
|
694
419
|
}
|
|
695
420
|
});
|
|
696
421
|
});
|
|
697
422
|
};
|
|
698
|
-
|
|
423
|
+
/**
|
|
424
|
+
* Backwards compatability for pre-CPK codegen
|
|
425
|
+
* TODO - deprecate this in v6; will need to re-gen MIPR for older unit
|
|
426
|
+
* tests that hit this path
|
|
427
|
+
*/
|
|
428
|
+
AsyncStorageAdapter.prototype.getHasOneChildLegacy = function (model, srcModel, namespace, rel) {
|
|
699
429
|
return __awaiter(this, void 0, void 0, function () {
|
|
430
|
+
var modelName, targetName, associatedWith, storeName, index, hasOneIndex, hasOneCustomField, keyValuesPath, value, allRecords, recordToDelete;
|
|
700
431
|
return __generator(this, function (_a) {
|
|
701
432
|
switch (_a.label) {
|
|
702
|
-
case 0:
|
|
433
|
+
case 0:
|
|
434
|
+
modelName = rel.modelName, targetName = rel.targetName, associatedWith = rel.associatedWith;
|
|
435
|
+
storeName = getStorename(namespace, modelName);
|
|
436
|
+
index = getIndex(this.schema.namespaces[namespace].relationships[modelName]
|
|
437
|
+
.relationTypes, srcModel) ||
|
|
438
|
+
// if we were unable to find an index via relationTypes
|
|
439
|
+
// i.e. for keyName connections, attempt to find one by the
|
|
440
|
+
// associatedWith property
|
|
441
|
+
getIndexFromAssociation(this.schema.namespaces[namespace].relationships[modelName].indexes, rel.associatedWith);
|
|
442
|
+
hasOneIndex = index || associatedWith;
|
|
443
|
+
hasOneCustomField = targetName in model;
|
|
444
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
445
|
+
value = hasOneCustomField ? model[targetName] : keyValuesPath;
|
|
446
|
+
if (!value)
|
|
447
|
+
return [2 /*return*/];
|
|
448
|
+
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
703
449
|
case 1:
|
|
704
|
-
_a.sent();
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
return [2 /*return*/];
|
|
450
|
+
allRecords = _a.sent();
|
|
451
|
+
recordToDelete = allRecords.find(function (childItem) { return childItem[hasOneIndex] === value; });
|
|
452
|
+
return [2 /*return*/, recordToDelete];
|
|
708
453
|
}
|
|
709
454
|
});
|
|
710
455
|
});
|
|
711
456
|
};
|
|
712
|
-
|
|
457
|
+
/**
|
|
458
|
+
* Gets related Has Many records by given `storeName`, `index`, and `keyValues`
|
|
459
|
+
*
|
|
460
|
+
* @param storeName
|
|
461
|
+
* @param index
|
|
462
|
+
* @param keyValues
|
|
463
|
+
* @returns
|
|
464
|
+
*/
|
|
465
|
+
AsyncStorageAdapter.prototype.getHasManyChildren = function (storeName, index, keyValues) {
|
|
713
466
|
return __awaiter(this, void 0, void 0, function () {
|
|
714
|
-
var
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
_loop_2 = function (item) {
|
|
726
|
-
var model = this_1.modelInstanceCreator(modelConstructor, item);
|
|
727
|
-
var connectedModels = traverseModel(modelName, model, this_1.schema.namespaces[namespaceName], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
|
|
728
|
-
var keyValuesPath = this_1.getIndexKeyValuesPath(model);
|
|
729
|
-
var instance = connectedModels.find(function (_a) {
|
|
730
|
-
var instance = _a.instance;
|
|
731
|
-
var instanceKeyValuesPath = _this.getIndexKeyValuesPath(instance);
|
|
732
|
-
return keysEqual([instanceKeyValuesPath], [keyValuesPath]);
|
|
733
|
-
}).instance;
|
|
734
|
-
batch.push(instance);
|
|
735
|
-
};
|
|
736
|
-
this_1 = this;
|
|
737
|
-
try {
|
|
738
|
-
for (items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
739
|
-
item = items_2_1.value;
|
|
740
|
-
_loop_2(item);
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
744
|
-
finally {
|
|
745
|
-
try {
|
|
746
|
-
if (items_2_1 && !items_2_1.done && (_a = items_2.return)) _a.call(items_2);
|
|
747
|
-
}
|
|
748
|
-
finally { if (e_8) throw e_8.error; }
|
|
749
|
-
}
|
|
750
|
-
return [4 /*yield*/, this.db.batchSave(storeName, batch, keys)];
|
|
751
|
-
case 1: return [2 /*return*/, _b.sent()];
|
|
467
|
+
var allRecords, indices, childRecords;
|
|
468
|
+
return __generator(this, function (_a) {
|
|
469
|
+
switch (_a.label) {
|
|
470
|
+
case 0: return [4 /*yield*/, this.db.getAll(storeName)];
|
|
471
|
+
case 1:
|
|
472
|
+
allRecords = _a.sent();
|
|
473
|
+
indices = index.split(IDENTIFIER_KEY_SEPARATOR);
|
|
474
|
+
childRecords = allRecords.filter(function (childItem) {
|
|
475
|
+
return indices.every(function (index) { return keyValues.includes(childItem[index]); });
|
|
476
|
+
});
|
|
477
|
+
return [2 /*return*/, childRecords];
|
|
752
478
|
}
|
|
753
479
|
});
|
|
754
480
|
});
|
|
755
481
|
};
|
|
482
|
+
//#region platform-specific helper methods
|
|
483
|
+
/**
|
|
484
|
+
* Retrieves concatenated primary key values from a model
|
|
485
|
+
*
|
|
486
|
+
* @param model
|
|
487
|
+
* @returns
|
|
488
|
+
*/
|
|
489
|
+
AsyncStorageAdapter.prototype.getIndexKeyValuesPath = function (model) {
|
|
490
|
+
return this.getIndexKeyValuesFromModel(model).join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
491
|
+
};
|
|
756
492
|
return AsyncStorageAdapter;
|
|
757
|
-
}());
|
|
493
|
+
}(StorageAdapterBase));
|
|
758
494
|
export { AsyncStorageAdapter };
|
|
759
495
|
export default new AsyncStorageAdapter();
|
|
760
496
|
//# sourceMappingURL=AsyncStorageAdapter.js.map
|