relay-runtime 0.0.0-main-2499f53f → 0.0.0-main-47d9d202
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/index.js +1 -1
- package/index.js.flow +2 -2
- package/lib/index.js +3 -3
- package/lib/query/fetchQuery.js +2 -5
- package/lib/store/RelayModernFragmentSpecResolver.js +6 -6
- package/lib/store/RelayReader.js +52 -6
- package/lib/store/RelayStoreSubscriptions.js +4 -2
- package/lib/store/RelayStoreUtils.js +1 -0
- package/lib/store/ResolverCache.js +9 -4
- package/lib/util/handlePotentialSnapshotErrors.js +73 -0
- package/package.json +1 -1
- package/query/fetchQuery.js.flow +6 -4
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/RelayModernFragmentSpecResolver.js.flow +11 -7
- package/store/RelayReader.js.flow +50 -22
- package/store/RelayStoreSubscriptions.js.flow +2 -0
- package/store/RelayStoreTypes.js.flow +17 -3
- package/store/RelayStoreUtils.js.flow +1 -0
- package/store/ResolverCache.js.flow +32 -6
- package/util/handlePotentialSnapshotErrors.js.flow +63 -0
- package/lib/util/reportMissingRequiredFields.js +0 -48
- package/util/reportMissingRequiredFields.js.flow +0 -51
package/index.js
CHANGED
package/index.js.flow
CHANGED
|
@@ -59,6 +59,7 @@ const getRefetchMetadata = require('./util/getRefetchMetadata');
|
|
|
59
59
|
const getRelayHandleKey = require('./util/getRelayHandleKey');
|
|
60
60
|
const getRequestIdentifier = require('./util/getRequestIdentifier');
|
|
61
61
|
const getValueAtPath = require('./util/getValueAtPath');
|
|
62
|
+
const handlePotentialSnapshotErrors = require('./util/handlePotentialSnapshotErrors');
|
|
62
63
|
const isPromise = require('./util/isPromise');
|
|
63
64
|
const isScalarAndEqual = require('./util/isScalarAndEqual');
|
|
64
65
|
const recycleNodesInto = require('./util/recycleNodesInto');
|
|
@@ -68,7 +69,6 @@ const RelayError = require('./util/RelayError');
|
|
|
68
69
|
const RelayFeatureFlags = require('./util/RelayFeatureFlags');
|
|
69
70
|
const RelayProfiler = require('./util/RelayProfiler');
|
|
70
71
|
const RelayReplaySubject = require('./util/RelayReplaySubject');
|
|
71
|
-
const reportMissingRequiredFields = require('./util/reportMissingRequiredFields');
|
|
72
72
|
const stableCopy = require('./util/stableCopy');
|
|
73
73
|
const withProvidedVariables = require('./util/withProvidedVariables');
|
|
74
74
|
|
|
@@ -291,7 +291,7 @@ module.exports = {
|
|
|
291
291
|
RelayModernSelector.getVariablesFromPluralFragment,
|
|
292
292
|
getVariablesFromSingularFragment:
|
|
293
293
|
RelayModernSelector.getVariablesFromSingularFragment,
|
|
294
|
-
|
|
294
|
+
handlePotentialSnapshotErrors,
|
|
295
295
|
graphql: GraphQLTag.graphql,
|
|
296
296
|
isFragment: GraphQLTag.isFragment,
|
|
297
297
|
isInlineDataFragment: GraphQLTag.isInlineDataFragment,
|
package/lib/index.js
CHANGED
|
@@ -99,6 +99,8 @@ var getRequestIdentifier = require('./util/getRequestIdentifier');
|
|
|
99
99
|
|
|
100
100
|
var getValueAtPath = require('./util/getValueAtPath');
|
|
101
101
|
|
|
102
|
+
var handlePotentialSnapshotErrors = require('./util/handlePotentialSnapshotErrors');
|
|
103
|
+
|
|
102
104
|
var isPromise = require('./util/isPromise');
|
|
103
105
|
|
|
104
106
|
var isScalarAndEqual = require('./util/isScalarAndEqual');
|
|
@@ -117,8 +119,6 @@ var RelayProfiler = require('./util/RelayProfiler');
|
|
|
117
119
|
|
|
118
120
|
var RelayReplaySubject = require('./util/RelayReplaySubject');
|
|
119
121
|
|
|
120
|
-
var reportMissingRequiredFields = require('./util/reportMissingRequiredFields');
|
|
121
|
-
|
|
122
122
|
var stableCopy = require('./util/stableCopy');
|
|
123
123
|
|
|
124
124
|
var withProvidedVariables = require('./util/withProvidedVariables');
|
|
@@ -176,7 +176,7 @@ module.exports = {
|
|
|
176
176
|
getVariablesFromObject: RelayModernSelector.getVariablesFromObject,
|
|
177
177
|
getVariablesFromPluralFragment: RelayModernSelector.getVariablesFromPluralFragment,
|
|
178
178
|
getVariablesFromSingularFragment: RelayModernSelector.getVariablesFromSingularFragment,
|
|
179
|
-
|
|
179
|
+
handlePotentialSnapshotErrors: handlePotentialSnapshotErrors,
|
|
180
180
|
graphql: GraphQLTag.graphql,
|
|
181
181
|
isFragment: GraphQLTag.isFragment,
|
|
182
182
|
isInlineDataFragment: GraphQLTag.isInlineDataFragment,
|
package/lib/query/fetchQuery.js
CHANGED
|
@@ -20,7 +20,7 @@ var RelayObservable = require('../network/RelayObservable');
|
|
|
20
20
|
var _require = require('../store/RelayModernOperationDescriptor'),
|
|
21
21
|
createOperationDescriptor = _require.createOperationDescriptor;
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var handlePotentialSnapshotErrors = require('../util/handlePotentialSnapshotErrors');
|
|
24
24
|
|
|
25
25
|
var fetchQueryInternal = require('./fetchQueryInternal');
|
|
26
26
|
|
|
@@ -119,13 +119,10 @@ function fetchQuery(environment, query, variables, options) {
|
|
|
119
119
|
var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'network-only';
|
|
120
120
|
|
|
121
121
|
function readData(snapshot) {
|
|
122
|
-
|
|
123
|
-
reportMissingRequiredFields(environment, snapshot.missingRequiredFields);
|
|
124
|
-
}
|
|
122
|
+
handlePotentialSnapshotErrors(environment, snapshot.missingRequiredFields, snapshot.relayResolverErrors);
|
|
125
123
|
/* $FlowFixMe[incompatible-return] we assume readData returns the right
|
|
126
124
|
* data just having written it from network or checked availability. */
|
|
127
125
|
|
|
128
|
-
|
|
129
126
|
return snapshot.data;
|
|
130
127
|
}
|
|
131
128
|
|
|
@@ -18,14 +18,14 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
18
18
|
|
|
19
19
|
var getPendingOperationsForFragment = require('../util/getPendingOperationsForFragment');
|
|
20
20
|
|
|
21
|
+
var handlePotentialSnapshotErrors = require('../util/handlePotentialSnapshotErrors');
|
|
22
|
+
|
|
21
23
|
var isScalarAndEqual = require('../util/isScalarAndEqual');
|
|
22
24
|
|
|
23
25
|
var recycleNodesInto = require('../util/recycleNodesInto');
|
|
24
26
|
|
|
25
27
|
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
26
28
|
|
|
27
|
-
var reportMissingRequiredFields = require('../util/reportMissingRequiredFields');
|
|
28
|
-
|
|
29
29
|
var _require = require('./RelayModernOperationDescriptor'),
|
|
30
30
|
createRequestDescriptor = _require.createRequestDescriptor;
|
|
31
31
|
|
|
@@ -206,6 +206,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
206
206
|
_this2._data = snapshot.data;
|
|
207
207
|
_this2._isMissingData = snapshot.isMissingData;
|
|
208
208
|
_this2._missingRequiredFields = snapshot.missingRequiredFields;
|
|
209
|
+
_this2._relayResolverErrors = snapshot.relayResolverErrors;
|
|
209
210
|
|
|
210
211
|
_this2._callback();
|
|
211
212
|
});
|
|
@@ -216,6 +217,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
216
217
|
this._data = _snapshot.data;
|
|
217
218
|
this._isMissingData = _snapshot.isMissingData;
|
|
218
219
|
this._missingRequiredFields = _snapshot.missingRequiredFields;
|
|
220
|
+
this._relayResolverErrors = _snapshot.relayResolverErrors;
|
|
219
221
|
this._environment = environment;
|
|
220
222
|
this._rootIsQueryRenderer = rootIsQueryRenderer;
|
|
221
223
|
this._selector = selector;
|
|
@@ -289,10 +291,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
289
291
|
}
|
|
290
292
|
}
|
|
291
293
|
|
|
292
|
-
|
|
293
|
-
reportMissingRequiredFields(this._environment, this._missingRequiredFields);
|
|
294
|
-
}
|
|
295
|
-
|
|
294
|
+
handlePotentialSnapshotErrors(this._environment, this._missingRequiredFields, this._relayResolverErrors);
|
|
296
295
|
return this._data;
|
|
297
296
|
};
|
|
298
297
|
|
|
@@ -308,6 +307,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
308
307
|
this._data = recycleNodesInto(this._data, snapshot.data);
|
|
309
308
|
this._isMissingData = snapshot.isMissingData;
|
|
310
309
|
this._missingRequiredFields = snapshot.missingRequiredFields;
|
|
310
|
+
this._relayResolverErrors = snapshot.relayResolverErrors;
|
|
311
311
|
this._selector = selector;
|
|
312
312
|
this._subscription = this._environment.subscribe(snapshot, this._onChange);
|
|
313
313
|
};
|
package/lib/store/RelayReader.js
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
|
+
|
|
15
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
18
|
|
|
17
19
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
@@ -90,6 +92,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
90
92
|
this._selector = selector;
|
|
91
93
|
this._variables = selector.variables;
|
|
92
94
|
this._resolverCache = resolverCache;
|
|
95
|
+
this._resolverErrors = [];
|
|
93
96
|
this._fragmentName = selector.node.name;
|
|
94
97
|
}
|
|
95
98
|
|
|
@@ -164,7 +167,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
164
167
|
missingClientEdges: RelayFeatureFlags.ENABLE_CLIENT_EDGES && this._missingClientEdges.length ? this._missingClientEdges : null,
|
|
165
168
|
seenRecords: this._seenRecords,
|
|
166
169
|
selector: this._selector,
|
|
167
|
-
missingRequiredFields: this._missingRequiredFields
|
|
170
|
+
missingRequiredFields: this._missingRequiredFields,
|
|
171
|
+
relayResolverErrors: this._resolverErrors
|
|
168
172
|
};
|
|
169
173
|
};
|
|
170
174
|
|
|
@@ -497,6 +501,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
497
501
|
var fragmentReaderSelector;
|
|
498
502
|
var fragmentMissingRequiredFields;
|
|
499
503
|
var previousMissingRequriedFields;
|
|
504
|
+
var currentResolverErrors;
|
|
505
|
+
var previousResolverErrors;
|
|
500
506
|
var fragmentSeenRecordIDs = new Set();
|
|
501
507
|
|
|
502
508
|
var getDataForResolverFragment = function getDataForResolverFragment(singularReaderSelector) {
|
|
@@ -517,16 +523,20 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
517
523
|
var resolverFragmentData = {};
|
|
518
524
|
previousMissingRequriedFields = _this._missingRequiredFields;
|
|
519
525
|
_this._missingRequiredFields = null;
|
|
526
|
+
previousResolverErrors = _this._resolverErrors;
|
|
527
|
+
_this._resolverErrors = [];
|
|
520
528
|
|
|
521
529
|
_this._createInlineDataOrResolverFragmentPointer(singularReaderSelector.node, record, resolverFragmentData);
|
|
522
530
|
|
|
523
531
|
fragmentMissingRequiredFields = _this._missingRequiredFields;
|
|
532
|
+
currentResolverErrors = _this._resolverErrors;
|
|
524
533
|
fragmentValue = (_resolverFragmentData = resolverFragmentData[FRAGMENTS_KEY]) === null || _resolverFragmentData === void 0 ? void 0 : _resolverFragmentData[fragment.name];
|
|
525
534
|
!(typeof fragmentValue === 'object' && fragmentValue !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, "Expected reader data to contain a __fragments property with a property for the fragment named ".concat(fragment.name, ", but it is missing.")) : invariant(false) : void 0;
|
|
526
535
|
return fragmentValue;
|
|
527
536
|
} finally {
|
|
528
537
|
_this._seenRecords = existingSeenRecords;
|
|
529
538
|
_this._missingRequiredFields = previousMissingRequriedFields;
|
|
539
|
+
_this._resolverErrors = previousResolverErrors;
|
|
530
540
|
}
|
|
531
541
|
};
|
|
532
542
|
|
|
@@ -534,17 +544,35 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
534
544
|
getDataForResolverFragment: getDataForResolverFragment
|
|
535
545
|
};
|
|
536
546
|
|
|
537
|
-
var
|
|
547
|
+
var evaluate = function evaluate() {
|
|
538
548
|
var key = {
|
|
539
549
|
__id: RelayModernRecord.getDataID(record),
|
|
540
550
|
__fragmentOwner: _this._owner,
|
|
541
551
|
__fragments: (0, _defineProperty2["default"])({}, fragment.name, {})
|
|
542
552
|
};
|
|
543
553
|
return withResolverContext(resolverContext, function () {
|
|
544
|
-
|
|
545
|
-
|
|
554
|
+
var resolverResult = null;
|
|
555
|
+
|
|
556
|
+
try {
|
|
557
|
+
// $FlowFixMe[prop-missing] - resolver module's type signature is a lie
|
|
558
|
+
resolverResult = resolverModule(key);
|
|
559
|
+
} catch (e) {
|
|
560
|
+
var _field$path;
|
|
561
|
+
|
|
562
|
+
// `field.path` is typed as nullable while we rollout compiler changes.
|
|
563
|
+
var path = (_field$path = field.path) !== null && _field$path !== void 0 ? _field$path : '[UNKNOWN]';
|
|
564
|
+
currentResolverErrors.push({
|
|
565
|
+
field: {
|
|
566
|
+
path: path,
|
|
567
|
+
owner: _this._fragmentName
|
|
568
|
+
},
|
|
569
|
+
error: e
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
|
|
546
573
|
return {
|
|
547
574
|
resolverResult: resolverResult,
|
|
575
|
+
errors: currentResolverErrors,
|
|
548
576
|
fragmentValue: fragmentValue,
|
|
549
577
|
resolverID: resolverID,
|
|
550
578
|
seenRecordIDs: fragmentSeenRecordIDs,
|
|
@@ -552,10 +580,28 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
552
580
|
missingRequiredFields: fragmentMissingRequiredFields
|
|
553
581
|
};
|
|
554
582
|
});
|
|
555
|
-
}
|
|
583
|
+
};
|
|
584
|
+
|
|
585
|
+
var _this$_resolverCache$ = this._resolverCache.readFromCacheOrEvaluate(record, field, this._variables, evaluate, getDataForResolverFragment),
|
|
556
586
|
result = _this$_resolverCache$[0],
|
|
557
587
|
seenRecord = _this$_resolverCache$[1],
|
|
558
|
-
|
|
588
|
+
resolverErrors = _this$_resolverCache$[2],
|
|
589
|
+
missingRequiredFields = _this$_resolverCache$[3];
|
|
590
|
+
|
|
591
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(resolverErrors),
|
|
592
|
+
_step;
|
|
593
|
+
|
|
594
|
+
try {
|
|
595
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
596
|
+
var resolverError = _step.value;
|
|
597
|
+
|
|
598
|
+
this._resolverErrors.push(resolverError);
|
|
599
|
+
}
|
|
600
|
+
} catch (err) {
|
|
601
|
+
_iterator.e(err);
|
|
602
|
+
} finally {
|
|
603
|
+
_iterator.f();
|
|
604
|
+
}
|
|
559
605
|
|
|
560
606
|
if (missingRequiredFields != null) {
|
|
561
607
|
this._addMissingRequiredFields(missingRequiredFields);
|
|
@@ -96,7 +96,8 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
96
96
|
missingClientEdges: backup.missingClientEdges,
|
|
97
97
|
seenRecords: backup.seenRecords,
|
|
98
98
|
selector: backup.selector,
|
|
99
|
-
missingRequiredFields: backup.missingRequiredFields
|
|
99
|
+
missingRequiredFields: backup.missingRequiredFields,
|
|
100
|
+
relayResolverErrors: backup.relayResolverErrors
|
|
100
101
|
};
|
|
101
102
|
} else {
|
|
102
103
|
subscription.stale = true;
|
|
@@ -146,7 +147,8 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
146
147
|
missingClientEdges: nextSnapshot.missingClientEdges,
|
|
147
148
|
seenRecords: nextSnapshot.seenRecords,
|
|
148
149
|
selector: nextSnapshot.selector,
|
|
149
|
-
missingRequiredFields: nextSnapshot.missingRequiredFields
|
|
150
|
+
missingRequiredFields: nextSnapshot.missingRequiredFields,
|
|
151
|
+
relayResolverErrors: nextSnapshot.relayResolverErrors
|
|
150
152
|
};
|
|
151
153
|
|
|
152
154
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -212,6 +212,7 @@ var RelayStoreUtils = {
|
|
|
212
212
|
RELAY_RESOLVER_INPUTS_KEY: '__resolverInputValues',
|
|
213
213
|
RELAY_RESOLVER_READER_SELECTOR_KEY: '__resolverReaderSelector',
|
|
214
214
|
RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY: '__resolverMissingRequiredFields',
|
|
215
|
+
RELAY_RESOLVER_ERROR_KEY: '__resolverError',
|
|
215
216
|
formatStorageKey: formatStorageKey,
|
|
216
217
|
getArgumentValue: getArgumentValue,
|
|
217
218
|
getArgumentValues: getArgumentValues,
|
|
@@ -22,6 +22,7 @@ var _require = require('./ClientID'),
|
|
|
22
22
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
23
23
|
|
|
24
24
|
var _require2 = require('./RelayStoreUtils'),
|
|
25
|
+
RELAY_RESOLVER_ERROR_KEY = _require2.RELAY_RESOLVER_ERROR_KEY,
|
|
25
26
|
RELAY_RESOLVER_INPUTS_KEY = _require2.RELAY_RESOLVER_INPUTS_KEY,
|
|
26
27
|
RELAY_RESOLVER_INVALIDATION_KEY = _require2.RELAY_RESOLVER_INVALIDATION_KEY,
|
|
27
28
|
RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY = _require2.RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY,
|
|
@@ -42,9 +43,10 @@ var NoopResolverCache = /*#__PURE__*/function () {
|
|
|
42
43
|
_proto.readFromCacheOrEvaluate = function readFromCacheOrEvaluate(record, field, variables, evaluate, getDataForResolverFragment) {
|
|
43
44
|
var _evaluate = evaluate(),
|
|
44
45
|
resolverResult = _evaluate.resolverResult,
|
|
45
|
-
missingRequiredFields = _evaluate.missingRequiredFields
|
|
46
|
+
missingRequiredFields = _evaluate.missingRequiredFields,
|
|
47
|
+
errors = _evaluate.errors;
|
|
46
48
|
|
|
47
|
-
return [resolverResult, undefined, missingRequiredFields];
|
|
49
|
+
return [resolverResult, undefined, errors, missingRequiredFields];
|
|
48
50
|
};
|
|
49
51
|
|
|
50
52
|
_proto.invalidateDataIDs = function invalidateDataIDs(updatedDataIDs) {};
|
|
@@ -91,6 +93,7 @@ var RecordResolverCache = /*#__PURE__*/function () {
|
|
|
91
93
|
RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_INPUTS_KEY, evaluationResult.fragmentValue);
|
|
92
94
|
RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_READER_SELECTOR_KEY, evaluationResult.readerSelector);
|
|
93
95
|
RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY, evaluationResult.missingRequiredFields);
|
|
96
|
+
RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_ERROR_KEY, evaluationResult.errors);
|
|
94
97
|
recordSource.set(linkedID, linkedRecord); // Link the resolver value record to the resolver field of the record being read:
|
|
95
98
|
|
|
96
99
|
var nextRecord = RelayModernRecord.clone(record);
|
|
@@ -119,8 +122,10 @@ var RecordResolverCache = /*#__PURE__*/function () {
|
|
|
119
122
|
|
|
120
123
|
var answer = linkedRecord[RELAY_RESOLVER_VALUE_KEY];
|
|
121
124
|
var missingRequiredFields = // $FlowFixMe[incompatible-type] - casting mixed
|
|
122
|
-
linkedRecord[RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY];
|
|
123
|
-
|
|
125
|
+
linkedRecord[RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
|
|
126
|
+
|
|
127
|
+
var errors = linkedRecord[RELAY_RESOLVER_ERROR_KEY];
|
|
128
|
+
return [answer, linkedID, errors, missingRequiredFields];
|
|
124
129
|
};
|
|
125
130
|
|
|
126
131
|
_proto2.invalidateDataIDs = function invalidateDataIDs(updatedDataIDs) {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and 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
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
|
+
|
|
15
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
|
+
|
|
17
|
+
function handlePotentialSnapshotErrors(environment, missingRequiredFields, relayResolverErrors) {
|
|
18
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(relayResolverErrors),
|
|
19
|
+
_step;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
23
|
+
var resolverError = _step.value;
|
|
24
|
+
environment.requiredFieldLogger({
|
|
25
|
+
kind: 'relay_resolver.error',
|
|
26
|
+
owner: resolverError.field.owner,
|
|
27
|
+
fieldPath: resolverError.field.path,
|
|
28
|
+
error: resolverError.error
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
} catch (err) {
|
|
32
|
+
_iterator.e(err);
|
|
33
|
+
} finally {
|
|
34
|
+
_iterator.f();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (missingRequiredFields != null) {
|
|
38
|
+
switch (missingRequiredFields.action) {
|
|
39
|
+
case 'THROW':
|
|
40
|
+
{
|
|
41
|
+
var _missingRequiredField = missingRequiredFields.field,
|
|
42
|
+
path = _missingRequiredField.path,
|
|
43
|
+
owner = _missingRequiredField.owner; // This gives the consumer the chance to throw their own error if they so wish.
|
|
44
|
+
|
|
45
|
+
environment.requiredFieldLogger({
|
|
46
|
+
kind: 'missing_field.throw',
|
|
47
|
+
owner: owner,
|
|
48
|
+
fieldPath: path
|
|
49
|
+
});
|
|
50
|
+
throw new Error("Relay: Missing @required value at path '".concat(path, "' in '").concat(owner, "'."));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
case 'LOG':
|
|
54
|
+
missingRequiredFields.fields.forEach(function (_ref) {
|
|
55
|
+
var path = _ref.path,
|
|
56
|
+
owner = _ref.owner;
|
|
57
|
+
environment.requiredFieldLogger({
|
|
58
|
+
kind: 'missing_field.log',
|
|
59
|
+
owner: owner,
|
|
60
|
+
fieldPath: path
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
break;
|
|
64
|
+
|
|
65
|
+
default:
|
|
66
|
+
{
|
|
67
|
+
missingRequiredFields.action;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = handlePotentialSnapshotErrors;
|
package/package.json
CHANGED
package/query/fetchQuery.js.flow
CHANGED
|
@@ -30,7 +30,7 @@ const RelayObservable = require('../network/RelayObservable');
|
|
|
30
30
|
const {
|
|
31
31
|
createOperationDescriptor,
|
|
32
32
|
} = require('../store/RelayModernOperationDescriptor');
|
|
33
|
-
const
|
|
33
|
+
const handlePotentialSnapshotErrors = require('../util/handlePotentialSnapshotErrors');
|
|
34
34
|
const fetchQueryInternal = require('./fetchQueryInternal');
|
|
35
35
|
const {getRequest} = require('./GraphQLTag');
|
|
36
36
|
const invariant = require('invariant');
|
|
@@ -138,9 +138,11 @@ function fetchQuery<TVariables: Variables, TData, TRawResponse>(
|
|
|
138
138
|
const fetchPolicy = options?.fetchPolicy ?? 'network-only';
|
|
139
139
|
|
|
140
140
|
function readData(snapshot: Snapshot): TData {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
handlePotentialSnapshotErrors(
|
|
142
|
+
environment,
|
|
143
|
+
snapshot.missingRequiredFields,
|
|
144
|
+
snapshot.relayResolverErrors,
|
|
145
|
+
);
|
|
144
146
|
/* $FlowFixMe[incompatible-return] we assume readData returns the right
|
|
145
147
|
* data just having written it from network or checked availability. */
|
|
146
148
|
return snapshot.data;
|