@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.
Files changed (187) hide show
  1. package/README.md +4 -0
  2. package/lib/authModeStrategies/defaultAuthStrategy.js +3 -2
  3. package/lib/authModeStrategies/index.js +3 -3
  4. package/lib/authModeStrategies/multiAuthStrategy.js +38 -53
  5. package/lib/datastore/datastore.d.ts +4 -5
  6. package/lib/datastore/datastore.js +929 -1284
  7. package/lib/index.d.ts +1 -1
  8. package/lib/index.js +26 -13
  9. package/lib/predicates/index.js +54 -69
  10. package/lib/predicates/next.d.ts +2 -2
  11. package/lib/predicates/next.js +313 -462
  12. package/lib/predicates/sort.js +24 -28
  13. package/lib/ssr/index.js +2 -2
  14. package/lib/storage/adapter/AsyncStorageAdapter.js +120 -342
  15. package/lib/storage/adapter/AsyncStorageDatabase.js +217 -421
  16. package/lib/storage/adapter/InMemoryStore.js +28 -51
  17. package/lib/storage/adapter/InMemoryStore.native.js +5 -3
  18. package/lib/storage/adapter/IndexedDBAdapter.js +466 -871
  19. package/lib/storage/adapter/StorageAdapterBase.js +180 -330
  20. package/lib/storage/adapter/getDefaultAdapter/index.js +8 -10
  21. package/lib/storage/adapter/getDefaultAdapter/index.native.js +5 -4
  22. package/lib/storage/adapter/index.js +0 -1
  23. package/lib/storage/relationship.js +177 -253
  24. package/lib/storage/storage.d.ts +4 -4
  25. package/lib/storage/storage.js +255 -433
  26. package/lib/sync/datastoreConnectivity.d.ts +2 -2
  27. package/lib/sync/datastoreConnectivity.js +29 -39
  28. package/lib/sync/datastoreReachability/index.d.ts +1 -3
  29. package/lib/sync/datastoreReachability/index.js +3 -3
  30. package/lib/sync/datastoreReachability/index.native.d.ts +1 -3
  31. package/lib/sync/datastoreReachability/index.native.js +4 -5
  32. package/lib/sync/index.d.ts +2 -2
  33. package/lib/sync/index.js +522 -827
  34. package/lib/sync/merger.js +31 -63
  35. package/lib/sync/outbox.js +148 -232
  36. package/lib/sync/processors/errorMaps.d.ts +1 -1
  37. package/lib/sync/processors/errorMaps.js +30 -47
  38. package/lib/sync/processors/mutation.d.ts +2 -2
  39. package/lib/sync/processors/mutation.js +343 -502
  40. package/lib/sync/processors/subscription.d.ts +5 -2
  41. package/lib/sync/processors/subscription.js +283 -437
  42. package/lib/sync/processors/sync.d.ts +2 -2
  43. package/lib/sync/processors/sync.js +279 -404
  44. package/lib/sync/utils.d.ts +5 -4
  45. package/lib/sync/utils.js +267 -320
  46. package/lib/tsconfig.tsbuildinfo +1 -0
  47. package/lib/types.d.ts +138 -140
  48. package/lib/types.js +17 -24
  49. package/lib/util.d.ts +9 -17
  50. package/lib/util.js +387 -511
  51. package/lib-esm/authModeStrategies/defaultAuthStrategy.js +1 -2
  52. package/lib-esm/authModeStrategies/index.js +0 -1
  53. package/lib-esm/authModeStrategies/multiAuthStrategy.js +35 -52
  54. package/lib-esm/datastore/datastore.d.ts +4 -5
  55. package/lib-esm/datastore/datastore.js +888 -1247
  56. package/lib-esm/index.d.ts +1 -1
  57. package/lib-esm/index.js +6 -7
  58. package/lib-esm/predicates/index.js +53 -70
  59. package/lib-esm/predicates/next.d.ts +2 -2
  60. package/lib-esm/predicates/next.js +306 -459
  61. package/lib-esm/predicates/sort.js +23 -28
  62. package/lib-esm/ssr/index.js +1 -2
  63. package/lib-esm/storage/adapter/AsyncStorageAdapter.js +111 -338
  64. package/lib-esm/storage/adapter/AsyncStorageDatabase.js +212 -416
  65. package/lib-esm/storage/adapter/InMemoryStore.js +27 -52
  66. package/lib-esm/storage/adapter/InMemoryStore.native.js +0 -1
  67. package/lib-esm/storage/adapter/IndexedDBAdapter.js +438 -866
  68. package/lib-esm/storage/adapter/StorageAdapterBase.js +173 -325
  69. package/lib-esm/storage/adapter/getDefaultAdapter/index.js +2 -6
  70. package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js +1 -2
  71. package/lib-esm/storage/adapter/index.js +1 -1
  72. package/lib-esm/storage/relationship.js +173 -251
  73. package/lib-esm/storage/storage.d.ts +4 -4
  74. package/lib-esm/storage/storage.js +242 -424
  75. package/lib-esm/sync/datastoreConnectivity.d.ts +2 -2
  76. package/lib-esm/sync/datastoreConnectivity.js +28 -39
  77. package/lib-esm/sync/datastoreReachability/index.d.ts +1 -3
  78. package/lib-esm/sync/datastoreReachability/index.js +2 -3
  79. package/lib-esm/sync/datastoreReachability/index.native.d.ts +1 -3
  80. package/lib-esm/sync/datastoreReachability/index.native.js +3 -4
  81. package/lib-esm/sync/index.d.ts +2 -2
  82. package/lib-esm/sync/index.js +502 -812
  83. package/lib-esm/sync/merger.js +28 -61
  84. package/lib-esm/sync/outbox.js +143 -228
  85. package/lib-esm/sync/processors/errorMaps.d.ts +1 -1
  86. package/lib-esm/sync/processors/errorMaps.js +32 -50
  87. package/lib-esm/sync/processors/mutation.d.ts +2 -2
  88. package/lib-esm/sync/processors/mutation.js +329 -490
  89. package/lib-esm/sync/processors/subscription.d.ts +5 -2
  90. package/lib-esm/sync/processors/subscription.js +266 -421
  91. package/lib-esm/sync/processors/sync.d.ts +2 -2
  92. package/lib-esm/sync/processors/sync.js +271 -397
  93. package/lib-esm/sync/utils.d.ts +5 -4
  94. package/lib-esm/sync/utils.js +252 -307
  95. package/lib-esm/tsconfig.tsbuildinfo +1 -0
  96. package/lib-esm/types.d.ts +138 -140
  97. package/lib-esm/types.js +16 -25
  98. package/lib-esm/util.d.ts +9 -17
  99. package/lib-esm/util.js +335 -497
  100. package/package.json +31 -26
  101. package/src/authModeStrategies/multiAuthStrategy.ts +15 -12
  102. package/src/datastore/datastore.ts +36 -35
  103. package/src/predicates/sort.ts +3 -1
  104. package/src/storage/adapter/InMemoryStore.ts +1 -1
  105. package/src/storage/adapter/IndexedDBAdapter.ts +2 -2
  106. package/src/storage/adapter/StorageAdapterBase.ts +2 -2
  107. package/src/storage/adapter/getDefaultAdapter/index.ts +1 -4
  108. package/src/storage/storage.ts +29 -24
  109. package/src/sync/datastoreConnectivity.ts +6 -6
  110. package/src/sync/datastoreReachability/index.native.ts +5 -3
  111. package/src/sync/datastoreReachability/index.ts +1 -1
  112. package/src/sync/index.ts +79 -89
  113. package/src/sync/processors/errorMaps.ts +7 -7
  114. package/src/sync/processors/mutation.ts +19 -13
  115. package/src/sync/processors/subscription.ts +221 -295
  116. package/src/sync/processors/sync.ts +11 -8
  117. package/src/sync/utils.ts +30 -15
  118. package/src/types.ts +4 -8
  119. package/src/util.ts +46 -9
  120. package/lib/.tsbuildinfo +0 -3
  121. package/lib/authModeStrategies/defaultAuthStrategy.js.map +0 -1
  122. package/lib/authModeStrategies/index.js.map +0 -1
  123. package/lib/authModeStrategies/multiAuthStrategy.js.map +0 -1
  124. package/lib/datastore/datastore.js.map +0 -1
  125. package/lib/index.js.map +0 -1
  126. package/lib/predicates/index.js.map +0 -1
  127. package/lib/predicates/next.js.map +0 -1
  128. package/lib/predicates/sort.js.map +0 -1
  129. package/lib/ssr/index.js.map +0 -1
  130. package/lib/storage/adapter/AsyncStorageAdapter.js.map +0 -1
  131. package/lib/storage/adapter/AsyncStorageDatabase.js.map +0 -1
  132. package/lib/storage/adapter/InMemoryStore.js.map +0 -1
  133. package/lib/storage/adapter/InMemoryStore.native.js.map +0 -1
  134. package/lib/storage/adapter/IndexedDBAdapter.js.map +0 -1
  135. package/lib/storage/adapter/StorageAdapterBase.js.map +0 -1
  136. package/lib/storage/adapter/getDefaultAdapter/index.js.map +0 -1
  137. package/lib/storage/adapter/getDefaultAdapter/index.native.js.map +0 -1
  138. package/lib/storage/adapter/index.js.map +0 -1
  139. package/lib/storage/relationship.js.map +0 -1
  140. package/lib/storage/storage.js.map +0 -1
  141. package/lib/sync/datastoreConnectivity.js.map +0 -1
  142. package/lib/sync/datastoreReachability/index.js.map +0 -1
  143. package/lib/sync/datastoreReachability/index.native.js.map +0 -1
  144. package/lib/sync/index.js.map +0 -1
  145. package/lib/sync/merger.js.map +0 -1
  146. package/lib/sync/outbox.js.map +0 -1
  147. package/lib/sync/processors/errorMaps.js.map +0 -1
  148. package/lib/sync/processors/mutation.js.map +0 -1
  149. package/lib/sync/processors/subscription.js.map +0 -1
  150. package/lib/sync/processors/sync.js.map +0 -1
  151. package/lib/sync/utils.js.map +0 -1
  152. package/lib/types.js.map +0 -1
  153. package/lib/util.js.map +0 -1
  154. package/lib-esm/.tsbuildinfo +0 -3
  155. package/lib-esm/authModeStrategies/defaultAuthStrategy.js.map +0 -1
  156. package/lib-esm/authModeStrategies/index.js.map +0 -1
  157. package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +0 -1
  158. package/lib-esm/datastore/datastore.js.map +0 -1
  159. package/lib-esm/index.js.map +0 -1
  160. package/lib-esm/predicates/index.js.map +0 -1
  161. package/lib-esm/predicates/next.js.map +0 -1
  162. package/lib-esm/predicates/sort.js.map +0 -1
  163. package/lib-esm/ssr/index.js.map +0 -1
  164. package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +0 -1
  165. package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +0 -1
  166. package/lib-esm/storage/adapter/InMemoryStore.js.map +0 -1
  167. package/lib-esm/storage/adapter/InMemoryStore.native.js.map +0 -1
  168. package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +0 -1
  169. package/lib-esm/storage/adapter/StorageAdapterBase.js.map +0 -1
  170. package/lib-esm/storage/adapter/getDefaultAdapter/index.js.map +0 -1
  171. package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js.map +0 -1
  172. package/lib-esm/storage/adapter/index.js.map +0 -1
  173. package/lib-esm/storage/relationship.js.map +0 -1
  174. package/lib-esm/storage/storage.js.map +0 -1
  175. package/lib-esm/sync/datastoreConnectivity.js.map +0 -1
  176. package/lib-esm/sync/datastoreReachability/index.js.map +0 -1
  177. package/lib-esm/sync/datastoreReachability/index.native.js.map +0 -1
  178. package/lib-esm/sync/index.js.map +0 -1
  179. package/lib-esm/sync/merger.js.map +0 -1
  180. package/lib-esm/sync/outbox.js.map +0 -1
  181. package/lib-esm/sync/processors/errorMaps.js.map +0 -1
  182. package/lib-esm/sync/processors/mutation.js.map +0 -1
  183. package/lib-esm/sync/processors/subscription.js.map +0 -1
  184. package/lib-esm/sync/processors/sync.js.map +0 -1
  185. package/lib-esm/sync/utils.js.map +0 -1
  186. package/lib-esm/types.js.map +0 -1
  187. 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
- var tslib_1 = require("tslib");
4
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
- // SPDX-License-Identifier: Apache-2.0
6
- var core_1 = require("@aws-amplify/core");
7
- var predicates_1 = require("../../predicates");
8
- var types_1 = require("../../types");
9
- var util_1 = require("../../util");
10
- var relationship_1 = require("../relationship");
11
- var logger = new core_1.ConsoleLogger('DataStore');
12
- var DB_NAME = 'amplify-datastore';
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
- StorageAdapterBase.prototype.setUp = function (theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName, sessionId) {
27
- return tslib_1.__awaiter(this, void 0, void 0, function () {
28
- var _a, error_1;
29
- var _this = this;
30
- return tslib_1.__generator(this, function (_b) {
31
- switch (_b.label) {
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
- StorageAdapterBase.prototype.getStorenameForModel = function (modelConstructor) {
78
- var namespace = this.namespaceResolver(modelConstructor);
79
- var modelName = modelConstructor.name;
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
- StorageAdapterBase.prototype.getIndexKeyValuesFromModel = function (model) {
88
- var modelConstructor = Object.getPrototypeOf(model)
67
+ getIndexKeyValuesFromModel(model) {
68
+ const modelConstructor = Object.getPrototypeOf(model)
89
69
  .constructor;
90
- var namespaceName = this.namespaceResolver(modelConstructor);
91
- var keys = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
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
- StorageAdapterBase.prototype.saveMetadata = function (model) {
101
- var _this = this;
102
- var modelConstructor = Object.getPrototypeOf(model)
80
+ saveMetadata(model) {
81
+ const modelConstructor = Object.getPrototypeOf(model)
103
82
  .constructor;
104
- var storeName = this.getStorenameForModel(modelConstructor);
105
- var namespaceName = this.namespaceResolver(modelConstructor);
106
- var connectedModels = util_1.traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
107
- var set = new Set();
108
- var connectionStoreNames = Object.values(connectedModels).map(function (_a) {
109
- var modelName = _a.modelName, item = _a.item, instance = _a.instance;
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
- var keys = util_1.getIndexKeys(_this.schema.namespaces[namespaceName], modelName);
113
- return { storeName: storeName, item: item, instance: instance, keys: keys };
90
+ const keys = (0, util_1.getIndexKeys)(this.schema.namespaces[namespaceName], modelName);
91
+ return { storeName, item, instance, keys };
114
92
  });
115
- var modelKeyValues = this.getIndexKeyValuesFromModel(model);
116
- return { storeName: storeName, set: set, connectionStoreNames: connectionStoreNames, modelKeyValues: modelKeyValues };
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
- StorageAdapterBase.prototype.validateSaveCondition = function (condition, fromDB) {
102
+ validateSaveCondition(condition, fromDB) {
125
103
  if (!(condition && fromDB)) {
126
104
  return;
127
105
  }
128
- var predicates = predicates_1.ModelPredicateCreator.getPredicates(condition);
129
- var _a = predicates, predicateObjs = _a.predicates, type = _a.type;
130
- var isValid = util_1.validatePredicate(fromDB, type, predicateObjs);
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
- var msg = 'Conditional update failed';
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
- StorageAdapterBase.prototype.load = function (namespaceName, srcModelName, records) {
146
- return tslib_1.__awaiter(this, void 0, void 0, function () {
147
- var namespace, relations, connectionStoreNames, modelConstructor;
148
- var _this = this;
149
- return tslib_1.__generator(this, function (_a) {
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
- StorageAdapterBase.prototype.keyValueFromPredicate = function (predicates, keyPath) {
186
- var e_1, _a;
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
- var keyValues = [];
192
- var _loop_1 = function (key) {
193
- var predicateObj = predicateObjs.find(function (p) {
194
- // it's a relevant predicate object only if it's an equality
195
- // operation for a key field from the key:
196
- return types_1.isPredicateObj(p) &&
197
- p.field === key &&
198
- p.operator === 'eq' &&
199
- p.operand !== null &&
200
- p.operand !== undefined;
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
- StorageAdapterBase.prototype.queryMetadata = function (modelConstructor, predicate, pagination) {
228
- var storeName = this.getStorenameForModel(modelConstructor);
229
- var namespaceName = this.namespaceResolver(modelConstructor);
230
- var predicates = predicate && predicates_1.ModelPredicateCreator.getPredicates(predicate);
231
- var keyPath = util_1.getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);
232
- var queryByKey = predicates && this.keyValueFromPredicate(predicates, keyPath);
233
- var hasSort = pagination && pagination.sort;
234
- var hasPagination = pagination && pagination.limit;
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: storeName,
237
- namespaceName: namespaceName,
238
- queryByKey: queryByKey,
239
- predicates: predicates,
240
- hasSort: hasSort,
241
- hasPagination: 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
- StorageAdapterBase.prototype.delete = function (modelOrModelConstructor, condition) {
253
- return tslib_1.__awaiter(this, void 0, void 0, function () {
254
- var deleteQueue, modelConstructor, namespace, models, deletedModels, deletedModels, model, modelConstructor, namespaceName, storeName, keyValues, fromDB, msg, predicates, _a, predicateObjs, type, isValid, msg, deletedModels;
255
- return tslib_1.__generator(this, function (_b) {
256
- switch (_b.label) {
257
- case 0: return [4 /*yield*/, this.preOpCheck()];
258
- case 1:
259
- _b.sent();
260
- deleteQueue = [];
261
- if (!util_1.isModelConstructor(modelOrModelConstructor)) return [3 /*break*/, 9];
262
- modelConstructor = modelOrModelConstructor;
263
- namespace = this.namespaceResolver(modelConstructor);
264
- return [4 /*yield*/, this.query(modelConstructor, condition)];
265
- case 2:
266
- models = _b.sent();
267
- if (!(condition !== undefined)) return [3 /*break*/, 5];
268
- return [4 /*yield*/, this.deleteTraverse(models, modelConstructor, namespace, deleteQueue)];
269
- case 3:
270
- _b.sent();
271
- return [4 /*yield*/, this.deleteItem(deleteQueue)];
272
- case 4:
273
- _b.sent();
274
- deletedModels = deleteQueue.reduce(function (acc, _a) {
275
- var items = _a.items;
276
- return acc.concat(items);
277
- }, []);
278
- return [2 /*return*/, [models, deletedModels]];
279
- case 5: return [4 /*yield*/, this.deleteTraverse(models, modelConstructor, namespace, deleteQueue)];
280
- case 6:
281
- _b.sent();
282
- return [4 /*yield*/, this.deleteItem(deleteQueue)];
283
- case 7:
284
- _b.sent();
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
- StorageAdapterBase.prototype.deleteTraverse = function (models, modelConstructor, namespace, deleteQueue) {
348
- var models_1, models_1_1;
349
- var e_2, _a, e_3, _b;
350
- return tslib_1.__awaiter(this, void 0, void 0, function () {
351
- var cascadingRelationTypes, model, modelDefinition, modelMeta, relationships, relationships_1, relationships_1_1, r, queryObject, relatedRecords, e_3_1, e_2_1;
352
- return tslib_1.__generator(this, function (_c) {
353
- switch (_c.label) {
354
- case 0:
355
- cascadingRelationTypes = ['HAS_ONE', 'HAS_MANY'];
356
- _c.label = 1;
357
- case 1:
358
- _c.trys.push([1, 19, 20, 25]);
359
- models_1 = tslib_1.__asyncValues(models);
360
- _c.label = 2;
361
- case 2: return [4 /*yield*/, models_1.next()];
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
- return StorageAdapterBase;
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
- var tslib_1 = require("tslib");
4
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
- // SPDX-License-Identifier: Apache-2.0
6
- var core_1 = require("@aws-amplify/core");
7
- var IndexedDBAdapter_1 = tslib_1.__importDefault(require("../IndexedDBAdapter"));
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
- var tslib_1 = require("tslib");
4
- var AsyncStorageAdapter_1 = tslib_1.__importDefault(require("../AsyncStorageAdapter"));
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
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=index.js.map