relay-runtime 2.0.0-rc.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/lib/{generateRelayClientID.js → ClientID.js} +10 -3
- package/lib/ConvertToExecuteFunction.js +6 -4
- package/lib/DataChecker.js +88 -69
- package/lib/NormalizationNode.js +1 -1
- package/lib/ReaderNode.js +1 -1
- package/lib/RelayCombinedEnvironmentTypes.js +1 -1
- package/lib/RelayConcreteNode.js +5 -2
- package/lib/RelayConcreteVariables.js +15 -9
- package/lib/RelayConnectionHandler.js +27 -20
- package/lib/RelayConnectionInterface.js +4 -2
- package/lib/RelayCore.js +48 -15
- package/lib/RelayDeclarativeMutationConfig.js +16 -15
- package/lib/RelayDefaultHandleKey.js +1 -1
- package/lib/RelayDefaultHandlerProvider.js +7 -6
- package/lib/RelayDefaultMissingFieldHandlers.js +26 -0
- package/lib/RelayError.js +7 -2
- package/lib/RelayFeatureFlags.js +16 -0
- package/lib/RelayInMemoryRecordSource.js +8 -2
- package/lib/RelayModernEnvironment.js +159 -237
- package/lib/RelayModernFragmentOwner.js +72 -0
- package/lib/RelayModernFragmentSpecResolver.js +66 -15
- package/lib/RelayModernGraphQLTag.js +9 -5
- package/lib/RelayModernOperationDescriptor.js +9 -6
- package/lib/RelayModernQueryExecutor.js +791 -0
- package/lib/RelayModernRecord.js +44 -24
- package/lib/RelayModernSelector.js +208 -82
- package/lib/RelayModernStore.js +66 -34
- package/lib/RelayNetwork.js +14 -7
- package/lib/RelayNetworkLogger.js +6 -2
- package/lib/RelayNetworkLoggerTransaction.js +8 -4
- package/lib/RelayNetworkTypes.js +1 -1
- package/lib/RelayObservable.js +72 -41
- package/lib/RelayOperationTracker.js +265 -0
- package/lib/RelayProfiler.js +10 -6
- package/lib/RelayPublishQueue.js +66 -47
- package/lib/RelayQueryResponseCache.js +11 -5
- package/lib/RelayReader.js +135 -126
- package/lib/RelayRecordProxy.js +24 -20
- package/lib/RelayRecordSourceMutator.js +88 -25
- package/lib/RelayRecordSourceProxy.js +38 -19
- package/lib/RelayRecordSourceSelectorProxy.js +10 -7
- package/lib/RelayRecordState.js +1 -1
- package/lib/RelayReferenceMarker.js +66 -55
- package/lib/RelayReplaySubject.js +134 -0
- package/lib/RelayResponseNormalizer.js +245 -134
- package/lib/RelayRuntimeTypes.js +1 -1
- package/lib/RelayStoreUtils.js +55 -16
- package/lib/RelayViewerHandler.js +8 -50
- package/lib/StoreInspector.js +171 -0
- package/lib/applyRelayModernOptimisticMutation.js +8 -2
- package/lib/cloneRelayHandleSourceField.js +17 -7
- package/lib/commitLocalUpdate.js +1 -1
- package/lib/commitRelayModernMutation.js +33 -13
- package/lib/createRelayContext.js +27 -0
- package/lib/createRelayNetworkLogger.js +8 -2
- package/lib/deepFreeze.js +1 -1
- package/lib/defaultGetDataID.js +24 -0
- package/lib/fetchQueryInternal.js +232 -0
- package/lib/fetchRelayModernQuery.js +5 -3
- package/lib/getFragmentIdentifier.js +52 -0
- package/lib/getFragmentSpecIdentifier.js +26 -0
- package/lib/getRelayHandleKey.js +8 -2
- package/lib/getRequestParametersIdentifier.js +26 -0
- package/lib/hasOverlappingIDs.js +1 -1
- package/lib/index.js +155 -53
- package/lib/isPromise.js +1 -1
- package/lib/isScalarAndEqual.js +1 -1
- package/lib/normalizeRelayPayload.js +19 -10
- package/lib/recycleNodesInto.js +23 -5
- package/lib/requestRelaySubscription.js +9 -3
- package/lib/validateMutation.js +13 -6
- package/package.json +2 -2
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/lib/normalizePayload.js +0 -37
- package/lib/simpleClone.js +0 -27
|
@@ -9,9 +9,27 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
|
|
15
|
+
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
var areEqual = require("fbjs/lib/areEqual");
|
|
19
|
+
|
|
20
|
+
var invariant = require("fbjs/lib/invariant");
|
|
21
|
+
|
|
22
|
+
var isScalarAndEqual = require("./isScalarAndEqual");
|
|
23
|
+
|
|
24
|
+
var _require = require("./RelayModernFragmentOwner"),
|
|
25
|
+
getFragmentOwners = _require.getFragmentOwners;
|
|
26
|
+
|
|
27
|
+
var _require2 = require("./RelayModernSelector"),
|
|
28
|
+
areEqualSelectors = _require2.areEqualSelectors,
|
|
29
|
+
getSelectorsFromObject = _require2.getSelectorsFromObject;
|
|
30
|
+
|
|
31
|
+
var _require3 = require("./RelayStoreUtils"),
|
|
32
|
+
ROOT_ID = _require3.ROOT_ID;
|
|
15
33
|
|
|
16
34
|
/**
|
|
17
35
|
* A utility for resolving and subscribing to the results of a fragment spec
|
|
@@ -89,7 +107,7 @@ function () {
|
|
|
89
107
|
|
|
90
108
|
var _nextItem = prop !== undefined ? prop : null;
|
|
91
109
|
|
|
92
|
-
if (nextData || !
|
|
110
|
+
if (nextData || !isScalarAndEqual(_nextItem, prevItem)) {
|
|
93
111
|
nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
|
|
94
112
|
nextData[_key2] = _nextItem;
|
|
95
113
|
}
|
|
@@ -109,7 +127,9 @@ function () {
|
|
|
109
127
|
};
|
|
110
128
|
|
|
111
129
|
_proto.setProps = function setProps(props) {
|
|
112
|
-
var ownedSelectors =
|
|
130
|
+
var ownedSelectors = getSelectorsFromObject( // NOTE: We pass empty operationVariables because we want to prefer
|
|
131
|
+
// the variables from the fragment owner
|
|
132
|
+
{}, this._fragments, props, getFragmentOwners(this._fragments, props));
|
|
113
133
|
|
|
114
134
|
for (var _key3 in ownedSelectors) {
|
|
115
135
|
if (ownedSelectors.hasOwnProperty(_key3)) {
|
|
@@ -126,14 +146,14 @@ function () {
|
|
|
126
146
|
if (resolver == null) {
|
|
127
147
|
resolver = new SelectorListResolver(this._context.environment, ownedSelector, this._onChange);
|
|
128
148
|
} else {
|
|
129
|
-
!(resolver instanceof SelectorListResolver) ? process.env.NODE_ENV !== "production" ?
|
|
149
|
+
!(resolver instanceof SelectorListResolver) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernFragmentSpecResolver: Expected prop `%s` to always be an array.', _key3) : invariant(false) : void 0;
|
|
130
150
|
resolver.setSelectors(ownedSelector);
|
|
131
151
|
}
|
|
132
152
|
} else {
|
|
133
153
|
if (resolver == null) {
|
|
134
154
|
resolver = new SelectorResolver(this._context.environment, ownedSelector, this._onChange);
|
|
135
155
|
} else {
|
|
136
|
-
!(resolver instanceof SelectorResolver) ? process.env.NODE_ENV !== "production" ?
|
|
156
|
+
!(resolver instanceof SelectorResolver) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernFragmentSpecResolver: Expected prop `%s` to always be an object.', _key3) : invariant(false) : void 0;
|
|
137
157
|
resolver.setSelector(ownedSelector);
|
|
138
158
|
}
|
|
139
159
|
}
|
|
@@ -146,13 +166,13 @@ function () {
|
|
|
146
166
|
this._stale = true;
|
|
147
167
|
};
|
|
148
168
|
|
|
149
|
-
_proto.setVariables = function setVariables(variables) {
|
|
169
|
+
_proto.setVariables = function setVariables(variables, request) {
|
|
150
170
|
for (var _key4 in this._resolvers) {
|
|
151
171
|
if (this._resolvers.hasOwnProperty(_key4)) {
|
|
152
172
|
var resolver = this._resolvers[_key4];
|
|
153
173
|
|
|
154
174
|
if (resolver) {
|
|
155
|
-
resolver.setVariables(variables);
|
|
175
|
+
resolver.setVariables(variables, request);
|
|
156
176
|
}
|
|
157
177
|
}
|
|
158
178
|
}
|
|
@@ -179,7 +199,7 @@ function () {
|
|
|
179
199
|
_this2._callback();
|
|
180
200
|
});
|
|
181
201
|
|
|
182
|
-
var _snapshot = environment.lookup(ownedSelector.selector);
|
|
202
|
+
var _snapshot = environment.lookup(ownedSelector.selector, ownedSelector.owner);
|
|
183
203
|
|
|
184
204
|
this._callback = callback;
|
|
185
205
|
this._data = _snapshot.data;
|
|
@@ -203,22 +223,53 @@ function () {
|
|
|
203
223
|
};
|
|
204
224
|
|
|
205
225
|
_proto2.setSelector = function setSelector(ownedSelector) {
|
|
206
|
-
if (this._subscription != null &&
|
|
226
|
+
if (this._subscription != null && areEqualSelectors(ownedSelector, this._ownedSelector)) {
|
|
207
227
|
return;
|
|
208
228
|
}
|
|
209
229
|
|
|
210
230
|
this.dispose();
|
|
211
231
|
|
|
212
|
-
var snapshot = this._environment.lookup(ownedSelector.selector);
|
|
232
|
+
var snapshot = this._environment.lookup(ownedSelector.selector, ownedSelector.owner);
|
|
213
233
|
|
|
214
234
|
this._data = snapshot.data;
|
|
215
235
|
this._ownedSelector = ownedSelector;
|
|
216
236
|
this._subscription = this._environment.subscribe(snapshot, this._onChange);
|
|
217
237
|
};
|
|
218
238
|
|
|
219
|
-
_proto2.setVariables = function setVariables(variables) {
|
|
239
|
+
_proto2.setVariables = function setVariables(variables, request) {
|
|
240
|
+
if (areEqual(variables, this._ownedSelector.selector.variables)) {
|
|
241
|
+
// If we're not actually setting new variables, we don't actually want
|
|
242
|
+
// to create a new fragment owner, since areEqualSelectors relies on
|
|
243
|
+
// owner identity when fragment ownership is enabled.
|
|
244
|
+
// In fact, we don't even need to try to attempt to set a new selector.
|
|
245
|
+
// When fragment ownership is not enabled, setSelector will also bail
|
|
246
|
+
// out since the selector doesn't really change, so we're doing it here
|
|
247
|
+
// earlier.
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
|
|
220
251
|
var ownedSelector = {
|
|
221
|
-
owner:
|
|
252
|
+
owner: request ? // NOTE: We manually create the operation descriptor here instead of
|
|
253
|
+
// calling createOperationDescriptor() because we want to set a
|
|
254
|
+
// descriptor with *unaltered* variables as the fragment owner.
|
|
255
|
+
// This is a hack that allows us to preserve exisiting (broken)
|
|
256
|
+
// behavior of RelayModern containers while using fragment ownership
|
|
257
|
+
// to propagate variables instead of Context.
|
|
258
|
+
// For more details, see the summary of D13999308
|
|
259
|
+
{
|
|
260
|
+
fragment: {
|
|
261
|
+
dataID: ROOT_ID,
|
|
262
|
+
node: request.fragment,
|
|
263
|
+
variables: variables
|
|
264
|
+
},
|
|
265
|
+
node: request,
|
|
266
|
+
root: {
|
|
267
|
+
dataID: ROOT_ID,
|
|
268
|
+
node: request.operation,
|
|
269
|
+
variables: variables
|
|
270
|
+
},
|
|
271
|
+
variables: variables
|
|
272
|
+
} : null,
|
|
222
273
|
selector: (0, _objectSpread2["default"])({}, this._ownedSelector.selector, {
|
|
223
274
|
variables: variables
|
|
224
275
|
})
|
|
@@ -305,9 +356,9 @@ function () {
|
|
|
305
356
|
this._stale = true;
|
|
306
357
|
};
|
|
307
358
|
|
|
308
|
-
_proto3.setVariables = function setVariables(variables) {
|
|
359
|
+
_proto3.setVariables = function setVariables(variables, request) {
|
|
309
360
|
this._resolvers.forEach(function (resolver) {
|
|
310
|
-
return resolver.setVariables(variables);
|
|
361
|
+
return resolver.setVariables(variables, request);
|
|
311
362
|
});
|
|
312
363
|
|
|
313
364
|
this._stale = true;
|
|
@@ -9,12 +9,16 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
var RelayConcreteNode = require("./RelayConcreteNode");
|
|
13
|
+
|
|
14
|
+
var invariant = require("fbjs/lib/invariant");
|
|
15
|
+
|
|
12
16
|
/**
|
|
13
17
|
* Runtime function to correspond to the `graphql` tagged template function.
|
|
14
18
|
* All calls to this function should be transformed by the plugin.
|
|
15
19
|
*/
|
|
16
20
|
function graphql(strings) {
|
|
17
|
-
!false ? process.env.NODE_ENV !== "production" ?
|
|
21
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'graphql: Unexpected invocation at runtime. Either the Babel transform ' + 'was not set up, or it failed to identify this call site. Make sure it ' + 'is being used verbatim as `graphql`.') : invariant(false) : void 0;
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
function getNode(taggedNode) {
|
|
@@ -31,17 +35,17 @@ function getNode(taggedNode) {
|
|
|
31
35
|
|
|
32
36
|
function isFragment(node) {
|
|
33
37
|
var fragment = getNode(node);
|
|
34
|
-
return typeof fragment === 'object' && fragment !== null && fragment.kind ===
|
|
38
|
+
return typeof fragment === 'object' && fragment !== null && fragment.kind === RelayConcreteNode.FRAGMENT;
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
function isRequest(node) {
|
|
38
42
|
var request = getNode(node);
|
|
39
|
-
return typeof request === 'object' && request !== null && request.kind ===
|
|
43
|
+
return typeof request === 'object' && request !== null && request.kind === RelayConcreteNode.REQUEST;
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
function getFragment(taggedNode) {
|
|
43
47
|
var fragment = getNode(taggedNode);
|
|
44
|
-
!isFragment(fragment) ? process.env.NODE_ENV !== "production" ?
|
|
48
|
+
!isFragment(fragment) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernGraphQLTag: Expected a fragment, got `%s`.', JSON.stringify(fragment)) : invariant(false) : void 0;
|
|
45
49
|
return fragment;
|
|
46
50
|
}
|
|
47
51
|
|
|
@@ -74,7 +78,7 @@ function getRefetchableFragment(taggedNode) {
|
|
|
74
78
|
|
|
75
79
|
function getRequest(taggedNode) {
|
|
76
80
|
var request = getNode(taggedNode);
|
|
77
|
-
!isRequest(request) ? process.env.NODE_ENV !== "production" ?
|
|
81
|
+
!isRequest(request) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernGraphQLTag: Expected a request, got `%s`.', JSON.stringify(request)) : invariant(false) : void 0;
|
|
78
82
|
return request;
|
|
79
83
|
}
|
|
80
84
|
|
|
@@ -4,11 +4,17 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
var _require = require("./RelayConcreteVariables"),
|
|
13
|
+
getOperationVariables = _require.getOperationVariables;
|
|
14
|
+
|
|
15
|
+
var _require2 = require("./RelayStoreUtils"),
|
|
16
|
+
ROOT_ID = _require2.ROOT_ID;
|
|
17
|
+
|
|
12
18
|
/**
|
|
13
19
|
* Creates an instance of the `OperationDescriptor` type defined in
|
|
14
20
|
* `RelayStoreTypes` given an operation and some variables. The input variables
|
|
@@ -17,11 +23,8 @@
|
|
|
17
23
|
*/
|
|
18
24
|
function createOperationDescriptor(request, variables) {
|
|
19
25
|
var operation = request.operation;
|
|
20
|
-
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
var dataID = require("./RelayStoreUtils").ROOT_ID;
|
|
24
|
-
|
|
26
|
+
var operationVariables = getOperationVariables(operation, variables);
|
|
27
|
+
var dataID = ROOT_ID;
|
|
25
28
|
return {
|
|
26
29
|
fragment: {
|
|
27
30
|
dataID: dataID,
|