relay-runtime 10.1.3 → 11.0.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/handlers/connection/ConnectionHandler.js.flow +60 -0
- package/handlers/connection/MutationHandlers.js.flow +28 -0
- package/index.js +1 -1
- package/index.js.flow +9 -3
- package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
- package/lib/handlers/connection/ConnectionHandler.js +68 -6
- package/lib/handlers/connection/MutationHandlers.js +67 -8
- package/lib/index.js +3 -0
- package/lib/multi-actor-environment/ActorIdentifier.js +23 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +108 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +156 -0
- package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
- package/lib/multi-actor-environment/index.js +17 -0
- package/lib/mutations/RelayRecordProxy.js +1 -1
- package/lib/mutations/RelayRecordSourceMutator.js +1 -1
- package/lib/mutations/RelayRecordSourceProxy.js +1 -1
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -1
- package/lib/mutations/applyOptimisticMutation.js +1 -1
- package/lib/mutations/commitMutation.js +1 -1
- package/lib/mutations/validateMutation.js +36 -15
- package/lib/network/RelayNetwork.js +1 -1
- package/lib/network/RelayQueryResponseCache.js +3 -2
- package/lib/query/GraphQLTag.js +1 -1
- package/lib/query/fetchQuery.js +129 -13
- package/lib/query/fetchQueryInternal.js +3 -4
- package/lib/query/fetchQuery_DEPRECATED.js +39 -0
- package/lib/store/DataChecker.js +26 -14
- package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +117 -47
- package/lib/store/RelayConcreteVariables.js +8 -4
- package/lib/store/RelayModernEnvironment.js +105 -136
- package/lib/store/RelayModernFragmentSpecResolver.js +16 -9
- package/lib/store/RelayModernRecord.js +1 -1
- package/lib/store/RelayModernSelector.js +1 -1
- package/lib/store/RelayModernStore.js +19 -20
- package/lib/store/RelayOperationTracker.js +55 -49
- package/lib/store/RelayPublishQueue.js +9 -5
- package/lib/store/RelayReader.js +68 -14
- package/lib/store/RelayReferenceMarker.js +28 -14
- package/lib/store/RelayResponseNormalizer.js +109 -15
- package/lib/store/RelayStoreReactFlightUtils.js +6 -4
- package/lib/store/RelayStoreSubscriptions.js +18 -8
- package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +90 -30
- package/lib/store/RelayStoreUtils.js +3 -2
- package/lib/store/ResolverFragments.js +57 -0
- package/lib/store/cloneRelayHandleSourceField.js +1 -1
- package/lib/store/cloneRelayScalarHandleSourceField.js +1 -1
- package/lib/store/createFragmentSpecResolver.js +2 -2
- package/lib/store/createRelayContext.js +1 -1
- package/lib/store/defaultGetDataID.js +3 -1
- package/lib/store/hasOverlappingIDs.js +11 -3
- package/lib/store/readInlineData.js +1 -1
- package/lib/subscription/requestSubscription.js +33 -5
- package/lib/util/RelayConcreteNode.js +2 -0
- package/lib/util/RelayFeatureFlags.js +8 -3
- package/lib/util/RelayProfiler.js +17 -187
- package/lib/util/RelayReplaySubject.js +1 -1
- package/lib/util/deepFreeze.js +1 -0
- package/lib/util/getRelayHandleKey.js +1 -1
- package/lib/util/getRequestIdentifier.js +1 -1
- package/multi-actor-environment/ActorIdentifier.js.flow +27 -0
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +189 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +233 -0
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +196 -0
- package/multi-actor-environment/index.js.flow +24 -0
- package/mutations/RelayRecordSourceProxy.js.flow +3 -2
- package/mutations/commitMutation.js.flow +1 -1
- package/mutations/validateMutation.js.flow +40 -15
- package/network/RelayNetworkTypes.js.flow +31 -11
- package/network/RelayQueryResponseCache.js.flow +2 -1
- package/package.json +3 -2
- package/query/fetchQuery.js.flow +147 -20
- package/query/fetchQueryInternal.js.flow +2 -3
- package/query/fetchQuery_DEPRECATED.js.flow +47 -0
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/DataChecker.js.flow +23 -15
- package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +128 -40
- package/store/RelayConcreteVariables.js.flow +5 -0
- package/store/RelayModernEnvironment.js.flow +100 -130
- package/store/RelayModernFragmentSpecResolver.js.flow +30 -8
- package/store/RelayModernStore.js.flow +28 -24
- package/store/RelayOperationTracker.js.flow +69 -56
- package/store/RelayPublishQueue.js.flow +7 -4
- package/store/RelayReader.js.flow +63 -11
- package/store/RelayRecordSource.js.flow +3 -3
- package/store/RelayRecordSourceMapImpl.js.flow +6 -2
- package/store/RelayReferenceMarker.js.flow +28 -18
- package/store/RelayResponseNormalizer.js.flow +134 -23
- package/store/RelayStoreReactFlightUtils.js.flow +9 -4
- package/store/RelayStoreSubscriptions.js.flow +22 -7
- package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +36 -12
- package/store/RelayStoreTypes.js.flow +51 -22
- package/store/RelayStoreUtils.js.flow +2 -1
- package/store/ResolverFragments.js.flow +125 -0
- package/store/createFragmentSpecResolver.js.flow +2 -0
- package/store/defaultGetDataID.js.flow +3 -1
- package/store/hasOverlappingIDs.js.flow +11 -9
- package/subscription/requestSubscription.js.flow +25 -2
- package/util/NormalizationNode.js.flow +13 -0
- package/util/ReaderNode.js.flow +14 -1
- package/util/RelayConcreteNode.js.flow +2 -0
- package/util/RelayFeatureFlags.js.flow +12 -2
- package/util/RelayProfiler.js.flow +22 -194
- package/util/RelayRuntimeTypes.js.flow +4 -5
- package/util/deepFreeze.js.flow +2 -1
- package/util/isEmptyObject.js.flow +1 -1
|
@@ -14,13 +14,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
14
14
|
|
|
15
15
|
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
16
|
|
|
17
|
-
var invariant = require(
|
|
17
|
+
var invariant = require('invariant');
|
|
18
18
|
|
|
19
19
|
var RelayOperationTracker = /*#__PURE__*/function () {
|
|
20
20
|
function RelayOperationTracker() {
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
21
|
+
this._ownersToPendingOperationsIdentifier = new Map();
|
|
22
|
+
this._pendingOperationsToOwnersIdentifier = new Map();
|
|
23
|
+
this._ownersIdentifierToPromise = new Map();
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Update the map of current processing operations with the set of
|
|
@@ -35,7 +35,8 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
var
|
|
38
|
+
var pendingOperationIdentifier = pendingOperation.identifier;
|
|
39
|
+
var newlyAffectedOwnersIdentifier = new Set();
|
|
39
40
|
|
|
40
41
|
var _iterator = (0, _createForOfIteratorHelper2["default"])(affectedOwners),
|
|
41
42
|
_step;
|
|
@@ -43,22 +44,23 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
43
44
|
try {
|
|
44
45
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
45
46
|
var owner = _step.value;
|
|
47
|
+
var ownerIdentifier = owner.identifier;
|
|
46
48
|
|
|
47
|
-
var pendingOperationsAffectingOwner = this.
|
|
49
|
+
var pendingOperationsAffectingOwner = this._ownersToPendingOperationsIdentifier.get(ownerIdentifier);
|
|
48
50
|
|
|
49
51
|
if (pendingOperationsAffectingOwner != null) {
|
|
50
|
-
// In this case the `
|
|
52
|
+
// In this case the `ownerIdentifier` already affected by some operations
|
|
51
53
|
// We just need to detect, is it the same operation that we already
|
|
52
54
|
// have in the list, or it's a new operation
|
|
53
|
-
if (!pendingOperationsAffectingOwner.has(
|
|
54
|
-
pendingOperationsAffectingOwner.add(
|
|
55
|
-
|
|
55
|
+
if (!pendingOperationsAffectingOwner.has(pendingOperationIdentifier)) {
|
|
56
|
+
pendingOperationsAffectingOwner.add(pendingOperationIdentifier);
|
|
57
|
+
newlyAffectedOwnersIdentifier.add(ownerIdentifier);
|
|
56
58
|
}
|
|
57
59
|
} else {
|
|
58
|
-
// This is a new `
|
|
59
|
-
this.
|
|
60
|
+
// This is a new `ownerIdentifier` that is affected by the operation
|
|
61
|
+
this._ownersToPendingOperationsIdentifier.set(ownerIdentifier, new Set([pendingOperationIdentifier]));
|
|
60
62
|
|
|
61
|
-
|
|
63
|
+
newlyAffectedOwnersIdentifier.add(ownerIdentifier);
|
|
62
64
|
}
|
|
63
65
|
} // No new owners were affected by this operation, we may stop here
|
|
64
66
|
|
|
@@ -68,24 +70,24 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
68
70
|
_iterator.f();
|
|
69
71
|
}
|
|
70
72
|
|
|
71
|
-
if (
|
|
73
|
+
if (newlyAffectedOwnersIdentifier.size === 0) {
|
|
72
74
|
return;
|
|
73
75
|
} // But, if some owners were affected we need to add them to
|
|
74
|
-
// the `
|
|
76
|
+
// the `_pendingOperationsToOwnersIdentifier` set
|
|
75
77
|
|
|
76
78
|
|
|
77
|
-
var
|
|
79
|
+
var ownersAffectedByOperationIdentifier = this._pendingOperationsToOwnersIdentifier.get(pendingOperationIdentifier) || new Set();
|
|
78
80
|
|
|
79
|
-
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(
|
|
81
|
+
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(newlyAffectedOwnersIdentifier),
|
|
80
82
|
_step2;
|
|
81
83
|
|
|
82
84
|
try {
|
|
83
85
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
84
|
-
var
|
|
86
|
+
var _ownerIdentifier = _step2.value;
|
|
85
87
|
|
|
86
|
-
this._resolveOwnerResolvers(
|
|
88
|
+
this._resolveOwnerResolvers(_ownerIdentifier);
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
ownersAffectedByOperationIdentifier.add(_ownerIdentifier);
|
|
89
91
|
}
|
|
90
92
|
} catch (err) {
|
|
91
93
|
_iterator2.e(err);
|
|
@@ -93,7 +95,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
93
95
|
_iterator2.f();
|
|
94
96
|
}
|
|
95
97
|
|
|
96
|
-
this.
|
|
98
|
+
this._pendingOperationsToOwnersIdentifier.set(pendingOperationIdentifier, ownersAffectedByOperationIdentifier);
|
|
97
99
|
}
|
|
98
100
|
/**
|
|
99
101
|
* Once pending operation is completed we need to remove it
|
|
@@ -102,39 +104,41 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
102
104
|
;
|
|
103
105
|
|
|
104
106
|
_proto.complete = function complete(pendingOperation) {
|
|
105
|
-
var
|
|
107
|
+
var pendingOperationIdentifier = pendingOperation.identifier;
|
|
106
108
|
|
|
107
|
-
|
|
109
|
+
var affectedOwnersIdentifier = this._pendingOperationsToOwnersIdentifier.get(pendingOperationIdentifier);
|
|
110
|
+
|
|
111
|
+
if (affectedOwnersIdentifier == null) {
|
|
108
112
|
return;
|
|
109
|
-
} // These were the owners affected only by `
|
|
113
|
+
} // These were the owners affected only by `pendingOperationIdentifier`
|
|
110
114
|
|
|
111
115
|
|
|
112
|
-
var
|
|
116
|
+
var completedOwnersIdentifier = new Set(); // These were the owners affected by `pendingOperationIdentifier`
|
|
113
117
|
// and some other operations
|
|
114
118
|
|
|
115
|
-
var
|
|
119
|
+
var updatedOwnersIdentifier = new Set();
|
|
116
120
|
|
|
117
|
-
var _iterator3 = (0, _createForOfIteratorHelper2["default"])(
|
|
121
|
+
var _iterator3 = (0, _createForOfIteratorHelper2["default"])(affectedOwnersIdentifier),
|
|
118
122
|
_step3;
|
|
119
123
|
|
|
120
124
|
try {
|
|
121
125
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
122
|
-
var
|
|
126
|
+
var ownerIdentifier = _step3.value;
|
|
123
127
|
|
|
124
|
-
var pendingOperationsAffectingOwner = this.
|
|
128
|
+
var pendingOperationsAffectingOwner = this._ownersToPendingOperationsIdentifier.get(ownerIdentifier);
|
|
125
129
|
|
|
126
130
|
if (!pendingOperationsAffectingOwner) {
|
|
127
131
|
continue;
|
|
128
132
|
}
|
|
129
133
|
|
|
130
|
-
pendingOperationsAffectingOwner["delete"](
|
|
134
|
+
pendingOperationsAffectingOwner["delete"](pendingOperationIdentifier);
|
|
131
135
|
|
|
132
136
|
if (pendingOperationsAffectingOwner.size > 0) {
|
|
133
|
-
|
|
137
|
+
updatedOwnersIdentifier.add(ownerIdentifier);
|
|
134
138
|
} else {
|
|
135
|
-
|
|
139
|
+
completedOwnersIdentifier.add(ownerIdentifier);
|
|
136
140
|
}
|
|
137
|
-
} // Complete subscriptions for all owners, affected by `
|
|
141
|
+
} // Complete subscriptions for all owners, affected by `pendingOperationIdentifier`
|
|
138
142
|
|
|
139
143
|
} catch (err) {
|
|
140
144
|
_iterator3.e(err);
|
|
@@ -142,17 +146,17 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
142
146
|
_iterator3.f();
|
|
143
147
|
}
|
|
144
148
|
|
|
145
|
-
var _iterator4 = (0, _createForOfIteratorHelper2["default"])(
|
|
149
|
+
var _iterator4 = (0, _createForOfIteratorHelper2["default"])(completedOwnersIdentifier),
|
|
146
150
|
_step4;
|
|
147
151
|
|
|
148
152
|
try {
|
|
149
153
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
150
|
-
var
|
|
154
|
+
var _ownerIdentifier2 = _step4.value;
|
|
151
155
|
|
|
152
|
-
this._resolveOwnerResolvers(
|
|
156
|
+
this._resolveOwnerResolvers(_ownerIdentifier2);
|
|
153
157
|
|
|
154
|
-
this.
|
|
155
|
-
} // Update all
|
|
158
|
+
this._ownersToPendingOperationsIdentifier["delete"](_ownerIdentifier2);
|
|
159
|
+
} // Update all ownerIdentifier that were updated by `pendingOperationIdentifier` but still
|
|
156
160
|
// are affected by other operations
|
|
157
161
|
|
|
158
162
|
} catch (err) {
|
|
@@ -161,15 +165,15 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
161
165
|
_iterator4.f();
|
|
162
166
|
}
|
|
163
167
|
|
|
164
|
-
var _iterator5 = (0, _createForOfIteratorHelper2["default"])(
|
|
168
|
+
var _iterator5 = (0, _createForOfIteratorHelper2["default"])(updatedOwnersIdentifier),
|
|
165
169
|
_step5;
|
|
166
170
|
|
|
167
171
|
try {
|
|
168
172
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
169
|
-
var
|
|
173
|
+
var _ownerIdentifier3 = _step5.value;
|
|
170
174
|
|
|
171
|
-
this._resolveOwnerResolvers(
|
|
172
|
-
} // Finally, remove pending operation
|
|
175
|
+
this._resolveOwnerResolvers(_ownerIdentifier3);
|
|
176
|
+
} // Finally, remove pending operation identifier
|
|
173
177
|
|
|
174
178
|
} catch (err) {
|
|
175
179
|
_iterator5.e(err);
|
|
@@ -177,25 +181,27 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
177
181
|
_iterator5.f();
|
|
178
182
|
}
|
|
179
183
|
|
|
180
|
-
this.
|
|
184
|
+
this._pendingOperationsToOwnersIdentifier["delete"](pendingOperationIdentifier);
|
|
181
185
|
};
|
|
182
186
|
|
|
183
|
-
_proto._resolveOwnerResolvers = function _resolveOwnerResolvers(
|
|
184
|
-
var promiseEntry = this.
|
|
187
|
+
_proto._resolveOwnerResolvers = function _resolveOwnerResolvers(ownerIdentifier) {
|
|
188
|
+
var promiseEntry = this._ownersIdentifierToPromise.get(ownerIdentifier);
|
|
185
189
|
|
|
186
190
|
if (promiseEntry != null) {
|
|
187
191
|
promiseEntry.resolve();
|
|
188
192
|
}
|
|
189
193
|
|
|
190
|
-
this.
|
|
194
|
+
this._ownersIdentifierToPromise["delete"](ownerIdentifier);
|
|
191
195
|
};
|
|
192
196
|
|
|
193
197
|
_proto.getPromiseForPendingOperationsAffectingOwner = function getPromiseForPendingOperationsAffectingOwner(owner) {
|
|
194
|
-
|
|
198
|
+
var ownerIdentifier = owner.identifier;
|
|
199
|
+
|
|
200
|
+
if (!this._ownersToPendingOperationsIdentifier.has(ownerIdentifier)) {
|
|
195
201
|
return null;
|
|
196
202
|
}
|
|
197
203
|
|
|
198
|
-
var cachedPromiseEntry = this.
|
|
204
|
+
var cachedPromiseEntry = this._ownersIdentifierToPromise.get(ownerIdentifier);
|
|
199
205
|
|
|
200
206
|
if (cachedPromiseEntry != null) {
|
|
201
207
|
return cachedPromiseEntry.promise;
|
|
@@ -207,7 +213,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
|
|
|
207
213
|
});
|
|
208
214
|
!(resolve != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayOperationTracker: Expected resolver to be defined. If you' + 'are seeing this, it is likely a bug in Relay.') : invariant(false) : void 0;
|
|
209
215
|
|
|
210
|
-
this.
|
|
216
|
+
this._ownersIdentifierToPromise.set(ownerIdentifier, {
|
|
211
217
|
promise: promise,
|
|
212
218
|
resolve: resolve
|
|
213
219
|
});
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var ErrorUtils
|
|
13
|
+
var _global$ErrorUtils$ap, _global$ErrorUtils;
|
|
14
14
|
|
|
15
15
|
var RelayReader = require('./RelayReader');
|
|
16
16
|
|
|
@@ -22,10 +22,13 @@ var RelayRecordSourceProxy = require('../mutations/RelayRecordSourceProxy');
|
|
|
22
22
|
|
|
23
23
|
var RelayRecordSourceSelectorProxy = require('../mutations/RelayRecordSourceSelectorProxy');
|
|
24
24
|
|
|
25
|
-
var invariant = require(
|
|
25
|
+
var invariant = require('invariant');
|
|
26
26
|
|
|
27
27
|
var warning = require("fbjs/lib/warning");
|
|
28
28
|
|
|
29
|
+
var applyWithGuard = (_global$ErrorUtils$ap = (_global$ErrorUtils = global.ErrorUtils) === null || _global$ErrorUtils === void 0 ? void 0 : _global$ErrorUtils.applyWithGuard) !== null && _global$ErrorUtils$ap !== void 0 ? _global$ErrorUtils$ap : function (callback, context, args, onError, name) {
|
|
30
|
+
return callback.apply(context, args);
|
|
31
|
+
};
|
|
29
32
|
/**
|
|
30
33
|
* Coordinates the concurrent modification of a `Store` due to optimistic and
|
|
31
34
|
* non-revertable client updates and server payloads:
|
|
@@ -37,6 +40,7 @@ var warning = require("fbjs/lib/warning");
|
|
|
37
40
|
* - Executes handlers for "handle" fields.
|
|
38
41
|
* - Reverts and reapplies pending optimistic updates.
|
|
39
42
|
*/
|
|
43
|
+
|
|
40
44
|
var RelayPublishQueue = /*#__PURE__*/function () {
|
|
41
45
|
// True if the next `run()` should apply the backup and rerun all optimistic
|
|
42
46
|
// updates performing a rebase.
|
|
@@ -259,7 +263,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
259
263
|
var sink = RelayRecordSource.create();
|
|
260
264
|
var mutator = new RelayRecordSourceMutator(_this2._store.getSource(), sink);
|
|
261
265
|
var recordSourceProxy = new RelayRecordSourceProxy(mutator, _this2._getDataID);
|
|
262
|
-
|
|
266
|
+
applyWithGuard(updater, null, [recordSourceProxy], null, 'RelayPublishQueue:commitData');
|
|
263
267
|
invalidatedStore = invalidatedStore || recordSourceProxy.isStoreMarkedForInvalidation();
|
|
264
268
|
var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
|
|
265
269
|
|
|
@@ -288,7 +292,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
288
292
|
var processUpdate = function processUpdate(optimisticUpdate) {
|
|
289
293
|
if (optimisticUpdate.storeUpdater) {
|
|
290
294
|
var storeUpdater = optimisticUpdate.storeUpdater;
|
|
291
|
-
|
|
295
|
+
applyWithGuard(storeUpdater, null, [recordSourceProxy], null, 'RelayPublishQueue:applyUpdates');
|
|
292
296
|
} else {
|
|
293
297
|
var operation = optimisticUpdate.operation,
|
|
294
298
|
payload = optimisticUpdate.payload,
|
|
@@ -304,7 +308,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
304
308
|
}
|
|
305
309
|
|
|
306
310
|
if (updater) {
|
|
307
|
-
|
|
311
|
+
applyWithGuard(updater, null, [recordSourceSelectorProxy, selectorData], null, 'RelayPublishQueue:applyUpdates');
|
|
308
312
|
}
|
|
309
313
|
}
|
|
310
314
|
}; // rerun all updaters in case we are running a rebase
|
package/lib/store/RelayReader.js
CHANGED
|
@@ -10,11 +10,15 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
|
+
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
13
17
|
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
14
18
|
|
|
15
19
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
16
20
|
|
|
17
|
-
var invariant = require(
|
|
21
|
+
var invariant = require('invariant');
|
|
18
22
|
|
|
19
23
|
var _require = require('../util/RelayConcreteNode'),
|
|
20
24
|
CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
|
|
@@ -27,6 +31,7 @@ var _require = require('../util/RelayConcreteNode'),
|
|
|
27
31
|
LINKED_FIELD = _require.LINKED_FIELD,
|
|
28
32
|
MODULE_IMPORT = _require.MODULE_IMPORT,
|
|
29
33
|
REQUIRED_FIELD = _require.REQUIRED_FIELD,
|
|
34
|
+
RELAY_RESOLVER = _require.RELAY_RESOLVER,
|
|
30
35
|
SCALAR_FIELD = _require.SCALAR_FIELD,
|
|
31
36
|
STREAM = _require.STREAM;
|
|
32
37
|
|
|
@@ -45,8 +50,11 @@ var _require3 = require('./RelayStoreUtils'),
|
|
|
45
50
|
getStorageKey = _require3.getStorageKey,
|
|
46
51
|
getModuleComponentKey = _require3.getModuleComponentKey;
|
|
47
52
|
|
|
48
|
-
var _require4 = require('./
|
|
49
|
-
|
|
53
|
+
var _require4 = require('./ResolverFragments'),
|
|
54
|
+
withResolverContext = _require4.withResolverContext;
|
|
55
|
+
|
|
56
|
+
var _require5 = require('./TypeID'),
|
|
57
|
+
generateTypeID = _require5.generateTypeID;
|
|
50
58
|
|
|
51
59
|
function read(recordSource, selector) {
|
|
52
60
|
var reader = new RelayReader(recordSource, selector);
|
|
@@ -64,7 +72,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
64
72
|
this._missingRequiredFields = null;
|
|
65
73
|
this._owner = selector.owner;
|
|
66
74
|
this._recordSource = recordSource;
|
|
67
|
-
this._seenRecords =
|
|
75
|
+
this._seenRecords = new Set();
|
|
68
76
|
this._selector = selector;
|
|
69
77
|
this._variables = selector.variables;
|
|
70
78
|
}
|
|
@@ -138,7 +146,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
138
146
|
_proto._traverse = function _traverse(node, dataID, prevData) {
|
|
139
147
|
var record = this._recordSource.get(dataID);
|
|
140
148
|
|
|
141
|
-
this._seenRecords
|
|
149
|
+
this._seenRecords.add(dataID);
|
|
142
150
|
|
|
143
151
|
if (record == null) {
|
|
144
152
|
if (record === undefined) {
|
|
@@ -156,7 +164,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
156
164
|
};
|
|
157
165
|
|
|
158
166
|
_proto._getVariableValue = function _getVariableValue(name) {
|
|
159
|
-
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Undefined variable `%s`.', name) : invariant(false) : void 0;
|
|
167
|
+
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Undefined variable `%s`.', name) : invariant(false) : void 0; // $FlowFixMe[cannot-write]
|
|
168
|
+
|
|
160
169
|
return this._variables[name];
|
|
161
170
|
};
|
|
162
171
|
|
|
@@ -309,6 +318,17 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
309
318
|
break;
|
|
310
319
|
}
|
|
311
320
|
|
|
321
|
+
case RELAY_RESOLVER:
|
|
322
|
+
{
|
|
323
|
+
if (!RelayFeatureFlags.ENABLE_RELAY_RESOLVERS) {
|
|
324
|
+
throw new Error('Relay Resolver fields are not yet supported.');
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
this._readResolverField(selection, record, data);
|
|
328
|
+
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
|
|
312
332
|
case FRAGMENT_SPREAD:
|
|
313
333
|
this._createFragmentPointer(selection, record, data);
|
|
314
334
|
|
|
@@ -320,7 +340,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
320
340
|
break;
|
|
321
341
|
|
|
322
342
|
case INLINE_DATA_FRAGMENT_SPREAD:
|
|
323
|
-
this.
|
|
343
|
+
this._createInlineDataOrResolverFragmentPointer(selection, record, data);
|
|
324
344
|
|
|
325
345
|
break;
|
|
326
346
|
|
|
@@ -387,6 +407,40 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
387
407
|
}
|
|
388
408
|
};
|
|
389
409
|
|
|
410
|
+
_proto._readResolverField = function _readResolverField(selection, record, data) {
|
|
411
|
+
var _this = this;
|
|
412
|
+
|
|
413
|
+
var name = selection.name,
|
|
414
|
+
alias = selection.alias,
|
|
415
|
+
resolverModule = selection.resolverModule,
|
|
416
|
+
fragment = selection.fragment;
|
|
417
|
+
var key = {
|
|
418
|
+
__id: RelayModernRecord.getDataID(record),
|
|
419
|
+
__fragmentOwner: this._owner,
|
|
420
|
+
__fragments: (0, _defineProperty2["default"])({}, fragment.name, {})
|
|
421
|
+
};
|
|
422
|
+
var resolverContext = {
|
|
423
|
+
getDataForResolverFragment: function getDataForResolverFragment(singularReaderSelector) {
|
|
424
|
+
var _resolverFragmentData;
|
|
425
|
+
|
|
426
|
+
var resolverFragmentData = {};
|
|
427
|
+
|
|
428
|
+
_this._createInlineDataOrResolverFragmentPointer(singularReaderSelector.node, record, resolverFragmentData);
|
|
429
|
+
|
|
430
|
+
var answer = (_resolverFragmentData = resolverFragmentData[FRAGMENTS_KEY]) === null || _resolverFragmentData === void 0 ? void 0 : _resolverFragmentData[fragment.name];
|
|
431
|
+
!(typeof answer === 'object' && answer !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, "Expected reader data to contain a __fragments property with a property for the fragment named ".concat(fragment.name, ", but it is missing.")) : invariant(false) : void 0;
|
|
432
|
+
return answer;
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
var resolverResult = withResolverContext(resolverContext, function () {
|
|
436
|
+
return (// $FlowFixMe[prop-missing] - resolver module's type signature is a lie
|
|
437
|
+
resolverModule(key)
|
|
438
|
+
);
|
|
439
|
+
});
|
|
440
|
+
data[alias !== null && alias !== void 0 ? alias : name] = resolverResult;
|
|
441
|
+
return resolverResult;
|
|
442
|
+
};
|
|
443
|
+
|
|
390
444
|
_proto._readFlightField = function _readFlightField(field, record, data) {
|
|
391
445
|
var _field$alias;
|
|
392
446
|
|
|
@@ -406,7 +460,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
406
460
|
|
|
407
461
|
var reactFlightClientResponseRecord = this._recordSource.get(reactFlightClientResponseRecordID);
|
|
408
462
|
|
|
409
|
-
this._seenRecords
|
|
463
|
+
this._seenRecords.add(reactFlightClientResponseRecordID);
|
|
410
464
|
|
|
411
465
|
if (reactFlightClientResponseRecord == null) {
|
|
412
466
|
data[applicationName] = reactFlightClientResponseRecord;
|
|
@@ -465,7 +519,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
465
519
|
};
|
|
466
520
|
|
|
467
521
|
_proto._readPluralLink = function _readPluralLink(field, record, data) {
|
|
468
|
-
var
|
|
522
|
+
var _this2 = this;
|
|
469
523
|
|
|
470
524
|
var _field$alias4;
|
|
471
525
|
|
|
@@ -489,7 +543,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
489
543
|
linkedIDs.forEach(function (linkedID, nextIndex) {
|
|
490
544
|
if (linkedID == null) {
|
|
491
545
|
if (linkedID === undefined) {
|
|
492
|
-
|
|
546
|
+
_this2._isMissingData = true;
|
|
493
547
|
} // $FlowFixMe[cannot-write]
|
|
494
548
|
|
|
495
549
|
|
|
@@ -501,7 +555,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
501
555
|
!(prevItem == null || typeof prevItem === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field `%s` on record `%s` ' + 'to be an object, got `%s`.', applicationName, RelayModernRecord.getDataID(record), prevItem) : invariant(false) : void 0; // $FlowFixMe[cannot-write]
|
|
502
556
|
// $FlowFixMe[incompatible-variance]
|
|
503
557
|
|
|
504
|
-
linkedArray[nextIndex] =
|
|
558
|
+
linkedArray[nextIndex] = _this2._traverse(field, linkedID, prevItem);
|
|
505
559
|
});
|
|
506
560
|
data[applicationName] = linkedArray;
|
|
507
561
|
return linkedArray;
|
|
@@ -563,7 +617,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
563
617
|
}
|
|
564
618
|
};
|
|
565
619
|
|
|
566
|
-
_proto.
|
|
620
|
+
_proto._createInlineDataOrResolverFragmentPointer = function _createInlineDataOrResolverFragmentPointer(fragmentSpreadOrFragment, record, data) {
|
|
567
621
|
var fragmentPointers = data[FRAGMENTS_KEY];
|
|
568
622
|
|
|
569
623
|
if (fragmentPointers == null) {
|
|
@@ -578,10 +632,10 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
578
632
|
|
|
579
633
|
var inlineData = {};
|
|
580
634
|
|
|
581
|
-
this._traverseSelections(
|
|
635
|
+
this._traverseSelections(fragmentSpreadOrFragment.selections, record, inlineData); // $FlowFixMe[cannot-write] - writing into read-only field
|
|
582
636
|
|
|
583
637
|
|
|
584
|
-
fragmentPointers[
|
|
638
|
+
fragmentPointers[fragmentSpreadOrFragment.name] = inlineData;
|
|
585
639
|
};
|
|
586
640
|
|
|
587
641
|
return RelayReader;
|
|
@@ -28,12 +28,13 @@ var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
|
|
|
28
28
|
|
|
29
29
|
var getOperation = require('../util/getOperation');
|
|
30
30
|
|
|
31
|
-
var invariant = require(
|
|
31
|
+
var invariant = require('invariant');
|
|
32
32
|
|
|
33
33
|
var _require = require('./TypeID'),
|
|
34
34
|
generateTypeID = _require.generateTypeID;
|
|
35
35
|
|
|
36
36
|
var CONDITION = RelayConcreteNode.CONDITION,
|
|
37
|
+
CLIENT_COMPONENT = RelayConcreteNode.CLIENT_COMPONENT,
|
|
37
38
|
CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
|
|
38
39
|
DEFER = RelayConcreteNode.DEFER,
|
|
39
40
|
FLIGHT_FIELD = RelayConcreteNode.FLIGHT_FIELD,
|
|
@@ -50,11 +51,11 @@ var ROOT_ID = RelayStoreUtils.ROOT_ID,
|
|
|
50
51
|
getStorageKey = RelayStoreUtils.getStorageKey,
|
|
51
52
|
getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
|
|
52
53
|
|
|
53
|
-
function mark(recordSource, selector, references, operationLoader) {
|
|
54
|
+
function mark(recordSource, selector, references, operationLoader, shouldProcessClientComponents) {
|
|
54
55
|
var dataID = selector.dataID,
|
|
55
56
|
node = selector.node,
|
|
56
57
|
variables = selector.variables;
|
|
57
|
-
var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader);
|
|
58
|
+
var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader, shouldProcessClientComponents);
|
|
58
59
|
marker.mark(node, dataID);
|
|
59
60
|
}
|
|
60
61
|
/**
|
|
@@ -63,12 +64,13 @@ function mark(recordSource, selector, references, operationLoader) {
|
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
66
|
-
function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
|
|
67
|
+
function RelayReferenceMarker(recordSource, variables, references, operationLoader, shouldProcessClientComponents) {
|
|
67
68
|
this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
|
|
68
69
|
this._operationName = null;
|
|
69
70
|
this._recordSource = recordSource;
|
|
70
71
|
this._references = references;
|
|
71
72
|
this._variables = variables;
|
|
73
|
+
this._shouldProcessClientComponents = shouldProcessClientComponents;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
var _proto = RelayReferenceMarker.prototype;
|
|
@@ -94,7 +96,8 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
94
96
|
};
|
|
95
97
|
|
|
96
98
|
_proto._getVariableValue = function _getVariableValue(name) {
|
|
97
|
-
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker(): Undefined variable `%s`.', name) : invariant(false) : void 0;
|
|
99
|
+
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker(): Undefined variable `%s`.', name) : invariant(false) : void 0; // $FlowFixMe[cannot-write]
|
|
100
|
+
|
|
98
101
|
return this._variables[name];
|
|
99
102
|
};
|
|
100
103
|
|
|
@@ -145,7 +148,9 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
145
148
|
// $FlowFixMe[incompatible-type]
|
|
146
149
|
|
|
147
150
|
case FRAGMENT_SPREAD:
|
|
148
|
-
|
|
151
|
+
_this._traverseSelections(selection.fragment.selections, record);
|
|
152
|
+
|
|
153
|
+
break;
|
|
149
154
|
|
|
150
155
|
case LINKED_HANDLE:
|
|
151
156
|
// The selections for a "handle" field are the same as those of the
|
|
@@ -209,6 +214,15 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
209
214
|
|
|
210
215
|
break;
|
|
211
216
|
|
|
217
|
+
case CLIENT_COMPONENT:
|
|
218
|
+
if (_this._shouldProcessClientComponents === false) {
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
_this._traverseSelections(selection.fragment.selections, record);
|
|
223
|
+
|
|
224
|
+
break;
|
|
225
|
+
|
|
212
226
|
default:
|
|
213
227
|
selection;
|
|
214
228
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
|
|
@@ -284,26 +298,26 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
284
298
|
return;
|
|
285
299
|
}
|
|
286
300
|
|
|
287
|
-
var
|
|
301
|
+
var reachableExecutableDefinitions = RelayModernRecord.getValue(reactFlightClientResponseRecord, RelayStoreReactFlightUtils.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY);
|
|
288
302
|
|
|
289
|
-
if (!Array.isArray(
|
|
303
|
+
if (!Array.isArray(reachableExecutableDefinitions)) {
|
|
290
304
|
return;
|
|
291
305
|
}
|
|
292
306
|
|
|
293
307
|
var operationLoader = this._operationLoader;
|
|
294
|
-
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected an operationLoader to be configured when using ' + 'React Flight') : invariant(false) : void 0; // In Flight, the variables that are in scope for reachable
|
|
295
|
-
// the same as what's in scope for the outer query.
|
|
308
|
+
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected an operationLoader to be configured when using ' + 'React Flight') : invariant(false) : void 0; // In Flight, the variables that are in scope for reachable executable
|
|
309
|
+
// definitions aren't the same as what's in scope for the outer query.
|
|
296
310
|
|
|
297
311
|
var prevVariables = this._variables; // $FlowFixMe[incompatible-cast]
|
|
298
312
|
|
|
299
|
-
var _iterator = (0, _createForOfIteratorHelper2["default"])(
|
|
313
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(reachableExecutableDefinitions),
|
|
300
314
|
_step;
|
|
301
315
|
|
|
302
316
|
try {
|
|
303
317
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
304
|
-
var
|
|
305
|
-
this._variables =
|
|
306
|
-
var operationReference =
|
|
318
|
+
var definition = _step.value;
|
|
319
|
+
this._variables = definition.variables;
|
|
320
|
+
var operationReference = definition.module;
|
|
307
321
|
var normalizationRootNode = operationLoader.get(operationReference);
|
|
308
322
|
|
|
309
323
|
if (normalizationRootNode != null) {
|