relay-runtime 9.0.0 → 9.1.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 (111) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +34 -0
  2. package/handlers/connection/ConnectionHandler.js.flow +549 -0
  3. package/handlers/connection/ConnectionInterface.js.flow +92 -0
  4. package/index.js +1 -1
  5. package/index.js.flow +314 -0
  6. package/lib/handlers/connection/ConnectionHandler.js +1 -3
  7. package/lib/index.js +1 -2
  8. package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
  9. package/lib/mutations/RelayRecordProxy.js +1 -3
  10. package/lib/mutations/RelayRecordSourceMutator.js +1 -3
  11. package/lib/mutations/RelayRecordSourceProxy.js +1 -3
  12. package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
  13. package/lib/mutations/commitMutation.js +2 -0
  14. package/lib/mutations/validateMutation.js +13 -4
  15. package/lib/network/RelayObservable.js +9 -9
  16. package/lib/network/RelayQueryResponseCache.js +8 -6
  17. package/lib/query/fetchQueryInternal.js +1 -8
  18. package/lib/store/DataChecker.js +23 -51
  19. package/lib/store/RelayConcreteVariables.js +6 -2
  20. package/lib/store/RelayModernEnvironment.js +30 -12
  21. package/lib/store/RelayModernFragmentSpecResolver.js +9 -13
  22. package/lib/store/RelayModernQueryExecutor.js +73 -37
  23. package/lib/store/RelayModernRecord.js +14 -9
  24. package/lib/store/RelayModernStore.js +107 -70
  25. package/lib/store/RelayOperationTracker.js +35 -78
  26. package/lib/store/RelayOptimisticRecordSource.js +7 -5
  27. package/lib/store/RelayPublishQueue.js +1 -3
  28. package/lib/store/RelayReader.js +1 -3
  29. package/lib/store/RelayRecordSource.js +1 -3
  30. package/lib/store/RelayRecordSourceMapImpl.js +13 -18
  31. package/lib/store/RelayReferenceMarker.js +2 -6
  32. package/lib/store/RelayResponseNormalizer.js +9 -10
  33. package/lib/store/StoreInspector.js +7 -5
  34. package/lib/store/normalizeRelayPayload.js +6 -2
  35. package/lib/subscription/requestSubscription.js +4 -2
  36. package/lib/util/RelayFeatureFlags.js +1 -1
  37. package/lib/util/RelayReplaySubject.js +1 -3
  38. package/lib/util/createPayloadFor3DField.js +7 -2
  39. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  40. package/mutations/RelayRecordProxy.js.flow +165 -0
  41. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  42. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  43. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  44. package/mutations/applyOptimisticMutation.js.flow +76 -0
  45. package/mutations/commitLocalUpdate.js.flow +24 -0
  46. package/mutations/commitMutation.js.flow +184 -0
  47. package/mutations/validateMutation.js.flow +211 -0
  48. package/network/ConvertToExecuteFunction.js.flow +49 -0
  49. package/network/RelayNetwork.js.flow +84 -0
  50. package/network/RelayNetworkTypes.js.flow +123 -0
  51. package/network/RelayObservable.js.flow +634 -0
  52. package/network/RelayQueryResponseCache.js.flow +111 -0
  53. package/package.json +1 -1
  54. package/query/GraphQLTag.js.flow +166 -0
  55. package/query/fetchQuery.js.flow +47 -0
  56. package/query/fetchQueryInternal.js.flow +349 -0
  57. package/relay-runtime.js +2 -2
  58. package/relay-runtime.min.js +2 -2
  59. package/store/ClientID.js.flow +43 -0
  60. package/store/DataChecker.js.flow +426 -0
  61. package/store/RelayConcreteVariables.js.flow +96 -0
  62. package/store/RelayModernEnvironment.js.flow +526 -0
  63. package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
  64. package/store/RelayModernOperationDescriptor.js.flow +88 -0
  65. package/store/RelayModernQueryExecutor.js.flow +1327 -0
  66. package/store/RelayModernRecord.js.flow +403 -0
  67. package/store/RelayModernSelector.js.flow +444 -0
  68. package/store/RelayModernStore.js.flow +757 -0
  69. package/store/RelayOperationTracker.js.flow +164 -0
  70. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  71. package/store/RelayPublishQueue.js.flow +401 -0
  72. package/store/RelayReader.js.flow +376 -0
  73. package/store/RelayRecordSource.js.flow +29 -0
  74. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  75. package/store/RelayRecordState.js.flow +37 -0
  76. package/store/RelayReferenceMarker.js.flow +236 -0
  77. package/store/RelayResponseNormalizer.js.flow +556 -0
  78. package/store/RelayStoreTypes.js.flow +873 -0
  79. package/store/RelayStoreUtils.js.flow +218 -0
  80. package/store/StoreInspector.js.flow +173 -0
  81. package/store/ViewerPattern.js.flow +26 -0
  82. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  83. package/store/createFragmentSpecResolver.js.flow +55 -0
  84. package/store/createRelayContext.js.flow +44 -0
  85. package/store/defaultGetDataID.js.flow +27 -0
  86. package/store/hasOverlappingIDs.js.flow +34 -0
  87. package/store/isRelayModernEnvironment.js.flow +27 -0
  88. package/store/normalizeRelayPayload.js.flow +51 -0
  89. package/store/readInlineData.js.flow +75 -0
  90. package/subscription/requestSubscription.js.flow +100 -0
  91. package/util/JSResourceTypes.flow.js.flow +20 -0
  92. package/util/NormalizationNode.js.flow +191 -0
  93. package/util/ReaderNode.js.flow +208 -0
  94. package/util/RelayConcreteNode.js.flow +80 -0
  95. package/util/RelayDefaultHandleKey.js.flow +17 -0
  96. package/util/RelayError.js.flow +33 -0
  97. package/util/RelayFeatureFlags.js.flow +30 -0
  98. package/util/RelayProfiler.js.flow +284 -0
  99. package/util/RelayReplaySubject.js.flow +134 -0
  100. package/util/RelayRuntimeTypes.js.flow +70 -0
  101. package/util/createPayloadFor3DField.js.flow +43 -0
  102. package/util/deepFreeze.js.flow +36 -0
  103. package/util/generateID.js.flow +21 -0
  104. package/util/getFragmentIdentifier.js.flow +52 -0
  105. package/util/getRelayHandleKey.js.flow +41 -0
  106. package/util/getRequestIdentifier.js.flow +41 -0
  107. package/util/isPromise.js.flow +21 -0
  108. package/util/isScalarAndEqual.js.flow +26 -0
  109. package/util/recycleNodesInto.js.flow +80 -0
  110. package/util/resolveImmediate.js.flow +30 -0
  111. package/util/stableCopy.js.flow +35 -0
package/index.js.flow ADDED
@@ -0,0 +1,314 @@
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
+ * @flow strict-local
8
+ * @format
9
+ */
10
+
11
+ // flowlint ambiguous-object-type:error
12
+
13
+ 'use strict';
14
+
15
+ const ConnectionHandler = require('./handlers/connection/ConnectionHandler');
16
+ const ConnectionInterface = require('./handlers/connection/ConnectionInterface');
17
+ const GraphQLTag = require('./query/GraphQLTag');
18
+ const RelayConcreteNode = require('./util/RelayConcreteNode');
19
+ const RelayConcreteVariables = require('./store/RelayConcreteVariables');
20
+ const RelayDeclarativeMutationConfig = require('./mutations/RelayDeclarativeMutationConfig');
21
+ const RelayDefaultHandleKey = require('./util/RelayDefaultHandleKey');
22
+ const RelayDefaultHandlerProvider = require('./handlers/RelayDefaultHandlerProvider');
23
+ const RelayError = require('./util/RelayError');
24
+ const RelayFeatureFlags = require('./util/RelayFeatureFlags');
25
+ const RelayModernEnvironment = require('./store/RelayModernEnvironment');
26
+ const RelayModernOperationDescriptor = require('./store/RelayModernOperationDescriptor');
27
+ const RelayModernRecord = require('./store/RelayModernRecord');
28
+ const RelayModernSelector = require('./store/RelayModernSelector');
29
+ const RelayModernStore = require('./store/RelayModernStore');
30
+ const RelayNetwork = require('./network/RelayNetwork');
31
+ const RelayObservable = require('./network/RelayObservable');
32
+ const RelayOperationTracker = require('./store/RelayOperationTracker');
33
+ const RelayProfiler = require('./util/RelayProfiler');
34
+ const RelayQueryResponseCache = require('./network/RelayQueryResponseCache');
35
+ const RelayRecordSource = require('./store/RelayRecordSource');
36
+ const RelayReplaySubject = require('./util/RelayReplaySubject');
37
+ const RelayStoreUtils = require('./store/RelayStoreUtils');
38
+ const ViewerPattern = require('./store/ViewerPattern');
39
+
40
+ const applyOptimisticMutation = require('./mutations/applyOptimisticMutation');
41
+ const commitLocalUpdate = require('./mutations/commitLocalUpdate');
42
+ const commitMutation = require('./mutations/commitMutation');
43
+ const createFragmentSpecResolver = require('./store/createFragmentSpecResolver');
44
+ const createPayloadFor3DField = require('./util/createPayloadFor3DField');
45
+ const createRelayContext = require('./store/createRelayContext');
46
+ const deepFreeze = require('./util/deepFreeze');
47
+ const fetchQuery = require('./query/fetchQuery');
48
+ const fetchQueryInternal = require('./query/fetchQueryInternal');
49
+ const getFragmentIdentifier = require('./util/getFragmentIdentifier');
50
+ const getRelayHandleKey = require('./util/getRelayHandleKey');
51
+ const getRequestIdentifier = require('./util/getRequestIdentifier');
52
+ const isPromise = require('./util/isPromise');
53
+ const isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
54
+ const isScalarAndEqual = require('./util/isScalarAndEqual');
55
+ const readInlineData = require('./store/readInlineData');
56
+ const recycleNodesInto = require('./util/recycleNodesInto');
57
+ const requestSubscription = require('./subscription/requestSubscription');
58
+ const stableCopy = require('./util/stableCopy');
59
+
60
+ const {
61
+ generateClientID,
62
+ generateUniqueClientID,
63
+ isClientID,
64
+ } = require('./store/ClientID');
65
+
66
+ export type {ConnectionMetadata} from './handlers/connection/ConnectionHandler';
67
+ export type {
68
+ EdgeRecord,
69
+ PageInfo,
70
+ } from './handlers/connection/ConnectionInterface';
71
+ export type {
72
+ DeclarativeMutationConfig,
73
+ MutationType,
74
+ RangeBehaviors,
75
+ RangeOperation,
76
+ } from './mutations/RelayDeclarativeMutationConfig';
77
+ export type {OptimisticMutationConfig} from './mutations/applyOptimisticMutation';
78
+ export type {
79
+ DEPRECATED_MutationConfig,
80
+ MutationConfig,
81
+ MutationParameters,
82
+ } from './mutations/commitMutation';
83
+ export type {
84
+ ExecuteFunction,
85
+ FetchFunction,
86
+ GraphQLResponse,
87
+ GraphQLResponseWithData,
88
+ GraphQLResponseWithoutData,
89
+ GraphQLSingularResponse,
90
+ INetwork,
91
+ LogRequestInfoFunction,
92
+ PayloadData,
93
+ PayloadError,
94
+ SubscribeFunction,
95
+ Uploadable,
96
+ UploadableMap,
97
+ } from './network/RelayNetworkTypes';
98
+ export type {
99
+ ObservableFromValue,
100
+ Observer,
101
+ Subscribable,
102
+ Subscription,
103
+ } from './network/RelayObservable';
104
+ export type {GraphQLTaggedNode} from './query/GraphQLTag';
105
+ export type {EnvironmentConfig} from './store/RelayModernEnvironment';
106
+ export type {TaskScheduler} from './store/RelayModernQueryExecutor';
107
+ export type {RecordState} from './store/RelayRecordState';
108
+ export type {
109
+ FragmentMap,
110
+ FragmentPointer,
111
+ FragmentReference,
112
+ FragmentSpecResolver,
113
+ HandleFieldPayload,
114
+ IEnvironment,
115
+ InvalidationState,
116
+ LogEvent,
117
+ LogFunction,
118
+ MissingFieldHandler,
119
+ ModuleImportPointer,
120
+ NormalizationSelector,
121
+ OperationAvailability,
122
+ OperationDescriptor,
123
+ OperationLoader,
124
+ OperationTracker,
125
+ OptimisticResponseConfig,
126
+ OptimisticUpdate,
127
+ OptimisticUpdateFunction,
128
+ PluralReaderSelector,
129
+ Props,
130
+ PublishQueue,
131
+ ReaderSelector,
132
+ ReadOnlyRecordProxy,
133
+ RecordProxy,
134
+ RecordSourceProxy,
135
+ RecordSourceSelectorProxy,
136
+ RelayContext,
137
+ RequestDescriptor,
138
+ SelectorData,
139
+ SelectorStoreUpdater,
140
+ SingularReaderSelector,
141
+ Snapshot,
142
+ StoreUpdater,
143
+ } from './store/RelayStoreTypes';
144
+ export type {GraphQLSubscriptionConfig} from './subscription/requestSubscription';
145
+ export type {JSResourceReference} from './util/JSResourceTypes.flow';
146
+ export type {
147
+ NormalizationArgument,
148
+ NormalizationDefer,
149
+ NormalizationField,
150
+ NormalizationLinkedField,
151
+ NormalizationLinkedHandle,
152
+ NormalizationLocalArgumentDefinition,
153
+ NormalizationModuleImport,
154
+ NormalizationScalarField,
155
+ NormalizationSelection,
156
+ NormalizationSplitOperation,
157
+ NormalizationStream,
158
+ } from './util/NormalizationNode';
159
+ export type {NormalizationOperation} from './util/NormalizationNode';
160
+ export type {
161
+ ReaderArgument,
162
+ ReaderArgumentDefinition,
163
+ ReaderField,
164
+ ReaderFragment,
165
+ ReaderInlineDataFragment,
166
+ ReaderInlineDataFragmentSpread,
167
+ ReaderLinkedField,
168
+ ReaderModuleImport,
169
+ ReaderPaginationMetadata,
170
+ ReaderRefetchableFragment,
171
+ ReaderRefetchMetadata,
172
+ ReaderScalarField,
173
+ ReaderSelection,
174
+ } from './util/ReaderNode';
175
+ export type {
176
+ ConcreteRequest,
177
+ GeneratedNode,
178
+ RequestParameters,
179
+ } from './util/RelayConcreteNode';
180
+ export type {
181
+ CacheConfig,
182
+ DataID,
183
+ Disposable,
184
+ FetchPolicy,
185
+ FetchQueryFetchPolicy,
186
+ OperationType,
187
+ RenderPolicy,
188
+ Variables,
189
+ } from './util/RelayRuntimeTypes';
190
+ export type {Local3DPayload} from './util/createPayloadFor3DField';
191
+
192
+ // As early as possible, check for the existence of the JavaScript globals which
193
+ // Relay Runtime relies upon, and produce a clear message if they do not exist.
194
+ if (__DEV__) {
195
+ const mapStr = typeof Map !== 'function' ? 'Map' : null;
196
+ const setStr = typeof Set !== 'function' ? 'Set' : null;
197
+ const promiseStr = typeof Promise !== 'function' ? 'Promise' : null;
198
+ const objStr = typeof Object.assign !== 'function' ? 'Object.assign' : null;
199
+ if (mapStr || setStr || promiseStr || objStr) {
200
+ throw new Error(
201
+ `relay-runtime requires ${[mapStr, setStr, promiseStr, objStr]
202
+ .filter(Boolean)
203
+ .join(', and ')} to exist. ` +
204
+ 'Use a polyfill to provide these for older browsers.',
205
+ );
206
+ }
207
+ }
208
+
209
+ /**
210
+ * The public interface to Relay Runtime.
211
+ */
212
+ module.exports = {
213
+ // Core API
214
+ Environment: RelayModernEnvironment,
215
+ Network: RelayNetwork,
216
+ Observable: RelayObservable,
217
+ QueryResponseCache: RelayQueryResponseCache,
218
+ RecordSource: RelayRecordSource,
219
+ Record: RelayModernRecord,
220
+ ReplaySubject: RelayReplaySubject,
221
+ Store: RelayModernStore,
222
+
223
+ areEqualSelectors: RelayModernSelector.areEqualSelectors,
224
+ createFragmentSpecResolver: createFragmentSpecResolver,
225
+ createNormalizationSelector: RelayModernSelector.createNormalizationSelector,
226
+ createOperationDescriptor:
227
+ RelayModernOperationDescriptor.createOperationDescriptor,
228
+ createReaderSelector: RelayModernSelector.createReaderSelector,
229
+ createRequestDescriptor:
230
+ RelayModernOperationDescriptor.createRequestDescriptor,
231
+ getDataIDsFromFragment: RelayModernSelector.getDataIDsFromFragment,
232
+ getDataIDsFromObject: RelayModernSelector.getDataIDsFromObject,
233
+ getFragment: GraphQLTag.getFragment,
234
+ getInlineDataFragment: GraphQLTag.getInlineDataFragment,
235
+ getModuleComponentKey: RelayStoreUtils.getModuleComponentKey,
236
+ getModuleOperationKey: RelayStoreUtils.getModuleOperationKey,
237
+ getPaginationFragment: GraphQLTag.getPaginationFragment,
238
+ getPluralSelector: RelayModernSelector.getPluralSelector,
239
+ getRefetchableFragment: GraphQLTag.getRefetchableFragment,
240
+ getRequest: GraphQLTag.getRequest,
241
+ getRequestIdentifier: getRequestIdentifier,
242
+ getSelector: RelayModernSelector.getSelector,
243
+ getSelectorsFromObject: RelayModernSelector.getSelectorsFromObject,
244
+ getSingularSelector: RelayModernSelector.getSingularSelector,
245
+ getStorageKey: RelayStoreUtils.getStorageKey,
246
+ getVariablesFromFragment: RelayModernSelector.getVariablesFromFragment,
247
+ getVariablesFromObject: RelayModernSelector.getVariablesFromObject,
248
+ getVariablesFromPluralFragment:
249
+ RelayModernSelector.getVariablesFromPluralFragment,
250
+ getVariablesFromSingularFragment:
251
+ RelayModernSelector.getVariablesFromSingularFragment,
252
+ graphql: GraphQLTag.graphql,
253
+ readInlineData,
254
+
255
+ // Declarative mutation API
256
+ MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
257
+ RangeOperations: RelayDeclarativeMutationConfig.RangeOperations,
258
+
259
+ // Extensions
260
+ DefaultHandlerProvider: RelayDefaultHandlerProvider,
261
+ ConnectionHandler,
262
+ VIEWER_ID: ViewerPattern.VIEWER_ID,
263
+ VIEWER_TYPE: ViewerPattern.VIEWER_TYPE,
264
+
265
+ // Helpers (can be implemented via the above API)
266
+ applyOptimisticMutation,
267
+ commitLocalUpdate,
268
+ commitMutation,
269
+ fetchQuery,
270
+ isRelayModernEnvironment,
271
+ requestSubscription,
272
+
273
+ // Configuration interface for legacy or special uses
274
+ ConnectionInterface,
275
+
276
+ // Utilities
277
+ RelayProfiler: RelayProfiler,
278
+ createPayloadFor3DField: createPayloadFor3DField,
279
+
280
+ // INTERNAL-ONLY: These exports might be removed at any point.
281
+ RelayConcreteNode: RelayConcreteNode,
282
+ RelayError: RelayError,
283
+ RelayFeatureFlags: RelayFeatureFlags,
284
+ DEFAULT_HANDLE_KEY: RelayDefaultHandleKey.DEFAULT_HANDLE_KEY,
285
+ FRAGMENTS_KEY: RelayStoreUtils.FRAGMENTS_KEY,
286
+ FRAGMENT_OWNER_KEY: RelayStoreUtils.FRAGMENT_OWNER_KEY,
287
+ ID_KEY: RelayStoreUtils.ID_KEY,
288
+ REF_KEY: RelayStoreUtils.REF_KEY,
289
+ REFS_KEY: RelayStoreUtils.REFS_KEY,
290
+ ROOT_ID: RelayStoreUtils.ROOT_ID,
291
+ ROOT_TYPE: RelayStoreUtils.ROOT_TYPE,
292
+ TYPENAME_KEY: RelayStoreUtils.TYPENAME_KEY,
293
+
294
+ deepFreeze: deepFreeze,
295
+ generateClientID: generateClientID,
296
+ generateUniqueClientID: generateUniqueClientID,
297
+ getRelayHandleKey: getRelayHandleKey,
298
+ isClientID: isClientID,
299
+ isPromise: isPromise,
300
+ isScalarAndEqual: isScalarAndEqual,
301
+ recycleNodesInto: recycleNodesInto,
302
+ stableCopy: stableCopy,
303
+ getFragmentIdentifier: getFragmentIdentifier,
304
+ __internal: {
305
+ OperationTracker: RelayOperationTracker,
306
+ createRelayContext: createRelayContext,
307
+ getOperationVariables: RelayConcreteVariables.getOperationVariables,
308
+ fetchQuery: fetchQueryInternal.fetchQuery,
309
+ fetchQueryDeduped: fetchQueryInternal.fetchQueryDeduped,
310
+ getPromiseForActiveRequest: fetchQueryInternal.getPromiseForActiveRequest,
311
+ getObservableForActiveRequest:
312
+ fetchQueryInternal.getObservableForActiveRequest,
313
+ },
314
+ };
@@ -33,8 +33,6 @@ var NEXT_EDGE_INDEX = '__connection_next_edge_index';
33
33
  */
34
34
 
35
35
  function update(store, payload) {
36
- var _clientConnectionFiel;
37
-
38
36
  var record = store.get(payload.dataID);
39
37
 
40
38
  if (!record) {
@@ -64,7 +62,7 @@ function update(store, payload) {
64
62
 
65
63
  var clientConnectionID = generateClientID(record.getDataID(), payload.handleKey);
66
64
  var clientConnectionField = record.getLinkedRecord(payload.handleKey);
67
- var clientConnection = (_clientConnectionFiel = clientConnectionField) !== null && _clientConnectionFiel !== void 0 ? _clientConnectionFiel : store.get(clientConnectionID);
65
+ var clientConnection = clientConnectionField !== null && clientConnectionField !== void 0 ? clientConnectionField : store.get(clientConnectionID);
68
66
  var clientPageInfo = clientConnection && clientConnection.getLinkedRecord(PAGE_INFO);
69
67
 
70
68
  if (!clientConnection) {
package/lib/index.js CHANGED
@@ -205,7 +205,6 @@ module.exports = {
205
205
  fetchQuery: fetchQueryInternal.fetchQuery,
206
206
  fetchQueryDeduped: fetchQueryInternal.fetchQueryDeduped,
207
207
  getPromiseForActiveRequest: fetchQueryInternal.getPromiseForActiveRequest,
208
- getObservableForActiveRequest: fetchQueryInternal.getObservableForActiveRequest,
209
- isRequestActive: fetchQueryInternal.isRequestActive
208
+ getObservableForActiveRequest: fetchQueryInternal.getObservableForActiveRequest
210
209
  }
211
210
  };
@@ -10,6 +10,12 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
+ function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
14
+
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
18
+
13
19
  var ConnectionHandler = require('../handlers/connection/ConnectionHandler');
14
20
 
15
21
  var warning = require("fbjs/lib/warning");
@@ -129,12 +135,12 @@ function rangeAdd(config, request) {
129
135
  }
130
136
 
131
137
  var serverEdge = payload.getLinkedRecord(edgeName);
132
- var _iteratorNormalCompletion = true;
133
- var _didIteratorError = false;
134
- var _iteratorError = undefined;
138
+
139
+ var _iterator = _createForOfIteratorHelper(connectionInfo),
140
+ _step;
135
141
 
136
142
  try {
137
- for (var _iterator = connectionInfo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
143
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
138
144
  var info = _step.value;
139
145
 
140
146
  if (!serverEdge) {
@@ -168,18 +174,9 @@ function rangeAdd(config, request) {
168
174
  }
169
175
  }
170
176
  } catch (err) {
171
- _didIteratorError = true;
172
- _iteratorError = err;
177
+ _iterator.e(err);
173
178
  } finally {
174
- try {
175
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
176
- _iterator["return"]();
177
- }
178
- } finally {
179
- if (_didIteratorError) {
180
- throw _iteratorError;
181
- }
182
- }
179
+ _iterator.f();
183
180
  }
184
181
  };
185
182
  }
@@ -210,12 +207,11 @@ function rangeDelete(config, request) {
210
207
  var deletedIDField = data[rootField];
211
208
 
212
209
  if (deletedIDField && Array.isArray(deletedIDFieldName)) {
213
- var _iteratorNormalCompletion2 = true;
214
- var _didIteratorError2 = false;
215
- var _iteratorError2 = undefined;
210
+ var _iterator2 = _createForOfIteratorHelper(deletedIDFieldName),
211
+ _step2;
216
212
 
217
213
  try {
218
- for (var _iterator2 = deletedIDFieldName[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
214
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
219
215
  var eachField = _step2.value;
220
216
 
221
217
  if (deletedIDField && typeof deletedIDField === 'object') {
@@ -223,18 +219,9 @@ function rangeDelete(config, request) {
223
219
  }
224
220
  }
225
221
  } catch (err) {
226
- _didIteratorError2 = true;
227
- _iteratorError2 = err;
222
+ _iterator2.e(err);
228
223
  } finally {
229
- try {
230
- if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
231
- _iterator2["return"]();
232
- }
233
- } finally {
234
- if (_didIteratorError2) {
235
- throw _iteratorError2;
236
- }
237
- }
224
+ _iterator2.f();
238
225
  }
239
226
 
240
227
  if (Array.isArray(deletedIDField)) {
@@ -291,9 +278,8 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
291
278
  return;
292
279
  }
293
280
 
294
- var _iteratorNormalCompletion3 = true;
295
- var _didIteratorError3 = false;
296
- var _iteratorError3 = undefined;
281
+ var _iterator3 = _createForOfIteratorHelper(connectionKeys),
282
+ _step3;
297
283
 
298
284
  try {
299
285
  var _loop = function _loop() {
@@ -307,22 +293,13 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
307
293
  }
308
294
  };
309
295
 
310
- for (var _iterator3 = connectionKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
296
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
311
297
  _loop();
312
298
  }
313
299
  } catch (err) {
314
- _didIteratorError3 = true;
315
- _iteratorError3 = err;
300
+ _iterator3.e(err);
316
301
  } finally {
317
- try {
318
- if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
319
- _iterator3["return"]();
320
- }
321
- } finally {
322
- if (_didIteratorError3) {
323
- throw _iteratorError3;
324
- }
325
- }
302
+ _iterator3.f();
326
303
  }
327
304
  }
328
305
 
@@ -24,9 +24,7 @@ var _require2 = require('../store/RelayStoreUtils'),
24
24
  * A helper class for manipulating a given record from a record source via an
25
25
  * imperative/OO-style API.
26
26
  */
27
- var RelayRecordProxy =
28
- /*#__PURE__*/
29
- function () {
27
+ var RelayRecordProxy = /*#__PURE__*/function () {
30
28
  function RelayRecordProxy(source, mutator, dataID) {
31
29
  this._dataID = dataID;
32
30
  this._mutator = mutator;
@@ -29,9 +29,7 @@ var _require = require('../store/RelayRecordState'),
29
29
  * - Modifications cause a fresh version of a record to be created in `sink`.
30
30
  * These sink records contain only modified fields.
31
31
  */
32
- var RelayRecordSourceMutator =
33
- /*#__PURE__*/
34
- function () {
32
+ var RelayRecordSourceMutator = /*#__PURE__*/function () {
35
33
  function RelayRecordSourceMutator(base, sink) {
36
34
  this.__sources = [sink, base];
37
35
  this._base = base;
@@ -29,9 +29,7 @@ var _require2 = require('../store/RelayStoreUtils'),
29
29
  *
30
30
  * A helper for manipulating a `RecordSource` via an imperative/OO-style API.
31
31
  */
32
- var RelayRecordSourceProxy =
33
- /*#__PURE__*/
34
- function () {
32
+ var RelayRecordSourceProxy = /*#__PURE__*/function () {
35
33
  function RelayRecordSourceProxy(mutator, getDataID, handlerProvider) {
36
34
  this.__mutator = mutator;
37
35
  this._handlerProvider = handlerProvider || null;
@@ -24,9 +24,7 @@ var _require = require('../store/RelayStoreUtils'),
24
24
  * complex arguments and it can be tedious to re-construct the correct sets of
25
25
  * arguments to pass to e.g. `getRoot().getLinkedRecord()`.
26
26
  */
27
- var RelayRecordSourceSelectorProxy =
28
- /*#__PURE__*/
29
- function () {
27
+ var RelayRecordSourceSelectorProxy = /*#__PURE__*/function () {
30
28
  function RelayRecordSourceSelectorProxy(mutator, recordSource, readSelector) {
31
29
  this.__mutator = mutator;
32
30
  this.__recordSource = recordSource;
@@ -55,6 +55,7 @@ function commitMutation(environment, config) {
55
55
  optimisticUpdater = config.optimisticUpdater,
56
56
  updater = config.updater;
57
57
  var configs = config.configs,
58
+ cacheConfig = config.cacheConfig,
58
59
  onError = config.onError,
59
60
  onUnsubscribe = config.onUnsubscribe,
60
61
  variables = config.variables,
@@ -81,6 +82,7 @@ function commitMutation(environment, config) {
81
82
 
82
83
  var errors = [];
83
84
  var subscription = environment.executeMutation({
85
+ cacheConfig: cacheConfig,
84
86
  operation: operation,
85
87
  optimisticResponse: optimisticResponse,
86
88
  optimisticUpdater: optimisticUpdater,
@@ -12,7 +12,11 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
20
 
17
21
  var warning = require("fbjs/lib/warning");
18
22
 
@@ -77,6 +81,11 @@ if (process.env.NODE_ENV !== "production") {
77
81
  return;
78
82
 
79
83
  case 'ClientExtension':
84
+ selection.selections.forEach(function (subselection) {
85
+ validateSelection(optimisticResponse, subselection, context);
86
+ });
87
+ return;
88
+
80
89
  case 'ModuleImport':
81
90
  case 'LinkedHandle':
82
91
  case 'ScalarHandle':
@@ -117,7 +126,7 @@ if (process.env.NODE_ENV !== "production") {
117
126
  if (Array.isArray(optimisticResponse[fieldName])) {
118
127
  optimisticResponse[fieldName].forEach(function (r) {
119
128
  if (r !== null) {
120
- validateSelections(r, selections, (0, _objectSpread2["default"])({}, context, {
129
+ validateSelections(r, selections, _objectSpread({}, context, {
121
130
  path: path
122
131
  }));
123
132
  }
@@ -129,7 +138,7 @@ if (process.env.NODE_ENV !== "production") {
129
138
  }
130
139
  } else {
131
140
  if (optimisticResponse[fieldName] instanceof Object) {
132
- validateSelections(optimisticResponse[fieldName], selections, (0, _objectSpread2["default"])({}, context, {
141
+ validateSelections(optimisticResponse[fieldName], selections, _objectSpread({}, context, {
133
142
  path: path
134
143
  }));
135
144
  return;
@@ -162,7 +171,7 @@ if (process.env.NODE_ENV !== "production") {
162
171
  }
163
172
 
164
173
  if (value instanceof Object) {
165
- validateOptimisticResponse(value, (0, _objectSpread2["default"])({}, context, {
174
+ validateOptimisticResponse(value, _objectSpread({}, context, {
166
175
  path: path
167
176
  }));
168
177
  }
@@ -30,9 +30,7 @@ var hostReportError = swallowError;
30
30
  * ESObservable: https://github.com/tc39/proposal-observable
31
31
  */
32
32
 
33
- var RelayObservable =
34
- /*#__PURE__*/
35
- function () {
33
+ var RelayObservable = /*#__PURE__*/function () {
36
34
  RelayObservable.create = function create(source) {
37
35
  return new RelayObservable(source);
38
36
  } // Use RelayObservable.create()
@@ -408,6 +406,9 @@ function () {
408
406
  /**
409
407
  * Returns a Promise which resolves when this Observable yields a first value
410
408
  * or when it completes with no value.
409
+ *
410
+ * NOTE: The source Observable is *NOT* canceled when the returned Promise
411
+ * resolves. The Observable is always run to completion.
411
412
  */
412
413
  ;
413
414
 
@@ -415,15 +416,14 @@ function () {
415
416
  var _this9 = this;
416
417
 
417
418
  return new Promise(function (resolve, reject) {
418
- var subscription;
419
+ var resolved = false;
419
420
 
420
421
  _this9.subscribe({
421
- start: function start(sub) {
422
- subscription = sub;
423
- },
424
422
  next: function next(val) {
425
- resolve(val);
426
- subscription.unsubscribe();
423
+ if (!resolved) {
424
+ resolved = true;
425
+ resolve(val);
426
+ }
427
427
  },
428
428
  error: reject,
429
429
  complete: resolve
@@ -12,7 +12,11 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
20
 
17
21
  var invariant = require("fbjs/lib/invariant");
18
22
 
@@ -23,9 +27,7 @@ var stableCopy = require('../util/stableCopy');
23
27
  * - `get` with TTL
24
28
  * - cache size limiting, with least-recently *updated* entries purged first
25
29
  */
26
- var RelayQueryResponseCache =
27
- /*#__PURE__*/
28
- function () {
30
+ var RelayQueryResponseCache = /*#__PURE__*/function () {
29
31
  function RelayQueryResponseCache(_ref) {
30
32
  var size = _ref.size,
31
33
  ttl = _ref.ttl;
@@ -55,8 +57,8 @@ function () {
55
57
 
56
58
  var response = this._responses.get(cacheKey);
57
59
 
58
- return response != null ? (0, _objectSpread2["default"])({}, response.payload, {
59
- extensions: (0, _objectSpread2["default"])({}, response.payload.extensions, {
60
+ return response != null ? _objectSpread({}, response.payload, {
61
+ extensions: _objectSpread({}, response.payload.extensions, {
60
62
  cacheTimestamp: response.fetchTime
61
63
  })
62
64
  }) : null;