relay-runtime 7.0.0 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/handlers/RelayDefaultHandlerProvider.js.flow +34 -0
- package/handlers/connection/ConnectionHandler.js.flow +549 -0
- package/handlers/connection/ConnectionInterface.js.flow +92 -0
- package/index.js +1 -1
- package/index.js.flow +314 -0
- package/lib/handlers/RelayDefaultHandlerProvider.js +3 -2
- package/lib/handlers/connection/{RelayConnectionHandler.js → ConnectionHandler.js} +34 -35
- package/lib/handlers/connection/{RelayConnectionInterface.js → ConnectionInterface.js} +3 -30
- package/lib/index.js +29 -27
- package/lib/mutations/RelayDeclarativeMutationConfig.js +30 -52
- package/lib/mutations/RelayRecordProxy.js +6 -3
- package/lib/mutations/RelayRecordSourceMutator.js +3 -9
- package/lib/mutations/RelayRecordSourceProxy.js +21 -24
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -14
- package/lib/mutations/applyOptimisticMutation.js +2 -1
- package/lib/mutations/commitLocalUpdate.js +1 -0
- package/lib/mutations/commitMutation.js +26 -8
- package/lib/mutations/validateMutation.js +21 -11
- package/lib/network/ConvertToExecuteFunction.js +1 -0
- package/lib/network/RelayNetwork.js +1 -0
- package/lib/network/RelayNetworkTypes.js +1 -0
- package/lib/network/RelayObservable.js +10 -9
- package/lib/network/RelayQueryResponseCache.js +9 -7
- package/lib/query/{RelayModernGraphQLTag.js → GraphQLTag.js} +15 -8
- package/lib/query/fetchQuery.js +2 -1
- package/lib/query/fetchQueryInternal.js +30 -20
- package/lib/store/ClientID.js +1 -0
- package/lib/store/DataChecker.js +47 -97
- package/lib/store/RelayConcreteVariables.js +7 -2
- package/lib/store/RelayModernEnvironment.js +82 -41
- package/lib/store/RelayModernFragmentSpecResolver.js +61 -21
- package/lib/store/RelayModernOperationDescriptor.js +2 -1
- package/lib/store/RelayModernQueryExecutor.js +476 -333
- package/lib/store/RelayModernRecord.js +39 -9
- package/lib/store/RelayModernSelector.js +2 -1
- package/lib/store/RelayModernStore.js +359 -371
- package/lib/store/RelayOperationTracker.js +36 -78
- package/lib/store/RelayOptimisticRecordSource.js +8 -5
- package/lib/store/RelayPublishQueue.js +66 -53
- package/lib/store/RelayReader.js +2 -24
- package/lib/store/RelayRecordSource.js +3 -9
- package/lib/store/RelayRecordSourceMapImpl.js +14 -18
- package/lib/store/RelayRecordState.js +1 -0
- package/lib/store/RelayReferenceMarker.js +8 -58
- package/lib/store/RelayResponseNormalizer.js +15 -144
- package/lib/store/RelayStoreTypes.js +1 -0
- package/lib/store/RelayStoreUtils.js +34 -10
- package/lib/store/StoreInspector.js +11 -5
- package/lib/store/ViewerPattern.js +1 -0
- package/lib/store/cloneRelayHandleSourceField.js +1 -0
- package/lib/store/createFragmentSpecResolver.js +1 -0
- package/lib/store/createRelayContext.js +1 -0
- package/lib/store/defaultGetDataID.js +1 -0
- package/lib/store/hasOverlappingIDs.js +1 -0
- package/lib/store/isRelayModernEnvironment.js +1 -0
- package/lib/store/normalizeRelayPayload.js +8 -4
- package/lib/store/readInlineData.js +2 -1
- package/lib/subscription/requestSubscription.js +6 -3
- package/lib/util/JSResourceTypes.flow.js +12 -0
- package/lib/util/NormalizationNode.js +1 -0
- package/lib/util/ReaderNode.js +1 -0
- package/lib/util/RelayConcreteNode.js +3 -0
- package/lib/util/RelayDefaultHandleKey.js +1 -0
- package/lib/util/RelayError.js +2 -1
- package/lib/util/RelayFeatureFlags.js +3 -2
- package/lib/util/RelayProfiler.js +1 -0
- package/lib/util/RelayReplaySubject.js +2 -3
- package/lib/util/RelayRuntimeTypes.js +1 -0
- package/lib/util/createPayloadFor3DField.js +34 -0
- package/lib/util/deepFreeze.js +1 -0
- package/lib/util/generateID.js +1 -0
- package/lib/util/getFragmentIdentifier.js +1 -0
- package/lib/util/getRelayHandleKey.js +1 -0
- package/lib/util/getRequestIdentifier.js +1 -0
- package/lib/util/isPromise.js +1 -0
- package/lib/util/isScalarAndEqual.js +1 -0
- package/lib/util/recycleNodesInto.js +1 -0
- package/lib/util/resolveImmediate.js +1 -0
- package/lib/util/stableCopy.js +1 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
- package/mutations/RelayRecordProxy.js.flow +165 -0
- package/mutations/RelayRecordSourceMutator.js.flow +238 -0
- package/mutations/RelayRecordSourceProxy.js.flow +164 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
- package/mutations/applyOptimisticMutation.js.flow +76 -0
- package/mutations/commitLocalUpdate.js.flow +24 -0
- package/mutations/commitMutation.js.flow +184 -0
- package/mutations/validateMutation.js.flow +211 -0
- package/network/ConvertToExecuteFunction.js.flow +49 -0
- package/network/RelayNetwork.js.flow +84 -0
- package/network/RelayNetworkTypes.js.flow +123 -0
- package/network/RelayObservable.js.flow +634 -0
- package/network/RelayQueryResponseCache.js.flow +111 -0
- package/package.json +1 -1
- package/query/GraphQLTag.js.flow +166 -0
- package/query/fetchQuery.js.flow +47 -0
- package/query/fetchQueryInternal.js.flow +349 -0
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +43 -0
- package/store/DataChecker.js.flow +426 -0
- package/store/RelayConcreteVariables.js.flow +96 -0
- package/store/RelayModernEnvironment.js.flow +526 -0
- package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
- package/store/RelayModernOperationDescriptor.js.flow +88 -0
- package/store/RelayModernQueryExecutor.js.flow +1327 -0
- package/store/RelayModernRecord.js.flow +403 -0
- package/store/RelayModernSelector.js.flow +444 -0
- package/store/RelayModernStore.js.flow +757 -0
- package/store/RelayOperationTracker.js.flow +164 -0
- package/store/RelayOptimisticRecordSource.js.flow +119 -0
- package/store/RelayPublishQueue.js.flow +401 -0
- package/store/RelayReader.js.flow +376 -0
- package/store/RelayRecordSource.js.flow +29 -0
- package/store/RelayRecordSourceMapImpl.js.flow +87 -0
- package/store/RelayRecordState.js.flow +37 -0
- package/store/RelayReferenceMarker.js.flow +236 -0
- package/store/RelayResponseNormalizer.js.flow +556 -0
- package/store/RelayStoreTypes.js.flow +873 -0
- package/store/RelayStoreUtils.js.flow +218 -0
- package/store/StoreInspector.js.flow +173 -0
- package/store/ViewerPattern.js.flow +26 -0
- package/store/cloneRelayHandleSourceField.js.flow +66 -0
- package/store/createFragmentSpecResolver.js.flow +55 -0
- package/store/createRelayContext.js.flow +44 -0
- package/store/defaultGetDataID.js.flow +27 -0
- package/store/hasOverlappingIDs.js.flow +34 -0
- package/store/isRelayModernEnvironment.js.flow +27 -0
- package/store/normalizeRelayPayload.js.flow +51 -0
- package/store/readInlineData.js.flow +75 -0
- package/subscription/requestSubscription.js.flow +100 -0
- package/util/JSResourceTypes.flow.js.flow +20 -0
- package/util/NormalizationNode.js.flow +191 -0
- package/util/ReaderNode.js.flow +208 -0
- package/util/RelayConcreteNode.js.flow +80 -0
- package/util/RelayDefaultHandleKey.js.flow +17 -0
- package/util/RelayError.js.flow +33 -0
- package/util/RelayFeatureFlags.js.flow +30 -0
- package/util/RelayProfiler.js.flow +284 -0
- package/util/RelayReplaySubject.js.flow +134 -0
- package/util/RelayRuntimeTypes.js.flow +70 -0
- package/util/createPayloadFor3DField.js.flow +43 -0
- package/util/deepFreeze.js.flow +36 -0
- package/util/generateID.js.flow +21 -0
- package/util/getFragmentIdentifier.js.flow +52 -0
- package/util/getRelayHandleKey.js.flow +41 -0
- package/util/getRequestIdentifier.js.flow +41 -0
- package/util/isPromise.js.flow +21 -0
- package/util/isScalarAndEqual.js.flow +26 -0
- package/util/recycleNodesInto.js.flow +80 -0
- package/util/resolveImmediate.js.flow +30 -0
- package/util/stableCopy.js.flow +35 -0
- package/lib/handlers/RelayDefaultMissingFieldHandlers.js +0 -26
- package/lib/store/RelayConnection.js +0 -36
- package/lib/store/RelayConnectionResolver.js +0 -177
- package/lib/store/RelayRecordSourceObjectImpl.js +0 -78
- package/lib/util/getFragmentSpecIdentifier.js +0 -26
|
@@ -7,13 +7,18 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
13
|
+
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
14
|
+
|
|
15
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
16
|
+
|
|
17
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
18
|
+
|
|
12
19
|
var invariant = require("fbjs/lib/invariant");
|
|
13
20
|
|
|
14
|
-
var RelayOperationTracker =
|
|
15
|
-
/*#__PURE__*/
|
|
16
|
-
function () {
|
|
21
|
+
var RelayOperationTracker = /*#__PURE__*/function () {
|
|
17
22
|
function RelayOperationTracker() {
|
|
18
23
|
this._ownersToPendingOperations = new Map();
|
|
19
24
|
this._pendingOperationsToOwners = new Map();
|
|
@@ -33,12 +38,12 @@ function () {
|
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
var newlyAffectedOwners = new Set();
|
|
36
|
-
|
|
37
|
-
var
|
|
38
|
-
|
|
41
|
+
|
|
42
|
+
var _iterator = _createForOfIteratorHelper(affectedOwners),
|
|
43
|
+
_step;
|
|
39
44
|
|
|
40
45
|
try {
|
|
41
|
-
for (
|
|
46
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
42
47
|
var owner = _step.value;
|
|
43
48
|
|
|
44
49
|
var pendingOperationsAffectingOwner = this._ownersToPendingOperations.get(owner);
|
|
@@ -60,18 +65,9 @@ function () {
|
|
|
60
65
|
} // No new owners were affected by this operation, we may stop here
|
|
61
66
|
|
|
62
67
|
} catch (err) {
|
|
63
|
-
|
|
64
|
-
_iteratorError = err;
|
|
68
|
+
_iterator.e(err);
|
|
65
69
|
} finally {
|
|
66
|
-
|
|
67
|
-
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
|
68
|
-
_iterator["return"]();
|
|
69
|
-
}
|
|
70
|
-
} finally {
|
|
71
|
-
if (_didIteratorError) {
|
|
72
|
-
throw _iteratorError;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
70
|
+
_iterator.f();
|
|
75
71
|
}
|
|
76
72
|
|
|
77
73
|
if (newlyAffectedOwners.size === 0) {
|
|
@@ -81,12 +77,12 @@ function () {
|
|
|
81
77
|
|
|
82
78
|
|
|
83
79
|
var ownersAffectedByOperation = this._pendingOperationsToOwners.get(pendingOperation) || new Set();
|
|
84
|
-
|
|
85
|
-
var
|
|
86
|
-
|
|
80
|
+
|
|
81
|
+
var _iterator2 = _createForOfIteratorHelper(newlyAffectedOwners),
|
|
82
|
+
_step2;
|
|
87
83
|
|
|
88
84
|
try {
|
|
89
|
-
for (
|
|
85
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
90
86
|
var _owner = _step2.value;
|
|
91
87
|
|
|
92
88
|
this._resolveOwnerResolvers(_owner);
|
|
@@ -94,18 +90,9 @@ function () {
|
|
|
94
90
|
ownersAffectedByOperation.add(_owner);
|
|
95
91
|
}
|
|
96
92
|
} catch (err) {
|
|
97
|
-
|
|
98
|
-
_iteratorError2 = err;
|
|
93
|
+
_iterator2.e(err);
|
|
99
94
|
} finally {
|
|
100
|
-
|
|
101
|
-
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
|
|
102
|
-
_iterator2["return"]();
|
|
103
|
-
}
|
|
104
|
-
} finally {
|
|
105
|
-
if (_didIteratorError2) {
|
|
106
|
-
throw _iteratorError2;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
95
|
+
_iterator2.f();
|
|
109
96
|
}
|
|
110
97
|
|
|
111
98
|
this._pendingOperationsToOwners.set(pendingOperation, ownersAffectedByOperation);
|
|
@@ -128,12 +115,12 @@ function () {
|
|
|
128
115
|
// and some other operations
|
|
129
116
|
|
|
130
117
|
var updatedOwners = new Set();
|
|
131
|
-
|
|
132
|
-
var
|
|
133
|
-
|
|
118
|
+
|
|
119
|
+
var _iterator3 = _createForOfIteratorHelper(affectedOwners),
|
|
120
|
+
_step3;
|
|
134
121
|
|
|
135
122
|
try {
|
|
136
|
-
for (
|
|
123
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
137
124
|
var owner = _step3.value;
|
|
138
125
|
|
|
139
126
|
var pendingOperationsAffectingOwner = this._ownersToPendingOperations.get(owner);
|
|
@@ -152,26 +139,16 @@ function () {
|
|
|
152
139
|
} // Complete subscriptions for all owners, affected by `pendingOperation`
|
|
153
140
|
|
|
154
141
|
} catch (err) {
|
|
155
|
-
|
|
156
|
-
_iteratorError3 = err;
|
|
142
|
+
_iterator3.e(err);
|
|
157
143
|
} finally {
|
|
158
|
-
|
|
159
|
-
if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
|
|
160
|
-
_iterator3["return"]();
|
|
161
|
-
}
|
|
162
|
-
} finally {
|
|
163
|
-
if (_didIteratorError3) {
|
|
164
|
-
throw _iteratorError3;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
144
|
+
_iterator3.f();
|
|
167
145
|
}
|
|
168
146
|
|
|
169
|
-
var
|
|
170
|
-
|
|
171
|
-
var _iteratorError4 = undefined;
|
|
147
|
+
var _iterator4 = _createForOfIteratorHelper(completedOwners),
|
|
148
|
+
_step4;
|
|
172
149
|
|
|
173
150
|
try {
|
|
174
|
-
for (
|
|
151
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
175
152
|
var _owner2 = _step4.value;
|
|
176
153
|
|
|
177
154
|
this._resolveOwnerResolvers(_owner2);
|
|
@@ -181,44 +158,25 @@ function () {
|
|
|
181
158
|
// are affected by other operations
|
|
182
159
|
|
|
183
160
|
} catch (err) {
|
|
184
|
-
|
|
185
|
-
_iteratorError4 = err;
|
|
161
|
+
_iterator4.e(err);
|
|
186
162
|
} finally {
|
|
187
|
-
|
|
188
|
-
if (!_iteratorNormalCompletion4 && _iterator4["return"] != null) {
|
|
189
|
-
_iterator4["return"]();
|
|
190
|
-
}
|
|
191
|
-
} finally {
|
|
192
|
-
if (_didIteratorError4) {
|
|
193
|
-
throw _iteratorError4;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
163
|
+
_iterator4.f();
|
|
196
164
|
}
|
|
197
165
|
|
|
198
|
-
var
|
|
199
|
-
|
|
200
|
-
var _iteratorError5 = undefined;
|
|
166
|
+
var _iterator5 = _createForOfIteratorHelper(updatedOwners),
|
|
167
|
+
_step5;
|
|
201
168
|
|
|
202
169
|
try {
|
|
203
|
-
for (
|
|
170
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
204
171
|
var _owner3 = _step5.value;
|
|
205
172
|
|
|
206
173
|
this._resolveOwnerResolvers(_owner3);
|
|
207
174
|
} // Finally, remove pending operation
|
|
208
175
|
|
|
209
176
|
} catch (err) {
|
|
210
|
-
|
|
211
|
-
_iteratorError5 = err;
|
|
177
|
+
_iterator5.e(err);
|
|
212
178
|
} finally {
|
|
213
|
-
|
|
214
|
-
if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) {
|
|
215
|
-
_iterator5["return"]();
|
|
216
|
-
}
|
|
217
|
-
} finally {
|
|
218
|
-
if (_didIteratorError5) {
|
|
219
|
-
throw _iteratorError5;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
179
|
+
_iterator5.f();
|
|
222
180
|
}
|
|
223
181
|
|
|
224
182
|
this._pendingOperationsToOwners["delete"](pendingOperation);
|
|
@@ -7,11 +7,16 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
14
|
|
|
14
|
-
var
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
15
20
|
|
|
16
21
|
var RelayRecordSource = require('./RelayRecordSource');
|
|
17
22
|
|
|
@@ -24,9 +29,7 @@ var UNPUBLISH_RECORD_SENTINEL = Object.freeze({
|
|
|
24
29
|
* shadow the base version of the record rather than updating/replacing them.
|
|
25
30
|
*/
|
|
26
31
|
|
|
27
|
-
var RelayOptimisticRecordSource =
|
|
28
|
-
/*#__PURE__*/
|
|
29
|
-
function () {
|
|
32
|
+
var RelayOptimisticRecordSource = /*#__PURE__*/function () {
|
|
30
33
|
function RelayOptimisticRecordSource(base) {
|
|
31
34
|
this._base = base;
|
|
32
35
|
this._sink = RelayRecordSource.create();
|
|
@@ -99,7 +102,7 @@ function () {
|
|
|
99
102
|
_proto.toJSON = function toJSON() {
|
|
100
103
|
var _this = this;
|
|
101
104
|
|
|
102
|
-
var merged = (
|
|
105
|
+
var merged = _objectSpread({}, this._base.toJSON());
|
|
103
106
|
|
|
104
107
|
this._sink.getRecordIDs().forEach(function (dataID) {
|
|
105
108
|
var record = _this.get(dataID);
|
|
@@ -7,12 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
|
-
|
|
14
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
-
|
|
16
13
|
var ErrorUtils = require("fbjs/lib/ErrorUtils");
|
|
17
14
|
|
|
18
15
|
var RelayReader = require('./RelayReader');
|
|
@@ -27,6 +24,8 @@ var RelayRecordSourceSelectorProxy = require('../mutations/RelayRecordSourceSele
|
|
|
27
24
|
|
|
28
25
|
var invariant = require("fbjs/lib/invariant");
|
|
29
26
|
|
|
27
|
+
var warning = require("fbjs/lib/warning");
|
|
28
|
+
|
|
30
29
|
/**
|
|
31
30
|
* Coordinates the concurrent modification of a `Store` due to optimistic and
|
|
32
31
|
* non-revertable client updates and server payloads:
|
|
@@ -38,9 +37,7 @@ var invariant = require("fbjs/lib/invariant");
|
|
|
38
37
|
* - Executes handlers for "handle" fields.
|
|
39
38
|
* - Reverts and reapplies pending optimistic updates.
|
|
40
39
|
*/
|
|
41
|
-
var RelayPublishQueue =
|
|
42
|
-
/*#__PURE__*/
|
|
43
|
-
function () {
|
|
40
|
+
var RelayPublishQueue = /*#__PURE__*/function () {
|
|
44
41
|
// True if the next `run()` should apply the backup and rerun all optimistic
|
|
45
42
|
// updates performing a rebase.
|
|
46
43
|
// Payloads to apply or Sources to publish to the store with the next `run()`.
|
|
@@ -147,7 +144,12 @@ function () {
|
|
|
147
144
|
*/
|
|
148
145
|
;
|
|
149
146
|
|
|
150
|
-
_proto.run = function run() {
|
|
147
|
+
_proto.run = function run(sourceOperation) {
|
|
148
|
+
if (process.env.NODE_ENV !== "production") {
|
|
149
|
+
process.env.NODE_ENV !== "production" ? warning(this._isRunning !== true, 'A store update was detected within another store update. Please ' + 'make sure new store updates aren’t being executed within an ' + 'updater function for a different update.') : void 0;
|
|
150
|
+
this._isRunning = true;
|
|
151
|
+
}
|
|
152
|
+
|
|
151
153
|
if (this._pendingBackupRebase) {
|
|
152
154
|
if (this._hasStoreSnapshot) {
|
|
153
155
|
this._store.restore();
|
|
@@ -156,7 +158,7 @@ function () {
|
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
160
|
|
|
159
|
-
this._commitData();
|
|
161
|
+
var invalidatedStore = this._commitData();
|
|
160
162
|
|
|
161
163
|
if (this._pendingOptimisticUpdates.size || this._pendingBackupRebase && this._appliedOptimisticUpdates.size) {
|
|
162
164
|
if (!this._hasStoreSnapshot) {
|
|
@@ -182,8 +184,17 @@ function () {
|
|
|
182
184
|
}
|
|
183
185
|
}
|
|
184
186
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
+
if (process.env.NODE_ENV !== "production") {
|
|
188
|
+
this._isRunning = false;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return this._store.notify(sourceOperation, invalidatedStore);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* _publishSourceFromPayload will return a boolean indicating if the
|
|
195
|
+
* publish caused the store to be globally invalidated.
|
|
196
|
+
*/
|
|
197
|
+
;
|
|
187
198
|
|
|
188
199
|
_proto._publishSourceFromPayload = function _publishSourceFromPayload(pendingPayload) {
|
|
189
200
|
var _this = this;
|
|
@@ -191,47 +202,54 @@ function () {
|
|
|
191
202
|
var payload = pendingPayload.payload,
|
|
192
203
|
operation = pendingPayload.operation,
|
|
193
204
|
updater = pendingPayload.updater;
|
|
194
|
-
var
|
|
195
|
-
source = payload.source,
|
|
205
|
+
var source = payload.source,
|
|
196
206
|
fieldPayloads = payload.fieldPayloads;
|
|
197
|
-
var
|
|
198
|
-
var
|
|
199
|
-
var store = new RelayRecordSourceProxy(mutator, this._getDataID);
|
|
207
|
+
var mutator = new RelayRecordSourceMutator(this._store.getSource(), source);
|
|
208
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID);
|
|
200
209
|
|
|
201
210
|
if (fieldPayloads && fieldPayloads.length) {
|
|
202
211
|
fieldPayloads.forEach(function (fieldPayload) {
|
|
203
212
|
var handler = _this._handlerProvider && _this._handlerProvider(fieldPayload.handle);
|
|
204
213
|
|
|
205
214
|
!handler ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected a handler to be provided for ' + 'handle `%s`.', fieldPayload.handle) : invariant(false) : void 0;
|
|
206
|
-
handler.update(
|
|
215
|
+
handler.update(recordSourceProxy, fieldPayload);
|
|
207
216
|
});
|
|
208
217
|
}
|
|
209
218
|
|
|
210
219
|
if (updater) {
|
|
211
220
|
var selector = operation.fragment;
|
|
212
221
|
!(selector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected a selector to be provided with updater function.') : invariant(false) : void 0;
|
|
213
|
-
var
|
|
222
|
+
var recordSourceSelectorProxy = new RelayRecordSourceSelectorProxy(mutator, recordSourceProxy, selector);
|
|
214
223
|
var selectorData = lookupSelector(source, selector);
|
|
215
|
-
updater(
|
|
224
|
+
updater(recordSourceSelectorProxy, selectorData);
|
|
216
225
|
}
|
|
217
226
|
|
|
218
|
-
|
|
227
|
+
var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
|
|
219
228
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
229
|
+
this._store.publish(source, idsMarkedForInvalidation);
|
|
230
|
+
|
|
231
|
+
return recordSourceProxy.isStoreMarkedForInvalidation();
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* _commitData will return a boolean indicating if any of
|
|
235
|
+
* the pending commits caused the store to be globally invalidated.
|
|
236
|
+
*/
|
|
237
|
+
;
|
|
224
238
|
|
|
225
239
|
_proto._commitData = function _commitData() {
|
|
226
240
|
var _this2 = this;
|
|
227
241
|
|
|
228
242
|
if (!this._pendingData.size) {
|
|
229
|
-
return;
|
|
243
|
+
return false;
|
|
230
244
|
}
|
|
231
245
|
|
|
246
|
+
var invalidatedStore = false;
|
|
247
|
+
|
|
232
248
|
this._pendingData.forEach(function (data) {
|
|
233
249
|
if (data.kind === 'payload') {
|
|
234
|
-
_this2._publishSourceFromPayload(data);
|
|
250
|
+
var payloadInvalidatedStore = _this2._publishSourceFromPayload(data);
|
|
251
|
+
|
|
252
|
+
invalidatedStore = invalidatedStore || payloadInvalidatedStore;
|
|
235
253
|
} else if (data.kind === 'source') {
|
|
236
254
|
var source = data.source;
|
|
237
255
|
|
|
@@ -239,55 +257,54 @@ function () {
|
|
|
239
257
|
} else {
|
|
240
258
|
var updater = data.updater;
|
|
241
259
|
var sink = RelayRecordSource.create();
|
|
242
|
-
var
|
|
243
|
-
var
|
|
244
|
-
|
|
245
|
-
|
|
260
|
+
var mutator = new RelayRecordSourceMutator(_this2._store.getSource(), sink);
|
|
261
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, _this2._getDataID);
|
|
262
|
+
ErrorUtils.applyWithGuard(updater, null, [recordSourceProxy], null, 'RelayPublishQueue:commitData');
|
|
263
|
+
invalidatedStore = invalidatedStore || recordSourceProxy.isStoreMarkedForInvalidation();
|
|
264
|
+
var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
|
|
246
265
|
|
|
247
|
-
_this2._store.publish(sink);
|
|
248
|
-
|
|
249
|
-
if (connectionEvents.length !== 0) {
|
|
250
|
-
_this2._store.publishConnectionEvents_UNSTABLE(connectionEvents, true);
|
|
251
|
-
}
|
|
266
|
+
_this2._store.publish(sink, idsMarkedForInvalidation);
|
|
252
267
|
}
|
|
253
268
|
});
|
|
254
269
|
|
|
255
270
|
this._pendingData.clear();
|
|
256
|
-
|
|
271
|
+
|
|
272
|
+
return invalidatedStore;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Note that unlike _commitData, _applyUpdates will NOT return a boolean
|
|
276
|
+
* indicating if the store was globally invalidated, since invalidating the
|
|
277
|
+
* store during an optimistic update is a no-op.
|
|
278
|
+
*/
|
|
279
|
+
;
|
|
257
280
|
|
|
258
281
|
_proto._applyUpdates = function _applyUpdates() {
|
|
259
282
|
var _this3 = this;
|
|
260
283
|
|
|
261
284
|
var sink = RelayRecordSource.create();
|
|
262
|
-
var
|
|
263
|
-
var
|
|
264
|
-
var store = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider);
|
|
285
|
+
var mutator = new RelayRecordSourceMutator(this._store.getSource(), sink);
|
|
286
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider);
|
|
265
287
|
|
|
266
288
|
var processUpdate = function processUpdate(optimisticUpdate) {
|
|
267
289
|
if (optimisticUpdate.storeUpdater) {
|
|
268
290
|
var storeUpdater = optimisticUpdate.storeUpdater;
|
|
269
|
-
ErrorUtils.applyWithGuard(storeUpdater, null, [
|
|
291
|
+
ErrorUtils.applyWithGuard(storeUpdater, null, [recordSourceProxy], null, 'RelayPublishQueue:applyUpdates');
|
|
270
292
|
} else {
|
|
271
293
|
var operation = optimisticUpdate.operation,
|
|
272
294
|
payload = optimisticUpdate.payload,
|
|
273
295
|
updater = optimisticUpdate.updater;
|
|
274
|
-
var
|
|
275
|
-
source = payload.source,
|
|
296
|
+
var source = payload.source,
|
|
276
297
|
fieldPayloads = payload.fieldPayloads;
|
|
277
|
-
var
|
|
298
|
+
var recordSourceSelectorProxy = new RelayRecordSourceSelectorProxy(mutator, recordSourceProxy, operation.fragment);
|
|
278
299
|
var selectorData;
|
|
279
300
|
|
|
280
301
|
if (source) {
|
|
281
|
-
|
|
302
|
+
recordSourceProxy.publishSource(source, fieldPayloads);
|
|
282
303
|
selectorData = lookupSelector(source, operation.fragment);
|
|
283
304
|
}
|
|
284
305
|
|
|
285
|
-
if (connectionEvents) {
|
|
286
|
-
combinedConnectionEvents.push.apply(combinedConnectionEvents, (0, _toConsumableArray2["default"])(connectionEvents));
|
|
287
|
-
}
|
|
288
|
-
|
|
289
306
|
if (updater) {
|
|
290
|
-
ErrorUtils.applyWithGuard(updater, null, [
|
|
307
|
+
ErrorUtils.applyWithGuard(updater, null, [recordSourceSelectorProxy, selectorData], null, 'RelayPublishQueue:applyUpdates');
|
|
291
308
|
}
|
|
292
309
|
}
|
|
293
310
|
}; // rerun all updaters in case we are running a rebase
|
|
@@ -309,10 +326,6 @@ function () {
|
|
|
309
326
|
}
|
|
310
327
|
|
|
311
328
|
this._store.publish(sink);
|
|
312
|
-
|
|
313
|
-
if (combinedConnectionEvents.length !== 0) {
|
|
314
|
-
this._store.publishConnectionEvents_UNSTABLE(combinedConnectionEvents, false);
|
|
315
|
-
}
|
|
316
329
|
};
|
|
317
330
|
|
|
318
331
|
return RelayPublishQueue;
|
package/lib/store/RelayReader.js
CHANGED
|
@@ -7,17 +7,15 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
|
-
var RelayConnection = require('./RelayConnection');
|
|
13
|
-
|
|
14
13
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
15
14
|
|
|
16
15
|
var invariant = require("fbjs/lib/invariant");
|
|
17
16
|
|
|
18
17
|
var _require = require('../util/RelayConcreteNode'),
|
|
19
18
|
CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
|
|
20
|
-
CONNECTION = _require.CONNECTION,
|
|
21
19
|
CONDITION = _require.CONDITION,
|
|
22
20
|
DEFER = _require.DEFER,
|
|
23
21
|
FRAGMENT_SPREAD = _require.FRAGMENT_SPREAD,
|
|
@@ -47,9 +45,7 @@ function read(recordSource, selector) {
|
|
|
47
45
|
*/
|
|
48
46
|
|
|
49
47
|
|
|
50
|
-
var RelayReader =
|
|
51
|
-
/*#__PURE__*/
|
|
52
|
-
function () {
|
|
48
|
+
var RelayReader = /*#__PURE__*/function () {
|
|
53
49
|
function RelayReader(recordSource, selector) {
|
|
54
50
|
this._isMissingData = false;
|
|
55
51
|
this._owner = selector.owner;
|
|
@@ -162,11 +158,6 @@ function () {
|
|
|
162
158
|
this._isMissingData = isMissingData;
|
|
163
159
|
break;
|
|
164
160
|
|
|
165
|
-
case CONNECTION:
|
|
166
|
-
this._readConnection(selection, record, data);
|
|
167
|
-
|
|
168
|
-
break;
|
|
169
|
-
|
|
170
161
|
case STREAM:
|
|
171
162
|
this._traverseSelections(selection.selections, record, data);
|
|
172
163
|
|
|
@@ -179,19 +170,6 @@ function () {
|
|
|
179
170
|
}
|
|
180
171
|
};
|
|
181
172
|
|
|
182
|
-
_proto._readConnection = function _readConnection(field, record, data) {
|
|
183
|
-
var parentID = RelayModernRecord.getDataID(record);
|
|
184
|
-
var connectionID = RelayConnection.createConnectionID(parentID, field.label);
|
|
185
|
-
var edgesField = field.edges;
|
|
186
|
-
var reference = {
|
|
187
|
-
variables: this._variables,
|
|
188
|
-
edgesField: edgesField,
|
|
189
|
-
id: connectionID,
|
|
190
|
-
label: field.label
|
|
191
|
-
};
|
|
192
|
-
data[RelayConnection.CONNECTION_KEY] = reference;
|
|
193
|
-
};
|
|
194
|
-
|
|
195
173
|
_proto._readScalar = function _readScalar(field, record, data) {
|
|
196
174
|
var _field$alias;
|
|
197
175
|
|
|
@@ -7,24 +7,18 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
|
-
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
13
|
-
|
|
14
13
|
var RelayRecordSourceMapImpl = require('./RelayRecordSourceMapImpl');
|
|
15
14
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
var RelayRecordSource =
|
|
19
|
-
/*#__PURE__*/
|
|
20
|
-
function () {
|
|
15
|
+
var RelayRecordSource = /*#__PURE__*/function () {
|
|
21
16
|
function RelayRecordSource(records) {
|
|
22
17
|
return RelayRecordSource.create(records);
|
|
23
18
|
}
|
|
24
19
|
|
|
25
20
|
RelayRecordSource.create = function create(records) {
|
|
26
|
-
|
|
27
|
-
return new RecordSourceImpl(records);
|
|
21
|
+
return new RelayRecordSourceMapImpl(records);
|
|
28
22
|
};
|
|
29
23
|
|
|
30
24
|
return RelayRecordSource;
|
|
@@ -7,8 +7,15 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
13
|
+
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
14
|
+
|
|
15
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
16
|
+
|
|
17
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
18
|
+
|
|
12
19
|
var RelayRecordState = require('./RelayRecordState');
|
|
13
20
|
|
|
14
21
|
var EXISTENT = RelayRecordState.EXISTENT,
|
|
@@ -19,9 +26,7 @@ var EXISTENT = RelayRecordState.EXISTENT,
|
|
|
19
26
|
* `RelayStoreTypes`) that holds all records in memory (JS Map).
|
|
20
27
|
*/
|
|
21
28
|
|
|
22
|
-
var RelayMapRecordSourceMapImpl =
|
|
23
|
-
/*#__PURE__*/
|
|
24
|
-
function () {
|
|
29
|
+
var RelayMapRecordSourceMapImpl = /*#__PURE__*/function () {
|
|
25
30
|
function RelayMapRecordSourceMapImpl(records) {
|
|
26
31
|
var _this = this;
|
|
27
32
|
|
|
@@ -78,30 +83,21 @@ function () {
|
|
|
78
83
|
|
|
79
84
|
_proto.toJSON = function toJSON() {
|
|
80
85
|
var obj = {};
|
|
81
|
-
|
|
82
|
-
var
|
|
83
|
-
|
|
86
|
+
|
|
87
|
+
var _iterator = _createForOfIteratorHelper(this._records),
|
|
88
|
+
_step;
|
|
84
89
|
|
|
85
90
|
try {
|
|
86
|
-
for (
|
|
91
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
87
92
|
var _step$value = _step.value,
|
|
88
93
|
key = _step$value[0],
|
|
89
94
|
value = _step$value[1];
|
|
90
95
|
obj[key] = value;
|
|
91
96
|
}
|
|
92
97
|
} catch (err) {
|
|
93
|
-
|
|
94
|
-
_iteratorError = err;
|
|
98
|
+
_iterator.e(err);
|
|
95
99
|
} finally {
|
|
96
|
-
|
|
97
|
-
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
|
98
|
-
_iterator["return"]();
|
|
99
|
-
}
|
|
100
|
-
} finally {
|
|
101
|
-
if (_didIteratorError) {
|
|
102
|
-
throw _iteratorError;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
100
|
+
_iterator.f();
|
|
105
101
|
}
|
|
106
102
|
|
|
107
103
|
return obj;
|