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