relay-runtime 10.0.1 → 10.1.3
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 +6 -0
- package/handlers/connection/MutationHandlers.js.flow +152 -20
- package/index.js +1 -1
- package/index.js.flow +17 -1
- package/lib/handlers/RelayDefaultHandlerProvider.js +9 -0
- package/lib/handlers/connection/MutationHandlers.js +185 -21
- package/lib/index.js +7 -0
- package/lib/mutations/RelayDeclarativeMutationConfig.js +5 -7
- package/lib/mutations/commitMutation.js +1 -4
- package/lib/mutations/validateMutation.js +28 -12
- package/lib/network/RelayQueryResponseCache.js +3 -7
- package/lib/query/GraphQLTag.js +2 -1
- package/lib/query/fetchQuery.js +2 -3
- package/lib/query/fetchQueryInternal.js +2 -3
- package/lib/store/DataChecker.js +85 -10
- package/lib/store/RelayConcreteVariables.js +2 -6
- package/lib/store/RelayModernEnvironment.js +81 -72
- package/lib/store/RelayModernFragmentSpecResolver.js +14 -7
- package/lib/store/RelayModernOperationDescriptor.js +6 -5
- package/lib/store/RelayModernQueryExecutor.js +46 -33
- package/lib/store/RelayModernRecord.js +3 -7
- package/lib/store/RelayModernStore.js +39 -137
- package/lib/store/RelayOperationTracker.js +7 -9
- package/lib/store/RelayOptimisticRecordSource.js +2 -6
- package/lib/store/RelayPublishQueue.js +1 -1
- package/lib/store/RelayReader.js +196 -33
- package/lib/store/RelayRecordSourceMapImpl.js +3 -5
- package/lib/store/RelayReferenceMarker.js +87 -5
- package/lib/store/RelayResponseNormalizer.js +115 -19
- package/lib/store/RelayStoreReactFlightUtils.js +47 -0
- package/lib/store/RelayStoreSubscriptions.js +162 -0
- package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +258 -0
- package/lib/store/StoreInspector.js +2 -6
- package/lib/store/createRelayContext.js +5 -0
- package/lib/store/defaultRequiredFieldLogger.js +18 -0
- package/lib/store/normalizeRelayPayload.js +2 -6
- package/lib/subscription/requestSubscription.js +2 -3
- package/lib/util/NormalizationNode.js +1 -5
- package/lib/util/RelayConcreteNode.js +2 -0
- package/lib/util/RelayFeatureFlags.js +7 -2
- package/lib/util/createPayloadFor3DField.js +2 -7
- package/lib/util/getFragmentIdentifier.js +12 -3
- package/lib/util/getOperation.js +33 -0
- package/lib/util/isEmptyObject.js +25 -0
- package/lib/util/recycleNodesInto.js +4 -1
- package/lib/util/reportMissingRequiredFields.js +48 -0
- package/mutations/commitMutation.js.flow +1 -2
- package/mutations/validateMutation.js.flow +34 -5
- package/network/RelayNetworkTypes.js.flow +22 -0
- package/package.json +2 -2
- package/query/GraphQLTag.js.flow +3 -1
- package/query/fetchQuery.js.flow +2 -2
- package/query/fetchQueryInternal.js.flow +0 -5
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/DataChecker.js.flow +68 -2
- package/store/RelayModernEnvironment.js.flow +107 -87
- package/store/RelayModernFragmentSpecResolver.js.flow +13 -1
- package/store/RelayModernOperationDescriptor.js.flow +5 -1
- package/store/RelayModernQueryExecutor.js.flow +47 -23
- package/store/RelayModernStore.js.flow +33 -107
- package/store/RelayPublishQueue.js.flow +1 -1
- package/store/RelayReader.js.flow +180 -15
- package/store/RelayReferenceMarker.js.flow +72 -5
- package/store/RelayResponseNormalizer.js.flow +130 -19
- package/store/RelayStoreReactFlightUtils.js.flow +64 -0
- package/store/RelayStoreSubscriptions.js.flow +168 -0
- package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +259 -0
- package/store/RelayStoreTypes.js.flow +130 -37
- package/store/createRelayContext.js.flow +3 -0
- package/store/defaultRequiredFieldLogger.js.flow +23 -0
- package/subscription/requestSubscription.js.flow +5 -2
- package/util/NormalizationNode.js.flow +17 -2
- package/util/ReaderNode.js.flow +20 -1
- package/util/RelayConcreteNode.js.flow +6 -0
- package/util/RelayFeatureFlags.js.flow +12 -1
- package/util/getFragmentIdentifier.js.flow +33 -9
- package/util/getOperation.js.flow +40 -0
- package/util/getRequestIdentifier.js.flow +1 -1
- package/util/isEmptyObject.js.flow +25 -0
- package/util/recycleNodesInto.js.flow +11 -0
- package/util/reportMissingRequiredFields.js.flow +51 -0
package/lib/store/RelayReader.js
CHANGED
|
@@ -20,28 +20,33 @@ var _require = require('../util/RelayConcreteNode'),
|
|
|
20
20
|
CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
|
|
21
21
|
CONDITION = _require.CONDITION,
|
|
22
22
|
DEFER = _require.DEFER,
|
|
23
|
+
FLIGHT_FIELD = _require.FLIGHT_FIELD,
|
|
23
24
|
FRAGMENT_SPREAD = _require.FRAGMENT_SPREAD,
|
|
24
25
|
INLINE_DATA_FRAGMENT_SPREAD = _require.INLINE_DATA_FRAGMENT_SPREAD,
|
|
25
26
|
INLINE_FRAGMENT = _require.INLINE_FRAGMENT,
|
|
26
27
|
LINKED_FIELD = _require.LINKED_FIELD,
|
|
27
28
|
MODULE_IMPORT = _require.MODULE_IMPORT,
|
|
29
|
+
REQUIRED_FIELD = _require.REQUIRED_FIELD,
|
|
28
30
|
SCALAR_FIELD = _require.SCALAR_FIELD,
|
|
29
31
|
STREAM = _require.STREAM;
|
|
30
32
|
|
|
31
|
-
var _require2 = require('./
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
var _require2 = require('./RelayStoreReactFlightUtils'),
|
|
34
|
+
getReactFlightClientResponse = _require2.getReactFlightClientResponse;
|
|
35
|
+
|
|
36
|
+
var _require3 = require('./RelayStoreUtils'),
|
|
37
|
+
FRAGMENTS_KEY = _require3.FRAGMENTS_KEY,
|
|
38
|
+
FRAGMENT_OWNER_KEY = _require3.FRAGMENT_OWNER_KEY,
|
|
39
|
+
FRAGMENT_PROP_NAME_KEY = _require3.FRAGMENT_PROP_NAME_KEY,
|
|
40
|
+
ID_KEY = _require3.ID_KEY,
|
|
41
|
+
IS_WITHIN_UNMATCHED_TYPE_REFINEMENT = _require3.IS_WITHIN_UNMATCHED_TYPE_REFINEMENT,
|
|
42
|
+
MODULE_COMPONENT_KEY = _require3.MODULE_COMPONENT_KEY,
|
|
43
|
+
ROOT_ID = _require3.ROOT_ID,
|
|
44
|
+
getArgumentValues = _require3.getArgumentValues,
|
|
45
|
+
getStorageKey = _require3.getStorageKey,
|
|
46
|
+
getModuleComponentKey = _require3.getModuleComponentKey;
|
|
47
|
+
|
|
48
|
+
var _require4 = require('./TypeID'),
|
|
49
|
+
generateTypeID = _require4.generateTypeID;
|
|
45
50
|
|
|
46
51
|
function read(recordSource, selector) {
|
|
47
52
|
var reader = new RelayReader(recordSource, selector);
|
|
@@ -56,6 +61,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
56
61
|
function RelayReader(recordSource, selector) {
|
|
57
62
|
this._isMissingData = false;
|
|
58
63
|
this._isWithinUnmatchedTypeRefinement = false;
|
|
64
|
+
this._missingRequiredFields = null;
|
|
59
65
|
this._owner = selector.owner;
|
|
60
66
|
this._recordSource = recordSource;
|
|
61
67
|
this._seenRecords = {};
|
|
@@ -124,7 +130,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
124
130
|
data: data,
|
|
125
131
|
isMissingData: this._isMissingData && isDataExpectedToBePresent,
|
|
126
132
|
seenRecords: this._seenRecords,
|
|
127
|
-
selector: this._selector
|
|
133
|
+
selector: this._selector,
|
|
134
|
+
missingRequiredFields: this._missingRequiredFields
|
|
128
135
|
};
|
|
129
136
|
};
|
|
130
137
|
|
|
@@ -143,9 +150,9 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
143
150
|
|
|
144
151
|
var data = prevData || {};
|
|
145
152
|
|
|
146
|
-
this._traverseSelections(node.selections, record, data);
|
|
153
|
+
var hadRequiredData = this._traverseSelections(node.selections, record, data);
|
|
147
154
|
|
|
148
|
-
return data;
|
|
155
|
+
return hadRequiredData ? data : null;
|
|
149
156
|
};
|
|
150
157
|
|
|
151
158
|
_proto._getVariableValue = function _getVariableValue(name) {
|
|
@@ -153,11 +160,76 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
153
160
|
return this._variables[name];
|
|
154
161
|
};
|
|
155
162
|
|
|
156
|
-
_proto.
|
|
163
|
+
_proto._maybeReportUnexpectedNull = function _maybeReportUnexpectedNull(fieldPath, action, record) {
|
|
164
|
+
var _this$_missingRequire;
|
|
165
|
+
|
|
166
|
+
if (((_this$_missingRequire = this._missingRequiredFields) === null || _this$_missingRequire === void 0 ? void 0 : _this$_missingRequire.action) === 'THROW') {
|
|
167
|
+
// Chained @required directives may cause a parent `@required(action:
|
|
168
|
+
// THROW)` field to become null, so the first missing field we
|
|
169
|
+
// encounter is likely to be the root cause of the error.
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
var owner = this._selector.node.name;
|
|
174
|
+
|
|
175
|
+
switch (action) {
|
|
176
|
+
case 'THROW':
|
|
177
|
+
this._missingRequiredFields = {
|
|
178
|
+
action: action,
|
|
179
|
+
field: {
|
|
180
|
+
path: fieldPath,
|
|
181
|
+
owner: owner
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
return;
|
|
185
|
+
|
|
186
|
+
case 'LOG':
|
|
187
|
+
if (this._missingRequiredFields == null) {
|
|
188
|
+
this._missingRequiredFields = {
|
|
189
|
+
action: action,
|
|
190
|
+
fields: []
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
this._missingRequiredFields.fields.push({
|
|
195
|
+
path: fieldPath,
|
|
196
|
+
owner: owner
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
return;
|
|
200
|
+
|
|
201
|
+
default:
|
|
202
|
+
action;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
_proto._traverseSelections = function _traverseSelections(selections, record, data)
|
|
207
|
+
/* had all expected data */
|
|
208
|
+
{
|
|
157
209
|
for (var i = 0; i < selections.length; i++) {
|
|
158
210
|
var selection = selections[i];
|
|
159
211
|
|
|
160
212
|
switch (selection.kind) {
|
|
213
|
+
case REQUIRED_FIELD:
|
|
214
|
+
!RelayFeatureFlags.ENABLE_REQUIRED_DIRECTIVES ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Encountered a `@required` directive at path "%s" in `%s` without the `ENABLE_REQUIRED_DIRECTIVES` feature flag enabled.', selection.path, this._selector.node.name) : invariant(false) : void 0;
|
|
215
|
+
|
|
216
|
+
var fieldValue = this._readRequiredField(selection, record, data);
|
|
217
|
+
|
|
218
|
+
if (fieldValue == null) {
|
|
219
|
+
var action = selection.action;
|
|
220
|
+
|
|
221
|
+
if (action !== 'NONE') {
|
|
222
|
+
this._maybeReportUnexpectedNull(selection.path, action, record);
|
|
223
|
+
} // We are going to throw, or our parent is going to get nulled out.
|
|
224
|
+
// Either way, sibling values are going to be ignored, so we can
|
|
225
|
+
// bail early here as an optimization.
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
break;
|
|
232
|
+
|
|
161
233
|
case SCALAR_FIELD:
|
|
162
234
|
this._readScalar(selection, record, data);
|
|
163
235
|
|
|
@@ -176,7 +248,11 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
176
248
|
var conditionValue = this._getVariableValue(selection.condition);
|
|
177
249
|
|
|
178
250
|
if (conditionValue === selection.passingValue) {
|
|
179
|
-
this._traverseSelections(selection.selections, record, data);
|
|
251
|
+
var hasExpectedData = this._traverseSelections(selection.selections, record, data);
|
|
252
|
+
|
|
253
|
+
if (!hasExpectedData) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
180
256
|
}
|
|
181
257
|
|
|
182
258
|
break;
|
|
@@ -190,7 +266,11 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
190
266
|
var typeName = RelayModernRecord.getType(record);
|
|
191
267
|
|
|
192
268
|
if (typeName != null && typeName === selection.type) {
|
|
193
|
-
this._traverseSelections(selection.selections, record, data);
|
|
269
|
+
var _hasExpectedData = this._traverseSelections(selection.selections, record, data);
|
|
270
|
+
|
|
271
|
+
if (!_hasExpectedData) {
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
194
274
|
}
|
|
195
275
|
} else if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
|
|
196
276
|
// Similar to the logic in read(): data is only expected to be present
|
|
@@ -246,15 +326,37 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
246
326
|
|
|
247
327
|
case DEFER:
|
|
248
328
|
case CLIENT_EXTENSION:
|
|
249
|
-
|
|
329
|
+
{
|
|
330
|
+
var isMissingData = this._isMissingData;
|
|
250
331
|
|
|
251
|
-
|
|
332
|
+
var _hasExpectedData2 = this._traverseSelections(selection.selections, record, data);
|
|
252
333
|
|
|
253
|
-
|
|
254
|
-
|
|
334
|
+
this._isMissingData = isMissingData;
|
|
335
|
+
|
|
336
|
+
if (!_hasExpectedData2) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
255
342
|
|
|
256
343
|
case STREAM:
|
|
257
|
-
|
|
344
|
+
{
|
|
345
|
+
var _hasExpectedData3 = this._traverseSelections(selection.selections, record, data);
|
|
346
|
+
|
|
347
|
+
if (!_hasExpectedData3) {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
case FLIGHT_FIELD:
|
|
355
|
+
if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) {
|
|
356
|
+
this._readFlightField(selection, record, data);
|
|
357
|
+
} else {
|
|
358
|
+
throw new Error('Flight fields are not yet supported.');
|
|
359
|
+
}
|
|
258
360
|
|
|
259
361
|
break;
|
|
260
362
|
|
|
@@ -263,13 +365,69 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
263
365
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
264
366
|
}
|
|
265
367
|
}
|
|
368
|
+
|
|
369
|
+
return true;
|
|
266
370
|
};
|
|
267
371
|
|
|
268
|
-
_proto.
|
|
372
|
+
_proto._readRequiredField = function _readRequiredField(selection, record, data) {
|
|
373
|
+
switch (selection.field.kind) {
|
|
374
|
+
case SCALAR_FIELD:
|
|
375
|
+
return this._readScalar(selection.field, record, data);
|
|
376
|
+
|
|
377
|
+
case LINKED_FIELD:
|
|
378
|
+
if (selection.field.plural) {
|
|
379
|
+
return this._readPluralLink(selection.field, record, data);
|
|
380
|
+
} else {
|
|
381
|
+
return this._readLink(selection.field, record, data);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
default:
|
|
385
|
+
selection.field.kind;
|
|
386
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
387
|
+
}
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
_proto._readFlightField = function _readFlightField(field, record, data) {
|
|
269
391
|
var _field$alias;
|
|
270
392
|
|
|
271
393
|
var applicationName = (_field$alias = field.alias) !== null && _field$alias !== void 0 ? _field$alias : field.name;
|
|
272
394
|
var storageKey = getStorageKey(field, this._variables);
|
|
395
|
+
var reactFlightClientResponseRecordID = RelayModernRecord.getLinkedRecordID(record, storageKey);
|
|
396
|
+
|
|
397
|
+
if (reactFlightClientResponseRecordID == null) {
|
|
398
|
+
data[applicationName] = reactFlightClientResponseRecordID;
|
|
399
|
+
|
|
400
|
+
if (reactFlightClientResponseRecordID === undefined) {
|
|
401
|
+
this._isMissingData = true;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
return reactFlightClientResponseRecordID;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
var reactFlightClientResponseRecord = this._recordSource.get(reactFlightClientResponseRecordID);
|
|
408
|
+
|
|
409
|
+
this._seenRecords[reactFlightClientResponseRecordID] = reactFlightClientResponseRecord;
|
|
410
|
+
|
|
411
|
+
if (reactFlightClientResponseRecord == null) {
|
|
412
|
+
data[applicationName] = reactFlightClientResponseRecord;
|
|
413
|
+
|
|
414
|
+
if (reactFlightClientResponseRecord === undefined) {
|
|
415
|
+
this._isMissingData = true;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return reactFlightClientResponseRecord;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
var clientResponse = getReactFlightClientResponse(reactFlightClientResponseRecord);
|
|
422
|
+
data[applicationName] = clientResponse;
|
|
423
|
+
return clientResponse;
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
_proto._readScalar = function _readScalar(field, record, data) {
|
|
427
|
+
var _field$alias2;
|
|
428
|
+
|
|
429
|
+
var applicationName = (_field$alias2 = field.alias) !== null && _field$alias2 !== void 0 ? _field$alias2 : field.name;
|
|
430
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
273
431
|
var value = RelayModernRecord.getValue(record, storageKey);
|
|
274
432
|
|
|
275
433
|
if (value === undefined) {
|
|
@@ -277,12 +435,13 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
277
435
|
}
|
|
278
436
|
|
|
279
437
|
data[applicationName] = value;
|
|
438
|
+
return value;
|
|
280
439
|
};
|
|
281
440
|
|
|
282
441
|
_proto._readLink = function _readLink(field, record, data) {
|
|
283
|
-
var _field$
|
|
442
|
+
var _field$alias3;
|
|
284
443
|
|
|
285
|
-
var applicationName = (_field$
|
|
444
|
+
var applicationName = (_field$alias3 = field.alias) !== null && _field$alias3 !== void 0 ? _field$alias3 : field.name;
|
|
286
445
|
var storageKey = getStorageKey(field, this._variables);
|
|
287
446
|
var linkedID = RelayModernRecord.getLinkedRecordID(record, storageKey);
|
|
288
447
|
|
|
@@ -293,21 +452,24 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
293
452
|
this._isMissingData = true;
|
|
294
453
|
}
|
|
295
454
|
|
|
296
|
-
return;
|
|
455
|
+
return linkedID;
|
|
297
456
|
}
|
|
298
457
|
|
|
299
458
|
var prevData = data[applicationName];
|
|
300
459
|
!(prevData == null || typeof prevData === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field `%s` on record `%s` ' + 'to be an object, got `%s`.', applicationName, RelayModernRecord.getDataID(record), prevData) : invariant(false) : void 0; // $FlowFixMe[incompatible-variance]
|
|
301
460
|
|
|
302
|
-
|
|
461
|
+
var value = this._traverse(field, linkedID, prevData);
|
|
462
|
+
|
|
463
|
+
data[applicationName] = value;
|
|
464
|
+
return value;
|
|
303
465
|
};
|
|
304
466
|
|
|
305
467
|
_proto._readPluralLink = function _readPluralLink(field, record, data) {
|
|
306
468
|
var _this = this;
|
|
307
469
|
|
|
308
|
-
var _field$
|
|
470
|
+
var _field$alias4;
|
|
309
471
|
|
|
310
|
-
var applicationName = (_field$
|
|
472
|
+
var applicationName = (_field$alias4 = field.alias) !== null && _field$alias4 !== void 0 ? _field$alias4 : field.name;
|
|
311
473
|
var storageKey = getStorageKey(field, this._variables);
|
|
312
474
|
var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
|
|
313
475
|
|
|
@@ -318,7 +480,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
318
480
|
this._isMissingData = true;
|
|
319
481
|
}
|
|
320
482
|
|
|
321
|
-
return;
|
|
483
|
+
return linkedIDs;
|
|
322
484
|
}
|
|
323
485
|
|
|
324
486
|
var prevData = data[applicationName];
|
|
@@ -342,6 +504,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
342
504
|
linkedArray[nextIndex] = _this._traverse(field, linkedID, prevItem);
|
|
343
505
|
});
|
|
344
506
|
data[applicationName] = linkedArray;
|
|
507
|
+
return linkedArray;
|
|
345
508
|
}
|
|
346
509
|
/**
|
|
347
510
|
* Reads a ReaderModuleImport, which was generated from using the @module
|
|
@@ -10,11 +10,9 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
15
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
18
16
|
|
|
19
17
|
var RelayRecordState = require('./RelayRecordState');
|
|
20
18
|
|
|
@@ -84,7 +82,7 @@ var RelayMapRecordSourceMapImpl = /*#__PURE__*/function () {
|
|
|
84
82
|
_proto.toJSON = function toJSON() {
|
|
85
83
|
var obj = {};
|
|
86
84
|
|
|
87
|
-
var _iterator =
|
|
85
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(this._records),
|
|
88
86
|
_step;
|
|
89
87
|
|
|
90
88
|
try {
|
|
@@ -10,16 +10,24 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
|
+
|
|
15
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
|
+
|
|
13
17
|
var RelayConcreteNode = require('../util/RelayConcreteNode');
|
|
14
18
|
|
|
15
19
|
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
16
20
|
|
|
17
21
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
18
22
|
|
|
23
|
+
var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
|
|
24
|
+
|
|
19
25
|
var RelayStoreUtils = require('./RelayStoreUtils');
|
|
20
26
|
|
|
21
27
|
var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
|
|
22
28
|
|
|
29
|
+
var getOperation = require('../util/getOperation');
|
|
30
|
+
|
|
23
31
|
var invariant = require("fbjs/lib/invariant");
|
|
24
32
|
|
|
25
33
|
var _require = require('./TypeID'),
|
|
@@ -28,6 +36,7 @@ var _require = require('./TypeID'),
|
|
|
28
36
|
var CONDITION = RelayConcreteNode.CONDITION,
|
|
29
37
|
CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
|
|
30
38
|
DEFER = RelayConcreteNode.DEFER,
|
|
39
|
+
FLIGHT_FIELD = RelayConcreteNode.FLIGHT_FIELD,
|
|
31
40
|
FRAGMENT_SPREAD = RelayConcreteNode.FRAGMENT_SPREAD,
|
|
32
41
|
INLINE_FRAGMENT = RelayConcreteNode.INLINE_FRAGMENT,
|
|
33
42
|
LINKED_FIELD = RelayConcreteNode.LINKED_FIELD,
|
|
@@ -37,7 +46,8 @@ var CONDITION = RelayConcreteNode.CONDITION,
|
|
|
37
46
|
SCALAR_HANDLE = RelayConcreteNode.SCALAR_HANDLE,
|
|
38
47
|
STREAM = RelayConcreteNode.STREAM,
|
|
39
48
|
TYPE_DISCRIMINATOR = RelayConcreteNode.TYPE_DISCRIMINATOR;
|
|
40
|
-
var
|
|
49
|
+
var ROOT_ID = RelayStoreUtils.ROOT_ID,
|
|
50
|
+
getStorageKey = RelayStoreUtils.getStorageKey,
|
|
41
51
|
getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
|
|
42
52
|
|
|
43
53
|
function mark(recordSource, selector, references, operationLoader) {
|
|
@@ -55,6 +65,7 @@ function mark(recordSource, selector, references, operationLoader) {
|
|
|
55
65
|
var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
56
66
|
function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
|
|
57
67
|
this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
|
|
68
|
+
this._operationName = null;
|
|
58
69
|
this._recordSource = recordSource;
|
|
59
70
|
this._references = references;
|
|
60
71
|
this._variables = variables;
|
|
@@ -63,6 +74,10 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
63
74
|
var _proto = RelayReferenceMarker.prototype;
|
|
64
75
|
|
|
65
76
|
_proto.mark = function mark(node, dataID) {
|
|
77
|
+
if (node.kind === 'Operation' || node.kind === 'SplitOperation') {
|
|
78
|
+
this._operationName = node.name;
|
|
79
|
+
}
|
|
80
|
+
|
|
66
81
|
this._traverse(node, dataID);
|
|
67
82
|
};
|
|
68
83
|
|
|
@@ -127,6 +142,7 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
127
142
|
}
|
|
128
143
|
|
|
129
144
|
break;
|
|
145
|
+
// $FlowFixMe[incompatible-type]
|
|
130
146
|
|
|
131
147
|
case FRAGMENT_SPREAD:
|
|
132
148
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker(): Unexpected fragment spread `...%s`, ' + 'expected all fragments to be inlined.', selection.name) : invariant(false) : void 0;
|
|
@@ -184,6 +200,15 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
184
200
|
|
|
185
201
|
break;
|
|
186
202
|
|
|
203
|
+
case FLIGHT_FIELD:
|
|
204
|
+
if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) {
|
|
205
|
+
_this._traverseFlightField(selection, record);
|
|
206
|
+
} else {
|
|
207
|
+
throw new Error('Flight fields are not yet supported.');
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
break;
|
|
211
|
+
|
|
187
212
|
default:
|
|
188
213
|
selection;
|
|
189
214
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
|
|
@@ -192,8 +217,10 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
192
217
|
};
|
|
193
218
|
|
|
194
219
|
_proto._traverseModuleImport = function _traverseModuleImport(moduleImport, record) {
|
|
220
|
+
var _this$_operationName;
|
|
221
|
+
|
|
195
222
|
var operationLoader = this._operationLoader;
|
|
196
|
-
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`.') : invariant(false) : void 0;
|
|
223
|
+
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`. ' + 'Could not load fragment `%s` in operation `%s`.', moduleImport.fragmentName, (_this$_operationName = this._operationName) !== null && _this$_operationName !== void 0 ? _this$_operationName : '(unknown)') : invariant(false) : void 0;
|
|
197
224
|
var operationKey = getModuleOperationKey(moduleImport.documentName);
|
|
198
225
|
var operationReference = RelayModernRecord.getValue(record, operationKey);
|
|
199
226
|
|
|
@@ -201,10 +228,12 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
201
228
|
return;
|
|
202
229
|
}
|
|
203
230
|
|
|
204
|
-
var
|
|
231
|
+
var normalizationRootNode = operationLoader.get(operationReference);
|
|
232
|
+
|
|
233
|
+
if (normalizationRootNode != null) {
|
|
234
|
+
var selections = getOperation(normalizationRootNode).selections;
|
|
205
235
|
|
|
206
|
-
|
|
207
|
-
this._traverseSelections(operation.selections, record);
|
|
236
|
+
this._traverseSelections(selections, record);
|
|
208
237
|
} // Otherwise, if the operation is not available, we assume that the data
|
|
209
238
|
// cannot have been processed yet and therefore isn't in the store to
|
|
210
239
|
// begin with.
|
|
@@ -239,6 +268,59 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
239
268
|
});
|
|
240
269
|
};
|
|
241
270
|
|
|
271
|
+
_proto._traverseFlightField = function _traverseFlightField(field, record) {
|
|
272
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
273
|
+
var linkedID = RelayModernRecord.getLinkedRecordID(record, storageKey);
|
|
274
|
+
|
|
275
|
+
if (linkedID == null) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
this._references.add(linkedID);
|
|
280
|
+
|
|
281
|
+
var reactFlightClientResponseRecord = this._recordSource.get(linkedID);
|
|
282
|
+
|
|
283
|
+
if (reactFlightClientResponseRecord == null) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
var reachableQueries = RelayModernRecord.getValue(reactFlightClientResponseRecord, RelayStoreReactFlightUtils.REACT_FLIGHT_QUERIES_STORAGE_KEY);
|
|
288
|
+
|
|
289
|
+
if (!Array.isArray(reachableQueries)) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
var operationLoader = this._operationLoader;
|
|
294
|
+
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected an operationLoader to be configured when using ' + 'React Flight') : invariant(false) : void 0; // In Flight, the variables that are in scope for reachable queries aren't
|
|
295
|
+
// the same as what's in scope for the outer query.
|
|
296
|
+
|
|
297
|
+
var prevVariables = this._variables; // $FlowFixMe[incompatible-cast]
|
|
298
|
+
|
|
299
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(reachableQueries),
|
|
300
|
+
_step;
|
|
301
|
+
|
|
302
|
+
try {
|
|
303
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
304
|
+
var query = _step.value;
|
|
305
|
+
this._variables = query.variables;
|
|
306
|
+
var operationReference = query.module;
|
|
307
|
+
var normalizationRootNode = operationLoader.get(operationReference);
|
|
308
|
+
|
|
309
|
+
if (normalizationRootNode != null) {
|
|
310
|
+
var operation = getOperation(normalizationRootNode);
|
|
311
|
+
|
|
312
|
+
this._traverse(operation, ROOT_ID);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
} catch (err) {
|
|
316
|
+
_iterator.e(err);
|
|
317
|
+
} finally {
|
|
318
|
+
_iterator.f();
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
this._variables = prevVariables;
|
|
322
|
+
};
|
|
323
|
+
|
|
242
324
|
return RelayReferenceMarker;
|
|
243
325
|
}();
|
|
244
326
|
|