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
|
@@ -13,11 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
19
|
-
|
|
20
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
16
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
21
17
|
|
|
22
18
|
var RelayDefaultHandlerProvider = require('../handlers/RelayDefaultHandlerProvider');
|
|
23
19
|
|
|
@@ -35,6 +31,8 @@ var RelayRecordSource = require('./RelayRecordSource');
|
|
|
35
31
|
|
|
36
32
|
var defaultGetDataID = require('./defaultGetDataID');
|
|
37
33
|
|
|
34
|
+
var defaultRequiredFieldLogger = require('./defaultRequiredFieldLogger');
|
|
35
|
+
|
|
38
36
|
var generateID = require('../util/generateID');
|
|
39
37
|
|
|
40
38
|
var invariant = require("fbjs/lib/invariant");
|
|
@@ -43,24 +41,30 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
43
41
|
function RelayModernEnvironment(config) {
|
|
44
42
|
var _this = this;
|
|
45
43
|
|
|
46
|
-
var _config$log, _config$UNSTABLE_defa, _config$UNSTABLE_DO_N, _config$scheduler, _config$isServer, _config$operationTrac;
|
|
44
|
+
var _config$log, _config$requiredField, _config$UNSTABLE_defa, _config$UNSTABLE_DO_N, _config$scheduler, _config$isServer, _config$operationTrac;
|
|
47
45
|
|
|
48
46
|
this.configName = config.configName;
|
|
49
47
|
var handlerProvider = config.handlerProvider ? config.handlerProvider : RelayDefaultHandlerProvider;
|
|
50
48
|
this._treatMissingFieldsAsNull = config.treatMissingFieldsAsNull === true;
|
|
51
49
|
var operationLoader = config.operationLoader;
|
|
50
|
+
var reactFlightPayloadDeserializer = config.reactFlightPayloadDeserializer;
|
|
52
51
|
|
|
53
52
|
if (process.env.NODE_ENV !== "production") {
|
|
54
53
|
if (operationLoader != null) {
|
|
55
54
|
!(typeof operationLoader === 'object' && typeof operationLoader.get === 'function' && typeof operationLoader.load === 'function') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected `operationLoader` to be an object ' + 'with get() and load() functions, got `%s`.', operationLoader) : invariant(false) : void 0;
|
|
56
55
|
}
|
|
56
|
+
|
|
57
|
+
if (reactFlightPayloadDeserializer != null) {
|
|
58
|
+
!(typeof reactFlightPayloadDeserializer === 'function') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected `reactFlightPayloadDeserializer` ' + ' to be a function, got `%s`.', reactFlightPayloadDeserializer) : invariant(false) : void 0;
|
|
59
|
+
}
|
|
57
60
|
}
|
|
58
61
|
|
|
59
62
|
this.__log = (_config$log = config.log) !== null && _config$log !== void 0 ? _config$log : emptyFunction;
|
|
63
|
+
this.requiredFieldLogger = (_config$requiredField = config.requiredFieldLogger) !== null && _config$requiredField !== void 0 ? _config$requiredField : defaultRequiredFieldLogger;
|
|
60
64
|
this._defaultRenderPolicy = ((_config$UNSTABLE_defa = config.UNSTABLE_defaultRenderPolicy) !== null && _config$UNSTABLE_defa !== void 0 ? _config$UNSTABLE_defa : RelayFeatureFlags.ENABLE_PARTIAL_RENDERING_DEFAULT === true) ? 'partial' : 'full';
|
|
61
65
|
this._operationLoader = operationLoader;
|
|
62
66
|
this._operationExecutions = new Map();
|
|
63
|
-
this._network = config.network;
|
|
67
|
+
this._network = this.__wrapNetworkWithLogObserver(config.network);
|
|
64
68
|
this._getDataID = (_config$UNSTABLE_DO_N = config.UNSTABLE_DO_NOT_USE_getDataID) !== null && _config$UNSTABLE_DO_N !== void 0 ? _config$UNSTABLE_DO_N : defaultGetDataID;
|
|
65
69
|
this._publishQueue = new RelayPublishQueue(config.store, handlerProvider, this._getDataID);
|
|
66
70
|
this._scheduler = (_config$scheduler = config.scheduler) !== null && _config$scheduler !== void 0 ? _config$scheduler : null;
|
|
@@ -69,7 +73,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
69
73
|
this._isServer = (_config$isServer = config.isServer) !== null && _config$isServer !== void 0 ? _config$isServer : false;
|
|
70
74
|
|
|
71
75
|
this.__setNet = function (newNet) {
|
|
72
|
-
return _this._network = newNet;
|
|
76
|
+
return _this._network = _this.__wrapNetworkWithLogObserver(newNet);
|
|
73
77
|
};
|
|
74
78
|
|
|
75
79
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -93,6 +97,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
93
97
|
|
|
94
98
|
this._missingFieldHandlers = config.missingFieldHandlers;
|
|
95
99
|
this._operationTracker = (_config$operationTrac = config.operationTracker) !== null && _config$operationTrac !== void 0 ? _config$operationTrac : new RelayOperationTracker();
|
|
100
|
+
this._reactFlightPayloadDeserializer = reactFlightPayloadDeserializer;
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
var _proto = RelayModernEnvironment.prototype;
|
|
@@ -174,6 +179,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
174
179
|
operationLoader: _this5._operationLoader,
|
|
175
180
|
optimisticConfig: optimisticConfig,
|
|
176
181
|
publishQueue: _this5._publishQueue,
|
|
182
|
+
reactFlightPayloadDeserializer: _this5._reactFlightPayloadDeserializer,
|
|
177
183
|
scheduler: _this5._scheduler,
|
|
178
184
|
sink: sink,
|
|
179
185
|
source: source,
|
|
@@ -212,6 +218,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
212
218
|
operationLoader: _this6._operationLoader,
|
|
213
219
|
optimisticConfig: null,
|
|
214
220
|
publishQueue: _this6._publishQueue,
|
|
221
|
+
reactFlightPayloadDeserializer: _this6._reactFlightPayloadDeserializer,
|
|
215
222
|
scheduler: _this6._scheduler,
|
|
216
223
|
sink: sink,
|
|
217
224
|
source: RelayObservable.from({
|
|
@@ -300,15 +307,9 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
300
307
|
var _this9 = this;
|
|
301
308
|
|
|
302
309
|
var operation = _ref.operation,
|
|
303
|
-
cacheConfig = _ref.cacheConfig,
|
|
304
310
|
updater = _ref.updater;
|
|
305
|
-
|
|
306
|
-
var _this$__createLogObse = this.__createLogObserver(operation.request.node.params, operation.request.variables),
|
|
307
|
-
logObserver = _this$__createLogObse[0],
|
|
308
|
-
logRequestInfo = _this$__createLogObse[1];
|
|
309
|
-
|
|
310
311
|
return RelayObservable.create(function (sink) {
|
|
311
|
-
var source = _this9._network.execute(operation.request.node.params, operation.request.variables, cacheConfig || {}, null
|
|
312
|
+
var source = _this9._network.execute(operation.request.node.params, operation.request.variables, operation.request.cacheConfig || {}, null);
|
|
312
313
|
|
|
313
314
|
var executor = RelayModernQueryExecutor.execute({
|
|
314
315
|
operation: operation,
|
|
@@ -316,6 +317,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
316
317
|
operationLoader: _this9._operationLoader,
|
|
317
318
|
optimisticConfig: null,
|
|
318
319
|
publishQueue: _this9._publishQueue,
|
|
320
|
+
reactFlightPayloadDeserializer: _this9._reactFlightPayloadDeserializer,
|
|
319
321
|
scheduler: _this9._scheduler,
|
|
320
322
|
sink: sink,
|
|
321
323
|
source: source,
|
|
@@ -345,17 +347,11 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
345
347
|
_proto.executeMutation = function executeMutation(_ref2) {
|
|
346
348
|
var _this10 = this;
|
|
347
349
|
|
|
348
|
-
var
|
|
349
|
-
operation = _ref2.operation,
|
|
350
|
+
var operation = _ref2.operation,
|
|
350
351
|
optimisticResponse = _ref2.optimisticResponse,
|
|
351
352
|
optimisticUpdater = _ref2.optimisticUpdater,
|
|
352
353
|
updater = _ref2.updater,
|
|
353
354
|
uploadables = _ref2.uploadables;
|
|
354
|
-
|
|
355
|
-
var _this$__createLogObse2 = this.__createLogObserver(operation.request.node.params, operation.request.variables),
|
|
356
|
-
logObserver = _this$__createLogObse2[0],
|
|
357
|
-
logRequestInfo = _this$__createLogObse2[1];
|
|
358
|
-
|
|
359
355
|
return RelayObservable.create(function (sink) {
|
|
360
356
|
var optimisticConfig;
|
|
361
357
|
|
|
@@ -367,9 +363,9 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
367
363
|
};
|
|
368
364
|
}
|
|
369
365
|
|
|
370
|
-
var source = _this10._network.execute(operation.request.node.params, operation.request.variables,
|
|
366
|
+
var source = _this10._network.execute(operation.request.node.params, operation.request.variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, operation.request.cacheConfig), {}, {
|
|
371
367
|
force: true
|
|
372
|
-
}), uploadables
|
|
368
|
+
}), uploadables);
|
|
373
369
|
|
|
374
370
|
var executor = RelayModernQueryExecutor.execute({
|
|
375
371
|
operation: operation,
|
|
@@ -377,6 +373,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
377
373
|
operationLoader: _this10._operationLoader,
|
|
378
374
|
optimisticConfig: optimisticConfig,
|
|
379
375
|
publishQueue: _this10._publishQueue,
|
|
376
|
+
reactFlightPayloadDeserializer: _this10._reactFlightPayloadDeserializer,
|
|
380
377
|
scheduler: _this10._scheduler,
|
|
381
378
|
sink: sink,
|
|
382
379
|
source: source,
|
|
@@ -415,6 +412,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
415
412
|
operationTracker: _this11._operationTracker,
|
|
416
413
|
optimisticConfig: null,
|
|
417
414
|
publishQueue: _this11._publishQueue,
|
|
415
|
+
reactFlightPayloadDeserializer: _this11._reactFlightPayloadDeserializer,
|
|
418
416
|
scheduler: _this11._scheduler,
|
|
419
417
|
sink: sink,
|
|
420
418
|
source: source,
|
|
@@ -432,57 +430,68 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
|
|
|
432
430
|
var _this$configName;
|
|
433
431
|
|
|
434
432
|
return "RelayModernEnvironment(".concat((_this$configName = this.configName) !== null && _this$configName !== void 0 ? _this$configName : '', ")");
|
|
435
|
-
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Wraps the network with logging to ensure that network requests are
|
|
436
|
+
* always logged. Relying on each network callsite to be wrapped is
|
|
437
|
+
* untenable and will eventually lead to holes in the logging.
|
|
438
|
+
*/
|
|
439
|
+
;
|
|
436
440
|
|
|
437
|
-
_proto.
|
|
438
|
-
var
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
log
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
441
|
+
_proto.__wrapNetworkWithLogObserver = function __wrapNetworkWithLogObserver(network) {
|
|
442
|
+
var that = this;
|
|
443
|
+
return {
|
|
444
|
+
execute: function execute(params, variables, cacheConfig, uploadables) {
|
|
445
|
+
var transactionID = generateID();
|
|
446
|
+
var log = that.__log;
|
|
447
|
+
var logObserver = {
|
|
448
|
+
start: function start(subscription) {
|
|
449
|
+
log({
|
|
450
|
+
name: 'network.start',
|
|
451
|
+
transactionID: transactionID,
|
|
452
|
+
params: params,
|
|
453
|
+
variables: variables
|
|
454
|
+
});
|
|
455
|
+
},
|
|
456
|
+
next: function next(response) {
|
|
457
|
+
log({
|
|
458
|
+
name: 'network.next',
|
|
459
|
+
transactionID: transactionID,
|
|
460
|
+
response: response
|
|
461
|
+
});
|
|
462
|
+
},
|
|
463
|
+
error: function error(_error) {
|
|
464
|
+
log({
|
|
465
|
+
name: 'network.error',
|
|
466
|
+
transactionID: transactionID,
|
|
467
|
+
error: _error
|
|
468
|
+
});
|
|
469
|
+
},
|
|
470
|
+
complete: function complete() {
|
|
471
|
+
log({
|
|
472
|
+
name: 'network.complete',
|
|
473
|
+
transactionID: transactionID
|
|
474
|
+
});
|
|
475
|
+
},
|
|
476
|
+
unsubscribe: function unsubscribe() {
|
|
477
|
+
log({
|
|
478
|
+
name: 'network.unsubscribe',
|
|
479
|
+
transactionID: transactionID
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
};
|
|
476
483
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
+
var logRequestInfo = function logRequestInfo(info) {
|
|
485
|
+
log({
|
|
486
|
+
name: 'network.info',
|
|
487
|
+
transactionID: transactionID,
|
|
488
|
+
info: info
|
|
489
|
+
});
|
|
490
|
+
};
|
|
484
491
|
|
|
485
|
-
|
|
492
|
+
return network.execute(params, variables, cacheConfig, uploadables, logRequestInfo)["do"](logObserver);
|
|
493
|
+
}
|
|
494
|
+
};
|
|
486
495
|
};
|
|
487
496
|
|
|
488
497
|
return RelayModernEnvironment;
|
|
@@ -12,11 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
20
18
|
|
|
21
19
|
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
22
20
|
|
|
@@ -26,6 +24,8 @@ var invariant = require("fbjs/lib/invariant");
|
|
|
26
24
|
|
|
27
25
|
var isScalarAndEqual = require('../util/isScalarAndEqual');
|
|
28
26
|
|
|
27
|
+
var reportMissingRequiredFields = require('../util/reportMissingRequiredFields');
|
|
28
|
+
|
|
29
29
|
var warning = require("fbjs/lib/warning");
|
|
30
30
|
|
|
31
31
|
var _require = require('../query/fetchQueryInternal'),
|
|
@@ -105,7 +105,7 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
|
|
|
105
105
|
var nextItem = resolver.resolve();
|
|
106
106
|
|
|
107
107
|
if (nextData || nextItem !== prevItem) {
|
|
108
|
-
nextData = nextData ||
|
|
108
|
+
nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
|
|
109
109
|
nextData[_key2] = nextItem;
|
|
110
110
|
}
|
|
111
111
|
} else {
|
|
@@ -114,7 +114,7 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
|
|
|
114
114
|
var _nextItem = prop !== undefined ? prop : null;
|
|
115
115
|
|
|
116
116
|
if (nextData || !isScalarAndEqual(_nextItem, prevItem)) {
|
|
117
|
-
nextData = nextData ||
|
|
117
|
+
nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
|
|
118
118
|
nextData[_key2] = _nextItem;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -199,6 +199,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
199
199
|
(0, _defineProperty2["default"])(this, "_onChange", function (snapshot) {
|
|
200
200
|
_this2._data = snapshot.data;
|
|
201
201
|
_this2._isMissingData = snapshot.isMissingData;
|
|
202
|
+
_this2._missingRequiredFields = snapshot.missingRequiredFields;
|
|
202
203
|
|
|
203
204
|
_this2._callback();
|
|
204
205
|
});
|
|
@@ -208,6 +209,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
208
209
|
this._callback = callback;
|
|
209
210
|
this._data = _snapshot.data;
|
|
210
211
|
this._isMissingData = _snapshot.isMissingData;
|
|
212
|
+
this._missingRequiredFields = _snapshot.missingRequiredFields;
|
|
211
213
|
this._environment = environment;
|
|
212
214
|
this._selector = selector;
|
|
213
215
|
this._subscription = environment.subscribe(_snapshot, this._onChange);
|
|
@@ -256,6 +258,10 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
256
258
|
}
|
|
257
259
|
}
|
|
258
260
|
|
|
261
|
+
if (this._missingRequiredFields != null) {
|
|
262
|
+
reportMissingRequiredFields(this._environment, this._missingRequiredFields);
|
|
263
|
+
}
|
|
264
|
+
|
|
259
265
|
return this._data;
|
|
260
266
|
};
|
|
261
267
|
|
|
@@ -270,6 +276,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
270
276
|
|
|
271
277
|
this._data = snapshot.data;
|
|
272
278
|
this._isMissingData = snapshot.isMissingData;
|
|
279
|
+
this._missingRequiredFields = snapshot.missingRequiredFields;
|
|
273
280
|
this._selector = selector;
|
|
274
281
|
this._subscription = this._environment.subscribe(snapshot, this._onChange);
|
|
275
282
|
};
|
|
@@ -287,7 +294,7 @@ var SelectorResolver = /*#__PURE__*/function () {
|
|
|
287
294
|
} // NOTE: We manually create the request descriptor here instead of
|
|
288
295
|
// calling createOperationDescriptor() because we want to set a
|
|
289
296
|
// descriptor with *unaltered* variables as the fragment owner.
|
|
290
|
-
// This is a hack that allows us to preserve
|
|
297
|
+
// This is a hack that allows us to preserve existing (broken)
|
|
291
298
|
// behavior of RelayModern containers while using fragment ownership
|
|
292
299
|
// to propagate variables instead of Context.
|
|
293
300
|
// For more details, see the summary of D13999308
|
|
@@ -30,11 +30,11 @@ var _require3 = require('./RelayStoreUtils'),
|
|
|
30
30
|
* are filtered to exclude variables that do not match defined arguments on the
|
|
31
31
|
* operation, and default values are populated for null values.
|
|
32
32
|
*/
|
|
33
|
-
function createOperationDescriptor(request, variables) {
|
|
34
|
-
var dataID = arguments.length >
|
|
33
|
+
function createOperationDescriptor(request, variables, cacheConfig) {
|
|
34
|
+
var dataID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ROOT_ID;
|
|
35
35
|
var operation = request.operation;
|
|
36
36
|
var operationVariables = getOperationVariables(operation, variables);
|
|
37
|
-
var requestDescriptor = createRequestDescriptor(request, operationVariables);
|
|
37
|
+
var requestDescriptor = createRequestDescriptor(request, operationVariables, cacheConfig);
|
|
38
38
|
var operationDescriptor = {
|
|
39
39
|
fragment: createReaderSelector(request.fragment, dataID, operationVariables, requestDescriptor),
|
|
40
40
|
request: requestDescriptor,
|
|
@@ -53,11 +53,12 @@ function createOperationDescriptor(request, variables) {
|
|
|
53
53
|
return operationDescriptor;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
function createRequestDescriptor(request, variables) {
|
|
56
|
+
function createRequestDescriptor(request, variables, cacheConfig) {
|
|
57
57
|
var requestDescriptor = {
|
|
58
58
|
identifier: getRequestIdentifier(request.params, variables),
|
|
59
59
|
node: request,
|
|
60
|
-
variables: variables
|
|
60
|
+
variables: variables,
|
|
61
|
+
cacheConfig: cacheConfig
|
|
61
62
|
};
|
|
62
63
|
|
|
63
64
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -13,19 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
17
17
|
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
-
|
|
22
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
23
|
-
|
|
24
|
-
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
18
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
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; }
|
|
20
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
29
21
|
|
|
30
22
|
var RelayError = require('../util/RelayError');
|
|
31
23
|
|
|
@@ -37,6 +29,8 @@ var RelayRecordSource = require('./RelayRecordSource');
|
|
|
37
29
|
|
|
38
30
|
var RelayResponseNormalizer = require('./RelayResponseNormalizer');
|
|
39
31
|
|
|
32
|
+
var getOperation = require('../util/getOperation');
|
|
33
|
+
|
|
40
34
|
var invariant = require("fbjs/lib/invariant");
|
|
41
35
|
|
|
42
36
|
var stableCopy = require('../util/stableCopy');
|
|
@@ -81,7 +75,8 @@ var Executor = /*#__PURE__*/function () {
|
|
|
81
75
|
operationTracker = _ref.operationTracker,
|
|
82
76
|
treatMissingFieldsAsNull = _ref.treatMissingFieldsAsNull,
|
|
83
77
|
getDataID = _ref.getDataID,
|
|
84
|
-
isClientPayload = _ref.isClientPayload
|
|
78
|
+
isClientPayload = _ref.isClientPayload,
|
|
79
|
+
reactFlightPayloadDeserializer = _ref.reactFlightPayloadDeserializer;
|
|
85
80
|
this._getDataID = getDataID;
|
|
86
81
|
this._treatMissingFieldsAsNull = treatMissingFieldsAsNull;
|
|
87
82
|
this._incrementalPayloadsPending = false;
|
|
@@ -103,6 +98,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
103
98
|
this._subscriptions = new Map();
|
|
104
99
|
this._updater = updater;
|
|
105
100
|
this._isClientPayload = isClientPayload === true;
|
|
101
|
+
this._reactFlightPayloadDeserializer = reactFlightPayloadDeserializer;
|
|
106
102
|
var id = this._nextSubscriptionId++;
|
|
107
103
|
source.subscribe({
|
|
108
104
|
complete: function complete() {
|
|
@@ -166,6 +162,12 @@ var Executor = /*#__PURE__*/function () {
|
|
|
166
162
|
this._incrementalResults.clear();
|
|
167
163
|
|
|
168
164
|
this._completeOperationTracker();
|
|
165
|
+
|
|
166
|
+
if (this._retainDisposable) {
|
|
167
|
+
this._retainDisposable.dispose();
|
|
168
|
+
|
|
169
|
+
this._retainDisposable = null;
|
|
170
|
+
}
|
|
169
171
|
};
|
|
170
172
|
|
|
171
173
|
_proto._updateActiveState = function _updateActiveState() {
|
|
@@ -387,17 +389,17 @@ var Executor = /*#__PURE__*/function () {
|
|
|
387
389
|
nonIncrementalResponses = _partitionGraphQLResp[0],
|
|
388
390
|
incrementalResponses = _partitionGraphQLResp[1]; // In theory this doesn't preserve the ordering of the batch.
|
|
389
391
|
// The idea is that a batch is always:
|
|
390
|
-
// * at
|
|
391
|
-
// * followed zero or more incremental payloads
|
|
392
|
+
// * at most one non-incremental payload
|
|
393
|
+
// * followed by zero or more incremental payloads
|
|
392
394
|
// The non-incremental payload can appear if the server sends a batch
|
|
393
|
-
//
|
|
395
|
+
// with the initial payload followed by some early-to-resolve incremental
|
|
394
396
|
// payloads (although, can that even happen?)
|
|
395
397
|
|
|
396
398
|
|
|
397
399
|
if (nonIncrementalResponses.length > 0) {
|
|
398
|
-
var payloadFollowups = this._processResponses(nonIncrementalResponses); // Please note
|
|
400
|
+
var payloadFollowups = this._processResponses(nonIncrementalResponses); // Please note that we're passing `this._operation` to the publish
|
|
399
401
|
// queue here, which will later passed to the store (via notify)
|
|
400
|
-
// to indicate that this is an operation that
|
|
402
|
+
// to indicate that this is an operation that caused the store to update
|
|
401
403
|
|
|
402
404
|
|
|
403
405
|
var updatedOwners = this._publishQueue.run(this._operation);
|
|
@@ -405,6 +407,10 @@ var Executor = /*#__PURE__*/function () {
|
|
|
405
407
|
this._updateOperationTracker(updatedOwners);
|
|
406
408
|
|
|
407
409
|
this._processPayloadFollowups(payloadFollowups);
|
|
410
|
+
|
|
411
|
+
if (this._incrementalPayloadsPending && !this._retainDisposable) {
|
|
412
|
+
this._retainDisposable = this._store.retain(this._operation);
|
|
413
|
+
}
|
|
408
414
|
}
|
|
409
415
|
|
|
410
416
|
if (incrementalResponses.length > 0) {
|
|
@@ -438,6 +444,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
438
444
|
var payload = normalizeResponse(response, this._operation.root, ROOT_TYPE, {
|
|
439
445
|
getDataID: this._getDataID,
|
|
440
446
|
path: [],
|
|
447
|
+
reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer,
|
|
441
448
|
treatMissingFieldsAsNull: treatMissingFieldsAsNull
|
|
442
449
|
});
|
|
443
450
|
validateOptimisticResponsePayload(payload);
|
|
@@ -477,7 +484,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
477
484
|
var operationLoader = this._operationLoader;
|
|
478
485
|
!operationLoader ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected an operationLoader to be ' + 'configured when using `@match`.') : invariant(false) : void 0;
|
|
479
486
|
|
|
480
|
-
var _iterator =
|
|
487
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(moduleImportPayloads),
|
|
481
488
|
_step;
|
|
482
489
|
|
|
483
490
|
try {
|
|
@@ -488,9 +495,9 @@ var Executor = /*#__PURE__*/function () {
|
|
|
488
495
|
if (operation == null) {
|
|
489
496
|
this._processAsyncOptimisticModuleImport(operationLoader, moduleImportPayload);
|
|
490
497
|
} else {
|
|
491
|
-
var
|
|
498
|
+
var moduleImportOptimisticUpdates = this._processOptimisticModuleImport(operation, moduleImportPayload);
|
|
492
499
|
|
|
493
|
-
optimisticUpdates.push.apply(optimisticUpdates, (0, _toConsumableArray2["default"])(
|
|
500
|
+
optimisticUpdates.push.apply(optimisticUpdates, (0, _toConsumableArray2["default"])(moduleImportOptimisticUpdates));
|
|
494
501
|
}
|
|
495
502
|
}
|
|
496
503
|
} catch (err) {
|
|
@@ -508,11 +515,13 @@ var Executor = /*#__PURE__*/function () {
|
|
|
508
515
|
}, selector, moduleImportPayload.typeName, {
|
|
509
516
|
getDataID: this._getDataID,
|
|
510
517
|
path: moduleImportPayload.path,
|
|
518
|
+
reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer,
|
|
511
519
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull
|
|
512
520
|
});
|
|
513
521
|
};
|
|
514
522
|
|
|
515
|
-
_proto._processOptimisticModuleImport = function _processOptimisticModuleImport(
|
|
523
|
+
_proto._processOptimisticModuleImport = function _processOptimisticModuleImport(normalizationRootNode, moduleImportPayload) {
|
|
524
|
+
var operation = getOperation(normalizationRootNode);
|
|
516
525
|
var optimisticUpdates = [];
|
|
517
526
|
|
|
518
527
|
var modulePayload = this._normalizeModuleImport(moduleImportPayload, operation);
|
|
@@ -537,18 +546,18 @@ var Executor = /*#__PURE__*/function () {
|
|
|
537
546
|
return;
|
|
538
547
|
}
|
|
539
548
|
|
|
540
|
-
var
|
|
549
|
+
var moduleImportOptimisticUpdates = _this7._processOptimisticModuleImport(operation, moduleImportPayload);
|
|
541
550
|
|
|
542
|
-
|
|
551
|
+
moduleImportOptimisticUpdates.forEach(function (update) {
|
|
543
552
|
return _this7._publishQueue.applyUpdate(update);
|
|
544
553
|
});
|
|
545
554
|
|
|
546
555
|
if (_this7._optimisticUpdates == null) {
|
|
547
|
-
process.env.NODE_ENV !== "production" ? warning(false, 'RelayModernQueryExecutor: Unexpected ModuleImport
|
|
556
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayModernQueryExecutor: Unexpected ModuleImport optimistic ' + 'update in operation %s.' + _this7._operation.request.node.params.name) : void 0;
|
|
548
557
|
} else {
|
|
549
558
|
var _this$_optimisticUpda;
|
|
550
559
|
|
|
551
|
-
(_this$_optimisticUpda = _this7._optimisticUpdates).push.apply(_this$_optimisticUpda, (0, _toConsumableArray2["default"])(
|
|
560
|
+
(_this$_optimisticUpda = _this7._optimisticUpdates).push.apply(_this$_optimisticUpda, (0, _toConsumableArray2["default"])(moduleImportOptimisticUpdates));
|
|
552
561
|
|
|
553
562
|
_this7._publishQueue.run();
|
|
554
563
|
}
|
|
@@ -575,8 +584,9 @@ var Executor = /*#__PURE__*/function () {
|
|
|
575
584
|
return responses.map(function (payloadPart) {
|
|
576
585
|
var relayPayload = normalizeResponse(payloadPart, _this8._operation.root, ROOT_TYPE, {
|
|
577
586
|
getDataID: _this8._getDataID,
|
|
578
|
-
|
|
579
|
-
|
|
587
|
+
path: [],
|
|
588
|
+
reactFlightPayloadDeserializer: _this8._reactFlightPayloadDeserializer,
|
|
589
|
+
treatMissingFieldsAsNull: _this8._treatMissingFieldsAsNull
|
|
580
590
|
});
|
|
581
591
|
|
|
582
592
|
_this8._publishQueue.commitPayload(_this8._operation, relayPayload, _this8._updater);
|
|
@@ -676,12 +686,13 @@ var Executor = /*#__PURE__*/function () {
|
|
|
676
686
|
_proto._processModuleImportPayload = function _processModuleImportPayload(moduleImportPayload, operationLoader) {
|
|
677
687
|
var _this10 = this;
|
|
678
688
|
|
|
679
|
-
var
|
|
689
|
+
var node = operationLoader.get(moduleImportPayload.operationReference);
|
|
680
690
|
|
|
681
|
-
if (
|
|
682
|
-
// If the operation module is available synchronously, normalize the
|
|
691
|
+
if (node != null) {
|
|
692
|
+
var operation = getOperation(node); // If the operation module is available synchronously, normalize the
|
|
683
693
|
// data synchronously.
|
|
684
|
-
|
|
694
|
+
|
|
695
|
+
this._handleModuleImportPayload(moduleImportPayload, operation);
|
|
685
696
|
|
|
686
697
|
this._maybeCompleteSubscriptionOperationTracking();
|
|
687
698
|
} else {
|
|
@@ -705,7 +716,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
705
716
|
})).map(function (operation) {
|
|
706
717
|
if (operation != null) {
|
|
707
718
|
_this10._schedule(function () {
|
|
708
|
-
_this10._handleModuleImportPayload(moduleImportPayload, operation);
|
|
719
|
+
_this10._handleModuleImportPayload(moduleImportPayload, getOperation(operation));
|
|
709
720
|
});
|
|
710
721
|
}
|
|
711
722
|
}).subscribe({
|
|
@@ -917,6 +928,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
917
928
|
var relayPayload = normalizeResponse(response, placeholder.selector, placeholder.typeName, {
|
|
918
929
|
getDataID: this._getDataID,
|
|
919
930
|
path: placeholder.path,
|
|
931
|
+
reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer,
|
|
920
932
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull
|
|
921
933
|
});
|
|
922
934
|
|
|
@@ -1068,6 +1080,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
1068
1080
|
var relayPayload = normalizeResponse(response, selector, typeName, {
|
|
1069
1081
|
getDataID: this._getDataID,
|
|
1070
1082
|
path: [].concat((0, _toConsumableArray2["default"])(normalizationPath), [responseKey, String(itemIndex)]),
|
|
1083
|
+
reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer,
|
|
1071
1084
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull
|
|
1072
1085
|
});
|
|
1073
1086
|
return {
|
|
@@ -1128,7 +1141,7 @@ function normalizeResponse(response, selector, typeName, options) {
|
|
|
1128
1141
|
var record = RelayModernRecord.create(selector.dataID, typeName);
|
|
1129
1142
|
source.set(selector.dataID, record);
|
|
1130
1143
|
var relayPayload = RelayResponseNormalizer.normalize(source, selector, data, options);
|
|
1131
|
-
return
|
|
1144
|
+
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, relayPayload), {}, {
|
|
1132
1145
|
errors: errors,
|
|
1133
1146
|
isFinal: ((_response$extensions3 = response.extensions) === null || _response$extensions3 === void 0 ? void 0 : _response$extensions3.is_final) === true
|
|
1134
1147
|
});
|
|
@@ -12,11 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
-
|
|
19
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
15
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
20
16
|
|
|
21
17
|
var areEqual = require("fbjs/lib/areEqual");
|
|
22
18
|
|
|
@@ -87,7 +83,7 @@ var _require2 = require('./RelayStoreUtils'),
|
|
|
87
83
|
* Clone a record.
|
|
88
84
|
*/
|
|
89
85
|
function clone(record) {
|
|
90
|
-
return
|
|
86
|
+
return (0, _objectSpread2["default"])({}, record);
|
|
91
87
|
}
|
|
92
88
|
/**
|
|
93
89
|
* @public
|
|
@@ -248,7 +244,7 @@ function update(prevRecord, nextRecord) {
|
|
|
248
244
|
var key = keys[ii];
|
|
249
245
|
|
|
250
246
|
if (updated || !areEqual(prevRecord[key], nextRecord[key])) {
|
|
251
|
-
updated = updated !== null ? updated :
|
|
247
|
+
updated = updated !== null ? updated : (0, _objectSpread2["default"])({}, prevRecord);
|
|
252
248
|
updated[key] = nextRecord[key];
|
|
253
249
|
}
|
|
254
250
|
}
|