relay-runtime 10.1.3 → 11.0.2

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