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