relay-runtime 9.0.0 → 10.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 (142) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +47 -0
  2. package/handlers/connection/ConnectionHandler.js.flow +549 -0
  3. package/handlers/connection/ConnectionInterface.js.flow +92 -0
  4. package/handlers/connection/MutationHandlers.js.flow +199 -0
  5. package/index.js +1 -1
  6. package/index.js.flow +335 -0
  7. package/lib/handlers/RelayDefaultHandlerProvider.js +20 -0
  8. package/lib/handlers/connection/ConnectionHandler.js +1 -3
  9. package/lib/handlers/connection/MutationHandlers.js +212 -0
  10. package/lib/index.js +14 -2
  11. package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
  12. package/lib/mutations/RelayRecordProxy.js +1 -3
  13. package/lib/mutations/RelayRecordSourceMutator.js +1 -3
  14. package/lib/mutations/RelayRecordSourceProxy.js +1 -3
  15. package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
  16. package/lib/mutations/commitMutation.js +2 -3
  17. package/lib/mutations/validateMutation.js +40 -9
  18. package/lib/network/RelayObservable.js +9 -9
  19. package/lib/network/RelayQueryResponseCache.js +8 -6
  20. package/lib/query/GraphQLTag.js +2 -1
  21. package/lib/query/PreloadableQueryRegistry.js +70 -0
  22. package/lib/query/fetchQuery.js +2 -3
  23. package/lib/query/fetchQueryInternal.js +5 -14
  24. package/lib/store/DataChecker.js +200 -71
  25. package/lib/store/RelayConcreteVariables.js +6 -2
  26. package/lib/store/RelayModernEnvironment.js +124 -65
  27. package/lib/store/RelayModernFragmentSpecResolver.js +19 -14
  28. package/lib/store/RelayModernOperationDescriptor.js +6 -5
  29. package/lib/store/RelayModernQueryExecutor.js +122 -73
  30. package/lib/store/RelayModernRecord.js +14 -9
  31. package/lib/store/RelayModernSelector.js +6 -2
  32. package/lib/store/RelayModernStore.js +281 -131
  33. package/lib/store/RelayOperationTracker.js +35 -78
  34. package/lib/store/RelayOptimisticRecordSource.js +7 -5
  35. package/lib/store/RelayPublishQueue.js +2 -4
  36. package/lib/store/RelayReader.js +304 -52
  37. package/lib/store/RelayRecordSource.js +1 -3
  38. package/lib/store/RelayRecordSourceMapImpl.js +13 -18
  39. package/lib/store/RelayReferenceMarker.js +125 -14
  40. package/lib/store/RelayResponseNormalizer.js +261 -66
  41. package/lib/store/RelayStoreReactFlightUtils.js +47 -0
  42. package/lib/store/RelayStoreUtils.js +1 -0
  43. package/lib/store/StoreInspector.js +8 -8
  44. package/lib/store/TypeID.js +28 -0
  45. package/lib/store/cloneRelayScalarHandleSourceField.js +44 -0
  46. package/lib/store/defaultRequiredFieldLogger.js +18 -0
  47. package/lib/store/normalizeRelayPayload.js +6 -2
  48. package/lib/store/readInlineData.js +1 -1
  49. package/lib/subscription/requestSubscription.js +4 -3
  50. package/lib/util/NormalizationNode.js +1 -5
  51. package/lib/util/RelayConcreteNode.js +11 -6
  52. package/lib/util/RelayError.js +39 -9
  53. package/lib/util/RelayFeatureFlags.js +6 -3
  54. package/lib/util/RelayReplaySubject.js +3 -3
  55. package/lib/util/createPayloadFor3DField.js +7 -2
  56. package/lib/util/getFragmentIdentifier.js +12 -3
  57. package/lib/util/getOperation.js +33 -0
  58. package/lib/util/getRequestIdentifier.js +2 -2
  59. package/lib/util/isEmptyObject.js +25 -0
  60. package/lib/util/recycleNodesInto.js +6 -7
  61. package/lib/util/reportMissingRequiredFields.js +48 -0
  62. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  63. package/mutations/RelayRecordProxy.js.flow +165 -0
  64. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  65. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  66. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  67. package/mutations/applyOptimisticMutation.js.flow +76 -0
  68. package/mutations/commitLocalUpdate.js.flow +24 -0
  69. package/mutations/commitMutation.js.flow +181 -0
  70. package/mutations/validateMutation.js.flow +242 -0
  71. package/network/ConvertToExecuteFunction.js.flow +49 -0
  72. package/network/RelayNetwork.js.flow +84 -0
  73. package/network/RelayNetworkTypes.js.flow +145 -0
  74. package/network/RelayObservable.js.flow +634 -0
  75. package/network/RelayQueryResponseCache.js.flow +111 -0
  76. package/package.json +2 -2
  77. package/query/GraphQLTag.js.flow +168 -0
  78. package/query/PreloadableQueryRegistry.js.flow +65 -0
  79. package/query/fetchQuery.js.flow +47 -0
  80. package/query/fetchQueryInternal.js.flow +343 -0
  81. package/relay-runtime.js +2 -2
  82. package/relay-runtime.min.js +2 -2
  83. package/store/ClientID.js.flow +43 -0
  84. package/store/DataChecker.js.flow +568 -0
  85. package/store/RelayConcreteVariables.js.flow +96 -0
  86. package/store/RelayModernEnvironment.js.flow +571 -0
  87. package/store/RelayModernFragmentSpecResolver.js.flow +438 -0
  88. package/store/RelayModernOperationDescriptor.js.flow +92 -0
  89. package/store/RelayModernQueryExecutor.js.flow +1345 -0
  90. package/store/RelayModernRecord.js.flow +403 -0
  91. package/store/RelayModernSelector.js.flow +455 -0
  92. package/store/RelayModernStore.js.flow +858 -0
  93. package/store/RelayOperationTracker.js.flow +164 -0
  94. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  95. package/store/RelayPublishQueue.js.flow +401 -0
  96. package/store/RelayReader.js.flow +638 -0
  97. package/store/RelayRecordSource.js.flow +29 -0
  98. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  99. package/store/RelayRecordState.js.flow +37 -0
  100. package/store/RelayReferenceMarker.js.flow +324 -0
  101. package/store/RelayResponseNormalizer.js.flow +791 -0
  102. package/store/RelayStoreReactFlightUtils.js.flow +64 -0
  103. package/store/RelayStoreTypes.js.flow +958 -0
  104. package/store/RelayStoreUtils.js.flow +219 -0
  105. package/store/StoreInspector.js.flow +171 -0
  106. package/store/TypeID.js.flow +28 -0
  107. package/store/ViewerPattern.js.flow +26 -0
  108. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  109. package/store/cloneRelayScalarHandleSourceField.js.flow +62 -0
  110. package/store/createFragmentSpecResolver.js.flow +55 -0
  111. package/store/createRelayContext.js.flow +44 -0
  112. package/store/defaultGetDataID.js.flow +27 -0
  113. package/store/defaultRequiredFieldLogger.js.flow +23 -0
  114. package/store/hasOverlappingIDs.js.flow +34 -0
  115. package/store/isRelayModernEnvironment.js.flow +27 -0
  116. package/store/normalizeRelayPayload.js.flow +51 -0
  117. package/store/readInlineData.js.flow +75 -0
  118. package/subscription/requestSubscription.js.flow +103 -0
  119. package/util/JSResourceTypes.flow.js.flow +20 -0
  120. package/util/NormalizationNode.js.flow +213 -0
  121. package/util/ReaderNode.js.flow +227 -0
  122. package/util/RelayConcreteNode.js.flow +99 -0
  123. package/util/RelayDefaultHandleKey.js.flow +17 -0
  124. package/util/RelayError.js.flow +62 -0
  125. package/util/RelayFeatureFlags.js.flow +37 -0
  126. package/util/RelayProfiler.js.flow +284 -0
  127. package/util/RelayReplaySubject.js.flow +135 -0
  128. package/util/RelayRuntimeTypes.js.flow +72 -0
  129. package/util/createPayloadFor3DField.js.flow +43 -0
  130. package/util/deepFreeze.js.flow +36 -0
  131. package/util/generateID.js.flow +21 -0
  132. package/util/getFragmentIdentifier.js.flow +76 -0
  133. package/util/getOperation.js.flow +40 -0
  134. package/util/getRelayHandleKey.js.flow +41 -0
  135. package/util/getRequestIdentifier.js.flow +42 -0
  136. package/util/isEmptyObject.js.flow +25 -0
  137. package/util/isPromise.js.flow +21 -0
  138. package/util/isScalarAndEqual.js.flow +26 -0
  139. package/util/recycleNodesInto.js.flow +87 -0
  140. package/util/reportMissingRequiredFields.js.flow +51 -0
  141. package/util/resolveImmediate.js.flow +30 -0
  142. package/util/stableCopy.js.flow +35 -0
@@ -0,0 +1,199 @@
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
8
+ * @format
9
+ */
10
+
11
+ // flowlint ambiguous-object-type:error
12
+
13
+ 'use strict';
14
+
15
+ const ConnectionHandler = require('./ConnectionHandler');
16
+
17
+ const invariant = require('invariant');
18
+ const warning = require('warning');
19
+
20
+ import type {
21
+ RecordProxy,
22
+ HandleFieldPayload,
23
+ RecordSourceProxy,
24
+ Handler,
25
+ } from '../../store/RelayStoreTypes';
26
+
27
+ const DeleteRecordHandler = {
28
+ update: (store: RecordSourceProxy, payload: HandleFieldPayload) => {
29
+ const record = store.get(payload.dataID);
30
+
31
+ if (record != null) {
32
+ const idOrIds = record.getValue(payload.fieldKey);
33
+
34
+ if (typeof idOrIds === 'string') {
35
+ store.delete(idOrIds);
36
+ } else if (Array.isArray(idOrIds)) {
37
+ idOrIds.forEach(id => {
38
+ if (typeof id === 'string') {
39
+ store.delete(id);
40
+ }
41
+ });
42
+ }
43
+ }
44
+ },
45
+ };
46
+
47
+ const DeleteEdgeHandler = {
48
+ update: (store: RecordSourceProxy, payload: HandleFieldPayload) => {
49
+ const record = store.get(payload.dataID);
50
+ if (record == null) {
51
+ return;
52
+ }
53
+ const {connections} = payload.handleArgs;
54
+ invariant(
55
+ connections != null,
56
+ 'MutationHandlers: Expected connection IDs to be specified.',
57
+ );
58
+ const idOrIds = record.getValue(payload.fieldKey);
59
+ const idList = Array.isArray(idOrIds) ? idOrIds : [idOrIds];
60
+ idList.forEach(id => {
61
+ if (typeof id === 'string') {
62
+ for (const connectionID of connections) {
63
+ const connection = store.get(connectionID);
64
+ if (connection == null) {
65
+ warning(
66
+ false,
67
+ `[Relay][Mutation] The connection with id '${connectionID}' doesn't exist.`,
68
+ );
69
+ continue;
70
+ }
71
+ ConnectionHandler.deleteNode(connection, id);
72
+ }
73
+ }
74
+ });
75
+ },
76
+ };
77
+
78
+ const AppendEdgeHandler: Handler = {
79
+ update: edgeUpdater(ConnectionHandler.insertEdgeAfter),
80
+ };
81
+
82
+ const PrependEdgeHandler: Handler = {
83
+ update: edgeUpdater(ConnectionHandler.insertEdgeBefore),
84
+ };
85
+
86
+ const AppendNodeHandler: Handler = {
87
+ update: nodeUpdater(ConnectionHandler.insertEdgeAfter),
88
+ };
89
+
90
+ const PrependNodeHandler: Handler = {
91
+ update: nodeUpdater(ConnectionHandler.insertEdgeBefore),
92
+ };
93
+
94
+ function edgeUpdater(
95
+ insertFn: (RecordProxy, RecordProxy, ?string) => void,
96
+ ): (RecordSourceProxy, HandleFieldPayload) => void {
97
+ return (store: RecordSourceProxy, payload: HandleFieldPayload) => {
98
+ const record = store.get(payload.dataID);
99
+ if (record == null) {
100
+ return;
101
+ }
102
+ const {connections} = payload.handleArgs;
103
+ invariant(
104
+ connections != null,
105
+ 'MutationHandlers: Expected connection IDs to be specified.',
106
+ );
107
+ const serverEdge = record.getLinkedRecord(payload.fieldKey, payload.args);
108
+ for (const connectionID of connections) {
109
+ const connection = store.get(connectionID);
110
+ if (connection == null) {
111
+ warning(
112
+ false,
113
+ `[Relay][Mutation] The connection with id '${connectionID}' doesn't exist.`,
114
+ );
115
+ continue;
116
+ }
117
+ const clientEdge = ConnectionHandler.buildConnectionEdge(
118
+ store,
119
+ connection,
120
+ serverEdge,
121
+ );
122
+ invariant(
123
+ clientEdge != null,
124
+ 'MutationHandlers: Failed to build the edge.',
125
+ );
126
+ insertFn(connection, clientEdge);
127
+ }
128
+ };
129
+ }
130
+
131
+ function nodeUpdater(
132
+ insertFn: (RecordProxy, RecordProxy, ?string) => void,
133
+ ): (RecordSourceProxy, HandleFieldPayload) => void {
134
+ return (store: RecordSourceProxy, payload: HandleFieldPayload) => {
135
+ const record = store.get(payload.dataID);
136
+ if (record == null) {
137
+ return;
138
+ }
139
+ const {connections, edgeTypeName} = payload.handleArgs;
140
+ invariant(
141
+ connections != null,
142
+ 'MutationHandlers: Expected connection IDs to be specified.',
143
+ );
144
+ invariant(
145
+ edgeTypeName != null,
146
+ 'MutationHandlers: Expected edge typename to be specified.',
147
+ );
148
+ let singleServerNode;
149
+ let serverNodes;
150
+ try {
151
+ singleServerNode = record.getLinkedRecord(payload.fieldKey, payload.args);
152
+ } catch {}
153
+ if (!singleServerNode) {
154
+ try {
155
+ serverNodes = record.getLinkedRecords(payload.fieldKey, payload.args);
156
+ } catch {}
157
+ }
158
+ invariant(
159
+ singleServerNode != null || serverNodes != null,
160
+ 'MutationHandlers: Expected target node to exist.',
161
+ );
162
+ const serverNodeList = serverNodes ?? [singleServerNode];
163
+ for (const serverNode of serverNodeList) {
164
+ if (serverNode == null) {
165
+ continue;
166
+ }
167
+ for (const connectionID of connections) {
168
+ const connection = store.get(connectionID);
169
+ if (connection == null) {
170
+ warning(
171
+ false,
172
+ `[Relay][Mutation] The connection with id '${connectionID}' doesn't exist.`,
173
+ );
174
+ continue;
175
+ }
176
+ const clientEdge = ConnectionHandler.createEdge(
177
+ store,
178
+ connection,
179
+ serverNode,
180
+ edgeTypeName,
181
+ );
182
+ invariant(
183
+ clientEdge != null,
184
+ 'MutationHandlers: Failed to build the edge.',
185
+ );
186
+ insertFn(connection, clientEdge);
187
+ }
188
+ }
189
+ };
190
+ }
191
+
192
+ module.exports = {
193
+ AppendEdgeHandler,
194
+ DeleteRecordHandler,
195
+ PrependEdgeHandler,
196
+ AppendNodeHandler,
197
+ PrependNodeHandler,
198
+ DeleteEdgeHandler,
199
+ };
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v9.0.0
2
+ * Relay v10.1.0
3
3
  *
4
4
  * Copyright (c) Facebook, Inc. and its affiliates.
5
5
  *
package/index.js.flow ADDED
@@ -0,0 +1,335 @@
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 MutationHandlers = require('./handlers/connection/MutationHandlers');
19
+ const PreloadableQueryRegistry = require('./query/PreloadableQueryRegistry');
20
+ const RelayConcreteNode = require('./util/RelayConcreteNode');
21
+ const RelayConcreteVariables = require('./store/RelayConcreteVariables');
22
+ const RelayDeclarativeMutationConfig = require('./mutations/RelayDeclarativeMutationConfig');
23
+ const RelayDefaultHandleKey = require('./util/RelayDefaultHandleKey');
24
+ const RelayDefaultHandlerProvider = require('./handlers/RelayDefaultHandlerProvider');
25
+ const RelayError = require('./util/RelayError');
26
+ const RelayFeatureFlags = require('./util/RelayFeatureFlags');
27
+ const RelayModernEnvironment = require('./store/RelayModernEnvironment');
28
+ const RelayModernOperationDescriptor = require('./store/RelayModernOperationDescriptor');
29
+ const RelayModernRecord = require('./store/RelayModernRecord');
30
+ const RelayModernSelector = require('./store/RelayModernSelector');
31
+ const RelayModernStore = require('./store/RelayModernStore');
32
+ const RelayNetwork = require('./network/RelayNetwork');
33
+ const RelayObservable = require('./network/RelayObservable');
34
+ const RelayOperationTracker = require('./store/RelayOperationTracker');
35
+ const RelayProfiler = require('./util/RelayProfiler');
36
+ const RelayQueryResponseCache = require('./network/RelayQueryResponseCache');
37
+ const RelayRecordSource = require('./store/RelayRecordSource');
38
+ const RelayReplaySubject = require('./util/RelayReplaySubject');
39
+ const RelayStoreUtils = require('./store/RelayStoreUtils');
40
+ const ViewerPattern = require('./store/ViewerPattern');
41
+
42
+ const applyOptimisticMutation = require('./mutations/applyOptimisticMutation');
43
+ const commitLocalUpdate = require('./mutations/commitLocalUpdate');
44
+ const commitMutation = require('./mutations/commitMutation');
45
+ const createFragmentSpecResolver = require('./store/createFragmentSpecResolver');
46
+ const createPayloadFor3DField = require('./util/createPayloadFor3DField');
47
+ const createRelayContext = require('./store/createRelayContext');
48
+ const deepFreeze = require('./util/deepFreeze');
49
+ const fetchQuery = require('./query/fetchQuery');
50
+ const fetchQueryInternal = require('./query/fetchQueryInternal');
51
+ const getFragmentIdentifier = require('./util/getFragmentIdentifier');
52
+ const getRelayHandleKey = require('./util/getRelayHandleKey');
53
+ const getRequestIdentifier = require('./util/getRequestIdentifier');
54
+ const isPromise = require('./util/isPromise');
55
+ const isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
56
+ const isScalarAndEqual = require('./util/isScalarAndEqual');
57
+ const readInlineData = require('./store/readInlineData');
58
+ const recycleNodesInto = require('./util/recycleNodesInto');
59
+ const reportMissingRequiredFields = require('./util/reportMissingRequiredFields');
60
+ const requestSubscription = require('./subscription/requestSubscription');
61
+ const stableCopy = require('./util/stableCopy');
62
+
63
+ const {
64
+ generateClientID,
65
+ generateUniqueClientID,
66
+ isClientID,
67
+ } = require('./store/ClientID');
68
+
69
+ export type {ConnectionMetadata} from './handlers/connection/ConnectionHandler';
70
+ export type {
71
+ EdgeRecord,
72
+ PageInfo,
73
+ } from './handlers/connection/ConnectionInterface';
74
+ export type {
75
+ DeclarativeMutationConfig,
76
+ MutationType,
77
+ RangeBehaviors,
78
+ RangeOperation,
79
+ } from './mutations/RelayDeclarativeMutationConfig';
80
+ export type {OptimisticMutationConfig} from './mutations/applyOptimisticMutation';
81
+ export type {
82
+ DEPRECATED_MutationConfig,
83
+ MutationConfig,
84
+ MutationParameters,
85
+ } from './mutations/commitMutation';
86
+ export type {
87
+ ExecuteFunction,
88
+ FetchFunction,
89
+ GraphQLResponse,
90
+ GraphQLResponseWithData,
91
+ GraphQLResponseWithoutData,
92
+ GraphQLSingularResponse,
93
+ INetwork,
94
+ LogRequestInfoFunction,
95
+ PayloadData,
96
+ PayloadError,
97
+ ReactFlightPayloadData,
98
+ ReactFlightPayloadQuery,
99
+ ReactFlightServerTree,
100
+ SubscribeFunction,
101
+ Uploadable,
102
+ UploadableMap,
103
+ } from './network/RelayNetworkTypes';
104
+ export type {
105
+ ObservableFromValue,
106
+ Observer,
107
+ Subscribable,
108
+ Subscription,
109
+ } from './network/RelayObservable';
110
+ export type {GraphQLTaggedNode} from './query/GraphQLTag';
111
+ export type {EnvironmentConfig} from './store/RelayModernEnvironment';
112
+ export type {TaskScheduler} from './store/RelayModernQueryExecutor';
113
+ export type {RecordState} from './store/RelayRecordState';
114
+ export type {
115
+ FragmentMap,
116
+ FragmentReference,
117
+ FragmentSpecResolver,
118
+ HandleFieldPayload,
119
+ IEnvironment,
120
+ InvalidationState,
121
+ LogEvent,
122
+ LogFunction,
123
+ MissingFieldHandler,
124
+ MissingRequiredFields,
125
+ ModuleImportPointer,
126
+ NormalizationSelector,
127
+ OperationAvailability,
128
+ OperationDescriptor,
129
+ OperationLoader,
130
+ OperationTracker,
131
+ OptimisticResponseConfig,
132
+ OptimisticUpdate,
133
+ OptimisticUpdateFunction,
134
+ PluralReaderSelector,
135
+ Props,
136
+ PublishQueue,
137
+ ReactFlightPayloadDeserializer,
138
+ ReactFlightClientResponse,
139
+ ReaderSelector,
140
+ ReadOnlyRecordProxy,
141
+ RecordProxy,
142
+ RecordSourceProxy,
143
+ RecordSourceSelectorProxy,
144
+ RelayContext,
145
+ RequestDescriptor,
146
+ SelectorData,
147
+ SelectorStoreUpdater,
148
+ SingularReaderSelector,
149
+ Snapshot,
150
+ StoreUpdater,
151
+ } from './store/RelayStoreTypes';
152
+ export type {GraphQLSubscriptionConfig} from './subscription/requestSubscription';
153
+ export type {JSResourceReference} from './util/JSResourceTypes.flow';
154
+ export type {
155
+ NormalizationArgument,
156
+ NormalizationDefer,
157
+ NormalizationField,
158
+ NormalizationFlightField,
159
+ NormalizationLinkedField,
160
+ NormalizationLinkedHandle,
161
+ NormalizationLocalArgumentDefinition,
162
+ NormalizationModuleImport,
163
+ NormalizationScalarField,
164
+ NormalizationSelection,
165
+ NormalizationSplitOperation,
166
+ NormalizationStream,
167
+ NormalizationTypeDiscriminator,
168
+ } from './util/NormalizationNode';
169
+ export type {NormalizationOperation} from './util/NormalizationNode';
170
+ export type {
171
+ ReaderArgument,
172
+ ReaderArgumentDefinition,
173
+ ReaderField,
174
+ ReaderFlightField,
175
+ ReaderFragment,
176
+ ReaderInlineDataFragment,
177
+ ReaderInlineDataFragmentSpread,
178
+ ReaderLinkedField,
179
+ ReaderModuleImport,
180
+ ReaderPaginationMetadata,
181
+ ReaderRefetchableFragment,
182
+ ReaderRefetchMetadata,
183
+ ReaderRequiredField,
184
+ ReaderScalarField,
185
+ ReaderSelection,
186
+ RequiredFieldAction,
187
+ } from './util/ReaderNode';
188
+ export type {
189
+ ConcreteRequest,
190
+ GeneratedNode,
191
+ RequestParameters,
192
+ } from './util/RelayConcreteNode';
193
+ export type {
194
+ CacheConfig,
195
+ DataID,
196
+ Disposable,
197
+ FetchPolicy,
198
+ FetchQueryFetchPolicy,
199
+ OperationType,
200
+ RenderPolicy,
201
+ Variables,
202
+ VariablesOf,
203
+ } from './util/RelayRuntimeTypes';
204
+ export type {Local3DPayload} from './util/createPayloadFor3DField';
205
+
206
+ // As early as possible, check for the existence of the JavaScript globals which
207
+ // Relay Runtime relies upon, and produce a clear message if they do not exist.
208
+ if (__DEV__) {
209
+ const mapStr = typeof Map !== 'function' ? 'Map' : null;
210
+ const setStr = typeof Set !== 'function' ? 'Set' : null;
211
+ const promiseStr = typeof Promise !== 'function' ? 'Promise' : null;
212
+ const objStr = typeof Object.assign !== 'function' ? 'Object.assign' : null;
213
+ if (mapStr || setStr || promiseStr || objStr) {
214
+ throw new Error(
215
+ `relay-runtime requires ${[mapStr, setStr, promiseStr, objStr]
216
+ .filter(Boolean)
217
+ .join(', and ')} to exist. ` +
218
+ 'Use a polyfill to provide these for older browsers.',
219
+ );
220
+ }
221
+ }
222
+
223
+ /**
224
+ * The public interface to Relay Runtime.
225
+ */
226
+ module.exports = {
227
+ // Core API
228
+ Environment: RelayModernEnvironment,
229
+ Network: RelayNetwork,
230
+ Observable: RelayObservable,
231
+ QueryResponseCache: RelayQueryResponseCache,
232
+ RecordSource: RelayRecordSource,
233
+ Record: RelayModernRecord,
234
+ ReplaySubject: RelayReplaySubject,
235
+ Store: RelayModernStore,
236
+
237
+ areEqualSelectors: RelayModernSelector.areEqualSelectors,
238
+ createFragmentSpecResolver: createFragmentSpecResolver,
239
+ createNormalizationSelector: RelayModernSelector.createNormalizationSelector,
240
+ createOperationDescriptor:
241
+ RelayModernOperationDescriptor.createOperationDescriptor,
242
+ createReaderSelector: RelayModernSelector.createReaderSelector,
243
+ createRequestDescriptor:
244
+ RelayModernOperationDescriptor.createRequestDescriptor,
245
+ getDataIDsFromFragment: RelayModernSelector.getDataIDsFromFragment,
246
+ getDataIDsFromObject: RelayModernSelector.getDataIDsFromObject,
247
+ getNode: GraphQLTag.getNode,
248
+ getFragment: GraphQLTag.getFragment,
249
+ getInlineDataFragment: GraphQLTag.getInlineDataFragment,
250
+ getModuleComponentKey: RelayStoreUtils.getModuleComponentKey,
251
+ getModuleOperationKey: RelayStoreUtils.getModuleOperationKey,
252
+ getPaginationFragment: GraphQLTag.getPaginationFragment,
253
+ getPluralSelector: RelayModernSelector.getPluralSelector,
254
+ getRefetchableFragment: GraphQLTag.getRefetchableFragment,
255
+ getRequest: GraphQLTag.getRequest,
256
+ getRequestIdentifier: getRequestIdentifier,
257
+ getSelector: RelayModernSelector.getSelector,
258
+ getSelectorsFromObject: RelayModernSelector.getSelectorsFromObject,
259
+ getSingularSelector: RelayModernSelector.getSingularSelector,
260
+ getStorageKey: RelayStoreUtils.getStorageKey,
261
+ getVariablesFromFragment: RelayModernSelector.getVariablesFromFragment,
262
+ getVariablesFromObject: RelayModernSelector.getVariablesFromObject,
263
+ getVariablesFromPluralFragment:
264
+ RelayModernSelector.getVariablesFromPluralFragment,
265
+ getVariablesFromSingularFragment:
266
+ RelayModernSelector.getVariablesFromSingularFragment,
267
+ reportMissingRequiredFields,
268
+ graphql: GraphQLTag.graphql,
269
+ isFragment: GraphQLTag.isFragment,
270
+ isInlineDataFragment: GraphQLTag.isInlineDataFragment,
271
+ isRequest: GraphQLTag.isRequest,
272
+ readInlineData,
273
+
274
+ // Declarative mutation API
275
+ MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
276
+ RangeOperations: RelayDeclarativeMutationConfig.RangeOperations,
277
+
278
+ // Extensions
279
+ DefaultHandlerProvider: RelayDefaultHandlerProvider,
280
+ ConnectionHandler,
281
+ MutationHandlers,
282
+ VIEWER_ID: ViewerPattern.VIEWER_ID,
283
+ VIEWER_TYPE: ViewerPattern.VIEWER_TYPE,
284
+
285
+ // Helpers (can be implemented via the above API)
286
+ applyOptimisticMutation,
287
+ commitLocalUpdate,
288
+ commitMutation,
289
+ fetchQuery,
290
+ isRelayModernEnvironment,
291
+ requestSubscription,
292
+
293
+ // Configuration interface for legacy or special uses
294
+ ConnectionInterface,
295
+
296
+ // Utilities
297
+ PreloadableQueryRegistry,
298
+ RelayProfiler: RelayProfiler,
299
+ createPayloadFor3DField: createPayloadFor3DField,
300
+
301
+ // INTERNAL-ONLY: These exports might be removed at any point.
302
+ RelayConcreteNode: RelayConcreteNode,
303
+ RelayError: RelayError,
304
+ RelayFeatureFlags: RelayFeatureFlags,
305
+ DEFAULT_HANDLE_KEY: RelayDefaultHandleKey.DEFAULT_HANDLE_KEY,
306
+ FRAGMENTS_KEY: RelayStoreUtils.FRAGMENTS_KEY,
307
+ FRAGMENT_OWNER_KEY: RelayStoreUtils.FRAGMENT_OWNER_KEY,
308
+ ID_KEY: RelayStoreUtils.ID_KEY,
309
+ REF_KEY: RelayStoreUtils.REF_KEY,
310
+ REFS_KEY: RelayStoreUtils.REFS_KEY,
311
+ ROOT_ID: RelayStoreUtils.ROOT_ID,
312
+ ROOT_TYPE: RelayStoreUtils.ROOT_TYPE,
313
+ TYPENAME_KEY: RelayStoreUtils.TYPENAME_KEY,
314
+
315
+ deepFreeze: deepFreeze,
316
+ generateClientID: generateClientID,
317
+ generateUniqueClientID: generateUniqueClientID,
318
+ getRelayHandleKey: getRelayHandleKey,
319
+ isClientID: isClientID,
320
+ isPromise: isPromise,
321
+ isScalarAndEqual: isScalarAndEqual,
322
+ recycleNodesInto: recycleNodesInto,
323
+ stableCopy: stableCopy,
324
+ getFragmentIdentifier: getFragmentIdentifier,
325
+ __internal: {
326
+ OperationTracker: RelayOperationTracker,
327
+ createRelayContext: createRelayContext,
328
+ getOperationVariables: RelayConcreteVariables.getOperationVariables,
329
+ fetchQuery: fetchQueryInternal.fetchQuery,
330
+ fetchQueryDeduped: fetchQueryInternal.fetchQueryDeduped,
331
+ getPromiseForActiveRequest: fetchQueryInternal.getPromiseForActiveRequest,
332
+ getObservableForActiveRequest:
333
+ fetchQueryInternal.getObservableForActiveRequest,
334
+ },
335
+ };
@@ -12,12 +12,32 @@
12
12
 
13
13
  var ConnectionHandler = require('./connection/ConnectionHandler');
14
14
 
15
+ var MutationHandlers = require('./connection/MutationHandlers');
16
+
15
17
  var invariant = require("fbjs/lib/invariant");
16
18
 
17
19
  function RelayDefaultHandlerProvider(handle) {
18
20
  switch (handle) {
19
21
  case 'connection':
20
22
  return ConnectionHandler;
23
+
24
+ case 'deleteRecord':
25
+ return MutationHandlers.DeleteRecordHandler;
26
+
27
+ case 'deleteEdge':
28
+ return MutationHandlers.DeleteEdgeHandler;
29
+
30
+ case 'appendEdge':
31
+ return MutationHandlers.AppendEdgeHandler;
32
+
33
+ case 'prependEdge':
34
+ return MutationHandlers.PrependEdgeHandler;
35
+
36
+ case 'appendNode':
37
+ return MutationHandlers.AppendNodeHandler;
38
+
39
+ case 'prependNode':
40
+ return MutationHandlers.PrependNodeHandler;
21
41
  }
22
42
 
23
43
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayDefaultHandlerProvider: No handler provided for `%s`.', handle) : invariant(false) : void 0;
@@ -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) {