react-relay 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.
Files changed (166) hide show
  1. package/index.js +2 -2
  2. package/lib/ReactRelayContext.js +6 -3
  3. package/lib/ReactRelayFragmentContainer.js +48 -46
  4. package/lib/ReactRelayFragmentMockRenderer.js +5 -1
  5. package/lib/ReactRelayPaginationContainer.js +102 -68
  6. package/lib/ReactRelayQueryFetcher.js +54 -28
  7. package/lib/ReactRelayQueryRenderer.js +28 -20
  8. package/lib/ReactRelayRefetchContainer.js +70 -58
  9. package/lib/ReactRelayTestMocker.js +56 -43
  10. package/lib/ReactRelayTypes.js +1 -1
  11. package/lib/RelayContext.js +8 -2
  12. package/lib/assertFragmentMap.js +9 -7
  13. package/lib/buildReactRelayContainer.js +32 -23
  14. package/lib/index.js +41 -0
  15. package/lib/isRelayEnvironment.js +1 -1
  16. package/lib/isRelayVariables.js +1 -1
  17. package/lib/readContext.js +7 -4
  18. package/package.json +4 -4
  19. package/react-relay.js +2 -2
  20. package/react-relay.min.js +2 -2
  21. package/classic.js +0 -10
  22. package/compat.js +0 -10
  23. package/lib/ConcreteQuery.js +0 -10
  24. package/lib/GraphQLQueryRunner.js +0 -264
  25. package/lib/GraphQLRange.js +0 -1124
  26. package/lib/GraphQLSegment.js +0 -743
  27. package/lib/GraphQLStoreChangeEmitter.js +0 -141
  28. package/lib/GraphQLStoreQueryResolver.js +0 -288
  29. package/lib/GraphQLStoreRangeUtils.js +0 -126
  30. package/lib/QueryBuilder.js +0 -228
  31. package/lib/ReactRelayClassicExports.js +0 -29
  32. package/lib/ReactRelayCompatContainerBuilder.js +0 -175
  33. package/lib/ReactRelayCompatPublic.js +0 -28
  34. package/lib/ReactRelayContainerProfiler.js +0 -30
  35. package/lib/ReactRelayFragmentContainer-flowtest.js +0 -201
  36. package/lib/ReactRelayPaginationContainer-flowtest.js +0 -213
  37. package/lib/ReactRelayPublic.js +0 -29
  38. package/lib/ReactRelayRefetchContainer-flowtest.js +0 -191
  39. package/lib/RelayCacheProcessor.js +0 -196
  40. package/lib/RelayChangeTracker.js +0 -83
  41. package/lib/RelayClassicContainerUtils.js +0 -49
  42. package/lib/RelayClassicCore.js +0 -34
  43. package/lib/RelayClassicRecordState.js +0 -31
  44. package/lib/RelayCompatContainer.js +0 -25
  45. package/lib/RelayCompatEnvironment.js +0 -27
  46. package/lib/RelayCompatMutations.js +0 -133
  47. package/lib/RelayCompatPaginationContainer.js +0 -27
  48. package/lib/RelayCompatRefetchContainer.js +0 -27
  49. package/lib/RelayCompatTypes.js +0 -10
  50. package/lib/RelayContainer.js +0 -889
  51. package/lib/RelayContainerComparators.js +0 -75
  52. package/lib/RelayContainerProxy.js +0 -21
  53. package/lib/RelayDefaultNetworkLayer.js +0 -192
  54. package/lib/RelayEnvironment.js +0 -449
  55. package/lib/RelayEnvironmentTypes.js +0 -10
  56. package/lib/RelayFetchMode.js +0 -17
  57. package/lib/RelayFragmentPointer.js +0 -161
  58. package/lib/RelayFragmentReference.js +0 -249
  59. package/lib/RelayFragmentSpecResolver.js +0 -305
  60. package/lib/RelayGraphQLMutation.js +0 -288
  61. package/lib/RelayGraphQLTag.js +0 -42
  62. package/lib/RelayInternalTypes.js +0 -15
  63. package/lib/RelayInternals.js +0 -24
  64. package/lib/RelayMetaRoute.js +0 -35
  65. package/lib/RelayMockRenderer.js +0 -71
  66. package/lib/RelayModern-flowtest.js +0 -342
  67. package/lib/RelayModernFlowtest_badref.graphql.js +0 -10
  68. package/lib/RelayModernFlowtest_notref.graphql.js +0 -10
  69. package/lib/RelayModernFlowtest_user.graphql.js +0 -10
  70. package/lib/RelayModernFlowtest_users.graphql.js +0 -10
  71. package/lib/RelayMutation.js +0 -322
  72. package/lib/RelayMutationDebugPrinter.js +0 -47
  73. package/lib/RelayMutationQuery.js +0 -558
  74. package/lib/RelayMutationQueue.js +0 -530
  75. package/lib/RelayMutationRequest.js +0 -103
  76. package/lib/RelayMutationTracker.js +0 -113
  77. package/lib/RelayMutationTransaction.js +0 -92
  78. package/lib/RelayMutationTransactionStatus.js +0 -55
  79. package/lib/RelayNetworkDebug.js +0 -131
  80. package/lib/RelayNetworkLayer.js +0 -185
  81. package/lib/RelayNodeInterface.js +0 -104
  82. package/lib/RelayOperationDescriptor.js +0 -40
  83. package/lib/RelayOptimisticMutationUtils.js +0 -208
  84. package/lib/RelayPendingQueryTracker.js +0 -166
  85. package/lib/RelayPropTypes.js +0 -57
  86. package/lib/RelayPublic.js +0 -44
  87. package/lib/RelayQL.js +0 -128
  88. package/lib/RelayQuery.js +0 -1584
  89. package/lib/RelayQueryCaching.js +0 -33
  90. package/lib/RelayQueryConfig.js +0 -58
  91. package/lib/RelayQueryPath.js +0 -204
  92. package/lib/RelayQueryRequest.js +0 -103
  93. package/lib/RelayQueryTracker.js +0 -86
  94. package/lib/RelayQueryTransform.js +0 -91
  95. package/lib/RelayQueryVisitor.js +0 -93
  96. package/lib/RelayQueryWriter.js +0 -573
  97. package/lib/RelayReadyState.js +0 -83
  98. package/lib/RelayReadyStateRenderer.js +0 -145
  99. package/lib/RelayRecord.js +0 -75
  100. package/lib/RelayRecordStatusMap.js +0 -57
  101. package/lib/RelayRecordStore.js +0 -433
  102. package/lib/RelayRecordWriter.js +0 -601
  103. package/lib/RelayRefQueryDescriptor.js +0 -27
  104. package/lib/RelayRenderer.js +0 -268
  105. package/lib/RelayRootContainer.js +0 -125
  106. package/lib/RelayRoute.js +0 -92
  107. package/lib/RelayRouteFragment.js +0 -44
  108. package/lib/RelaySelector.js +0 -201
  109. package/lib/RelayShallowMock.js +0 -69
  110. package/lib/RelayStaticContainer.js +0 -38
  111. package/lib/RelayStore.js +0 -12
  112. package/lib/RelayStoreConstants.js +0 -20
  113. package/lib/RelayStoreData.js +0 -660
  114. package/lib/RelayTaskQueue.js +0 -189
  115. package/lib/RelayTypes.js +0 -13
  116. package/lib/RelayVariable.js +0 -32
  117. package/lib/RelayVariables.js +0 -92
  118. package/lib/buildRQL.js +0 -160
  119. package/lib/callsFromGraphQL.js +0 -74
  120. package/lib/callsToGraphQL.js +0 -34
  121. package/lib/checkRelayQueryData.js +0 -250
  122. package/lib/createRelayQuery.js +0 -17
  123. package/lib/dedent.js +0 -49
  124. package/lib/diffRelayQuery.js +0 -757
  125. package/lib/directivesToGraphQL.js +0 -39
  126. package/lib/filterRelayQuery.js +0 -29
  127. package/lib/findRelayQueryLeaves.js +0 -293
  128. package/lib/flattenRelayQuery.js +0 -121
  129. package/lib/flattenSplitRelayQueries.js +0 -44
  130. package/lib/forEachRootCallArg.js +0 -40
  131. package/lib/fromGraphQL.js +0 -48
  132. package/lib/generateClientEdgeID.js +0 -22
  133. package/lib/generateClientID.js +0 -27
  134. package/lib/generateConcreteFragmentID.js +0 -30
  135. package/lib/generateForceIndex.js +0 -24
  136. package/lib/generateRQLFieldAlias.js +0 -39
  137. package/lib/getRangeBehavior.js +0 -58
  138. package/lib/getRelayQueries.js +0 -83
  139. package/lib/intersectRelayQuery.js +0 -149
  140. package/lib/isClassicRelayContext.js +0 -20
  141. package/lib/isClassicRelayEnvironment.js +0 -20
  142. package/lib/isCompatibleRelayFragmentType.js +0 -27
  143. package/lib/isRelayContainer.js +0 -16
  144. package/lib/makeLegacyStringishComponentRef.js +0 -52
  145. package/lib/printRelayOSSQuery.js +0 -329
  146. package/lib/printRelayQuery.js +0 -26
  147. package/lib/rangeOperationToMetadataKey.js +0 -25
  148. package/lib/readRelayQueryData.js +0 -551
  149. package/lib/relayUnstableBatchedUpdates.js +0 -12
  150. package/lib/relayUnstableBatchedUpdates.native.js +0 -11
  151. package/lib/restoreRelayCacheData.js +0 -188
  152. package/lib/serializeRelayQueryCall.js +0 -42
  153. package/lib/splitDeferredRelayQueries.js +0 -298
  154. package/lib/stableStringify.js +0 -85
  155. package/lib/testEditDistance.js +0 -112
  156. package/lib/throwFailedPromise.js +0 -26
  157. package/lib/toGraphQL.js +0 -94
  158. package/lib/transformRelayQueryPayload.js +0 -145
  159. package/lib/validateMutationConfig.js +0 -117
  160. package/lib/validateRelayReadQuery.js +0 -112
  161. package/lib/writeRelayQueryPayload.js +0 -44
  162. package/lib/writeRelayUpdatePayload.js +0 -513
  163. package/react-relay-classic.js +0 -4
  164. package/react-relay-classic.min.js +0 -9
  165. package/react-relay-compat.js +0 -4
  166. package/react-relay-compat.min.js +0 -9
@@ -1,889 +0,0 @@
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
- 'use strict';
11
-
12
- var _extends2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/extends"));
13
-
14
- var _objectWithoutPropertiesLoose2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
15
-
16
- var _objectSpread2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/objectSpread"));
17
-
18
- var _inheritsLoose2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/inheritsLoose"));
19
-
20
- var _assertThisInitialized2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
- var _defineProperty2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- /**
25
- * @public
26
- *
27
- * RelayContainer is a higher order component that provides the ability to:
28
- *
29
- * - Encode data dependencies using query fragments that are parameterized by
30
- * routes and variables.
31
- * - Manipulate variables via methods on `this.props.relay`.
32
- * - Automatically subscribe to data changes.
33
- * - Avoid unnecessary updates if data is unchanged.
34
- * - Propagate the `route` via context (available on `this.props.relay`).
35
- *
36
- */
37
- function createContainerComponent(Component, spec) {
38
- var ComponentClass = require("./RelayClassicContainerUtils").getReactComponent(Component);
39
-
40
- var componentName = require("./ReactRelayContainerUtils").getComponentName(Component);
41
-
42
- var containerName = getContainerName(Component);
43
- var fragments = spec.fragments;
44
- var fragmentNames = Object.keys(fragments);
45
- var initialVariables = spec.initialVariables || {};
46
- var prepareVariables = spec.prepareVariables;
47
- var specShouldComponentUpdate = spec.shouldComponentUpdate;
48
-
49
- var RelayContainer =
50
- /*#__PURE__*/
51
- function (_React$Component) {
52
- (0, _inheritsLoose2["default"])(RelayContainer, _React$Component);
53
-
54
- function RelayContainer(props) {
55
- var _this;
56
-
57
- _this = _React$Component.call(this, props) || this;
58
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this)), "_legacyStringishRef", require("./makeLegacyStringishComponentRef")((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this)), componentName));
59
- var route = props.__relayContext.route;
60
- !require("./isClassicRelayContext")({
61
- variables: props.__relayContext.variables,
62
- environment: props.__relayContext.environment
63
- }) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: `%s` was rendered with invalid Relay context `%s`. ' + 'Make sure the `relay` property on the React context conforms to the ' + '`RelayEnvironment` interface.', containerName, props.__relayContext) : require("fbjs/lib/invariant")(false) : void 0;
64
- !(route && typeof route.name === 'string') ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: `%s` was rendered without a valid route. Make sure ' + 'the route is valid, and make sure that it is correctly set on the ' + "parent component's context (e.g. using <RelayRootContainer>).", containerName) : require("fbjs/lib/invariant")(false) : void 0;
65
- _this._didShowFakeDataWarning = false;
66
- _this._fragmentPointers = {};
67
- _this._hasStaleQueryData = false;
68
- _this._fragmentResolvers = {};
69
- _this.mounted = true;
70
- _this.pending = null;
71
- _this.state = {
72
- queryData: {},
73
- rawVariables: {},
74
- relayProp: {
75
- applyUpdate: _this.props.__relayContext.environment.applyUpdate,
76
- commitUpdate: _this.props.__relayContext.environment.commitUpdate,
77
- environment: _this.props.__relayContext.environment,
78
- forceFetch: _this.forceFetch.bind((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this))),
79
- getPendingTransactions: _this.getPendingTransactions.bind((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this))),
80
- hasFragmentData: _this.hasFragmentData.bind((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this))),
81
- hasOptimisticUpdate: _this.hasOptimisticUpdate.bind((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this))),
82
- hasPartialData: _this.hasPartialData.bind((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this))),
83
- pendingVariables: null,
84
- route: route,
85
- setVariables: _this.setVariables.bind((0, _assertThisInitialized2["default"])((0, _assertThisInitialized2["default"])(_this))),
86
- variables: {}
87
- }
88
- };
89
- return _this;
90
- }
91
- /**
92
- * Requests an update to variables. This primes the cache for the new
93
- * variables and notifies the caller of changes via the callback. As data
94
- * becomes ready, the component will be updated.
95
- */
96
-
97
-
98
- var _proto = RelayContainer.prototype;
99
-
100
- _proto.setVariables = function setVariables(partialVariables, callback) {
101
- this._runVariables(partialVariables, callback, false);
102
- };
103
- /**
104
- * Requests an update to variables. Unlike `setVariables`, this forces data
105
- * to be fetched and written for the supplied variables. Any data that
106
- * previously satisfied the queries will be overwritten.
107
- */
108
-
109
-
110
- _proto.forceFetch = function forceFetch(partialVariables, callback) {
111
- this._runVariables(partialVariables, callback, true);
112
- };
113
- /**
114
- * Creates a query for each of the component's fragments using the given
115
- * variables, and fragment pointers that can be used to resolve the results
116
- * of those queries. The fragment pointers are of the same shape as the
117
- * `_fragmentPointers` property.
118
- */
119
-
120
-
121
- _proto._createQuerySetAndFragmentPointers = function _createQuerySetAndFragmentPointers(variables) {
122
- var _this2 = this;
123
-
124
- var fragmentPointers = {};
125
- var querySet = {};
126
-
127
- var storeData = this.props.__relayContext.environment.getStoreData();
128
-
129
- fragmentNames.forEach(function (fragmentName) {
130
- var fragment = getFragment(fragmentName, _this2.props.__relayContext.route, variables);
131
- var queryData = _this2.state.queryData[fragmentName];
132
-
133
- if (!fragment || queryData == null) {
134
- return;
135
- }
136
-
137
- var fragmentPointer;
138
-
139
- if (fragment.isPlural()) {
140
- !Array.isArray(queryData) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Invalid queryData for `%s`, expected an array ' + 'of records because the corresponding fragment is plural.', fragmentName) : require("fbjs/lib/invariant")(false) : void 0;
141
- var dataIDs = [];
142
- queryData.forEach(function (data, ii) {
143
- var dataID = require("./RelayRecord").getDataIDForObject(data);
144
-
145
- if (dataID) {
146
- querySet[fragmentName + ii] = storeData.buildFragmentQueryForDataID(fragment, dataID);
147
- dataIDs.push(dataID);
148
- }
149
- });
150
-
151
- if (dataIDs.length) {
152
- fragmentPointer = {
153
- fragment: fragment,
154
- dataIDs: dataIDs
155
- };
156
- }
157
- } else {
158
- var dataID = require("./RelayRecord").getDataIDForObject(queryData);
159
-
160
- if (dataID) {
161
- fragmentPointer = {
162
- fragment: fragment,
163
- dataIDs: dataID
164
- };
165
- querySet[fragmentName] = storeData.buildFragmentQueryForDataID(fragment, dataID);
166
- }
167
- }
168
-
169
- fragmentPointers[fragmentName] = fragmentPointer;
170
- });
171
- return {
172
- fragmentPointers: fragmentPointers,
173
- querySet: querySet
174
- };
175
- };
176
-
177
- _proto._runVariables = function _runVariables(partialVariables, callback, forceFetch) {
178
- var _this3 = this;
179
-
180
- validateVariables(initialVariables, partialVariables);
181
- var lastVariables = this.state.rawVariables;
182
- var prevVariables = this.pending ? this.pending.rawVariables : lastVariables;
183
- var rawVariables = mergeVariables(prevVariables, partialVariables);
184
- var nextVariables = rawVariables;
185
-
186
- if (prepareVariables) {
187
- var metaRoute = require("./RelayMetaRoute").get(this.props.__relayContext.route.name);
188
-
189
- nextVariables = prepareVariables(rawVariables, metaRoute);
190
- validateVariables(initialVariables, nextVariables);
191
- }
192
-
193
- this.pending && this.pending.request.abort();
194
-
195
- var completeProfiler = require("relay-runtime").RelayProfiler.profile('RelayContainer.setVariables', {
196
- containerName: containerName,
197
- nextVariables: nextVariables
198
- }); // Because the pending fetch is always canceled, we need to build a new
199
- // set of queries that includes the updated variables and initiate a new
200
- // fetch.
201
-
202
-
203
- var _this$_createQuerySet = this._createQuerySetAndFragmentPointers(nextVariables),
204
- querySet = _this$_createQuerySet.querySet,
205
- fragmentPointers = _this$_createQuerySet.fragmentPointers;
206
-
207
- var onReadyStateChange = require("fbjs/lib/ErrorUtils").guard(function (readyState) {
208
- var aborted = readyState.aborted,
209
- done = readyState.done,
210
- error = readyState.error,
211
- ready = readyState.ready;
212
- var isComplete = aborted || done || error;
213
-
214
- if (isComplete && _this3.pending === current) {
215
- _this3.pending = null;
216
- }
217
-
218
- var partialState;
219
-
220
- if (ready) {
221
- // Only update query data if variables changed. Otherwise, `querySet`
222
- // and `fragmentPointers` will be empty, and `nextVariables` will be
223
- // equal to `lastVariables`.
224
- _this3._fragmentPointers = fragmentPointers;
225
-
226
- _this3._updateFragmentResolvers(_this3.props.__relayContext.environment);
227
-
228
- var queryData = _this3._getQueryData(_this3.props);
229
-
230
- partialState = {
231
- queryData: queryData,
232
- rawVariables: rawVariables,
233
- relayProp: (0, _objectSpread2["default"])({}, _this3.state.relayProp, {
234
- pendingVariables: null,
235
- variables: nextVariables
236
- })
237
- };
238
- } else {
239
- partialState = {
240
- relayProp: (0, _objectSpread2["default"])({}, _this3.state.relayProp, {
241
- pendingVariables: isComplete ? null : nextVariables
242
- })
243
- };
244
- }
245
-
246
- var mounted = _this3.mounted;
247
-
248
- if (mounted) {
249
- var updateProfiler = require("relay-runtime").RelayProfiler.profile('RelayContainer.update');
250
-
251
- require("./relayUnstableBatchedUpdates")(function () {
252
- _this3.setState(partialState, function () {
253
- updateProfiler.stop();
254
-
255
- if (isComplete) {
256
- completeProfiler.stop();
257
- }
258
- });
259
-
260
- if (callback) {
261
- callback.call( // eslint-disable-next-line react/no-string-refs
262
- _this3.refs.component || null, (0, _objectSpread2["default"])({}, readyState, {
263
- mounted: mounted
264
- }));
265
- }
266
- });
267
- } else {
268
- if (callback) {
269
- callback((0, _objectSpread2["default"])({}, readyState, {
270
- mounted: mounted
271
- }));
272
- }
273
-
274
- if (isComplete) {
275
- completeProfiler.stop();
276
- }
277
- }
278
- }, 'RelayContainer.onReadyStateChange');
279
-
280
- var current = {
281
- rawVariables: rawVariables,
282
- request: forceFetch ? this.props.__relayContext.environment.forceFetch(querySet, onReadyStateChange) : this.props.__relayContext.environment.primeCache(querySet, onReadyStateChange)
283
- };
284
- this.pending = current;
285
- };
286
- /**
287
- * Determine if the supplied record reflects an optimistic update.
288
- */
289
-
290
-
291
- _proto.hasOptimisticUpdate = function hasOptimisticUpdate(record) {
292
- var dataID = require("./RelayRecord").getDataIDForObject(record);
293
-
294
- !(dataID != null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer.hasOptimisticUpdate(): Expected a record in `%s`.', componentName) : require("fbjs/lib/invariant")(false) : void 0;
295
- return this.props.__relayContext.environment.getStoreData().hasOptimisticUpdate(dataID);
296
- };
297
- /**
298
- * Returns the pending mutation transactions affecting the given record.
299
- */
300
-
301
-
302
- _proto.getPendingTransactions = function getPendingTransactions(record) {
303
- var dataID = require("./RelayRecord").getDataIDForObject(record);
304
-
305
- !(dataID != null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer.getPendingTransactions(): Expected a record in `%s`.', componentName) : require("fbjs/lib/invariant")(false) : void 0;
306
-
307
- var storeData = this.props.__relayContext.environment.getStoreData();
308
-
309
- var mutationIDs = storeData.getClientMutationIDs(dataID);
310
-
311
- if (!mutationIDs) {
312
- return null;
313
- }
314
-
315
- var mutationQueue = storeData.getMutationQueue();
316
- return mutationIDs.map(function (id) {
317
- return mutationQueue.getTransaction(id);
318
- });
319
- };
320
- /**
321
- * Checks if data for a deferred fragment is ready. This method should
322
- * *always* be called before rendering a child component whose fragment was
323
- * deferred (unless that child can handle null or missing data).
324
- */
325
-
326
-
327
- _proto.hasFragmentData = function hasFragmentData(fragmentReference, record) {
328
- // convert builder -> fragment in order to get the fragment's name
329
- var dataID = require("./RelayRecord").getDataIDForObject(record);
330
-
331
- !(dataID != null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer.hasFragmentData(): Second argument is not a valid ' + 'record. For `<%s X={this.props.X} />`, use ' + "`this.props.hasFragmentData(%s.getFragment('X'), this.props.X)`.", componentName, componentName) : require("fbjs/lib/invariant")(false) : void 0;
332
- var fragment = getDeferredFragment(fragmentReference, this.props.__relayContext, this.state.relayProp.variables);
333
- !(fragment instanceof require("./RelayQuery").Fragment) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer.hasFragmentData(): First argument is not a valid ' + 'fragment. Ensure that there are no failing `if` or `unless` ' + 'conditions.') : require("fbjs/lib/invariant")(false) : void 0;
334
-
335
- var storeData = this.props.__relayContext.environment.getStoreData();
336
-
337
- return storeData.getCachedStore().hasFragmentData(dataID, fragment.getCompositeHash());
338
- };
339
- /**
340
- * Determine if the supplied record might be missing data.
341
- */
342
-
343
-
344
- _proto.hasPartialData = function hasPartialData(record) {
345
- return require("./RelayRecordStatusMap").isPartialStatus(record[require("./RelayRecord").MetadataKey.STATUS]);
346
- };
347
-
348
- _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {
349
- if (this.props.__relayContext.route.useMockData) {
350
- return;
351
- }
352
-
353
- this.setState(this._initialize(this.props, this.props.__relayContext, initialVariables, null));
354
- };
355
-
356
- _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
357
- var _this4 = this;
358
-
359
- !nextProps.__relayContext ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Expected a context to be set.') : require("fbjs/lib/invariant")(false) : void 0;
360
-
361
- if (nextProps.__relayContext.route.useMockData) {
362
- return;
363
- }
364
-
365
- this.setState(function (state) {
366
- if (_this4.props.__relayContext.environment !== nextProps.__relayContext.environment || _this4.props.__relayContext.variables !== nextProps.__relayContext.variables) {
367
- _this4._cleanup();
368
- }
369
-
370
- return _this4._initialize(nextProps, nextProps.__relayContext, resetPropOverridesForVariables(spec, nextProps, state.rawVariables), state.rawVariables);
371
- });
372
- };
373
-
374
- _proto.componentWillUnmount = function componentWillUnmount() {
375
- this._cleanup();
376
-
377
- this.mounted = false;
378
- };
379
-
380
- _proto._initialize = function _initialize(props, context, propVariables, prevVariables) {
381
- var rawVariables = getVariablesWithPropOverrides(spec, props, propVariables);
382
- var nextVariables = rawVariables;
383
-
384
- if (prepareVariables) {
385
- // TODO: Allow routes without names, #7856965.
386
- var metaRoute = require("./RelayMetaRoute").get(context.route.name);
387
-
388
- nextVariables = prepareVariables(rawVariables, metaRoute);
389
- validateVariables(initialVariables, nextVariables);
390
- }
391
-
392
- this._updateFragmentPointers(props, context, nextVariables, prevVariables);
393
-
394
- this._updateFragmentResolvers(context.environment);
395
-
396
- return {
397
- queryData: this._getQueryData(props),
398
- rawVariables: rawVariables,
399
- relayProp: this.state.relayProp.route === context.route && require("fbjs/lib/shallowEqual")(this.state.relayProp.variables, nextVariables) ? this.state.relayProp : (0, _objectSpread2["default"])({}, this.state.relayProp, {
400
- route: context.route,
401
- variables: nextVariables
402
- })
403
- };
404
- };
405
-
406
- _proto._cleanup = function _cleanup() {
407
- // A guarded error in mounting might prevent initialization of resolvers.
408
- if (this._fragmentResolvers) {
409
- require("fbjs/lib/forEachObject")(this._fragmentResolvers, function (fragmentResolver) {
410
- fragmentResolver && fragmentResolver.dispose();
411
- });
412
- }
413
-
414
- this._fragmentPointers = {};
415
- this._fragmentResolvers = {};
416
- var pending = this.pending;
417
-
418
- if (pending) {
419
- pending.request.abort();
420
- this.pending = null;
421
- }
422
- };
423
-
424
- _proto._updateFragmentResolvers = function _updateFragmentResolvers(environment) {
425
- var _this5 = this;
426
-
427
- var fragmentPointers = this._fragmentPointers;
428
- var fragmentResolvers = this._fragmentResolvers;
429
- fragmentNames.forEach(function (fragmentName) {
430
- var fragmentPointer = fragmentPointers[fragmentName];
431
- var fragmentResolver = fragmentResolvers[fragmentName];
432
-
433
- if (!fragmentPointer) {
434
- if (fragmentResolver) {
435
- fragmentResolver.dispose();
436
- fragmentResolvers[fragmentName] = null;
437
- }
438
- } else if (!fragmentResolver) {
439
- fragmentResolver = environment.getFragmentResolver(fragmentPointer.fragment, _this5._handleFragmentDataUpdate.bind(_this5));
440
- fragmentResolvers[fragmentName] = fragmentResolver;
441
- }
442
- });
443
- };
444
-
445
- _proto._handleFragmentDataUpdate = function _handleFragmentDataUpdate() {
446
- if (!this.mounted) {
447
- return;
448
- }
449
-
450
- var queryData = this._getQueryData(this.props);
451
-
452
- var updateProfiler = require("relay-runtime").RelayProfiler.profile('RelayContainer.handleFragmentDataUpdate');
453
-
454
- this.setState({
455
- queryData: queryData
456
- }, updateProfiler.stop);
457
- };
458
-
459
- _proto._updateFragmentPointers = function _updateFragmentPointers(props, context, variables, prevVariables) {
460
- var _this6 = this;
461
-
462
- var fragmentPointers = this._fragmentPointers;
463
- fragmentNames.forEach(function (fragmentName) {
464
- var propValue = props[fragmentName];
465
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(propValue !== undefined, 'RelayContainer: Expected prop `%s` to be supplied to `%s`, but ' + 'got `undefined`. Pass an explicit `null` if this is intentional.', fragmentName, componentName) : void 0;
466
-
467
- if (propValue == null) {
468
- fragmentPointers[fragmentName] = null;
469
- return;
470
- } // handle invalid prop values using a warning at first.
471
-
472
-
473
- if (typeof propValue !== 'object') {
474
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayContainer: Expected prop `%s` supplied to `%s` to be an ' + 'object, got `%s`.', fragmentName, componentName, propValue) : void 0;
475
- fragmentPointers[fragmentName] = null;
476
- return;
477
- }
478
-
479
- var fragment = getFragment(fragmentName, context.route, variables);
480
- var dataIDOrIDs;
481
-
482
- if (fragment.isPlural()) {
483
- // Plural fragments require the prop value to be an array of fragment
484
- // pointers, which are merged into a single fragment pointer to pass
485
- // to the query resolver `resolve`.
486
- !Array.isArray(propValue) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Invalid prop `%s` supplied to `%s`, expected an ' + 'array of records because the corresponding fragment has ' + '`@relay(plural: true)`.', fragmentName, componentName) : require("fbjs/lib/invariant")(false) : void 0;
487
-
488
- if (!propValue.length) {
489
- // Nothing to observe: pass the empty array through
490
- fragmentPointers[fragmentName] = null;
491
- return;
492
- }
493
-
494
- var dataIDs = null;
495
- propValue.forEach(function (item, ii) {
496
- if (typeof item === 'object' && item != null) {
497
- if (require("./RelayFragmentPointer").hasConcreteFragment(item, fragment)) {
498
- var dataID = require("./RelayRecord").getDataIDForObject(item);
499
-
500
- if (dataID) {
501
- dataIDs = dataIDs || [];
502
- dataIDs.push(dataID);
503
- }
504
- }
505
-
506
- if (process.env.NODE_ENV !== "production") {
507
- if (!context.route.useMockData && !context.useFakeData && !_this6._didShowFakeDataWarning) {
508
- var isValid = validateFragmentProp(componentName, fragmentName, fragment, item, prevVariables);
509
- _this6._didShowFakeDataWarning = !isValid;
510
- }
511
- }
512
- }
513
- });
514
-
515
- if (dataIDs) {
516
- !(dataIDs.length === propValue.length) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Invalid prop `%s` supplied to `%s`. Some ' + 'array items contain data fetched by Relay and some items ' + 'contain null/mock data.', fragmentName, componentName) : require("fbjs/lib/invariant")(false) : void 0;
517
- }
518
-
519
- dataIDOrIDs = dataIDs;
520
- } else {
521
- !!Array.isArray(propValue) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Invalid prop `%s` supplied to `%s`, expected a ' + 'single record because the corresponding fragment is not plural ' + '(i.e. does not have `@relay(plural: true)`).', fragmentName, componentName) : require("fbjs/lib/invariant")(false) : void 0;
522
-
523
- if (require("./RelayFragmentPointer").hasConcreteFragment(propValue, fragment)) {
524
- dataIDOrIDs = require("./RelayRecord").getDataIDForObject(propValue);
525
- }
526
-
527
- if (process.env.NODE_ENV !== "production") {
528
- if (!context.route.useMockData && !context.useFakeData && !_this6._didShowFakeDataWarning) {
529
- var isValid = validateFragmentProp(componentName, fragmentName, fragment, propValue, prevVariables);
530
- _this6._didShowFakeDataWarning = !isValid;
531
- }
532
- }
533
- }
534
-
535
- fragmentPointers[fragmentName] = dataIDOrIDs ? {
536
- fragment: fragment,
537
- dataIDs: dataIDOrIDs
538
- } : null;
539
- });
540
-
541
- if (process.env.NODE_ENV !== "production") {
542
- // If a fragment pointer is null, warn if it was found on another prop.
543
- fragmentNames.forEach(function (fragmentName) {
544
- if (fragmentPointers[fragmentName]) {
545
- return;
546
- }
547
-
548
- var fragment = getFragment(fragmentName, context.route, variables);
549
- Object.keys(props).forEach(function (propName) {
550
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(fragmentPointers[propName] || !require("./RelayRecord").isRecord(props[propName]) || typeof props[propName] !== 'object' || props[propName] == null || !require("./RelayFragmentPointer").hasFragment(props[propName], fragment), 'RelayContainer: Expected record data for prop `%s` on `%s`, ' + 'but it was instead on prop `%s`. Did you misspell a prop or ' + 'pass record data into the wrong prop?', fragmentName, componentName, propName) : void 0;
551
- });
552
- });
553
- }
554
- };
555
-
556
- _proto._getQueryData = function _getQueryData(props) {
557
- var _this7 = this;
558
-
559
- var queryData = {};
560
- var fragmentPointers = this._fragmentPointers;
561
-
562
- require("fbjs/lib/forEachObject")(this._fragmentResolvers, function (fragmentResolver, propName) {
563
- var propValue = props[propName];
564
- var fragmentPointer = fragmentPointers[propName];
565
-
566
- if (!propValue || !fragmentPointer) {
567
- // Clear any subscriptions since there is no data.
568
- fragmentResolver && fragmentResolver.dispose(); // Allow mock data to pass through without modification.
569
-
570
- queryData[propName] = propValue;
571
- } else {
572
- !fragmentResolver ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'fragmentResolver should not be null') : require("fbjs/lib/invariant")(false) : void 0;
573
- queryData[propName] = fragmentResolver.resolve(fragmentPointer.fragment, fragmentPointer.dataIDs);
574
- }
575
-
576
- if (_this7.state.queryData.hasOwnProperty(propName) && queryData[propName] !== _this7.state.queryData[propName]) {
577
- _this7._hasStaleQueryData = true;
578
- }
579
- });
580
-
581
- return queryData;
582
- };
583
-
584
- _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
585
- if (specShouldComponentUpdate) {
586
- return specShouldComponentUpdate();
587
- } // Flag indicating that query data changed since previous render.
588
-
589
-
590
- if (this._hasStaleQueryData) {
591
- this._hasStaleQueryData = false;
592
- return true;
593
- }
594
-
595
- if (this.props.__relayContext.environment !== nextProps.__relayContext.environment || this.props.__relayContext.variables !== nextProps.__relayContext.variables || this.props.__relayContext.route !== nextProps.__relayContext.route) {
596
- return true;
597
- }
598
-
599
- if (this.props.__relayContext.route.useMockData) {
600
- return true;
601
- }
602
-
603
- var _this$props = this.props,
604
- __relayContext = _this$props.__relayContext,
605
- props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props, ["__relayContext"]);
606
- var _ = nextProps.__relayContext,
607
- actualNextProps = (0, _objectWithoutPropertiesLoose2["default"])(nextProps, ["__relayContext"]);
608
- var fragmentPointers = this._fragmentPointers;
609
- return !require("./RelayContainerComparators").areNonQueryPropsEqual(fragments, props, actualNextProps) || fragmentPointers && !require("./RelayContainerComparators").areQueryResultsEqual(fragmentPointers, this.state.queryData, nextState.queryData) || !require("./RelayContainerComparators").areQueryVariablesEqual(this.state.relayProp.variables, nextState.relayProp.variables);
610
- };
611
-
612
- _proto.render = function render() {
613
- if (ComponentClass) {
614
- return require("react").createElement(ComponentClass, (0, _extends2["default"])({}, this.props, this.state.queryData, {
615
- ref: this._legacyStringishRef,
616
- relay: this.state.relayProp
617
- }));
618
- } else {
619
- // Stateless functional.
620
- var Fn = Component;
621
- return require("react").createElement(Fn, (0, _objectSpread2["default"])({}, this.props, this.state.queryData, {
622
- relay: this.state.relayProp
623
- }));
624
- }
625
- }; // @TODO (T28161354) Remove this once string ref usage is gone.
626
-
627
-
628
- return RelayContainer;
629
- }(require("react").Component);
630
-
631
- function getFragment(fragmentName, route, variables) {
632
- var fragmentBuilder = fragments[fragmentName];
633
- !fragmentBuilder ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Expected `%s` to have a query fragment named `%s`.', containerName, fragmentName) : require("fbjs/lib/invariant")(false) : void 0;
634
- var fragment = buildContainerFragment(containerName, fragmentName, fragmentBuilder, initialVariables); // TODO: Allow routes without names, #7856965.
635
-
636
- var metaRoute = require("./RelayMetaRoute").get(route.name);
637
-
638
- return require("./RelayQuery").Fragment.create(fragment, metaRoute, variables);
639
- }
640
-
641
- initializeProfiler(RelayContainer);
642
- RelayContainer.displayName = containerName;
643
-
644
- require("./RelayContainerProxy").proxyMethods(RelayContainer, Component);
645
-
646
- return RelayContainer;
647
- }
648
- /**
649
- * TODO: Stop allowing props to override variables, #7856288.
650
- */
651
-
652
-
653
- function getVariablesWithPropOverrides(spec, props, variables) {
654
- var initialVariables = spec.initialVariables;
655
-
656
- if (initialVariables) {
657
- var mergedVariables;
658
-
659
- for (var _key in initialVariables) {
660
- if (_key in props) {
661
- mergedVariables = mergedVariables || (0, _objectSpread2["default"])({}, variables);
662
- mergedVariables[_key] = props[_key];
663
- }
664
- }
665
-
666
- variables = mergedVariables || variables;
667
- }
668
-
669
- return variables;
670
- }
671
- /**
672
- * Compare props and variables and reset the internal query variables if outside
673
- * query variables change the component.
674
- *
675
- * TODO: Stop allowing props to override variables, #7856288.
676
- */
677
-
678
-
679
- function resetPropOverridesForVariables(spec, props, variables) {
680
- var initialVariables = spec.initialVariables;
681
-
682
- for (var _key2 in initialVariables) {
683
- if (_key2 in props && !require("fbjs/lib/areEqual")(props[_key2], variables[_key2])) {
684
- return initialVariables;
685
- }
686
- }
687
-
688
- return variables;
689
- }
690
-
691
- function initializeProfiler(RelayContainer) {
692
- require("relay-runtime").RelayProfiler.instrumentMethods(RelayContainer.prototype, {
693
- UNSAFE_componentWillMount: 'RelayContainer.prototype.UNSAFE_componentWillMount',
694
- UNSAFE_componentWillReceiveProps: 'RelayContainer.prototype.UNSAFE_componentWillReceiveProps',
695
- shouldComponentUpdate: 'RelayContainer.prototype.shouldComponentUpdate'
696
- });
697
- }
698
- /**
699
- * Merges a partial update into a set of variables. If no variables changed, the
700
- * same object is returned. Otherwise, a new object is returned.
701
- */
702
-
703
-
704
- function mergeVariables(currentVariables, partialVariables) {
705
- if (partialVariables) {
706
- for (var _key3 in partialVariables) {
707
- if (currentVariables[_key3] !== partialVariables[_key3]) {
708
- return (0, _objectSpread2["default"])({}, currentVariables, partialVariables);
709
- }
710
- }
711
- }
712
-
713
- return currentVariables;
714
- }
715
- /**
716
- * Wrapper around `buildRQL.Fragment` with contextual error messages.
717
- */
718
-
719
-
720
- function buildContainerFragment(containerName, fragmentName, fragmentBuilder, variables) {
721
- var fragment = require("./buildRQL").Fragment(fragmentBuilder, variables);
722
-
723
- !fragment ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'Relay.QL defined on container `%s` named `%s` is not a valid fragment. ' + 'A typical fragment is defined using: Relay.QL`fragment on Type {...}`', containerName, fragmentName) : require("fbjs/lib/invariant")(false) : void 0;
724
- return fragment;
725
- }
726
-
727
- function getDeferredFragment(fragmentReference, context, variables) {
728
- var route = require("./RelayMetaRoute").get(context.route.name);
729
-
730
- var concreteFragment = fragmentReference.getFragment(variables);
731
- var concreteVariables = fragmentReference.getVariables(route, variables);
732
- return require("./RelayQuery").Fragment.create(concreteFragment, route, concreteVariables, {
733
- isDeferred: true,
734
- isContainerFragment: fragmentReference.isContainerFragment(),
735
- isTypeConditional: false
736
- });
737
- }
738
-
739
- function validateVariables(initialVariables, partialVariables) {
740
- if (partialVariables) {
741
- for (var _key4 in partialVariables) {
742
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(initialVariables.hasOwnProperty(_key4), 'RelayContainer: Expected query variable `%s` to be initialized in ' + '`initialVariables`.', _key4) : void 0;
743
- }
744
- }
745
- }
746
-
747
- function validateSpec(componentName, spec) {
748
- var fragments = spec.fragments;
749
- !(typeof fragments === 'object' && fragments) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'Relay.createContainer(%s, ...): Missing `fragments`, which is expected ' + 'to be an object mapping from `propName` to: () => Relay.QL`...`', componentName) : require("fbjs/lib/invariant")(false) : void 0;
750
-
751
- if (!spec.initialVariables) {
752
- return;
753
- }
754
-
755
- var initialVariables = spec.initialVariables || {};
756
- !(typeof initialVariables === 'object' && initialVariables) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'Relay.createContainer(%s, ...): Expected `initialVariables` to be an ' + 'object.', componentName) : require("fbjs/lib/invariant")(false) : void 0;
757
-
758
- require("fbjs/lib/forEachObject")(fragments, function (_, name) {
759
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(!initialVariables.hasOwnProperty(name), 'Relay.createContainer(%s, ...): `%s` is used both as a ' + 'fragment name and variable name. Please give them unique names.', componentName, name) : void 0;
760
- });
761
- }
762
-
763
- function getContainerName(Component) {
764
- return 'Relay(' + require("./ReactRelayContainerUtils").getComponentName(Component) + ')';
765
- }
766
- /**
767
- * Creates a lazy Relay container. The actual container is created the first
768
- * time a container is being constructed by React's rendering engine.
769
- */
770
-
771
-
772
- function create(Component, spec) {
773
- var componentName = require("./ReactRelayContainerUtils").getComponentName(Component);
774
-
775
- var containerName = getContainerName(Component);
776
- validateSpec(componentName, spec);
777
- var fragments = spec.fragments;
778
- var fragmentNames = Object.keys(fragments);
779
- var initialVariables = spec.initialVariables || {};
780
- var prepareVariables = spec.prepareVariables;
781
- var environment;
782
- var Container;
783
-
784
- function ContainerConstructor(props) {
785
- if (Container == null || props.__relayContext.environment !== environment) {
786
- environment = props.__relayContext.environment;
787
- Container = createContainerComponent(Component, spec);
788
- }
789
-
790
- return new Container(props);
791
- }
792
-
793
- function forwardRef(props, ref) {
794
- var context = require("./readContext")(require("./ReactRelayContext"));
795
-
796
- !context ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, "".concat(containerName, " tried to render a context that was ") + "not valid this means that ".concat(containerName, " was rendered outside of a ") + 'query renderer.') : require("fbjs/lib/invariant")(false) : void 0;
797
- return require("react").createElement(ContainerConstructor, (0, _extends2["default"])({}, props, {
798
- __relayContext: context,
799
- ref: props.ref || ref
800
- }));
801
- }
802
-
803
- var ForwardContainer = require("react").forwardRef(forwardRef);
804
- /* $FlowFixMe(>=0.89.0 site=www,mobile,react_native_fb,oss) Suppressing errors
805
- * found while preparing to upgrade to 0.89.0 */
806
-
807
-
808
- ForwardContainer.getFragmentNames = function () {
809
- return fragmentNames;
810
- };
811
- /* $FlowFixMe(>=0.89.0 site=www,mobile,react_native_fb,oss) Suppressing errors
812
- * found while preparing to upgrade to 0.89.0 */
813
-
814
-
815
- ForwardContainer.hasFragment = function (fragmentName) {
816
- return !!fragments[fragmentName];
817
- };
818
- /* $FlowFixMe(>=0.89.0 site=www,mobile,react_native_fb,oss) Suppressing errors
819
- * found while preparing to upgrade to 0.89.0 */
820
-
821
-
822
- ForwardContainer.hasVariable = function (variableName) {
823
- return Object.prototype.hasOwnProperty.call(initialVariables, variableName);
824
- };
825
- /**
826
- * Retrieves a reference to the fragment by name. An optional second argument
827
- * can be supplied to override the component's default variables.
828
- */
829
-
830
- /* $FlowFixMe(>=0.89.0 site=www,mobile,react_native_fb,oss) Suppressing errors
831
- * found while preparing to upgrade to 0.89.0 */
832
-
833
-
834
- ForwardContainer.getFragment = function (fragmentName, variableMapping) {
835
- var fragmentBuilder = fragments[fragmentName];
836
-
837
- if (!fragmentBuilder) {
838
- !false ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, '%s.getFragment(): `%s` is not a valid fragment name. Available ' + 'fragments names: %s', containerName, fragmentName, fragmentNames.map(function (name) {
839
- return '`' + name + '`';
840
- }).join(', ')) : require("fbjs/lib/invariant")(false) : void 0;
841
- }
842
-
843
- !(typeof fragmentBuilder === 'function') ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayContainer: Expected `%s.fragments.%s` to be a function returning ' + 'a fragment. Example: `%s: () => Relay.QL`fragment on ...`', containerName, fragmentName, fragmentName) : require("fbjs/lib/invariant")(false) : void 0;
844
-
845
- if (variableMapping) {
846
- variableMapping = require("fbjs/lib/filterObject")(variableMapping, function (_, name) {
847
- return Object.prototype.hasOwnProperty.call(initialVariables, name);
848
- });
849
- }
850
-
851
- return require("./RelayFragmentReference").createForContainer(function () {
852
- return buildContainerFragment(containerName, fragmentName, fragmentBuilder, initialVariables);
853
- }, initialVariables, variableMapping, prepareVariables);
854
- };
855
-
856
- ForwardContainer.displayName = containerName;
857
- /* $FlowFixMe(>=0.89.0 site=www,mobile,react_native_fb,oss) Suppressing errors
858
- * found while preparing to upgrade to 0.89.0 */
859
-
860
- ForwardContainer.moduleName = null;
861
- return ForwardContainer;
862
- }
863
- /**
864
- * Returns whether the fragment `prop` contains a fragment pointer for the given
865
- * fragment's data, warning if it does not.
866
- */
867
-
868
-
869
- function validateFragmentProp(componentName, fragmentName, fragment, prop, prevVariables) {
870
- var hasFragmentData = require("./RelayFragmentPointer").hasFragment(prop, fragment) || !!prevVariables && require("fbjs/lib/areEqual")(prevVariables, fragment.getVariables());
871
-
872
- if (!hasFragmentData) {
873
- var variables = fragment.getVariables();
874
-
875
- var fetchedVariables = require("./RelayFragmentPointer").getFragmentVariables(prop, fragment);
876
-
877
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayContainer: component `%s` was rendered with variables ' + 'that differ from the variables used to fetch fragment ' + '`%s`. The fragment was fetched with variables `%s`, but rendered ' + 'with variables `%s`. This can indicate one of two possibilities: \n' + ' - The parent set the correct variables in the query - ' + "`%s.getFragment('%s', {...})` - but did not pass the same " + 'variables when rendering the component. Be sure to tell the ' + 'component what variables to use by passing them as props: ' + '`<%s ... %s />`.\n' + ' - You are intentionally passing fake data to this ' + 'component, in which case ignore this warning.', componentName, fragmentName, fetchedVariables ? fetchedVariables.map(function (vars) {
878
- return JSON.stringify(vars);
879
- }).join(', ') : '(not fetched)', JSON.stringify(variables), componentName, fragmentName, componentName, Object.keys(variables).map(function (key) {
880
- return "".concat(key, "={...}");
881
- }).join(' ')) : void 0;
882
- }
883
-
884
- return hasFragmentData;
885
- }
886
-
887
- module.exports = {
888
- create: create
889
- };