relay-runtime 9.0.0 → 10.1.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/handlers/RelayDefaultHandlerProvider.js.flow +47 -0
- package/handlers/connection/ConnectionHandler.js.flow +549 -0
- package/handlers/connection/ConnectionInterface.js.flow +92 -0
- package/handlers/connection/MutationHandlers.js.flow +199 -0
- package/index.js +1 -1
- package/index.js.flow +335 -0
- package/lib/handlers/RelayDefaultHandlerProvider.js +20 -0
- package/lib/handlers/connection/ConnectionHandler.js +1 -3
- package/lib/handlers/connection/MutationHandlers.js +212 -0
- package/lib/index.js +14 -2
- package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
- package/lib/mutations/RelayRecordProxy.js +1 -3
- package/lib/mutations/RelayRecordSourceMutator.js +1 -3
- package/lib/mutations/RelayRecordSourceProxy.js +1 -3
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
- package/lib/mutations/commitMutation.js +2 -3
- package/lib/mutations/validateMutation.js +40 -9
- package/lib/network/RelayObservable.js +9 -9
- package/lib/network/RelayQueryResponseCache.js +8 -6
- package/lib/query/GraphQLTag.js +2 -1
- package/lib/query/PreloadableQueryRegistry.js +70 -0
- package/lib/query/fetchQuery.js +2 -3
- package/lib/query/fetchQueryInternal.js +5 -14
- package/lib/store/DataChecker.js +200 -71
- package/lib/store/RelayConcreteVariables.js +6 -2
- package/lib/store/RelayModernEnvironment.js +124 -65
- package/lib/store/RelayModernFragmentSpecResolver.js +19 -14
- package/lib/store/RelayModernOperationDescriptor.js +6 -5
- package/lib/store/RelayModernQueryExecutor.js +122 -73
- package/lib/store/RelayModernRecord.js +14 -9
- package/lib/store/RelayModernSelector.js +6 -2
- package/lib/store/RelayModernStore.js +281 -131
- package/lib/store/RelayOperationTracker.js +35 -78
- package/lib/store/RelayOptimisticRecordSource.js +7 -5
- package/lib/store/RelayPublishQueue.js +2 -4
- package/lib/store/RelayReader.js +304 -52
- package/lib/store/RelayRecordSource.js +1 -3
- package/lib/store/RelayRecordSourceMapImpl.js +13 -18
- package/lib/store/RelayReferenceMarker.js +125 -14
- package/lib/store/RelayResponseNormalizer.js +261 -66
- package/lib/store/RelayStoreReactFlightUtils.js +47 -0
- package/lib/store/RelayStoreUtils.js +1 -0
- package/lib/store/StoreInspector.js +8 -8
- package/lib/store/TypeID.js +28 -0
- package/lib/store/cloneRelayScalarHandleSourceField.js +44 -0
- package/lib/store/defaultRequiredFieldLogger.js +18 -0
- package/lib/store/normalizeRelayPayload.js +6 -2
- package/lib/store/readInlineData.js +1 -1
- package/lib/subscription/requestSubscription.js +4 -3
- package/lib/util/NormalizationNode.js +1 -5
- package/lib/util/RelayConcreteNode.js +11 -6
- package/lib/util/RelayError.js +39 -9
- package/lib/util/RelayFeatureFlags.js +6 -3
- package/lib/util/RelayReplaySubject.js +3 -3
- package/lib/util/createPayloadFor3DField.js +7 -2
- package/lib/util/getFragmentIdentifier.js +12 -3
- package/lib/util/getOperation.js +33 -0
- package/lib/util/getRequestIdentifier.js +2 -2
- package/lib/util/isEmptyObject.js +25 -0
- package/lib/util/recycleNodesInto.js +6 -7
- package/lib/util/reportMissingRequiredFields.js +48 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
- package/mutations/RelayRecordProxy.js.flow +165 -0
- package/mutations/RelayRecordSourceMutator.js.flow +238 -0
- package/mutations/RelayRecordSourceProxy.js.flow +164 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
- package/mutations/applyOptimisticMutation.js.flow +76 -0
- package/mutations/commitLocalUpdate.js.flow +24 -0
- package/mutations/commitMutation.js.flow +181 -0
- package/mutations/validateMutation.js.flow +242 -0
- package/network/ConvertToExecuteFunction.js.flow +49 -0
- package/network/RelayNetwork.js.flow +84 -0
- package/network/RelayNetworkTypes.js.flow +145 -0
- package/network/RelayObservable.js.flow +634 -0
- package/network/RelayQueryResponseCache.js.flow +111 -0
- package/package.json +2 -2
- package/query/GraphQLTag.js.flow +168 -0
- package/query/PreloadableQueryRegistry.js.flow +65 -0
- package/query/fetchQuery.js.flow +47 -0
- package/query/fetchQueryInternal.js.flow +343 -0
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +43 -0
- package/store/DataChecker.js.flow +568 -0
- package/store/RelayConcreteVariables.js.flow +96 -0
- package/store/RelayModernEnvironment.js.flow +571 -0
- package/store/RelayModernFragmentSpecResolver.js.flow +438 -0
- package/store/RelayModernOperationDescriptor.js.flow +92 -0
- package/store/RelayModernQueryExecutor.js.flow +1345 -0
- package/store/RelayModernRecord.js.flow +403 -0
- package/store/RelayModernSelector.js.flow +455 -0
- package/store/RelayModernStore.js.flow +858 -0
- package/store/RelayOperationTracker.js.flow +164 -0
- package/store/RelayOptimisticRecordSource.js.flow +119 -0
- package/store/RelayPublishQueue.js.flow +401 -0
- package/store/RelayReader.js.flow +638 -0
- package/store/RelayRecordSource.js.flow +29 -0
- package/store/RelayRecordSourceMapImpl.js.flow +87 -0
- package/store/RelayRecordState.js.flow +37 -0
- package/store/RelayReferenceMarker.js.flow +324 -0
- package/store/RelayResponseNormalizer.js.flow +791 -0
- package/store/RelayStoreReactFlightUtils.js.flow +64 -0
- package/store/RelayStoreTypes.js.flow +958 -0
- package/store/RelayStoreUtils.js.flow +219 -0
- package/store/StoreInspector.js.flow +171 -0
- package/store/TypeID.js.flow +28 -0
- package/store/ViewerPattern.js.flow +26 -0
- package/store/cloneRelayHandleSourceField.js.flow +66 -0
- package/store/cloneRelayScalarHandleSourceField.js.flow +62 -0
- package/store/createFragmentSpecResolver.js.flow +55 -0
- package/store/createRelayContext.js.flow +44 -0
- package/store/defaultGetDataID.js.flow +27 -0
- package/store/defaultRequiredFieldLogger.js.flow +23 -0
- package/store/hasOverlappingIDs.js.flow +34 -0
- package/store/isRelayModernEnvironment.js.flow +27 -0
- package/store/normalizeRelayPayload.js.flow +51 -0
- package/store/readInlineData.js.flow +75 -0
- package/subscription/requestSubscription.js.flow +103 -0
- package/util/JSResourceTypes.flow.js.flow +20 -0
- package/util/NormalizationNode.js.flow +213 -0
- package/util/ReaderNode.js.flow +227 -0
- package/util/RelayConcreteNode.js.flow +99 -0
- package/util/RelayDefaultHandleKey.js.flow +17 -0
- package/util/RelayError.js.flow +62 -0
- package/util/RelayFeatureFlags.js.flow +37 -0
- package/util/RelayProfiler.js.flow +284 -0
- package/util/RelayReplaySubject.js.flow +135 -0
- package/util/RelayRuntimeTypes.js.flow +72 -0
- package/util/createPayloadFor3DField.js.flow +43 -0
- package/util/deepFreeze.js.flow +36 -0
- package/util/generateID.js.flow +21 -0
- package/util/getFragmentIdentifier.js.flow +76 -0
- package/util/getOperation.js.flow +40 -0
- package/util/getRelayHandleKey.js.flow +41 -0
- package/util/getRequestIdentifier.js.flow +42 -0
- package/util/isEmptyObject.js.flow +25 -0
- package/util/isPromise.js.flow +21 -0
- package/util/isScalarAndEqual.js.flow +26 -0
- package/util/recycleNodesInto.js.flow +87 -0
- package/util/reportMissingRequiredFields.js.flow +51 -0
- package/util/resolveImmediate.js.flow +30 -0
- package/util/stableCopy.js.flow +35 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
var defaultRequiredFieldLogger = function defaultRequiredFieldLogger(event) {
|
|
13
|
+
if (process.env.NODE_ENV !== "production" && event.kind === 'missing_field.log') {
|
|
14
|
+
throw new Error('Relay Environment Configuration Error (dev only): `@required(action: LOG)` requires that the Relay Environment be configured with a `requiredFieldLogger`.');
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
module.exports = defaultRequiredFieldLogger;
|
|
@@ -12,7 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
16
20
|
|
|
17
21
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
18
22
|
|
|
@@ -27,7 +31,7 @@ function normalizeRelayPayload(selector, payload, errors, options) {
|
|
|
27
31
|
var source = RelayRecordSource.create();
|
|
28
32
|
source.set(selector.dataID, RelayModernRecord.create(selector.dataID, ROOT_TYPE));
|
|
29
33
|
var relayPayload = RelayResponseNormalizer.normalize(source, selector, payload, options);
|
|
30
|
-
return (
|
|
34
|
+
return _objectSpread(_objectSpread({}, relayPayload), {}, {
|
|
31
35
|
errors: errors
|
|
32
36
|
});
|
|
33
37
|
}
|
|
@@ -27,7 +27,7 @@ function readInlineData(fragment, fragmentRef) {
|
|
|
27
27
|
return fragmentRef;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
!(typeof fragmentRef === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'readInlineData(): Expected an object, got `%s`.', typeof fragmentRef) : invariant(false) : void 0; // $FlowFixMe
|
|
30
|
+
!(typeof fragmentRef === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'readInlineData(): Expected an object, got `%s`.', typeof fragmentRef) : invariant(false) : void 0; // $FlowFixMe[incompatible-use]
|
|
31
31
|
|
|
32
32
|
var inlineData = (_fragmentRef$FRAGMENT = fragmentRef[FRAGMENTS_KEY]) === null || _fragmentRef$FRAGMENT === void 0 ? void 0 : _fragmentRef$FRAGMENT[inlineDataFragment.name];
|
|
33
33
|
!(inlineData != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'readInlineData(): Expected fragment `%s` to be spread in the parent ' + 'fragment.', inlineDataFragment.name) : invariant(false) : void 0;
|
|
@@ -31,8 +31,9 @@ function requestSubscription(environment, config) {
|
|
|
31
31
|
onCompleted = config.onCompleted,
|
|
32
32
|
onError = config.onError,
|
|
33
33
|
onNext = config.onNext,
|
|
34
|
-
variables = config.variables
|
|
35
|
-
|
|
34
|
+
variables = config.variables,
|
|
35
|
+
cacheConfig = config.cacheConfig;
|
|
36
|
+
var operation = createOperationDescriptor(subscription, variables, cacheConfig);
|
|
36
37
|
process.env.NODE_ENV !== "production" ? warning(!(config.updater && configs), 'requestSubscription: Expected only one of `updater` and `configs` to be provided') : void 0;
|
|
37
38
|
|
|
38
39
|
var _ref = configs ? RelayDeclarativeMutationConfig.convert(configs, subscription, null
|
|
@@ -44,7 +45,7 @@ function requestSubscription(environment, config) {
|
|
|
44
45
|
operation: operation,
|
|
45
46
|
updater: updater
|
|
46
47
|
}).map(function () {
|
|
47
|
-
var data = environment.lookup(operation.fragment).data; // $FlowFixMe
|
|
48
|
+
var data = environment.lookup(operation.fragment).data; // $FlowFixMe[incompatible-cast]
|
|
48
49
|
|
|
49
50
|
return data;
|
|
50
51
|
}).subscribe({
|
|
@@ -11,21 +11,24 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Represents a common GraphQL request
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* Represents a common GraphQL request that can be executed, an `operation`
|
|
15
|
+
* containing information to normalize the results, and a `fragment` derived
|
|
16
|
+
* from that operation to read the response data (masking data from child
|
|
17
|
+
* fragments).
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* Contains the
|
|
22
|
-
*
|
|
21
|
+
* Contains the parameters required for executing a GraphQL request.
|
|
22
|
+
* The operation can either be provided as a persisted `id` or `text`. If given
|
|
23
|
+
* in `text` format, a `cacheID` as a hash of the text should be set to be used
|
|
24
|
+
* for local caching.
|
|
23
25
|
*/
|
|
24
26
|
var RelayConcreteNode = {
|
|
25
27
|
CONDITION: 'Condition',
|
|
26
28
|
CLIENT_EXTENSION: 'ClientExtension',
|
|
27
29
|
DEFER: 'Defer',
|
|
28
30
|
CONNECTION: 'Connection',
|
|
31
|
+
FLIGHT_FIELD: 'FlightField',
|
|
29
32
|
FRAGMENT: 'Fragment',
|
|
30
33
|
FRAGMENT_SPREAD: 'FragmentSpread',
|
|
31
34
|
INLINE_DATA_FRAGMENT_SPREAD: 'InlineDataFragmentSpread',
|
|
@@ -37,6 +40,7 @@ var RelayConcreteNode = {
|
|
|
37
40
|
LIST_VALUE: 'ListValue',
|
|
38
41
|
LOCAL_ARGUMENT: 'LocalArgument',
|
|
39
42
|
MODULE_IMPORT: 'ModuleImport',
|
|
43
|
+
REQUIRED_FIELD: 'RequiredField',
|
|
40
44
|
OBJECT_VALUE: 'ObjectValue',
|
|
41
45
|
OPERATION: 'Operation',
|
|
42
46
|
REQUEST: 'Request',
|
|
@@ -45,6 +49,7 @@ var RelayConcreteNode = {
|
|
|
45
49
|
SCALAR_HANDLE: 'ScalarHandle',
|
|
46
50
|
SPLIT_OPERATION: 'SplitOperation',
|
|
47
51
|
STREAM: 'Stream',
|
|
52
|
+
TYPE_DISCRIMINATOR: 'TypeDiscriminator',
|
|
48
53
|
VARIABLE: 'Variable'
|
|
49
54
|
};
|
|
50
55
|
module.exports = RelayConcreteNode;
|
package/lib/util/RelayError.js
CHANGED
|
@@ -13,19 +13,49 @@
|
|
|
13
13
|
* @private
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
function createError(type, name,
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
function createError(type, name, messageFormat) {
|
|
17
|
+
for (var _len = arguments.length, messageParams = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
|
|
18
|
+
messageParams[_key - 3] = arguments[_key];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var index = 0;
|
|
22
|
+
var message = messageFormat.replace(/%s/g, function () {
|
|
23
|
+
return String(messageParams[index++]);
|
|
24
|
+
});
|
|
25
|
+
var err = new Error(message);
|
|
26
|
+
var error = Object.assign(err, {
|
|
27
|
+
name: name,
|
|
28
|
+
messageFormat: messageFormat,
|
|
29
|
+
messageParams: messageParams,
|
|
30
|
+
type: type,
|
|
31
|
+
taalOpcodes: [2, 2] // skip frame (code=2) twice
|
|
32
|
+
|
|
33
|
+
}); // In V8, Error objects keep the closure scope chain alive until the
|
|
34
|
+
// err.stack property is accessed.
|
|
35
|
+
|
|
36
|
+
if (error.stack === undefined) {
|
|
37
|
+
// IE sets the stack only if error is thrown
|
|
38
|
+
try {
|
|
39
|
+
throw error;
|
|
40
|
+
} catch (_unused) {}
|
|
41
|
+
}
|
|
42
|
+
|
|
21
43
|
return error;
|
|
22
44
|
}
|
|
23
45
|
|
|
24
46
|
module.exports = {
|
|
25
|
-
create: function create(name,
|
|
26
|
-
|
|
47
|
+
create: function create(name, messageFormat) {
|
|
48
|
+
for (var _len2 = arguments.length, messageParams = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
|
|
49
|
+
messageParams[_key2 - 2] = arguments[_key2];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return createError.apply(void 0, ['error', name, messageFormat].concat(messageParams));
|
|
27
53
|
},
|
|
28
|
-
createWarning: function createWarning(name,
|
|
29
|
-
|
|
54
|
+
createWarning: function createWarning(name, messageFormat) {
|
|
55
|
+
for (var _len3 = arguments.length, messageParams = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
|
|
56
|
+
messageParams[_key3 - 2] = arguments[_key3];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return createError.apply(void 0, ['warn', name, messageFormat].concat(messageParams));
|
|
30
60
|
}
|
|
31
61
|
};
|
|
@@ -11,10 +11,13 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
var RelayFeatureFlags = {
|
|
14
|
-
// T45504512: new connection model
|
|
15
14
|
ENABLE_VARIABLE_CONNECTION_KEY: false,
|
|
16
15
|
ENABLE_PARTIAL_RENDERING_DEFAULT: false,
|
|
17
|
-
ENABLE_RELAY_CONTAINERS_SUSPENSE:
|
|
18
|
-
|
|
16
|
+
ENABLE_RELAY_CONTAINERS_SUSPENSE: false,
|
|
17
|
+
ENABLE_PRECISE_TYPE_REFINEMENT: false,
|
|
18
|
+
ENABLE_REACT_FLIGHT_COMPONENT_FIELD: false,
|
|
19
|
+
ENABLE_REQUIRED_DIRECTIVES: false,
|
|
20
|
+
ENABLE_GETFRAGMENTIDENTIFIER_OPTIMIZATION: false,
|
|
21
|
+
ENABLE_FRIENDLY_QUERY_NAME_GQL_URL: false
|
|
19
22
|
};
|
|
20
23
|
module.exports = RelayFeatureFlags;
|
|
@@ -24,9 +24,7 @@ var invariant = require("fbjs/lib/invariant");
|
|
|
24
24
|
* Records events provided and synchronously plays them back to new subscribers,
|
|
25
25
|
* as well as forwarding new asynchronous events.
|
|
26
26
|
*/
|
|
27
|
-
var RelayReplaySubject =
|
|
28
|
-
/*#__PURE__*/
|
|
29
|
-
function () {
|
|
27
|
+
var RelayReplaySubject = /*#__PURE__*/function () {
|
|
30
28
|
function RelayReplaySubject() {
|
|
31
29
|
var _this = this;
|
|
32
30
|
|
|
@@ -130,6 +128,8 @@ function () {
|
|
|
130
128
|
_proto.unsubscribe = function unsubscribe() {
|
|
131
129
|
if (this._subscription) {
|
|
132
130
|
this._subscription.unsubscribe();
|
|
131
|
+
|
|
132
|
+
this._subscription = null;
|
|
133
133
|
}
|
|
134
134
|
};
|
|
135
135
|
|
|
@@ -13,14 +13,19 @@
|
|
|
13
13
|
|
|
14
14
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
19
|
+
|
|
20
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
17
21
|
|
|
18
22
|
var _require = require('../store/RelayStoreUtils'),
|
|
19
23
|
getModuleComponentKey = _require.getModuleComponentKey,
|
|
20
24
|
getModuleOperationKey = _require.getModuleOperationKey;
|
|
21
25
|
|
|
22
26
|
function createPayloadFor3DField(name, operation, component, response) {
|
|
23
|
-
var data = (
|
|
27
|
+
var data = _objectSpread({}, response);
|
|
28
|
+
|
|
24
29
|
data[getModuleComponentKey(name)] = component;
|
|
25
30
|
data[getModuleOperationKey(name)] = operation;
|
|
26
31
|
return data;
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
// flowlint ambiguous-object-type:error
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
+
var RelayFeatureFlags = require('./RelayFeatureFlags');
|
|
15
|
+
|
|
16
|
+
var isEmptyObject = require('./isEmptyObject');
|
|
17
|
+
|
|
14
18
|
var stableCopy = require('./stableCopy');
|
|
15
19
|
|
|
16
20
|
var _require = require('../store/RelayModernSelector'),
|
|
@@ -19,15 +23,20 @@ var _require = require('../store/RelayModernSelector'),
|
|
|
19
23
|
getSelector = _require.getSelector;
|
|
20
24
|
|
|
21
25
|
function getFragmentIdentifier(fragmentNode, fragmentRef) {
|
|
22
|
-
var _JSON$stringify;
|
|
23
|
-
|
|
24
26
|
var selector = getSelector(fragmentNode, fragmentRef);
|
|
25
27
|
var fragmentOwnerIdentifier = selector == null ? 'null' : selector.kind === 'SingularReaderSelector' ? selector.owner.identifier : '[' + selector.selectors.map(function (sel) {
|
|
26
28
|
return sel.owner.identifier;
|
|
27
29
|
}).join(',') + ']';
|
|
28
30
|
var fragmentVariables = getVariablesFromFragment(fragmentNode, fragmentRef);
|
|
29
31
|
var dataIDs = getDataIDsFromFragment(fragmentNode, fragmentRef);
|
|
30
|
-
|
|
32
|
+
|
|
33
|
+
if (RelayFeatureFlags.ENABLE_GETFRAGMENTIDENTIFIER_OPTIMIZATION) {
|
|
34
|
+
return fragmentOwnerIdentifier + '/' + fragmentNode.name + '/' + (fragmentVariables == null || isEmptyObject(fragmentVariables) ? '{}' : JSON.stringify(stableCopy(fragmentVariables))) + '/' + (typeof dataIDs === 'undefined' ? 'missing' : dataIDs == null ? 'null' : Array.isArray(dataIDs) ? '[' + dataIDs.join(',') + ']' : dataIDs);
|
|
35
|
+
} else {
|
|
36
|
+
var _JSON$stringify;
|
|
37
|
+
|
|
38
|
+
return fragmentOwnerIdentifier + '/' + fragmentNode.name + '/' + JSON.stringify(stableCopy(fragmentVariables)) + '/' + ((_JSON$stringify = JSON.stringify(dataIDs)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : 'missing');
|
|
39
|
+
}
|
|
31
40
|
}
|
|
32
41
|
|
|
33
42
|
module.exports = getFragmentIdentifier;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
* @emails oncall+relay
|
|
10
|
+
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
var _require = require('./RelayConcreteNode'),
|
|
15
|
+
REQUEST = _require.REQUEST,
|
|
16
|
+
SPLIT_OPERATION = _require.SPLIT_OPERATION;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* OperationLoaders can return either a NormalizationSplitOperation or
|
|
20
|
+
* ConcreteRequest.
|
|
21
|
+
*/
|
|
22
|
+
function getOperation(node) {
|
|
23
|
+
switch (node.kind) {
|
|
24
|
+
case REQUEST:
|
|
25
|
+
return node.operation;
|
|
26
|
+
|
|
27
|
+
case SPLIT_OPERATION:
|
|
28
|
+
default:
|
|
29
|
+
return node;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = getOperation;
|
|
@@ -19,8 +19,8 @@ var stableCopy = require('./stableCopy');
|
|
|
19
19
|
* variables.
|
|
20
20
|
*/
|
|
21
21
|
function getRequestIdentifier(parameters, variables) {
|
|
22
|
-
var requestID = parameters.
|
|
23
|
-
!(requestID != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'getRequestIdentifier: Expected request `%s` to have either a ' + 'valid `id` or `
|
|
22
|
+
var requestID = parameters.cacheID != null ? parameters.cacheID : parameters.id;
|
|
23
|
+
!(requestID != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'getRequestIdentifier: Expected request `%s` to have either a ' + 'valid `id` or `cacheID` property', parameters.name) : invariant(false) : void 0;
|
|
24
24
|
return requestID + JSON.stringify(stableCopy(variables));
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
* @emails oncall+relay
|
|
10
|
+
*/
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
14
|
+
|
|
15
|
+
function isEmptyObject(obj) {
|
|
16
|
+
for (var _key in obj) {
|
|
17
|
+
if (hasOwnProperty.call(obj, _key)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = isEmptyObject;
|
|
@@ -9,12 +9,15 @@
|
|
|
9
9
|
*/
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
|
+
|
|
13
|
+
var hasWeakSetDefined = typeof WeakSet !== 'undefined';
|
|
14
|
+
var hasWeakMapDefined = typeof WeakMap !== 'undefined';
|
|
12
15
|
/**
|
|
13
16
|
* Recycles subtrees from `prevData` by replacing equal subtrees in `nextData`.
|
|
14
17
|
*/
|
|
15
18
|
|
|
16
19
|
function recycleNodesInto(prevData, nextData) {
|
|
17
|
-
if (prevData === nextData || typeof prevData !== 'object' || !prevData || typeof nextData !== 'object' || !nextData) {
|
|
20
|
+
if (prevData === nextData || typeof prevData !== 'object' || prevData instanceof Set || prevData instanceof Map || hasWeakSetDefined && prevData instanceof WeakSet || hasWeakMapDefined && prevData instanceof WeakMap || !prevData || typeof nextData !== 'object' || nextData instanceof Set || nextData instanceof Map || hasWeakSetDefined && nextData instanceof WeakSet || hasWeakMapDefined && nextData instanceof WeakMap || !nextData) {
|
|
18
21
|
return nextData;
|
|
19
22
|
}
|
|
20
23
|
|
|
@@ -53,15 +56,11 @@ function recycleNodesInto(prevData, nextData) {
|
|
|
53
56
|
if (nextValue !== nextObject[key]) {
|
|
54
57
|
if (process.env.NODE_ENV !== "production") {
|
|
55
58
|
if (!Object.isFrozen(nextObject)) {
|
|
56
|
-
|
|
57
|
-
* comment suppresses an error found when Flow v0.98 was deployed.
|
|
58
|
-
* To see the error delete this comment and run Flow. */
|
|
59
|
+
// $FlowFixMe[cannot-write]
|
|
59
60
|
nextObject[key] = nextValue;
|
|
60
61
|
}
|
|
61
62
|
} else {
|
|
62
|
-
|
|
63
|
-
* suppresses an error found when Flow v0.98 was deployed. To see
|
|
64
|
-
* the error delete this comment and run Flow. */
|
|
63
|
+
// $FlowFixMe[cannot-write]
|
|
65
64
|
nextObject[key] = nextValue;
|
|
66
65
|
}
|
|
67
66
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @emails oncall+relay
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
function reportMissingRequiredFields(environment, missingRequiredFields) {
|
|
14
|
+
switch (missingRequiredFields.action) {
|
|
15
|
+
case 'THROW':
|
|
16
|
+
{
|
|
17
|
+
var _missingRequiredField = missingRequiredFields.field,
|
|
18
|
+
path = _missingRequiredField.path,
|
|
19
|
+
owner = _missingRequiredField.owner; // This gives the consumer the chance to throw their own error if they so wish.
|
|
20
|
+
|
|
21
|
+
environment.requiredFieldLogger({
|
|
22
|
+
kind: 'missing_field.throw',
|
|
23
|
+
owner: owner,
|
|
24
|
+
fieldPath: path
|
|
25
|
+
});
|
|
26
|
+
throw new Error("Relay: Missing @required value at path '".concat(path, "' in '").concat(owner, "'."));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
case 'LOG':
|
|
30
|
+
missingRequiredFields.fields.forEach(function (_ref) {
|
|
31
|
+
var path = _ref.path,
|
|
32
|
+
owner = _ref.owner;
|
|
33
|
+
environment.requiredFieldLogger({
|
|
34
|
+
kind: 'missing_field.log',
|
|
35
|
+
owner: owner,
|
|
36
|
+
fieldPath: path
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
break;
|
|
40
|
+
|
|
41
|
+
default:
|
|
42
|
+
{
|
|
43
|
+
missingRequiredFields.action;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = reportMissingRequiredFields;
|