relay-runtime 2.0.0-rc.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/index.js +1 -1
  2. package/lib/{generateRelayClientID.js → ClientID.js} +10 -3
  3. package/lib/ConvertToExecuteFunction.js +6 -4
  4. package/lib/DataChecker.js +88 -69
  5. package/lib/NormalizationNode.js +1 -1
  6. package/lib/ReaderNode.js +1 -1
  7. package/lib/RelayCombinedEnvironmentTypes.js +1 -1
  8. package/lib/RelayConcreteNode.js +5 -2
  9. package/lib/RelayConcreteVariables.js +15 -9
  10. package/lib/RelayConnectionHandler.js +27 -20
  11. package/lib/RelayConnectionInterface.js +4 -2
  12. package/lib/RelayCore.js +48 -15
  13. package/lib/RelayDeclarativeMutationConfig.js +16 -15
  14. package/lib/RelayDefaultHandleKey.js +1 -1
  15. package/lib/RelayDefaultHandlerProvider.js +7 -6
  16. package/lib/RelayDefaultMissingFieldHandlers.js +26 -0
  17. package/lib/RelayError.js +7 -2
  18. package/lib/RelayFeatureFlags.js +16 -0
  19. package/lib/RelayInMemoryRecordSource.js +8 -2
  20. package/lib/RelayModernEnvironment.js +159 -237
  21. package/lib/RelayModernFragmentOwner.js +72 -0
  22. package/lib/RelayModernFragmentSpecResolver.js +66 -15
  23. package/lib/RelayModernGraphQLTag.js +9 -5
  24. package/lib/RelayModernOperationDescriptor.js +9 -6
  25. package/lib/RelayModernQueryExecutor.js +791 -0
  26. package/lib/RelayModernRecord.js +44 -24
  27. package/lib/RelayModernSelector.js +208 -82
  28. package/lib/RelayModernStore.js +66 -34
  29. package/lib/RelayNetwork.js +14 -7
  30. package/lib/RelayNetworkLogger.js +6 -2
  31. package/lib/RelayNetworkLoggerTransaction.js +8 -4
  32. package/lib/RelayNetworkTypes.js +1 -1
  33. package/lib/RelayObservable.js +72 -41
  34. package/lib/RelayOperationTracker.js +265 -0
  35. package/lib/RelayProfiler.js +10 -6
  36. package/lib/RelayPublishQueue.js +66 -47
  37. package/lib/RelayQueryResponseCache.js +11 -5
  38. package/lib/RelayReader.js +135 -126
  39. package/lib/RelayRecordProxy.js +24 -20
  40. package/lib/RelayRecordSourceMutator.js +88 -25
  41. package/lib/RelayRecordSourceProxy.js +38 -19
  42. package/lib/RelayRecordSourceSelectorProxy.js +10 -7
  43. package/lib/RelayRecordState.js +1 -1
  44. package/lib/RelayReferenceMarker.js +66 -55
  45. package/lib/RelayReplaySubject.js +134 -0
  46. package/lib/RelayResponseNormalizer.js +245 -134
  47. package/lib/RelayRuntimeTypes.js +1 -1
  48. package/lib/RelayStoreUtils.js +55 -16
  49. package/lib/RelayViewerHandler.js +8 -50
  50. package/lib/StoreInspector.js +171 -0
  51. package/lib/applyRelayModernOptimisticMutation.js +8 -2
  52. package/lib/cloneRelayHandleSourceField.js +17 -7
  53. package/lib/commitLocalUpdate.js +1 -1
  54. package/lib/commitRelayModernMutation.js +33 -13
  55. package/lib/createRelayContext.js +27 -0
  56. package/lib/createRelayNetworkLogger.js +8 -2
  57. package/lib/deepFreeze.js +1 -1
  58. package/lib/defaultGetDataID.js +24 -0
  59. package/lib/fetchQueryInternal.js +232 -0
  60. package/lib/fetchRelayModernQuery.js +5 -3
  61. package/lib/getFragmentIdentifier.js +52 -0
  62. package/lib/getFragmentSpecIdentifier.js +26 -0
  63. package/lib/getRelayHandleKey.js +8 -2
  64. package/lib/getRequestParametersIdentifier.js +26 -0
  65. package/lib/hasOverlappingIDs.js +1 -1
  66. package/lib/index.js +155 -53
  67. package/lib/isPromise.js +1 -1
  68. package/lib/isScalarAndEqual.js +1 -1
  69. package/lib/normalizeRelayPayload.js +19 -10
  70. package/lib/recycleNodesInto.js +23 -5
  71. package/lib/requestRelaySubscription.js +9 -3
  72. package/lib/validateMutation.js +13 -6
  73. package/package.json +2 -2
  74. package/relay-runtime.js +2 -2
  75. package/relay-runtime.min.js +2 -2
  76. package/lib/normalizePayload.js +0 -37
  77. package/lib/simpleClone.js +0 -27
package/lib/RelayCore.js CHANGED
@@ -9,31 +9,64 @@
9
9
  */
10
10
  'use strict';
11
11
 
12
+ var RelayModernFragmentSpecResolver = require("./RelayModernFragmentSpecResolver");
13
+
14
+ var warning = require("fbjs/lib/warning");
15
+
16
+ var _require = require("./RelayModernGraphQLTag"),
17
+ getFragment = _require.getFragment,
18
+ getPaginationFragment = _require.getPaginationFragment,
19
+ getRefetchableFragment = _require.getRefetchableFragment,
20
+ getRequest = _require.getRequest,
21
+ isFragment = _require.isFragment,
22
+ isRequest = _require.isRequest;
23
+
24
+ var _require2 = require("./RelayModernOperationDescriptor"),
25
+ createOperationDescriptor = _require2.createOperationDescriptor;
26
+
27
+ var _require3 = require("./RelayModernSelector"),
28
+ areEqualSelectors = _require3.areEqualSelectors,
29
+ getDataIDsFromFragment = _require3.getDataIDsFromFragment,
30
+ getDataIDsFromObject = _require3.getDataIDsFromObject,
31
+ getSingularSelector = _require3.getSingularSelector,
32
+ getPluralSelector = _require3.getPluralSelector,
33
+ getSelector = _require3.getSelector,
34
+ getSelectorsFromObject = _require3.getSelectorsFromObject,
35
+ getVariablesFromSingularFragment = _require3.getVariablesFromSingularFragment,
36
+ getVariablesFromPluralFragment = _require3.getVariablesFromPluralFragment,
37
+ getVariablesFromFragment = _require3.getVariablesFromFragment,
38
+ getVariablesFromObject = _require3.getVariablesFromObject;
39
+
12
40
  function createFragmentSpecResolver(context, containerName, fragments, props, callback) {
13
41
  if (process.env.NODE_ENV !== "production") {
14
42
  var fragmentNames = Object.keys(fragments);
15
43
  fragmentNames.forEach(function (fragmentName) {
16
44
  var propValue = props[fragmentName];
17
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(propValue !== undefined, 'createFragmentSpecResolver: Expected prop `%s` to be supplied to `%s`, but ' + 'got `undefined`. Pass an explicit `null` if this is intentional.', fragmentName, containerName) : void 0;
45
+ process.env.NODE_ENV !== "production" ? warning(propValue !== undefined, 'createFragmentSpecResolver: Expected prop `%s` to be supplied to `%s`, but ' + 'got `undefined`. Pass an explicit `null` if this is intentional.', fragmentName, containerName) : void 0;
18
46
  });
19
47
  }
20
48
 
21
- return new (require("./RelayModernFragmentSpecResolver"))(context, fragments, props, callback);
49
+ return new RelayModernFragmentSpecResolver(context, fragments, props, callback);
22
50
  }
23
51
 
24
52
  module.exports = {
25
- areEqualSelectors: require("./RelayModernSelector").areEqualSelectors,
53
+ areEqualSelectors: areEqualSelectors,
26
54
  createFragmentSpecResolver: createFragmentSpecResolver,
27
- createOperationDescriptor: require("./RelayModernOperationDescriptor").createOperationDescriptor,
28
- getDataIDsFromObject: require("./RelayModernSelector").getDataIDsFromObject,
29
- getFragment: require("./RelayModernGraphQLTag").getFragment,
30
- getPaginationFragment: require("./RelayModernGraphQLTag").getPaginationFragment,
31
- getRefetchableFragment: require("./RelayModernGraphQLTag").getRefetchableFragment,
32
- getRequest: require("./RelayModernGraphQLTag").getRequest,
33
- getSelector: require("./RelayModernSelector").getSelector,
34
- getSelectorList: require("./RelayModernSelector").getSelectorList,
35
- getSelectorsFromObject: require("./RelayModernSelector").getSelectorsFromObject,
36
- getVariablesFromObject: require("./RelayModernSelector").getVariablesFromObject,
37
- isFragment: require("./RelayModernGraphQLTag").isFragment,
38
- isRequest: require("./RelayModernGraphQLTag").isRequest
55
+ createOperationDescriptor: createOperationDescriptor,
56
+ getDataIDsFromFragment: getDataIDsFromFragment,
57
+ getDataIDsFromObject: getDataIDsFromObject,
58
+ getFragment: getFragment,
59
+ getPaginationFragment: getPaginationFragment,
60
+ getRefetchableFragment: getRefetchableFragment,
61
+ getRequest: getRequest,
62
+ getSingularSelector: getSingularSelector,
63
+ getPluralSelector: getPluralSelector,
64
+ getSelector: getSelector,
65
+ getSelectorsFromObject: getSelectorsFromObject,
66
+ getVariablesFromSingularFragment: getVariablesFromSingularFragment,
67
+ getVariablesFromPluralFragment: getVariablesFromPluralFragment,
68
+ getVariablesFromFragment: getVariablesFromFragment,
69
+ getVariablesFromObject: getVariablesFromObject,
70
+ isFragment: isFragment,
71
+ isRequest: isRequest
39
72
  };
@@ -9,6 +9,10 @@
9
9
  */
10
10
  'use strict';
11
11
 
12
+ var RelayConnectionHandler = require("./RelayConnectionHandler");
13
+
14
+ var warning = require("fbjs/lib/warning");
15
+
12
16
  var MutationTypes = Object.freeze({
13
17
  RANGE_ADD: 'RANGE_ADD',
14
18
  RANGE_DELETE: 'RANGE_DELETE',
@@ -107,7 +111,7 @@ function rangeAdd(config, request) {
107
111
  edgeName = config.edgeName;
108
112
 
109
113
  if (!parentID) {
110
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayDeclarativeMutationConfig: For mutation config RANGE_ADD ' + 'to work you must include a parentID') : void 0;
114
+ process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: For mutation config RANGE_ADD ' + 'to work you must include a parentID') : void 0;
111
115
  return null;
112
116
  }
113
117
 
@@ -143,13 +147,13 @@ function rangeAdd(config, request) {
143
147
  continue;
144
148
  }
145
149
 
146
- var connection = require("./RelayConnectionHandler").getConnection(parent, info.key, info.filters);
150
+ var connection = RelayConnectionHandler.getConnection(parent, info.key, info.filters);
147
151
 
148
152
  if (!connection) {
149
153
  continue;
150
154
  }
151
155
 
152
- var clientEdge = require("./RelayConnectionHandler").buildConnectionEdge(store, connection, serverEdge);
156
+ var clientEdge = RelayConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
153
157
 
154
158
  if (!clientEdge) {
155
159
  continue;
@@ -157,8 +161,7 @@ function rangeAdd(config, request) {
157
161
 
158
162
  switch (info.rangeBehavior) {
159
163
  case 'append':
160
- require("./RelayConnectionHandler").insertEdgeAfter(connection, clientEdge);
161
-
164
+ RelayConnectionHandler.insertEdgeAfter(connection, clientEdge);
162
165
  break;
163
166
 
164
167
  case 'ignore':
@@ -166,12 +169,11 @@ function rangeAdd(config, request) {
166
169
  break;
167
170
 
168
171
  case 'prepend':
169
- require("./RelayConnectionHandler").insertEdgeBefore(connection, clientEdge);
170
-
172
+ RelayConnectionHandler.insertEdgeBefore(connection, clientEdge);
171
173
  break;
172
174
 
173
175
  default:
174
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayDeclarativeMutationConfig: RANGE_ADD range behavior `%s` ' + 'will not work as expected in RelayModern, supported range ' + "behaviors are 'append', 'prepend', and 'ignore'.", info.rangeBehavior) : void 0;
176
+ process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: RANGE_ADD range behavior `%s` ' + 'will not work as expected in RelayModern, supported range ' + "behaviors are 'append', 'prepend', and 'ignore'.", info.rangeBehavior) : void 0;
175
177
  break;
176
178
  }
177
179
  }
@@ -199,7 +201,7 @@ function rangeDelete(config, request) {
199
201
  deletedIDFieldName = config.deletedIDFieldName;
200
202
 
201
203
  if (!parentID) {
202
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayDeclarativeMutationConfig: For mutation config RANGE_DELETE ' + 'to work you must include a parentID') : void 0;
204
+ process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: For mutation config RANGE_DELETE ' + 'to work you must include a parentID') : void 0;
203
205
  return null;
204
206
  }
205
207
 
@@ -273,7 +275,7 @@ function rangeDelete(config, request) {
273
275
  }
274
276
 
275
277
  function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs) {
276
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(connectionKeys, 'RelayDeclarativeMutationConfig: RANGE_DELETE must provide a ' + 'connectionKeys') : void 0;
278
+ process.env.NODE_ENV !== "production" ? warning(connectionKeys, 'RelayDeclarativeMutationConfig: RANGE_DELETE must provide a ' + 'connectionKeys') : void 0;
277
279
  var parent = store.get(parentID);
278
280
 
279
281
  if (!parent) {
@@ -281,7 +283,7 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
281
283
  }
282
284
 
283
285
  if (pathToConnection.length < 2) {
284
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayDeclarativeMutationConfig: RANGE_DELETE ' + 'pathToConnection must include at least parent and connection') : void 0;
286
+ process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: RANGE_DELETE ' + 'pathToConnection must include at least parent and connection') : void 0;
285
287
  return;
286
288
  }
287
289
 
@@ -295,7 +297,7 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
295
297
 
296
298
 
297
299
  if (!connectionKeys || !recordProxy) {
298
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayDeclarativeMutationConfig: RANGE_DELETE ' + 'pathToConnection is incorrect. Unable to find connection with ' + 'parentID: %s and path: %s', parentID, pathToConnection.toString()) : void 0;
300
+ process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: RANGE_DELETE ' + 'pathToConnection is incorrect. Unable to find connection with ' + 'parentID: %s and path: %s', parentID, pathToConnection.toString()) : void 0;
299
301
  return;
300
302
  }
301
303
 
@@ -306,12 +308,11 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
306
308
  try {
307
309
  var _loop = function _loop() {
308
310
  var key = _step3.value;
309
-
310
- var connection = require("./RelayConnectionHandler").getConnection(recordProxy, key.key, key.filters);
311
+ var connection = RelayConnectionHandler.getConnection(recordProxy, key.key, key.filters);
311
312
 
312
313
  if (connection) {
313
314
  deleteIDs.forEach(function (deleteID) {
314
- require("./RelayConnectionHandler").deleteNode(connection, deleteID);
315
+ RelayConnectionHandler.deleteNode(connection, deleteID);
315
316
  });
316
317
  }
317
318
  };
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  * @format
9
9
  */
10
10
  'use strict';
@@ -4,21 +4,22 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict-local
7
+ *
8
8
  * @format
9
9
  */
10
10
  'use strict';
11
11
 
12
+ var RelayConnectionHandler = require("./RelayConnectionHandler");
13
+
14
+ var invariant = require("fbjs/lib/invariant");
15
+
12
16
  function RelayDefaultHandlerProvider(handle) {
13
17
  switch (handle) {
14
18
  case 'connection':
15
- return require("./RelayConnectionHandler");
16
-
17
- case 'viewer':
18
- return require("./RelayViewerHandler");
19
+ return RelayConnectionHandler;
19
20
  }
20
21
 
21
- !false ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayDefaultHandlerProvider: No handler provided for `%s`.', handle) : require("fbjs/lib/invariant")(false) : void 0;
22
+ !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayDefaultHandlerProvider: No handler provided for `%s`.', handle) : invariant(false) : void 0;
22
23
  }
23
24
 
24
25
  module.exports = RelayDefaultHandlerProvider;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ */
10
+ 'use strict';
11
+
12
+ var _require = require("./RelayStoreUtils"),
13
+ ROOT_TYPE = _require.ROOT_TYPE;
14
+
15
+ var _require2 = require("./RelayViewerHandler"),
16
+ VIEWER_ID = _require2.VIEWER_ID;
17
+
18
+ var missingViewerFieldHandler = {
19
+ kind: 'linked',
20
+ handle: function handle(field, record, argValues) {
21
+ if (record != null && record.__typename === ROOT_TYPE && field.name === 'viewer') {
22
+ return VIEWER_ID;
23
+ }
24
+ }
25
+ };
26
+ module.exports = [missingViewerFieldHandler];
package/lib/RelayError.js CHANGED
@@ -9,13 +9,18 @@
9
9
  */
10
10
  'use strict';
11
11
 
12
- var _toConsumableArray2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
13
13
 
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
16
+ var sprintf = require("fbjs/lib/sprintf");
14
17
  /**
15
18
  * @internal
16
19
  *
17
20
  * Factory methods for constructing errors in Relay.
18
21
  */
22
+
23
+
19
24
  var RelayError = {
20
25
  create: function create(name, format) {
21
26
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
@@ -37,7 +42,7 @@ var RelayError = {
37
42
  */
38
43
 
39
44
  function createError(type, name, format, args) {
40
- var error = new Error(require("fbjs/lib/sprintf").apply(void 0, [format].concat((0, _toConsumableArray2["default"])(args))));
45
+ var error = new Error(sprintf.apply(void 0, [format].concat((0, _toConsumableArray2["default"])(args))));
41
46
  error.name = name;
42
47
  error.type = type;
43
48
  error.framesToPop = 2;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ */
10
+ 'use strict';
11
+
12
+ var RelayFeatureFlags = {
13
+ // T45504512: new connection model
14
+ ENABLE_VARIABLE_CONNECTION_KEY: false
15
+ };
16
+ module.exports = RelayFeatureFlags;
@@ -9,10 +9,16 @@
9
9
  */
10
10
  'use strict';
11
11
 
12
+ var RelayRecordState = require("./RelayRecordState");
13
+
14
+ var EXISTENT = RelayRecordState.EXISTENT,
15
+ NONEXISTENT = RelayRecordState.NONEXISTENT,
16
+ UNKNOWN = RelayRecordState.UNKNOWN;
12
17
  /**
13
18
  * An implementation of the `MutableRecordSource` interface (defined in
14
19
  * `RelayStoreTypes`) that holds all records in memory.
15
20
  */
21
+
16
22
  var RelayInMemoryRecordSource =
17
23
  /*#__PURE__*/
18
24
  function () {
@@ -40,10 +46,10 @@ function () {
40
46
 
41
47
  _proto.getStatus = function getStatus(dataID) {
42
48
  if (!this._records.hasOwnProperty(dataID)) {
43
- return require("./RelayRecordState").UNKNOWN;
49
+ return UNKNOWN;
44
50
  }
45
51
 
46
- return this._records[dataID] == null ? require("./RelayRecordState").NONEXISTENT : require("./RelayRecordState").EXISTENT;
52
+ return this._records[dataID] == null ? NONEXISTENT : EXISTENT;
47
53
  };
48
54
 
49
55
  _proto.has = function has(dataID) {