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