@aws-amplify/datastore 3.12.6-next.20 → 3.12.6-next.36
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 +58 -0
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +11 -0
- package/lib/authModeStrategies/multiAuthStrategy.js +13 -2
- package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib/datastore/datastore.d.ts +107 -17
- package/lib/datastore/datastore.js +648 -344
- 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 +26 -4
- package/lib/storage/adapter/IndexedDBAdapter.js +444 -271
- 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 +93 -28
- package/lib/storage/storage.js.map +1 -1
- package/lib/sync/datastoreConnectivity.d.ts +1 -0
- package/lib/sync/datastoreConnectivity.js +9 -0
- package/lib/sync/datastoreConnectivity.js.map +1 -1
- package/lib/sync/index.d.ts +31 -5
- package/lib/sync/index.js +522 -397
- package/lib/sync/index.js.map +1 -1
- package/lib/sync/merger.d.ts +9 -3
- package/lib/sync/merger.js +13 -6
- package/lib/sync/merger.js.map +1 -1
- package/lib/sync/outbox.d.ts +2 -2
- package/lib/sync/outbox.js +77 -71
- package/lib/sync/outbox.js.map +1 -1
- package/lib/sync/processors/mutation.d.ts +2 -0
- package/lib/sync/processors/mutation.js +269 -209
- package/lib/sync/processors/mutation.js.map +1 -1
- package/lib/sync/processors/subscription.d.ts +2 -0
- package/lib/sync/processors/subscription.js +213 -178
- package/lib/sync/processors/subscription.js.map +1 -1
- package/lib/sync/processors/sync.d.ts +2 -1
- package/lib/sync/processors/sync.js +126 -121
- package/lib/sync/processors/sync.js.map +1 -1
- package/lib/sync/utils.d.ts +3 -2
- package/lib/sync/utils.js +43 -8
- package/lib/sync/utils.js.map +1 -1
- package/lib/types.d.ts +65 -26
- package/lib/types.js +10 -1
- package/lib/types.js.map +1 -1
- package/lib/util.d.ts +67 -24
- package/lib/util.js +419 -166
- package/lib/util.js.map +1 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.d.ts +11 -0
- package/lib-esm/authModeStrategies/multiAuthStrategy.js +12 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib-esm/datastore/datastore.d.ts +107 -17
- package/lib-esm/datastore/datastore.js +648 -344
- 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 +26 -4
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +445 -272
- 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 +93 -28
- package/lib-esm/storage/storage.js.map +1 -1
- package/lib-esm/sync/datastoreConnectivity.d.ts +1 -0
- package/lib-esm/sync/datastoreConnectivity.js +10 -1
- package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
- package/lib-esm/sync/index.d.ts +31 -5
- package/lib-esm/sync/index.js +524 -399
- package/lib-esm/sync/index.js.map +1 -1
- package/lib-esm/sync/merger.d.ts +9 -3
- package/lib-esm/sync/merger.js +13 -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 +78 -72
- package/lib-esm/sync/outbox.js.map +1 -1
- package/lib-esm/sync/processors/mutation.d.ts +2 -0
- package/lib-esm/sync/processors/mutation.js +270 -210
- package/lib-esm/sync/processors/mutation.js.map +1 -1
- package/lib-esm/sync/processors/subscription.d.ts +2 -0
- package/lib-esm/sync/processors/subscription.js +213 -178
- package/lib-esm/sync/processors/subscription.js.map +1 -1
- package/lib-esm/sync/processors/sync.d.ts +2 -1
- package/lib-esm/sync/processors/sync.js +126 -121
- 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 +45 -11
- package/lib-esm/sync/utils.js.map +1 -1
- package/lib-esm/types.d.ts +65 -26
- package/lib-esm/types.js +9 -2
- package/lib-esm/types.js.map +1 -1
- package/lib-esm/util.d.ts +67 -24
- package/lib-esm/util.js +419 -166
- package/lib-esm/util.js.map +1 -1
- package/package.json +16 -9
- package/src/authModeStrategies/multiAuthStrategy.ts +12 -1
- package/src/datastore/datastore.ts +798 -397
- 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 +358 -134
- package/src/storage/adapter/index.ts +1 -1
- package/src/storage/storage.ts +69 -22
- package/src/sync/datastoreConnectivity.ts +6 -0
- package/src/sync/index.ts +521 -412
- package/src/sync/merger.ts +20 -4
- package/src/sync/outbox.ts +22 -9
- package/src/sync/processors/mutation.ts +188 -150
- package/src/sync/processors/subscription.ts +289 -253
- package/src/sync/processors/sync.ts +151 -138
- package/src/sync/utils.ts +67 -12
- package/src/types.ts +182 -30
- package/src/util.ts +505 -176
- package/build.js +0 -5
- package/dist/aws-amplify-datastore.js +0 -83311
- package/dist/aws-amplify-datastore.js.map +0 -1
- package/dist/aws-amplify-datastore.min.js +0 -168
- package/dist/aws-amplify-datastore.min.js.map +0 -1
- package/index.js +0 -7
- package/webpack.config.dev.js +0 -6
|
@@ -13,11 +13,19 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
13
13
|
AsyncStorageAdapter.prototype.getStorenameForModel = function (modelConstructor) {
|
|
14
14
|
var namespace = this.namespaceResolver(modelConstructor);
|
|
15
15
|
var modelName = modelConstructor.name;
|
|
16
|
-
return
|
|
16
|
+
return util_1.getStorename(namespace, modelName);
|
|
17
17
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
// Retrieves primary key values from a model
|
|
19
|
+
AsyncStorageAdapter.prototype.getIndexKeyValuesFromModel = function (model) {
|
|
20
|
+
var modelConstructor = Object.getPrototypeOf(model)
|
|
21
|
+
.constructor;
|
|
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);
|
|
25
|
+
};
|
|
26
|
+
// Retrieves concatenated primary key values from a model
|
|
27
|
+
AsyncStorageAdapter.prototype.getIndexKeyValuesPath = function (model) {
|
|
28
|
+
return this.getIndexKeyValuesFromModel(model).join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
21
29
|
};
|
|
22
30
|
AsyncStorageAdapter.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName) {
|
|
23
31
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
@@ -64,7 +72,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
64
72
|
AsyncStorageAdapter.prototype.save = function (model, condition) {
|
|
65
73
|
var e_1, _a;
|
|
66
74
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
67
|
-
var modelConstructor, storeName,
|
|
75
|
+
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;
|
|
68
76
|
var _this = this;
|
|
69
77
|
return tslib_1.__generator(this, function (_b) {
|
|
70
78
|
switch (_b.label) {
|
|
@@ -72,16 +80,18 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
72
80
|
modelConstructor = Object.getPrototypeOf(model)
|
|
73
81
|
.constructor;
|
|
74
82
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
75
|
-
connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[this.namespaceResolver(modelConstructor)], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
76
83
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
84
|
+
connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
77
85
|
set = new Set();
|
|
78
86
|
connectionStoreNames = Object.values(connectedModels).map(function (_a) {
|
|
79
87
|
var modelName = _a.modelName, item = _a.item, instance = _a.instance;
|
|
80
|
-
var storeName =
|
|
88
|
+
var storeName = util_1.getStorename(namespaceName, modelName);
|
|
81
89
|
set.add(storeName);
|
|
82
|
-
|
|
90
|
+
var keys = util_1.getIndexKeys(_this.schema.namespaces[namespaceName], modelName);
|
|
91
|
+
return { storeName: storeName, item: item, instance: instance, keys: keys };
|
|
83
92
|
});
|
|
84
|
-
|
|
93
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
94
|
+
return [4 /*yield*/, this.db.get(keyValuesPath, storeName)];
|
|
85
95
|
case 1:
|
|
86
96
|
fromDB = _b.sent();
|
|
87
97
|
if (condition && fromDB) {
|
|
@@ -104,14 +114,17 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
104
114
|
case 4:
|
|
105
115
|
if (!(connectionStoreNames_1_1 = _b.sent(), !connectionStoreNames_1_1.done)) return [3 /*break*/, 8];
|
|
106
116
|
resItem = connectionStoreNames_1_1.value;
|
|
107
|
-
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance;
|
|
108
|
-
|
|
109
|
-
|
|
117
|
+
storeName_1 = resItem.storeName, item = resItem.item, instance = resItem.instance, keys = resItem.keys;
|
|
118
|
+
itemKeyValues = keys.map(function (key) { return item[key]; });
|
|
119
|
+
itemKeyValuesPath = itemKeyValues.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
120
|
+
return [4 /*yield*/, this.db.get(itemKeyValuesPath, storeName_1)];
|
|
110
121
|
case 5:
|
|
111
122
|
fromDB_1 = _b.sent();
|
|
112
123
|
opType = fromDB_1 ? types_1.OpType.UPDATE : types_1.OpType.INSERT;
|
|
113
|
-
|
|
114
|
-
|
|
124
|
+
modelKeyValues = this.getIndexKeyValuesFromModel(model);
|
|
125
|
+
if (!(util_1.keysEqual(itemKeyValues, modelKeyValues) ||
|
|
126
|
+
opType === types_1.OpType.INSERT)) return [3 /*break*/, 7];
|
|
127
|
+
return [4 /*yield*/, this.db.save(item, storeName_1, keys, itemKeyValuesPath)];
|
|
115
128
|
case 6:
|
|
116
129
|
_b.sent();
|
|
117
130
|
result.push([instance, opType]);
|
|
@@ -143,7 +156,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
143
156
|
var records_1, records_1_1, records_2, records_2_1;
|
|
144
157
|
var e_2, _a, e_3, _b, e_4, _c;
|
|
145
158
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
146
|
-
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;
|
|
159
|
+
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;
|
|
147
160
|
var _this = this;
|
|
148
161
|
return tslib_1.__generator(this, function (_e) {
|
|
149
162
|
switch (_e.label) {
|
|
@@ -152,7 +165,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
152
165
|
relations = namespace.relationships[srcModelName].relationTypes;
|
|
153
166
|
connectionStoreNames = relations.map(function (_a) {
|
|
154
167
|
var modelName = _a.modelName;
|
|
155
|
-
return
|
|
168
|
+
return util_1.getStorename(namespaceName, modelName);
|
|
156
169
|
});
|
|
157
170
|
modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
|
|
158
171
|
if (connectionStoreNames.length === 0) {
|
|
@@ -162,121 +175,171 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
162
175
|
}
|
|
163
176
|
_e.label = 1;
|
|
164
177
|
case 1:
|
|
165
|
-
_e.trys.push([1,
|
|
178
|
+
_e.trys.push([1, 38, 39, 44]);
|
|
166
179
|
relations_1 = tslib_1.__asyncValues(relations);
|
|
167
180
|
_e.label = 2;
|
|
168
181
|
case 2: return [4 /*yield*/, relations_1.next()];
|
|
169
182
|
case 3:
|
|
170
|
-
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/,
|
|
183
|
+
if (!(relations_1_1 = _e.sent(), !relations_1_1.done)) return [3 /*break*/, 37];
|
|
171
184
|
relation = relations_1_1.value;
|
|
172
|
-
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, relationType = relation.relationType;
|
|
173
|
-
storeName =
|
|
185
|
+
fieldName = relation.fieldName, modelName = relation.modelName, targetName = relation.targetName, targetNames = relation.targetNames, relationType = relation.relationType;
|
|
186
|
+
storeName = util_1.getStorename(namespaceName, modelName);
|
|
174
187
|
modelConstructor_1 = this.getModelConstructorByModelName(namespaceName, modelName);
|
|
175
188
|
_d = relationType;
|
|
176
189
|
switch (_d) {
|
|
177
190
|
case 'HAS_ONE': return [3 /*break*/, 4];
|
|
178
|
-
case 'BELONGS_TO': return [3 /*break*/,
|
|
179
|
-
case 'HAS_MANY': return [3 /*break*/,
|
|
191
|
+
case 'BELONGS_TO': return [3 /*break*/, 19];
|
|
192
|
+
case 'HAS_MANY': return [3 /*break*/, 34];
|
|
180
193
|
}
|
|
181
|
-
return [3 /*break*/,
|
|
194
|
+
return [3 /*break*/, 35];
|
|
182
195
|
case 4:
|
|
183
|
-
_e.trys.push([4,
|
|
196
|
+
_e.trys.push([4, 12, 13, 18]);
|
|
184
197
|
records_1 = tslib_1.__asyncValues(records);
|
|
185
198
|
_e.label = 5;
|
|
186
199
|
case 5: return [4 /*yield*/, records_1.next()];
|
|
187
200
|
case 6:
|
|
188
|
-
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/,
|
|
201
|
+
if (!(records_1_1 = _e.sent(), !records_1_1.done)) return [3 /*break*/, 11];
|
|
189
202
|
recordItem = records_1_1.value;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
203
|
+
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 8];
|
|
204
|
+
getByFields = [];
|
|
205
|
+
allPresent = void 0;
|
|
206
|
+
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
207
|
+
allPresent = targetNames.every(function (targetName) {
|
|
208
|
+
return recordItem[targetName] != null;
|
|
209
|
+
});
|
|
210
|
+
if (!allPresent) {
|
|
211
|
+
return [3 /*break*/, 11];
|
|
212
|
+
}
|
|
213
|
+
getByFields = targetNames;
|
|
214
|
+
keys = getByFields
|
|
215
|
+
.map(function (getByField) { return recordItem[getByField]; })
|
|
216
|
+
.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
217
|
+
return [4 /*yield*/, this.db.get(keys, storeName)];
|
|
194
218
|
case 7:
|
|
195
219
|
connectionRecord = _e.sent();
|
|
196
220
|
recordItem[fieldName] =
|
|
197
221
|
connectionRecord &&
|
|
198
222
|
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
199
|
-
|
|
200
|
-
case 8:
|
|
201
|
-
|
|
202
|
-
|
|
223
|
+
return [3 /*break*/, 10];
|
|
224
|
+
case 8:
|
|
225
|
+
getByfield = recordItem[targetName]
|
|
226
|
+
? targetName
|
|
227
|
+
: fieldName;
|
|
228
|
+
if (!recordItem[getByfield])
|
|
229
|
+
return [3 /*break*/, 11];
|
|
230
|
+
key = recordItem[getByfield];
|
|
231
|
+
return [4 /*yield*/, this.db.get(key, storeName)];
|
|
232
|
+
case 9:
|
|
233
|
+
connectionRecord = _e.sent();
|
|
234
|
+
recordItem[fieldName] =
|
|
235
|
+
connectionRecord &&
|
|
236
|
+
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
237
|
+
_e.label = 10;
|
|
238
|
+
case 10: return [3 /*break*/, 5];
|
|
239
|
+
case 11: return [3 /*break*/, 18];
|
|
240
|
+
case 12:
|
|
203
241
|
e_3_1 = _e.sent();
|
|
204
242
|
e_3 = { error: e_3_1 };
|
|
205
|
-
return [3 /*break*/,
|
|
206
|
-
case
|
|
207
|
-
_e.trys.push([
|
|
208
|
-
if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/,
|
|
243
|
+
return [3 /*break*/, 18];
|
|
244
|
+
case 13:
|
|
245
|
+
_e.trys.push([13, , 16, 17]);
|
|
246
|
+
if (!(records_1_1 && !records_1_1.done && (_b = records_1.return))) return [3 /*break*/, 15];
|
|
209
247
|
return [4 /*yield*/, _b.call(records_1)];
|
|
210
|
-
case 12:
|
|
211
|
-
_e.sent();
|
|
212
|
-
_e.label = 13;
|
|
213
|
-
case 13: return [3 /*break*/, 15];
|
|
214
248
|
case 14:
|
|
249
|
+
_e.sent();
|
|
250
|
+
_e.label = 15;
|
|
251
|
+
case 15: return [3 /*break*/, 17];
|
|
252
|
+
case 16:
|
|
215
253
|
if (e_3) throw e_3.error;
|
|
216
254
|
return [7 /*endfinally*/];
|
|
217
|
-
case
|
|
218
|
-
case
|
|
219
|
-
case 17:
|
|
220
|
-
_e.trys.push([17, 23, 24, 29]);
|
|
221
|
-
records_2 = tslib_1.__asyncValues(records);
|
|
222
|
-
_e.label = 18;
|
|
223
|
-
case 18: return [4 /*yield*/, records_2.next()];
|
|
255
|
+
case 17: return [7 /*endfinally*/];
|
|
256
|
+
case 18: return [3 /*break*/, 36];
|
|
224
257
|
case 19:
|
|
225
|
-
|
|
258
|
+
_e.trys.push([19, 27, 28, 33]);
|
|
259
|
+
records_2 = tslib_1.__asyncValues(records);
|
|
260
|
+
_e.label = 20;
|
|
261
|
+
case 20: return [4 /*yield*/, records_2.next()];
|
|
262
|
+
case 21:
|
|
263
|
+
if (!(records_2_1 = _e.sent(), !records_2_1.done)) return [3 /*break*/, 26];
|
|
226
264
|
recordItem = records_2_1.value;
|
|
227
|
-
if (!
|
|
228
|
-
|
|
229
|
-
|
|
265
|
+
if (!(targetNames === null || targetNames === void 0 ? void 0 : targetNames.length)) return [3 /*break*/, 23];
|
|
266
|
+
allPresent = void 0;
|
|
267
|
+
// iterate through all targetnames to make sure they are all present in the recordItem
|
|
268
|
+
allPresent = targetNames.every(function (targetName) {
|
|
269
|
+
return recordItem[targetName] != null;
|
|
270
|
+
});
|
|
271
|
+
// If not present, there is not yet a connected record
|
|
272
|
+
if (!allPresent) {
|
|
273
|
+
return [3 /*break*/, 26];
|
|
274
|
+
}
|
|
275
|
+
keys = targetNames
|
|
276
|
+
.map(function (targetName) { return recordItem[targetName]; })
|
|
277
|
+
.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
278
|
+
return [4 /*yield*/, this.db.get(keys, storeName)];
|
|
279
|
+
case 22:
|
|
230
280
|
connectionRecord = _e.sent();
|
|
231
281
|
recordItem[fieldName] =
|
|
232
282
|
connectionRecord &&
|
|
233
283
|
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
284
|
+
targetNames === null || targetNames === void 0 ? void 0 : targetNames.map(function (targetName) {
|
|
285
|
+
delete recordItem[targetName];
|
|
286
|
+
});
|
|
287
|
+
return [3 /*break*/, 25];
|
|
238
288
|
case 23:
|
|
289
|
+
if (!recordItem[targetName]) return [3 /*break*/, 25];
|
|
290
|
+
key = recordItem[targetName];
|
|
291
|
+
return [4 /*yield*/, this.db.get(key, storeName)];
|
|
292
|
+
case 24:
|
|
293
|
+
connectionRecord = _e.sent();
|
|
294
|
+
recordItem[fieldName] =
|
|
295
|
+
connectionRecord &&
|
|
296
|
+
this.modelInstanceCreator(modelConstructor_1, connectionRecord);
|
|
297
|
+
delete recordItem[targetName];
|
|
298
|
+
_e.label = 25;
|
|
299
|
+
case 25: return [3 /*break*/, 20];
|
|
300
|
+
case 26: return [3 /*break*/, 33];
|
|
301
|
+
case 27:
|
|
239
302
|
e_4_1 = _e.sent();
|
|
240
303
|
e_4 = { error: e_4_1 };
|
|
241
|
-
return [3 /*break*/,
|
|
242
|
-
case
|
|
243
|
-
_e.trys.push([
|
|
244
|
-
if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/,
|
|
304
|
+
return [3 /*break*/, 33];
|
|
305
|
+
case 28:
|
|
306
|
+
_e.trys.push([28, , 31, 32]);
|
|
307
|
+
if (!(records_2_1 && !records_2_1.done && (_c = records_2.return))) return [3 /*break*/, 30];
|
|
245
308
|
return [4 /*yield*/, _c.call(records_2)];
|
|
246
|
-
case
|
|
309
|
+
case 29:
|
|
247
310
|
_e.sent();
|
|
248
|
-
_e.label =
|
|
249
|
-
case
|
|
250
|
-
case
|
|
311
|
+
_e.label = 30;
|
|
312
|
+
case 30: return [3 /*break*/, 32];
|
|
313
|
+
case 31:
|
|
251
314
|
if (e_4) throw e_4.error;
|
|
252
315
|
return [7 /*endfinally*/];
|
|
253
|
-
case
|
|
254
|
-
case
|
|
255
|
-
case
|
|
316
|
+
case 32: return [7 /*endfinally*/];
|
|
317
|
+
case 33: return [3 /*break*/, 36];
|
|
318
|
+
case 34:
|
|
256
319
|
// TODO: Lazy loading
|
|
257
|
-
return [3 /*break*/,
|
|
258
|
-
case
|
|
320
|
+
return [3 /*break*/, 36];
|
|
321
|
+
case 35:
|
|
259
322
|
util_1.exhaustiveCheck(relationType);
|
|
260
|
-
return [3 /*break*/,
|
|
261
|
-
case
|
|
262
|
-
case
|
|
263
|
-
case
|
|
323
|
+
return [3 /*break*/, 36];
|
|
324
|
+
case 36: return [3 /*break*/, 2];
|
|
325
|
+
case 37: return [3 /*break*/, 44];
|
|
326
|
+
case 38:
|
|
264
327
|
e_2_1 = _e.sent();
|
|
265
328
|
e_2 = { error: e_2_1 };
|
|
266
|
-
return [3 /*break*/,
|
|
267
|
-
case
|
|
268
|
-
_e.trys.push([
|
|
269
|
-
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/,
|
|
329
|
+
return [3 /*break*/, 44];
|
|
330
|
+
case 39:
|
|
331
|
+
_e.trys.push([39, , 42, 43]);
|
|
332
|
+
if (!(relations_1_1 && !relations_1_1.done && (_a = relations_1.return))) return [3 /*break*/, 41];
|
|
270
333
|
return [4 /*yield*/, _a.call(relations_1)];
|
|
271
|
-
case
|
|
334
|
+
case 40:
|
|
272
335
|
_e.sent();
|
|
273
|
-
_e.label =
|
|
274
|
-
case
|
|
275
|
-
case
|
|
336
|
+
_e.label = 41;
|
|
337
|
+
case 41: return [3 /*break*/, 43];
|
|
338
|
+
case 42:
|
|
276
339
|
if (e_2) throw e_2.error;
|
|
277
340
|
return [7 /*endfinally*/];
|
|
278
|
-
case
|
|
279
|
-
case
|
|
341
|
+
case 43: return [7 /*endfinally*/];
|
|
342
|
+
case 44: return [2 /*return*/, records.map(function (record) {
|
|
280
343
|
return _this.modelInstanceCreator(modelConstructor, record);
|
|
281
344
|
})];
|
|
282
345
|
}
|
|
@@ -285,7 +348,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
285
348
|
};
|
|
286
349
|
AsyncStorageAdapter.prototype.query = function (modelConstructor, predicate, pagination) {
|
|
287
350
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
288
|
-
var storeName, namespaceName, predicates,
|
|
351
|
+
var storeName, namespaceName, predicates, keys, queryByKey, hasSort, hasPagination, records;
|
|
289
352
|
var _this = this;
|
|
290
353
|
return tslib_1.__generator(this, function (_a) {
|
|
291
354
|
switch (_a.label) {
|
|
@@ -293,7 +356,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
293
356
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
294
357
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
295
358
|
predicates = predicate && predicates_1.ModelPredicateCreator.getPredicates(predicate);
|
|
296
|
-
|
|
359
|
+
keys = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
360
|
+
queryByKey = predicates && this.keyValueFromPredicate(predicates, keys);
|
|
297
361
|
hasSort = pagination && pagination.sort;
|
|
298
362
|
hasPagination = pagination && pagination.limit;
|
|
299
363
|
return [4 /*yield*/, (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
@@ -301,8 +365,8 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
301
365
|
return tslib_1.__generator(this, function (_a) {
|
|
302
366
|
switch (_a.label) {
|
|
303
367
|
case 0:
|
|
304
|
-
if (!
|
|
305
|
-
return [4 /*yield*/, this.
|
|
368
|
+
if (!queryByKey) return [3 /*break*/, 2];
|
|
369
|
+
return [4 /*yield*/, this.getByKey(storeName, queryByKey)];
|
|
306
370
|
case 1:
|
|
307
371
|
record = _a.sent();
|
|
308
372
|
return [2 /*return*/, record ? [record] : []];
|
|
@@ -330,12 +394,12 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
330
394
|
});
|
|
331
395
|
});
|
|
332
396
|
};
|
|
333
|
-
AsyncStorageAdapter.prototype.
|
|
397
|
+
AsyncStorageAdapter.prototype.getByKey = function (storeName, keyValuePath) {
|
|
334
398
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
335
399
|
var record;
|
|
336
400
|
return tslib_1.__generator(this, function (_a) {
|
|
337
401
|
switch (_a.label) {
|
|
338
|
-
case 0: return [4 /*yield*/, this.db.get(
|
|
402
|
+
case 0: return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
339
403
|
case 1:
|
|
340
404
|
record = _a.sent();
|
|
341
405
|
return [2 /*return*/, record];
|
|
@@ -353,11 +417,33 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
353
417
|
});
|
|
354
418
|
});
|
|
355
419
|
};
|
|
356
|
-
AsyncStorageAdapter.prototype.
|
|
420
|
+
AsyncStorageAdapter.prototype.keyValueFromPredicate = function (predicates, keys) {
|
|
421
|
+
var e_5, _a;
|
|
357
422
|
var predicateObjs = predicates.predicates;
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
423
|
+
if (predicateObjs.length !== keys.length) {
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
var keyValues = [];
|
|
427
|
+
var _loop_1 = function (key) {
|
|
428
|
+
var predicateObj = predicateObjs.find(function (p) { return types_1.isPredicateObj(p) && p.field === key && p.operator === 'eq'; });
|
|
429
|
+
predicateObj && keyValues.push(predicateObj.operand);
|
|
430
|
+
};
|
|
431
|
+
try {
|
|
432
|
+
for (var keys_1 = tslib_1.__values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
|
|
433
|
+
var key = keys_1_1.value;
|
|
434
|
+
_loop_1(key);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
438
|
+
finally {
|
|
439
|
+
try {
|
|
440
|
+
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
|
|
441
|
+
}
|
|
442
|
+
finally { if (e_5) throw e_5.error; }
|
|
443
|
+
}
|
|
444
|
+
return keyValues.length === keys.length
|
|
445
|
+
? keyValues.join(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR)
|
|
446
|
+
: undefined;
|
|
361
447
|
};
|
|
362
448
|
AsyncStorageAdapter.prototype.filterOnPredicate = function (storeName, predicates) {
|
|
363
449
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
@@ -411,7 +497,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
411
497
|
};
|
|
412
498
|
AsyncStorageAdapter.prototype.delete = function (modelOrModelConstructor, condition) {
|
|
413
499
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
414
|
-
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor,
|
|
500
|
+
var deleteQueue, modelConstructor, nameSpace, models, relations, deletedModels, deletedModels, model, modelConstructor, namespaceName, storeName, keyValuePath, fromDB, msg, predicates, predicateObjs, type, isValid, msg, relations, relations, deletedModels;
|
|
415
501
|
return tslib_1.__generator(this, function (_a) {
|
|
416
502
|
switch (_a.label) {
|
|
417
503
|
case 0:
|
|
@@ -452,10 +538,11 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
452
538
|
model = modelOrModelConstructor;
|
|
453
539
|
modelConstructor = Object.getPrototypeOf(model)
|
|
454
540
|
.constructor;
|
|
455
|
-
|
|
541
|
+
namespaceName = this.namespaceResolver(modelConstructor);
|
|
456
542
|
storeName = this.getStorenameForModel(modelConstructor);
|
|
457
543
|
if (!condition) return [3 /*break*/, 11];
|
|
458
|
-
|
|
544
|
+
keyValuePath = this.getIndexKeyValuesPath(model);
|
|
545
|
+
return [4 /*yield*/, this.db.get(keyValuePath, storeName)];
|
|
459
546
|
case 9:
|
|
460
547
|
fromDB = _a.sent();
|
|
461
548
|
if (fromDB === undefined) {
|
|
@@ -471,16 +558,14 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
471
558
|
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
472
559
|
throw new Error(msg);
|
|
473
560
|
}
|
|
474
|
-
relations = this.schema.namespaces[
|
|
475
|
-
|
|
476
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
561
|
+
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
562
|
+
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
477
563
|
case 10:
|
|
478
564
|
_a.sent();
|
|
479
565
|
return [3 /*break*/, 13];
|
|
480
566
|
case 11:
|
|
481
|
-
relations = this.schema.namespaces[
|
|
482
|
-
|
|
483
|
-
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, nameSpace, deleteQueue)];
|
|
567
|
+
relations = this.schema.namespaces[namespaceName].relationships[modelConstructor.name].relationTypes;
|
|
568
|
+
return [4 /*yield*/, this.deleteTraverse(relations, [model], modelConstructor.name, namespaceName, deleteQueue)];
|
|
484
569
|
case 12:
|
|
485
570
|
_a.sent();
|
|
486
571
|
_a.label = 13;
|
|
@@ -499,9 +584,9 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
499
584
|
};
|
|
500
585
|
AsyncStorageAdapter.prototype.deleteItem = function (deleteQueue) {
|
|
501
586
|
var deleteQueue_1, deleteQueue_1_1;
|
|
502
|
-
var
|
|
587
|
+
var e_6, _a, e_7, _b;
|
|
503
588
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
504
|
-
var deleteItem, storeName, items, items_1, items_1_1, item,
|
|
589
|
+
var deleteItem, storeName, items, items_1, items_1_1, item, keyValuesPath, e_7_1, e_6_1;
|
|
505
590
|
return tslib_1.__generator(this, function (_c) {
|
|
506
591
|
switch (_c.label) {
|
|
507
592
|
case 0:
|
|
@@ -524,16 +609,16 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
524
609
|
item = items_1_1.value;
|
|
525
610
|
if (!item) return [3 /*break*/, 7];
|
|
526
611
|
if (!(typeof item === 'object')) return [3 /*break*/, 7];
|
|
527
|
-
|
|
528
|
-
return [4 /*yield*/, this.db.delete(
|
|
612
|
+
keyValuesPath = this.getIndexKeyValuesPath(item);
|
|
613
|
+
return [4 /*yield*/, this.db.delete(keyValuesPath, storeName)];
|
|
529
614
|
case 6:
|
|
530
615
|
_c.sent();
|
|
531
616
|
_c.label = 7;
|
|
532
617
|
case 7: return [3 /*break*/, 4];
|
|
533
618
|
case 8: return [3 /*break*/, 15];
|
|
534
619
|
case 9:
|
|
535
|
-
|
|
536
|
-
|
|
620
|
+
e_7_1 = _c.sent();
|
|
621
|
+
e_7 = { error: e_7_1 };
|
|
537
622
|
return [3 /*break*/, 15];
|
|
538
623
|
case 10:
|
|
539
624
|
_c.trys.push([10, , 13, 14]);
|
|
@@ -544,14 +629,14 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
544
629
|
_c.label = 12;
|
|
545
630
|
case 12: return [3 /*break*/, 14];
|
|
546
631
|
case 13:
|
|
547
|
-
if (
|
|
632
|
+
if (e_7) throw e_7.error;
|
|
548
633
|
return [7 /*endfinally*/];
|
|
549
634
|
case 14: return [7 /*endfinally*/];
|
|
550
635
|
case 15: return [3 /*break*/, 1];
|
|
551
636
|
case 16: return [3 /*break*/, 23];
|
|
552
637
|
case 17:
|
|
553
|
-
|
|
554
|
-
|
|
638
|
+
e_6_1 = _c.sent();
|
|
639
|
+
e_6 = { error: e_6_1 };
|
|
555
640
|
return [3 /*break*/, 23];
|
|
556
641
|
case 18:
|
|
557
642
|
_c.trys.push([18, , 21, 22]);
|
|
@@ -562,7 +647,7 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
562
647
|
_c.label = 20;
|
|
563
648
|
case 20: return [3 /*break*/, 22];
|
|
564
649
|
case 21:
|
|
565
|
-
if (
|
|
650
|
+
if (e_6) throw e_6.error;
|
|
566
651
|
return [7 /*endfinally*/];
|
|
567
652
|
case 22: return [7 /*endfinally*/];
|
|
568
653
|
case 23: return [2 /*return*/];
|
|
@@ -580,22 +665,22 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
580
665
|
*/
|
|
581
666
|
AsyncStorageAdapter.prototype.deleteTraverse = function (relations, models, srcModel, nameSpace, deleteQueue) {
|
|
582
667
|
var relations_2, relations_2_1, models_1, models_1_1, models_2, models_2_1;
|
|
583
|
-
var
|
|
668
|
+
var e_8, _a, e_9, _b, e_10, _c;
|
|
584
669
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
585
|
-
var rel, relationType, modelName, targetName, storeName, index, _d, model,
|
|
670
|
+
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;
|
|
586
671
|
var _this = this;
|
|
587
672
|
return tslib_1.__generator(this, function (_e) {
|
|
588
673
|
switch (_e.label) {
|
|
589
674
|
case 0:
|
|
590
|
-
_e.trys.push([0,
|
|
675
|
+
_e.trys.push([0, 38, 39, 44]);
|
|
591
676
|
relations_2 = tslib_1.__asyncValues(relations);
|
|
592
677
|
_e.label = 1;
|
|
593
678
|
case 1: return [4 /*yield*/, relations_2.next()];
|
|
594
679
|
case 2:
|
|
595
|
-
if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/,
|
|
680
|
+
if (!(relations_2_1 = _e.sent(), !relations_2_1.done)) return [3 /*break*/, 37];
|
|
596
681
|
rel = relations_2_1.value;
|
|
597
|
-
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName;
|
|
598
|
-
storeName =
|
|
682
|
+
relationType = rel.relationType, modelName = rel.modelName, targetName = rel.targetName, targetNames = rel.targetNames, associatedWith = rel.associatedWith;
|
|
683
|
+
storeName = util_1.getStorename(nameSpace, modelName);
|
|
599
684
|
index = util_1.getIndex(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
600
685
|
.relationTypes, srcModel) ||
|
|
601
686
|
// if we were unable to find an index via relationTypes
|
|
@@ -605,114 +690,176 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
605
690
|
_d = relationType;
|
|
606
691
|
switch (_d) {
|
|
607
692
|
case 'HAS_ONE': return [3 /*break*/, 3];
|
|
608
|
-
case 'HAS_MANY': return [3 /*break*/,
|
|
609
|
-
case 'BELONGS_TO': return [3 /*break*/,
|
|
693
|
+
case 'HAS_MANY': return [3 /*break*/, 20];
|
|
694
|
+
case 'BELONGS_TO': return [3 /*break*/, 34];
|
|
610
695
|
}
|
|
611
|
-
return [3 /*break*/,
|
|
696
|
+
return [3 /*break*/, 35];
|
|
612
697
|
case 3:
|
|
613
|
-
_e.trys.push([3,
|
|
698
|
+
_e.trys.push([3, 13, 14, 19]);
|
|
614
699
|
models_1 = tslib_1.__asyncValues(models);
|
|
615
700
|
_e.label = 4;
|
|
616
701
|
case 4: return [4 /*yield*/, models_1.next()];
|
|
617
702
|
case 5:
|
|
618
|
-
if (!(models_1_1 = _e.sent(), !models_1_1.done)) return [3 /*break*/,
|
|
703
|
+
if (!(models_1_1 = _e.sent(), !models_1_1.done)) return [3 /*break*/, 12];
|
|
619
704
|
model = models_1_1.value;
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
705
|
+
if (!(targetNames && (targetNames === null || targetNames === void 0 ? void 0 : targetNames.length))) return [3 /*break*/, 8];
|
|
706
|
+
if (index) {
|
|
707
|
+
hasOneIndex_1 = index.split(util_1.IDENTIFIER_KEY_SEPARATOR);
|
|
708
|
+
}
|
|
709
|
+
else if (associatedWith) {
|
|
710
|
+
if (Array.isArray(associatedWith)) {
|
|
711
|
+
hasOneIndex_1 = associatedWith;
|
|
712
|
+
}
|
|
713
|
+
else {
|
|
714
|
+
hasOneIndex_1 = [associatedWith];
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
hasConnectedModelFields = targetNames.every(function (targetName) {
|
|
718
|
+
return model.hasOwnProperty(targetName);
|
|
719
|
+
});
|
|
720
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
721
|
+
isUnidirectionalConnection = hasOneIndex_1 === associatedWith;
|
|
722
|
+
if (hasConnectedModelFields && isUnidirectionalConnection) {
|
|
723
|
+
// Values will be that of the child model
|
|
724
|
+
values_1 = targetNames.map(function (targetName) { return model[targetName]; });
|
|
725
|
+
}
|
|
726
|
+
else {
|
|
727
|
+
// values will be that of the parent model
|
|
728
|
+
values_1 = keyValuesPath.split(util_1.DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
729
|
+
}
|
|
730
|
+
if (values_1.length === 0)
|
|
731
|
+
return [3 /*break*/, 12];
|
|
625
732
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
626
733
|
case 6:
|
|
627
734
|
allRecords = _e.sent();
|
|
628
|
-
recordToDelete =
|
|
735
|
+
recordToDelete = void 0;
|
|
736
|
+
// values === targetNames
|
|
737
|
+
if (hasConnectedModelFields) {
|
|
738
|
+
/**
|
|
739
|
+
* Retrieve record by finding the record where all
|
|
740
|
+
* targetNames are present on the connected model.
|
|
741
|
+
*
|
|
742
|
+
*/
|
|
743
|
+
// recordToDelete = allRecords.filter(childItem =>
|
|
744
|
+
// values.every(value => childItem[value] != null)
|
|
745
|
+
// ) as T[];
|
|
746
|
+
recordToDelete = allRecords.filter(function (childItem) {
|
|
747
|
+
return hasOneIndex_1.every(function (index) { return values_1.includes(childItem[index]); });
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
else {
|
|
751
|
+
// values === keyValuePath
|
|
752
|
+
recordToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_1] === values_1; });
|
|
753
|
+
}
|
|
629
754
|
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
630
755
|
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
631
756
|
case 7:
|
|
632
757
|
_e.sent();
|
|
633
|
-
|
|
634
|
-
case 8:
|
|
635
|
-
|
|
758
|
+
return [3 /*break*/, 11];
|
|
759
|
+
case 8:
|
|
760
|
+
hasOneIndex_2 = index || associatedWith;
|
|
761
|
+
hasOneCustomField = targetName in model;
|
|
762
|
+
keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
763
|
+
value_1 = hasOneCustomField
|
|
764
|
+
? model[targetName]
|
|
765
|
+
: keyValuesPath;
|
|
766
|
+
if (!value_1)
|
|
767
|
+
return [3 /*break*/, 12];
|
|
768
|
+
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
769
|
+
case 9:
|
|
770
|
+
allRecords = _e.sent();
|
|
771
|
+
recordToDelete = allRecords.filter(function (childItem) { return childItem[hasOneIndex_2] === value_1; });
|
|
772
|
+
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
773
|
+
.relationTypes, recordToDelete, modelName, nameSpace, deleteQueue)];
|
|
636
774
|
case 10:
|
|
637
|
-
e_8_1 = _e.sent();
|
|
638
|
-
e_8 = { error: e_8_1 };
|
|
639
|
-
return [3 /*break*/, 16];
|
|
640
|
-
case 11:
|
|
641
|
-
_e.trys.push([11, , 14, 15]);
|
|
642
|
-
if (!(models_1_1 && !models_1_1.done && (_b = models_1.return))) return [3 /*break*/, 13];
|
|
643
|
-
return [4 /*yield*/, _b.call(models_1)];
|
|
644
|
-
case 12:
|
|
645
775
|
_e.sent();
|
|
646
|
-
_e.label =
|
|
647
|
-
case
|
|
776
|
+
_e.label = 11;
|
|
777
|
+
case 11: return [3 /*break*/, 4];
|
|
778
|
+
case 12: return [3 /*break*/, 19];
|
|
779
|
+
case 13:
|
|
780
|
+
e_9_1 = _e.sent();
|
|
781
|
+
e_9 = { error: e_9_1 };
|
|
782
|
+
return [3 /*break*/, 19];
|
|
648
783
|
case 14:
|
|
649
|
-
|
|
650
|
-
return [
|
|
651
|
-
|
|
652
|
-
case
|
|
784
|
+
_e.trys.push([14, , 17, 18]);
|
|
785
|
+
if (!(models_1_1 && !models_1_1.done && (_b = models_1.return))) return [3 /*break*/, 16];
|
|
786
|
+
return [4 /*yield*/, _b.call(models_1)];
|
|
787
|
+
case 15:
|
|
788
|
+
_e.sent();
|
|
789
|
+
_e.label = 16;
|
|
790
|
+
case 16: return [3 /*break*/, 18];
|
|
653
791
|
case 17:
|
|
654
|
-
|
|
792
|
+
if (e_9) throw e_9.error;
|
|
793
|
+
return [7 /*endfinally*/];
|
|
794
|
+
case 18: return [7 /*endfinally*/];
|
|
795
|
+
case 19: return [3 /*break*/, 36];
|
|
796
|
+
case 20:
|
|
797
|
+
_e.trys.push([20, 27, 28, 33]);
|
|
655
798
|
models_2 = tslib_1.__asyncValues(models);
|
|
656
|
-
_e.label =
|
|
657
|
-
case
|
|
658
|
-
case
|
|
659
|
-
if (!(models_2_1 = _e.sent(), !models_2_1.done)) return [3 /*break*/,
|
|
799
|
+
_e.label = 21;
|
|
800
|
+
case 21: return [4 /*yield*/, models_2.next()];
|
|
801
|
+
case 22:
|
|
802
|
+
if (!(models_2_1 = _e.sent(), !models_2_1.done)) return [3 /*break*/, 26];
|
|
660
803
|
model = models_2_1.value;
|
|
804
|
+
keyValues = this.getIndexKeyValuesFromModel(model);
|
|
661
805
|
return [4 /*yield*/, this.db.getAll(storeName)];
|
|
662
|
-
case
|
|
806
|
+
case 23:
|
|
663
807
|
allRecords = _e.sent();
|
|
664
|
-
|
|
808
|
+
indices = index.split(util_1.IDENTIFIER_KEY_SEPARATOR);
|
|
809
|
+
childrenArray = allRecords.filter(function (childItem) {
|
|
810
|
+
return indices.every(function (index) { return keyValues.includes(childItem[index]); });
|
|
811
|
+
});
|
|
665
812
|
return [4 /*yield*/, this.deleteTraverse(this.schema.namespaces[nameSpace].relationships[modelName]
|
|
666
813
|
.relationTypes, childrenArray, modelName, nameSpace, deleteQueue)];
|
|
667
|
-
case 21:
|
|
668
|
-
_e.sent();
|
|
669
|
-
_e.label = 22;
|
|
670
|
-
case 22: return [3 /*break*/, 18];
|
|
671
|
-
case 23: return [3 /*break*/, 30];
|
|
672
814
|
case 24:
|
|
673
|
-
e_9_1 = _e.sent();
|
|
674
|
-
e_9 = { error: e_9_1 };
|
|
675
|
-
return [3 /*break*/, 30];
|
|
676
|
-
case 25:
|
|
677
|
-
_e.trys.push([25, , 28, 29]);
|
|
678
|
-
if (!(models_2_1 && !models_2_1.done && (_c = models_2.return))) return [3 /*break*/, 27];
|
|
679
|
-
return [4 /*yield*/, _c.call(models_2)];
|
|
680
|
-
case 26:
|
|
681
815
|
_e.sent();
|
|
682
|
-
_e.label =
|
|
683
|
-
case
|
|
816
|
+
_e.label = 25;
|
|
817
|
+
case 25: return [3 /*break*/, 21];
|
|
818
|
+
case 26: return [3 /*break*/, 33];
|
|
819
|
+
case 27:
|
|
820
|
+
e_10_1 = _e.sent();
|
|
821
|
+
e_10 = { error: e_10_1 };
|
|
822
|
+
return [3 /*break*/, 33];
|
|
684
823
|
case 28:
|
|
685
|
-
|
|
824
|
+
_e.trys.push([28, , 31, 32]);
|
|
825
|
+
if (!(models_2_1 && !models_2_1.done && (_c = models_2.return))) return [3 /*break*/, 30];
|
|
826
|
+
return [4 /*yield*/, _c.call(models_2)];
|
|
827
|
+
case 29:
|
|
828
|
+
_e.sent();
|
|
829
|
+
_e.label = 30;
|
|
830
|
+
case 30: return [3 /*break*/, 32];
|
|
831
|
+
case 31:
|
|
832
|
+
if (e_10) throw e_10.error;
|
|
686
833
|
return [7 /*endfinally*/];
|
|
687
|
-
case
|
|
688
|
-
case
|
|
689
|
-
case
|
|
834
|
+
case 32: return [7 /*endfinally*/];
|
|
835
|
+
case 33: return [3 /*break*/, 36];
|
|
836
|
+
case 34:
|
|
690
837
|
// Intentionally blank
|
|
691
|
-
return [3 /*break*/,
|
|
692
|
-
case 32:
|
|
693
|
-
util_1.exhaustiveCheck(relationType);
|
|
694
|
-
return [3 /*break*/, 33];
|
|
695
|
-
case 33: return [3 /*break*/, 1];
|
|
696
|
-
case 34: return [3 /*break*/, 41];
|
|
838
|
+
return [3 /*break*/, 36];
|
|
697
839
|
case 35:
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
case
|
|
702
|
-
|
|
703
|
-
|
|
840
|
+
util_1.exhaustiveCheck(relationType);
|
|
841
|
+
return [3 /*break*/, 36];
|
|
842
|
+
case 36: return [3 /*break*/, 1];
|
|
843
|
+
case 37: return [3 /*break*/, 44];
|
|
844
|
+
case 38:
|
|
845
|
+
e_8_1 = _e.sent();
|
|
846
|
+
e_8 = { error: e_8_1 };
|
|
847
|
+
return [3 /*break*/, 44];
|
|
848
|
+
case 39:
|
|
849
|
+
_e.trys.push([39, , 42, 43]);
|
|
850
|
+
if (!(relations_2_1 && !relations_2_1.done && (_a = relations_2.return))) return [3 /*break*/, 41];
|
|
704
851
|
return [4 /*yield*/, _a.call(relations_2)];
|
|
705
|
-
case
|
|
852
|
+
case 40:
|
|
706
853
|
_e.sent();
|
|
707
|
-
_e.label =
|
|
708
|
-
case
|
|
709
|
-
case
|
|
710
|
-
if (
|
|
854
|
+
_e.label = 41;
|
|
855
|
+
case 41: return [3 /*break*/, 43];
|
|
856
|
+
case 42:
|
|
857
|
+
if (e_8) throw e_8.error;
|
|
711
858
|
return [7 /*endfinally*/];
|
|
712
|
-
case
|
|
713
|
-
case
|
|
859
|
+
case 43: return [7 /*endfinally*/];
|
|
860
|
+
case 44:
|
|
714
861
|
deleteQueue.push({
|
|
715
|
-
storeName:
|
|
862
|
+
storeName: util_1.getStorename(nameSpace, srcModel),
|
|
716
863
|
items: models.map(function (record) {
|
|
717
864
|
return _this.modelInstanceCreator(_this.getModelConstructorByModelName(nameSpace, srcModel), record);
|
|
718
865
|
}),
|
|
@@ -738,21 +885,25 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
738
885
|
};
|
|
739
886
|
AsyncStorageAdapter.prototype.batchSave = function (modelConstructor, items) {
|
|
740
887
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
741
|
-
var modelName, namespaceName, storeName, batch,
|
|
742
|
-
var
|
|
888
|
+
var modelName, namespaceName, storeName, keys, batch, _loop_2, this_1, items_2, items_2_1, item;
|
|
889
|
+
var e_11, _a;
|
|
890
|
+
var _this = this;
|
|
743
891
|
return tslib_1.__generator(this, function (_b) {
|
|
744
892
|
switch (_b.label) {
|
|
745
893
|
case 0:
|
|
746
894
|
modelName = modelConstructor.name;
|
|
747
895
|
namespaceName = this.namespaceResolver(modelConstructor);
|
|
748
|
-
storeName =
|
|
896
|
+
storeName = util_1.getStorename(namespaceName, modelName);
|
|
897
|
+
keys = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelName);
|
|
749
898
|
batch = [];
|
|
750
|
-
|
|
751
|
-
var
|
|
752
|
-
var connectedModels = util_1.traverseModel(
|
|
899
|
+
_loop_2 = function (item) {
|
|
900
|
+
var model = this_1.modelInstanceCreator(modelConstructor, item);
|
|
901
|
+
var connectedModels = util_1.traverseModel(modelName, model, this_1.schema.namespaces[namespaceName], this_1.modelInstanceCreator, this_1.getModelConstructorByModelName);
|
|
902
|
+
var keyValuesPath = this_1.getIndexKeyValuesPath(model);
|
|
753
903
|
var instance = connectedModels.find(function (_a) {
|
|
754
904
|
var instance = _a.instance;
|
|
755
|
-
|
|
905
|
+
var instanceKeyValuesPath = _this.getIndexKeyValuesPath(instance);
|
|
906
|
+
return util_1.keysEqual([instanceKeyValuesPath], [keyValuesPath]);
|
|
756
907
|
}).instance;
|
|
757
908
|
batch.push(instance);
|
|
758
909
|
};
|
|
@@ -760,17 +911,17 @@ var AsyncStorageAdapter = /** @class */ (function () {
|
|
|
760
911
|
try {
|
|
761
912
|
for (items_2 = tslib_1.__values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
762
913
|
item = items_2_1.value;
|
|
763
|
-
|
|
914
|
+
_loop_2(item);
|
|
764
915
|
}
|
|
765
916
|
}
|
|
766
|
-
catch (
|
|
917
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
767
918
|
finally {
|
|
768
919
|
try {
|
|
769
920
|
if (items_2_1 && !items_2_1.done && (_a = items_2.return)) _a.call(items_2);
|
|
770
921
|
}
|
|
771
|
-
finally { if (
|
|
922
|
+
finally { if (e_11) throw e_11.error; }
|
|
772
923
|
}
|
|
773
|
-
return [4 /*yield*/, this.db.batchSave(storeName, batch)];
|
|
924
|
+
return [4 /*yield*/, this.db.batchSave(storeName, batch, keys)];
|
|
774
925
|
case 1: return [2 /*return*/, _b.sent()];
|
|
775
926
|
}
|
|
776
927
|
});
|