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