relay-runtime 18.1.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 +22 -9
- package/handlers/connection/ConnectionHandler.js.flow +6 -1
- package/index.js +1 -1
- package/index.js.flow +4 -0
- package/lib/experimental.js +5 -2
- package/lib/handlers/connection/ConnectionHandler.js +1 -1
- package/lib/index.js +3 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +1 -1
- package/lib/mutations/RelayRecordProxy.js +14 -3
- package/lib/mutations/RelayRecordSourceMutator.js +17 -0
- 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 +244 -183
- package/lib/store/RelayReferenceMarker.js +3 -4
- package/lib/store/RelayResponseNormalizer.js +48 -26
- package/lib/store/RelayStoreSubscriptions.js +2 -2
- package/lib/store/RelayStoreUtils.js +8 -0
- package/lib/store/ResolverCache.js +1 -165
- 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 +5 -10
- 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 +7 -2
- package/lib/util/handlePotentialSnapshotErrors.js +12 -9
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +1 -0
- package/mutations/RelayRecordProxy.js.flow +30 -3
- package/mutations/RelayRecordSourceMutator.js.flow +27 -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/RelayModernRecord.js.flow +1 -1
- package/store/RelayModernSelector.js.flow +2 -0
- package/store/RelayModernStore.js.flow +74 -27
- package/store/RelayOptimisticRecordSource.js.flow +2 -0
- package/store/RelayPublishQueue.js.flow +32 -21
- package/store/RelayReader.js.flow +400 -145
- package/store/RelayRecordState.js.flow +1 -1
- package/store/RelayReferenceMarker.js.flow +3 -4
- package/store/RelayResponseNormalizer.js.flow +94 -62
- package/store/RelayStoreSubscriptions.js.flow +2 -2
- package/store/RelayStoreTypes.js.flow +45 -15
- package/store/RelayStoreUtils.js.flow +30 -1
- package/store/ResolverCache.js.flow +2 -271
- 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 +5 -10
- 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 +10 -1
- package/util/ReaderNode.js.flow +9 -3
- package/util/RelayConcreteNode.js.flow +3 -1
- package/util/RelayError.js.flow +1 -0
- package/util/RelayFeatureFlags.js.flow +31 -7
- package/util/RelayRuntimeTypes.js.flow +17 -3
- package/util/getPaginationVariables.js.flow +2 -0
- package/util/handlePotentialSnapshotErrors.js.flow +24 -12
- 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
|
@@ -28,7 +28,7 @@ var DEFAULT_RELEASE_BUFFER_SIZE = 10;
|
|
|
28
28
|
var RelayModernStore = /*#__PURE__*/function () {
|
|
29
29
|
function RelayModernStore(source, options) {
|
|
30
30
|
var _this = this;
|
|
31
|
-
var _options$gcReleaseBuf, _options$gcScheduler, _options$getDataID, _options$log, _options$operationLoa, _options$shouldProces, _options$treatMissing;
|
|
31
|
+
var _options$gcReleaseBuf, _options$shouldRetain, _options$gcScheduler, _options$getDataID, _options$log, _options$operationLoa, _options$shouldProces, _options$treatMissing;
|
|
32
32
|
(0, _defineProperty2["default"])(this, "_gcStep", function () {
|
|
33
33
|
if (_this._gcRun) {
|
|
34
34
|
if (_this._gcRun.next().done) {
|
|
@@ -50,6 +50,7 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
50
50
|
this._currentWriteEpoch = 0;
|
|
51
51
|
this._gcHoldCounter = 0;
|
|
52
52
|
this._gcReleaseBufferSize = (_options$gcReleaseBuf = options === null || options === void 0 ? void 0 : options.gcReleaseBufferSize) !== null && _options$gcReleaseBuf !== void 0 ? _options$gcReleaseBuf : DEFAULT_RELEASE_BUFFER_SIZE;
|
|
53
|
+
this._shouldRetainWithinTTL_EXPERIMENTAL = (_options$shouldRetain = options === null || options === void 0 ? void 0 : options.shouldRetainWithinTTL_EXPERIMENTAL) !== null && _options$shouldRetain !== void 0 ? _options$shouldRetain : false;
|
|
53
54
|
this._gcRun = null;
|
|
54
55
|
this._gcScheduler = (_options$gcScheduler = options === null || options === void 0 ? void 0 : options.gcScheduler) !== null && _options$gcScheduler !== void 0 ? _options$gcScheduler : resolveImmediate;
|
|
55
56
|
this._getDataID = (_options$getDataID = options === null || options === void 0 ? void 0 : options.getDataID) !== null && _options$getDataID !== void 0 ? _options$getDataID : defaultGetDataID;
|
|
@@ -67,10 +68,10 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
67
68
|
this._resolverCache = new LiveResolverCache(function () {
|
|
68
69
|
return _this._getMutableRecordSource();
|
|
69
70
|
}, this);
|
|
70
|
-
this.
|
|
71
|
+
this._resolverContext = options === null || options === void 0 ? void 0 : options.resolverContext;
|
|
72
|
+
this._storeSubscriptions = new RelayStoreSubscriptions(options === null || options === void 0 ? void 0 : options.log, this._resolverCache, this._resolverContext);
|
|
71
73
|
this._updatedRecordIDs = new Set();
|
|
72
74
|
this._shouldProcessClientComponents = (_options$shouldProces = options === null || options === void 0 ? void 0 : options.shouldProcessClientComponents) !== null && _options$shouldProces !== void 0 ? _options$shouldProces : false;
|
|
73
|
-
this._resolverContext = options === null || options === void 0 ? void 0 : options.resolverContext;
|
|
74
75
|
this._treatMissingFieldsAsNull = (_options$treatMissing = options === null || options === void 0 ? void 0 : options.treatMissingFieldsAsNull) !== null && _options$treatMissing !== void 0 ? _options$treatMissing : false;
|
|
75
76
|
this._actorIdentifier = options === null || options === void 0 ? void 0 : options.actorIdentifier;
|
|
76
77
|
initializeRecordSource(this._recordSource);
|
|
@@ -150,13 +151,17 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
150
151
|
var _queryCacheExpirationTime = _this2._queryCacheExpirationTime;
|
|
151
152
|
var rootEntryIsStale = rootEntry.fetchTime != null && _queryCacheExpirationTime != null && rootEntry.fetchTime <= Date.now() - _queryCacheExpirationTime;
|
|
152
153
|
if (rootEntryIsStale) {
|
|
153
|
-
_this2.
|
|
154
|
+
if (!_this2._shouldRetainWithinTTL_EXPERIMENTAL) {
|
|
155
|
+
_this2._roots["delete"](id);
|
|
156
|
+
}
|
|
154
157
|
_this2.scheduleGC();
|
|
155
158
|
} else {
|
|
156
159
|
_this2._releaseBuffer.push(id);
|
|
157
160
|
if (_this2._releaseBuffer.length > _this2._gcReleaseBufferSize) {
|
|
158
161
|
var _id = _this2._releaseBuffer.shift();
|
|
159
|
-
_this2.
|
|
162
|
+
if (!_this2._shouldRetainWithinTTL_EXPERIMENTAL) {
|
|
163
|
+
_this2._roots["delete"](_id);
|
|
164
|
+
}
|
|
160
165
|
_this2.scheduleGC();
|
|
161
166
|
}
|
|
162
167
|
}
|
|
@@ -414,6 +419,9 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
414
419
|
while (!gcRun.next().done) {}
|
|
415
420
|
};
|
|
416
421
|
_proto._collect = function* _collect() {
|
|
422
|
+
if (this._shouldRetainWithinTTL_EXPERIMENTAL && this._queryCacheExpirationTime == null) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
417
425
|
var log = this.__log;
|
|
418
426
|
top: while (true) {
|
|
419
427
|
if (log != null) {
|
|
@@ -423,11 +431,25 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
423
431
|
}
|
|
424
432
|
var startEpoch = this._currentWriteEpoch;
|
|
425
433
|
var references = new Set();
|
|
426
|
-
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(this._roots.
|
|
434
|
+
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(this._roots.entries()),
|
|
427
435
|
_step2;
|
|
428
436
|
try {
|
|
429
437
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
430
|
-
var
|
|
438
|
+
var _step2$value = _step2.value,
|
|
439
|
+
_dataID = _step2$value[0],
|
|
440
|
+
_step2$value$ = _step2$value[1],
|
|
441
|
+
operation = _step2$value$.operation,
|
|
442
|
+
refCount = _step2$value$.refCount,
|
|
443
|
+
fetchTime = _step2$value$.fetchTime;
|
|
444
|
+
if (this._shouldRetainWithinTTL_EXPERIMENTAL) {
|
|
445
|
+
var _queryCacheExpirationTime = this._queryCacheExpirationTime;
|
|
446
|
+
!(_queryCacheExpirationTime != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Query cache expiration time should be non-null if executing GC') : invariant(false) : void 0;
|
|
447
|
+
var recordHasExpired = fetchTime == null || fetchTime <= Date.now() - _queryCacheExpirationTime;
|
|
448
|
+
var recordShouldBeCollected = recordHasExpired && refCount === 0 && !this._releaseBuffer.includes(_dataID);
|
|
449
|
+
if (recordShouldBeCollected) {
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
431
453
|
var selector = operation.root;
|
|
432
454
|
RelayReferenceMarker.mark(this._recordSource, selector, references, this._operationLoader, this._shouldProcessClientComponents);
|
|
433
455
|
yield;
|
|
@@ -445,21 +467,20 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
445
467
|
} finally {
|
|
446
468
|
_iterator2.f();
|
|
447
469
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
var maybeResolverSubscription = RelayModernRecord.getValue(record, RELAY_RESOLVER_LIVE_STATE_SUBSCRIPTION_KEY);
|
|
458
|
-
if (maybeResolverSubscription != null) {
|
|
459
|
-
maybeResolverSubscription();
|
|
460
|
-
}
|
|
470
|
+
var storeIDs = this._recordSource.getRecordIDs();
|
|
471
|
+
for (var ii = 0; ii < storeIDs.length; ii++) {
|
|
472
|
+
var dataID = storeIDs[ii];
|
|
473
|
+
if (!references.has(dataID)) {
|
|
474
|
+
var record = this._recordSource.get(dataID);
|
|
475
|
+
if (record != null) {
|
|
476
|
+
var maybeResolverSubscription = RelayModernRecord.getValue(record, RELAY_RESOLVER_LIVE_STATE_SUBSCRIPTION_KEY);
|
|
477
|
+
if (maybeResolverSubscription != null) {
|
|
478
|
+
maybeResolverSubscription();
|
|
461
479
|
}
|
|
462
|
-
|
|
480
|
+
}
|
|
481
|
+
this._recordSource.remove(dataID);
|
|
482
|
+
if (this._shouldRetainWithinTTL_EXPERIMENTAL) {
|
|
483
|
+
this._roots["delete"](dataID);
|
|
463
484
|
}
|
|
464
485
|
}
|
|
465
486
|
}
|
|
@@ -476,6 +497,7 @@ var RelayModernStore = /*#__PURE__*/function () {
|
|
|
476
497
|
return {
|
|
477
498
|
path: path,
|
|
478
499
|
getDataID: this._getDataID,
|
|
500
|
+
log: this.__log,
|
|
479
501
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull,
|
|
480
502
|
shouldProcessClientComponents: this._shouldProcessClientComponents,
|
|
481
503
|
actorIdentifier: this._actorIdentifier
|
|
@@ -4,6 +4,7 @@ var _global$ErrorUtils$ap, _global$ErrorUtils;
|
|
|
4
4
|
var RelayRecordSourceMutator = require('../mutations/RelayRecordSourceMutator');
|
|
5
5
|
var RelayRecordSourceProxy = require('../mutations/RelayRecordSourceProxy');
|
|
6
6
|
var RelayRecordSourceSelectorProxy = require('../mutations/RelayRecordSourceSelectorProxy');
|
|
7
|
+
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
7
8
|
var RelayReader = require('./RelayReader');
|
|
8
9
|
var RelayRecordSource = require('./RelayRecordSource');
|
|
9
10
|
var invariant = require('invariant');
|
|
@@ -13,7 +14,7 @@ var applyWithGuard = (_global$ErrorUtils$ap = _global === null || _global === vo
|
|
|
13
14
|
return callback.apply(context, args);
|
|
14
15
|
};
|
|
15
16
|
var RelayPublishQueue = /*#__PURE__*/function () {
|
|
16
|
-
function RelayPublishQueue(store, handlerProvider, getDataID, missingFieldHandlers) {
|
|
17
|
+
function RelayPublishQueue(store, handlerProvider, getDataID, missingFieldHandlers, log) {
|
|
17
18
|
this._hasStoreSnapshot = false;
|
|
18
19
|
this._handlerProvider = handlerProvider || null;
|
|
19
20
|
this._pendingBackupRebase = false;
|
|
@@ -24,6 +25,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
24
25
|
this._gcHold = null;
|
|
25
26
|
this._getDataID = getDataID;
|
|
26
27
|
this._missingFieldHandlers = missingFieldHandlers;
|
|
28
|
+
this._log = log;
|
|
27
29
|
}
|
|
28
30
|
var _proto = RelayPublishQueue.prototype;
|
|
29
31
|
_proto.applyUpdate = function applyUpdate(updater) {
|
|
@@ -69,15 +71,11 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
69
71
|
_proto.run = function run(sourceOperation) {
|
|
70
72
|
var runWillClearGcHold = this._appliedOptimisticUpdates === 0 && !!this._gcHold;
|
|
71
73
|
var runIsANoop = !this._pendingBackupRebase && this._pendingOptimisticUpdates.size === 0 && !runWillClearGcHold;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this._isRunning = true;
|
|
76
|
-
}
|
|
74
|
+
process.env.NODE_ENV !== "production" ? warning(!runIsANoop, 'RelayPublishQueue.run was called, but the call would have been a noop.') : void 0;
|
|
75
|
+
RelayFeatureFlags.DISALLOW_NESTED_UPDATES ? !(this._isRunning !== true) ? process.env.NODE_ENV !== "production" ? invariant(false, 'A store update was detected within another store update. Please ' + "make sure new store updates aren't being executed within an " + 'updater function for a different update.') : invariant(false) : void 0 : process.env.NODE_ENV !== "production" ? warning(this._isRunning !== true, 'A store update was detected within another store update. Please ' + "make sure new store updates aren't being executed within an " + 'updater function for a different update.') : void 0;
|
|
76
|
+
this._isRunning = true;
|
|
77
77
|
if (runIsANoop) {
|
|
78
|
-
|
|
79
|
-
this._isRunning = false;
|
|
80
|
-
}
|
|
78
|
+
this._isRunning = false;
|
|
81
79
|
return [];
|
|
82
80
|
}
|
|
83
81
|
if (this._pendingBackupRebase) {
|
|
@@ -105,9 +103,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
105
103
|
this._gcHold = null;
|
|
106
104
|
}
|
|
107
105
|
}
|
|
108
|
-
|
|
109
|
-
this._isRunning = false;
|
|
110
|
-
}
|
|
106
|
+
this._isRunning = false;
|
|
111
107
|
return this._store.notify(sourceOperation, invalidatedStore);
|
|
112
108
|
};
|
|
113
109
|
_proto._publishSourceFromPayload = function _publishSourceFromPayload(pendingPayload) {
|
|
@@ -118,7 +114,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
118
114
|
var source = payload.source,
|
|
119
115
|
fieldPayloads = payload.fieldPayloads;
|
|
120
116
|
var mutator = new RelayRecordSourceMutator(this._store.getSource(), source);
|
|
121
|
-
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider, this._missingFieldHandlers);
|
|
117
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider, this._missingFieldHandlers, this._log);
|
|
122
118
|
if (fieldPayloads && fieldPayloads.length) {
|
|
123
119
|
fieldPayloads.forEach(function (fieldPayload) {
|
|
124
120
|
var handler = _this._handlerProvider && _this._handlerProvider(fieldPayload.handle);
|
|
@@ -154,7 +150,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
154
150
|
var updater = data.updater;
|
|
155
151
|
var sink = RelayRecordSource.create();
|
|
156
152
|
var mutator = new RelayRecordSourceMutator(_this2._store.getSource(), sink);
|
|
157
|
-
var recordSourceProxy = new RelayRecordSourceProxy(mutator, _this2._getDataID, _this2._handlerProvider, _this2._missingFieldHandlers);
|
|
153
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, _this2._getDataID, _this2._handlerProvider, _this2._missingFieldHandlers, _this2._log);
|
|
158
154
|
applyWithGuard(updater, null, [recordSourceProxy], null, 'RelayPublishQueue:commitData');
|
|
159
155
|
invalidatedStore = invalidatedStore || recordSourceProxy.isStoreMarkedForInvalidation();
|
|
160
156
|
var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
|
|
@@ -168,7 +164,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
|
|
|
168
164
|
var _this3 = this;
|
|
169
165
|
var sink = RelayRecordSource.create();
|
|
170
166
|
var mutator = new RelayRecordSourceMutator(this._store.getSource(), sink);
|
|
171
|
-
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider, this._missingFieldHandlers);
|
|
167
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider, this._missingFieldHandlers, this._log);
|
|
172
168
|
var processUpdate = function processUpdate(optimisticUpdate) {
|
|
173
169
|
if (optimisticUpdate.storeUpdater) {
|
|
174
170
|
var storeUpdater = optimisticUpdate.storeUpdater;
|