relay-runtime 0.0.0-main-b6199194 → 0.0.0-main-042ceca3
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/experimental.js +1 -1
- package/index.js +1 -1
- package/index.js.flow +0 -1
- package/lib/query/fetchQuery.js +1 -2
- package/lib/store/RelayErrorTrie.js +1 -17
- package/lib/store/RelayModernFragmentSpecResolver.js +1 -5
- package/lib/store/RelayReader.js +43 -77
- package/lib/store/RelayStoreSubscriptions.js +0 -2
- package/lib/store/ResolverFragments.js +4 -2
- package/lib/store/observeFragmentExperimental.js +1 -2
- package/lib/util/handlePotentialSnapshotErrors.js +44 -62
- package/package.json +1 -1
- package/query/fetchQuery.js.flow +1 -6
- package/relay-runtime-experimental.js +2 -2
- package/relay-runtime-experimental.min.js +2 -2
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/RelayErrorTrie.js.flow +0 -12
- package/store/RelayModernFragmentSpecResolver.js.flow +1 -11
- package/store/RelayReader.js.flow +78 -97
- package/store/RelayStoreSubscriptions.js.flow +0 -2
- package/store/RelayStoreTypes.js.flow +30 -18
- package/store/ResolverCache.js.flow +2 -2
- package/store/ResolverFragments.js.flow +6 -3
- package/store/observeFragmentExperimental.js.flow +1 -6
- package/util/handlePotentialSnapshotErrors.js.flow +47 -62
package/experimental.js
CHANGED
package/index.js
CHANGED
package/index.js.flow
CHANGED
package/lib/query/fetchQuery.js
CHANGED
|
@@ -20,8 +20,7 @@ function fetchQuery(environment, query, variables, options) {
|
|
|
20
20
|
var operation = createOperationDescriptor(queryNode, variables, networkCacheConfig);
|
|
21
21
|
var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'network-only';
|
|
22
22
|
function readData(snapshot) {
|
|
23
|
-
|
|
24
|
-
handlePotentialSnapshotErrors(environment, snapshot.missingRequiredFields, snapshot.errorResponseFields, (_queryNode$fragment$m = (_queryNode$fragment$m2 = queryNode.fragment.metadata) === null || _queryNode$fragment$m2 === void 0 ? void 0 : _queryNode$fragment$m2.throwOnFieldError) !== null && _queryNode$fragment$m !== void 0 ? _queryNode$fragment$m : false);
|
|
23
|
+
handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields);
|
|
25
24
|
return snapshot.data;
|
|
26
25
|
}
|
|
27
26
|
switch (fetchPolicy) {
|
|
@@ -4,24 +4,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
5
5
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
6
6
|
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
7
|
-
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
|
|
8
|
-
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
9
7
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
8
|
var _excluded = ["path", "locations"];
|
|
11
9
|
var SELF = Symbol('$SELF');
|
|
12
|
-
var RelayFieldError = /*#__PURE__*/function (_Error) {
|
|
13
|
-
(0, _inheritsLoose2["default"])(RelayFieldError, _Error);
|
|
14
|
-
function RelayFieldError(message) {
|
|
15
|
-
var _this;
|
|
16
|
-
var errors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
17
|
-
_this = _Error.call(this, message) || this;
|
|
18
|
-
_this.name = 'RelayFieldError';
|
|
19
|
-
_this.message = message;
|
|
20
|
-
_this.errors = errors;
|
|
21
|
-
return _this;
|
|
22
|
-
}
|
|
23
|
-
return RelayFieldError;
|
|
24
|
-
}(/*#__PURE__*/(0, _wrapNativeSuper2["default"])(Error));
|
|
25
10
|
function buildErrorTrie(errors) {
|
|
26
11
|
if (errors == null) {
|
|
27
12
|
return null;
|
|
@@ -136,6 +121,5 @@ module.exports = {
|
|
|
136
121
|
SELF: SELF,
|
|
137
122
|
buildErrorTrie: buildErrorTrie,
|
|
138
123
|
getNestedErrorTrieByKey: getNestedErrorTrieByKey,
|
|
139
|
-
getErrorsByKey: getErrorsByKey
|
|
140
|
-
RelayFieldError: RelayFieldError
|
|
124
|
+
getErrorsByKey: getErrorsByKey
|
|
141
125
|
};
|
|
@@ -131,7 +131,6 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
131
131
|
(0, _defineProperty2["default"])(this, "_onChange", function (snapshot) {
|
|
132
132
|
_this2._data = snapshot.data;
|
|
133
133
|
_this2._isMissingData = snapshot.isMissingData;
|
|
134
|
-
_this2._missingRequiredFields = snapshot.missingRequiredFields;
|
|
135
134
|
_this2._errorResponseFields = snapshot.errorResponseFields;
|
|
136
135
|
_this2._callback();
|
|
137
136
|
});
|
|
@@ -139,7 +138,6 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
139
138
|
this._callback = callback;
|
|
140
139
|
this._data = _snapshot.data;
|
|
141
140
|
this._isMissingData = _snapshot.isMissingData;
|
|
142
|
-
this._missingRequiredFields = _snapshot.missingRequiredFields;
|
|
143
141
|
this._errorResponseFields = _snapshot.errorResponseFields;
|
|
144
142
|
this._environment = environment;
|
|
145
143
|
this._rootIsQueryRenderer = rootIsQueryRenderer;
|
|
@@ -160,7 +158,6 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
160
158
|
}
|
|
161
159
|
};
|
|
162
160
|
_proto2.resolve = function resolve() {
|
|
163
|
-
var _this$_selector$node$, _this$_selector$node$2;
|
|
164
161
|
if (this._isMissingData === true) {
|
|
165
162
|
var pendingOperationsResult = getPendingOperationsForFragment(this._environment, this._selector.node, this._selector.owner);
|
|
166
163
|
var promise = pendingOperationsResult === null || pendingOperationsResult === void 0 ? void 0 : pendingOperationsResult.promise;
|
|
@@ -184,7 +181,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
184
181
|
}
|
|
185
182
|
}
|
|
186
183
|
}
|
|
187
|
-
handlePotentialSnapshotErrors(this._environment, this.
|
|
184
|
+
handlePotentialSnapshotErrors(this._environment, this._errorResponseFields);
|
|
188
185
|
return this._data;
|
|
189
186
|
};
|
|
190
187
|
_proto2.setSelector = function setSelector(selector) {
|
|
@@ -195,7 +192,6 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
195
192
|
var snapshot = this._environment.lookup(selector);
|
|
196
193
|
this._data = recycleNodesInto(this._data, snapshot.data);
|
|
197
194
|
this._isMissingData = snapshot.isMissingData;
|
|
198
|
-
this._missingRequiredFields = snapshot.missingRequiredFields;
|
|
199
195
|
this._errorResponseFields = snapshot.errorResponseFields;
|
|
200
196
|
this._selector = selector;
|
|
201
197
|
this._subscription = this._environment.subscribe(snapshot, this._onChange);
|
package/lib/store/RelayReader.js
CHANGED
|
@@ -42,7 +42,6 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
42
42
|
this._missingLiveResolverFields = [];
|
|
43
43
|
this._isMissingData = false;
|
|
44
44
|
this._isWithinUnmatchedTypeRefinement = false;
|
|
45
|
-
this._missingRequiredFields = null;
|
|
46
45
|
this._errorResponseFields = null;
|
|
47
46
|
this._owner = selector.owner;
|
|
48
47
|
this._recordSource = recordSource;
|
|
@@ -87,7 +86,6 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
87
86
|
missingLiveResolverFields: this._missingLiveResolverFields,
|
|
88
87
|
seenRecords: this._seenRecords,
|
|
89
88
|
selector: this._selector,
|
|
90
|
-
missingRequiredFields: this._missingRequiredFields,
|
|
91
89
|
errorResponseFields: this._errorResponseFields
|
|
92
90
|
};
|
|
93
91
|
};
|
|
@@ -111,7 +109,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
111
109
|
owner: owner,
|
|
112
110
|
fieldPath: ((_error$path = error.path) !== null && _error$path !== void 0 ? _error$path : []).join('.'),
|
|
113
111
|
error: error,
|
|
114
|
-
shouldThrow: (_this$_selector$node$ = (_this$_selector$node$2 = this._selector.node.metadata) === null || _this$_selector$node$2 === void 0 ? void 0 : _this$_selector$node$2.throwOnFieldError) !== null && _this$_selector$node$ !== void 0 ? _this$_selector$node$ : false
|
|
112
|
+
shouldThrow: (_this$_selector$node$ = (_this$_selector$node$2 = this._selector.node.metadata) === null || _this$_selector$node$2 === void 0 ? void 0 : _this$_selector$node$2.throwOnFieldError) !== null && _this$_selector$node$ !== void 0 ? _this$_selector$node$ : false,
|
|
113
|
+
handled: false
|
|
115
114
|
});
|
|
116
115
|
}
|
|
117
116
|
} catch (err) {
|
|
@@ -130,7 +129,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
130
129
|
this._errorResponseFields.push(((_this$_selector$node$3 = (_this$_selector$node$4 = this._selector.node.metadata) === null || _this$_selector$node$4 === void 0 ? void 0 : _this$_selector$node$4.throwOnFieldError) !== null && _this$_selector$node$3 !== void 0 ? _this$_selector$node$3 : false) ? {
|
|
131
130
|
kind: 'missing_expected_data.throw',
|
|
132
131
|
owner: owner,
|
|
133
|
-
fieldPath: fieldPath
|
|
132
|
+
fieldPath: fieldPath,
|
|
133
|
+
handled: false
|
|
134
134
|
} : {
|
|
135
135
|
kind: 'missing_expected_data.log',
|
|
136
136
|
owner: owner,
|
|
@@ -165,46 +165,32 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
165
165
|
return this._variables[name];
|
|
166
166
|
};
|
|
167
167
|
_proto._maybeReportUnexpectedNull = function _maybeReportUnexpectedNull(fieldPath, action) {
|
|
168
|
-
var _this$_missingRequire;
|
|
169
|
-
if (((_this$_missingRequire = this._missingRequiredFields) === null || _this$_missingRequire === void 0 ? void 0 : _this$_missingRequire.action) === 'THROW') {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
168
|
var owner = this._fragmentName;
|
|
169
|
+
if (this._errorResponseFields == null) {
|
|
170
|
+
this._errorResponseFields = [];
|
|
171
|
+
}
|
|
173
172
|
switch (action) {
|
|
174
173
|
case 'THROW':
|
|
175
|
-
this.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
};
|
|
174
|
+
this._errorResponseFields.push({
|
|
175
|
+
kind: 'missing_required_field.throw',
|
|
176
|
+
fieldPath: fieldPath,
|
|
177
|
+
owner: owner,
|
|
178
|
+
handled: false
|
|
179
|
+
});
|
|
182
180
|
return;
|
|
183
181
|
case 'LOG':
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
owner: owner
|
|
190
|
-
}]
|
|
191
|
-
};
|
|
192
|
-
} else {
|
|
193
|
-
this._missingRequiredFields = {
|
|
194
|
-
action: action,
|
|
195
|
-
fields: [].concat((0, _toConsumableArray2["default"])(this._missingRequiredFields.fields), [{
|
|
196
|
-
path: fieldPath,
|
|
197
|
-
owner: owner
|
|
198
|
-
}])
|
|
199
|
-
};
|
|
200
|
-
}
|
|
182
|
+
this._errorResponseFields.push({
|
|
183
|
+
kind: 'missing_required_field.log',
|
|
184
|
+
fieldPath: fieldPath,
|
|
185
|
+
owner: owner
|
|
186
|
+
});
|
|
201
187
|
return;
|
|
202
188
|
default:
|
|
203
189
|
action;
|
|
204
190
|
}
|
|
205
191
|
};
|
|
206
192
|
_proto._handleCatchToResult = function _handleCatchToResult(selection, record, data, value) {
|
|
207
|
-
var _selection$field$back, _selection$field, _field$alias, _this$_errorResponseF
|
|
193
|
+
var _selection$field$back, _selection$field, _field$alias, _this$_errorResponseF;
|
|
208
194
|
var field = (_selection$field$back = (_selection$field = selection.field) === null || _selection$field === void 0 ? void 0 : _selection$field.backingField) !== null && _selection$field$back !== void 0 ? _selection$field$back : selection.field;
|
|
209
195
|
var fieldName = (_field$alias = field === null || field === void 0 ? void 0 : field.alias) !== null && _field$alias !== void 0 ? _field$alias : field === null || field === void 0 ? void 0 : field.name;
|
|
210
196
|
!(fieldName != null) ? process.env.NODE_ENV !== "production" ? invariant(false, "Couldn't determine field name for this field. It might be a ReaderClientExtension - which is not yet supported.") : invariant(false) : void 0;
|
|
@@ -224,24 +210,17 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
224
210
|
return {
|
|
225
211
|
message: "Relay: Error in resolver for field at ".concat(error.fieldPath, " in ").concat(error.owner)
|
|
226
212
|
};
|
|
213
|
+
case 'missing_required_field.throw':
|
|
214
|
+
return {
|
|
215
|
+
message: "Relay: Missing @required value at path '".concat(error.fieldPath, "' in '").concat(error.owner, "'.")
|
|
216
|
+
};
|
|
217
|
+
case 'missing_required_field.log':
|
|
218
|
+
return null;
|
|
227
219
|
default:
|
|
228
220
|
error.kind;
|
|
229
221
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unexpected error errorResponseField kind: %s', error.kind) : invariant(false) : void 0;
|
|
230
222
|
}
|
|
231
|
-
});
|
|
232
|
-
if (((_this$_missingRequire2 = this._missingRequiredFields) === null || _this$_missingRequire2 === void 0 ? void 0 : _this$_missingRequire2.action) === 'THROW') {
|
|
233
|
-
var _this$_missingRequire3 = this._missingRequiredFields.field,
|
|
234
|
-
owner = _this$_missingRequire3.owner,
|
|
235
|
-
path = _this$_missingRequire3.path;
|
|
236
|
-
var missingFieldError = {
|
|
237
|
-
message: "Relay: Missing @required value at path '".concat(path, "' in '").concat(owner, "'.")
|
|
238
|
-
};
|
|
239
|
-
if (errors == null) {
|
|
240
|
-
errors = [missingFieldError];
|
|
241
|
-
} else {
|
|
242
|
-
errors.push(missingFieldError);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
223
|
+
}).filter(Boolean);
|
|
245
224
|
data[fieldName] = errors != null ? {
|
|
246
225
|
ok: false,
|
|
247
226
|
errors: errors
|
|
@@ -273,18 +252,24 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
273
252
|
case 'CatchField':
|
|
274
253
|
{
|
|
275
254
|
var previousResponseFields = this._errorResponseFields;
|
|
276
|
-
var previousMissingRequiredFields = this._missingRequiredFields;
|
|
277
255
|
this._errorResponseFields = null;
|
|
278
|
-
this._missingRequiredFields = null;
|
|
279
256
|
var catchFieldValue = this._readClientSideDirectiveField(selection, record, data);
|
|
280
257
|
if (selection.to === 'RESULT') {
|
|
281
258
|
this._handleCatchToResult(selection, record, data, catchFieldValue);
|
|
282
259
|
}
|
|
283
|
-
var
|
|
260
|
+
var childrenErrorResponseFields = this._errorResponseFields;
|
|
284
261
|
this._errorResponseFields = previousResponseFields;
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
262
|
+
if (childrenErrorResponseFields != null) {
|
|
263
|
+
for (var _i = 0; _i < childrenErrorResponseFields.length; _i++) {
|
|
264
|
+
var event = childrenErrorResponseFields[_i];
|
|
265
|
+
if (event.kind === 'missing_required_field.log') {
|
|
266
|
+
if (this._errorResponseFields == null) {
|
|
267
|
+
this._errorResponseFields = [event];
|
|
268
|
+
} else {
|
|
269
|
+
this._errorResponseFields.push(event);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
288
273
|
}
|
|
289
274
|
break;
|
|
290
275
|
}
|
|
@@ -426,14 +411,14 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
426
411
|
return {
|
|
427
412
|
data: snapshot.data,
|
|
428
413
|
isMissingData: snapshot.isMissingData,
|
|
429
|
-
|
|
414
|
+
errorResponseFields: snapshot.errorResponseFields
|
|
430
415
|
};
|
|
431
416
|
}
|
|
432
417
|
snapshot = read(_this._recordSource, singularReaderSelector, _this._resolverCache);
|
|
433
418
|
return {
|
|
434
419
|
data: snapshot.data,
|
|
435
420
|
isMissingData: snapshot.isMissingData,
|
|
436
|
-
|
|
421
|
+
errorResponseFields: snapshot.errorResponseFields
|
|
437
422
|
};
|
|
438
423
|
};
|
|
439
424
|
var evaluate = function evaluate() {
|
|
@@ -479,9 +464,6 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
479
464
|
};
|
|
480
465
|
_proto._propagateResolverMetadata = function _propagateResolverMetadata(fieldPath, cachedSnapshot, resolverError, seenRecord, suspenseID, updatedDataIDs) {
|
|
481
466
|
if (cachedSnapshot != null) {
|
|
482
|
-
if (cachedSnapshot.missingRequiredFields != null) {
|
|
483
|
-
this._addMissingRequiredFields(cachedSnapshot.missingRequiredFields);
|
|
484
|
-
}
|
|
485
467
|
if (cachedSnapshot.missingClientEdges != null) {
|
|
486
468
|
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(cachedSnapshot.missingClientEdges),
|
|
487
469
|
_step2;
|
|
@@ -520,7 +502,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
520
502
|
try {
|
|
521
503
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
522
504
|
var error = _step4.value;
|
|
523
|
-
if (error.kind === 'relay_resolver.error') {
|
|
505
|
+
if (error.kind === 'relay_resolver.error' || error.kind === 'missing_required_field.throw' || error.kind === 'missing_required_field.log') {
|
|
524
506
|
this._errorResponseFields.push(error);
|
|
525
507
|
}
|
|
526
508
|
}
|
|
@@ -539,7 +521,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
539
521
|
fieldPath: fieldPath,
|
|
540
522
|
owner: this._fragmentName,
|
|
541
523
|
error: resolverError,
|
|
542
|
-
shouldThrow: (_this$_selector$node$5 = (_this$_selector$node$6 = this._selector.node.metadata) === null || _this$_selector$node$6 === void 0 ? void 0 : _this$_selector$node$6.throwOnFieldError) !== null && _this$_selector$node$5 !== void 0 ? _this$_selector$node$5 : RelayFeatureFlags.ENABLE_FIELD_ERROR_HANDLING_THROW_BY_DEFAULT
|
|
524
|
+
shouldThrow: (_this$_selector$node$5 = (_this$_selector$node$6 = this._selector.node.metadata) === null || _this$_selector$node$6 === void 0 ? void 0 : _this$_selector$node$6.throwOnFieldError) !== null && _this$_selector$node$5 !== void 0 ? _this$_selector$node$5 : RelayFeatureFlags.ENABLE_FIELD_ERROR_HANDLING_THROW_BY_DEFAULT,
|
|
525
|
+
handled: false
|
|
543
526
|
};
|
|
544
527
|
if (this._errorResponseFields == null) {
|
|
545
528
|
this._errorResponseFields = [errorEvent];
|
|
@@ -849,23 +832,6 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
849
832
|
this._fragmentName = parentFragmentName;
|
|
850
833
|
fragmentPointers[fragmentSpreadOrFragment.name] = inlineData;
|
|
851
834
|
};
|
|
852
|
-
_proto._addMissingRequiredFields = function _addMissingRequiredFields(additional) {
|
|
853
|
-
if (this._missingRequiredFields == null) {
|
|
854
|
-
this._missingRequiredFields = additional;
|
|
855
|
-
return;
|
|
856
|
-
}
|
|
857
|
-
if (this._missingRequiredFields.action === 'THROW') {
|
|
858
|
-
return;
|
|
859
|
-
}
|
|
860
|
-
if (additional.action === 'THROW') {
|
|
861
|
-
this._missingRequiredFields = additional;
|
|
862
|
-
return;
|
|
863
|
-
}
|
|
864
|
-
this._missingRequiredFields = {
|
|
865
|
-
action: 'LOG',
|
|
866
|
-
fields: [].concat((0, _toConsumableArray2["default"])(this._missingRequiredFields.fields), (0, _toConsumableArray2["default"])(additional.fields))
|
|
867
|
-
};
|
|
868
|
-
};
|
|
869
835
|
_proto._implementsInterface = function _implementsInterface(record, abstractKey) {
|
|
870
836
|
var typeName = RelayModernRecord.getType(record);
|
|
871
837
|
var typeRecord = this._recordSource.get(generateTypeID(typeName));
|
|
@@ -59,7 +59,6 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
59
59
|
missingLiveResolverFields: backup.missingLiveResolverFields,
|
|
60
60
|
seenRecords: backup.seenRecords,
|
|
61
61
|
selector: backup.selector,
|
|
62
|
-
missingRequiredFields: backup.missingRequiredFields,
|
|
63
62
|
errorResponseFields: backup.errorResponseFields
|
|
64
63
|
};
|
|
65
64
|
} else {
|
|
@@ -95,7 +94,6 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
95
94
|
missingLiveResolverFields: nextSnapshot.missingLiveResolverFields,
|
|
96
95
|
seenRecords: nextSnapshot.seenRecords,
|
|
97
96
|
selector: nextSnapshot.selector,
|
|
98
|
-
missingRequiredFields: nextSnapshot.missingRequiredFields,
|
|
99
97
|
errorResponseFields: nextSnapshot.errorResponseFields
|
|
100
98
|
};
|
|
101
99
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -26,8 +26,10 @@ function readFragment(fragmentInput, fragmentKey) {
|
|
|
26
26
|
var _context$getDataForRe = context.getDataForResolverFragment(fragmentSelector, fragmentKey),
|
|
27
27
|
data = _context$getDataForRe.data,
|
|
28
28
|
isMissingData = _context$getDataForRe.isMissingData,
|
|
29
|
-
|
|
30
|
-
if (isMissingData ||
|
|
29
|
+
errorResponseFields = _context$getDataForRe.errorResponseFields;
|
|
30
|
+
if (isMissingData || errorResponseFields != null && errorResponseFields.some(function (event) {
|
|
31
|
+
return event.kind === 'missing_required_field.throw';
|
|
32
|
+
})) {
|
|
31
33
|
throw RESOLVER_FRAGMENT_ERRORED_SENTINEL;
|
|
32
34
|
}
|
|
33
35
|
return data;
|
|
@@ -83,8 +83,7 @@ function snapshotToFragmentState(environment, fragmentNode, owner, snapshot) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
try {
|
|
86
|
-
|
|
87
|
-
handlePotentialSnapshotErrors(environment, snapshot.missingRequiredFields, snapshot.errorResponseFields, (_snapshot$selector$no = (_snapshot$selector$no2 = snapshot.selector.node.metadata) === null || _snapshot$selector$no2 === void 0 ? void 0 : _snapshot$selector$no2.throwOnFieldError) !== null && _snapshot$selector$no !== void 0 ? _snapshot$selector$no : false);
|
|
86
|
+
handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields);
|
|
88
87
|
} catch (error) {
|
|
89
88
|
return {
|
|
90
89
|
error: error,
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
-
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
5
4
|
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
RelayFieldError = _require.RelayFieldError;
|
|
9
|
-
function handleFieldErrors(environment, errorResponseFields, shouldThrow) {
|
|
5
|
+
var invariant = require('invariant');
|
|
6
|
+
function handleFieldErrors(environment, errorResponseFields) {
|
|
10
7
|
var _iterator = (0, _createForOfIteratorHelper2["default"])(errorResponseFields),
|
|
11
8
|
_step;
|
|
12
9
|
try {
|
|
@@ -19,70 +16,55 @@ function handleFieldErrors(environment, errorResponseFields, shouldThrow) {
|
|
|
19
16
|
} finally {
|
|
20
17
|
_iterator.f();
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
throw new Error('Relay: Unexpected event kind');
|
|
19
|
+
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(errorResponseFields),
|
|
20
|
+
_step2;
|
|
21
|
+
try {
|
|
22
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
23
|
+
var _fieldError = _step2.value;
|
|
24
|
+
if (eventShouldThrow(_fieldError)) {
|
|
25
|
+
switch (_fieldError.kind) {
|
|
26
|
+
case 'relay_resolver.error':
|
|
27
|
+
throw new Error("Relay: Resolver error at path '".concat(_fieldError.fieldPath, "' in '").concat(_fieldError.owner, "'."));
|
|
28
|
+
case 'relay_field_payload.error':
|
|
29
|
+
throw new Error("Relay: Unexpected response payload - this object includes an errors property in which you can access the underlying errors");
|
|
30
|
+
case 'missing_expected_data.throw':
|
|
31
|
+
throw new Error("Relay: Missing expected data at path '".concat(_fieldError.fieldPath, "' in '").concat(_fieldError.owner, "'."));
|
|
32
|
+
case 'missing_required_field.throw':
|
|
33
|
+
throw new Error("Relay: Missing @required value at path '".concat(_fieldError.fieldPath, "' in '").concat(_fieldError.owner, "'."));
|
|
34
|
+
case 'missing_required_field.log':
|
|
35
|
+
case 'missing_expected_data.log':
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
_fieldError.kind;
|
|
39
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Unexpected event kind: %s', _fieldError.kind) : invariant(false) : void 0;
|
|
40
|
+
}
|
|
45
41
|
}
|
|
46
|
-
}
|
|
42
|
+
}
|
|
43
|
+
} catch (err) {
|
|
44
|
+
_iterator2.e(err);
|
|
45
|
+
} finally {
|
|
46
|
+
_iterator2.f();
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
function
|
|
50
|
-
switch (
|
|
51
|
-
case '
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
});
|
|
61
|
-
throw new Error("Relay: Missing @required value at path '".concat(path, "' in '").concat(owner, "'."));
|
|
62
|
-
}
|
|
63
|
-
case 'LOG':
|
|
64
|
-
missingRequiredFields.fields.forEach(function (_ref) {
|
|
65
|
-
var path = _ref.path,
|
|
66
|
-
owner = _ref.owner;
|
|
67
|
-
environment.relayFieldLogger({
|
|
68
|
-
kind: 'missing_required_field.log',
|
|
69
|
-
owner: owner,
|
|
70
|
-
fieldPath: path
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
break;
|
|
49
|
+
function eventShouldThrow(event) {
|
|
50
|
+
switch (event.kind) {
|
|
51
|
+
case 'relay_resolver.error':
|
|
52
|
+
case 'relay_field_payload.error':
|
|
53
|
+
return event.shouldThrow && !event.handled;
|
|
54
|
+
case 'missing_expected_data.throw':
|
|
55
|
+
case 'missing_required_field.throw':
|
|
56
|
+
return !event.handled;
|
|
57
|
+
case 'missing_required_field.log':
|
|
58
|
+
case 'missing_expected_data.log':
|
|
59
|
+
return false;
|
|
74
60
|
default:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
61
|
+
event.kind;
|
|
62
|
+
throw new Error('Relay: Unexpected event kind');
|
|
78
63
|
}
|
|
79
64
|
}
|
|
80
|
-
function handlePotentialSnapshotErrors(environment,
|
|
81
|
-
if (missingRequiredFields != null) {
|
|
82
|
-
handleMissingRequiredFields(environment, missingRequiredFields);
|
|
83
|
-
}
|
|
65
|
+
function handlePotentialSnapshotErrors(environment, errorResponseFields) {
|
|
84
66
|
if (errorResponseFields != null) {
|
|
85
|
-
handleFieldErrors(environment, errorResponseFields
|
|
67
|
+
handleFieldErrors(environment, errorResponseFields);
|
|
86
68
|
}
|
|
87
69
|
}
|
|
88
70
|
module.exports = handlePotentialSnapshotErrors;
|
package/package.json
CHANGED
package/query/fetchQuery.js.flow
CHANGED
|
@@ -136,12 +136,7 @@ function fetchQuery<TVariables: Variables, TData, TRawResponse>(
|
|
|
136
136
|
const fetchPolicy = options?.fetchPolicy ?? 'network-only';
|
|
137
137
|
|
|
138
138
|
function readData(snapshot: Snapshot): TData {
|
|
139
|
-
handlePotentialSnapshotErrors(
|
|
140
|
-
environment,
|
|
141
|
-
snapshot.missingRequiredFields,
|
|
142
|
-
snapshot.errorResponseFields,
|
|
143
|
-
queryNode.fragment.metadata?.throwOnFieldError ?? false,
|
|
144
|
-
);
|
|
139
|
+
handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields);
|
|
145
140
|
/* $FlowFixMe[incompatible-return] we assume readData returns the right
|
|
146
141
|
* data just having written it from network or checked availability. */
|
|
147
142
|
return snapshot.data;
|