relay-runtime 18.2.0 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/experimental.js +1 -1
- package/experimental.js.flow +8 -6
- package/index.js +1 -1
- package/index.js.flow +3 -0
- package/lib/experimental.js +5 -2
- package/lib/index.js +3 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +1 -1
- package/lib/mutations/RelayRecordSourceProxy.js +2 -1
- package/lib/mutations/createUpdatableProxy.js +1 -1
- package/lib/mutations/validateMutation.js +2 -2
- package/lib/network/RelayObservable.js +1 -3
- package/lib/network/wrapNetworkWithLogObserver.js +2 -2
- package/lib/query/fetchQuery.js +1 -1
- package/lib/store/DataChecker.js +4 -5
- package/lib/store/OperationExecutor.js +11 -0
- package/lib/store/RelayModernEnvironment.js +13 -4
- package/lib/store/RelayModernFragmentSpecResolver.js +4 -4
- package/lib/store/RelayModernStore.js +43 -21
- package/lib/store/RelayPublishQueue.js +11 -15
- package/lib/store/RelayReader.js +131 -151
- package/lib/store/RelayReferenceMarker.js +3 -4
- package/lib/store/RelayResponseNormalizer.js +47 -26
- package/lib/store/RelayStoreSubscriptions.js +2 -2
- package/lib/store/RelayStoreUtils.js +8 -0
- package/lib/store/ResolverFragments.js +2 -2
- package/lib/store/createRelayLoggingContext.js +17 -0
- package/lib/store/generateTypenamePrefixedDataID.js +9 -0
- package/lib/store/live-resolvers/LiveResolverCache.js +2 -1
- package/lib/store/live-resolvers/resolverDataInjector.js +4 -4
- package/lib/store/observeFragmentExperimental.js +60 -13
- package/lib/store/observeQueryExperimental.js +21 -0
- package/lib/util/RelayFeatureFlags.js +6 -1
- package/lib/util/handlePotentialSnapshotErrors.js +11 -8
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +1 -0
- package/mutations/RelayRecordSourceProxy.js.flow +4 -0
- package/mutations/createUpdatableProxy.js.flow +1 -1
- package/mutations/validateMutation.js.flow +3 -3
- package/network/RelayNetworkTypes.js.flow +3 -0
- package/network/RelayObservable.js.flow +1 -5
- package/network/wrapNetworkWithLogObserver.js.flow +19 -1
- package/package.json +1 -1
- package/query/fetchQuery.js.flow +1 -1
- package/store/DataChecker.js.flow +5 -2
- package/store/OperationExecutor.js.flow +12 -1
- package/store/RelayExperimentalGraphResponseTransform.js.flow +4 -4
- package/store/RelayModernEnvironment.js.flow +22 -6
- package/store/RelayModernFragmentSpecResolver.js.flow +6 -6
- package/store/RelayModernSelector.js.flow +2 -0
- package/store/RelayModernStore.js.flow +74 -27
- package/store/RelayPublishQueue.js.flow +32 -21
- package/store/RelayReader.js.flow +159 -96
- package/store/RelayReferenceMarker.js.flow +3 -4
- package/store/RelayResponseNormalizer.js.flow +93 -67
- package/store/RelayStoreSubscriptions.js.flow +2 -2
- package/store/RelayStoreTypes.js.flow +33 -4
- package/store/RelayStoreUtils.js.flow +29 -0
- package/store/ResolverCache.js.flow +2 -2
- package/store/ResolverFragments.js.flow +5 -3
- package/store/StoreInspector.js.flow +5 -0
- package/store/createRelayContext.js.flow +3 -2
- package/store/createRelayLoggingContext.js.flow +46 -0
- package/store/generateTypenamePrefixedDataID.js.flow +25 -0
- package/store/live-resolvers/LiveResolverCache.js.flow +2 -1
- package/store/live-resolvers/resolverDataInjector.js.flow +10 -6
- package/store/observeFragmentExperimental.js.flow +82 -28
- package/store/observeQueryExperimental.js.flow +61 -0
- package/store/waitForFragmentExperimental.js.flow +4 -3
- package/util/NormalizationNode.js.flow +2 -1
- package/util/RelayConcreteNode.js.flow +2 -0
- package/util/RelayError.js.flow +1 -0
- package/util/RelayFeatureFlags.js.flow +18 -0
- package/util/RelayRuntimeTypes.js.flow +6 -3
- package/util/getPaginationVariables.js.flow +2 -0
- package/util/handlePotentialSnapshotErrors.js.flow +23 -11
- package/util/registerEnvironmentWithDevTools.js.flow +4 -2
- package/util/withProvidedVariables.js.flow +1 -0
- package/util/withStartAndDuration.js.flow +3 -0
- package/relay-runtime-experimental.js +0 -4
- package/relay-runtime-experimental.min.js +0 -9
- package/relay-runtime.js +0 -4
- package/relay-runtime.min.js +0 -9
package/lib/store/RelayReader.js
CHANGED
|
@@ -4,9 +4,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
5
5
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
6
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
7
|
-
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
8
7
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
8
|
var _excluded = ["message"];
|
|
9
|
+
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
10
10
|
var _require = require('./live-resolvers/LiveResolverSuspenseSentinel'),
|
|
11
11
|
isSuspenseSentinel = _require.isSuspenseSentinel;
|
|
12
12
|
var RelayConcreteVariables = require('./RelayConcreteVariables');
|
|
@@ -36,15 +36,15 @@ function read(recordSource, selector, resolverCache, resolverContext) {
|
|
|
36
36
|
}
|
|
37
37
|
var RelayReader = /*#__PURE__*/function () {
|
|
38
38
|
function RelayReader(recordSource, selector, resolverCache, resolverContext) {
|
|
39
|
-
var _selector$clientEdgeT, _this$_owner$node$ope;
|
|
39
|
+
var _selector$clientEdgeT, _ref, _this$_owner$node$ope, _this$_owner$node$ope2;
|
|
40
40
|
this._clientEdgeTraversalPath = (_selector$clientEdgeT = selector.clientEdgeTraversalPath) !== null && _selector$clientEdgeT !== void 0 && _selector$clientEdgeT.length ? (0, _toConsumableArray2["default"])(selector.clientEdgeTraversalPath) : [];
|
|
41
41
|
this._missingClientEdges = [];
|
|
42
42
|
this._missingLiveResolverFields = [];
|
|
43
43
|
this._isMissingData = false;
|
|
44
44
|
this._isWithinUnmatchedTypeRefinement = false;
|
|
45
|
-
this.
|
|
45
|
+
this._fieldErrors = null;
|
|
46
46
|
this._owner = selector.owner;
|
|
47
|
-
this._useExecTimeResolvers = (_this$_owner$node$ope = this._owner.node.operation.use_exec_time_resolvers) !== null && _this$_owner$node$ope !== void 0 ? _this$_owner$node$ope : false;
|
|
47
|
+
this._useExecTimeResolvers = (_ref = (_this$_owner$node$ope = this._owner.node.operation.use_exec_time_resolvers) !== null && _this$_owner$node$ope !== void 0 ? _this$_owner$node$ope : ((_this$_owner$node$ope2 = this._owner.node.operation.exec_time_resolvers_enabled_provider) === null || _this$_owner$node$ope2 === void 0 ? void 0 : _this$_owner$node$ope2.get()) === true) !== null && _ref !== void 0 ? _ref : false;
|
|
48
48
|
this._recordSource = recordSource;
|
|
49
49
|
this._seenRecords = new Set();
|
|
50
50
|
this._selector = selector;
|
|
@@ -92,37 +92,30 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
92
92
|
missingLiveResolverFields: this._missingLiveResolverFields,
|
|
93
93
|
seenRecords: this._seenRecords,
|
|
94
94
|
selector: this._selector,
|
|
95
|
-
|
|
95
|
+
fieldErrors: this._fieldErrors
|
|
96
96
|
};
|
|
97
97
|
};
|
|
98
|
-
_proto.
|
|
98
|
+
_proto._maybeAddFieldErrors = function _maybeAddFieldErrors(record, storageKey) {
|
|
99
99
|
var errors = RelayModernRecord.getErrors(record, storageKey);
|
|
100
100
|
if (errors == null) {
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
103
|
var owner = this._fragmentName;
|
|
104
|
-
if (this.
|
|
105
|
-
this.
|
|
106
|
-
}
|
|
107
|
-
var
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
handled: false
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
} catch (err) {
|
|
123
|
-
_iterator.e(err);
|
|
124
|
-
} finally {
|
|
125
|
-
_iterator.f();
|
|
104
|
+
if (this._fieldErrors == null) {
|
|
105
|
+
this._fieldErrors = [];
|
|
106
|
+
}
|
|
107
|
+
for (var i = 0; i < errors.length; i++) {
|
|
108
|
+
var _error$path, _this$_selector$node$2, _this$_selector$node$3;
|
|
109
|
+
var error = errors[i];
|
|
110
|
+
this._fieldErrors.push({
|
|
111
|
+
kind: 'relay_field_payload.error',
|
|
112
|
+
owner: owner,
|
|
113
|
+
fieldPath: ((_error$path = error.path) !== null && _error$path !== void 0 ? _error$path : []).join('.'),
|
|
114
|
+
error: error,
|
|
115
|
+
shouldThrow: (_this$_selector$node$2 = (_this$_selector$node$3 = this._selector.node.metadata) === null || _this$_selector$node$3 === void 0 ? void 0 : _this$_selector$node$3.throwOnFieldError) !== null && _this$_selector$node$2 !== void 0 ? _this$_selector$node$2 : false,
|
|
116
|
+
handled: false,
|
|
117
|
+
uiContext: undefined
|
|
118
|
+
});
|
|
126
119
|
}
|
|
127
120
|
};
|
|
128
121
|
_proto._markDataAsMissing = function _markDataAsMissing(fieldName) {
|
|
@@ -130,19 +123,21 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
130
123
|
if (this._isWithinUnmatchedTypeRefinement) {
|
|
131
124
|
return;
|
|
132
125
|
}
|
|
133
|
-
if (this.
|
|
134
|
-
this.
|
|
126
|
+
if (this._fieldErrors == null) {
|
|
127
|
+
this._fieldErrors = [];
|
|
135
128
|
}
|
|
136
129
|
var owner = this._fragmentName;
|
|
137
|
-
this.
|
|
130
|
+
this._fieldErrors.push(((_this$_selector$node$4 = (_this$_selector$node$5 = this._selector.node.metadata) === null || _this$_selector$node$5 === void 0 ? void 0 : _this$_selector$node$5.throwOnFieldError) !== null && _this$_selector$node$4 !== void 0 ? _this$_selector$node$4 : false) ? {
|
|
138
131
|
kind: 'missing_expected_data.throw',
|
|
139
132
|
owner: owner,
|
|
140
133
|
fieldPath: fieldName,
|
|
141
|
-
handled: false
|
|
134
|
+
handled: false,
|
|
135
|
+
uiContext: undefined
|
|
142
136
|
} : {
|
|
143
137
|
kind: 'missing_expected_data.log',
|
|
144
138
|
owner: owner,
|
|
145
|
-
fieldPath: fieldName
|
|
139
|
+
fieldPath: fieldName,
|
|
140
|
+
uiContext: undefined
|
|
146
141
|
});
|
|
147
142
|
this._isMissingData = true;
|
|
148
143
|
if (this._clientEdgeTraversalPath.length) {
|
|
@@ -177,8 +172,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
177
172
|
return;
|
|
178
173
|
}
|
|
179
174
|
var owner = this._fragmentName;
|
|
180
|
-
if (this.
|
|
181
|
-
this.
|
|
175
|
+
if (this._fieldErrors == null) {
|
|
176
|
+
this._fieldErrors = [];
|
|
182
177
|
}
|
|
183
178
|
var fieldName;
|
|
184
179
|
if (selection.field.linkedField != null) {
|
|
@@ -190,18 +185,20 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
190
185
|
}
|
|
191
186
|
switch (selection.action) {
|
|
192
187
|
case 'THROW':
|
|
193
|
-
this.
|
|
188
|
+
this._fieldErrors.push({
|
|
194
189
|
kind: 'missing_required_field.throw',
|
|
195
190
|
fieldPath: fieldName,
|
|
196
191
|
owner: owner,
|
|
197
|
-
handled: false
|
|
192
|
+
handled: false,
|
|
193
|
+
uiContext: undefined
|
|
198
194
|
});
|
|
199
195
|
return;
|
|
200
196
|
case 'LOG':
|
|
201
|
-
this.
|
|
197
|
+
this._fieldErrors.push({
|
|
202
198
|
kind: 'missing_required_field.log',
|
|
203
199
|
fieldPath: fieldName,
|
|
204
|
-
owner: owner
|
|
200
|
+
owner: owner,
|
|
201
|
+
uiContext: undefined
|
|
205
202
|
});
|
|
206
203
|
return;
|
|
207
204
|
default:
|
|
@@ -222,33 +219,33 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
222
219
|
value = this._asResult(_value);
|
|
223
220
|
break;
|
|
224
221
|
case 'NULL':
|
|
225
|
-
if (this.
|
|
222
|
+
if (this._fieldErrors != null && this._fieldErrors.length > 0) {
|
|
226
223
|
value = null;
|
|
227
224
|
}
|
|
228
225
|
break;
|
|
229
226
|
default:
|
|
230
227
|
to;
|
|
231
228
|
}
|
|
232
|
-
var
|
|
233
|
-
this.
|
|
234
|
-
if (
|
|
235
|
-
if (this.
|
|
236
|
-
this.
|
|
229
|
+
var childrenFieldErrors = this._fieldErrors;
|
|
230
|
+
this._fieldErrors = previousResponseFields;
|
|
231
|
+
if (childrenFieldErrors != null) {
|
|
232
|
+
if (this._fieldErrors == null) {
|
|
233
|
+
this._fieldErrors = [];
|
|
237
234
|
}
|
|
238
|
-
for (var i = 0; i <
|
|
239
|
-
this.
|
|
235
|
+
for (var i = 0; i < childrenFieldErrors.length; i++) {
|
|
236
|
+
this._fieldErrors.push(markFieldErrorHasHandled(childrenFieldErrors[i]));
|
|
240
237
|
}
|
|
241
238
|
}
|
|
242
239
|
return value;
|
|
243
240
|
};
|
|
244
241
|
_proto._asResult = function _asResult(value) {
|
|
245
|
-
if (this.
|
|
242
|
+
if (this._fieldErrors == null || this._fieldErrors.length === 0) {
|
|
246
243
|
return {
|
|
247
244
|
ok: true,
|
|
248
245
|
value: value
|
|
249
246
|
};
|
|
250
247
|
}
|
|
251
|
-
var errors = this.
|
|
248
|
+
var errors = this._fieldErrors.map(function (error) {
|
|
252
249
|
switch (error.kind) {
|
|
253
250
|
case 'relay_field_payload.error':
|
|
254
251
|
var _error$error = error.error,
|
|
@@ -272,7 +269,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
272
269
|
return null;
|
|
273
270
|
default:
|
|
274
271
|
error.kind;
|
|
275
|
-
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unexpected error
|
|
272
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unexpected error fieldError kind: %s', error.kind) : invariant(false) : void 0;
|
|
276
273
|
}
|
|
277
274
|
}).filter(Boolean);
|
|
278
275
|
return {
|
|
@@ -293,8 +290,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
293
290
|
case 'CatchField':
|
|
294
291
|
{
|
|
295
292
|
var _selection$field$back, _selection$field, _field$alias;
|
|
296
|
-
var previousResponseFields = this.
|
|
297
|
-
this.
|
|
293
|
+
var previousResponseFields = this._fieldErrors;
|
|
294
|
+
this._fieldErrors = null;
|
|
298
295
|
var catchFieldValue = this._readClientSideDirectiveField(selection, record, data);
|
|
299
296
|
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;
|
|
300
297
|
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;
|
|
@@ -409,12 +406,26 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
409
406
|
return this._readLink(selection.field, record, data);
|
|
410
407
|
}
|
|
411
408
|
case 'RelayResolver':
|
|
412
|
-
return this._readResolverField(selection.field, record, data);
|
|
413
409
|
case 'RelayLiveResolver':
|
|
414
|
-
|
|
410
|
+
{
|
|
411
|
+
if (this._useExecTimeResolvers) {
|
|
412
|
+
return this._readScalar(selection.field, record, data);
|
|
413
|
+
} else {
|
|
414
|
+
return this._readResolverField(selection.field, record, data);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
415
417
|
case 'ClientEdgeToClientObject':
|
|
416
418
|
case 'ClientEdgeToServerObject':
|
|
417
|
-
|
|
419
|
+
if (this._useExecTimeResolvers && (selection.field.backingField.kind === 'RelayResolver' || selection.field.backingField.kind === 'RelayLiveResolver')) {
|
|
420
|
+
var field = selection.field;
|
|
421
|
+
if (field.linkedField.plural) {
|
|
422
|
+
return this._readPluralLink(field.linkedField, record, data);
|
|
423
|
+
} else {
|
|
424
|
+
return this._readLink(field.linkedField, record, data);
|
|
425
|
+
}
|
|
426
|
+
} else {
|
|
427
|
+
return this._readClientEdge(selection.field, record, data);
|
|
428
|
+
}
|
|
418
429
|
case 'AliasedInlineFragmentSpread':
|
|
419
430
|
return this._readAliasedInlineFragment(selection.field, record, data);
|
|
420
431
|
default:
|
|
@@ -425,8 +436,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
425
436
|
_proto._readResolverField = function _readResolverField(field, record, data) {
|
|
426
437
|
var _field$alias2;
|
|
427
438
|
var parentRecordID = RelayModernRecord.getDataID(record);
|
|
428
|
-
var prevErrors = this.
|
|
429
|
-
this.
|
|
439
|
+
var prevErrors = this._fieldErrors;
|
|
440
|
+
this._fieldErrors = null;
|
|
430
441
|
var result = this._readResolverFieldImpl(field, parentRecordID);
|
|
431
442
|
var fieldName = (_field$alias2 = field.alias) !== null && _field$alias2 !== void 0 ? _field$alias2 : field.name;
|
|
432
443
|
this._prependPreviousErrors(prevErrors, fieldName);
|
|
@@ -442,14 +453,14 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
442
453
|
return {
|
|
443
454
|
data: snapshot.data,
|
|
444
455
|
isMissingData: snapshot.isMissingData,
|
|
445
|
-
|
|
456
|
+
fieldErrors: snapshot.fieldErrors
|
|
446
457
|
};
|
|
447
458
|
}
|
|
448
459
|
snapshot = read(_this._recordSource, singularReaderSelector, _this._resolverCache);
|
|
449
460
|
return {
|
|
450
461
|
data: snapshot.data,
|
|
451
462
|
isMissingData: snapshot.isMissingData,
|
|
452
|
-
|
|
463
|
+
fieldErrors: snapshot.fieldErrors
|
|
453
464
|
};
|
|
454
465
|
};
|
|
455
466
|
var evaluate = function evaluate() {
|
|
@@ -494,56 +505,33 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
494
505
|
return result;
|
|
495
506
|
};
|
|
496
507
|
_proto._propagateResolverMetadata = function _propagateResolverMetadata(fieldPath, cachedSnapshot, resolverError, seenRecord, suspenseID, updatedDataIDs) {
|
|
508
|
+
var _this2 = this;
|
|
497
509
|
if (cachedSnapshot != null) {
|
|
498
510
|
if (cachedSnapshot.missingClientEdges != null) {
|
|
499
|
-
var
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
503
|
-
var missing = _step2.value;
|
|
504
|
-
this._missingClientEdges.push(missing);
|
|
505
|
-
}
|
|
506
|
-
} catch (err) {
|
|
507
|
-
_iterator2.e(err);
|
|
508
|
-
} finally {
|
|
509
|
-
_iterator2.f();
|
|
511
|
+
for (var i = 0; i < cachedSnapshot.missingClientEdges.length; i++) {
|
|
512
|
+
var missing = cachedSnapshot.missingClientEdges[i];
|
|
513
|
+
this._missingClientEdges.push(missing);
|
|
510
514
|
}
|
|
511
515
|
}
|
|
512
516
|
if (cachedSnapshot.missingLiveResolverFields != null) {
|
|
513
517
|
this._isMissingData = this._isMissingData || cachedSnapshot.missingLiveResolverFields.length > 0;
|
|
514
|
-
var
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
518
|
-
var missingResolverField = _step3.value;
|
|
519
|
-
this._missingLiveResolverFields.push(missingResolverField);
|
|
520
|
-
}
|
|
521
|
-
} catch (err) {
|
|
522
|
-
_iterator3.e(err);
|
|
523
|
-
} finally {
|
|
524
|
-
_iterator3.f();
|
|
518
|
+
for (var _i = 0; _i < cachedSnapshot.missingLiveResolverFields.length; _i++) {
|
|
519
|
+
var missingResolverField = cachedSnapshot.missingLiveResolverFields[_i];
|
|
520
|
+
this._missingLiveResolverFields.push(missingResolverField);
|
|
525
521
|
}
|
|
526
522
|
}
|
|
527
|
-
if (cachedSnapshot.
|
|
528
|
-
if (this.
|
|
529
|
-
this.
|
|
523
|
+
if (cachedSnapshot.fieldErrors != null) {
|
|
524
|
+
if (this._fieldErrors == null) {
|
|
525
|
+
this._fieldErrors = [];
|
|
530
526
|
}
|
|
531
|
-
var
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
this._errorResponseFields.push(error);
|
|
539
|
-
} else {
|
|
540
|
-
this._errorResponseFields.push(markFieldErrorHasHandled(error));
|
|
541
|
-
}
|
|
527
|
+
for (var _i2 = 0; _i2 < cachedSnapshot.fieldErrors.length; _i2++) {
|
|
528
|
+
var _this$_selector$node$6;
|
|
529
|
+
var error = cachedSnapshot.fieldErrors[_i2];
|
|
530
|
+
if (((_this$_selector$node$6 = this._selector.node.metadata) === null || _this$_selector$node$6 === void 0 ? void 0 : _this$_selector$node$6.throwOnFieldError) === true) {
|
|
531
|
+
this._fieldErrors.push(error);
|
|
532
|
+
} else {
|
|
533
|
+
this._fieldErrors.push(markFieldErrorHasHandled(error));
|
|
542
534
|
}
|
|
543
|
-
} catch (err) {
|
|
544
|
-
_iterator4.e(err);
|
|
545
|
-
} finally {
|
|
546
|
-
_iterator4.f();
|
|
547
535
|
}
|
|
548
536
|
}
|
|
549
537
|
this._isMissingData = this._isMissingData || cachedSnapshot.isMissingData;
|
|
@@ -556,12 +544,13 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
556
544
|
owner: this._fragmentName,
|
|
557
545
|
error: resolverError,
|
|
558
546
|
shouldThrow: (_this$_selector$node$7 = (_this$_selector$node$8 = this._selector.node.metadata) === null || _this$_selector$node$8 === void 0 ? void 0 : _this$_selector$node$8.throwOnFieldError) !== null && _this$_selector$node$7 !== void 0 ? _this$_selector$node$7 : false,
|
|
559
|
-
handled: false
|
|
547
|
+
handled: false,
|
|
548
|
+
uiContext: undefined
|
|
560
549
|
};
|
|
561
|
-
if (this.
|
|
562
|
-
this.
|
|
550
|
+
if (this._fieldErrors == null) {
|
|
551
|
+
this._fieldErrors = [errorEvent];
|
|
563
552
|
} else {
|
|
564
|
-
this.
|
|
553
|
+
this._fieldErrors.push(errorEvent);
|
|
565
554
|
}
|
|
566
555
|
}
|
|
567
556
|
if (seenRecord != null) {
|
|
@@ -572,22 +561,13 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
572
561
|
this._missingLiveResolverFields.push(suspenseID);
|
|
573
562
|
}
|
|
574
563
|
if (updatedDataIDs != null) {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
579
|
-
var recordID = _step5.value;
|
|
580
|
-
this._updatedDataIDs.add(recordID);
|
|
581
|
-
}
|
|
582
|
-
} catch (err) {
|
|
583
|
-
_iterator5.e(err);
|
|
584
|
-
} finally {
|
|
585
|
-
_iterator5.f();
|
|
586
|
-
}
|
|
564
|
+
updatedDataIDs.forEach(function (recordID) {
|
|
565
|
+
_this2._updatedDataIDs.add(recordID);
|
|
566
|
+
});
|
|
587
567
|
}
|
|
588
568
|
};
|
|
589
569
|
_proto._readClientEdge = function _readClientEdge(field, record, data) {
|
|
590
|
-
var
|
|
570
|
+
var _this3 = this;
|
|
591
571
|
var _backingField$alias;
|
|
592
572
|
var backingField = field.backingField;
|
|
593
573
|
!(backingField.kind !== 'ClientExtension') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Client extension client edges are not yet implemented.') : invariant(false) : void 0;
|
|
@@ -607,21 +587,21 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
607
587
|
storeIDs = clientEdgeResolverResponse.map(function (itemResponse) {
|
|
608
588
|
var _field$concreteType;
|
|
609
589
|
var concreteType = (_field$concreteType = field.concreteType) !== null && _field$concreteType !== void 0 ? _field$concreteType : itemResponse.__typename;
|
|
610
|
-
!(typeof concreteType === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected resolver for field at `%s` in `%s` modeling an edge to an abstract type to return an object with a `__typename` property.', backingField.path,
|
|
611
|
-
var localId = extractIdFromResponse(itemResponse, backingField.path,
|
|
612
|
-
var id =
|
|
590
|
+
!(typeof concreteType === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected resolver for field at `%s` in `%s` modeling an edge to an abstract type to return an object with a `__typename` property.', backingField.path, _this3._owner.identifier) : invariant(false) : void 0;
|
|
591
|
+
var localId = extractIdFromResponse(itemResponse, backingField.path, _this3._owner.identifier);
|
|
592
|
+
var id = _this3._resolverCache.ensureClientRecord(localId, concreteType);
|
|
613
593
|
var modelResolvers = field.modelResolvers;
|
|
614
594
|
if (modelResolvers != null) {
|
|
615
595
|
var modelResolver = modelResolvers[concreteType];
|
|
616
|
-
!(modelResolver !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Invalid `__typename` returned by resolver at `%s` in `%s`. Expected one of %s but got `%s`.', backingField.path,
|
|
617
|
-
var model =
|
|
596
|
+
!(modelResolver !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Invalid `__typename` returned by resolver at `%s` in `%s`. Expected one of %s but got `%s`.', backingField.path, _this3._owner.identifier, Object.keys(modelResolvers).join(', '), concreteType) : invariant(false) : void 0;
|
|
597
|
+
var model = _this3._readResolverFieldImpl(modelResolver, id);
|
|
618
598
|
return model != null ? id : null;
|
|
619
599
|
}
|
|
620
600
|
return id;
|
|
621
601
|
});
|
|
622
602
|
} else {
|
|
623
603
|
storeIDs = clientEdgeResolverResponse.map(function (obj) {
|
|
624
|
-
return extractIdFromResponse(obj, backingField.path,
|
|
604
|
+
return extractIdFromResponse(obj, backingField.path, _this3._owner.identifier);
|
|
625
605
|
});
|
|
626
606
|
}
|
|
627
607
|
this._clientEdgeTraversalPath.push(null);
|
|
@@ -665,8 +645,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
665
645
|
this._clientEdgeTraversalPath.push(traversalPathSegment);
|
|
666
646
|
var prevData = data[fieldName];
|
|
667
647
|
!(prevData == null || typeof prevData === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field at `%s` in `%s` on record `%s` ' + 'to be an object, got `%s`.', backingField.path, this._owner.identifier, RelayModernRecord.getDataID(record), prevData) : invariant(false) : void 0;
|
|
668
|
-
var prevErrors = this.
|
|
669
|
-
this.
|
|
648
|
+
var prevErrors = this._fieldErrors;
|
|
649
|
+
this._fieldErrors = null;
|
|
670
650
|
var edgeValue = this._traverse(field.linkedField, storeID, prevData);
|
|
671
651
|
this._prependPreviousErrors(prevErrors, fieldName);
|
|
672
652
|
this._clientEdgeTraversalPath.pop();
|
|
@@ -679,8 +659,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
679
659
|
var fieldName = (_field$alias3 = field.alias) !== null && _field$alias3 !== void 0 ? _field$alias3 : field.name;
|
|
680
660
|
var storageKey = getStorageKey(field, this._variables);
|
|
681
661
|
var value = RelayModernRecord.getValue(record, storageKey);
|
|
682
|
-
if (value === null) {
|
|
683
|
-
this.
|
|
662
|
+
if (value === null || RelayFeatureFlags.ENABLE_NONCOMPLIANT_ERROR_HANDLING_ON_LISTS && Array.isArray(value) && value.length === 0) {
|
|
663
|
+
this._maybeAddFieldErrors(record, storageKey);
|
|
684
664
|
} else if (value === undefined) {
|
|
685
665
|
this._markDataAsMissing(fieldName);
|
|
686
666
|
}
|
|
@@ -695,7 +675,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
695
675
|
if (linkedID == null) {
|
|
696
676
|
data[fieldName] = linkedID;
|
|
697
677
|
if (linkedID === null) {
|
|
698
|
-
this.
|
|
678
|
+
this._maybeAddFieldErrors(record, storageKey);
|
|
699
679
|
} else if (linkedID === undefined) {
|
|
700
680
|
this._markDataAsMissing(fieldName);
|
|
701
681
|
}
|
|
@@ -703,29 +683,29 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
703
683
|
}
|
|
704
684
|
var prevData = data[fieldName];
|
|
705
685
|
!(prevData == null || typeof prevData === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field `%s` at `%s` on record `%s` ' + 'to be an object, got `%s`.', fieldName, this._owner.identifier, RelayModernRecord.getDataID(record), prevData) : invariant(false) : void 0;
|
|
706
|
-
var prevErrors = this.
|
|
707
|
-
this.
|
|
686
|
+
var prevErrors = this._fieldErrors;
|
|
687
|
+
this._fieldErrors = null;
|
|
708
688
|
var value = this._traverse(field, linkedID, prevData);
|
|
709
689
|
this._prependPreviousErrors(prevErrors, fieldName);
|
|
710
690
|
data[fieldName] = value;
|
|
711
691
|
return value;
|
|
712
692
|
};
|
|
713
693
|
_proto._prependPreviousErrors = function _prependPreviousErrors(prevErrors, fieldNameOrIndex) {
|
|
714
|
-
if (this.
|
|
715
|
-
for (var i = 0; i < this.
|
|
716
|
-
var event = this.
|
|
694
|
+
if (this._fieldErrors != null) {
|
|
695
|
+
for (var i = 0; i < this._fieldErrors.length; i++) {
|
|
696
|
+
var event = this._fieldErrors[i];
|
|
717
697
|
if (event.owner === this._fragmentName && (event.kind === 'missing_expected_data.throw' || event.kind === 'missing_expected_data.log' || event.kind === 'missing_required_field.throw' || event.kind === 'missing_required_field.log')) {
|
|
718
698
|
event.fieldPath = "".concat(fieldNameOrIndex, ".").concat(event.fieldPath);
|
|
719
699
|
}
|
|
720
700
|
}
|
|
721
701
|
if (prevErrors != null) {
|
|
722
|
-
for (var
|
|
723
|
-
prevErrors.push(this.
|
|
702
|
+
for (var _i3 = this._fieldErrors.length - 1; _i3 >= 0; _i3--) {
|
|
703
|
+
prevErrors.push(this._fieldErrors[_i3]);
|
|
724
704
|
}
|
|
725
|
-
this.
|
|
705
|
+
this._fieldErrors = prevErrors;
|
|
726
706
|
}
|
|
727
707
|
} else {
|
|
728
|
-
this.
|
|
708
|
+
this._fieldErrors = prevErrors;
|
|
729
709
|
}
|
|
730
710
|
};
|
|
731
711
|
_proto._readActorChange = function _readActorChange(field, record, data) {
|
|
@@ -738,7 +718,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
738
718
|
if (externalRef === undefined) {
|
|
739
719
|
this._markDataAsMissing(fieldName);
|
|
740
720
|
} else if (externalRef === null) {
|
|
741
|
-
this.
|
|
721
|
+
this._maybeAddFieldErrors(record, storageKey);
|
|
742
722
|
}
|
|
743
723
|
return data[fieldName];
|
|
744
724
|
}
|
|
@@ -757,13 +737,13 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
757
737
|
_proto._readPluralLink = function _readPluralLink(field, record, data) {
|
|
758
738
|
var storageKey = getStorageKey(field, this._variables);
|
|
759
739
|
var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
|
|
760
|
-
if (linkedIDs === null) {
|
|
761
|
-
this.
|
|
740
|
+
if (linkedIDs === null || RelayFeatureFlags.ENABLE_NONCOMPLIANT_ERROR_HANDLING_ON_LISTS && Array.isArray(linkedIDs) && linkedIDs.length === 0) {
|
|
741
|
+
this._maybeAddFieldErrors(record, storageKey);
|
|
762
742
|
}
|
|
763
743
|
return this._readLinkedIds(field, linkedIDs, record, data);
|
|
764
744
|
};
|
|
765
745
|
_proto._readLinkedIds = function _readLinkedIds(field, linkedIDs, record, data) {
|
|
766
|
-
var
|
|
746
|
+
var _this4 = this;
|
|
767
747
|
var _field$alias6;
|
|
768
748
|
var fieldName = (_field$alias6 = field.alias) !== null && _field$alias6 !== void 0 ? _field$alias6 : field.name;
|
|
769
749
|
if (linkedIDs == null) {
|
|
@@ -775,32 +755,32 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
775
755
|
}
|
|
776
756
|
var prevData = data[fieldName];
|
|
777
757
|
!(prevData == null || Array.isArray(prevData)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field `%s` on record `%s` ' + 'to be an array, got `%s`.', fieldName, RelayModernRecord.getDataID(record), prevData) : invariant(false) : void 0;
|
|
778
|
-
var prevErrors = this.
|
|
779
|
-
this.
|
|
758
|
+
var prevErrors = this._fieldErrors;
|
|
759
|
+
this._fieldErrors = null;
|
|
780
760
|
var linkedArray = prevData || [];
|
|
781
761
|
linkedIDs.forEach(function (linkedID, nextIndex) {
|
|
782
762
|
if (linkedID == null) {
|
|
783
763
|
if (linkedID === undefined) {
|
|
784
|
-
|
|
764
|
+
_this4._markDataAsMissing(String(nextIndex));
|
|
785
765
|
}
|
|
786
766
|
linkedArray[nextIndex] = linkedID;
|
|
787
767
|
return;
|
|
788
768
|
}
|
|
789
769
|
var prevItem = linkedArray[nextIndex];
|
|
790
770
|
!(prevItem == null || typeof prevItem === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field `%s` on record `%s` ' + 'to be an object, got `%s`.', fieldName, RelayModernRecord.getDataID(record), prevItem) : invariant(false) : void 0;
|
|
791
|
-
var prevErrors =
|
|
792
|
-
|
|
793
|
-
linkedArray[nextIndex] =
|
|
794
|
-
|
|
771
|
+
var prevErrors = _this4._fieldErrors;
|
|
772
|
+
_this4._fieldErrors = null;
|
|
773
|
+
linkedArray[nextIndex] = _this4._traverse(field, linkedID, prevItem);
|
|
774
|
+
_this4._prependPreviousErrors(prevErrors, nextIndex);
|
|
795
775
|
});
|
|
796
776
|
this._prependPreviousErrors(prevErrors, fieldName);
|
|
797
777
|
data[fieldName] = linkedArray;
|
|
798
778
|
return linkedArray;
|
|
799
779
|
};
|
|
800
780
|
_proto._readModuleImport = function _readModuleImport(moduleImport, record, data) {
|
|
801
|
-
var _moduleImport$compone;
|
|
802
781
|
var componentKey = getModuleComponentKey(moduleImport.documentName);
|
|
803
|
-
var
|
|
782
|
+
var relayStoreComponent = RelayModernRecord.getValue(record, componentKey);
|
|
783
|
+
var component = relayStoreComponent !== undefined ? relayStoreComponent : moduleImport.componentModuleProvider;
|
|
804
784
|
if (component == null) {
|
|
805
785
|
if (component === undefined) {
|
|
806
786
|
this._markDataAsMissing('<module-import>');
|
|
@@ -816,8 +796,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
816
796
|
data[MODULE_COMPONENT_KEY] = component;
|
|
817
797
|
};
|
|
818
798
|
_proto._readAliasedInlineFragment = function _readAliasedInlineFragment(aliasedInlineFragment, record, data) {
|
|
819
|
-
var prevErrors = this.
|
|
820
|
-
this.
|
|
799
|
+
var prevErrors = this._fieldErrors;
|
|
800
|
+
this._fieldErrors = null;
|
|
821
801
|
var fieldValue = this._readInlineFragment(aliasedInlineFragment.fragment, record, {}, true);
|
|
822
802
|
this._prependPreviousErrors(prevErrors, aliasedInlineFragment.name);
|
|
823
803
|
if (fieldValue === false) {
|
|
@@ -12,7 +12,8 @@ var RelayStoreUtils = require('./RelayStoreUtils');
|
|
|
12
12
|
var _require2 = require('./TypeID'),
|
|
13
13
|
generateTypeID = _require2.generateTypeID;
|
|
14
14
|
var invariant = require('invariant');
|
|
15
|
-
var
|
|
15
|
+
var getReadTimeResolverStorageKey = RelayStoreUtils.getReadTimeResolverStorageKey,
|
|
16
|
+
getStorageKey = RelayStoreUtils.getStorageKey,
|
|
16
17
|
getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
|
|
17
18
|
function mark(recordSource, selector, references, operationLoader, shouldProcessClientComponents) {
|
|
18
19
|
var dataID = selector.dataID,
|
|
@@ -123,8 +124,6 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
123
124
|
_this._traverseSelections(selection.fragment.selections, record);
|
|
124
125
|
break;
|
|
125
126
|
case 'RelayResolver':
|
|
126
|
-
_this._traverseResolverField(selection, record);
|
|
127
|
-
break;
|
|
128
127
|
case 'RelayLiveResolver':
|
|
129
128
|
_this._traverseResolverField(selection, record);
|
|
130
129
|
break;
|
|
@@ -195,7 +194,7 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
195
194
|
}
|
|
196
195
|
};
|
|
197
196
|
_proto._traverseResolverField = function _traverseResolverField(field, record) {
|
|
198
|
-
var storageKey =
|
|
197
|
+
var storageKey = getReadTimeResolverStorageKey(field, this._variables);
|
|
199
198
|
var dataID = RelayModernRecord.getLinkedRecordID(record, storageKey);
|
|
200
199
|
if (dataID != null) {
|
|
201
200
|
this._references.add(dataID);
|