relay-runtime 1.7.0-rc.1 → 2.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.
- package/LICENSE +1 -1
- package/index.js +1 -1
- package/lib/ConvertToExecuteFunction.js +12 -75
- package/lib/DataChecker.js +400 -0
- package/lib/NormalizationNode.js +14 -0
- package/lib/ReaderNode.js +10 -0
- package/lib/RelayCombinedEnvironmentTypes.js +10 -0
- package/lib/RelayConcreteNode.js +12 -29
- package/lib/RelayConcreteVariables.js +17 -11
- package/lib/RelayConnectionHandler.js +98 -42
- package/lib/RelayConnectionInterface.js +5 -13
- package/lib/RelayCore.js +17 -14
- package/lib/RelayDeclarativeMutationConfig.js +69 -34
- package/lib/RelayDefaultHandleKey.js +1 -2
- package/lib/RelayDefaultHandlerProvider.js +6 -5
- package/lib/RelayError.js +6 -9
- package/lib/RelayInMemoryRecordSource.js +20 -22
- package/lib/RelayModernEnvironment.js +140 -229
- package/lib/RelayModernFragmentSpecResolver.js +110 -102
- package/lib/RelayModernGraphQLTag.js +53 -15
- package/lib/{RelayModernOperationSelector.js → RelayModernOperationDescriptor.js} +9 -8
- package/lib/RelayModernQueryExecutor.js +172 -0
- package/lib/RelayModernRecord.js +97 -38
- package/lib/RelayModernSelector.js +89 -33
- package/lib/RelayModernStore.js +301 -0
- package/lib/RelayNetwork.js +16 -28
- package/lib/RelayNetworkLogger.js +2 -3
- package/lib/RelayNetworkLoggerTransaction.js +32 -30
- package/lib/RelayNetworkTypes.js +1 -2
- package/lib/RelayObservable.js +127 -155
- package/lib/RelayProfiler.js +35 -22
- package/lib/RelayPublishQueue.js +144 -96
- package/lib/RelayQueryResponseCache.js +37 -21
- package/lib/RelayReader.js +194 -61
- package/lib/RelayRecordProxy.js +50 -31
- package/lib/RelayRecordSourceMutator.js +92 -51
- package/lib/RelayRecordSourceProxy.js +43 -35
- package/lib/RelayRecordSourceSelectorProxy.js +22 -21
- package/lib/RelayRecordState.js +1 -3
- package/lib/RelayReferenceMarker.js +110 -37
- package/lib/RelayResponseNormalizer.js +248 -82
- package/lib/RelayRuntimeTypes.js +1 -3
- package/lib/RelayStoreTypes.js +1 -2
- package/lib/RelayStoreUtils.js +37 -19
- package/lib/RelayViewerHandler.js +14 -10
- package/lib/applyRelayModernOptimisticMutation.js +8 -8
- package/lib/cloneRelayHandleSourceField.js +8 -9
- package/lib/commitLocalUpdate.js +1 -2
- package/lib/commitRelayModernMutation.js +21 -14
- package/lib/createRelayNetworkLogger.js +11 -9
- package/lib/deepFreeze.js +2 -3
- package/lib/fetchRelayModernQuery.js +10 -12
- package/lib/generateRelayClientID.js +4 -2
- package/lib/getRelayHandleKey.js +5 -6
- package/lib/hasOverlappingIDs.js +3 -2
- package/lib/index.js +59 -62
- package/lib/isPromise.js +1 -2
- package/lib/isRelayModernEnvironment.js +1 -3
- package/lib/isScalarAndEqual.js +1 -3
- package/lib/normalizePayload.js +17 -15
- package/lib/normalizeRelayPayload.js +9 -9
- package/lib/recycleNodesInto.js +25 -9
- package/lib/requestRelaySubscription.js +25 -58
- package/lib/simpleClone.js +2 -3
- package/lib/stableCopy.js +5 -3
- package/lib/validateMutation.js +146 -0
- package/package.json +3 -3
- package/relay-runtime.js +4 -0
- package/relay-runtime.min.js +9 -0
- package/lib/RelayDataLoader.js +0 -302
- package/lib/RelayMarkSweepStore.js +0 -242
- package/lib/deferrableFragmentKey.js +0 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
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.
|
|
@@ -7,81 +7,92 @@
|
|
|
7
7
|
* strict-local
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
10
|
'use strict';
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
16
|
-
|
|
17
|
-
function mark(recordSource, selector, references) {
|
|
12
|
+
function mark(recordSource, selector, references, operationLoader) {
|
|
18
13
|
var dataID = selector.dataID,
|
|
19
14
|
node = selector.node,
|
|
20
15
|
variables = selector.variables;
|
|
21
|
-
|
|
22
|
-
var marker = new RelayReferenceMarker(recordSource, variables, references);
|
|
16
|
+
var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader);
|
|
23
17
|
marker.mark(node, dataID);
|
|
24
18
|
}
|
|
25
|
-
|
|
26
19
|
/**
|
|
27
20
|
* @private
|
|
28
21
|
*/
|
|
29
22
|
|
|
30
|
-
var RelayReferenceMarker = function () {
|
|
31
|
-
function RelayReferenceMarker(recordSource, variables, references) {
|
|
32
|
-
(0, _classCallCheck3['default'])(this, RelayReferenceMarker);
|
|
33
23
|
|
|
24
|
+
var RelayReferenceMarker =
|
|
25
|
+
/*#__PURE__*/
|
|
26
|
+
function () {
|
|
27
|
+
function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
|
|
28
|
+
var _operationLoader;
|
|
29
|
+
|
|
30
|
+
this._operationLoader = (_operationLoader = operationLoader) !== null && _operationLoader !== void 0 ? _operationLoader : null;
|
|
34
31
|
this._references = references;
|
|
35
32
|
this._recordSource = recordSource;
|
|
36
33
|
this._variables = variables;
|
|
37
34
|
}
|
|
38
35
|
|
|
39
|
-
RelayReferenceMarker.prototype
|
|
36
|
+
var _proto = RelayReferenceMarker.prototype;
|
|
37
|
+
|
|
38
|
+
_proto.mark = function mark(node, dataID) {
|
|
40
39
|
this._traverse(node, dataID);
|
|
41
40
|
};
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
_proto._traverse = function _traverse(node, dataID) {
|
|
44
43
|
this._references.add(dataID);
|
|
44
|
+
|
|
45
45
|
var record = this._recordSource.get(dataID);
|
|
46
|
+
|
|
46
47
|
if (record == null) {
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
50
|
+
|
|
49
51
|
this._traverseSelections(node.selections, record);
|
|
50
52
|
};
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !==
|
|
54
|
+
_proto._getVariableValue = function _getVariableValue(name) {
|
|
55
|
+
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayReferenceMarker(): Undefined variable `%s`.', name) : require("fbjs/lib/invariant")(false) : void 0;
|
|
54
56
|
return this._variables[name];
|
|
55
57
|
};
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
_proto._traverseSelections = function _traverseSelections(selections, record) {
|
|
58
60
|
var _this = this;
|
|
59
61
|
|
|
60
62
|
selections.forEach(function (selection) {
|
|
61
63
|
/* eslint-disable no-fallthrough */
|
|
62
64
|
switch (selection.kind) {
|
|
63
|
-
case require(
|
|
65
|
+
case require("./RelayConcreteNode").LINKED_FIELD:
|
|
64
66
|
if (selection.plural) {
|
|
65
67
|
_this._traversePluralLink(selection, record);
|
|
66
68
|
} else {
|
|
67
69
|
_this._traverseLink(selection, record);
|
|
68
70
|
}
|
|
71
|
+
|
|
69
72
|
break;
|
|
70
|
-
|
|
73
|
+
|
|
74
|
+
case require("./RelayConcreteNode").CONDITION:
|
|
71
75
|
var conditionValue = _this._getVariableValue(selection.condition);
|
|
76
|
+
|
|
72
77
|
if (conditionValue === selection.passingValue) {
|
|
73
78
|
_this._traverseSelections(selection.selections, record);
|
|
74
79
|
}
|
|
80
|
+
|
|
75
81
|
break;
|
|
76
|
-
|
|
77
|
-
|
|
82
|
+
|
|
83
|
+
case require("./RelayConcreteNode").INLINE_FRAGMENT:
|
|
84
|
+
var typeName = require("./RelayModernRecord").getType(record);
|
|
85
|
+
|
|
78
86
|
if (typeName != null && typeName === selection.type) {
|
|
79
87
|
_this._traverseSelections(selection.selections, record);
|
|
80
88
|
}
|
|
89
|
+
|
|
81
90
|
break;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
91
|
+
|
|
92
|
+
case require("./RelayConcreteNode").FRAGMENT_SPREAD:
|
|
93
|
+
!false ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayReferenceMarker(): Unexpected fragment spread `...%s`, ' + 'expected all fragments to be inlined.', selection.name) : require("fbjs/lib/invariant")(false) : void 0;
|
|
94
|
+
|
|
95
|
+
case require("./RelayConcreteNode").LINKED_HANDLE:
|
|
85
96
|
// The selections for a "handle" field are the same as those of the
|
|
86
97
|
// original linked field where the handle was applied. Reference marking
|
|
87
98
|
// therefore requires traversing the original field selections against
|
|
@@ -91,43 +102,103 @@ var RelayReferenceMarker = function () {
|
|
|
91
102
|
// the concrete structure to allow shared subtrees, and have the linked
|
|
92
103
|
// handle directly refer to the same selections as the LinkedField that
|
|
93
104
|
// it was split from.
|
|
94
|
-
var handleField = require(
|
|
105
|
+
var handleField = require("./cloneRelayHandleSourceField")(selection, selections, _this._variables);
|
|
106
|
+
|
|
95
107
|
if (handleField.plural) {
|
|
96
108
|
_this._traversePluralLink(handleField, record);
|
|
97
109
|
} else {
|
|
98
110
|
_this._traverseLink(handleField, record);
|
|
99
111
|
}
|
|
112
|
+
|
|
100
113
|
break;
|
|
101
|
-
|
|
102
|
-
case require(
|
|
103
|
-
case require(
|
|
114
|
+
|
|
115
|
+
case require("./RelayConcreteNode").DEFER:
|
|
116
|
+
case require("./RelayConcreteNode").STREAM:
|
|
117
|
+
_this._traverseSelections(selection.selections, record);
|
|
118
|
+
|
|
119
|
+
break;
|
|
120
|
+
|
|
121
|
+
case require("./RelayConcreteNode").SCALAR_FIELD:
|
|
122
|
+
case require("./RelayConcreteNode").SCALAR_HANDLE:
|
|
123
|
+
break;
|
|
124
|
+
|
|
125
|
+
case require("./RelayConcreteNode").MATCH_FIELD:
|
|
126
|
+
_this._traverseMatch(selection, record);
|
|
127
|
+
|
|
104
128
|
break;
|
|
129
|
+
|
|
105
130
|
default:
|
|
106
131
|
selection;
|
|
107
|
-
!false ? process.env.NODE_ENV !==
|
|
132
|
+
!false ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : require("fbjs/lib/invariant")(false) : void 0;
|
|
108
133
|
}
|
|
109
134
|
});
|
|
110
135
|
};
|
|
111
136
|
|
|
112
|
-
|
|
113
|
-
var storageKey = require(
|
|
114
|
-
|
|
137
|
+
_proto._traverseMatch = function _traverseMatch(field, record) {
|
|
138
|
+
var storageKey = require("./RelayStoreUtils").getStorageKey(field, this._variables);
|
|
139
|
+
|
|
140
|
+
var linkedID = require("./RelayModernRecord").getLinkedRecordID(record, storageKey);
|
|
115
141
|
|
|
116
142
|
if (linkedID == null) {
|
|
117
143
|
return;
|
|
118
144
|
}
|
|
145
|
+
|
|
146
|
+
this._references.add(linkedID);
|
|
147
|
+
|
|
148
|
+
var linkedRecord = this._recordSource.get(linkedID);
|
|
149
|
+
|
|
150
|
+
if (linkedRecord == null) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
var typeName = require("./RelayModernRecord").getType(linkedRecord);
|
|
155
|
+
|
|
156
|
+
var match = field.matchesByType[typeName];
|
|
157
|
+
|
|
158
|
+
if (match != null) {
|
|
159
|
+
var operationLoader = this._operationLoader;
|
|
160
|
+
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@match`.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
161
|
+
|
|
162
|
+
var operationReference = require("./RelayModernRecord").getValue(linkedRecord, require("./RelayStoreUtils").MATCH_FRAGMENT_KEY);
|
|
163
|
+
|
|
164
|
+
if (operationReference == null) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
var operation = operationLoader.get(operationReference);
|
|
169
|
+
|
|
170
|
+
if (operation != null) {
|
|
171
|
+
this._traverseSelections(operation.selections, linkedRecord);
|
|
172
|
+
} // If the operation is not available, we assume that the data cannot have been
|
|
173
|
+
// processed yet and therefore isn't in the store to begin with.
|
|
174
|
+
|
|
175
|
+
} else {// TODO: warn: store is corrupt: the field should be null if the typename did not match
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
_proto._traverseLink = function _traverseLink(field, record) {
|
|
180
|
+
var storageKey = require("./RelayStoreUtils").getStorageKey(field, this._variables);
|
|
181
|
+
|
|
182
|
+
var linkedID = require("./RelayModernRecord").getLinkedRecordID(record, storageKey);
|
|
183
|
+
|
|
184
|
+
if (linkedID == null) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
|
|
119
188
|
this._traverse(field, linkedID);
|
|
120
189
|
};
|
|
121
190
|
|
|
122
|
-
|
|
191
|
+
_proto._traversePluralLink = function _traversePluralLink(field, record) {
|
|
123
192
|
var _this2 = this;
|
|
124
193
|
|
|
125
|
-
var storageKey = require(
|
|
126
|
-
|
|
194
|
+
var storageKey = require("./RelayStoreUtils").getStorageKey(field, this._variables);
|
|
195
|
+
|
|
196
|
+
var linkedIDs = require("./RelayModernRecord").getLinkedRecordIDs(record, storageKey);
|
|
127
197
|
|
|
128
198
|
if (linkedIDs == null) {
|
|
129
199
|
return;
|
|
130
200
|
}
|
|
201
|
+
|
|
131
202
|
linkedIDs.forEach(function (linkedID) {
|
|
132
203
|
if (linkedID != null) {
|
|
133
204
|
_this2._traverse(field, linkedID);
|
|
@@ -138,4 +209,6 @@ var RelayReferenceMarker = function () {
|
|
|
138
209
|
return RelayReferenceMarker;
|
|
139
210
|
}();
|
|
140
211
|
|
|
141
|
-
module.exports = {
|
|
212
|
+
module.exports = {
|
|
213
|
+
mark: mark
|
|
214
|
+
};
|