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