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.
- package/LICENSE +16 -26
- package/index.js +3 -6
- package/lib/ConvertToExecuteFunction.js +73 -0
- package/lib/RelayConcreteNode.js +31 -14
- package/lib/RelayConcreteVariables.js +11 -6
- package/lib/RelayConnectionHandler.js +2 -4
- package/lib/RelayConnectionInterface.js +3 -5
- package/lib/RelayCore.js +4 -6
- package/lib/RelayDataLoader.js +2 -4
- package/lib/RelayDeclarativeMutationConfig.js +316 -0
- package/lib/RelayDefaultHandleKey.js +2 -4
- package/lib/RelayDefaultHandlerProvider.js +2 -4
- package/lib/RelayError.js +2 -6
- package/lib/RelayInMemoryRecordSource.js +2 -4
- package/lib/RelayInternalTypes.js +2 -5
- package/lib/RelayInternals.js +2 -5
- package/lib/RelayMarkSweepStore.js +22 -5
- package/lib/RelayMetricsRecorder.js +9 -9
- package/lib/RelayMockRenderer.js +3 -8
- package/lib/RelayModernEnvironment.js +120 -135
- package/lib/RelayModernFragmentSpecResolver.js +81 -55
- package/lib/RelayModernGraphQLTag.js +8 -17
- package/lib/RelayModernOperationSelector.js +8 -8
- package/lib/RelayModernRecord.js +8 -8
- package/lib/RelayModernSelector.js +54 -43
- package/lib/RelayNetwork.js +9 -11
- package/lib/RelayNetworkDebug.js +4 -7
- package/lib/RelayNetworkLogger.js +2 -4
- package/lib/RelayNetworkLoggerTransaction.js +18 -20
- package/lib/RelayNetworkTypes.js +2 -4
- package/lib/RelayObservable.js +193 -120
- package/lib/RelayProfiler.js +7 -7
- package/lib/RelayPublishQueue.js +17 -9
- package/lib/RelayQueryCaching.js +2 -5
- package/lib/RelayQueryResponseCache.js +3 -5
- package/lib/RelayReader.js +18 -8
- package/lib/RelayRecordProxy.js +12 -11
- package/lib/RelayRecordSourceMutator.js +9 -9
- package/lib/RelayRecordSourceProxy.js +15 -13
- package/lib/RelayRecordSourceSelectorProxy.js +2 -4
- package/lib/RelayRecordState.js +2 -4
- package/lib/RelayReferenceMarker.js +2 -4
- package/lib/RelayResponseNormalizer.js +34 -25
- package/lib/RelayRuntime.js +25 -14
- package/lib/RelayRuntimeTypes.js +22 -0
- package/lib/RelayShallowMock.js +4 -7
- package/lib/RelayStoreTypes.js +2 -4
- package/lib/RelayStoreUtils.js +66 -26
- package/lib/RelayTaskQueue.js +2 -5
- package/lib/RelayTypes.js +2 -5
- package/lib/RelayViewerHandler.js +4 -5
- package/lib/applyRelayModernOptimisticMutation.js +9 -8
- package/lib/cloneRelayHandleSourceField.js +4 -11
- package/lib/commitLocalUpdate.js +2 -4
- package/lib/commitRelayModernMutation.js +24 -22
- package/lib/createRelayNetworkLogger.js +25 -27
- package/lib/dedent.js +2 -5
- package/lib/deepFreeze.js +3 -5
- package/lib/deferrableFragmentKey.js +21 -0
- package/lib/fetchRelayModernQuery.js +13 -21
- package/lib/generateRelayClientID.js +2 -4
- package/lib/getRelayHandleKey.js +2 -4
- package/lib/hasOverlappingIDs.js +2 -4
- package/lib/isCompatibleRelayFragmentType.js +2 -5
- package/lib/isPromise.js +2 -5
- package/lib/isRelayModernEnvironment.js +2 -4
- package/lib/isScalarAndEqual.js +3 -5
- package/lib/normalizePayload.js +10 -13
- package/lib/normalizeRelayPayload.js +8 -5
- package/lib/recycleNodesInto.js +2 -4
- package/lib/relayUnstableBatchedUpdates.js +2 -5
- package/lib/relayUnstableBatchedUpdates.native.js +2 -5
- package/lib/requestRelaySubscription.js +20 -34
- package/lib/simpleClone.js +2 -4
- package/lib/stableCopy.js +35 -0
- package/lib/testEditDistance.js +2 -5
- package/lib/throwFailedPromise.js +2 -5
- package/package.json +4 -5
- package/relay-runtime.js +2307 -2665
- package/relay-runtime.min.js +6 -9
- package/ARCHITECTURE.md +0 -232
- package/PATENTS +0 -33
- package/lib/ConvertToObserveFunction.js +0 -39
- package/lib/RelayDebugger.js +0 -199
- package/lib/RelayRecordSourceInspector.js +0 -289
- package/lib/RelayStoreProxyDebugger.js +0 -44
- package/lib/formatStorageKey.js +0 -37
- package/lib/prettyStringify.js +0 -35
- package/lib/setRelayModernMutationConfigs.js +0 -302
- 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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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('./
|
|
74
|
+
return JSON.stringify(require('./stableCopy')({ queryID: queryID, variables: variables }));
|
|
77
75
|
}
|
|
78
76
|
|
|
79
77
|
/**
|
package/lib/RelayReader.js
CHANGED
|
@@ -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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
-
|
|
168
|
-
|
|
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;
|
package/lib/RelayRecordProxy.js
CHANGED
|
@@ -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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
-
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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.
|
|
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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
*
|
package/lib/RelayRecordState.js
CHANGED
|
@@ -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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
|
70
|
-
return
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
202
|
+
_this2._traverseSelections(field, nextRecord, item);
|
|
194
203
|
});
|
|
195
204
|
require('./RelayModernRecord').setLinkedRecordIDs(record, storageKey, nextIDs);
|
|
196
205
|
};
|
package/lib/RelayRuntime.js
CHANGED
|
@@ -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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
73
|
+
// Utilities
|
|
74
|
+
RelayProfiler: require('./RelayProfiler'),
|
|
66
75
|
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
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
|
+
*/
|
package/lib/RelayShallowMock.js
CHANGED
|
@@ -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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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('./
|
|
48
|
+
var Relay = require.requireActual('./RelayPublic');
|
|
52
49
|
|
|
53
50
|
var RelayShallowMock = {
|
|
54
51
|
createContainer: function createContainer(component, spec) {
|
package/lib/RelayStoreTypes.js
CHANGED
|
@@ -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
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
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
|
*
|