@aws-amplify/datastore 3.14.4 → 3.14.5-unstable.2
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/CHANGELOG.md +0 -8
- package/lib/authModeStrategies/defaultAuthStrategy.d.ts +2 -0
- package/lib/authModeStrategies/index.d.ts +2 -0
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +13 -0
- package/lib/authModeStrategies/multiAuthStrategy.js +6 -64
- package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib/datastore/datastore.d.ts +207 -0
- package/lib/datastore/datastore.js +703 -297
- package/lib/datastore/datastore.js.map +1 -1
- package/lib/index.d.ts +16 -0
- package/lib/index.js +6 -4
- package/lib/index.js.map +1 -1
- package/lib/predicates/index.d.ts +30 -0
- package/lib/predicates/index.js +127 -6
- package/lib/predicates/index.js.map +1 -1
- package/lib/predicates/next.d.ts +301 -0
- package/lib/predicates/next.js +816 -0
- package/lib/predicates/next.js.map +1 -0
- package/lib/predicates/sort.d.ts +8 -0
- package/lib/predicates/sort.js +10 -4
- package/lib/predicates/sort.js.map +1 -1
- package/lib/ssr/index.d.ts +3 -0
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +42 -0
- package/lib/storage/adapter/AsyncStorageAdapter.js +141 -382
- package/lib/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +39 -0
- package/lib/storage/adapter/AsyncStorageDatabase.js +37 -98
- package/lib/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib/storage/adapter/InMemoryStore.d.ts +11 -0
- package/lib/storage/adapter/InMemoryStore.js +16 -67
- package/lib/storage/adapter/InMemoryStore.js.map +1 -1
- package/lib/storage/adapter/InMemoryStore.native.d.ts +1 -0
- package/lib/storage/adapter/InMemoryStore.native.js +2 -4
- package/lib/storage/adapter/InMemoryStore.native.js.map +1 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +61 -0
- package/lib/storage/adapter/IndexedDBAdapter.js +275 -419
- package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib/storage/adapter/getDefaultAdapter/index.d.ts +3 -0
- package/lib/storage/adapter/getDefaultAdapter/index.js +3 -5
- package/lib/storage/adapter/getDefaultAdapter/index.js.map +1 -1
- package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +3 -0
- package/lib/storage/adapter/getDefaultAdapter/index.native.js +2 -4
- package/lib/storage/adapter/getDefaultAdapter/index.native.js.map +1 -1
- package/lib/storage/adapter/index.d.ts +9 -0
- package/lib/storage/relationship.d.ts +140 -0
- package/lib/storage/relationship.js +335 -0
- package/lib/storage/relationship.js.map +1 -0
- package/lib/storage/storage.d.ts +50 -0
- package/lib/storage/storage.js +72 -143
- package/lib/storage/storage.js.map +1 -1
- package/lib/sync/datastoreConnectivity.d.ts +16 -0
- package/lib/sync/datastoreConnectivity.js +6 -55
- package/lib/sync/datastoreConnectivity.js.map +1 -1
- package/lib/sync/datastoreReachability/index.d.ts +3 -0
- package/lib/sync/datastoreReachability/index.native.d.ts +3 -0
- package/lib/sync/datastoreReachability/index.native.js +2 -4
- package/lib/sync/datastoreReachability/index.native.js.map +1 -1
- package/lib/sync/index.d.ts +89 -0
- package/lib/sync/index.js +49 -124
- package/lib/sync/index.js.map +1 -1
- package/lib/sync/merger.d.ts +17 -0
- package/lib/sync/merger.js +8 -74
- package/lib/sync/merger.js.map +1 -1
- package/lib/sync/outbox.d.ts +27 -0
- package/lib/sync/outbox.js +24 -97
- package/lib/sync/outbox.js.map +1 -1
- package/lib/sync/processors/errorMaps.d.ts +17 -0
- package/lib/sync/processors/errorMaps.js +5 -35
- package/lib/sync/processors/errorMaps.js.map +1 -1
- package/lib/sync/processors/mutation.d.ts +58 -0
- package/lib/sync/processors/mutation.js +47 -131
- package/lib/sync/processors/mutation.js.map +1 -1
- package/lib/sync/processors/subscription.d.ts +33 -0
- package/lib/sync/processors/subscription.js +29 -102
- package/lib/sync/processors/subscription.js.map +1 -1
- package/lib/sync/processors/sync.d.ts +28 -0
- package/lib/sync/processors/sync.js +26 -102
- package/lib/sync/processors/sync.js.map +1 -1
- package/lib/sync/utils.d.ts +42 -0
- package/lib/sync/utils.js +40 -103
- package/lib/sync/utils.js.map +1 -1
- package/lib/types.d.ts +554 -0
- package/lib/types.js +9 -39
- package/lib/types.js.map +1 -1
- package/lib/util.d.ts +189 -0
- package/lib/util.js +192 -188
- package/lib/util.js.map +1 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.js +2 -57
- package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib-esm/datastore/datastore.d.ts +59 -8
- package/lib-esm/datastore/datastore.js +642 -234
- package/lib-esm/datastore/datastore.js.map +1 -1
- package/lib-esm/index.d.ts +3 -2
- package/lib-esm/index.js +2 -1
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/predicates/index.d.ts +16 -2
- package/lib-esm/predicates/index.js +128 -7
- package/lib-esm/predicates/index.js.map +1 -1
- package/lib-esm/predicates/next.d.ts +301 -0
- package/lib-esm/predicates/next.js +812 -0
- package/lib-esm/predicates/next.js.map +1 -0
- package/lib-esm/predicates/sort.js +10 -4
- package/lib-esm/predicates/sort.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageAdapter.d.ts +2 -1
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js +112 -350
- package/lib-esm/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js +7 -68
- package/lib-esm/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/lib-esm/storage/adapter/InMemoryStore.d.ts +1 -1
- package/lib-esm/storage/adapter/InMemoryStore.js +1 -52
- package/lib-esm/storage/adapter/InMemoryStore.js.map +1 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +4 -2
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +230 -367
- package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib-esm/storage/adapter/getDefaultAdapter/index.js.map +1 -1
- package/lib-esm/storage/relationship.d.ts +140 -0
- package/lib-esm/storage/relationship.js +333 -0
- package/lib-esm/storage/relationship.js.map +1 -0
- package/lib-esm/storage/storage.d.ts +7 -6
- package/lib-esm/storage/storage.js +33 -101
- package/lib-esm/storage/storage.js.map +1 -1
- package/lib-esm/sync/datastoreConnectivity.js +1 -47
- package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
- package/lib-esm/sync/index.js +4 -76
- package/lib-esm/sync/index.js.map +1 -1
- package/lib-esm/sync/merger.js +1 -67
- package/lib-esm/sync/merger.js.map +1 -1
- package/lib-esm/sync/outbox.js +1 -74
- package/lib-esm/sync/outbox.js.map +1 -1
- package/lib-esm/sync/processors/errorMaps.js +2 -32
- package/lib-esm/sync/processors/errorMaps.js.map +1 -1
- package/lib-esm/sync/processors/mutation.js +12 -93
- package/lib-esm/sync/processors/mutation.js.map +1 -1
- package/lib-esm/sync/processors/subscription.js +6 -69
- package/lib-esm/sync/processors/subscription.js.map +1 -1
- package/lib-esm/sync/processors/sync.js +2 -75
- package/lib-esm/sync/processors/sync.js.map +1 -1
- package/lib-esm/sync/utils.d.ts +1 -1
- package/lib-esm/sync/utils.js +32 -95
- package/lib-esm/sync/utils.js.map +1 -1
- package/lib-esm/types.d.ts +63 -10
- package/lib-esm/types.js +7 -38
- package/lib-esm/types.js.map +1 -1
- package/lib-esm/util.d.ts +39 -6
- package/lib-esm/util.js +171 -171
- package/lib-esm/util.js.map +1 -1
- package/package.json +21 -14
- package/src/authModeStrategies/multiAuthStrategy.ts +2 -2
- package/src/datastore/datastore.ts +699 -206
- package/src/index.ts +4 -0
- package/src/predicates/index.ts +143 -17
- package/src/predicates/next.ts +967 -0
- package/src/predicates/sort.ts +8 -2
- package/src/storage/adapter/AsyncStorageAdapter.ts +59 -181
- package/src/storage/adapter/AsyncStorageDatabase.ts +16 -15
- package/src/storage/adapter/InMemoryStore.ts +5 -2
- package/src/storage/adapter/IndexedDBAdapter.ts +169 -192
- package/src/storage/adapter/getDefaultAdapter/index.ts +2 -2
- package/src/storage/relationship.ts +272 -0
- package/src/storage/storage.ts +56 -37
- package/src/sync/datastoreConnectivity.ts +4 -4
- package/src/sync/index.ts +22 -28
- package/src/sync/merger.ts +1 -1
- package/src/sync/outbox.ts +6 -6
- package/src/sync/processors/errorMaps.ts +1 -1
- package/src/sync/processors/mutation.ts +23 -19
- package/src/sync/processors/subscription.ts +20 -16
- package/src/sync/processors/sync.ts +17 -17
- package/src/sync/utils.ts +42 -48
- package/src/types.ts +128 -16
- package/src/util.ts +108 -150
- package/build.js +0 -5
- package/dist/aws-amplify-datastore.js +0 -92787
- package/dist/aws-amplify-datastore.js.map +0 -1
- package/dist/aws-amplify-datastore.min.js +0 -66
- package/dist/aws-amplify-datastore.min.js.map +0 -1
- package/index.js +0 -7
- package/webpack.config.dev.js +0 -6
|
@@ -1,116 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
-
function step(op) {
|
|
27
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
-
while (_) try {
|
|
29
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
-
switch (op[0]) {
|
|
32
|
-
case 0: case 1: t = op; break;
|
|
33
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
-
default:
|
|
37
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
-
if (t[2]) _.ops.pop();
|
|
42
|
-
_.trys.pop(); continue;
|
|
43
|
-
}
|
|
44
|
-
op = body.call(thisArg, _);
|
|
45
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
50
|
-
var t = {};
|
|
51
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
52
|
-
t[p] = s[p];
|
|
53
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
54
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
55
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
56
|
-
t[p[i]] = s[p[i]];
|
|
57
|
-
}
|
|
58
|
-
return t;
|
|
59
|
-
};
|
|
60
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
61
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
62
|
-
if (!m) return o;
|
|
63
|
-
var i = m.call(o), r, ar = [], e;
|
|
64
|
-
try {
|
|
65
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
66
|
-
}
|
|
67
|
-
catch (error) { e = { error: error }; }
|
|
68
|
-
finally {
|
|
69
|
-
try {
|
|
70
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
71
|
-
}
|
|
72
|
-
finally { if (e) throw e.error; }
|
|
73
|
-
}
|
|
74
|
-
return ar;
|
|
75
|
-
};
|
|
76
|
-
var __values = (this && this.__values) || function(o) {
|
|
77
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
78
|
-
if (m) return m.call(o);
|
|
79
|
-
if (o && typeof o.length === "number") return {
|
|
80
|
-
next: function () {
|
|
81
|
-
if (o && i >= o.length) o = void 0;
|
|
82
|
-
return { value: o && o[i++], done: !o };
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
86
|
-
};
|
|
87
|
-
var __spread = (this && this.__spread) || function () {
|
|
88
|
-
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
89
|
-
return ar;
|
|
90
|
-
};
|
|
91
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
92
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
93
|
-
};
|
|
94
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
95
|
-
var
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var api_1 = require("@aws-amplify/api");
|
|
96
5
|
var auth_1 = require("@aws-amplify/auth");
|
|
97
|
-
var cache_1 =
|
|
6
|
+
var cache_1 = require("@aws-amplify/cache");
|
|
98
7
|
var core_1 = require("@aws-amplify/core");
|
|
99
8
|
var immer_1 = require("immer");
|
|
100
9
|
var uuid_1 = require("uuid");
|
|
101
|
-
var zen_observable_ts_1 = __importDefault(require("zen-observable-ts"));
|
|
10
|
+
var zen_observable_ts_1 = tslib_1.__importDefault(require("zen-observable-ts"));
|
|
102
11
|
var authModeStrategies_1 = require("../authModeStrategies");
|
|
103
12
|
var predicates_1 = require("../predicates");
|
|
104
13
|
var storage_1 = require("../storage/storage");
|
|
14
|
+
var relationship_1 = require("../storage/relationship");
|
|
105
15
|
var sync_1 = require("../sync");
|
|
106
16
|
var types_1 = require("../types");
|
|
107
17
|
var util_1 = require("../util");
|
|
18
|
+
var next_1 = require("../predicates/next");
|
|
108
19
|
var utils_1 = require("../sync/utils");
|
|
109
20
|
immer_1.setAutoFreeze(true);
|
|
110
21
|
immer_1.enablePatches();
|
|
111
22
|
var logger = new core_1.ConsoleLogger('DataStore');
|
|
112
23
|
var ulid = util_1.monotonicUlidFactory(Date.now());
|
|
113
|
-
var isNode = core_1.
|
|
24
|
+
var isNode = core_1.browserOrNode().isNode;
|
|
114
25
|
var SETTING_SCHEMA_VERSION = 'schemaVersion';
|
|
115
26
|
var schema;
|
|
116
27
|
var modelNamespaceMap = new WeakMap();
|
|
@@ -119,18 +30,156 @@ var modelNamespaceMap = new WeakMap();
|
|
|
119
30
|
// PersistentModel - the source model, used for diffing object-type fields
|
|
120
31
|
var modelPatchesMap = new WeakMap();
|
|
121
32
|
var getModelDefinition = function (modelConstructor) {
|
|
33
|
+
var e_1, _a, e_2, _b;
|
|
122
34
|
var namespace = modelNamespaceMap.get(modelConstructor);
|
|
123
|
-
|
|
35
|
+
var definition = namespace
|
|
36
|
+
? schema.namespaces[namespace].models[modelConstructor.name]
|
|
37
|
+
: undefined;
|
|
38
|
+
// compatibility with legacy/pre-PK codegen for lazy loading to inject
|
|
39
|
+
// index fields into the model definition.
|
|
40
|
+
if (definition) {
|
|
41
|
+
var indexes = schema.namespaces[namespace].relationships[modelConstructor.name]
|
|
42
|
+
.indexes;
|
|
43
|
+
var indexFields = new Set();
|
|
44
|
+
try {
|
|
45
|
+
for (var indexes_1 = tslib_1.__values(indexes), indexes_1_1 = indexes_1.next(); !indexes_1_1.done; indexes_1_1 = indexes_1.next()) {
|
|
46
|
+
var index = indexes_1_1.value;
|
|
47
|
+
try {
|
|
48
|
+
for (var _c = (e_2 = void 0, tslib_1.__values(index[1])), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
49
|
+
var indexField = _d.value;
|
|
50
|
+
indexFields.add(indexField);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
54
|
+
finally {
|
|
55
|
+
try {
|
|
56
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
57
|
+
}
|
|
58
|
+
finally { if (e_2) throw e_2.error; }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
63
|
+
finally {
|
|
64
|
+
try {
|
|
65
|
+
if (indexes_1_1 && !indexes_1_1.done && (_a = indexes_1.return)) _a.call(indexes_1);
|
|
66
|
+
}
|
|
67
|
+
finally { if (e_1) throw e_1.error; }
|
|
68
|
+
}
|
|
69
|
+
definition.fields = tslib_1.__assign(tslib_1.__assign({}, Object.fromEntries(tslib_1.__spread(indexFields.values()).map(function (name) { return [
|
|
70
|
+
name,
|
|
71
|
+
{
|
|
72
|
+
name: name,
|
|
73
|
+
type: 'ID',
|
|
74
|
+
isArray: false,
|
|
75
|
+
},
|
|
76
|
+
]; }, []))), definition.fields);
|
|
77
|
+
}
|
|
78
|
+
return definition;
|
|
79
|
+
};
|
|
80
|
+
var getModelPKFieldName = function (modelConstructor) {
|
|
81
|
+
var _a, _b, _c;
|
|
82
|
+
var namespace = modelNamespaceMap.get(modelConstructor);
|
|
83
|
+
return ((namespace && ((_c = (_b = (_a = schema.namespaces) === null || _a === void 0 ? void 0 : _a[namespace]) === null || _b === void 0 ? void 0 : _b.keys) === null || _c === void 0 ? void 0 : _c[modelConstructor.name].primaryKey)) || ['id']);
|
|
124
84
|
};
|
|
125
85
|
var isValidModelConstructor = function (obj) {
|
|
126
|
-
|
|
86
|
+
if (util_1.isModelConstructor(obj) && modelNamespaceMap.has(obj)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
127
92
|
};
|
|
128
93
|
var namespaceResolver = function (modelConstructor) {
|
|
129
|
-
|
|
94
|
+
var resolver = modelNamespaceMap.get(modelConstructor);
|
|
95
|
+
if (!resolver) {
|
|
96
|
+
throw new Error("Namespace Resolver for '" + modelConstructor.name + "' not found! This is probably a bug in '@amplify-js/datastore'.");
|
|
97
|
+
}
|
|
98
|
+
return resolver;
|
|
99
|
+
};
|
|
100
|
+
var buildSeedPredicate = function (modelConstructor) {
|
|
101
|
+
if (!modelConstructor)
|
|
102
|
+
throw new Error('Missing modelConstructor');
|
|
103
|
+
var modelSchema = getModelDefinition(modelConstructor);
|
|
104
|
+
if (!modelSchema)
|
|
105
|
+
throw new Error('Missing modelSchema');
|
|
106
|
+
var pks = getModelPKFieldName(modelConstructor);
|
|
107
|
+
if (!pks)
|
|
108
|
+
throw new Error('Could not determine PK');
|
|
109
|
+
return next_1.recursivePredicateFor({
|
|
110
|
+
builder: modelConstructor,
|
|
111
|
+
schema: modelSchema,
|
|
112
|
+
pkField: pks,
|
|
113
|
+
});
|
|
130
114
|
};
|
|
131
115
|
var userClasses;
|
|
132
116
|
var dataStoreClasses;
|
|
133
117
|
var storageClasses;
|
|
118
|
+
/**
|
|
119
|
+
* Maps a model to its related models for memoization/immutability.
|
|
120
|
+
*/
|
|
121
|
+
var modelInstanceAssociationsMap = new WeakMap();
|
|
122
|
+
/**
|
|
123
|
+
* Describes whether and to what a model is attached for lazy loading purposes.
|
|
124
|
+
*/
|
|
125
|
+
var ModelAttachment;
|
|
126
|
+
(function (ModelAttachment) {
|
|
127
|
+
/**
|
|
128
|
+
* Model doesn't lazy load from any data source.
|
|
129
|
+
*
|
|
130
|
+
* Related entity properties provided at instantiation are returned
|
|
131
|
+
* via the respective lazy interfaces when their properties are invoked.
|
|
132
|
+
*/
|
|
133
|
+
ModelAttachment["Detached"] = "Detached";
|
|
134
|
+
/**
|
|
135
|
+
* Model lazy loads from the global DataStore.
|
|
136
|
+
*/
|
|
137
|
+
ModelAttachment["DataStore"] = "DataStore";
|
|
138
|
+
/**
|
|
139
|
+
* Demonstrative. Not yet implemented.
|
|
140
|
+
*/
|
|
141
|
+
ModelAttachment["API"] = "API";
|
|
142
|
+
})(ModelAttachment || (ModelAttachment = {}));
|
|
143
|
+
/**
|
|
144
|
+
* Tells us which data source a model is attached to (lazy loads from).
|
|
145
|
+
*
|
|
146
|
+
* If `Deatched`, the model's lazy properties will only ever return properties
|
|
147
|
+
* from memory provided at construction time.
|
|
148
|
+
*/
|
|
149
|
+
var attachedModelInstances = new WeakMap();
|
|
150
|
+
/**
|
|
151
|
+
* Registers a model instance against a data source (DataStore, API, or
|
|
152
|
+
* Detached/None).
|
|
153
|
+
*
|
|
154
|
+
* The API option is demonstrative. Lazy loading against API is not yet
|
|
155
|
+
* implemented.
|
|
156
|
+
*
|
|
157
|
+
* @param result A model instance or array of instances
|
|
158
|
+
* @param attachment A ModelAttachment data source
|
|
159
|
+
* @returns passes the `result` back through after attachment
|
|
160
|
+
*/
|
|
161
|
+
function attached(result, attachment) {
|
|
162
|
+
if (Array.isArray(result)) {
|
|
163
|
+
result.map(function (record) { return attached(record, attachment); });
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
result && attachedModelInstances.set(result, attachment);
|
|
167
|
+
}
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
exports.attached = attached;
|
|
171
|
+
/**
|
|
172
|
+
* Determines what source a model instance should lazy load from.
|
|
173
|
+
*
|
|
174
|
+
* If the instace was never explicitly registered, it is detached by default.
|
|
175
|
+
*
|
|
176
|
+
* @param instance A model instance
|
|
177
|
+
*/
|
|
178
|
+
exports.getAttachment = function (instance) {
|
|
179
|
+
return attachedModelInstances.has(instance)
|
|
180
|
+
? attachedModelInstances.get(instance)
|
|
181
|
+
: ModelAttachment.Detached;
|
|
182
|
+
};
|
|
134
183
|
var initSchema = function (userSchema) {
|
|
135
184
|
var _a;
|
|
136
185
|
if (schema !== undefined) {
|
|
@@ -138,7 +187,8 @@ var initSchema = function (userSchema) {
|
|
|
138
187
|
return userClasses;
|
|
139
188
|
}
|
|
140
189
|
logger.log('validating schema', { schema: userSchema });
|
|
141
|
-
|
|
190
|
+
checkSchemaCodegenVersion(userSchema.codegenVersion);
|
|
191
|
+
var internalUserNamespace = tslib_1.__assign({ name: util_1.USER }, userSchema);
|
|
142
192
|
logger.log('DataStore', 'Init models');
|
|
143
193
|
userClasses = createTypeClasses(internalUserNamespace);
|
|
144
194
|
logger.log('DataStore', 'Models initialized');
|
|
@@ -156,10 +206,11 @@ var initSchema = function (userSchema) {
|
|
|
156
206
|
_a[syncNamespace.name] = syncNamespace,
|
|
157
207
|
_a),
|
|
158
208
|
version: userSchema.version,
|
|
209
|
+
codegenVersion: userSchema.codegenVersion,
|
|
159
210
|
};
|
|
160
211
|
Object.keys(schema.namespaces).forEach(function (namespace) {
|
|
161
|
-
var
|
|
162
|
-
var _b = __read(util_1.establishRelationAndKeys(schema.namespaces[namespace]), 2), relations = _b[0], keys = _b[1];
|
|
212
|
+
var e_3, _a;
|
|
213
|
+
var _b = tslib_1.__read(util_1.establishRelationAndKeys(schema.namespaces[namespace]), 2), relations = _b[0], keys = _b[1];
|
|
163
214
|
schema.namespaces[namespace].relationships = relations;
|
|
164
215
|
schema.namespaces[namespace].keys = keys;
|
|
165
216
|
var modelAssociations = new Map();
|
|
@@ -175,6 +226,20 @@ var initSchema = function (userSchema) {
|
|
|
175
226
|
return connectedModels.push(field.type.model);
|
|
176
227
|
});
|
|
177
228
|
modelAssociations.set(model.name, connectedModels);
|
|
229
|
+
Object.values(model.fields).forEach(function (field) {
|
|
230
|
+
if (typeof field.type === 'object' &&
|
|
231
|
+
!Object.getOwnPropertyDescriptor(field.type, 'modelConstructor')) {
|
|
232
|
+
Object.defineProperty(field.type, 'modelConstructor', {
|
|
233
|
+
get: function () {
|
|
234
|
+
return {
|
|
235
|
+
builder: userClasses[field.type.model],
|
|
236
|
+
schema: schema.namespaces[namespace].models[field.type.model],
|
|
237
|
+
pkField: getModelPKFieldName(userClasses[field.type.model]),
|
|
238
|
+
};
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
});
|
|
178
243
|
});
|
|
179
244
|
var result = new Map();
|
|
180
245
|
var count = 1000;
|
|
@@ -187,20 +252,20 @@ var initSchema = function (userSchema) {
|
|
|
187
252
|
throw new Error('Models are not topologically sortable. Please verify your schema.');
|
|
188
253
|
}
|
|
189
254
|
try {
|
|
190
|
-
for (var _c = (
|
|
255
|
+
for (var _c = (e_3 = void 0, tslib_1.__values(Array.from(modelAssociations.keys()))), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
191
256
|
var modelName = _d.value;
|
|
192
257
|
var parents = modelAssociations.get(modelName);
|
|
193
|
-
if (parents.every(function (x) { return result.has(x); })) {
|
|
258
|
+
if (parents === null || parents === void 0 ? void 0 : parents.every(function (x) { return result.has(x); })) {
|
|
194
259
|
result.set(modelName, parents);
|
|
195
260
|
}
|
|
196
261
|
}
|
|
197
262
|
}
|
|
198
|
-
catch (
|
|
263
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
199
264
|
finally {
|
|
200
265
|
try {
|
|
201
266
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
202
267
|
}
|
|
203
|
-
finally { if (
|
|
268
|
+
finally { if (e_3) throw e_3.error; }
|
|
204
269
|
}
|
|
205
270
|
Array.from(result.keys()).forEach(function (x) { return modelAssociations.delete(x); });
|
|
206
271
|
}
|
|
@@ -225,16 +290,54 @@ var checkSchemaInitialized = function () {
|
|
|
225
290
|
throw new Error(message);
|
|
226
291
|
}
|
|
227
292
|
};
|
|
293
|
+
/**
|
|
294
|
+
* Throws an exception if the schema is using a codegen version that is not supported.
|
|
295
|
+
*
|
|
296
|
+
* Set the supported version by setting majorVersion and minorVersion
|
|
297
|
+
* This functions similar to ^ version range.
|
|
298
|
+
* The tested codegenVersion major version must exactly match the set majorVersion
|
|
299
|
+
* The tested codegenVersion minor version must be gt or equal to the set minorVersion
|
|
300
|
+
* Example: For a min supported version of 5.4.0 set majorVersion = 5 and minorVersion = 4
|
|
301
|
+
*
|
|
302
|
+
* This regex will not work when setting a supported range with minor version
|
|
303
|
+
* of 2 or more digits.
|
|
304
|
+
* i.e. minorVersion = 10 will not work
|
|
305
|
+
* The regex will work for testing a codegenVersion with multi digit minor
|
|
306
|
+
* versions as long as the minimum minorVersion is single digit.
|
|
307
|
+
* i.e. codegenVersion = 5.30.1, majorVersion = 5, minorVersion = 4 PASSES
|
|
308
|
+
*
|
|
309
|
+
* @param codegenVersion schema codegenVersion
|
|
310
|
+
*/
|
|
311
|
+
var checkSchemaCodegenVersion = function (codegenVersion) {
|
|
312
|
+
// TODO: set to correct version when released in codegen
|
|
313
|
+
var majorVersion = 3;
|
|
314
|
+
var minorVersion = 2;
|
|
315
|
+
var isValid = false;
|
|
316
|
+
try {
|
|
317
|
+
var versionParts = codegenVersion.split('.');
|
|
318
|
+
var _a = tslib_1.__read(versionParts, 4), major = _a[0], minor = _a[1], patch = _a[2], patchrevision = _a[3];
|
|
319
|
+
isValid = Number(major) === majorVersion && Number(minor) >= minorVersion;
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
console.log("Error parsing codegen version: " + codegenVersion + "\n" + err);
|
|
323
|
+
}
|
|
324
|
+
if (!isValid) {
|
|
325
|
+
var message = "Models were generated with an unsupported version of codegen. Codegen artifacts are from " + (codegenVersion || 'an unknown version') + ", whereas ^" + majorVersion + "." + minorVersion + ".0 is required. " +
|
|
326
|
+
"Update to the latest CLI and run 'amplify codegen models'.";
|
|
327
|
+
logger.error(message);
|
|
328
|
+
throw new Error(message);
|
|
329
|
+
}
|
|
330
|
+
};
|
|
228
331
|
var createTypeClasses = function (namespace) {
|
|
229
332
|
var classes = {};
|
|
230
333
|
Object.entries(namespace.models).forEach(function (_a) {
|
|
231
|
-
var _b = __read(_a, 2), modelName = _b[0], modelDefinition = _b[1];
|
|
334
|
+
var _b = tslib_1.__read(_a, 2), modelName = _b[0], modelDefinition = _b[1];
|
|
232
335
|
var clazz = createModelClass(modelDefinition);
|
|
233
336
|
classes[modelName] = clazz;
|
|
234
337
|
modelNamespaceMap.set(clazz, namespace.name);
|
|
235
338
|
});
|
|
236
339
|
Object.entries(namespace.nonModels || {}).forEach(function (_a) {
|
|
237
|
-
var _b = __read(_a, 2), typeName = _b[0], typeDefinition = _b[1];
|
|
340
|
+
var _b = tslib_1.__read(_a, 2), typeName = _b[0], typeDefinition = _b[1];
|
|
238
341
|
var clazz = createNonModelClass(typeDefinition);
|
|
239
342
|
classes[typeName] = clazz;
|
|
240
343
|
});
|
|
@@ -325,7 +428,8 @@ var validateModelFields = function (modelDefinition) { return function (k, v) {
|
|
|
325
428
|
}
|
|
326
429
|
else if (!util_1.isNullOrUndefined(v) &&
|
|
327
430
|
validateScalar_1 &&
|
|
328
|
-
!validateScalar_1(v)
|
|
431
|
+
!validateScalar_1(v) // TODO: why never, TS ... why ...
|
|
432
|
+
) {
|
|
329
433
|
throw new Error("Field " + name_1 + " should be of type " + type_1 + ", validation failed. " + v);
|
|
330
434
|
}
|
|
331
435
|
}
|
|
@@ -390,7 +494,7 @@ var castInstanceType = function (modelDefinition, k, v) {
|
|
|
390
494
|
var initializeInstance = function (init, modelDefinition, draft) {
|
|
391
495
|
var modelValidator = validateModelFields(modelDefinition);
|
|
392
496
|
Object.entries(init).forEach(function (_a) {
|
|
393
|
-
var _b = __read(_a, 2), k = _b[0], v = _b[1];
|
|
497
|
+
var _b = tslib_1.__read(_a, 2), k = _b[0], v = _b[1];
|
|
394
498
|
var parsedValue = castInstanceType(modelDefinition, k, v);
|
|
395
499
|
modelValidator(k, parsedValue);
|
|
396
500
|
draft[k] = parsedValue;
|
|
@@ -447,7 +551,7 @@ var createModelClass = function (modelDefinition) {
|
|
|
447
551
|
keyNames.forEach(function (key) { return (draft[key] = source[key]); });
|
|
448
552
|
var modelValidator = validateModelFields(modelDefinition);
|
|
449
553
|
Object.entries(draft).forEach(function (_a) {
|
|
450
|
-
var _b = __read(_a, 2), k = _b[0], v = _b[1];
|
|
554
|
+
var _b = tslib_1.__read(_a, 2), k = _b[0], v = _b[1];
|
|
451
555
|
var parsedValue = castInstanceType(modelDefinition, k, v);
|
|
452
556
|
modelValidator(k, parsedValue);
|
|
453
557
|
});
|
|
@@ -455,7 +559,7 @@ var createModelClass = function (modelDefinition) {
|
|
|
455
559
|
var hasExistingPatches = modelPatchesMap.has(source);
|
|
456
560
|
if (patches.length || hasExistingPatches) {
|
|
457
561
|
if (hasExistingPatches) {
|
|
458
|
-
var _a = __read(modelPatchesMap.get(source), 2), existingPatches = _a[0], existingSource = _a[1];
|
|
562
|
+
var _a = tslib_1.__read(modelPatchesMap.get(source), 2), existingPatches = _a[0], existingSource = _a[1];
|
|
459
563
|
var mergedPatches = util_1.mergePatches(existingSource, existingPatches, patches);
|
|
460
564
|
modelPatchesMap.set(model, [mergedPatches, existingSource]);
|
|
461
565
|
checkReadOnlyPropertyOnUpdate(mergedPatches, modelDefinition);
|
|
@@ -465,7 +569,7 @@ var createModelClass = function (modelDefinition) {
|
|
|
465
569
|
checkReadOnlyPropertyOnUpdate(patches, modelDefinition);
|
|
466
570
|
}
|
|
467
571
|
}
|
|
468
|
-
return model;
|
|
572
|
+
return attached(model, ModelAttachment.DataStore);
|
|
469
573
|
};
|
|
470
574
|
// "private" method (that's hidden via `Setting`) for `withSSRContext` to use
|
|
471
575
|
// to gain access to `modelInstanceCreator` and `clazz` for persisting IDs from server to client.
|
|
@@ -477,17 +581,208 @@ var createModelClass = function (modelDefinition) {
|
|
|
477
581
|
var instance = modelInstanceCreator(clazz, json);
|
|
478
582
|
var modelValidator = validateModelFields(modelDefinition);
|
|
479
583
|
Object.entries(instance).forEach(function (_a) {
|
|
480
|
-
var _b = __read(_a, 2), k = _b[0], v = _b[1];
|
|
584
|
+
var _b = tslib_1.__read(_a, 2), k = _b[0], v = _b[1];
|
|
481
585
|
modelValidator(k, v);
|
|
482
586
|
});
|
|
483
|
-
return instance;
|
|
587
|
+
return attached(instance, ModelAttachment.DataStore);
|
|
484
588
|
};
|
|
485
589
|
return Model;
|
|
486
590
|
}());
|
|
487
591
|
clazz[immer_1.immerable] = true;
|
|
488
592
|
Object.defineProperty(clazz, 'name', { value: modelDefinition.name });
|
|
593
|
+
var _loop_1 = function (field) {
|
|
594
|
+
if (!types_1.isFieldAssociation(modelDefinition, field)) {
|
|
595
|
+
return "continue";
|
|
596
|
+
}
|
|
597
|
+
var _a = modelDefinition.fields[field], type = _a.type, localAssociation = _a.association, _b = _a.association, targetName = _b.targetName, targetNames = _b.targetNames;
|
|
598
|
+
var relationship = new relationship_1.ModelRelationship({
|
|
599
|
+
builder: clazz,
|
|
600
|
+
schema: modelDefinition,
|
|
601
|
+
pkField: util_1.extractPrimaryKeyFieldNames(modelDefinition),
|
|
602
|
+
}, field);
|
|
603
|
+
Object.defineProperty(clazz.prototype, modelDefinition.fields[field].name, {
|
|
604
|
+
set: function (model) {
|
|
605
|
+
if (!model || !(typeof model === 'object'))
|
|
606
|
+
return;
|
|
607
|
+
// Avoid validation error when processing AppSync response with nested
|
|
608
|
+
// selection set. Nested entitites lack version field and can not be validated
|
|
609
|
+
// TODO: explore a more reliable method to solve this
|
|
610
|
+
if (model.hasOwnProperty('_version')) {
|
|
611
|
+
var modelConstructor = Object.getPrototypeOf(model || {})
|
|
612
|
+
.constructor;
|
|
613
|
+
if (!isValidModelConstructor(modelConstructor)) {
|
|
614
|
+
var msg = "Value passed to " + modelDefinition.name + "." + field + " is not a valid instance of a model";
|
|
615
|
+
logger.error(msg, { model: model });
|
|
616
|
+
throw new Error(msg);
|
|
617
|
+
}
|
|
618
|
+
if (modelConstructor.name.toLowerCase() !==
|
|
619
|
+
relationship.remoteModelConstructor.name.toLowerCase()) {
|
|
620
|
+
var msg = "Value passed to " + modelDefinition.name + "." + field + " is not an instance of " + relationship.remoteModelConstructor.name;
|
|
621
|
+
logger.error(msg, { model: model });
|
|
622
|
+
throw new Error(msg);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
if (relationship.isComplete) {
|
|
626
|
+
for (var i = 0; i < relationship.localJoinFields.length; i++) {
|
|
627
|
+
this[relationship.localJoinFields[i]] =
|
|
628
|
+
model[relationship.remoteJoinFields[i]];
|
|
629
|
+
}
|
|
630
|
+
var instanceMemos = modelInstanceAssociationsMap.has(this)
|
|
631
|
+
? modelInstanceAssociationsMap.get(this)
|
|
632
|
+
: modelInstanceAssociationsMap.set(this, {}).get(this);
|
|
633
|
+
instanceMemos[field] = model;
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
get: function () {
|
|
637
|
+
var _this = this;
|
|
638
|
+
var instanceMemos = modelInstanceAssociationsMap.has(this)
|
|
639
|
+
? modelInstanceAssociationsMap.get(this)
|
|
640
|
+
: modelInstanceAssociationsMap.set(this, {}).get(this);
|
|
641
|
+
if (!instanceMemos.hasOwnProperty(field)) {
|
|
642
|
+
if (exports.getAttachment(this) === ModelAttachment.DataStore) {
|
|
643
|
+
var resultPromise = instance.query(relationship.remoteModelConstructor, function (base) {
|
|
644
|
+
return base.and(function (q) {
|
|
645
|
+
return relationship.remoteJoinFields.map(function (field, index) {
|
|
646
|
+
return q[field].eq(_this[relationship.localJoinFields[index]]);
|
|
647
|
+
});
|
|
648
|
+
});
|
|
649
|
+
});
|
|
650
|
+
if (relationship.type === 'HAS_MANY') {
|
|
651
|
+
instanceMemos[field] = new AsyncCollection(resultPromise);
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
instanceMemos[field] = resultPromise.then(function (rows) {
|
|
655
|
+
if (rows.length > 1) {
|
|
656
|
+
// should never happen for a HAS_ONE or BELONGS_TO.
|
|
657
|
+
var err = new Error("\n\t\t\t\t\t\t\t\t\tData integrity error.\n\t\t\t\t\t\t\t\t\tToo many records found for a HAS_ONE/BELONGS_TO field '" + modelDefinition.name + "." + field + "'\n\t\t\t\t\t\t\t\t");
|
|
658
|
+
console.error(err);
|
|
659
|
+
throw err;
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
return rows[0];
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
else if (exports.getAttachment(this) === ModelAttachment.API) {
|
|
668
|
+
throw new Error('Lazy loading from API is not yet supported!');
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
if (relationship.type === 'HAS_MANY') {
|
|
672
|
+
return new AsyncCollection([]);
|
|
673
|
+
}
|
|
674
|
+
else {
|
|
675
|
+
return Promise.resolve(undefined);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
return instanceMemos[field];
|
|
680
|
+
},
|
|
681
|
+
});
|
|
682
|
+
};
|
|
683
|
+
for (var field in modelDefinition.fields) {
|
|
684
|
+
_loop_1(field);
|
|
685
|
+
}
|
|
489
686
|
return clazz;
|
|
490
687
|
};
|
|
688
|
+
var AsyncItem = /** @class */ (function (_super) {
|
|
689
|
+
tslib_1.__extends(AsyncItem, _super);
|
|
690
|
+
function AsyncItem() {
|
|
691
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
692
|
+
}
|
|
693
|
+
return AsyncItem;
|
|
694
|
+
}(Promise));
|
|
695
|
+
exports.AsyncItem = AsyncItem;
|
|
696
|
+
var AsyncCollection = /** @class */ (function () {
|
|
697
|
+
function AsyncCollection(values) {
|
|
698
|
+
this.values = values;
|
|
699
|
+
}
|
|
700
|
+
AsyncCollection.prototype[Symbol.asyncIterator] = function () {
|
|
701
|
+
var _this = this;
|
|
702
|
+
var values;
|
|
703
|
+
var index = 0;
|
|
704
|
+
return {
|
|
705
|
+
next: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
706
|
+
var result;
|
|
707
|
+
return tslib_1.__generator(this, function (_a) {
|
|
708
|
+
switch (_a.label) {
|
|
709
|
+
case 0:
|
|
710
|
+
if (!!values) return [3 /*break*/, 2];
|
|
711
|
+
return [4 /*yield*/, this.values];
|
|
712
|
+
case 1:
|
|
713
|
+
values = _a.sent();
|
|
714
|
+
_a.label = 2;
|
|
715
|
+
case 2:
|
|
716
|
+
if (index < values.length) {
|
|
717
|
+
result = {
|
|
718
|
+
value: values[index],
|
|
719
|
+
done: false,
|
|
720
|
+
};
|
|
721
|
+
index++;
|
|
722
|
+
return [2 /*return*/, result];
|
|
723
|
+
}
|
|
724
|
+
return [2 /*return*/, {
|
|
725
|
+
value: null,
|
|
726
|
+
done: true,
|
|
727
|
+
}];
|
|
728
|
+
}
|
|
729
|
+
});
|
|
730
|
+
}); },
|
|
731
|
+
};
|
|
732
|
+
};
|
|
733
|
+
AsyncCollection.prototype.toArray = function (_a) {
|
|
734
|
+
var _b = (_a === void 0 ? {} : _a).max, max = _b === void 0 ? Number.MAX_SAFE_INTEGER : _b;
|
|
735
|
+
var e_4, _c;
|
|
736
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
737
|
+
var output, i, _d, _e, element, e_4_1;
|
|
738
|
+
return tslib_1.__generator(this, function (_f) {
|
|
739
|
+
switch (_f.label) {
|
|
740
|
+
case 0:
|
|
741
|
+
output = [];
|
|
742
|
+
i = 0;
|
|
743
|
+
_f.label = 1;
|
|
744
|
+
case 1:
|
|
745
|
+
_f.trys.push([1, 6, 7, 12]);
|
|
746
|
+
_d = tslib_1.__asyncValues(this);
|
|
747
|
+
_f.label = 2;
|
|
748
|
+
case 2: return [4 /*yield*/, _d.next()];
|
|
749
|
+
case 3:
|
|
750
|
+
if (!(_e = _f.sent(), !_e.done)) return [3 /*break*/, 5];
|
|
751
|
+
element = _e.value;
|
|
752
|
+
if (i < max) {
|
|
753
|
+
output.push(element);
|
|
754
|
+
i++;
|
|
755
|
+
}
|
|
756
|
+
else {
|
|
757
|
+
return [3 /*break*/, 5];
|
|
758
|
+
}
|
|
759
|
+
_f.label = 4;
|
|
760
|
+
case 4: return [3 /*break*/, 2];
|
|
761
|
+
case 5: return [3 /*break*/, 12];
|
|
762
|
+
case 6:
|
|
763
|
+
e_4_1 = _f.sent();
|
|
764
|
+
e_4 = { error: e_4_1 };
|
|
765
|
+
return [3 /*break*/, 12];
|
|
766
|
+
case 7:
|
|
767
|
+
_f.trys.push([7, , 10, 11]);
|
|
768
|
+
if (!(_e && !_e.done && (_c = _d.return))) return [3 /*break*/, 9];
|
|
769
|
+
return [4 /*yield*/, _c.call(_d)];
|
|
770
|
+
case 8:
|
|
771
|
+
_f.sent();
|
|
772
|
+
_f.label = 9;
|
|
773
|
+
case 9: return [3 /*break*/, 11];
|
|
774
|
+
case 10:
|
|
775
|
+
if (e_4) throw e_4.error;
|
|
776
|
+
return [7 /*endfinally*/];
|
|
777
|
+
case 11: return [7 /*endfinally*/];
|
|
778
|
+
case 12: return [2 /*return*/, output];
|
|
779
|
+
}
|
|
780
|
+
});
|
|
781
|
+
});
|
|
782
|
+
};
|
|
783
|
+
return AsyncCollection;
|
|
784
|
+
}());
|
|
785
|
+
exports.AsyncCollection = AsyncCollection;
|
|
491
786
|
var checkReadOnlyPropertyOnCreate = function (draft, modelDefinition) {
|
|
492
787
|
var modelKeys = Object.keys(draft);
|
|
493
788
|
var fields = modelDefinition.fields;
|
|
@@ -501,7 +796,7 @@ var checkReadOnlyPropertyOnUpdate = function (patches, modelDefinition) {
|
|
|
501
796
|
var patchArray = patches.map(function (p) { return [p.path[0], p.value]; });
|
|
502
797
|
var fields = modelDefinition.fields;
|
|
503
798
|
patchArray.forEach(function (_a) {
|
|
504
|
-
var _b = __read(_a, 2), key = _b[0], val = _b[1];
|
|
799
|
+
var _b = tslib_1.__read(_a, 2), key = _b[0], val = _b[1];
|
|
505
800
|
if (!val || !fields[key])
|
|
506
801
|
return;
|
|
507
802
|
if (fields[key].isReadOnly) {
|
|
@@ -530,7 +825,7 @@ function isQueryOne(obj) {
|
|
|
530
825
|
function defaultConflictHandler(conflictData) {
|
|
531
826
|
var localModel = conflictData.localModel, modelConstructor = conflictData.modelConstructor, remoteModel = conflictData.remoteModel;
|
|
532
827
|
var _version = remoteModel._version;
|
|
533
|
-
return modelInstanceCreator(modelConstructor, __assign(__assign({}, localModel), { _version: _version }));
|
|
828
|
+
return modelInstanceCreator(modelConstructor, tslib_1.__assign(tslib_1.__assign({}, localModel), { _version: _version }));
|
|
534
829
|
}
|
|
535
830
|
function defaultErrorHandler(error) {
|
|
536
831
|
logger.warn(error);
|
|
@@ -551,8 +846,7 @@ function getModelConstructorByModelName(namespaceName, modelName) {
|
|
|
551
846
|
result = storageClasses[modelName];
|
|
552
847
|
break;
|
|
553
848
|
default:
|
|
554
|
-
|
|
555
|
-
break;
|
|
849
|
+
throw new Error("Invalid namespace: " + namespaceName);
|
|
556
850
|
}
|
|
557
851
|
if (isValidModelConstructor(result)) {
|
|
558
852
|
return result;
|
|
@@ -576,23 +870,23 @@ function getModelConstructorByModelName(namespaceName, modelName) {
|
|
|
576
870
|
* @param version The expected schema version.
|
|
577
871
|
*/
|
|
578
872
|
function checkSchemaVersion(storage, version) {
|
|
579
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
873
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
580
874
|
var Setting, modelDefinition;
|
|
581
875
|
var _this = this;
|
|
582
|
-
return __generator(this, function (_a) {
|
|
876
|
+
return tslib_1.__generator(this, function (_a) {
|
|
583
877
|
switch (_a.label) {
|
|
584
878
|
case 0:
|
|
585
879
|
Setting = dataStoreClasses.Setting;
|
|
586
880
|
modelDefinition = schema.namespaces[util_1.DATASTORE].models.Setting;
|
|
587
|
-
return [4 /*yield*/, storage.runExclusive(function (s) { return __awaiter(_this, void 0, void 0, function () {
|
|
881
|
+
return [4 /*yield*/, storage.runExclusive(function (s) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
588
882
|
var _a, schemaVersionSetting, storedValue;
|
|
589
|
-
return __generator(this, function (_b) {
|
|
883
|
+
return tslib_1.__generator(this, function (_b) {
|
|
590
884
|
switch (_b.label) {
|
|
591
885
|
case 0: return [4 /*yield*/, s.query(Setting, predicates_1.ModelPredicateCreator.createFromExisting(modelDefinition, function (c) {
|
|
592
886
|
return c.key('eq', SETTING_SCHEMA_VERSION);
|
|
593
887
|
}), { page: 0, limit: 1 })];
|
|
594
888
|
case 1:
|
|
595
|
-
_a = __read.apply(void 0, [_b.sent(), 1]), schemaVersionSetting = _a[0];
|
|
889
|
+
_a = tslib_1.__read.apply(void 0, [_b.sent(), 1]), schemaVersionSetting = _a[0];
|
|
596
890
|
if (!(schemaVersionSetting !== undefined &&
|
|
597
891
|
schemaVersionSetting.value !== undefined)) return [3 /*break*/, 4];
|
|
598
892
|
storedValue = JSON.parse(schemaVersionSetting.value);
|
|
@@ -670,8 +964,14 @@ var DataStore = /** @class */ (function () {
|
|
|
670
964
|
var _this = this;
|
|
671
965
|
// reference to configured category instances. Used for preserving SSR context
|
|
672
966
|
this.Auth = auth_1.Auth;
|
|
673
|
-
this.API = api_1.
|
|
674
|
-
this.Cache = cache_1.
|
|
967
|
+
this.API = api_1.API;
|
|
968
|
+
this.Cache = cache_1.Cache;
|
|
969
|
+
// Non-null assertions (bang operator) have been added to most of these properties
|
|
970
|
+
// to make TS happy. These properties are all expected to be set immediately after
|
|
971
|
+
// construction.
|
|
972
|
+
// TODO: Refactor to use proper DI if possible. If not possible, change these to
|
|
973
|
+
// optionals and implement conditional checks throughout. Rinse/repeat on all
|
|
974
|
+
// sync engine processors, storage engine, adapters, etc..
|
|
675
975
|
this.amplifyConfig = {};
|
|
676
976
|
this.syncPredicates = new WeakMap();
|
|
677
977
|
// object that gets passed to descendent classes. Allows us to pass these down by reference
|
|
@@ -726,14 +1026,14 @@ var DataStore = /** @class */ (function () {
|
|
|
726
1026
|
* 1. If `this.amplifyConfig.aws_appsync_graphqlEndpoint` contains a URL,
|
|
727
1027
|
* attaches a sync engine, starts it, and subscribes.
|
|
728
1028
|
*/
|
|
729
|
-
this.start = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1029
|
+
this.start = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
730
1030
|
var _this = this;
|
|
731
|
-
return __generator(this, function (_a) {
|
|
1031
|
+
return tslib_1.__generator(this, function (_a) {
|
|
732
1032
|
return [2 /*return*/, this.runningProcesses
|
|
733
|
-
.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1033
|
+
.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
734
1034
|
var aws_appsync_graphqlEndpoint, _a, fullSyncIntervalInMilliseconds;
|
|
735
1035
|
var _this = this;
|
|
736
|
-
return __generator(this, function (_b) {
|
|
1036
|
+
return tslib_1.__generator(this, function (_b) {
|
|
737
1037
|
switch (_b.label) {
|
|
738
1038
|
case 0:
|
|
739
1039
|
this.state = DataStoreState.Starting;
|
|
@@ -807,17 +1107,21 @@ var DataStore = /** @class */ (function () {
|
|
|
807
1107
|
.catch(this.handleAddProcError('DataStore.start()'))];
|
|
808
1108
|
});
|
|
809
1109
|
}); };
|
|
810
|
-
this.query = function (modelConstructor, identifierOrCriteria, paginationProducer) { return __awaiter(_this, void 0, void 0, function () {
|
|
1110
|
+
this.query = function (modelConstructor, identifierOrCriteria, paginationProducer) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
811
1111
|
var _this = this;
|
|
812
|
-
return __generator(this, function (_a) {
|
|
1112
|
+
return tslib_1.__generator(this, function (_a) {
|
|
813
1113
|
return [2 /*return*/, this.runningProcesses
|
|
814
|
-
.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
815
|
-
var msg, modelDefinition, keyFields, predicate,
|
|
816
|
-
|
|
817
|
-
|
|
1114
|
+
.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1115
|
+
var result, msg, modelDefinition, pagination, keyFields, msg, predicate, predicate, seedPredicate, predicate, returnOne;
|
|
1116
|
+
var _a;
|
|
1117
|
+
return tslib_1.__generator(this, function (_b) {
|
|
1118
|
+
switch (_b.label) {
|
|
818
1119
|
case 0: return [4 /*yield*/, this.start()];
|
|
819
1120
|
case 1:
|
|
820
|
-
|
|
1121
|
+
_b.sent();
|
|
1122
|
+
if (!this.storage) {
|
|
1123
|
+
throw new Error('No storage to query');
|
|
1124
|
+
}
|
|
821
1125
|
//#region Input validation
|
|
822
1126
|
if (!isValidModelConstructor(modelConstructor)) {
|
|
823
1127
|
msg = 'Constructor is not for a valid model';
|
|
@@ -830,59 +1134,73 @@ var DataStore = /** @class */ (function () {
|
|
|
830
1134
|
}
|
|
831
1135
|
}
|
|
832
1136
|
modelDefinition = getModelDefinition(modelConstructor);
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
if (keyFields.length > 1) {
|
|
836
|
-
msg = util_1.errorMessages.queryByPkWithCompositeKeyPresent;
|
|
837
|
-
logger.error(msg, { keyFields: keyFields });
|
|
838
|
-
throw new Error(msg);
|
|
839
|
-
}
|
|
840
|
-
predicate = predicates_1.ModelPredicateCreator.createForSingleField(modelDefinition, keyFields[0], identifierOrCriteria);
|
|
841
|
-
}
|
|
842
|
-
else {
|
|
843
|
-
// Object is being queried using object literal syntax
|
|
844
|
-
if (types_1.isIdentifierObject(identifierOrCriteria, modelDefinition)) {
|
|
845
|
-
predicate = predicates_1.ModelPredicateCreator.createForPk(modelDefinition, identifierOrCriteria);
|
|
846
|
-
}
|
|
847
|
-
else if (predicates_1.isPredicatesAll(identifierOrCriteria)) {
|
|
848
|
-
// Predicates.ALL means "all records", so no predicate (undefined)
|
|
849
|
-
predicate = undefined;
|
|
850
|
-
}
|
|
851
|
-
else {
|
|
852
|
-
predicate = predicates_1.ModelPredicateCreator.createFromExisting(modelDefinition, identifierOrCriteria);
|
|
853
|
-
}
|
|
1137
|
+
if (!modelDefinition) {
|
|
1138
|
+
throw new Error('Invalid model definition provided!');
|
|
854
1139
|
}
|
|
855
1140
|
pagination = this.processPagination(modelDefinition, paginationProducer);
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
1141
|
+
keyFields = util_1.extractPrimaryKeyFieldNames(modelDefinition);
|
|
1142
|
+
if (!isQueryOne(identifierOrCriteria)) return [3 /*break*/, 3];
|
|
1143
|
+
if (keyFields.length > 1) {
|
|
1144
|
+
msg = util_1.errorMessages.queryByPkWithCompositeKeyPresent;
|
|
1145
|
+
logger.error(msg, { keyFields: keyFields });
|
|
1146
|
+
throw new Error(msg);
|
|
1147
|
+
}
|
|
1148
|
+
predicate = predicates_1.ModelPredicateCreator.createForSingleField(modelDefinition, keyFields[0], identifierOrCriteria);
|
|
862
1149
|
return [4 /*yield*/, this.storage.query(modelConstructor, predicate, pagination)];
|
|
863
1150
|
case 2:
|
|
864
|
-
result =
|
|
1151
|
+
result = _b.sent();
|
|
1152
|
+
return [3 /*break*/, 9];
|
|
1153
|
+
case 3:
|
|
1154
|
+
if (!types_1.isIdentifierObject(identifierOrCriteria, modelDefinition)) return [3 /*break*/, 5];
|
|
1155
|
+
predicate = predicates_1.ModelPredicateCreator.createForPk(modelDefinition, identifierOrCriteria);
|
|
1156
|
+
return [4 /*yield*/, this.storage.query(modelConstructor, predicate, pagination)];
|
|
1157
|
+
case 4:
|
|
1158
|
+
result = _b.sent();
|
|
1159
|
+
return [3 /*break*/, 9];
|
|
1160
|
+
case 5:
|
|
1161
|
+
if (!(!identifierOrCriteria ||
|
|
1162
|
+
predicates_1.isPredicatesAll(identifierOrCriteria))) return [3 /*break*/, 7];
|
|
1163
|
+
return [4 /*yield*/, ((_a = this.storage) === null || _a === void 0 ? void 0 : _a.query(modelConstructor, undefined, pagination))];
|
|
1164
|
+
case 6:
|
|
1165
|
+
result = _b.sent();
|
|
1166
|
+
return [3 /*break*/, 9];
|
|
1167
|
+
case 7:
|
|
1168
|
+
seedPredicate = next_1.recursivePredicateFor({
|
|
1169
|
+
builder: modelConstructor,
|
|
1170
|
+
schema: modelDefinition,
|
|
1171
|
+
pkField: getModelPKFieldName(modelConstructor),
|
|
1172
|
+
});
|
|
1173
|
+
predicate = next_1.internals(identifierOrCriteria(seedPredicate));
|
|
1174
|
+
return [4 /*yield*/, predicate.fetch(this.storage)];
|
|
1175
|
+
case 8:
|
|
1176
|
+
result = (_b.sent());
|
|
1177
|
+
result = util_1.inMemoryPagination(result, pagination);
|
|
1178
|
+
_b.label = 9;
|
|
1179
|
+
case 9:
|
|
865
1180
|
returnOne = isQueryOne(identifierOrCriteria) ||
|
|
866
1181
|
types_1.isIdentifierObject(identifierOrCriteria, modelDefinition);
|
|
867
|
-
return [2 /*return*/, returnOne ? result[0] : result];
|
|
1182
|
+
return [2 /*return*/, attached(returnOne ? result[0] : result, ModelAttachment.DataStore)];
|
|
868
1183
|
}
|
|
869
1184
|
});
|
|
870
1185
|
}); }, 'datastore query')
|
|
871
1186
|
.catch(this.handleAddProcError('DataStore.query()'))];
|
|
872
1187
|
});
|
|
873
1188
|
}); };
|
|
874
|
-
this.save = function (model, condition) { return __awaiter(_this, void 0, void 0, function () {
|
|
1189
|
+
this.save = function (model, condition) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
875
1190
|
var _this = this;
|
|
876
|
-
return __generator(this, function (_a) {
|
|
1191
|
+
return tslib_1.__generator(this, function (_a) {
|
|
877
1192
|
return [2 /*return*/, this.runningProcesses
|
|
878
|
-
.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
879
|
-
var patchesTuple, modelConstructor, msg, modelDefinition, producedCondition, _a, savedModel;
|
|
1193
|
+
.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1194
|
+
var patchesTuple, modelConstructor, msg, modelDefinition, modelMeta, producedCondition, _a, savedModel;
|
|
880
1195
|
var _this = this;
|
|
881
|
-
return __generator(this, function (_b) {
|
|
1196
|
+
return tslib_1.__generator(this, function (_b) {
|
|
882
1197
|
switch (_b.label) {
|
|
883
1198
|
case 0: return [4 /*yield*/, this.start()];
|
|
884
1199
|
case 1:
|
|
885
1200
|
_b.sent();
|
|
1201
|
+
if (!this.storage) {
|
|
1202
|
+
throw new Error('No storage to save to');
|
|
1203
|
+
}
|
|
886
1204
|
patchesTuple = modelPatchesMap.get(model);
|
|
887
1205
|
modelConstructor = model ? model.constructor : undefined;
|
|
888
1206
|
if (!isValidModelConstructor(modelConstructor)) {
|
|
@@ -891,20 +1209,81 @@ var DataStore = /** @class */ (function () {
|
|
|
891
1209
|
throw new Error(msg);
|
|
892
1210
|
}
|
|
893
1211
|
modelDefinition = getModelDefinition(modelConstructor);
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
1212
|
+
if (!modelDefinition) {
|
|
1213
|
+
throw new Error('Model Definition could not be found for model');
|
|
1214
|
+
}
|
|
1215
|
+
modelMeta = {
|
|
1216
|
+
builder: modelConstructor,
|
|
1217
|
+
schema: modelDefinition,
|
|
1218
|
+
pkField: util_1.extractPrimaryKeyFieldNames(modelDefinition),
|
|
1219
|
+
};
|
|
1220
|
+
return [4 /*yield*/, this.storage.runExclusive(function (s) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1221
|
+
var nonHasManyRelationships, nonHasManyRelationships_1, nonHasManyRelationships_1_1, relationship, queryObject, related, e_5_1;
|
|
1222
|
+
var e_5, _a;
|
|
1223
|
+
var _b;
|
|
1224
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1225
|
+
switch (_c.label) {
|
|
1226
|
+
case 0:
|
|
1227
|
+
nonHasManyRelationships = relationship_1.ModelRelationship.allFrom(modelMeta).filter(function (r) { return r.type === 'BELONGS_TO'; });
|
|
1228
|
+
_c.label = 1;
|
|
1229
|
+
case 1:
|
|
1230
|
+
_c.trys.push([1, 6, 7, 8]);
|
|
1231
|
+
nonHasManyRelationships_1 = tslib_1.__values(nonHasManyRelationships), nonHasManyRelationships_1_1 = nonHasManyRelationships_1.next();
|
|
1232
|
+
_c.label = 2;
|
|
1233
|
+
case 2:
|
|
1234
|
+
if (!!nonHasManyRelationships_1_1.done) return [3 /*break*/, 5];
|
|
1235
|
+
relationship = nonHasManyRelationships_1_1.value;
|
|
1236
|
+
queryObject = relationship.createRemoteQueryObject(model);
|
|
1237
|
+
if (!(queryObject !== null)) return [3 /*break*/, 4];
|
|
1238
|
+
return [4 /*yield*/, s.query(relationship.remoteModelConstructor, predicates_1.ModelPredicateCreator.createFromFlatEqualities(relationship.remoteDefinition, queryObject))];
|
|
1239
|
+
case 3:
|
|
1240
|
+
related = _c.sent();
|
|
1241
|
+
if (related.length === 0) {
|
|
1242
|
+
throw new Error([
|
|
1243
|
+
"Data integrity error. You tried to save a " + modelDefinition.name + " (" + JSON.stringify(model) + ")",
|
|
1244
|
+
"but the instance assigned to the \"" + relationship.field + "\" property",
|
|
1245
|
+
"does not exist in the local database. If you're trying to create the related",
|
|
1246
|
+
"\"" + ((_b = relationship.remoteDefinition) === null || _b === void 0 ? void 0 : _b.name) + "\", you must save it independently first.",
|
|
1247
|
+
].join(' '));
|
|
1248
|
+
}
|
|
1249
|
+
_c.label = 4;
|
|
1250
|
+
case 4:
|
|
1251
|
+
nonHasManyRelationships_1_1 = nonHasManyRelationships_1.next();
|
|
1252
|
+
return [3 /*break*/, 2];
|
|
1253
|
+
case 5: return [3 /*break*/, 8];
|
|
1254
|
+
case 6:
|
|
1255
|
+
e_5_1 = _c.sent();
|
|
1256
|
+
e_5 = { error: e_5_1 };
|
|
1257
|
+
return [3 /*break*/, 8];
|
|
1258
|
+
case 7:
|
|
1259
|
+
try {
|
|
1260
|
+
if (nonHasManyRelationships_1_1 && !nonHasManyRelationships_1_1.done && (_a = nonHasManyRelationships_1.return)) _a.call(nonHasManyRelationships_1);
|
|
1261
|
+
}
|
|
1262
|
+
finally { if (e_5) throw e_5.error; }
|
|
1263
|
+
return [7 /*endfinally*/];
|
|
1264
|
+
case 8: return [2 /*return*/];
|
|
1265
|
+
}
|
|
1266
|
+
});
|
|
1267
|
+
}); })];
|
|
1268
|
+
case 2:
|
|
1269
|
+
_b.sent();
|
|
1270
|
+
producedCondition = condition
|
|
1271
|
+
? next_1.internals(condition(next_1.predicateFor(modelMeta))).toStoragePredicate()
|
|
1272
|
+
: undefined;
|
|
1273
|
+
return [4 /*yield*/, this.storage.runExclusive(function (s) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1274
|
+
var saved;
|
|
1275
|
+
return tslib_1.__generator(this, function (_a) {
|
|
897
1276
|
switch (_a.label) {
|
|
898
1277
|
case 0: return [4 /*yield*/, s.save(model, producedCondition, undefined, patchesTuple)];
|
|
899
1278
|
case 1:
|
|
900
|
-
_a.sent();
|
|
1279
|
+
saved = _a.sent();
|
|
901
1280
|
return [2 /*return*/, s.query(modelConstructor, predicates_1.ModelPredicateCreator.createForPk(modelDefinition, model))];
|
|
902
1281
|
}
|
|
903
1282
|
});
|
|
904
1283
|
}); })];
|
|
905
|
-
case
|
|
906
|
-
_a = __read.apply(void 0, [_b.sent(), 1]), savedModel = _a[0];
|
|
907
|
-
return [2 /*return*/, savedModel];
|
|
1284
|
+
case 3:
|
|
1285
|
+
_a = tslib_1.__read.apply(void 0, [_b.sent(), 1]), savedModel = _a[0];
|
|
1286
|
+
return [2 /*return*/, attached(savedModel, ModelAttachment.DataStore)];
|
|
908
1287
|
}
|
|
909
1288
|
});
|
|
910
1289
|
}); }, 'datastore save')
|
|
@@ -937,17 +1316,20 @@ var DataStore = /** @class */ (function () {
|
|
|
937
1316
|
}
|
|
938
1317
|
return _this.errorHandler || defaultErrorHandler;
|
|
939
1318
|
};
|
|
940
|
-
this.delete = function (modelOrConstructor, identifierOrCriteria) { return __awaiter(_this, void 0, void 0, function () {
|
|
1319
|
+
this.delete = function (modelOrConstructor, identifierOrCriteria) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
941
1320
|
var _this = this;
|
|
942
|
-
return __generator(this, function (_a) {
|
|
1321
|
+
return tslib_1.__generator(this, function (_a) {
|
|
943
1322
|
return [2 /*return*/, this.runningProcesses
|
|
944
|
-
.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1323
|
+
.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
945
1324
|
var condition, msg, modelConstructor, msg, modelDefinition, keyFields, msg, msg, _a, deleted, model, modelConstructor, msg, modelDefinition, pkPredicate, msg, _b, _c, deleted;
|
|
946
|
-
return __generator(this, function (_d) {
|
|
1325
|
+
return tslib_1.__generator(this, function (_d) {
|
|
947
1326
|
switch (_d.label) {
|
|
948
1327
|
case 0: return [4 /*yield*/, this.start()];
|
|
949
1328
|
case 1:
|
|
950
1329
|
_d.sent();
|
|
1330
|
+
if (!this.storage) {
|
|
1331
|
+
throw new Error('No storage to delete from');
|
|
1332
|
+
}
|
|
951
1333
|
if (!modelOrConstructor) {
|
|
952
1334
|
msg = 'Model or Model Constructor required';
|
|
953
1335
|
logger.error(msg, { modelOrConstructor: modelOrConstructor });
|
|
@@ -961,6 +1343,9 @@ var DataStore = /** @class */ (function () {
|
|
|
961
1343
|
throw new Error(msg);
|
|
962
1344
|
}
|
|
963
1345
|
modelDefinition = getModelDefinition(modelConstructor);
|
|
1346
|
+
if (!modelDefinition) {
|
|
1347
|
+
throw new Error('Could not find model definition for modelConstructor.');
|
|
1348
|
+
}
|
|
964
1349
|
if (typeof identifierOrCriteria === 'string') {
|
|
965
1350
|
keyFields = util_1.extractPrimaryKeyFieldNames(modelDefinition);
|
|
966
1351
|
if (keyFields.length > 1) {
|
|
@@ -968,19 +1353,18 @@ var DataStore = /** @class */ (function () {
|
|
|
968
1353
|
logger.error(msg, { keyFields: keyFields });
|
|
969
1354
|
throw new Error(msg);
|
|
970
1355
|
}
|
|
971
|
-
condition = predicates_1.ModelPredicateCreator.createForSingleField(
|
|
1356
|
+
condition = predicates_1.ModelPredicateCreator.createForSingleField(modelDefinition, keyFields[0], identifierOrCriteria);
|
|
972
1357
|
}
|
|
973
1358
|
else {
|
|
974
1359
|
if (types_1.isIdentifierObject(identifierOrCriteria, modelDefinition)) {
|
|
975
1360
|
condition = predicates_1.ModelPredicateCreator.createForPk(modelDefinition, identifierOrCriteria);
|
|
976
1361
|
}
|
|
977
1362
|
else {
|
|
978
|
-
condition =
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
identifierOrCriteria);
|
|
1363
|
+
condition = next_1.internals(identifierOrCriteria(next_1.predicateFor({
|
|
1364
|
+
builder: modelConstructor,
|
|
1365
|
+
schema: modelDefinition,
|
|
1366
|
+
pkField: util_1.extractPrimaryKeyFieldNames(modelDefinition),
|
|
1367
|
+
}))).toStoragePredicate();
|
|
984
1368
|
}
|
|
985
1369
|
if (!condition ||
|
|
986
1370
|
!predicates_1.ModelPredicateCreator.isValidPredicate(condition)) {
|
|
@@ -991,8 +1375,8 @@ var DataStore = /** @class */ (function () {
|
|
|
991
1375
|
}
|
|
992
1376
|
return [4 /*yield*/, this.storage.delete(modelConstructor, condition)];
|
|
993
1377
|
case 2:
|
|
994
|
-
_a = __read.apply(void 0, [_d.sent(), 1]), deleted = _a[0];
|
|
995
|
-
return [2 /*return*/, deleted];
|
|
1378
|
+
_a = tslib_1.__read.apply(void 0, [_d.sent(), 1]), deleted = _a[0];
|
|
1379
|
+
return [2 /*return*/, attached(deleted, ModelAttachment.DataStore)];
|
|
996
1380
|
case 3:
|
|
997
1381
|
model = modelOrConstructor;
|
|
998
1382
|
modelConstructor = Object.getPrototypeOf(model || {})
|
|
@@ -1003,6 +1387,9 @@ var DataStore = /** @class */ (function () {
|
|
|
1003
1387
|
throw new Error(msg);
|
|
1004
1388
|
}
|
|
1005
1389
|
modelDefinition = getModelDefinition(modelConstructor);
|
|
1390
|
+
if (!modelDefinition) {
|
|
1391
|
+
throw new Error('Could not find model definition for modelConstructor.');
|
|
1392
|
+
}
|
|
1006
1393
|
pkPredicate = predicates_1.ModelPredicateCreator.createForPk(modelDefinition, model);
|
|
1007
1394
|
if (identifierOrCriteria) {
|
|
1008
1395
|
if (typeof identifierOrCriteria !== 'function') {
|
|
@@ -1010,15 +1397,19 @@ var DataStore = /** @class */ (function () {
|
|
|
1010
1397
|
logger.error(msg, { identifierOrCriteria: identifierOrCriteria });
|
|
1011
1398
|
throw new Error(msg);
|
|
1012
1399
|
}
|
|
1013
|
-
condition = identifierOrCriteria(
|
|
1400
|
+
condition = next_1.internals(identifierOrCriteria(next_1.predicateFor({
|
|
1401
|
+
builder: modelConstructor,
|
|
1402
|
+
schema: modelDefinition,
|
|
1403
|
+
pkField: util_1.extractPrimaryKeyFieldNames(modelDefinition),
|
|
1404
|
+
}))).toStoragePredicate(pkPredicate);
|
|
1014
1405
|
}
|
|
1015
1406
|
else {
|
|
1016
1407
|
condition = pkPredicate;
|
|
1017
1408
|
}
|
|
1018
1409
|
return [4 /*yield*/, this.storage.delete(model, condition)];
|
|
1019
1410
|
case 4:
|
|
1020
|
-
_b = __read.apply(void 0, [_d.sent(), 1]), _c = __read(_b[0], 1), deleted = _c[0];
|
|
1021
|
-
return [2 /*return*/, deleted];
|
|
1411
|
+
_b = tslib_1.__read.apply(void 0, [_d.sent(), 1]), _c = tslib_1.__read(_b[0], 1), deleted = _c[0];
|
|
1412
|
+
return [2 /*return*/, attached(deleted, ModelAttachment.DataStore)];
|
|
1022
1413
|
}
|
|
1023
1414
|
});
|
|
1024
1415
|
}); }, 'datastore delete')
|
|
@@ -1026,7 +1417,7 @@ var DataStore = /** @class */ (function () {
|
|
|
1026
1417
|
});
|
|
1027
1418
|
}); };
|
|
1028
1419
|
this.observe = function (modelOrConstructor, identifierOrCriteria) {
|
|
1029
|
-
var
|
|
1420
|
+
var executivePredicate;
|
|
1030
1421
|
var modelConstructor = modelOrConstructor && isValidModelConstructor(modelOrConstructor)
|
|
1031
1422
|
? modelOrConstructor
|
|
1032
1423
|
: undefined;
|
|
@@ -1066,35 +1457,26 @@ var DataStore = /** @class */ (function () {
|
|
|
1066
1457
|
logger.error(msg, { modelConstructor: modelConstructor });
|
|
1067
1458
|
throw new Error(msg);
|
|
1068
1459
|
}
|
|
1069
|
-
if (typeof identifierOrCriteria === 'string') {
|
|
1070
|
-
var
|
|
1071
|
-
|
|
1072
|
-
predicate = predicates_1.ModelPredicateCreator.createForSingleField(getModelDefinition(modelConstructor), keyField, identifierOrCriteria);
|
|
1460
|
+
if (modelConstructor && typeof identifierOrCriteria === 'string') {
|
|
1461
|
+
var buildIdPredicate = function (seed) { return seed.id.eq(identifierOrCriteria); };
|
|
1462
|
+
executivePredicate = next_1.internals(buildIdPredicate(buildSeedPredicate(modelConstructor)));
|
|
1073
1463
|
}
|
|
1074
|
-
else {
|
|
1075
|
-
|
|
1076
|
-
predicate = undefined;
|
|
1077
|
-
}
|
|
1078
|
-
else {
|
|
1079
|
-
predicate =
|
|
1080
|
-
modelConstructor &&
|
|
1081
|
-
predicates_1.ModelPredicateCreator.createFromExisting(getModelDefinition(modelConstructor), identifierOrCriteria);
|
|
1082
|
-
}
|
|
1464
|
+
else if (modelConstructor && typeof identifierOrCriteria === 'function') {
|
|
1465
|
+
executivePredicate = next_1.internals(identifierOrCriteria(buildSeedPredicate(modelConstructor)));
|
|
1083
1466
|
}
|
|
1084
1467
|
return new zen_observable_ts_1.default(function (observer) {
|
|
1085
|
-
var
|
|
1468
|
+
var source;
|
|
1086
1469
|
_this.runningProcesses
|
|
1087
|
-
.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1470
|
+
.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1088
1471
|
var _this = this;
|
|
1089
|
-
return __generator(this, function (_a) {
|
|
1472
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1090
1473
|
switch (_a.label) {
|
|
1091
1474
|
case 0: return [4 /*yield*/, this.start()];
|
|
1092
1475
|
case 1:
|
|
1093
1476
|
_a.sent();
|
|
1094
1477
|
// Filter the events returned by Storage according to namespace,
|
|
1095
1478
|
// append original element data, and subscribe to the observable
|
|
1096
|
-
|
|
1097
|
-
.observe(modelConstructor, predicate)
|
|
1479
|
+
source = this.storage.observe(modelConstructor)
|
|
1098
1480
|
.filter(function (_a) {
|
|
1099
1481
|
var model = _a.model;
|
|
1100
1482
|
return namespaceResolver(model) === util_1.USER;
|
|
@@ -1102,10 +1484,10 @@ var DataStore = /** @class */ (function () {
|
|
|
1102
1484
|
.subscribe({
|
|
1103
1485
|
next: function (item) {
|
|
1104
1486
|
return _this.runningProcesses.isOpen &&
|
|
1105
|
-
_this.runningProcesses.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1106
|
-
var message, modelDefinition, keyFields, primaryKeysAndValues, freshElement;
|
|
1107
|
-
return __generator(this, function (
|
|
1108
|
-
switch (
|
|
1487
|
+
_this.runningProcesses.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1488
|
+
var message, modelDefinition, keyFields, primaryKeysAndValues, freshElement, _a;
|
|
1489
|
+
return tslib_1.__generator(this, function (_b) {
|
|
1490
|
+
switch (_b.label) {
|
|
1109
1491
|
case 0:
|
|
1110
1492
|
message = item;
|
|
1111
1493
|
if (!(item.opType !== 'DELETE')) return [3 /*break*/, 2];
|
|
@@ -1114,11 +1496,20 @@ var DataStore = /** @class */ (function () {
|
|
|
1114
1496
|
primaryKeysAndValues = util_1.extractPrimaryKeysAndValues(item.element, keyFields);
|
|
1115
1497
|
return [4 /*yield*/, this.query(item.model, primaryKeysAndValues)];
|
|
1116
1498
|
case 1:
|
|
1117
|
-
freshElement =
|
|
1118
|
-
message = __assign(__assign({}, message), { element: freshElement });
|
|
1119
|
-
|
|
1499
|
+
freshElement = _b.sent();
|
|
1500
|
+
message = tslib_1.__assign(tslib_1.__assign({}, message), { element: freshElement });
|
|
1501
|
+
_b.label = 2;
|
|
1120
1502
|
case 2:
|
|
1121
|
-
|
|
1503
|
+
_a = !executivePredicate;
|
|
1504
|
+
if (_a) return [3 /*break*/, 4];
|
|
1505
|
+
return [4 /*yield*/, executivePredicate.matches(message.element)];
|
|
1506
|
+
case 3:
|
|
1507
|
+
_a = (_b.sent());
|
|
1508
|
+
_b.label = 4;
|
|
1509
|
+
case 4:
|
|
1510
|
+
if (_a) {
|
|
1511
|
+
observer.next(message);
|
|
1512
|
+
}
|
|
1122
1513
|
return [2 /*return*/];
|
|
1123
1514
|
}
|
|
1124
1515
|
});
|
|
@@ -1138,10 +1529,10 @@ var DataStore = /** @class */ (function () {
|
|
|
1138
1529
|
// better than no cleaner, but if the subscriber is handling the
|
|
1139
1530
|
// complete() message async and not registering with the context,
|
|
1140
1531
|
// this will still be problematic.
|
|
1141
|
-
return _this.runningProcesses.addCleaner(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1142
|
-
return __generator(this, function (_a) {
|
|
1143
|
-
if (
|
|
1144
|
-
|
|
1532
|
+
return _this.runningProcesses.addCleaner(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1533
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1534
|
+
if (source) {
|
|
1535
|
+
source.unsubscribe();
|
|
1145
1536
|
}
|
|
1146
1537
|
return [2 /*return*/];
|
|
1147
1538
|
});
|
|
@@ -1154,7 +1545,8 @@ var DataStore = /** @class */ (function () {
|
|
|
1154
1545
|
var itemsChanged = new Map();
|
|
1155
1546
|
var deletedItemIds = [];
|
|
1156
1547
|
var handle;
|
|
1157
|
-
|
|
1548
|
+
// let predicate: ModelPredicate<T> | undefined;
|
|
1549
|
+
var executivePredicate;
|
|
1158
1550
|
/**
|
|
1159
1551
|
* As the name suggests, this geneates a snapshot in the form of
|
|
1160
1552
|
* `{items: T[], isSynced: boolean}`
|
|
@@ -1179,26 +1571,20 @@ var DataStore = /** @class */ (function () {
|
|
|
1179
1571
|
var sort = (options || {}).sort;
|
|
1180
1572
|
var sortOptions = sort ? { sort: sort } : undefined;
|
|
1181
1573
|
var modelDefinition = getModelDefinition(model);
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
predicate = predicates_1.ModelPredicateCreator.createForSingleField(modelDefinition, keyFields[0], criteria);
|
|
1574
|
+
if (!modelDefinition) {
|
|
1575
|
+
throw new Error('Could not find model definition.');
|
|
1185
1576
|
}
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
else {
|
|
1192
|
-
predicate = predicates_1.ModelPredicateCreator.createFromExisting(modelDefinition, criteria);
|
|
1193
|
-
}
|
|
1577
|
+
if (model && typeof criteria === 'function') {
|
|
1578
|
+
executivePredicate = next_1.internals(criteria(buildSeedPredicate(model)));
|
|
1579
|
+
}
|
|
1580
|
+
else if (predicates_1.isPredicatesAll(criteria)) {
|
|
1581
|
+
executivePredicate = undefined;
|
|
1194
1582
|
}
|
|
1195
|
-
var _a = predicates_1.ModelPredicateCreator.getPredicates(predicate, false) || {}, predicates = _a.predicates, predicateGroupType = _a.type;
|
|
1196
|
-
var hasPredicate = !!predicates;
|
|
1197
1583
|
_this.runningProcesses
|
|
1198
|
-
.add(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1584
|
+
.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1199
1585
|
var err_1;
|
|
1200
1586
|
var _this = this;
|
|
1201
|
-
return __generator(this, function (_a) {
|
|
1587
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1202
1588
|
switch (_a.label) {
|
|
1203
1589
|
case 0:
|
|
1204
1590
|
_a.trys.push([0, 2, , 3]);
|
|
@@ -1216,42 +1602,58 @@ var DataStore = /** @class */ (function () {
|
|
|
1216
1602
|
// We need to explicitly remove those items from the existing snapshot.
|
|
1217
1603
|
handle = this.observe(model).subscribe(function (_a) {
|
|
1218
1604
|
var element = _a.element, model = _a.model, opType = _a.opType;
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1605
|
+
return _this.runningProcesses.isOpen &&
|
|
1606
|
+
_this.runningProcesses.add(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1607
|
+
var itemModelDefinition, idOrPk, _a, isSynced, limit;
|
|
1608
|
+
var _b, _c;
|
|
1609
|
+
return tslib_1.__generator(this, function (_d) {
|
|
1610
|
+
switch (_d.label) {
|
|
1611
|
+
case 0:
|
|
1612
|
+
itemModelDefinition = getModelDefinition(model);
|
|
1613
|
+
idOrPk = utils_1.getIdentifierValue(itemModelDefinition, element);
|
|
1614
|
+
_a = executivePredicate;
|
|
1615
|
+
if (!_a) return [3 /*break*/, 2];
|
|
1616
|
+
return [4 /*yield*/, executivePredicate.matches(element)];
|
|
1617
|
+
case 1:
|
|
1618
|
+
_a = !(_d.sent());
|
|
1619
|
+
_d.label = 2;
|
|
1620
|
+
case 2:
|
|
1621
|
+
if (_a) {
|
|
1622
|
+
if (opType === 'UPDATE' &&
|
|
1623
|
+
(items.has(idOrPk) || itemsChanged.has(idOrPk))) {
|
|
1624
|
+
// tracking as a "deleted item" will include the item in
|
|
1625
|
+
// page limit calculations and ensure it is removed from the
|
|
1626
|
+
// final items collection, regardless of which collection(s)
|
|
1627
|
+
// it is currently in. (I mean, it could be in both, right!?)
|
|
1628
|
+
deletedItemIds.push(idOrPk);
|
|
1629
|
+
}
|
|
1630
|
+
else {
|
|
1631
|
+
// ignore updates for irrelevant/filtered items.
|
|
1632
|
+
return [2 /*return*/];
|
|
1633
|
+
}
|
|
1634
|
+
}
|
|
1635
|
+
// Flag items which have been recently deleted
|
|
1636
|
+
// NOTE: Merging of separate operations to the same model instance is handled upstream
|
|
1637
|
+
// in the `mergePage` method within src/sync/merger.ts. The final state of a model instance
|
|
1638
|
+
// depends on the LATEST record (for a given id).
|
|
1639
|
+
if (opType === 'DELETE') {
|
|
1640
|
+
deletedItemIds.push(idOrPk);
|
|
1641
|
+
}
|
|
1642
|
+
else {
|
|
1643
|
+
itemsChanged.set(idOrPk, element);
|
|
1644
|
+
}
|
|
1645
|
+
isSynced = (_c = (_b = this.sync) === null || _b === void 0 ? void 0 : _b.getModelSyncedStatus(model)) !== null && _c !== void 0 ? _c : false;
|
|
1646
|
+
limit = itemsChanged.size - deletedItemIds.length >=
|
|
1647
|
+
this.syncPageSize;
|
|
1648
|
+
if (limit || isSynced) {
|
|
1649
|
+
limitTimerRace.resolve();
|
|
1650
|
+
}
|
|
1651
|
+
// kicks off every subsequent race as results sync down
|
|
1652
|
+
limitTimerRace.start();
|
|
1653
|
+
return [2 /*return*/];
|
|
1654
|
+
}
|
|
1655
|
+
});
|
|
1656
|
+
}); }, 'handle observeQuery observed event');
|
|
1255
1657
|
});
|
|
1256
1658
|
// returns a set of initial/locally-available results
|
|
1257
1659
|
generateAndEmitSnapshot();
|
|
@@ -1277,7 +1679,7 @@ var DataStore = /** @class */ (function () {
|
|
|
1277
1679
|
var generateSnapshot = function () {
|
|
1278
1680
|
var _a, _b;
|
|
1279
1681
|
var isSynced = (_b = (_a = _this.sync) === null || _a === void 0 ? void 0 : _a.getModelSyncedStatus(model)) !== null && _b !== void 0 ? _b : false;
|
|
1280
|
-
var itemsArray = __spread(Array.from(items.values()), Array.from(itemsChanged.values()));
|
|
1682
|
+
var itemsArray = tslib_1.__spread(Array.from(items.values()), Array.from(itemsChanged.values()));
|
|
1281
1683
|
if (options === null || options === void 0 ? void 0 : options.sort) {
|
|
1282
1684
|
sortItems(itemsArray);
|
|
1283
1685
|
}
|
|
@@ -1344,8 +1746,8 @@ var DataStore = /** @class */ (function () {
|
|
|
1344
1746
|
}
|
|
1345
1747
|
};
|
|
1346
1748
|
core_1.Hub.listen('datastore', hubCallback);
|
|
1347
|
-
return _this.runningProcesses.addCleaner(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1348
|
-
return __generator(this, function (_a) {
|
|
1749
|
+
return _this.runningProcesses.addCleaner(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1750
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1349
1751
|
if (handle) {
|
|
1350
1752
|
handle.unsubscribe();
|
|
1351
1753
|
}
|
|
@@ -1359,8 +1761,8 @@ var DataStore = /** @class */ (function () {
|
|
|
1359
1761
|
_this.amplifyContext.Auth = _this.Auth;
|
|
1360
1762
|
_this.amplifyContext.API = _this.API;
|
|
1361
1763
|
_this.amplifyContext.Cache = _this.Cache;
|
|
1362
|
-
var configDataStore = config.DataStore, configAuthModeStrategyType = config.authModeStrategyType, configConflictHandler = config.conflictHandler, configErrorHandler = config.errorHandler, configMaxRecordsToSync = config.maxRecordsToSync, configSyncPageSize = config.syncPageSize, configFullSyncInterval = config.fullSyncInterval, configSyncExpressions = config.syncExpressions, configAuthProviders = config.authProviders, configStorageAdapter = config.storageAdapter, configFromAmplify = __rest(config, ["DataStore", "authModeStrategyType", "conflictHandler", "errorHandler", "maxRecordsToSync", "syncPageSize", "fullSyncInterval", "syncExpressions", "authProviders", "storageAdapter"]);
|
|
1363
|
-
_this.amplifyConfig = __assign(__assign({}, configFromAmplify), _this.amplifyConfig);
|
|
1764
|
+
var configDataStore = config.DataStore, configAuthModeStrategyType = config.authModeStrategyType, configConflictHandler = config.conflictHandler, configErrorHandler = config.errorHandler, configMaxRecordsToSync = config.maxRecordsToSync, configSyncPageSize = config.syncPageSize, configFullSyncInterval = config.fullSyncInterval, configSyncExpressions = config.syncExpressions, configAuthProviders = config.authProviders, configStorageAdapter = config.storageAdapter, configFromAmplify = tslib_1.__rest(config, ["DataStore", "authModeStrategyType", "conflictHandler", "errorHandler", "maxRecordsToSync", "syncPageSize", "fullSyncInterval", "syncExpressions", "authProviders", "storageAdapter"]);
|
|
1765
|
+
_this.amplifyConfig = tslib_1.__assign(tslib_1.__assign({}, configFromAmplify), _this.amplifyConfig);
|
|
1364
1766
|
_this.conflictHandler = _this.setConflictHandler(config);
|
|
1365
1767
|
_this.errorHandler = _this.setErrorHandler(config);
|
|
1366
1768
|
var authModeStrategyType = (configDataStore && configDataStore.authModeStrategyType) ||
|
|
@@ -1453,8 +1855,8 @@ var DataStore = /** @class */ (function () {
|
|
|
1453
1855
|
* DataStore, such as `query()`, `save()`, or `delete()`.
|
|
1454
1856
|
*/
|
|
1455
1857
|
DataStore.prototype.clear = function () {
|
|
1456
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1457
|
-
return __generator(this, function (_a) {
|
|
1858
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1859
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1458
1860
|
switch (_a.label) {
|
|
1459
1861
|
case 0:
|
|
1460
1862
|
checkSchemaInitialized();
|
|
@@ -1501,8 +1903,8 @@ var DataStore = /** @class */ (function () {
|
|
|
1501
1903
|
* running queries and terminates subscriptions."
|
|
1502
1904
|
*/
|
|
1503
1905
|
DataStore.prototype.stop = function () {
|
|
1504
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1505
|
-
return __generator(this, function (_a) {
|
|
1906
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1907
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1506
1908
|
switch (_a.label) {
|
|
1507
1909
|
case 0:
|
|
1508
1910
|
this.state = DataStoreState.Stopping;
|
|
@@ -1562,7 +1964,7 @@ var DataStore = /** @class */ (function () {
|
|
|
1562
1964
|
}
|
|
1563
1965
|
}
|
|
1564
1966
|
if (sort) {
|
|
1565
|
-
sortPredicate = predicates_1.ModelSortPredicateCreator.createFromExisting(modelDefinition,
|
|
1967
|
+
sortPredicate = predicates_1.ModelSortPredicateCreator.createFromExisting(modelDefinition, sort);
|
|
1566
1968
|
}
|
|
1567
1969
|
return {
|
|
1568
1970
|
limit: limit,
|
|
@@ -1575,18 +1977,18 @@ var DataStore = /** @class */ (function () {
|
|
|
1575
1977
|
* SchemaModel -> predicate to use during sync.
|
|
1576
1978
|
*/
|
|
1577
1979
|
DataStore.prototype.processSyncExpressions = function () {
|
|
1578
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1980
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1579
1981
|
var syncPredicates;
|
|
1580
1982
|
var _this = this;
|
|
1581
|
-
return __generator(this, function (_a) {
|
|
1983
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1582
1984
|
switch (_a.label) {
|
|
1583
1985
|
case 0:
|
|
1584
1986
|
if (!this.syncExpressions || !this.syncExpressions.length) {
|
|
1585
1987
|
return [2 /*return*/, new WeakMap()];
|
|
1586
1988
|
}
|
|
1587
|
-
return [4 /*yield*/, Promise.all(this.syncExpressions.map(function (syncExpression) { return __awaiter(_this, void 0, void 0, function () {
|
|
1989
|
+
return [4 /*yield*/, Promise.all(this.syncExpressions.map(function (syncExpression) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
1588
1990
|
var _a, modelConstructor, conditionProducer, modelDefinition, condition, predicate;
|
|
1589
|
-
return __generator(this, function (_b) {
|
|
1991
|
+
return tslib_1.__generator(this, function (_b) {
|
|
1590
1992
|
switch (_b.label) {
|
|
1591
1993
|
case 0: return [4 /*yield*/, syncExpression];
|
|
1592
1994
|
case 1:
|
|
@@ -1598,7 +2000,11 @@ var DataStore = /** @class */ (function () {
|
|
|
1598
2000
|
if (predicates_1.isPredicatesAll(condition)) {
|
|
1599
2001
|
return [2 /*return*/, [modelDefinition, null]];
|
|
1600
2002
|
}
|
|
1601
|
-
predicate =
|
|
2003
|
+
predicate = next_1.internals(condition(next_1.predicateFor({
|
|
2004
|
+
builder: modelConstructor,
|
|
2005
|
+
schema: modelDefinition,
|
|
2006
|
+
pkField: util_1.extractPrimaryKeyFieldNames(modelDefinition),
|
|
2007
|
+
}))).toStoragePredicate();
|
|
1602
2008
|
return [2 /*return*/, [modelDefinition, predicate]];
|
|
1603
2009
|
}
|
|
1604
2010
|
});
|
|
@@ -1620,16 +2026,16 @@ var DataStore = /** @class */ (function () {
|
|
|
1620
2026
|
}
|
|
1621
2027
|
};
|
|
1622
2028
|
DataStore.prototype.unwrapPromise = function (conditionProducer) {
|
|
1623
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2029
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1624
2030
|
var condition, error_1;
|
|
1625
|
-
return __generator(this, function (_a) {
|
|
2031
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1626
2032
|
switch (_a.label) {
|
|
1627
2033
|
case 0:
|
|
1628
2034
|
_a.trys.push([0, 2, , 3]);
|
|
1629
2035
|
return [4 /*yield*/, conditionProducer()];
|
|
1630
2036
|
case 1:
|
|
1631
2037
|
condition = _a.sent();
|
|
1632
|
-
return [2 /*return*/, condition];
|
|
2038
|
+
return [2 /*return*/, condition || conditionProducer];
|
|
1633
2039
|
case 2:
|
|
1634
2040
|
error_1 = _a.sent();
|
|
1635
2041
|
if (error_1 instanceof TypeError) {
|
|
@@ -1643,7 +2049,7 @@ var DataStore = /** @class */ (function () {
|
|
|
1643
2049
|
};
|
|
1644
2050
|
DataStore.prototype.weakMapFromEntries = function (entries) {
|
|
1645
2051
|
return entries.reduce(function (map, _a) {
|
|
1646
|
-
var _b = __read(_a, 2), modelDefinition = _b[0], predicate = _b[1];
|
|
2052
|
+
var _b = tslib_1.__read(_a, 2), modelDefinition = _b[0], predicate = _b[1];
|
|
1647
2053
|
if (map.has(modelDefinition)) {
|
|
1648
2054
|
var name_2 = modelDefinition.name;
|
|
1649
2055
|
logger.warn("You can only utilize one Sync Expression per model.\n Subsequent sync expressions for the " + name_2 + " model will be ignored.");
|
|
@@ -1665,7 +2071,7 @@ var DataStore = /** @class */ (function () {
|
|
|
1665
2071
|
if (sessionId) {
|
|
1666
2072
|
var aws_appsync_graphqlEndpoint = this.amplifyConfig.aws_appsync_graphqlEndpoint;
|
|
1667
2073
|
var appSyncUrl = aws_appsync_graphqlEndpoint.split('/')[2];
|
|
1668
|
-
var _a = __read(appSyncUrl.split('.'), 1), appSyncId = _a[0];
|
|
2074
|
+
var _a = tslib_1.__read(appSyncUrl.split('.'), 1), appSyncId = _a[0];
|
|
1669
2075
|
return sessionId + "-" + appSyncId;
|
|
1670
2076
|
}
|
|
1671
2077
|
}
|