relay-runtime 11.0.1 → 13.0.0-rc.1
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/handlers/RelayDefaultHandlerProvider.js.flow +2 -2
- package/handlers/connection/ConnectionHandler.js.flow +8 -17
- package/handlers/connection/MutationHandlers.js.flow +7 -11
- package/index.js +1 -1
- package/index.js.flow +60 -36
- package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
- package/lib/handlers/connection/ConnectionHandler.js +13 -19
- package/lib/handlers/connection/MutationHandlers.js +4 -7
- package/lib/index.js +58 -43
- package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +152 -0
- package/lib/multi-actor-environment/ActorUtils.js +27 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +419 -0
- package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
- package/lib/multi-actor-environment/index.js +21 -0
- package/lib/mutations/RelayDeclarativeMutationConfig.js +4 -1
- package/lib/mutations/RelayRecordProxy.js +3 -2
- package/lib/mutations/RelayRecordSourceMutator.js +3 -2
- package/lib/mutations/RelayRecordSourceProxy.js +12 -4
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -5
- package/lib/mutations/applyOptimisticMutation.js +6 -6
- package/lib/mutations/commitMutation.js +14 -10
- package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +238 -0
- package/lib/mutations/validateMutation.js +10 -5
- package/lib/network/ConvertToExecuteFunction.js +2 -1
- package/lib/network/RelayNetwork.js +3 -2
- package/lib/network/RelayQueryResponseCache.js +21 -5
- package/lib/network/wrapNetworkWithLogObserver.js +79 -0
- package/lib/query/GraphQLTag.js +3 -2
- package/lib/query/fetchQuery.js +6 -5
- package/lib/query/fetchQueryInternal.js +1 -1
- package/lib/query/fetchQuery_DEPRECATED.js +2 -1
- package/lib/store/ClientID.js +7 -1
- package/lib/store/DataChecker.js +123 -54
- package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +518 -200
- package/lib/store/RelayConcreteVariables.js +26 -8
- package/lib/store/RelayExperimentalGraphResponseHandler.js +153 -0
- package/lib/store/RelayExperimentalGraphResponseTransform.js +391 -0
- package/lib/store/RelayModernEnvironment.js +175 -240
- package/lib/store/RelayModernFragmentSpecResolver.js +52 -26
- package/lib/store/RelayModernOperationDescriptor.js +2 -1
- package/lib/store/RelayModernRecord.js +47 -12
- package/lib/store/RelayModernSelector.js +14 -8
- package/lib/store/RelayModernStore.js +56 -28
- package/lib/store/RelayOperationTracker.js +34 -24
- package/lib/store/RelayPublishQueue.js +41 -13
- package/lib/store/RelayReader.js +288 -48
- package/lib/store/RelayRecordSource.js +87 -3
- package/lib/store/RelayReferenceMarker.js +34 -22
- package/lib/store/RelayResponseNormalizer.js +211 -110
- package/lib/store/RelayStoreReactFlightUtils.js +4 -10
- package/lib/store/RelayStoreSubscriptions.js +14 -9
- package/lib/store/RelayStoreUtils.js +12 -7
- package/lib/store/ResolverCache.js +213 -0
- package/lib/store/ResolverFragments.js +61 -0
- package/lib/store/cloneRelayHandleSourceField.js +5 -4
- package/lib/store/cloneRelayScalarHandleSourceField.js +5 -4
- package/lib/store/createRelayContext.js +4 -2
- package/lib/store/readInlineData.js +6 -2
- package/lib/subscription/requestSubscription.js +34 -25
- package/lib/util/RelayConcreteNode.js +3 -0
- package/lib/util/RelayFeatureFlags.js +10 -4
- package/lib/util/RelayProfiler.js +17 -187
- package/lib/util/RelayReplaySubject.js +22 -7
- package/lib/util/RelayRuntimeTypes.js +0 -6
- package/lib/util/StringInterner.js +71 -0
- package/lib/util/getFragmentIdentifier.js +15 -7
- package/lib/util/getOperation.js +2 -1
- package/lib/util/getPaginationMetadata.js +41 -0
- package/lib/util/getPaginationVariables.js +66 -0
- package/lib/util/getPendingOperationsForFragment.js +55 -0
- package/lib/util/getRefetchMetadata.js +36 -0
- package/lib/util/getRelayHandleKey.js +2 -2
- package/lib/util/getRequestIdentifier.js +2 -2
- package/lib/util/getValueAtPath.js +51 -0
- package/lib/util/isEmptyObject.js +1 -1
- package/lib/util/registerEnvironmentWithDevTools.js +26 -0
- package/lib/util/withDuration.js +31 -0
- package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +225 -0
- package/multi-actor-environment/ActorUtils.js.flow +33 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +506 -0
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +261 -0
- package/multi-actor-environment/index.js.flow +26 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +32 -26
- package/mutations/RelayRecordProxy.js.flow +4 -5
- package/mutations/RelayRecordSourceMutator.js.flow +4 -6
- package/mutations/RelayRecordSourceProxy.js.flow +19 -10
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +22 -7
- package/mutations/applyOptimisticMutation.js.flow +13 -14
- package/mutations/commitLocalUpdate.js.flow +1 -1
- package/mutations/commitMutation.js.flow +35 -46
- package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +309 -0
- package/mutations/validateMutation.js.flow +26 -16
- package/network/ConvertToExecuteFunction.js.flow +2 -2
- package/network/RelayNetwork.js.flow +4 -5
- package/network/RelayNetworkTypes.js.flow +5 -4
- package/network/RelayObservable.js.flow +1 -1
- package/network/RelayQueryResponseCache.js.flow +34 -21
- package/network/wrapNetworkWithLogObserver.js.flow +100 -0
- package/package.json +3 -2
- package/query/GraphQLTag.js.flow +9 -9
- package/query/PreloadableQueryRegistry.js.flow +2 -1
- package/query/fetchQuery.js.flow +11 -13
- package/query/fetchQueryInternal.js.flow +6 -9
- package/query/fetchQuery_DEPRECATED.js.flow +6 -6
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +14 -3
- package/store/DataChecker.js.flow +141 -59
- package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +605 -303
- package/store/RelayConcreteVariables.js.flow +27 -8
- package/store/RelayExperimentalGraphResponseHandler.js.flow +124 -0
- package/store/RelayExperimentalGraphResponseTransform.js.flow +475 -0
- package/store/RelayModernEnvironment.js.flow +173 -240
- package/store/RelayModernFragmentSpecResolver.js.flow +55 -31
- package/store/RelayModernOperationDescriptor.js.flow +12 -7
- package/store/RelayModernRecord.js.flow +67 -11
- package/store/RelayModernSelector.js.flow +24 -14
- package/store/RelayModernStore.js.flow +66 -36
- package/store/RelayOperationTracker.js.flow +59 -43
- package/store/RelayOptimisticRecordSource.js.flow +2 -2
- package/store/RelayPublishQueue.js.flow +79 -34
- package/store/RelayReader.js.flow +351 -73
- package/store/RelayRecordSource.js.flow +72 -6
- package/store/RelayReferenceMarker.js.flow +40 -26
- package/store/RelayResponseNormalizer.js.flow +258 -99
- package/store/RelayStoreReactFlightUtils.js.flow +4 -11
- package/store/RelayStoreSubscriptions.js.flow +19 -11
- package/store/RelayStoreTypes.js.flow +209 -43
- package/store/RelayStoreUtils.js.flow +24 -11
- package/store/ResolverCache.js.flow +249 -0
- package/store/ResolverFragments.js.flow +121 -0
- package/store/StoreInspector.js.flow +2 -2
- package/store/TypeID.js.flow +1 -1
- package/store/ViewerPattern.js.flow +2 -2
- package/store/cloneRelayHandleSourceField.js.flow +5 -6
- package/store/cloneRelayScalarHandleSourceField.js.flow +5 -6
- package/store/createFragmentSpecResolver.js.flow +3 -4
- package/store/createRelayContext.js.flow +3 -3
- package/store/normalizeRelayPayload.js.flow +6 -7
- package/store/readInlineData.js.flow +7 -8
- package/subscription/requestSubscription.js.flow +53 -41
- package/util/NormalizationNode.js.flow +10 -3
- package/util/ReaderNode.js.flow +38 -2
- package/util/RelayConcreteNode.js.flow +5 -0
- package/util/RelayFeatureFlags.js.flow +24 -10
- package/util/RelayProfiler.js.flow +22 -194
- package/util/RelayReplaySubject.js.flow +9 -9
- package/util/RelayRuntimeTypes.js.flow +72 -3
- package/util/StringInterner.js.flow +69 -0
- package/util/createPayloadFor3DField.js.flow +3 -3
- package/util/getFragmentIdentifier.js.flow +27 -15
- package/util/getOperation.js.flow +2 -2
- package/util/getPaginationMetadata.js.flow +72 -0
- package/util/getPaginationVariables.js.flow +108 -0
- package/util/getPendingOperationsForFragment.js.flow +62 -0
- package/util/getRefetchMetadata.js.flow +79 -0
- package/util/getRelayHandleKey.js.flow +1 -2
- package/util/getRequestIdentifier.js.flow +3 -3
- package/util/getValueAtPath.js.flow +46 -0
- package/util/isEmptyObject.js.flow +1 -0
- package/util/registerEnvironmentWithDevTools.js.flow +33 -0
- package/util/resolveImmediate.js.flow +1 -1
- package/util/withDuration.js.flow +32 -0
- package/lib/store/RelayRecordSourceMapImpl.js +0 -107
- package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
- package/store/RelayRecordSourceMapImpl.js.flow +0 -91
- package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
|
@@ -16,28 +16,29 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
|
|
|
16
16
|
|
|
17
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var getPendingOperationsForFragment = require('../util/getPendingOperationsForFragment');
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var isScalarAndEqual = require('../util/isScalarAndEqual');
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var recycleNodesInto = require('../util/recycleNodesInto');
|
|
24
24
|
|
|
25
|
-
var
|
|
25
|
+
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
26
26
|
|
|
27
27
|
var reportMissingRequiredFields = require('../util/reportMissingRequiredFields');
|
|
28
28
|
|
|
29
|
-
var
|
|
29
|
+
var _require = require('./RelayModernOperationDescriptor'),
|
|
30
|
+
createRequestDescriptor = _require.createRequestDescriptor;
|
|
30
31
|
|
|
31
|
-
var
|
|
32
|
-
|
|
32
|
+
var _require2 = require('./RelayModernSelector'),
|
|
33
|
+
areEqualSelectors = _require2.areEqualSelectors,
|
|
34
|
+
createReaderSelector = _require2.createReaderSelector,
|
|
35
|
+
getSelectorsFromObject = _require2.getSelectorsFromObject;
|
|
33
36
|
|
|
34
|
-
var
|
|
35
|
-
createRequestDescriptor = _require2.createRequestDescriptor;
|
|
37
|
+
var areEqual = require("fbjs/lib/areEqual");
|
|
36
38
|
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
getSelectorsFromObject = _require3.getSelectorsFromObject;
|
|
39
|
+
var invariant = require('invariant');
|
|
40
|
+
|
|
41
|
+
var warning = require("fbjs/lib/warning");
|
|
41
42
|
|
|
42
43
|
/**
|
|
43
44
|
* A utility for resolving and subscribing to the results of a fragment spec
|
|
@@ -129,13 +130,17 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
|
|
|
129
130
|
return this._data;
|
|
130
131
|
};
|
|
131
132
|
|
|
132
|
-
_proto.setCallback = function setCallback(callback) {
|
|
133
|
+
_proto.setCallback = function setCallback(props, callback) {
|
|
133
134
|
this._callback = callback;
|
|
135
|
+
|
|
136
|
+
if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
|
|
137
|
+
this.setProps(props);
|
|
138
|
+
}
|
|
134
139
|
};
|
|
135
140
|
|
|
136
141
|
_proto.setProps = function setProps(props) {
|
|
137
|
-
var ownedSelectors = getSelectorsFromObject(this._fragments, props);
|
|
138
142
|
this._props = {};
|
|
143
|
+
var ownedSelectors = getSelectorsFromObject(this._fragments, props);
|
|
139
144
|
|
|
140
145
|
for (var _key3 in ownedSelectors) {
|
|
141
146
|
if (ownedSelectors.hasOwnProperty(_key3)) {
|
|
@@ -150,14 +155,14 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
|
|
|
150
155
|
resolver = null;
|
|
151
156
|
} else if (ownedSelector.kind === 'PluralReaderSelector') {
|
|
152
157
|
if (resolver == null) {
|
|
153
|
-
resolver = new SelectorListResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._onChange);
|
|
158
|
+
resolver = new SelectorListResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._callback != null, this._onChange);
|
|
154
159
|
} else {
|
|
155
160
|
!(resolver instanceof SelectorListResolver) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernFragmentSpecResolver: Expected prop `%s` to always be an array.', _key3) : invariant(false) : void 0;
|
|
156
161
|
resolver.setSelector(ownedSelector);
|
|
157
162
|
}
|
|
158
163
|
} else {
|
|
159
164
|
if (resolver == null) {
|
|
160
|
-
resolver = new SelectorResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._onChange);
|
|
165
|
+
resolver = new SelectorResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._callback != null, this._onChange);
|
|
161
166
|
} else {
|
|
162
167
|
!(resolver instanceof SelectorResolver) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernFragmentSpecResolver: Expected prop `%s` to always be an object.', _key3) : invariant(false) : void 0;
|
|
163
168
|
resolver.setSelector(ownedSelector);
|
|
@@ -194,7 +199,7 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
|
|
|
194
199
|
|
|
195
200
|
|
|
196
201
|
var SelectorResolver = /*#__PURE__*/function () {
|
|
197
|
-
function SelectorResolver(environment, rootIsQueryRenderer, selector, callback) {
|
|
202
|
+
function SelectorResolver(environment, rootIsQueryRenderer, selector, subscribeOnConstruction, callback) {
|
|
198
203
|
var _this2 = this;
|
|
199
204
|
|
|
200
205
|
(0, _defineProperty2["default"])(this, "_onChange", function (snapshot) {
|
|
@@ -214,7 +219,14 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
214
219
|
this._environment = environment;
|
|
215
220
|
this._rootIsQueryRenderer = rootIsQueryRenderer;
|
|
216
221
|
this._selector = selector;
|
|
217
|
-
|
|
222
|
+
|
|
223
|
+
if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
|
|
224
|
+
if (subscribeOnConstruction) {
|
|
225
|
+
this._subscription = environment.subscribe(_snapshot, this._onChange);
|
|
226
|
+
}
|
|
227
|
+
} else {
|
|
228
|
+
this._subscription = environment.subscribe(_snapshot, this._onChange);
|
|
229
|
+
}
|
|
218
230
|
}
|
|
219
231
|
|
|
220
232
|
var _proto2 = SelectorResolver.prototype;
|
|
@@ -228,9 +240,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
228
240
|
};
|
|
229
241
|
|
|
230
242
|
_proto2.resolve = function resolve() {
|
|
231
|
-
if (
|
|
232
|
-
var _getPromiseForActiveR;
|
|
233
|
-
|
|
243
|
+
if (this._isMissingData === true) {
|
|
234
244
|
// NOTE: This branch exists to handle the case in which:
|
|
235
245
|
// - A RelayModern container is rendered as a descendant of a Relay Hook
|
|
236
246
|
// root using a "partial" renderPolicy (this means that eargerly
|
|
@@ -252,13 +262,28 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
252
262
|
// This should eventually go away with something like @optional, where we only
|
|
253
263
|
// suspend at specific boundaries depending on whether the boundary
|
|
254
264
|
// can be fulfilled or not.
|
|
255
|
-
var
|
|
265
|
+
var pendingOperationsResult = getPendingOperationsForFragment(this._environment, this._selector.node, this._selector.owner);
|
|
266
|
+
var promise = pendingOperationsResult === null || pendingOperationsResult === void 0 ? void 0 : pendingOperationsResult.promise;
|
|
256
267
|
|
|
257
268
|
if (promise != null) {
|
|
258
269
|
if (this._rootIsQueryRenderer) {
|
|
259
270
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Relay Container for fragment `%s` has missing data and ' + 'would suspend. When using features such as @defer or @module, ' + 'use `useFragment` instead of a Relay Container.', this._selector.node.name) : void 0;
|
|
260
271
|
} else {
|
|
272
|
+
var _pendingOperationsRes;
|
|
273
|
+
|
|
274
|
+
var pendingOperations = (_pendingOperationsRes = pendingOperationsResult === null || pendingOperationsResult === void 0 ? void 0 : pendingOperationsResult.pendingOperations) !== null && _pendingOperationsRes !== void 0 ? _pendingOperationsRes : [];
|
|
261
275
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Relay Container for fragment `%s` suspended. When using ' + 'features such as @defer or @module, use `useFragment` instead ' + 'of a Relay Container.', this._selector.node.name) : void 0;
|
|
276
|
+
|
|
277
|
+
this._environment.__log({
|
|
278
|
+
name: 'suspense.fragment',
|
|
279
|
+
data: this._data,
|
|
280
|
+
fragment: this._selector.node,
|
|
281
|
+
isRelayHooks: false,
|
|
282
|
+
isMissingData: this._isMissingData,
|
|
283
|
+
isPromiseCached: false,
|
|
284
|
+
pendingOperations: pendingOperations
|
|
285
|
+
});
|
|
286
|
+
|
|
262
287
|
throw promise;
|
|
263
288
|
}
|
|
264
289
|
}
|
|
@@ -280,7 +305,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
280
305
|
|
|
281
306
|
var snapshot = this._environment.lookup(selector);
|
|
282
307
|
|
|
283
|
-
this._data = snapshot.data;
|
|
308
|
+
this._data = recycleNodesInto(this._data, snapshot.data);
|
|
284
309
|
this._isMissingData = snapshot.isMissingData;
|
|
285
310
|
this._missingRequiredFields = snapshot.missingRequiredFields;
|
|
286
311
|
this._selector = selector;
|
|
@@ -319,7 +344,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
319
344
|
|
|
320
345
|
|
|
321
346
|
var SelectorListResolver = /*#__PURE__*/function () {
|
|
322
|
-
function SelectorListResolver(environment, rootIsQueryRenderer, selector, callback) {
|
|
347
|
+
function SelectorListResolver(environment, rootIsQueryRenderer, selector, subscribeOnConstruction, callback) {
|
|
323
348
|
var _this3 = this;
|
|
324
349
|
|
|
325
350
|
(0, _defineProperty2["default"])(this, "_onChange", function (data) {
|
|
@@ -333,6 +358,7 @@ var SelectorListResolver = /*#__PURE__*/function () {
|
|
|
333
358
|
this._resolvers = [];
|
|
334
359
|
this._stale = true;
|
|
335
360
|
this._rootIsQueryRenderer = rootIsQueryRenderer;
|
|
361
|
+
this._subscribeOnConstruction = subscribeOnConstruction;
|
|
336
362
|
this.setSelector(selector);
|
|
337
363
|
}
|
|
338
364
|
|
|
@@ -384,7 +410,7 @@ var SelectorListResolver = /*#__PURE__*/function () {
|
|
|
384
410
|
if (ii < this._resolvers.length) {
|
|
385
411
|
this._resolvers[ii].setSelector(selectors[ii]);
|
|
386
412
|
} else {
|
|
387
|
-
this._resolvers[ii] = new SelectorResolver(this._environment, this._rootIsQueryRenderer, selectors[ii], this._onChange);
|
|
413
|
+
this._resolvers[ii] = new SelectorResolver(this._environment, this._rootIsQueryRenderer, selectors[ii], this._subscribeOnConstruction, this._onChange);
|
|
388
414
|
}
|
|
389
415
|
}
|
|
390
416
|
|
|
@@ -23,13 +23,14 @@ var _require2 = require('./RelayModernSelector'),
|
|
|
23
23
|
|
|
24
24
|
var _require3 = require('./RelayStoreUtils'),
|
|
25
25
|
ROOT_ID = _require3.ROOT_ID;
|
|
26
|
-
|
|
27
26
|
/**
|
|
28
27
|
* Creates an instance of the `OperationDescriptor` type defined in
|
|
29
28
|
* `RelayStoreTypes` given an operation and some variables. The input variables
|
|
30
29
|
* are filtered to exclude variables that do not match defined arguments on the
|
|
31
30
|
* operation, and default values are populated for null values.
|
|
32
31
|
*/
|
|
32
|
+
|
|
33
|
+
|
|
33
34
|
function createOperationDescriptor(request, variables, cacheConfig) {
|
|
34
35
|
var dataID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ROOT_ID;
|
|
35
36
|
var operation = request.operation;
|
|
@@ -14,25 +14,25 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
14
14
|
|
|
15
15
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
16
16
|
|
|
17
|
-
var areEqual = require("fbjs/lib/areEqual");
|
|
18
|
-
|
|
19
17
|
var deepFreeze = require('../util/deepFreeze');
|
|
20
18
|
|
|
21
|
-
var invariant = require("fbjs/lib/invariant");
|
|
22
|
-
|
|
23
|
-
var warning = require("fbjs/lib/warning");
|
|
24
|
-
|
|
25
19
|
var _require = require('./ClientID'),
|
|
26
20
|
isClientID = _require.isClientID;
|
|
27
21
|
|
|
28
22
|
var _require2 = require('./RelayStoreUtils'),
|
|
23
|
+
ACTOR_IDENTIFIER_KEY = _require2.ACTOR_IDENTIFIER_KEY,
|
|
29
24
|
ID_KEY = _require2.ID_KEY,
|
|
25
|
+
INVALIDATED_AT_KEY = _require2.INVALIDATED_AT_KEY,
|
|
30
26
|
REF_KEY = _require2.REF_KEY,
|
|
31
27
|
REFS_KEY = _require2.REFS_KEY,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
ROOT_ID = _require2.ROOT_ID,
|
|
29
|
+
TYPENAME_KEY = _require2.TYPENAME_KEY;
|
|
30
|
+
|
|
31
|
+
var areEqual = require("fbjs/lib/areEqual");
|
|
32
|
+
|
|
33
|
+
var invariant = require('invariant');
|
|
35
34
|
|
|
35
|
+
var warning = require("fbjs/lib/warning");
|
|
36
36
|
/**
|
|
37
37
|
* @public
|
|
38
38
|
*
|
|
@@ -82,6 +82,8 @@ var _require2 = require('./RelayStoreUtils'),
|
|
|
82
82
|
*
|
|
83
83
|
* Clone a record.
|
|
84
84
|
*/
|
|
85
|
+
|
|
86
|
+
|
|
85
87
|
function clone(record) {
|
|
86
88
|
return (0, _objectSpread2["default"])({}, record);
|
|
87
89
|
}
|
|
@@ -171,7 +173,7 @@ function getLinkedRecordID(record, storageKey) {
|
|
|
171
173
|
return link;
|
|
172
174
|
}
|
|
173
175
|
|
|
174
|
-
!(typeof link === 'object' && link && typeof link[REF_KEY] === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordID(): Expected `%s.%s` to be a linked ID, ' + 'was `%s
|
|
176
|
+
!(typeof link === 'object' && link && typeof link[REF_KEY] === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordID(): Expected `%s.%s` to be a linked ID, ' + 'was `%s`.%s', record[ID_KEY], storageKey, JSON.stringify(link), typeof link === 'object' && link[REFS_KEY] !== undefined ? ' It appears to be a plural linked record: did you mean to call ' + 'getLinkedRecords() instead of getLinkedRecord()?' : '') : invariant(false) : void 0;
|
|
175
177
|
return link[REF_KEY];
|
|
176
178
|
}
|
|
177
179
|
/**
|
|
@@ -189,7 +191,7 @@ function getLinkedRecordIDs(record, storageKey) {
|
|
|
189
191
|
return links;
|
|
190
192
|
}
|
|
191
193
|
|
|
192
|
-
!(typeof links === 'object' && Array.isArray(links[REFS_KEY])) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordIDs(): Expected `%s.%s` to contain an array ' + 'of linked IDs, got `%s
|
|
194
|
+
!(typeof links === 'object' && Array.isArray(links[REFS_KEY])) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordIDs(): Expected `%s.%s` to contain an array ' + 'of linked IDs, got `%s`.%s', record[ID_KEY], storageKey, JSON.stringify(links), typeof links === 'object' && links[REF_KEY] !== undefined ? ' It appears to be a singular linked record: did you mean to call ' + 'getLinkedRecord() instead of getLinkedRecords()?' : '') : invariant(false) : void 0; // assume items of the array are ids
|
|
193
195
|
|
|
194
196
|
return links[REFS_KEY];
|
|
195
197
|
}
|
|
@@ -336,6 +338,37 @@ function setLinkedRecordIDs(record, storageKey, linkedIDs) {
|
|
|
336
338
|
links[REFS_KEY] = linkedIDs;
|
|
337
339
|
record[storageKey] = links;
|
|
338
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* @public
|
|
343
|
+
*
|
|
344
|
+
* Set the value of a field to a reference to another record in the actor specific store.
|
|
345
|
+
*/
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
function setActorLinkedRecordID(record, storageKey, actorIdentifier, linkedID) {
|
|
349
|
+
// See perf note above for why we aren't using computed property access.
|
|
350
|
+
var link = {};
|
|
351
|
+
link[REF_KEY] = linkedID;
|
|
352
|
+
link[ACTOR_IDENTIFIER_KEY] = actorIdentifier;
|
|
353
|
+
record[storageKey] = link;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* @public
|
|
357
|
+
*
|
|
358
|
+
* Get link to a record and the actor identifier for the store.
|
|
359
|
+
*/
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
function getActorLinkedRecordID(record, storageKey) {
|
|
363
|
+
var link = record[storageKey];
|
|
364
|
+
|
|
365
|
+
if (link == null) {
|
|
366
|
+
return link;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
!(typeof link === 'object' && typeof link[REF_KEY] === 'string' && link[ACTOR_IDENTIFIER_KEY] != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getActorLinkedRecordID(): Expected `%s.%s` to be an actor specific linked ID, ' + 'was `%s`.', record[ID_KEY], storageKey, JSON.stringify(link)) : invariant(false) : void 0;
|
|
370
|
+
return [link[ACTOR_IDENTIFIER_KEY], link[REF_KEY]];
|
|
371
|
+
}
|
|
339
372
|
|
|
340
373
|
module.exports = {
|
|
341
374
|
clone: clone,
|
|
@@ -352,5 +385,7 @@ module.exports = {
|
|
|
352
385
|
setValue: setValue,
|
|
353
386
|
setLinkedRecordID: setLinkedRecordID,
|
|
354
387
|
setLinkedRecordIDs: setLinkedRecordIDs,
|
|
355
|
-
update: update
|
|
388
|
+
update: update,
|
|
389
|
+
getActorLinkedRecordID: getActorLinkedRecordID,
|
|
390
|
+
setActorLinkedRecordID: setActorLinkedRecordID
|
|
356
391
|
};
|
|
@@ -10,21 +10,21 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var areEqual = require("fbjs/lib/areEqual");
|
|
14
|
-
|
|
15
|
-
var invariant = require("fbjs/lib/invariant");
|
|
16
|
-
|
|
17
|
-
var warning = require("fbjs/lib/warning");
|
|
18
|
-
|
|
19
13
|
var _require = require('./RelayConcreteVariables'),
|
|
20
14
|
getFragmentVariables = _require.getFragmentVariables;
|
|
21
15
|
|
|
22
16
|
var _require2 = require('./RelayStoreUtils'),
|
|
17
|
+
CLIENT_EDGE_TRAVERSAL_PATH = _require2.CLIENT_EDGE_TRAVERSAL_PATH,
|
|
23
18
|
FRAGMENT_OWNER_KEY = _require2.FRAGMENT_OWNER_KEY,
|
|
24
19
|
FRAGMENTS_KEY = _require2.FRAGMENTS_KEY,
|
|
25
20
|
ID_KEY = _require2.ID_KEY,
|
|
26
21
|
IS_WITHIN_UNMATCHED_TYPE_REFINEMENT = _require2.IS_WITHIN_UNMATCHED_TYPE_REFINEMENT;
|
|
27
22
|
|
|
23
|
+
var areEqual = require("fbjs/lib/areEqual");
|
|
24
|
+
|
|
25
|
+
var invariant = require('invariant');
|
|
26
|
+
|
|
27
|
+
var warning = require("fbjs/lib/warning");
|
|
28
28
|
/**
|
|
29
29
|
* @public
|
|
30
30
|
*
|
|
@@ -54,18 +54,22 @@ var _require2 = require('./RelayStoreUtils'),
|
|
|
54
54
|
* const childData = environment.lookup(childSelector).data;
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
|
+
|
|
58
|
+
|
|
57
59
|
function getSingularSelector(fragment, item) {
|
|
58
60
|
!(typeof item === 'object' && item !== null && !Array.isArray(item)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernSelector: Expected value for fragment `%s` to be an object, got ' + '`%s`.', fragment.name, JSON.stringify(item)) : invariant(false) : void 0;
|
|
59
61
|
var dataID = item[ID_KEY];
|
|
60
62
|
var fragments = item[FRAGMENTS_KEY];
|
|
61
63
|
var mixedOwner = item[FRAGMENT_OWNER_KEY];
|
|
62
64
|
var isWithinUnmatchedTypeRefinement = item[IS_WITHIN_UNMATCHED_TYPE_REFINEMENT] === true;
|
|
65
|
+
var mixedClientEdgeTraversalPath = item[CLIENT_EDGE_TRAVERSAL_PATH];
|
|
63
66
|
|
|
64
|
-
if (typeof dataID === 'string' && typeof fragments === 'object' && fragments !== null && typeof fragments[fragment.name] === 'object' && fragments[fragment.name] !== null && typeof mixedOwner === 'object' && mixedOwner !== null) {
|
|
67
|
+
if (typeof dataID === 'string' && typeof fragments === 'object' && fragments !== null && typeof fragments[fragment.name] === 'object' && fragments[fragment.name] !== null && typeof mixedOwner === 'object' && mixedOwner !== null && (mixedClientEdgeTraversalPath == null || Array.isArray(mixedClientEdgeTraversalPath))) {
|
|
65
68
|
var owner = mixedOwner;
|
|
69
|
+
var clientEdgeTraversalPath = mixedClientEdgeTraversalPath;
|
|
66
70
|
var argumentVariables = fragments[fragment.name];
|
|
67
71
|
var fragmentVariables = getFragmentVariables(fragment, owner.variables, argumentVariables);
|
|
68
|
-
return createReaderSelector(fragment, dataID, fragmentVariables, owner, isWithinUnmatchedTypeRefinement);
|
|
72
|
+
return createReaderSelector(fragment, dataID, fragmentVariables, owner, isWithinUnmatchedTypeRefinement, clientEdgeTraversalPath);
|
|
69
73
|
}
|
|
70
74
|
|
|
71
75
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -295,10 +299,12 @@ function areEqualSelectors(thisSelector, thatSelector) {
|
|
|
295
299
|
|
|
296
300
|
function createReaderSelector(fragment, dataID, variables, request) {
|
|
297
301
|
var isWithinUnmatchedTypeRefinement = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
302
|
+
var clientEdgeTraversalPath = arguments.length > 5 ? arguments[5] : undefined;
|
|
298
303
|
return {
|
|
299
304
|
kind: 'SingularReaderSelector',
|
|
300
305
|
dataID: dataID,
|
|
301
306
|
isWithinUnmatchedTypeRefinement: isWithinUnmatchedTypeRefinement,
|
|
307
|
+
clientEdgeTraversalPath: clientEdgeTraversalPath !== null && clientEdgeTraversalPath !== void 0 ? clientEdgeTraversalPath : null,
|
|
302
308
|
node: fragment,
|
|
303
309
|
variables: variables,
|
|
304
310
|
owner: request
|
|
@@ -16,16 +16,24 @@ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime
|
|
|
16
16
|
|
|
17
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var _require = require('../multi-actor-environment/ActorIdentifier'),
|
|
20
|
+
INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE = _require.INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE,
|
|
21
|
+
assertInternalActorIndentifier = _require.assertInternalActorIndentifier;
|
|
22
|
+
|
|
23
|
+
var deepFreeze = require('../util/deepFreeze');
|
|
20
24
|
|
|
21
25
|
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
22
26
|
|
|
27
|
+
var resolveImmediate = require('../util/resolveImmediate');
|
|
28
|
+
|
|
29
|
+
var DataChecker = require('./DataChecker');
|
|
30
|
+
|
|
31
|
+
var defaultGetDataID = require('./defaultGetDataID');
|
|
32
|
+
|
|
23
33
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
24
34
|
|
|
25
35
|
var RelayOptimisticRecordSource = require('./RelayOptimisticRecordSource');
|
|
26
36
|
|
|
27
|
-
var RelayProfiler = require('../util/RelayProfiler');
|
|
28
|
-
|
|
29
37
|
var RelayReader = require('./RelayReader');
|
|
30
38
|
|
|
31
39
|
var RelayReferenceMarker = require('./RelayReferenceMarker');
|
|
@@ -34,21 +42,16 @@ var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
|
|
|
34
42
|
|
|
35
43
|
var RelayStoreSubscriptions = require('./RelayStoreSubscriptions');
|
|
36
44
|
|
|
37
|
-
var RelayStoreSubscriptionsUsingMapByID = require('./RelayStoreSubscriptionsUsingMapByID');
|
|
38
|
-
|
|
39
45
|
var RelayStoreUtils = require('./RelayStoreUtils');
|
|
40
46
|
|
|
41
|
-
var
|
|
47
|
+
var _require2 = require('./RelayStoreUtils'),
|
|
48
|
+
ROOT_ID = _require2.ROOT_ID,
|
|
49
|
+
ROOT_TYPE = _require2.ROOT_TYPE;
|
|
42
50
|
|
|
43
|
-
var
|
|
44
|
-
|
|
45
|
-
var invariant = require("fbjs/lib/invariant");
|
|
51
|
+
var _require3 = require('./ResolverCache'),
|
|
52
|
+
RecordResolverCache = _require3.RecordResolverCache;
|
|
46
53
|
|
|
47
|
-
var
|
|
48
|
-
|
|
49
|
-
var _require = require('./RelayStoreUtils'),
|
|
50
|
-
ROOT_ID = _require.ROOT_ID,
|
|
51
|
-
ROOT_TYPE = _require.ROOT_TYPE;
|
|
54
|
+
var invariant = require('invariant');
|
|
52
55
|
|
|
53
56
|
var DEFAULT_RELEASE_BUFFER_SIZE = 10;
|
|
54
57
|
/**
|
|
@@ -110,7 +113,10 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
110
113
|
this._releaseBuffer = [];
|
|
111
114
|
this._roots = new Map();
|
|
112
115
|
this._shouldScheduleGC = false;
|
|
113
|
-
this.
|
|
116
|
+
this._resolverCache = new RecordResolverCache(function () {
|
|
117
|
+
return _this._getMutableRecordSource();
|
|
118
|
+
});
|
|
119
|
+
this._storeSubscriptions = new RelayStoreSubscriptions(options === null || options === void 0 ? void 0 : options.log, this._resolverCache);
|
|
114
120
|
this._updatedRecordIDs = new Set();
|
|
115
121
|
this._shouldProcessClientComponents = options === null || options === void 0 ? void 0 : options.shouldProcessClientComponents;
|
|
116
122
|
initializeRecordSource(this._recordSource);
|
|
@@ -124,11 +130,19 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
124
130
|
return (_this$_optimisticSour = this._optimisticSource) !== null && _this$_optimisticSour !== void 0 ? _this$_optimisticSour : this._recordSource;
|
|
125
131
|
};
|
|
126
132
|
|
|
133
|
+
_proto._getMutableRecordSource = function _getMutableRecordSource() {
|
|
134
|
+
var _this$_optimisticSour2;
|
|
135
|
+
|
|
136
|
+
return (_this$_optimisticSour2 = this._optimisticSource) !== null && _this$_optimisticSour2 !== void 0 ? _this$_optimisticSour2 : this._recordSource;
|
|
137
|
+
};
|
|
138
|
+
|
|
127
139
|
_proto.check = function check(operation, options) {
|
|
128
|
-
var
|
|
140
|
+
var _options$handlers, _options$getSourceFor, _options$getTargetFor, _options$defaultActor;
|
|
129
141
|
|
|
130
142
|
var selector = operation.root;
|
|
131
|
-
|
|
143
|
+
|
|
144
|
+
var source = this._getMutableRecordSource();
|
|
145
|
+
|
|
132
146
|
var globalInvalidationEpoch = this._globalInvalidationEpoch;
|
|
133
147
|
|
|
134
148
|
var rootEntry = this._roots.get(operation.request.identifier);
|
|
@@ -137,7 +151,7 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
137
151
|
|
|
138
152
|
if (globalInvalidationEpoch != null) {
|
|
139
153
|
// If so, check if the operation we're checking was last written
|
|
140
|
-
// before or after invalidation
|
|
154
|
+
// before or after invalidation occurred.
|
|
141
155
|
if (operationLastWrittenAt == null || operationLastWrittenAt <= globalInvalidationEpoch) {
|
|
142
156
|
// If the operation was written /before/ global invalidation occurred,
|
|
143
157
|
// or if this operation has never been written to the store before,
|
|
@@ -149,9 +163,16 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
149
163
|
}
|
|
150
164
|
}
|
|
151
165
|
|
|
152
|
-
var target = (_options$target = options === null || options === void 0 ? void 0 : options.target) !== null && _options$target !== void 0 ? _options$target : source;
|
|
153
166
|
var handlers = (_options$handlers = options === null || options === void 0 ? void 0 : options.handlers) !== null && _options$handlers !== void 0 ? _options$handlers : [];
|
|
154
|
-
var
|
|
167
|
+
var getSourceForActor = (_options$getSourceFor = options === null || options === void 0 ? void 0 : options.getSourceForActor) !== null && _options$getSourceFor !== void 0 ? _options$getSourceFor : function (actorIdentifier) {
|
|
168
|
+
assertInternalActorIndentifier(actorIdentifier);
|
|
169
|
+
return source;
|
|
170
|
+
};
|
|
171
|
+
var getTargetForActor = (_options$getTargetFor = options === null || options === void 0 ? void 0 : options.getTargetForActor) !== null && _options$getTargetFor !== void 0 ? _options$getTargetFor : function (actorIdentifier) {
|
|
172
|
+
assertInternalActorIndentifier(actorIdentifier);
|
|
173
|
+
return source;
|
|
174
|
+
};
|
|
175
|
+
var operationAvailability = DataChecker.check(getSourceForActor, getTargetForActor, (_options$defaultActor = options === null || options === void 0 ? void 0 : options.defaultActorIdentifier) !== null && _options$defaultActor !== void 0 ? _options$defaultActor : INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE, selector, handlers, this._operationLoader, this._getDataID, this._shouldProcessClientComponents);
|
|
155
176
|
return getAvailabilityStatus(operationAvailability, operationLastWrittenAt, rootEntry === null || rootEntry === void 0 ? void 0 : rootEntry.fetchTime, this._queryCacheExpirationTime);
|
|
156
177
|
};
|
|
157
178
|
|
|
@@ -236,7 +257,7 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
236
257
|
|
|
237
258
|
_proto.lookup = function lookup(selector) {
|
|
238
259
|
var source = this.getSource();
|
|
239
|
-
var snapshot = RelayReader.read(source, selector);
|
|
260
|
+
var snapshot = RelayReader.read(source, selector, this._resolverCache);
|
|
240
261
|
|
|
241
262
|
if (process.env.NODE_ENV !== "production") {
|
|
242
263
|
deepFreeze(snapshot);
|
|
@@ -266,6 +287,14 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
266
287
|
this._globalInvalidationEpoch = this._currentWriteEpoch;
|
|
267
288
|
}
|
|
268
289
|
|
|
290
|
+
if (RelayFeatureFlags.ENABLE_RELAY_RESOLVERS) {
|
|
291
|
+
// When a record is updated, we need to also handle records that depend on it,
|
|
292
|
+
// specifically Relay Resolver result records containing results based on the
|
|
293
|
+
// updated records. This both adds to updatedRecordIDs and invalidates any
|
|
294
|
+
// cached data as needed.
|
|
295
|
+
this._resolverCache.invalidateDataIDs(this._updatedRecordIDs);
|
|
296
|
+
}
|
|
297
|
+
|
|
269
298
|
var source = this.getSource();
|
|
270
299
|
var updatedOwners = [];
|
|
271
300
|
|
|
@@ -324,9 +353,8 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
324
353
|
};
|
|
325
354
|
|
|
326
355
|
_proto.publish = function publish(source, idsMarkedForInvalidation) {
|
|
327
|
-
var
|
|
356
|
+
var target = this._getMutableRecordSource();
|
|
328
357
|
|
|
329
|
-
var target = (_this$_optimisticSour3 = this._optimisticSource) !== null && _this$_optimisticSour3 !== void 0 ? _this$_optimisticSour3 : this._recordSource;
|
|
330
358
|
updateTargetFromSource(target, source, // We increment the current epoch at the end of the set of updates,
|
|
331
359
|
// in notify(). Here, we pass what will be the incremented value of
|
|
332
360
|
// the epoch to use to write to invalidated records.
|
|
@@ -377,6 +405,10 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
377
405
|
|
|
378
406
|
_proto.toJSON = function toJSON() {
|
|
379
407
|
return 'RelayModernStore()';
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
_proto.getEpoch = function getEpoch() {
|
|
411
|
+
return this._currentWriteEpoch;
|
|
380
412
|
} // Internal API
|
|
381
413
|
;
|
|
382
414
|
|
|
@@ -648,8 +680,7 @@ function updateTargetFromSource(target, source, currentWriteEpoch, idsMarkedForI
|
|
|
648
680
|
}
|
|
649
681
|
|
|
650
682
|
RelayModernRecord.setValue(nextRecord, RelayStoreUtils.INVALIDATED_AT_KEY, currentWriteEpoch);
|
|
651
|
-
invalidatedRecordIDs.add(dataID);
|
|
652
|
-
|
|
683
|
+
invalidatedRecordIDs.add(dataID);
|
|
653
684
|
target.set(dataID, nextRecord);
|
|
654
685
|
});
|
|
655
686
|
} // Update the target based on the changes present in source
|
|
@@ -747,7 +778,4 @@ function getAvailabilityStatus(operationAvailability, operationLastWrittenAt, op
|
|
|
747
778
|
};
|
|
748
779
|
}
|
|
749
780
|
|
|
750
|
-
RelayProfiler.instrumentMethods(RelayModernStore.prototype, {
|
|
751
|
-
lookup: 'RelayModernStore.prototype.lookup'
|
|
752
|
-
});
|
|
753
781
|
module.exports = RelayModernStore;
|