relay-runtime 11.0.0-rc.0 → 12.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/handlers/connection/ConnectionHandler.js.flow +7 -0
- package/handlers/connection/MutationHandlers.js.flow +28 -0
- package/index.js +1 -1
- package/index.js.flow +20 -3
- package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
- package/lib/handlers/connection/ConnectionHandler.js +12 -6
- package/lib/handlers/connection/MutationHandlers.js +67 -8
- package/lib/index.js +15 -0
- package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +148 -0
- package/lib/multi-actor-environment/ActorUtils.js +27 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +406 -0
- package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
- package/lib/multi-actor-environment/index.js +21 -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 +7 -2
- package/lib/mutations/applyOptimisticMutation.js +1 -1
- package/lib/mutations/commitMutation.js +5 -2
- package/lib/mutations/validateMutation.js +39 -17
- package/lib/network/RelayNetwork.js +1 -1
- package/lib/network/RelayObservable.js +3 -1
- package/lib/network/RelayQueryResponseCache.js +20 -3
- package/lib/network/wrapNetworkWithLogObserver.js +78 -0
- package/lib/query/GraphQLTag.js +1 -1
- package/lib/query/fetchQuery.js +1 -1
- package/lib/query/fetchQueryInternal.js +1 -1
- package/lib/store/DataChecker.js +132 -50
- package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +524 -187
- package/lib/store/RelayConcreteVariables.js +29 -4
- package/lib/store/RelayModernEnvironment.js +137 -220
- package/lib/store/RelayModernFragmentSpecResolver.js +49 -23
- package/lib/store/RelayModernRecord.js +36 -2
- package/lib/store/RelayModernSelector.js +1 -1
- package/lib/store/RelayModernStore.js +53 -22
- package/lib/store/RelayOperationTracker.js +34 -24
- package/lib/store/RelayPublishQueue.js +30 -8
- package/lib/store/RelayReader.js +177 -29
- package/lib/store/RelayRecordSource.js +87 -3
- package/lib/store/RelayReferenceMarker.js +53 -28
- package/lib/store/RelayResponseNormalizer.js +247 -108
- package/lib/store/RelayStoreReactFlightUtils.js +7 -11
- package/lib/store/RelayStoreSubscriptions.js +8 -5
- package/lib/store/RelayStoreUtils.js +10 -4
- package/lib/store/ResolverCache.js +213 -0
- package/lib/store/ResolverFragments.js +57 -0
- package/lib/store/cloneRelayHandleSourceField.js +1 -1
- package/lib/store/cloneRelayScalarHandleSourceField.js +1 -1
- package/lib/store/createRelayContext.js +2 -2
- package/lib/store/defaultGetDataID.js +3 -1
- package/lib/store/readInlineData.js +1 -1
- package/lib/subscription/requestSubscription.js +32 -6
- package/lib/util/RelayConcreteNode.js +3 -0
- package/lib/util/RelayFeatureFlags.js +5 -4
- package/lib/util/RelayProfiler.js +17 -187
- package/lib/util/RelayReplaySubject.js +22 -7
- package/lib/util/deepFreeze.js +1 -0
- package/lib/util/getPaginationMetadata.js +41 -0
- package/lib/util/getPaginationVariables.js +67 -0
- package/lib/util/getPendingOperationsForFragment.js +55 -0
- package/lib/util/getRefetchMetadata.js +36 -0
- package/lib/util/getRelayHandleKey.js +1 -1
- package/lib/util/getRequestIdentifier.js +1 -1
- package/lib/util/getValueAtPath.js +51 -0
- package/lib/util/isEmptyObject.js +1 -1
- package/lib/util/registerEnvironmentWithDevTools.js +26 -0
- package/lib/util/withDuration.js +31 -0
- package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +217 -0
- package/multi-actor-environment/ActorUtils.js.flow +33 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +485 -0
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +245 -0
- package/multi-actor-environment/index.js.flow +27 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +7 -2
- package/mutations/commitMutation.js.flow +3 -1
- package/mutations/validateMutation.js.flow +42 -16
- package/network/RelayNetworkTypes.js.flow +17 -8
- package/network/RelayObservable.js.flow +2 -0
- package/network/RelayQueryResponseCache.js.flow +31 -17
- package/network/wrapNetworkWithLogObserver.js.flow +99 -0
- package/package.json +3 -2
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +5 -1
- package/store/DataChecker.js.flow +148 -44
- package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +578 -237
- package/store/RelayConcreteVariables.js.flow +31 -1
- package/store/RelayModernEnvironment.js.flow +132 -220
- package/store/RelayModernFragmentSpecResolver.js.flow +40 -14
- package/store/RelayModernOperationDescriptor.js.flow +9 -3
- package/store/RelayModernRecord.js.flow +49 -0
- package/store/RelayModernStore.js.flow +57 -17
- package/store/RelayOperationTracker.js.flow +56 -34
- package/store/RelayPublishQueue.js.flow +37 -11
- package/store/RelayReader.js.flow +186 -27
- package/store/RelayRecordSource.js.flow +72 -6
- package/store/RelayReferenceMarker.js.flow +51 -21
- package/store/RelayResponseNormalizer.js.flow +251 -67
- package/store/RelayStoreReactFlightUtils.js.flow +6 -9
- package/store/RelayStoreSubscriptions.js.flow +10 -3
- package/store/RelayStoreTypes.js.flow +144 -21
- package/store/RelayStoreUtils.js.flow +19 -4
- package/store/ResolverCache.js.flow +247 -0
- package/store/ResolverFragments.js.flow +128 -0
- package/store/createRelayContext.js.flow +1 -1
- package/store/defaultGetDataID.js.flow +3 -1
- package/subscription/requestSubscription.js.flow +43 -8
- package/util/NormalizationNode.js.flow +16 -3
- package/util/ReaderNode.js.flow +29 -2
- package/util/RelayConcreteNode.js.flow +3 -0
- package/util/RelayFeatureFlags.js.flow +10 -6
- package/util/RelayProfiler.js.flow +22 -194
- package/util/RelayReplaySubject.js.flow +7 -6
- package/util/RelayRuntimeTypes.js.flow +4 -2
- package/util/deepFreeze.js.flow +2 -1
- package/util/getPaginationMetadata.js.flow +74 -0
- package/util/getPaginationVariables.js.flow +112 -0
- package/util/getPendingOperationsForFragment.js.flow +62 -0
- package/util/getRefetchMetadata.js.flow +80 -0
- package/util/getValueAtPath.js.flow +46 -0
- package/util/isEmptyObject.js.flow +2 -1
- package/util/registerEnvironmentWithDevTools.js.flow +33 -0
- package/util/withDuration.js.flow +32 -0
- package/lib/store/RelayRecordSourceMapImpl.js +0 -107
- package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
- package/store/RelayRecordSourceMapImpl.js.flow +0 -91
- package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
|
@@ -10,25 +10,9 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var aggregateHandlersByName = {
|
|
16
|
-
'*': []
|
|
17
|
-
};
|
|
18
|
-
var profileHandlersByName = {
|
|
19
|
-
'*': []
|
|
20
|
-
};
|
|
21
|
-
var NOT_INVOKED = {};
|
|
13
|
+
var profileHandlersByName = {};
|
|
22
14
|
var defaultProfiler = {
|
|
23
|
-
stop:
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
var shouldInstrument = function shouldInstrument(name) {
|
|
27
|
-
if (process.env.NODE_ENV !== "production") {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return name.charAt(0) !== '@';
|
|
15
|
+
stop: function stop() {}
|
|
32
16
|
};
|
|
33
17
|
/**
|
|
34
18
|
* @public
|
|
@@ -57,152 +41,9 @@ var shouldInstrument = function shouldInstrument(name) {
|
|
|
57
41
|
* console.log(`Duration (${name})`, performance.now() - start);
|
|
58
42
|
* }
|
|
59
43
|
* });
|
|
60
|
-
*
|
|
61
|
-
* In order to reduce the impact on performance in production, instrumented
|
|
62
|
-
* methods and profilers with names that begin with `@` will only be measured
|
|
63
|
-
* if `__DEV__` is true. This should be used for very hot functions.
|
|
64
44
|
*/
|
|
65
45
|
|
|
66
|
-
|
|
67
46
|
var RelayProfiler = {
|
|
68
|
-
/**
|
|
69
|
-
* Instruments methods on a class or object. This re-assigns the method in
|
|
70
|
-
* order to preserve function names in stack traces (which are detected by
|
|
71
|
-
* modern debuggers via heuristics). Example usage:
|
|
72
|
-
*
|
|
73
|
-
* const RelayStore = { primeCache: function() {...} };
|
|
74
|
-
* RelayProfiler.instrumentMethods(RelayStore, {
|
|
75
|
-
* primeCache: 'RelayStore.primeCache'
|
|
76
|
-
* });
|
|
77
|
-
*
|
|
78
|
-
* RelayStore.primeCache.attachHandler(...);
|
|
79
|
-
*
|
|
80
|
-
* As a result, the methods will be replaced by wrappers that provide the
|
|
81
|
-
* `attachHandler` and `detachHandler` methods.
|
|
82
|
-
*/
|
|
83
|
-
instrumentMethods: function instrumentMethods(object, names) {
|
|
84
|
-
for (var _key in names) {
|
|
85
|
-
if (names.hasOwnProperty(_key)) {
|
|
86
|
-
if (typeof object[_key] === 'function') {
|
|
87
|
-
object[_key] = RelayProfiler.instrument(names[_key], object[_key]);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Wraps the supplied function with one that provides the `attachHandler` and
|
|
95
|
-
* `detachHandler` methods. Example usage:
|
|
96
|
-
*
|
|
97
|
-
* const printRelayQuery =
|
|
98
|
-
* RelayProfiler.instrument('printRelayQuery', printRelayQuery);
|
|
99
|
-
*
|
|
100
|
-
* printRelayQuery.attachHandler(...);
|
|
101
|
-
*
|
|
102
|
-
* NOTE: The instrumentation assumes that no handlers are attached or detached
|
|
103
|
-
* in the course of executing another handler.
|
|
104
|
-
*/
|
|
105
|
-
instrument: function instrument(name, originalFunction) {
|
|
106
|
-
if (!shouldInstrument(name)) {
|
|
107
|
-
originalFunction.attachHandler = emptyFunction;
|
|
108
|
-
originalFunction.detachHandler = emptyFunction;
|
|
109
|
-
return originalFunction;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (!aggregateHandlersByName.hasOwnProperty(name)) {
|
|
113
|
-
aggregateHandlersByName[name] = [];
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
var catchallHandlers = aggregateHandlersByName['*'];
|
|
117
|
-
var aggregateHandlers = aggregateHandlersByName[name];
|
|
118
|
-
var handlers = [];
|
|
119
|
-
var contexts = [];
|
|
120
|
-
|
|
121
|
-
var invokeHandlers = function invokeHandlers() {
|
|
122
|
-
var context = contexts[contexts.length - 1];
|
|
123
|
-
|
|
124
|
-
if (context[0]) {
|
|
125
|
-
context[0]--;
|
|
126
|
-
catchallHandlers[context[0]](name, invokeHandlers);
|
|
127
|
-
} else if (context[1]) {
|
|
128
|
-
context[1]--;
|
|
129
|
-
aggregateHandlers[context[1]](name, invokeHandlers);
|
|
130
|
-
} else if (context[2]) {
|
|
131
|
-
context[2]--;
|
|
132
|
-
handlers[context[2]](name, invokeHandlers);
|
|
133
|
-
} else {
|
|
134
|
-
context[5] = originalFunction.apply(context[3], context[4]);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
var instrumentedCallback = function instrumentedCallback() {
|
|
139
|
-
var returnValue;
|
|
140
|
-
|
|
141
|
-
if (aggregateHandlers.length === 0 && handlers.length === 0 && catchallHandlers.length === 0) {
|
|
142
|
-
returnValue = originalFunction.apply(this, arguments);
|
|
143
|
-
} else {
|
|
144
|
-
contexts.push([catchallHandlers.length, aggregateHandlers.length, handlers.length, this, arguments, NOT_INVOKED]);
|
|
145
|
-
invokeHandlers();
|
|
146
|
-
var context = contexts.pop();
|
|
147
|
-
returnValue = context[5];
|
|
148
|
-
|
|
149
|
-
if (returnValue === NOT_INVOKED) {
|
|
150
|
-
throw new Error('RelayProfiler: Handler did not invoke original function.');
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return returnValue;
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
instrumentedCallback.attachHandler = function (handler) {
|
|
158
|
-
handlers.push(handler);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
instrumentedCallback.detachHandler = function (handler) {
|
|
162
|
-
removeFromArray(handlers, handler);
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
instrumentedCallback.displayName = '(instrumented ' + name + ')';
|
|
166
|
-
return instrumentedCallback;
|
|
167
|
-
},
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Attaches a handler to all methods instrumented with the supplied name.
|
|
171
|
-
*
|
|
172
|
-
* function createRenderer() {
|
|
173
|
-
* return RelayProfiler.instrument('render', function() {...});
|
|
174
|
-
* }
|
|
175
|
-
* const renderA = createRenderer();
|
|
176
|
-
* const renderB = createRenderer();
|
|
177
|
-
*
|
|
178
|
-
* // Only profiles `renderA`.
|
|
179
|
-
* renderA.attachHandler(...);
|
|
180
|
-
*
|
|
181
|
-
* // Profiles both `renderA` and `renderB`.
|
|
182
|
-
* RelayProfiler.attachAggregateHandler('render', ...);
|
|
183
|
-
*
|
|
184
|
-
*/
|
|
185
|
-
attachAggregateHandler: function attachAggregateHandler(name, handler) {
|
|
186
|
-
if (shouldInstrument(name)) {
|
|
187
|
-
if (!aggregateHandlersByName.hasOwnProperty(name)) {
|
|
188
|
-
aggregateHandlersByName[name] = [];
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
aggregateHandlersByName[name].push(handler);
|
|
192
|
-
}
|
|
193
|
-
},
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Detaches a handler attached via `attachAggregateHandler`.
|
|
197
|
-
*/
|
|
198
|
-
detachAggregateHandler: function detachAggregateHandler(name, handler) {
|
|
199
|
-
if (shouldInstrument(name)) {
|
|
200
|
-
if (aggregateHandlersByName.hasOwnProperty(name)) {
|
|
201
|
-
removeFromArray(aggregateHandlersByName[name], handler);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
|
|
206
47
|
/**
|
|
207
48
|
* Instruments profiling for arbitrarily asynchronous code by a name.
|
|
208
49
|
*
|
|
@@ -217,27 +58,21 @@ var RelayProfiler = {
|
|
|
217
58
|
* attached profile handlers will receive this as the second argument.
|
|
218
59
|
*/
|
|
219
60
|
profile: function profile(name, state) {
|
|
220
|
-
var
|
|
221
|
-
var hasNamedHandlers = profileHandlersByName.hasOwnProperty(name);
|
|
61
|
+
var handlers = profileHandlersByName[name];
|
|
222
62
|
|
|
223
|
-
if (
|
|
224
|
-
var
|
|
225
|
-
var stopHandlers;
|
|
63
|
+
if (handlers && handlers.length > 0) {
|
|
64
|
+
var stopHandlers = [];
|
|
226
65
|
|
|
227
|
-
for (var ii =
|
|
228
|
-
var
|
|
229
|
-
var stopHandler = profileHandler(name, state);
|
|
230
|
-
stopHandlers = stopHandlers || [];
|
|
66
|
+
for (var ii = handlers.length - 1; ii >= 0; ii--) {
|
|
67
|
+
var stopHandler = handlers[ii](name, state);
|
|
231
68
|
stopHandlers.unshift(stopHandler);
|
|
232
69
|
}
|
|
233
70
|
|
|
234
71
|
return {
|
|
235
72
|
stop: function stop(error) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
});
|
|
240
|
-
}
|
|
73
|
+
stopHandlers.forEach(function (stopHandler) {
|
|
74
|
+
return stopHandler(error);
|
|
75
|
+
});
|
|
241
76
|
}
|
|
242
77
|
};
|
|
243
78
|
}
|
|
@@ -246,27 +81,22 @@ var RelayProfiler = {
|
|
|
246
81
|
},
|
|
247
82
|
|
|
248
83
|
/**
|
|
249
|
-
* Attaches a handler to profiles with the supplied name.
|
|
250
|
-
* attach to the special name '*' which is a catch all.
|
|
84
|
+
* Attaches a handler to profiles with the supplied name.
|
|
251
85
|
*/
|
|
252
86
|
attachProfileHandler: function attachProfileHandler(name, handler) {
|
|
253
|
-
if (
|
|
254
|
-
|
|
255
|
-
profileHandlersByName[name] = [];
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
profileHandlersByName[name].push(handler);
|
|
87
|
+
if (!profileHandlersByName.hasOwnProperty(name)) {
|
|
88
|
+
profileHandlersByName[name] = [];
|
|
259
89
|
}
|
|
90
|
+
|
|
91
|
+
profileHandlersByName[name].push(handler);
|
|
260
92
|
},
|
|
261
93
|
|
|
262
94
|
/**
|
|
263
95
|
* Detaches a handler attached via `attachProfileHandler`.
|
|
264
96
|
*/
|
|
265
97
|
detachProfileHandler: function detachProfileHandler(name, handler) {
|
|
266
|
-
if (
|
|
267
|
-
|
|
268
|
-
removeFromArray(profileHandlersByName[name], handler);
|
|
269
|
-
}
|
|
98
|
+
if (profileHandlersByName.hasOwnProperty(name)) {
|
|
99
|
+
removeFromArray(profileHandlersByName[name], handler);
|
|
270
100
|
}
|
|
271
101
|
}
|
|
272
102
|
};
|
|
@@ -12,11 +12,13 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
|
+
|
|
15
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
18
|
|
|
17
19
|
var RelayObservable = require('../network/RelayObservable');
|
|
18
20
|
|
|
19
|
-
var invariant = require(
|
|
21
|
+
var invariant = require('invariant');
|
|
20
22
|
|
|
21
23
|
/**
|
|
22
24
|
* An implementation of a `ReplaySubject` for Relay Observables.
|
|
@@ -31,7 +33,7 @@ var RelayReplaySubject = /*#__PURE__*/function () {
|
|
|
31
33
|
(0, _defineProperty2["default"])(this, "_complete", false);
|
|
32
34
|
(0, _defineProperty2["default"])(this, "_events", []);
|
|
33
35
|
(0, _defineProperty2["default"])(this, "_sinks", new Set());
|
|
34
|
-
(0, _defineProperty2["default"])(this, "_subscription",
|
|
36
|
+
(0, _defineProperty2["default"])(this, "_subscription", []);
|
|
35
37
|
this._observable = RelayObservable.create(function (sink) {
|
|
36
38
|
_this._sinks.add(sink);
|
|
37
39
|
|
|
@@ -121,16 +123,29 @@ var RelayReplaySubject = /*#__PURE__*/function () {
|
|
|
121
123
|
};
|
|
122
124
|
|
|
123
125
|
_proto.subscribe = function subscribe(observer) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
+
var subscription = this._observable.subscribe(observer);
|
|
127
|
+
|
|
128
|
+
this._subscription.push(subscription);
|
|
129
|
+
|
|
130
|
+
return subscription;
|
|
126
131
|
};
|
|
127
132
|
|
|
128
133
|
_proto.unsubscribe = function unsubscribe() {
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(this._subscription),
|
|
135
|
+
_step;
|
|
131
136
|
|
|
132
|
-
|
|
137
|
+
try {
|
|
138
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
139
|
+
var subscription = _step.value;
|
|
140
|
+
subscription.unsubscribe();
|
|
141
|
+
}
|
|
142
|
+
} catch (err) {
|
|
143
|
+
_iterator.e(err);
|
|
144
|
+
} finally {
|
|
145
|
+
_iterator.f();
|
|
133
146
|
}
|
|
147
|
+
|
|
148
|
+
this._subscription = [];
|
|
134
149
|
};
|
|
135
150
|
|
|
136
151
|
_proto.getObserverCount = function getObserverCount() {
|
package/lib/util/deepFreeze.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
function deepFreeze(object) {
|
|
20
20
|
Object.freeze(object);
|
|
21
21
|
Object.getOwnPropertyNames(object).forEach(function (name) {
|
|
22
|
+
// $FlowFixMe[prop-missing]
|
|
22
23
|
var property = object[name];
|
|
23
24
|
|
|
24
25
|
if (property && typeof property === 'object' && !Object.isFrozen(property)) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var getRefetchMetadata = require('./getRefetchMetadata');
|
|
15
|
+
|
|
16
|
+
var invariant = require('invariant');
|
|
17
|
+
|
|
18
|
+
function getPaginationMetadata(fragmentNode, componentDisplayName) {
|
|
19
|
+
var _fragmentNode$metadat, _fragmentNode$metadat2;
|
|
20
|
+
|
|
21
|
+
var _getRefetchMetadata = getRefetchMetadata(fragmentNode, componentDisplayName),
|
|
22
|
+
paginationRequest = _getRefetchMetadata.refetchableRequest,
|
|
23
|
+
refetchMetadata = _getRefetchMetadata.refetchMetadata;
|
|
24
|
+
|
|
25
|
+
var paginationMetadata = refetchMetadata.connection;
|
|
26
|
+
!(paginationMetadata != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getPaginationMetadata(): Expected fragment `%s` to include a ' + 'connection when using `%s`. Did you forget to add a @connection ' + 'directive to the connection field in the fragment?', componentDisplayName, fragmentNode.name) : invariant(false) : void 0;
|
|
27
|
+
var connectionPathInFragmentData = paginationMetadata.path;
|
|
28
|
+
var connectionMetadata = ((_fragmentNode$metadat = (_fragmentNode$metadat2 = fragmentNode.metadata) === null || _fragmentNode$metadat2 === void 0 ? void 0 : _fragmentNode$metadat2.connection) !== null && _fragmentNode$metadat !== void 0 ? _fragmentNode$metadat : [])[0];
|
|
29
|
+
!(connectionMetadata != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getPaginationMetadata(): Expected fragment `%s` to include a ' + 'connection when using `%s`. Did you forget to add a @connection ' + 'directive to the connection field in the fragment?', componentDisplayName, fragmentNode.name) : invariant(false) : void 0;
|
|
30
|
+
var identifierField = refetchMetadata.identifierField;
|
|
31
|
+
!(identifierField == null || typeof identifierField === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getRefetchMetadata(): Expected `identifierField` to be a string.') : invariant(false) : void 0;
|
|
32
|
+
return {
|
|
33
|
+
connectionPathInFragmentData: connectionPathInFragmentData,
|
|
34
|
+
identifierField: identifierField,
|
|
35
|
+
paginationRequest: paginationRequest,
|
|
36
|
+
paginationMetadata: paginationMetadata,
|
|
37
|
+
stream: connectionMetadata.stream === true
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = getPaginationMetadata;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
|
+
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
var _objectSpread4 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
19
|
+
|
|
20
|
+
var invariant = require('invariant');
|
|
21
|
+
|
|
22
|
+
var warning = require("fbjs/lib/warning");
|
|
23
|
+
|
|
24
|
+
function getPaginationVariables(direction, count, cursor, baseVariables, extraVariables, paginationMetadata) {
|
|
25
|
+
var _objectSpread3;
|
|
26
|
+
|
|
27
|
+
var backwardMetadata = paginationMetadata.backward,
|
|
28
|
+
forwardMetadata = paginationMetadata.forward;
|
|
29
|
+
|
|
30
|
+
if (direction === 'backward') {
|
|
31
|
+
var _objectSpread2;
|
|
32
|
+
|
|
33
|
+
!(backwardMetadata != null && backwardMetadata.count != null && backwardMetadata.cursor != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected backward pagination metadata to be available. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
34
|
+
process.env.NODE_ENV !== "production" ? warning(!extraVariables.hasOwnProperty(backwardMetadata.cursor), 'Relay: `UNSTABLE_extraVariables` provided by caller should not ' + 'contain cursor variable `%s`. This variable is automatically ' + 'determined by Relay.', backwardMetadata.cursor) : void 0;
|
|
35
|
+
process.env.NODE_ENV !== "production" ? warning(!extraVariables.hasOwnProperty(backwardMetadata.count), 'Relay: `UNSTABLE_extraVariables` provided by caller should not ' + 'contain count variable `%s`. This variable is automatically ' + 'determined by Relay.', backwardMetadata.count) : void 0; // $FlowFixMe[cannot-spread-interface]
|
|
36
|
+
|
|
37
|
+
var _paginationVariables = (0, _objectSpread4["default"])((0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, baseVariables), extraVariables), {}, (_objectSpread2 = {}, (0, _defineProperty2["default"])(_objectSpread2, backwardMetadata.cursor, cursor), (0, _defineProperty2["default"])(_objectSpread2, backwardMetadata.count, count), _objectSpread2));
|
|
38
|
+
|
|
39
|
+
if (forwardMetadata && forwardMetadata.cursor) {
|
|
40
|
+
_paginationVariables[forwardMetadata.cursor] = null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (forwardMetadata && forwardMetadata.count) {
|
|
44
|
+
_paginationVariables[forwardMetadata.count] = null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return _paginationVariables;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
!(forwardMetadata != null && forwardMetadata.count != null && forwardMetadata.cursor != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected forward pagination metadata to be available. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
51
|
+
process.env.NODE_ENV !== "production" ? warning(!extraVariables.hasOwnProperty(forwardMetadata.cursor), 'Relay: `UNSTABLE_extraVariables` provided by caller should not ' + 'contain cursor variable `%s`. This variable is automatically ' + 'determined by Relay.', forwardMetadata.cursor) : void 0;
|
|
52
|
+
process.env.NODE_ENV !== "production" ? warning(!extraVariables.hasOwnProperty(forwardMetadata.count), 'Relay: `UNSTABLE_extraVariables` provided by caller should not ' + 'contain count variable `%s`. This variable is automatically ' + 'determined by Relay.', forwardMetadata.count) : void 0; // $FlowFixMe[cannot-spread-interface]
|
|
53
|
+
|
|
54
|
+
var paginationVariables = (0, _objectSpread4["default"])((0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, baseVariables), extraVariables), {}, (_objectSpread3 = {}, (0, _defineProperty2["default"])(_objectSpread3, forwardMetadata.cursor, cursor), (0, _defineProperty2["default"])(_objectSpread3, forwardMetadata.count, count), _objectSpread3));
|
|
55
|
+
|
|
56
|
+
if (backwardMetadata && backwardMetadata.cursor) {
|
|
57
|
+
paginationVariables[backwardMetadata.cursor] = null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (backwardMetadata && backwardMetadata.count) {
|
|
61
|
+
paginationVariables[backwardMetadata.count] = null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return paginationVariables;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
module.exports = getPaginationVariables;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var _require = require('../query/fetchQueryInternal'),
|
|
15
|
+
getPromiseForActiveRequest = _require.getPromiseForActiveRequest;
|
|
16
|
+
|
|
17
|
+
function getPendingOperationsForFragment(environment, fragmentNode, fragmentOwner) {
|
|
18
|
+
var _pendingOperations$ma, _pendingOperations;
|
|
19
|
+
|
|
20
|
+
var pendingOperations = [];
|
|
21
|
+
var promise = getPromiseForActiveRequest(environment, fragmentOwner);
|
|
22
|
+
|
|
23
|
+
if (promise != null) {
|
|
24
|
+
pendingOperations = [fragmentOwner];
|
|
25
|
+
} else {
|
|
26
|
+
var _result$pendingOperat, _result$promise;
|
|
27
|
+
|
|
28
|
+
var result = environment.getOperationTracker().getPendingOperationsAffectingOwner(fragmentOwner);
|
|
29
|
+
pendingOperations = (_result$pendingOperat = result === null || result === void 0 ? void 0 : result.pendingOperations) !== null && _result$pendingOperat !== void 0 ? _result$pendingOperat : [];
|
|
30
|
+
promise = (_result$promise = result === null || result === void 0 ? void 0 : result.promise) !== null && _result$promise !== void 0 ? _result$promise : null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (!promise) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var pendingOperationName = (_pendingOperations$ma = (_pendingOperations = pendingOperations) === null || _pendingOperations === void 0 ? void 0 : _pendingOperations.map(function (op) {
|
|
38
|
+
return op.node.params.name;
|
|
39
|
+
}).join(',')) !== null && _pendingOperations$ma !== void 0 ? _pendingOperations$ma : null;
|
|
40
|
+
|
|
41
|
+
if (pendingOperationName == null || pendingOperationName.length === 0) {
|
|
42
|
+
pendingOperationName = 'Unknown pending operation';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var fragmentName = fragmentNode.name;
|
|
46
|
+
var promiseDisplayName = pendingOperationName === fragmentName ? "Relay(".concat(pendingOperationName, ")") : "Relay(".concat(pendingOperationName, ":").concat(fragmentName, ")"); // $FlowExpectedError[prop-missing] Expando to annotate Promises.
|
|
47
|
+
|
|
48
|
+
promise.displayName = promiseDisplayName;
|
|
49
|
+
return {
|
|
50
|
+
promise: promise,
|
|
51
|
+
pendingOperations: pendingOperations
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
module.exports = getPendingOperationsForFragment;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var invariant = require('invariant');
|
|
15
|
+
|
|
16
|
+
function getRefetchMetadata(fragmentNode, componentDisplayName) {
|
|
17
|
+
var _fragmentNode$metadat, _fragmentNode$metadat2;
|
|
18
|
+
|
|
19
|
+
!(((_fragmentNode$metadat = fragmentNode.metadata) === null || _fragmentNode$metadat === void 0 ? void 0 : _fragmentNode$metadat.plural) !== true) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getRefetchMetadata(): Expected fragment `%s` not to be plural when using ' + '`%s`. Remove `@relay(plural: true)` from fragment `%s` ' + 'in order to use it with `%s`.', fragmentNode.name, componentDisplayName, fragmentNode.name, componentDisplayName) : invariant(false) : void 0;
|
|
20
|
+
var refetchMetadata = (_fragmentNode$metadat2 = fragmentNode.metadata) === null || _fragmentNode$metadat2 === void 0 ? void 0 : _fragmentNode$metadat2.refetch;
|
|
21
|
+
!(refetchMetadata != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getRefetchMetadata(): Expected fragment `%s` to be refetchable when using `%s`. ' + 'Did you forget to add a @refetchable directive to the fragment?', componentDisplayName, fragmentNode.name) : invariant(false) : void 0; // handle both commonjs and es modules
|
|
22
|
+
|
|
23
|
+
var refetchableRequest = refetchMetadata.operation["default"] ? refetchMetadata.operation["default"] : refetchMetadata.operation;
|
|
24
|
+
var fragmentRefPathInResponse = refetchMetadata.fragmentPathInResult;
|
|
25
|
+
!(typeof refetchableRequest !== 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getRefetchMetadata(): Expected refetch query to be an ' + "operation and not a string when using `%s`. If you're seeing this, " + 'this is likely a bug in Relay.', componentDisplayName) : invariant(false) : void 0;
|
|
26
|
+
var identifierField = refetchMetadata.identifierField;
|
|
27
|
+
!(identifierField == null || typeof identifierField === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: getRefetchMetadata(): Expected `identifierField` to be a string.') : invariant(false) : void 0;
|
|
28
|
+
return {
|
|
29
|
+
fragmentRefPathInResponse: fragmentRefPathInResponse,
|
|
30
|
+
identifierField: identifierField,
|
|
31
|
+
refetchableRequest: refetchableRequest,
|
|
32
|
+
refetchMetadata: refetchMetadata
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = getRefetchMetadata;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var invariant = require(
|
|
13
|
+
var invariant = require('invariant');
|
|
14
14
|
|
|
15
15
|
var _require = require('./RelayDefaultHandleKey'),
|
|
16
16
|
DEFAULT_HANDLE_KEY = _require.DEFAULT_HANDLE_KEY;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
|
+
|
|
16
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
17
|
+
|
|
18
|
+
var invariant = require('invariant');
|
|
19
|
+
|
|
20
|
+
function getValueAtPath(data, path) {
|
|
21
|
+
var result = data;
|
|
22
|
+
|
|
23
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(path),
|
|
24
|
+
_step;
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
28
|
+
var key = _step.value;
|
|
29
|
+
|
|
30
|
+
if (result == null) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (typeof key === 'number') {
|
|
35
|
+
!Array.isArray(result) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected an array when extracting value at path. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
36
|
+
result = result[key];
|
|
37
|
+
} else {
|
|
38
|
+
!(typeof result === 'object' && !Array.isArray(result)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected an object when extracting value at path. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
39
|
+
result = result[key];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch (err) {
|
|
43
|
+
_iterator.e(err);
|
|
44
|
+
} finally {
|
|
45
|
+
_iterator.f();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
module.exports = getValueAtPath;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
* @emails oncall+relay
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
function registerEnvironmentWithDevTools(environment) {
|
|
15
|
+
// Register this Relay Environment with Relay DevTools if it exists.
|
|
16
|
+
// Note: this must always be the last step in the constructor.
|
|
17
|
+
var _global = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : undefined;
|
|
18
|
+
|
|
19
|
+
var devToolsHook = _global && _global.__RELAY_DEVTOOLS_HOOK__;
|
|
20
|
+
|
|
21
|
+
if (devToolsHook) {
|
|
22
|
+
devToolsHook.registerEnvironment(environment);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = registerEnvironmentWithDevTools;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
var _window, _window$performance;
|
|
14
|
+
|
|
15
|
+
var isPerformanceNowAvailable = typeof window !== 'undefined' && typeof ((_window = window) === null || _window === void 0 ? void 0 : (_window$performance = _window.performance) === null || _window$performance === void 0 ? void 0 : _window$performance.now) === 'function';
|
|
16
|
+
|
|
17
|
+
function currentTimestamp() {
|
|
18
|
+
if (isPerformanceNowAvailable) {
|
|
19
|
+
return window.performance.now();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return Date.now();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function withDuration(cb) {
|
|
26
|
+
var startTime = currentTimestamp();
|
|
27
|
+
var result = cb();
|
|
28
|
+
return [currentTimestamp() - startTime, result];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = withDuration;
|