relay-runtime 1.3.0 → 1.5.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 (90) hide show
  1. package/LICENSE +16 -26
  2. package/index.js +3 -6
  3. package/lib/ConvertToExecuteFunction.js +73 -0
  4. package/lib/RelayConcreteNode.js +31 -14
  5. package/lib/RelayConcreteVariables.js +11 -6
  6. package/lib/RelayConnectionHandler.js +2 -4
  7. package/lib/RelayConnectionInterface.js +3 -5
  8. package/lib/RelayCore.js +4 -6
  9. package/lib/RelayDataLoader.js +2 -4
  10. package/lib/RelayDeclarativeMutationConfig.js +316 -0
  11. package/lib/RelayDefaultHandleKey.js +2 -4
  12. package/lib/RelayDefaultHandlerProvider.js +2 -4
  13. package/lib/RelayError.js +2 -6
  14. package/lib/RelayInMemoryRecordSource.js +2 -4
  15. package/lib/RelayInternalTypes.js +2 -5
  16. package/lib/RelayInternals.js +2 -5
  17. package/lib/RelayMarkSweepStore.js +22 -5
  18. package/lib/RelayMetricsRecorder.js +9 -9
  19. package/lib/RelayMockRenderer.js +3 -8
  20. package/lib/RelayModernEnvironment.js +120 -135
  21. package/lib/RelayModernFragmentSpecResolver.js +81 -55
  22. package/lib/RelayModernGraphQLTag.js +8 -17
  23. package/lib/RelayModernOperationSelector.js +8 -8
  24. package/lib/RelayModernRecord.js +8 -8
  25. package/lib/RelayModernSelector.js +54 -43
  26. package/lib/RelayNetwork.js +9 -11
  27. package/lib/RelayNetworkDebug.js +4 -7
  28. package/lib/RelayNetworkLogger.js +2 -4
  29. package/lib/RelayNetworkLoggerTransaction.js +18 -20
  30. package/lib/RelayNetworkTypes.js +2 -4
  31. package/lib/RelayObservable.js +193 -120
  32. package/lib/RelayProfiler.js +7 -7
  33. package/lib/RelayPublishQueue.js +17 -9
  34. package/lib/RelayQueryCaching.js +2 -5
  35. package/lib/RelayQueryResponseCache.js +3 -5
  36. package/lib/RelayReader.js +18 -8
  37. package/lib/RelayRecordProxy.js +12 -11
  38. package/lib/RelayRecordSourceMutator.js +9 -9
  39. package/lib/RelayRecordSourceProxy.js +15 -13
  40. package/lib/RelayRecordSourceSelectorProxy.js +2 -4
  41. package/lib/RelayRecordState.js +2 -4
  42. package/lib/RelayReferenceMarker.js +2 -4
  43. package/lib/RelayResponseNormalizer.js +34 -25
  44. package/lib/RelayRuntime.js +25 -14
  45. package/lib/RelayRuntimeTypes.js +22 -0
  46. package/lib/RelayShallowMock.js +4 -7
  47. package/lib/RelayStoreTypes.js +2 -4
  48. package/lib/RelayStoreUtils.js +66 -26
  49. package/lib/RelayTaskQueue.js +2 -5
  50. package/lib/RelayTypes.js +2 -5
  51. package/lib/RelayViewerHandler.js +4 -5
  52. package/lib/applyRelayModernOptimisticMutation.js +9 -8
  53. package/lib/cloneRelayHandleSourceField.js +4 -11
  54. package/lib/commitLocalUpdate.js +2 -4
  55. package/lib/commitRelayModernMutation.js +24 -22
  56. package/lib/createRelayNetworkLogger.js +25 -27
  57. package/lib/dedent.js +2 -5
  58. package/lib/deepFreeze.js +3 -5
  59. package/lib/deferrableFragmentKey.js +21 -0
  60. package/lib/fetchRelayModernQuery.js +13 -21
  61. package/lib/generateRelayClientID.js +2 -4
  62. package/lib/getRelayHandleKey.js +2 -4
  63. package/lib/hasOverlappingIDs.js +2 -4
  64. package/lib/isCompatibleRelayFragmentType.js +2 -5
  65. package/lib/isPromise.js +2 -5
  66. package/lib/isRelayModernEnvironment.js +2 -4
  67. package/lib/isScalarAndEqual.js +3 -5
  68. package/lib/normalizePayload.js +10 -13
  69. package/lib/normalizeRelayPayload.js +8 -5
  70. package/lib/recycleNodesInto.js +2 -4
  71. package/lib/relayUnstableBatchedUpdates.js +2 -5
  72. package/lib/relayUnstableBatchedUpdates.native.js +2 -5
  73. package/lib/requestRelaySubscription.js +20 -34
  74. package/lib/simpleClone.js +2 -4
  75. package/lib/stableCopy.js +35 -0
  76. package/lib/testEditDistance.js +2 -5
  77. package/lib/throwFailedPromise.js +2 -5
  78. package/package.json +4 -5
  79. package/relay-runtime.js +2307 -2665
  80. package/relay-runtime.min.js +6 -9
  81. package/ARCHITECTURE.md +0 -232
  82. package/PATENTS +0 -33
  83. package/lib/ConvertToObserveFunction.js +0 -39
  84. package/lib/RelayDebugger.js +0 -199
  85. package/lib/RelayRecordSourceInspector.js +0 -289
  86. package/lib/RelayStoreProxyDebugger.js +0 -44
  87. package/lib/formatStorageKey.js +0 -37
  88. package/lib/prettyStringify.js +0 -35
  89. package/lib/setRelayModernMutationConfigs.js +0 -302
  90. package/lib/stableJSONStringify.js +0 -45
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayQueryResponseCache
10
8
  *
@@ -73,7 +71,7 @@ var RelayQueryResponseCache = function () {
73
71
  }();
74
72
 
75
73
  function getCacheKey(queryID, variables) {
76
- return require('./stableJSONStringify')({ queryID: queryID, variables: variables });
74
+ return JSON.stringify(require('./stableCopy')({ queryID: queryID, variables: variables }));
77
75
  }
78
76
 
79
77
  /**
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayReader
10
8
  *
@@ -13,11 +11,16 @@
13
11
 
14
12
  'use strict';
15
13
 
14
+ var _defineProperty3 = _interopRequireDefault(require('babel-runtime/helpers/defineProperty'));
15
+
16
+ var _extends4 = _interopRequireDefault(require('babel-runtime/helpers/extends'));
17
+
16
18
  var _classCallCheck3 = _interopRequireDefault(require('babel-runtime/helpers/classCallCheck'));
17
19
 
18
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
21
 
20
22
  var CONDITION = require('./RelayConcreteNode').CONDITION,
23
+ DEFERRABLE_FRAGMENT_SPREAD = require('./RelayConcreteNode').DEFERRABLE_FRAGMENT_SPREAD,
21
24
  FRAGMENT_SPREAD = require('./RelayConcreteNode').FRAGMENT_SPREAD,
22
25
  INLINE_FRAGMENT = require('./RelayConcreteNode').INLINE_FRAGMENT,
23
26
  LINKED_FIELD = require('./RelayConcreteNode').LINKED_FIELD,
@@ -100,7 +103,9 @@ var RelayReader = function () {
100
103
  _this._traverseSelections(selection.selections, record, data);
101
104
  }
102
105
  } else if (selection.kind === FRAGMENT_SPREAD) {
103
- _this._createFragmentPointer(selection, record, data);
106
+ _this._createFragmentPointer(selection, record, data, _this._variables);
107
+ } else if (selection.kind === DEFERRABLE_FRAGMENT_SPREAD) {
108
+ _this._createDeferrableFragmentPointer(selection, record, data);
104
109
  } else {
105
110
  require('fbjs/lib/invariant')(false, 'RelayReader(): Unexpected ast kind `%s`.', selection.kind);
106
111
  }
@@ -157,15 +162,20 @@ var RelayReader = function () {
157
162
  data[applicationName] = linkedArray;
158
163
  };
159
164
 
160
- RelayReader.prototype._createFragmentPointer = function _createFragmentPointer(fragmentSpread, record, data) {
165
+ RelayReader.prototype._createFragmentPointer = function _createFragmentPointer(fragmentSpread, record, data, variables) {
161
166
  var fragmentPointers = data[FRAGMENTS_KEY];
162
167
  if (!fragmentPointers) {
163
168
  fragmentPointers = data[FRAGMENTS_KEY] = {};
164
169
  }
165
170
  require('fbjs/lib/invariant')(typeof fragmentPointers === 'object' && fragmentPointers, 'RelayReader: Expected fragment spread data to be an object, got `%s`.', fragmentPointers);
166
171
  data[ID_KEY] = data[ID_KEY] || require('./RelayModernRecord').getDataID(record);
167
- var variables = fragmentSpread.args ? getArgumentValues(fragmentSpread.args, this._variables) : {};
168
- fragmentPointers[fragmentSpread.name] = variables;
172
+ fragmentPointers[fragmentSpread.name] = fragmentSpread.args ? getArgumentValues(fragmentSpread.args, variables) : {};
173
+ };
174
+
175
+ RelayReader.prototype._createDeferrableFragmentPointer = function _createDeferrableFragmentPointer(deferrableFragment, record, data) {
176
+ var rootFieldValue = require('./RelayModernRecord').getValue(record, deferrableFragment.storageKey);
177
+ var variables = (0, _extends4['default'])({}, this._variables, (0, _defineProperty3['default'])({}, deferrableFragment.rootFieldVariable, rootFieldValue));
178
+ this._createFragmentPointer(deferrableFragment, record, data, variables);
169
179
  };
170
180
 
171
181
  return RelayReader;
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayRecordProxy
10
8
  *
@@ -17,6 +15,9 @@ var _classCallCheck3 = _interopRequireDefault(require('babel-runtime/helpers/cla
17
15
 
18
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
17
 
18
+ var _require = require('./RelayStoreUtils'),
19
+ getStableStorageKey = _require.getStableStorageKey;
20
+
20
21
  /**
21
22
  * @internal
22
23
  *
@@ -47,26 +48,26 @@ var RelayRecordProxy = function () {
47
48
  };
48
49
 
49
50
  RelayRecordProxy.prototype.getValue = function getValue(name, args) {
50
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
51
+ var storageKey = getStableStorageKey(name, args);
51
52
  return this._mutator.getValue(this._dataID, storageKey);
52
53
  };
53
54
 
54
55
  RelayRecordProxy.prototype.setValue = function setValue(value, name, args) {
55
56
  require('fbjs/lib/invariant')(isValidLeafValue(value), 'RelayRecordProxy#setValue(): Expected a scalar or array of scalars, ' + 'got `%s`.', JSON.stringify(value));
56
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
57
+ var storageKey = getStableStorageKey(name, args);
57
58
  this._mutator.setValue(this._dataID, storageKey, value);
58
59
  return this;
59
60
  };
60
61
 
61
62
  RelayRecordProxy.prototype.getLinkedRecord = function getLinkedRecord(name, args) {
62
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
63
+ var storageKey = getStableStorageKey(name, args);
63
64
  var linkedID = this._mutator.getLinkedRecordID(this._dataID, storageKey);
64
65
  return linkedID != null ? this._source.get(linkedID) : linkedID;
65
66
  };
66
67
 
67
68
  RelayRecordProxy.prototype.setLinkedRecord = function setLinkedRecord(record, name, args) {
68
69
  require('fbjs/lib/invariant')(record instanceof RelayRecordProxy, 'RelayRecordProxy#setLinkedRecord(): Expected a record, got `%s`.', record);
69
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
70
+ var storageKey = getStableStorageKey(name, args);
70
71
  var linkedID = record.getDataID();
71
72
  this._mutator.setLinkedRecordID(this._dataID, storageKey, linkedID);
72
73
  return this;
@@ -75,7 +76,7 @@ var RelayRecordProxy = function () {
75
76
  RelayRecordProxy.prototype.getOrCreateLinkedRecord = function getOrCreateLinkedRecord(name, typeName, args) {
76
77
  var linkedRecord = this.getLinkedRecord(name, args);
77
78
  if (!linkedRecord) {
78
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
79
+ var storageKey = getStableStorageKey(name, args);
79
80
  var clientID = require('./generateRelayClientID')(this.getDataID(), storageKey);
80
81
  linkedRecord = this._source.create(clientID, typeName);
81
82
  this.setLinkedRecord(linkedRecord, name, args);
@@ -86,7 +87,7 @@ var RelayRecordProxy = function () {
86
87
  RelayRecordProxy.prototype.getLinkedRecords = function getLinkedRecords(name, args) {
87
88
  var _this = this;
88
89
 
89
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
90
+ var storageKey = getStableStorageKey(name, args);
90
91
  var linkedIDs = this._mutator.getLinkedRecordIDs(this._dataID, storageKey);
91
92
  if (linkedIDs == null) {
92
93
  return linkedIDs;
@@ -98,7 +99,7 @@ var RelayRecordProxy = function () {
98
99
 
99
100
  RelayRecordProxy.prototype.setLinkedRecords = function setLinkedRecords(records, name, args) {
100
101
  require('fbjs/lib/invariant')(Array.isArray(records), 'RelayRecordProxy#setLinkedRecords(): Expected records to be an array, got `%s`.', records);
101
- var storageKey = args ? require('./formatStorageKey')(name, args) : name;
102
+ var storageKey = getStableStorageKey(name, args);
102
103
  var linkedIDs = records.map(function (record) {
103
104
  return record && record.getDataID();
104
105
  });
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayRecordSourceMutator
10
8
  *
@@ -74,12 +72,14 @@ var RelayRecordSourceMutator = function () {
74
72
  var backupRecord = backup.get(dataID);
75
73
  if (backupRecord && backupRecord !== UNPUBLISH_RECORD_SENTINEL) {
76
74
  var copy = null;
77
- require('fbjs/lib/forEachObject')(record, function (value, key) {
78
- if (!(key in backupRecord)) {
79
- copy = copy || (0, _extends3['default'])({}, backupRecord);
80
- copy[key] = UNPUBLISH_FIELD_SENTINEL;
75
+ for (var key in record) {
76
+ if (record.hasOwnProperty(key)) {
77
+ if (!(key in backupRecord)) {
78
+ copy = copy || (0, _extends3['default'])({}, backupRecord);
79
+ copy[key] = UNPUBLISH_FIELD_SENTINEL;
80
+ }
81
81
  }
82
- });
82
+ }
83
83
  backup.set(dataID, copy || backupRecord);
84
84
  }
85
85
  }
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayRecordSourceProxy
10
8
  *
@@ -39,17 +37,9 @@ var RelayRecordSourceProxy = function () {
39
37
  this._proxies = {};
40
38
  }
41
39
 
42
- RelayRecordSourceProxy.prototype.commitPayload = function commitPayload(operation, response) {
40
+ RelayRecordSourceProxy.prototype.publishSource = function publishSource(source, fieldPayloads) {
43
41
  var _this = this;
44
42
 
45
- if (!response) {
46
- return new (require('./RelayRecordSourceSelectorProxy'))(this, operation.fragment);
47
- }
48
-
49
- var _normalizeRelayPayloa = require('./normalizeRelayPayload')(operation.root, response),
50
- source = _normalizeRelayPayloa.source,
51
- fieldPayloads = _normalizeRelayPayloa.fieldPayloads;
52
-
53
43
  var dataIDs = source.getRecordIDs();
54
44
  dataIDs.forEach(function (dataID) {
55
45
  var status = source.getStatus(dataID);
@@ -74,6 +64,18 @@ var RelayRecordSourceProxy = function () {
74
64
  handler.update(_this, fieldPayload);
75
65
  });
76
66
  }
67
+ };
68
+
69
+ RelayRecordSourceProxy.prototype.commitPayload = function commitPayload(operation, response) {
70
+ if (!response) {
71
+ return new (require('./RelayRecordSourceSelectorProxy'))(this, operation.fragment);
72
+ }
73
+
74
+ var _normalizeRelayPayloa = require('./normalizeRelayPayload')(operation.root, response),
75
+ source = _normalizeRelayPayloa.source,
76
+ fieldPayloads = _normalizeRelayPayloa.fieldPayloads;
77
+
78
+ this.publishSource(source, fieldPayloads);
77
79
  return new (require('./RelayRecordSourceSelectorProxy'))(this, operation.fragment);
78
80
  };
79
81
 
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayRecordSourceSelectorProxy
10
8
  *
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayRecordState
10
8
  *
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayReferenceMarker
10
8
  *
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayResponseNormalizer
10
8
  *
@@ -13,13 +11,17 @@
13
11
 
14
12
  'use strict';
15
13
 
14
+ var _defineProperty3 = _interopRequireDefault(require('babel-runtime/helpers/defineProperty'));
15
+
16
+ var _extends4 = _interopRequireDefault(require('babel-runtime/helpers/extends'));
17
+
16
18
  var _classCallCheck3 = _interopRequireDefault(require('babel-runtime/helpers/classCallCheck'));
17
19
 
18
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
19
21
 
20
22
  var _require = require('./RelayStoreUtils'),
21
- getHandleFilterValues = _require.getHandleFilterValues,
22
23
  getArgumentValues = _require.getArgumentValues,
24
+ getHandleStorageKey = _require.getHandleStorageKey,
23
25
  getStorageKey = _require.getStorageKey,
24
26
  TYPENAME_KEY = _require.TYPENAME_KEY;
25
27
 
@@ -28,7 +30,8 @@ var CONDITION = require('./RelayConcreteNode').CONDITION,
28
30
  LINKED_FIELD = require('./RelayConcreteNode').LINKED_FIELD,
29
31
  LINKED_HANDLE = require('./RelayConcreteNode').LINKED_HANDLE,
30
32
  SCALAR_FIELD = require('./RelayConcreteNode').SCALAR_FIELD,
31
- SCALAR_HANDLE = require('./RelayConcreteNode').SCALAR_HANDLE;
33
+ SCALAR_HANDLE = require('./RelayConcreteNode').SCALAR_HANDLE,
34
+ DEFERRABLE_FRAGMENT_SPREAD = require('./RelayConcreteNode').DEFERRABLE_FRAGMENT_SPREAD;
32
35
 
33
36
  /**
34
37
  * Normalizes the results of a query and standard GraphQL response, writing the
@@ -56,8 +59,9 @@ function normalize(recordSource, selector, response) {
56
59
  var RelayResponseNormalizer = function () {
57
60
  function RelayResponseNormalizer(recordSource, variables, options) {
58
61
  (0, _classCallCheck3['default'])(this, RelayResponseNormalizer);
59
-
60
62
  this._handleFieldPayloads = [];
63
+ this._deferrableSelections = new Set();
64
+
61
65
  this._recordSource = recordSource;
62
66
  this._variables = variables;
63
67
  this._handleStrippedNulls = options.handleStrippedNulls;
@@ -66,8 +70,11 @@ var RelayResponseNormalizer = function () {
66
70
  RelayResponseNormalizer.prototype.normalizeResponse = function normalizeResponse(node, dataID, data) {
67
71
  var record = this._recordSource.get(dataID);
68
72
  require('fbjs/lib/invariant')(record, 'RelayResponseNormalizer(): Expected root record `%s` to exist.', dataID);
69
- this._traverseSelections(node.selections, record, data);
70
- return this._handleFieldPayloads;
73
+ this._traverseSelections(node, record, data);
74
+ return {
75
+ fieldPayloads: this._handleFieldPayloads,
76
+ deferrableSelections: this._deferrableSelections
77
+ };
71
78
  };
72
79
 
73
80
  RelayResponseNormalizer.prototype._getVariableValue = function _getVariableValue(name) {
@@ -81,31 +88,26 @@ var RelayResponseNormalizer = function () {
81
88
  return typeName;
82
89
  };
83
90
 
84
- RelayResponseNormalizer.prototype._traverseSelections = function _traverseSelections(selections, record, data) {
91
+ RelayResponseNormalizer.prototype._traverseSelections = function _traverseSelections(node, record, data) {
85
92
  var _this = this;
86
93
 
87
- selections.forEach(function (selection) {
94
+ node.selections.forEach(function (selection) {
88
95
  if (selection.kind === SCALAR_FIELD || selection.kind === LINKED_FIELD) {
89
- _this._normalizeField(selection, record, data);
96
+ _this._normalizeField(node, selection, record, data);
90
97
  } else if (selection.kind === CONDITION) {
91
98
  var conditionValue = _this._getVariableValue(selection.condition);
92
99
  if (conditionValue === selection.passingValue) {
93
- _this._traverseSelections(selection.selections, record, data);
100
+ _this._traverseSelections(selection, record, data);
94
101
  }
95
102
  } else if (selection.kind === INLINE_FRAGMENT) {
96
103
  var typeName = require('./RelayModernRecord').getType(record);
97
104
  if (typeName === selection.type) {
98
- _this._traverseSelections(selection.selections, record, data);
105
+ _this._traverseSelections(selection, record, data);
99
106
  }
100
107
  } else if (selection.kind === LINKED_HANDLE || selection.kind === SCALAR_HANDLE) {
101
108
  var args = selection.args ? getArgumentValues(selection.args, _this._variables) : {};
102
-
103
- var fieldKey = require('./formatStorageKey')(selection.name, args);
104
- var handleKey = require('./getRelayHandleKey')(selection.handle, selection.key, selection.name);
105
- if (selection.filters) {
106
- var filterValues = getHandleFilterValues(selection.args || [], selection.filters, _this._variables);
107
- handleKey = require('./formatStorageKey')(handleKey, filterValues);
108
- }
109
+ var fieldKey = getStorageKey(selection, _this._variables);
110
+ var handleKey = getHandleStorageKey(selection, _this._variables);
109
111
  _this._handleFieldPayloads.push({
110
112
  args: args,
111
113
  dataID: require('./RelayModernRecord').getDataID(record),
@@ -113,13 +115,20 @@ var RelayResponseNormalizer = function () {
113
115
  handle: selection.handle,
114
116
  handleKey: handleKey
115
117
  });
118
+ } else if (selection.kind === DEFERRABLE_FRAGMENT_SPREAD) {
119
+ var value = require('./RelayModernRecord').getValue(record, selection.storageKey);
120
+ require('fbjs/lib/invariant')(typeof value === 'string', 'expected ID at %s', selection.storageKey);
121
+ var variables = selection.args ? getArgumentValues(selection.args, (0, _extends4['default'])({}, _this._variables, (0, _defineProperty3['default'])({}, selection.rootFieldVariable, value))) : {};
122
+
123
+ var key = require('./deferrableFragmentKey')(value, selection.name, variables);
124
+ _this._deferrableSelections.add(key);
116
125
  } else {
117
126
  require('fbjs/lib/invariant')(false, 'RelayResponseNormalizer(): Unexpected ast kind `%s`.', selection.kind);
118
127
  }
119
128
  });
120
129
  };
121
130
 
122
- RelayResponseNormalizer.prototype._normalizeField = function _normalizeField(selection, record, data) {
131
+ RelayResponseNormalizer.prototype._normalizeField = function _normalizeField(parent, selection, record, data) {
123
132
  require('fbjs/lib/invariant')(typeof data === 'object' && data, 'writeField(): Expected data for field `%s` to be an object.', selection.name);
124
133
  var responseKey = selection.alias || selection.name;
125
134
  var storageKey = getStorageKey(selection, this._variables);
@@ -130,7 +139,7 @@ var RelayResponseNormalizer = function () {
130
139
  return;
131
140
  }
132
141
  if (process.env.NODE_ENV !== 'production') {
133
- require('fbjs/lib/warning')(Object.prototype.hasOwnProperty.call(data, responseKey), 'RelayResponseNormalizer(): Payload did not contain a value ' + 'for field `%s: %s`. Check that you are parsing with the same ' + 'query that was used to fetch the payload.', responseKey, storageKey);
142
+ require('fbjs/lib/warning')(parent.kind === LINKED_FIELD && parent.concreteType == null ? true : Object.prototype.hasOwnProperty.call(data, responseKey), 'RelayResponseNormalizer(): Payload did not contain a value ' + 'for field `%s: %s`. Check that you are parsing with the same ' + 'query that was used to fetch the payload.', responseKey, storageKey);
134
143
  }
135
144
  require('./RelayModernRecord').setValue(record, storageKey, null);
136
145
  return;
@@ -160,7 +169,7 @@ var RelayResponseNormalizer = function () {
160
169
  } else if (process.env.NODE_ENV !== 'production') {
161
170
  this._validateRecordType(nextRecord, field, fieldValue);
162
171
  }
163
- this._traverseSelections(field.selections, nextRecord, fieldValue);
172
+ this._traverseSelections(field, nextRecord, fieldValue);
164
173
  };
165
174
 
166
175
  RelayResponseNormalizer.prototype._normalizePluralLink = function _normalizePluralLink(field, record, storageKey, fieldValue) {
@@ -190,7 +199,7 @@ var RelayResponseNormalizer = function () {
190
199
  } else if (process.env.NODE_ENV !== 'production') {
191
200
  _this2._validateRecordType(nextRecord, field, item);
192
201
  }
193
- _this2._traverseSelections(field.selections, nextRecord, item);
202
+ _this2._traverseSelections(field, nextRecord, item);
194
203
  });
195
204
  require('./RelayModernRecord').setLinkedRecordIDs(record, storageKey, nextIDs);
196
205
  };
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayRuntime
10
8
  *
@@ -38,13 +36,25 @@ module.exports = {
38
36
  createOperationSelector: require('./RelayCore').createOperationSelector,
39
37
  getDataIDsFromObject: require('./RelayCore').getDataIDsFromObject,
40
38
  getFragment: require('./RelayModernGraphQLTag').getFragment,
41
- getOperation: require('./RelayModernGraphQLTag').getOperation,
39
+ getRequest: require('./RelayModernGraphQLTag').getRequest,
40
+ // TODO (T23201154) remove in a future Relay release.
41
+ getOperation: function getOperation() {
42
+ if (process.env.NODE_ENV !== 'production') {
43
+ require('fbjs/lib/warning')(false, 'getOperation() deprecated. Use getRequest().');
44
+ }
45
+ return require('./RelayModernGraphQLTag').getRequest.apply(null, arguments);
46
+ },
42
47
  getSelector: require('./RelayCore').getSelector,
43
48
  getSelectorList: require('./RelayCore').getSelectorList,
44
49
  getSelectorsFromObject: require('./RelayCore').getSelectorsFromObject,
50
+ getStorageKey: require('./RelayStoreUtils').getStorageKey,
45
51
  getVariablesFromObject: require('./RelayCore').getVariablesFromObject,
46
52
  graphql: require('./RelayModernGraphQLTag').graphql,
47
53
 
54
+ // Declarative mutation API
55
+ MutationTypes: require('./RelayDeclarativeMutationConfig').MutationTypes,
56
+ RangeOperations: require('./RelayDeclarativeMutationConfig').RangeOperations,
57
+
48
58
  // Extensions
49
59
  ConnectionHandler: require('./RelayConnectionHandler'),
50
60
  ViewerHandler: require('./RelayViewerHandler'),
@@ -58,14 +68,15 @@ module.exports = {
58
68
  requestSubscription: require('./requestRelaySubscription'),
59
69
 
60
70
  // Configuration interface for legacy or special uses
61
- ConnectionInterface: require('./RelayConnectionInterface')
62
- };
71
+ ConnectionInterface: require('./RelayConnectionInterface'),
63
72
 
64
- if (process.env.NODE_ENV !== 'production') {
65
- var RelayRecordSourceInspector = require('./RelayRecordSourceInspector');
73
+ // Utilities
74
+ RelayProfiler: require('./RelayProfiler'),
66
75
 
67
- // Debugging-related symbols exposed only in development
68
- Object.assign(module.exports, {
69
- RecordSourceInspector: RelayRecordSourceInspector
70
- });
71
- }
76
+ // TODO T22766889 remove cross-cell imports of internal modules
77
+ // INTERNAL-ONLY: these WILL be removed from this API in the next release
78
+ recycleNodesInto: require('./recycleNodesInto'),
79
+ simpleClone: require('./simpleClone'),
80
+ ROOT_ID: require('./RelayStoreUtils').ROOT_ID,
81
+ RelayConcreteNode: require('./RelayConcreteNode')
82
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright (c) 2013-present, Facebook, Inc.
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
+ * @providesModule RelayRuntimeTypes
8
+ *
9
+ * @format
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ /**
15
+ * Basic types used throughout Relay.
16
+ */
17
+
18
+ /**
19
+ * Represents any resource that must be explicitly disposed of. The most common
20
+ * use-case is as a return value for subscriptions, where calling `dispose()`
21
+ * would cancel the subscription.
22
+ */
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
- * @providesModule RelayShallowMock
10
7
  *
11
8
  * @format
12
9
  */
@@ -18,7 +15,7 @@
18
15
  * Adds `unwrap` to the container that returns the component to test.
19
16
  *
20
17
  * @example
21
- * jest.mock('Relay', () => require('RelayShallowMock'));
18
+ * jest.mock('Relay', () => require('./RelayShallowMock'));
22
19
  * const renderer = require('ReactTestRenderer');
23
20
  * const MyContainer = require('MyContainer');
24
21
  *
@@ -48,7 +45,7 @@ var _inherits3 = _interopRequireDefault(require('babel-runtime/helpers/inherits'
48
45
 
49
46
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
50
47
 
51
- var Relay = require.requireActual('./RelayClassic');
48
+ var Relay = require.requireActual('./RelayPublic');
52
49
 
53
50
  var RelayShallowMock = {
54
51
  createContainer: function createContainer(component, spec) {
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Copyright (c) 2013-present, Facebook, Inc.
3
- * All rights reserved.
4
3
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
8
6
  *
9
7
  * @providesModule RelayStoreTypes
10
8
  *