@aws-amplify/datastore 4.7.6-api-v6-models.b3abc9b.0 → 5.0.0
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/README.md +4 -0
- package/lib/authModeStrategies/defaultAuthStrategy.js +3 -2
- package/lib/authModeStrategies/index.js +3 -3
- package/lib/authModeStrategies/multiAuthStrategy.js +38 -53
- package/lib/datastore/datastore.d.ts +4 -5
- package/lib/datastore/datastore.js +929 -1284
- package/lib/index.d.ts +1 -1
- package/lib/index.js +26 -13
- package/lib/predicates/index.js +54 -69
- package/lib/predicates/next.d.ts +2 -2
- package/lib/predicates/next.js +313 -462
- package/lib/predicates/sort.js +24 -28
- package/lib/ssr/index.js +2 -2
- package/lib/storage/adapter/AsyncStorageAdapter.js +120 -342
- package/lib/storage/adapter/AsyncStorageDatabase.js +217 -421
- package/lib/storage/adapter/InMemoryStore.js +28 -51
- package/lib/storage/adapter/InMemoryStore.native.js +5 -3
- package/lib/storage/adapter/IndexedDBAdapter.js +466 -871
- package/lib/storage/adapter/StorageAdapterBase.js +180 -330
- package/lib/storage/adapter/getDefaultAdapter/index.js +8 -10
- package/lib/storage/adapter/getDefaultAdapter/index.native.js +5 -4
- package/lib/storage/adapter/index.js +0 -1
- package/lib/storage/relationship.js +177 -253
- package/lib/storage/storage.d.ts +4 -4
- package/lib/storage/storage.js +255 -433
- package/lib/sync/datastoreConnectivity.d.ts +2 -2
- package/lib/sync/datastoreConnectivity.js +29 -39
- package/lib/sync/datastoreReachability/index.d.ts +1 -3
- package/lib/sync/datastoreReachability/index.js +3 -3
- package/lib/sync/datastoreReachability/index.native.d.ts +1 -3
- package/lib/sync/datastoreReachability/index.native.js +4 -5
- package/lib/sync/index.d.ts +2 -2
- package/lib/sync/index.js +522 -827
- package/lib/sync/merger.js +31 -63
- package/lib/sync/outbox.js +148 -232
- package/lib/sync/processors/errorMaps.d.ts +1 -1
- package/lib/sync/processors/errorMaps.js +30 -47
- package/lib/sync/processors/mutation.d.ts +2 -2
- package/lib/sync/processors/mutation.js +343 -502
- package/lib/sync/processors/subscription.d.ts +5 -2
- package/lib/sync/processors/subscription.js +283 -437
- package/lib/sync/processors/sync.d.ts +2 -2
- package/lib/sync/processors/sync.js +279 -404
- package/lib/sync/utils.d.ts +5 -4
- package/lib/sync/utils.js +267 -320
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types.d.ts +138 -140
- package/lib/types.js +17 -24
- package/lib/util.d.ts +9 -17
- package/lib/util.js +387 -511
- package/lib-esm/authModeStrategies/defaultAuthStrategy.js +1 -2
- package/lib-esm/authModeStrategies/index.js +0 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.js +35 -52
- package/lib-esm/datastore/datastore.d.ts +4 -5
- package/lib-esm/datastore/datastore.js +888 -1247
- package/lib-esm/index.d.ts +1 -1
- package/lib-esm/index.js +6 -7
- package/lib-esm/predicates/index.js +53 -70
- package/lib-esm/predicates/next.d.ts +2 -2
- package/lib-esm/predicates/next.js +306 -459
- package/lib-esm/predicates/sort.js +23 -28
- package/lib-esm/ssr/index.js +1 -2
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js +111 -338
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js +212 -416
- package/lib-esm/storage/adapter/InMemoryStore.js +27 -52
- package/lib-esm/storage/adapter/InMemoryStore.native.js +0 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +438 -866
- package/lib-esm/storage/adapter/StorageAdapterBase.js +173 -325
- package/lib-esm/storage/adapter/getDefaultAdapter/index.js +2 -6
- package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js +1 -2
- package/lib-esm/storage/adapter/index.js +1 -1
- package/lib-esm/storage/relationship.js +173 -251
- package/lib-esm/storage/storage.d.ts +4 -4
- package/lib-esm/storage/storage.js +242 -424
- package/lib-esm/sync/datastoreConnectivity.d.ts +2 -2
- package/lib-esm/sync/datastoreConnectivity.js +28 -39
- package/lib-esm/sync/datastoreReachability/index.d.ts +1 -3
- package/lib-esm/sync/datastoreReachability/index.js +2 -3
- package/lib-esm/sync/datastoreReachability/index.native.d.ts +1 -3
- package/lib-esm/sync/datastoreReachability/index.native.js +3 -4
- package/lib-esm/sync/index.d.ts +2 -2
- package/lib-esm/sync/index.js +502 -812
- package/lib-esm/sync/merger.js +28 -61
- package/lib-esm/sync/outbox.js +143 -228
- package/lib-esm/sync/processors/errorMaps.d.ts +1 -1
- package/lib-esm/sync/processors/errorMaps.js +32 -50
- package/lib-esm/sync/processors/mutation.d.ts +2 -2
- package/lib-esm/sync/processors/mutation.js +329 -490
- package/lib-esm/sync/processors/subscription.d.ts +5 -2
- package/lib-esm/sync/processors/subscription.js +266 -421
- package/lib-esm/sync/processors/sync.d.ts +2 -2
- package/lib-esm/sync/processors/sync.js +271 -397
- package/lib-esm/sync/utils.d.ts +5 -4
- package/lib-esm/sync/utils.js +252 -307
- package/lib-esm/tsconfig.tsbuildinfo +1 -0
- package/lib-esm/types.d.ts +138 -140
- package/lib-esm/types.js +16 -25
- package/lib-esm/util.d.ts +9 -17
- package/lib-esm/util.js +335 -497
- package/package.json +31 -26
- package/src/authModeStrategies/multiAuthStrategy.ts +15 -12
- package/src/datastore/datastore.ts +36 -35
- package/src/predicates/sort.ts +3 -1
- package/src/storage/adapter/InMemoryStore.ts +1 -1
- package/src/storage/adapter/IndexedDBAdapter.ts +2 -2
- package/src/storage/adapter/StorageAdapterBase.ts +2 -2
- package/src/storage/adapter/getDefaultAdapter/index.ts +1 -4
- package/src/storage/storage.ts +29 -24
- package/src/sync/datastoreConnectivity.ts +6 -6
- package/src/sync/datastoreReachability/index.native.ts +5 -3
- package/src/sync/datastoreReachability/index.ts +1 -1
- package/src/sync/index.ts +79 -89
- package/src/sync/processors/errorMaps.ts +7 -7
- package/src/sync/processors/mutation.ts +19 -13
- package/src/sync/processors/subscription.ts +221 -295
- package/src/sync/processors/sync.ts +11 -8
- package/src/sync/utils.ts +30 -15
- package/src/types.ts +4 -8
- package/src/util.ts +46 -9
- package/lib/.tsbuildinfo +0 -3
- package/lib/authModeStrategies/defaultAuthStrategy.js.map +0 -1
- package/lib/authModeStrategies/index.js.map +0 -1
- package/lib/authModeStrategies/multiAuthStrategy.js.map +0 -1
- package/lib/datastore/datastore.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/predicates/index.js.map +0 -1
- package/lib/predicates/next.js.map +0 -1
- package/lib/predicates/sort.js.map +0 -1
- package/lib/ssr/index.js.map +0 -1
- package/lib/storage/adapter/AsyncStorageAdapter.js.map +0 -1
- package/lib/storage/adapter/AsyncStorageDatabase.js.map +0 -1
- package/lib/storage/adapter/InMemoryStore.js.map +0 -1
- package/lib/storage/adapter/InMemoryStore.native.js.map +0 -1
- package/lib/storage/adapter/IndexedDBAdapter.js.map +0 -1
- package/lib/storage/adapter/StorageAdapterBase.js.map +0 -1
- package/lib/storage/adapter/getDefaultAdapter/index.js.map +0 -1
- package/lib/storage/adapter/getDefaultAdapter/index.native.js.map +0 -1
- package/lib/storage/adapter/index.js.map +0 -1
- package/lib/storage/relationship.js.map +0 -1
- package/lib/storage/storage.js.map +0 -1
- package/lib/sync/datastoreConnectivity.js.map +0 -1
- package/lib/sync/datastoreReachability/index.js.map +0 -1
- package/lib/sync/datastoreReachability/index.native.js.map +0 -1
- package/lib/sync/index.js.map +0 -1
- package/lib/sync/merger.js.map +0 -1
- package/lib/sync/outbox.js.map +0 -1
- package/lib/sync/processors/errorMaps.js.map +0 -1
- package/lib/sync/processors/mutation.js.map +0 -1
- package/lib/sync/processors/subscription.js.map +0 -1
- package/lib/sync/processors/sync.js.map +0 -1
- package/lib/sync/utils.js.map +0 -1
- package/lib/types.js.map +0 -1
- package/lib/util.js.map +0 -1
- package/lib-esm/.tsbuildinfo +0 -3
- package/lib-esm/authModeStrategies/defaultAuthStrategy.js.map +0 -1
- package/lib-esm/authModeStrategies/index.js.map +0 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +0 -1
- package/lib-esm/datastore/datastore.js.map +0 -1
- package/lib-esm/index.js.map +0 -1
- package/lib-esm/predicates/index.js.map +0 -1
- package/lib-esm/predicates/next.js.map +0 -1
- package/lib-esm/predicates/sort.js.map +0 -1
- package/lib-esm/ssr/index.js.map +0 -1
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +0 -1
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +0 -1
- package/lib-esm/storage/adapter/InMemoryStore.js.map +0 -1
- package/lib-esm/storage/adapter/InMemoryStore.native.js.map +0 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +0 -1
- package/lib-esm/storage/adapter/StorageAdapterBase.js.map +0 -1
- package/lib-esm/storage/adapter/getDefaultAdapter/index.js.map +0 -1
- package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js.map +0 -1
- package/lib-esm/storage/adapter/index.js.map +0 -1
- package/lib-esm/storage/relationship.js.map +0 -1
- package/lib-esm/storage/storage.js.map +0 -1
- package/lib-esm/sync/datastoreConnectivity.js.map +0 -1
- package/lib-esm/sync/datastoreReachability/index.js.map +0 -1
- package/lib-esm/sync/datastoreReachability/index.native.js.map +0 -1
- package/lib-esm/sync/index.js.map +0 -1
- package/lib-esm/sync/merger.js.map +0 -1
- package/lib-esm/sync/outbox.js.map +0 -1
- package/lib-esm/sync/processors/errorMaps.js.map +0 -1
- package/lib-esm/sync/processors/mutation.js.map +0 -1
- package/lib-esm/sync/processors/subscription.js.map +0 -1
- package/lib-esm/sync/processors/sync.js.map +0 -1
- package/lib-esm/sync/utils.js.map +0 -1
- package/lib-esm/types.js.map +0 -1
- package/lib-esm/util.js.map +0 -1
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var StorageAdapterBase = /** @class */ (function () {
|
|
14
|
-
function StorageAdapterBase() {
|
|
3
|
+
exports.StorageAdapterBase = void 0;
|
|
4
|
+
const predicates_1 = require("../../predicates");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const util_1 = require("../../util");
|
|
7
|
+
const relationship_1 = require("../relationship");
|
|
8
|
+
const core_1 = require("@aws-amplify/core");
|
|
9
|
+
const logger = new core_1.ConsoleLogger('DataStore');
|
|
10
|
+
const DB_NAME = 'amplify-datastore';
|
|
11
|
+
class StorageAdapterBase {
|
|
12
|
+
constructor() {
|
|
15
13
|
this.dbName = DB_NAME;
|
|
16
14
|
}
|
|
17
15
|
/**
|
|
@@ -23,117 +21,97 @@ var StorageAdapterBase = /** @class */ (function () {
|
|
|
23
21
|
* @param getModelConstructorByModelName
|
|
24
22
|
* @param sessionId
|
|
25
23
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
case 0: return [4 /*yield*/, this.preSetUpChecks()];
|
|
33
|
-
case 1:
|
|
34
|
-
_b.sent();
|
|
35
|
-
if (!!this.initPromise) return [3 /*break*/, 2];
|
|
36
|
-
this.initPromise = new Promise(function (res, rej) {
|
|
37
|
-
_this.resolve = res;
|
|
38
|
-
_this.reject = rej;
|
|
39
|
-
});
|
|
40
|
-
return [3 /*break*/, 4];
|
|
41
|
-
case 2: return [4 /*yield*/, this.initPromise];
|
|
42
|
-
case 3:
|
|
43
|
-
_b.sent();
|
|
44
|
-
return [2 /*return*/];
|
|
45
|
-
case 4:
|
|
46
|
-
if (sessionId) {
|
|
47
|
-
this.dbName = DB_NAME + "-" + sessionId;
|
|
48
|
-
}
|
|
49
|
-
this.schema = theSchema;
|
|
50
|
-
this.namespaceResolver = namespaceResolver;
|
|
51
|
-
this.modelInstanceCreator = modelInstanceCreator;
|
|
52
|
-
this.getModelConstructorByModelName = getModelConstructorByModelName;
|
|
53
|
-
_b.label = 5;
|
|
54
|
-
case 5:
|
|
55
|
-
_b.trys.push([5, 8, , 9]);
|
|
56
|
-
if (!!this.db) return [3 /*break*/, 7];
|
|
57
|
-
_a = this;
|
|
58
|
-
return [4 /*yield*/, this.initDb()];
|
|
59
|
-
case 6:
|
|
60
|
-
_a.db = _b.sent();
|
|
61
|
-
this.resolve();
|
|
62
|
-
_b.label = 7;
|
|
63
|
-
case 7: return [3 /*break*/, 9];
|
|
64
|
-
case 8:
|
|
65
|
-
error_1 = _b.sent();
|
|
66
|
-
this.reject(error_1);
|
|
67
|
-
return [3 /*break*/, 9];
|
|
68
|
-
case 9: return [2 /*return*/];
|
|
69
|
-
}
|
|
24
|
+
async setUp(theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName, sessionId) {
|
|
25
|
+
await this.preSetUpChecks();
|
|
26
|
+
if (!this.initPromise) {
|
|
27
|
+
this.initPromise = new Promise((res, rej) => {
|
|
28
|
+
this.resolve = res;
|
|
29
|
+
this.reject = rej;
|
|
70
30
|
});
|
|
71
|
-
}
|
|
72
|
-
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
await this.initPromise;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (sessionId) {
|
|
37
|
+
this.dbName = `${DB_NAME}-${sessionId}`;
|
|
38
|
+
}
|
|
39
|
+
this.schema = theSchema;
|
|
40
|
+
this.namespaceResolver = namespaceResolver;
|
|
41
|
+
this.modelInstanceCreator = modelInstanceCreator;
|
|
42
|
+
this.getModelConstructorByModelName = getModelConstructorByModelName;
|
|
43
|
+
try {
|
|
44
|
+
if (!this.db) {
|
|
45
|
+
this.db = await this.initDb();
|
|
46
|
+
this.resolve();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.reject(error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
73
53
|
/**
|
|
74
54
|
* @param modelConstructor
|
|
75
55
|
* @returns local DB table name
|
|
76
56
|
*/
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return util_1.getStorename(namespace, modelName);
|
|
81
|
-
}
|
|
57
|
+
getStorenameForModel(modelConstructor) {
|
|
58
|
+
const namespace = this.namespaceResolver(modelConstructor);
|
|
59
|
+
const { name: modelName } = modelConstructor;
|
|
60
|
+
return (0, util_1.getStorename)(namespace, modelName);
|
|
61
|
+
}
|
|
82
62
|
/**
|
|
83
63
|
*
|
|
84
64
|
* @param model - instantiated model record
|
|
85
65
|
* @returns the record's primary key values
|
|
86
66
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
67
|
+
getIndexKeyValuesFromModel(model) {
|
|
68
|
+
const modelConstructor = Object.getPrototypeOf(model)
|
|
89
69
|
.constructor;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return util_1.extractPrimaryKeyValues(model, keys);
|
|
93
|
-
}
|
|
70
|
+
const namespaceName = this.namespaceResolver(modelConstructor);
|
|
71
|
+
const keys = (0, util_1.getIndexKeys)(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
72
|
+
return (0, util_1.extractPrimaryKeyValues)(model, keys);
|
|
73
|
+
}
|
|
94
74
|
/**
|
|
95
75
|
* Common metadata for `save` operation
|
|
96
76
|
* used by individual storage adapters
|
|
97
77
|
*
|
|
98
78
|
* @param model
|
|
99
79
|
*/
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
var modelConstructor = Object.getPrototypeOf(model)
|
|
80
|
+
saveMetadata(model) {
|
|
81
|
+
const modelConstructor = Object.getPrototypeOf(model)
|
|
103
82
|
.constructor;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
var storeName = util_1.getStorename(namespaceName, modelName);
|
|
83
|
+
const storeName = this.getStorenameForModel(modelConstructor);
|
|
84
|
+
const namespaceName = this.namespaceResolver(modelConstructor);
|
|
85
|
+
const connectedModels = (0, util_1.traverseModel)(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
86
|
+
const set = new Set();
|
|
87
|
+
const connectionStoreNames = Object.values(connectedModels).map(({ modelName, item, instance }) => {
|
|
88
|
+
const storeName = (0, util_1.getStorename)(namespaceName, modelName);
|
|
111
89
|
set.add(storeName);
|
|
112
|
-
|
|
113
|
-
return { storeName
|
|
90
|
+
const keys = (0, util_1.getIndexKeys)(this.schema.namespaces[namespaceName], modelName);
|
|
91
|
+
return { storeName, item, instance, keys };
|
|
114
92
|
});
|
|
115
|
-
|
|
116
|
-
return { storeName
|
|
117
|
-
}
|
|
93
|
+
const modelKeyValues = this.getIndexKeyValuesFromModel(model);
|
|
94
|
+
return { storeName, set, connectionStoreNames, modelKeyValues };
|
|
95
|
+
}
|
|
118
96
|
/**
|
|
119
97
|
* Enforces conditional save. Throws if condition is not met.
|
|
120
98
|
* used by individual storage adapters
|
|
121
99
|
*
|
|
122
100
|
* @param model
|
|
123
101
|
*/
|
|
124
|
-
|
|
102
|
+
validateSaveCondition(condition, fromDB) {
|
|
125
103
|
if (!(condition && fromDB)) {
|
|
126
104
|
return;
|
|
127
105
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
106
|
+
const predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
|
|
107
|
+
const { predicates: predicateObjs, type } = predicates;
|
|
108
|
+
const isValid = (0, util_1.validatePredicate)(fromDB, type, predicateObjs);
|
|
131
109
|
if (!isValid) {
|
|
132
|
-
|
|
110
|
+
const msg = 'Conditional update failed';
|
|
133
111
|
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
134
112
|
throw new Error(msg);
|
|
135
113
|
}
|
|
136
|
-
}
|
|
114
|
+
}
|
|
137
115
|
/**
|
|
138
116
|
* Instantiate models from POJO records returned from the database
|
|
139
117
|
*
|
|
@@ -142,29 +120,18 @@ var StorageAdapterBase = /** @class */ (function () {
|
|
|
142
120
|
* @param records - array of uninstantiated records
|
|
143
121
|
* @returns
|
|
144
122
|
*/
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return
|
|
150
|
-
namespace = this.schema.namespaces[namespaceName];
|
|
151
|
-
relations = namespace.relationships[srcModelName].relationTypes;
|
|
152
|
-
connectionStoreNames = relations.map(function (_a) {
|
|
153
|
-
var modelName = _a.modelName;
|
|
154
|
-
return util_1.getStorename(namespaceName, modelName);
|
|
155
|
-
});
|
|
156
|
-
modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
|
|
157
|
-
if (connectionStoreNames.length === 0) {
|
|
158
|
-
return [2 /*return*/, records.map(function (record) {
|
|
159
|
-
return _this.modelInstanceCreator(modelConstructor, record);
|
|
160
|
-
})];
|
|
161
|
-
}
|
|
162
|
-
return [2 /*return*/, records.map(function (record) {
|
|
163
|
-
return _this.modelInstanceCreator(modelConstructor, record);
|
|
164
|
-
})];
|
|
165
|
-
});
|
|
123
|
+
async load(namespaceName, srcModelName, records) {
|
|
124
|
+
const namespace = this.schema.namespaces[namespaceName];
|
|
125
|
+
const relations = namespace.relationships[srcModelName].relationTypes;
|
|
126
|
+
const connectionStoreNames = relations.map(({ modelName }) => {
|
|
127
|
+
return (0, util_1.getStorename)(namespaceName, modelName);
|
|
166
128
|
});
|
|
167
|
-
|
|
129
|
+
const modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);
|
|
130
|
+
if (connectionStoreNames.length === 0) {
|
|
131
|
+
return records.map(record => this.modelInstanceCreator(modelConstructor, record));
|
|
132
|
+
}
|
|
133
|
+
return records.map(record => this.modelInstanceCreator(modelConstructor, record));
|
|
134
|
+
}
|
|
168
135
|
/**
|
|
169
136
|
* Extracts operands from a predicate group into an array of key values
|
|
170
137
|
* Used in the query method
|
|
@@ -182,40 +149,25 @@ var StorageAdapterBase = /** @class */ (function () {
|
|
|
182
149
|
* ['abc', 'def']
|
|
183
150
|
* ```
|
|
184
151
|
*/
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
var predicateObjs = predicates.predicates;
|
|
152
|
+
keyValueFromPredicate(predicates, keyPath) {
|
|
153
|
+
const { predicates: predicateObjs } = predicates;
|
|
188
154
|
if (predicateObjs.length !== keyPath.length) {
|
|
189
155
|
return;
|
|
190
156
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
});
|
|
157
|
+
const keyValues = [];
|
|
158
|
+
for (const key of keyPath) {
|
|
159
|
+
const predicateObj = predicateObjs.find(p =>
|
|
160
|
+
// it's a relevant predicate object only if it's an equality
|
|
161
|
+
// operation for a key field from the key:
|
|
162
|
+
(0, types_1.isPredicateObj)(p) &&
|
|
163
|
+
p.field === key &&
|
|
164
|
+
p.operator === 'eq' &&
|
|
165
|
+
p.operand !== null &&
|
|
166
|
+
p.operand !== undefined);
|
|
202
167
|
predicateObj && keyValues.push(predicateObj.operand);
|
|
203
|
-
};
|
|
204
|
-
try {
|
|
205
|
-
for (var keyPath_1 = tslib_1.__values(keyPath), keyPath_1_1 = keyPath_1.next(); !keyPath_1_1.done; keyPath_1_1 = keyPath_1.next()) {
|
|
206
|
-
var key = keyPath_1_1.value;
|
|
207
|
-
_loop_1(key);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
211
|
-
finally {
|
|
212
|
-
try {
|
|
213
|
-
if (keyPath_1_1 && !keyPath_1_1.done && (_a = keyPath_1.return)) _a.call(keyPath_1);
|
|
214
|
-
}
|
|
215
|
-
finally { if (e_1) throw e_1.error; }
|
|
216
168
|
}
|
|
217
169
|
return keyValues.length === keyPath.length ? keyValues : undefined;
|
|
218
|
-
}
|
|
170
|
+
}
|
|
219
171
|
/**
|
|
220
172
|
* Common metadata for `query` operation
|
|
221
173
|
* used by individual storage adapters
|
|
@@ -224,23 +176,23 @@ var StorageAdapterBase = /** @class */ (function () {
|
|
|
224
176
|
* @param predicate
|
|
225
177
|
* @param pagination
|
|
226
178
|
*/
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
179
|
+
queryMetadata(modelConstructor, predicate, pagination) {
|
|
180
|
+
const storeName = this.getStorenameForModel(modelConstructor);
|
|
181
|
+
const namespaceName = this.namespaceResolver(modelConstructor);
|
|
182
|
+
const predicates = predicate && predicates_1.ModelPredicateCreator.getPredicates(predicate);
|
|
183
|
+
const keyPath = (0, util_1.getIndexKeys)(this.schema.namespaces[namespaceName], modelConstructor.name);
|
|
184
|
+
const queryByKey = predicates && this.keyValueFromPredicate(predicates, keyPath);
|
|
185
|
+
const hasSort = pagination && pagination.sort;
|
|
186
|
+
const hasPagination = pagination && pagination.limit;
|
|
235
187
|
return {
|
|
236
|
-
storeName
|
|
237
|
-
namespaceName
|
|
238
|
-
queryByKey
|
|
239
|
-
predicates
|
|
240
|
-
hasSort
|
|
241
|
-
hasPagination
|
|
188
|
+
storeName,
|
|
189
|
+
namespaceName,
|
|
190
|
+
queryByKey,
|
|
191
|
+
predicates,
|
|
192
|
+
hasSort,
|
|
193
|
+
hasPagination,
|
|
242
194
|
};
|
|
243
|
-
}
|
|
195
|
+
}
|
|
244
196
|
/**
|
|
245
197
|
* Delete record
|
|
246
198
|
* Cascades to related records (for Has One and Has Many relationships)
|
|
@@ -249,90 +201,58 @@ var StorageAdapterBase = /** @class */ (function () {
|
|
|
249
201
|
* @param condition
|
|
250
202
|
* @returns
|
|
251
203
|
*/
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
286
|
-
var items = _a.items;
|
|
287
|
-
return acc.concat(items);
|
|
288
|
-
}, []);
|
|
289
|
-
return [2 /*return*/, [models, deletedModels]];
|
|
290
|
-
case 8: return [3 /*break*/, 16];
|
|
291
|
-
case 9:
|
|
292
|
-
model = modelOrModelConstructor;
|
|
293
|
-
modelConstructor = Object.getPrototypeOf(model)
|
|
294
|
-
.constructor;
|
|
295
|
-
namespaceName = this.namespaceResolver(modelConstructor);
|
|
296
|
-
storeName = this.getStorenameForModel(modelConstructor);
|
|
297
|
-
if (!condition) return [3 /*break*/, 12];
|
|
298
|
-
keyValues = this.getIndexKeyValuesFromModel(model);
|
|
299
|
-
return [4 /*yield*/, this._get(storeName, keyValues)];
|
|
300
|
-
case 10:
|
|
301
|
-
fromDB = _b.sent();
|
|
302
|
-
if (fromDB === undefined) {
|
|
303
|
-
msg = 'Model instance not found in storage';
|
|
304
|
-
logger.warn(msg, { model: model });
|
|
305
|
-
return [2 /*return*/, [[model], []]];
|
|
306
|
-
}
|
|
307
|
-
predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
|
|
308
|
-
_a = predicates, predicateObjs = _a.predicates, type = _a.type;
|
|
309
|
-
isValid = util_1.validatePredicate(fromDB, type, predicateObjs);
|
|
310
|
-
if (!isValid) {
|
|
311
|
-
msg = 'Conditional update failed';
|
|
312
|
-
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
313
|
-
throw new Error(msg);
|
|
314
|
-
}
|
|
315
|
-
return [4 /*yield*/, this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue)];
|
|
316
|
-
case 11:
|
|
317
|
-
_b.sent();
|
|
318
|
-
return [3 /*break*/, 14];
|
|
319
|
-
case 12: return [4 /*yield*/, this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue)];
|
|
320
|
-
case 13:
|
|
321
|
-
_b.sent();
|
|
322
|
-
_b.label = 14;
|
|
323
|
-
case 14: return [4 /*yield*/, this.deleteItem(deleteQueue)];
|
|
324
|
-
case 15:
|
|
325
|
-
_b.sent();
|
|
326
|
-
deletedModels = deleteQueue.reduce(function (acc, _a) {
|
|
327
|
-
var items = _a.items;
|
|
328
|
-
return acc.concat(items);
|
|
329
|
-
}, []);
|
|
330
|
-
return [2 /*return*/, [[model], deletedModels]];
|
|
331
|
-
case 16: return [2 /*return*/];
|
|
204
|
+
async delete(modelOrModelConstructor, condition) {
|
|
205
|
+
await this.preOpCheck();
|
|
206
|
+
const deleteQueue = [];
|
|
207
|
+
if ((0, util_1.isModelConstructor)(modelOrModelConstructor)) {
|
|
208
|
+
const modelConstructor = modelOrModelConstructor;
|
|
209
|
+
const namespace = this.namespaceResolver(modelConstructor);
|
|
210
|
+
const models = await this.query(modelConstructor, condition);
|
|
211
|
+
if (condition !== undefined) {
|
|
212
|
+
await this.deleteTraverse(models, modelConstructor, namespace, deleteQueue);
|
|
213
|
+
await this.deleteItem(deleteQueue);
|
|
214
|
+
const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);
|
|
215
|
+
return [models, deletedModels];
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
await this.deleteTraverse(models, modelConstructor, namespace, deleteQueue);
|
|
219
|
+
await this.deleteItem(deleteQueue);
|
|
220
|
+
const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);
|
|
221
|
+
return [models, deletedModels];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const model = modelOrModelConstructor;
|
|
226
|
+
const modelConstructor = Object.getPrototypeOf(model)
|
|
227
|
+
.constructor;
|
|
228
|
+
const namespaceName = this.namespaceResolver(modelConstructor);
|
|
229
|
+
const storeName = this.getStorenameForModel(modelConstructor);
|
|
230
|
+
if (condition) {
|
|
231
|
+
const keyValues = this.getIndexKeyValuesFromModel(model);
|
|
232
|
+
const fromDB = await this._get(storeName, keyValues);
|
|
233
|
+
if (fromDB === undefined) {
|
|
234
|
+
const msg = 'Model instance not found in storage';
|
|
235
|
+
logger.warn(msg, { model });
|
|
236
|
+
return [[model], []];
|
|
332
237
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
238
|
+
const predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
|
|
239
|
+
const { predicates: predicateObjs, type } = predicates;
|
|
240
|
+
const isValid = (0, util_1.validatePredicate)(fromDB, type, predicateObjs);
|
|
241
|
+
if (!isValid) {
|
|
242
|
+
const msg = 'Conditional update failed';
|
|
243
|
+
logger.error(msg, { model: fromDB, condition: predicateObjs });
|
|
244
|
+
throw new Error(msg);
|
|
245
|
+
}
|
|
246
|
+
await this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
await this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue);
|
|
250
|
+
}
|
|
251
|
+
await this.deleteItem(deleteQueue);
|
|
252
|
+
const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);
|
|
253
|
+
return [[model], deletedModels];
|
|
254
|
+
}
|
|
255
|
+
}
|
|
336
256
|
/**
|
|
337
257
|
* Recursively traverse relationship graph and add
|
|
338
258
|
* all Has One and Has Many relations to `deleteQueue` param
|
|
@@ -344,98 +264,28 @@ var StorageAdapterBase = /** @class */ (function () {
|
|
|
344
264
|
* @param namespace
|
|
345
265
|
* @param deleteQueue
|
|
346
266
|
*/
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
case 3:
|
|
363
|
-
if (!(models_1_1 = _c.sent(), !models_1_1.done)) return [3 /*break*/, 18];
|
|
364
|
-
model = models_1_1.value;
|
|
365
|
-
modelDefinition = this.schema.namespaces[namespace].models[modelConstructor.name];
|
|
366
|
-
modelMeta = {
|
|
367
|
-
builder: modelConstructor,
|
|
368
|
-
schema: modelDefinition,
|
|
369
|
-
pkField: util_1.extractPrimaryKeyFieldNames(modelDefinition),
|
|
370
|
-
};
|
|
371
|
-
relationships = relationship_1.ModelRelationship.allFrom(modelMeta).filter(function (r) {
|
|
372
|
-
return cascadingRelationTypes.includes(r.type);
|
|
373
|
-
});
|
|
374
|
-
_c.label = 4;
|
|
375
|
-
case 4:
|
|
376
|
-
_c.trys.push([4, 11, 12, 17]);
|
|
377
|
-
relationships_1 = tslib_1.__asyncValues(relationships);
|
|
378
|
-
_c.label = 5;
|
|
379
|
-
case 5: return [4 /*yield*/, relationships_1.next()];
|
|
380
|
-
case 6:
|
|
381
|
-
if (!(relationships_1_1 = _c.sent(), !relationships_1_1.done)) return [3 /*break*/, 10];
|
|
382
|
-
r = relationships_1_1.value;
|
|
383
|
-
queryObject = r.createRemoteQueryObject(model);
|
|
384
|
-
if (!(queryObject !== null)) return [3 /*break*/, 9];
|
|
385
|
-
return [4 /*yield*/, this.query(r.remoteModelConstructor, predicates_1.ModelPredicateCreator.createFromFlatEqualities(r.remoteDefinition, queryObject))];
|
|
386
|
-
case 7:
|
|
387
|
-
relatedRecords = _c.sent();
|
|
388
|
-
return [4 /*yield*/, this.deleteTraverse(relatedRecords, r.remoteModelConstructor, namespace, deleteQueue)];
|
|
389
|
-
case 8:
|
|
390
|
-
_c.sent();
|
|
391
|
-
_c.label = 9;
|
|
392
|
-
case 9: return [3 /*break*/, 5];
|
|
393
|
-
case 10: return [3 /*break*/, 17];
|
|
394
|
-
case 11:
|
|
395
|
-
e_3_1 = _c.sent();
|
|
396
|
-
e_3 = { error: e_3_1 };
|
|
397
|
-
return [3 /*break*/, 17];
|
|
398
|
-
case 12:
|
|
399
|
-
_c.trys.push([12, , 15, 16]);
|
|
400
|
-
if (!(relationships_1_1 && !relationships_1_1.done && (_b = relationships_1.return))) return [3 /*break*/, 14];
|
|
401
|
-
return [4 /*yield*/, _b.call(relationships_1)];
|
|
402
|
-
case 13:
|
|
403
|
-
_c.sent();
|
|
404
|
-
_c.label = 14;
|
|
405
|
-
case 14: return [3 /*break*/, 16];
|
|
406
|
-
case 15:
|
|
407
|
-
if (e_3) throw e_3.error;
|
|
408
|
-
return [7 /*endfinally*/];
|
|
409
|
-
case 16: return [7 /*endfinally*/];
|
|
410
|
-
case 17: return [3 /*break*/, 2];
|
|
411
|
-
case 18: return [3 /*break*/, 25];
|
|
412
|
-
case 19:
|
|
413
|
-
e_2_1 = _c.sent();
|
|
414
|
-
e_2 = { error: e_2_1 };
|
|
415
|
-
return [3 /*break*/, 25];
|
|
416
|
-
case 20:
|
|
417
|
-
_c.trys.push([20, , 23, 24]);
|
|
418
|
-
if (!(models_1_1 && !models_1_1.done && (_a = models_1.return))) return [3 /*break*/, 22];
|
|
419
|
-
return [4 /*yield*/, _a.call(models_1)];
|
|
420
|
-
case 21:
|
|
421
|
-
_c.sent();
|
|
422
|
-
_c.label = 22;
|
|
423
|
-
case 22: return [3 /*break*/, 24];
|
|
424
|
-
case 23:
|
|
425
|
-
if (e_2) throw e_2.error;
|
|
426
|
-
return [7 /*endfinally*/];
|
|
427
|
-
case 24: return [7 /*endfinally*/];
|
|
428
|
-
case 25:
|
|
429
|
-
deleteQueue.push({
|
|
430
|
-
storeName: util_1.getStorename(namespace, modelConstructor.name),
|
|
431
|
-
items: models,
|
|
432
|
-
});
|
|
433
|
-
return [2 /*return*/];
|
|
267
|
+
async deleteTraverse(models, modelConstructor, namespace, deleteQueue) {
|
|
268
|
+
const cascadingRelationTypes = ['HAS_ONE', 'HAS_MANY'];
|
|
269
|
+
for await (const model of models) {
|
|
270
|
+
const modelDefinition = this.schema.namespaces[namespace].models[modelConstructor.name];
|
|
271
|
+
const modelMeta = {
|
|
272
|
+
builder: modelConstructor,
|
|
273
|
+
schema: modelDefinition,
|
|
274
|
+
pkField: (0, util_1.extractPrimaryKeyFieldNames)(modelDefinition),
|
|
275
|
+
};
|
|
276
|
+
const relationships = relationship_1.ModelRelationship.allFrom(modelMeta).filter(r => cascadingRelationTypes.includes(r.type));
|
|
277
|
+
for await (const r of relationships) {
|
|
278
|
+
const queryObject = r.createRemoteQueryObject(model);
|
|
279
|
+
if (queryObject !== null) {
|
|
280
|
+
const relatedRecords = await this.query(r.remoteModelConstructor, predicates_1.ModelPredicateCreator.createFromFlatEqualities(r.remoteDefinition, queryObject));
|
|
281
|
+
await this.deleteTraverse(relatedRecords, r.remoteModelConstructor, namespace, deleteQueue);
|
|
434
282
|
}
|
|
435
|
-
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
deleteQueue.push({
|
|
286
|
+
storeName: (0, util_1.getStorename)(namespace, modelConstructor.name),
|
|
287
|
+
items: models,
|
|
436
288
|
});
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
}());
|
|
289
|
+
}
|
|
290
|
+
}
|
|
440
291
|
exports.StorageAdapterBase = StorageAdapterBase;
|
|
441
|
-
//# sourceMappingURL=StorageAdapterBase.js.map
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var AsyncStorageAdapter_1 = tslib_1.__importDefault(require("../AsyncStorageAdapter"));
|
|
9
|
-
var getDefaultAdapter = function () {
|
|
10
|
-
var isBrowser = core_1.browserOrNode().isBrowser;
|
|
11
|
-
if ((isBrowser && window.indexedDB) || (core_1.isWebWorker() && self.indexedDB)) {
|
|
6
|
+
const IndexedDBAdapter_1 = __importDefault(require("../IndexedDBAdapter"));
|
|
7
|
+
const AsyncStorageAdapter_1 = __importDefault(require("../AsyncStorageAdapter"));
|
|
8
|
+
const utils_1 = require("@aws-amplify/core/internals/utils");
|
|
9
|
+
const getDefaultAdapter = () => {
|
|
10
|
+
if ((utils_1.isBrowser && window.indexedDB) || ((0, utils_1.isWebWorker)() && self.indexedDB)) {
|
|
12
11
|
return IndexedDBAdapter_1.default;
|
|
13
12
|
}
|
|
14
13
|
return AsyncStorageAdapter_1.default;
|
|
15
14
|
};
|
|
16
15
|
exports.default = getDefaultAdapter;
|
|
17
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var getDefaultAdapter = function () {
|
|
6
|
+
const AsyncStorageAdapter_1 = __importDefault(require("../AsyncStorageAdapter"));
|
|
7
|
+
const getDefaultAdapter = () => {
|
|
6
8
|
return AsyncStorageAdapter_1.default;
|
|
7
9
|
};
|
|
8
10
|
exports.default = getDefaultAdapter;
|
|
9
|
-
//# sourceMappingURL=index.native.js.map
|