relay-runtime 0.0.0-main-2abce249 → 0.0.0-main-e78cd90a

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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v0.0.0-main-2abce249
2
+ * Relay v0.0.0-main-e78cd90a
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
@@ -508,47 +508,18 @@ var RelayReader = /*#__PURE__*/function () {
508
508
  // evaluating the resolver and it calls readFragment, or when checking if the
509
509
  // inputs have changed since a previous evaluation:
510
510
 
511
- var fragmentValue;
512
- var fragmentReaderSelector;
513
- var fragmentMissingRequiredFields;
514
- var previousMissingRequriedFields;
515
- var currentResolverErrors = [];
516
- var previousResolverErrors;
517
- var fragmentSeenRecordIDs = new Set();
511
+ var snapshot;
518
512
 
519
513
  var getDataForResolverFragment = function getDataForResolverFragment(singularReaderSelector) {
520
- if (fragmentValue != null) {
514
+ if (snapshot != null) {
521
515
  // It was already read when checking for input staleness; no need to read it again.
522
516
  // Note that the variables like fragmentSeenRecordIDs in the outer closure will have
523
517
  // already been set and will still be used in this case.
524
- return fragmentValue;
518
+ return snapshot.data;
525
519
  }
526
520
 
527
- fragmentReaderSelector = singularReaderSelector;
528
- var existingSeenRecords = _this._seenRecords;
529
-
530
- try {
531
- var _resolverFragmentData;
532
-
533
- _this._seenRecords = fragmentSeenRecordIDs;
534
- var resolverFragmentData = {};
535
- previousMissingRequriedFields = _this._missingRequiredFields;
536
- _this._missingRequiredFields = null;
537
- previousResolverErrors = _this._resolverErrors;
538
- _this._resolverErrors = [];
539
-
540
- _this._createInlineDataOrResolverFragmentPointer(singularReaderSelector.node, record, resolverFragmentData);
541
-
542
- fragmentMissingRequiredFields = _this._missingRequiredFields;
543
- currentResolverErrors = _this._resolverErrors;
544
- fragmentValue = (_resolverFragmentData = resolverFragmentData[FRAGMENTS_KEY]) === null || _resolverFragmentData === void 0 ? void 0 : _resolverFragmentData[fragment.name];
545
- !(typeof fragmentValue === 'object' && fragmentValue !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, "Expected reader data to contain a __fragments property with a property for the fragment named ".concat(fragment.name, ", but it is missing.")) : invariant(false) : void 0;
546
- return fragmentValue;
547
- } finally {
548
- _this._seenRecords = existingSeenRecords;
549
- _this._missingRequiredFields = previousMissingRequriedFields;
550
- _this._resolverErrors = previousResolverErrors;
551
- }
521
+ snapshot = read(_this._recordSource, singularReaderSelector, _this._resolverCache);
522
+ return snapshot.data;
552
523
  };
553
524
 
554
525
  var resolverContext = {
@@ -563,6 +534,7 @@ var RelayReader = /*#__PURE__*/function () {
563
534
  };
564
535
  return withResolverContext(resolverContext, function () {
565
536
  var resolverResult = null;
537
+ var resolverError = null;
566
538
 
567
539
  try {
568
540
  // $FlowFixMe[prop-missing] - resolver module's type signature is a lie
@@ -572,23 +544,20 @@ var RelayReader = /*#__PURE__*/function () {
572
544
 
573
545
  // `field.path` is typed as nullable while we rollout compiler changes.
574
546
  var path = (_field$path = field.path) !== null && _field$path !== void 0 ? _field$path : '[UNKNOWN]';
575
- currentResolverErrors.push({
547
+ resolverError = {
576
548
  field: {
577
549
  path: path,
578
550
  owner: _this._fragmentName
579
551
  },
580
552
  error: e
581
- });
553
+ };
582
554
  }
583
555
 
584
556
  return {
585
557
  resolverResult: resolverResult,
586
- errors: currentResolverErrors,
587
- fragmentValue: fragmentValue,
558
+ snapshot: snapshot,
588
559
  resolverID: resolverID,
589
- seenRecordIDs: fragmentSeenRecordIDs,
590
- readerSelector: fragmentReaderSelector,
591
- missingRequiredFields: fragmentMissingRequiredFields
560
+ error: resolverError
592
561
  };
593
562
  });
594
563
  };
@@ -596,26 +565,51 @@ var RelayReader = /*#__PURE__*/function () {
596
565
  var _this$_resolverCache$ = this._resolverCache.readFromCacheOrEvaluate(record, field, this._variables, evaluate, getDataForResolverFragment),
597
566
  result = _this$_resolverCache$[0],
598
567
  seenRecord = _this$_resolverCache$[1],
599
- resolverErrors = _this$_resolverCache$[2],
600
- missingRequiredFields = _this$_resolverCache$[3];
568
+ resolverError = _this$_resolverCache$[2],
569
+ cachedSnapshot = _this$_resolverCache$[3];
570
+
571
+ if (cachedSnapshot != null) {
572
+ if (cachedSnapshot.missingRequiredFields != null) {
573
+ this._addMissingRequiredFields(cachedSnapshot.missingRequiredFields);
574
+ }
575
+
576
+ if (cachedSnapshot.missingClientEdges != null) {
577
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(cachedSnapshot.missingClientEdges),
578
+ _step;
579
+
580
+ try {
581
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
582
+ var missing = _step.value;
601
583
 
602
- var _iterator = (0, _createForOfIteratorHelper2["default"])(resolverErrors),
603
- _step;
584
+ this._missingClientEdges.push(missing);
585
+ }
586
+ } catch (err) {
587
+ _iterator.e(err);
588
+ } finally {
589
+ _iterator.f();
590
+ }
591
+ }
604
592
 
605
- try {
606
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
607
- var resolverError = _step.value;
593
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(cachedSnapshot.relayResolverErrors),
594
+ _step2;
608
595
 
609
- this._resolverErrors.push(resolverError);
596
+ try {
597
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
598
+ var error = _step2.value;
599
+
600
+ this._resolverErrors.push(error);
601
+ }
602
+ } catch (err) {
603
+ _iterator2.e(err);
604
+ } finally {
605
+ _iterator2.f();
610
606
  }
611
- } catch (err) {
612
- _iterator.e(err);
613
- } finally {
614
- _iterator.f();
607
+
608
+ this._isMissingData = this._isMissingData || cachedSnapshot.isMissingData;
615
609
  }
616
610
 
617
- if (missingRequiredFields != null) {
618
- this._addMissingRequiredFields(missingRequiredFields);
611
+ if (resolverError) {
612
+ this._resolverErrors.push(resolverError);
619
613
  }
620
614
 
621
615
  if (seenRecord != null) {
@@ -209,9 +209,7 @@ var RelayStoreUtils = {
209
209
  IS_WITHIN_UNMATCHED_TYPE_REFINEMENT: '__isWithinUnmatchedTypeRefinement',
210
210
  RELAY_RESOLVER_VALUE_KEY: '__resolverValue',
211
211
  RELAY_RESOLVER_INVALIDATION_KEY: '__resolverValueMayBeInvalid',
212
- RELAY_RESOLVER_INPUTS_KEY: '__resolverInputValues',
213
- RELAY_RESOLVER_READER_SELECTOR_KEY: '__resolverReaderSelector',
214
- RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY: '__resolverMissingRequiredFields',
212
+ RELAY_RESOLVER_SNAPSHOT_KEY: '__resolverSnapshot',
215
213
  RELAY_RESOLVER_ERROR_KEY: '__resolverError',
216
214
  formatStorageKey: formatStorageKey,
217
215
  getArgumentValue: getArgumentValue,
@@ -26,10 +26,8 @@ var RelayModernRecord = require('./RelayModernRecord');
26
26
 
27
27
  var _require3 = require('./RelayStoreUtils'),
28
28
  RELAY_RESOLVER_ERROR_KEY = _require3.RELAY_RESOLVER_ERROR_KEY,
29
- RELAY_RESOLVER_INPUTS_KEY = _require3.RELAY_RESOLVER_INPUTS_KEY,
30
29
  RELAY_RESOLVER_INVALIDATION_KEY = _require3.RELAY_RESOLVER_INVALIDATION_KEY,
31
- RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY = _require3.RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY,
32
- RELAY_RESOLVER_READER_SELECTOR_KEY = _require3.RELAY_RESOLVER_READER_SELECTOR_KEY,
30
+ RELAY_RESOLVER_SNAPSHOT_KEY = _require3.RELAY_RESOLVER_SNAPSHOT_KEY,
33
31
  RELAY_RESOLVER_VALUE_KEY = _require3.RELAY_RESOLVER_VALUE_KEY,
34
32
  getStorageKey = _require3.getStorageKey;
35
33
 
@@ -50,10 +48,10 @@ var NoopResolverCache = /*#__PURE__*/function () {
50
48
 
51
49
  var _evaluate = evaluate(),
52
50
  resolverResult = _evaluate.resolverResult,
53
- missingRequiredFields = _evaluate.missingRequiredFields,
54
- errors = _evaluate.errors;
51
+ snapshot = _evaluate.snapshot,
52
+ error = _evaluate.error;
55
53
 
56
- return [resolverResult, undefined, errors, missingRequiredFields];
54
+ return [resolverResult, undefined, error, snapshot];
57
55
  };
58
56
 
59
57
  _proto.invalidateDataIDs = function invalidateDataIDs(updatedDataIDs) {};
@@ -94,17 +92,15 @@ var RecordResolverCache = /*#__PURE__*/function () {
94
92
  var linkedRecord = linkedID == null ? null : recordSource.get(linkedID);
95
93
 
96
94
  if (linkedRecord == null || this._isInvalid(linkedRecord, getDataForResolverFragment)) {
97
- var _linkedID;
95
+ var _linkedID, _evaluationResult$sna;
98
96
 
99
97
  // Cache miss; evaluate the selector and store the result in a new record:
100
98
  linkedID = (_linkedID = linkedID) !== null && _linkedID !== void 0 ? _linkedID : generateClientID(recordID, storageKey);
101
99
  linkedRecord = RelayModernRecord.create(linkedID, '__RELAY_RESOLVER__');
102
100
  var evaluationResult = evaluate();
103
101
  RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_VALUE_KEY, evaluationResult.resolverResult);
104
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_INPUTS_KEY, evaluationResult.fragmentValue);
105
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_READER_SELECTOR_KEY, evaluationResult.readerSelector);
106
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY, evaluationResult.missingRequiredFields);
107
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_ERROR_KEY, evaluationResult.errors);
102
+ RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_SNAPSHOT_KEY, evaluationResult.snapshot);
103
+ RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_ERROR_KEY, evaluationResult.error);
108
104
  recordSource.set(linkedID, linkedRecord); // Link the resolver value record to the resolver field of the record being read:
109
105
 
110
106
  var nextRecord = RelayModernRecord.clone(record);
@@ -114,29 +110,32 @@ var RecordResolverCache = /*#__PURE__*/function () {
114
110
  var resolverID = evaluationResult.resolverID;
115
111
  addDependencyEdge(this._resolverIDToRecordIDs, resolverID, linkedID);
116
112
  addDependencyEdge(this._recordIDToResolverIDs, recordID, resolverID);
113
+ var seenRecordIds = (_evaluationResult$sna = evaluationResult.snapshot) === null || _evaluationResult$sna === void 0 ? void 0 : _evaluationResult$sna.seenRecords;
117
114
 
118
- var _iterator = (0, _createForOfIteratorHelper2["default"])(evaluationResult.seenRecordIDs),
119
- _step;
115
+ if (seenRecordIds != null) {
116
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(seenRecordIds),
117
+ _step;
120
118
 
121
- try {
122
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
123
- var seenRecordID = _step.value;
124
- addDependencyEdge(this._recordIDToResolverIDs, seenRecordID, resolverID);
119
+ try {
120
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
121
+ var seenRecordID = _step.value;
122
+ addDependencyEdge(this._recordIDToResolverIDs, seenRecordID, resolverID);
123
+ }
124
+ } catch (err) {
125
+ _iterator.e(err);
126
+ } finally {
127
+ _iterator.f();
125
128
  }
126
- } catch (err) {
127
- _iterator.e(err);
128
- } finally {
129
- _iterator.f();
130
129
  }
131
130
  } // $FlowFixMe[incompatible-type] - will always be empty
132
131
 
133
132
 
134
- var answer = linkedRecord[RELAY_RESOLVER_VALUE_KEY];
135
- var missingRequiredFields = // $FlowFixMe[incompatible-type] - casting mixed
136
- linkedRecord[RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
133
+ var answer = linkedRecord[RELAY_RESOLVER_VALUE_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
134
+
135
+ var snapshot = linkedRecord[RELAY_RESOLVER_SNAPSHOT_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
137
136
 
138
- var errors = linkedRecord[RELAY_RESOLVER_ERROR_KEY];
139
- return [answer, linkedID, errors, missingRequiredFields];
137
+ var error = linkedRecord[RELAY_RESOLVER_ERROR_KEY];
138
+ return [answer, linkedID, error, snapshot];
140
139
  };
141
140
 
142
141
  _proto2.invalidateDataIDs = function invalidateDataIDs(updatedDataIDs) {
@@ -207,11 +206,12 @@ var RecordResolverCache = /*#__PURE__*/function () {
207
206
  _proto2._isInvalid = function _isInvalid(record, getDataForResolverFragment) {
208
207
  if (!RelayModernRecord.getValue(record, RELAY_RESOLVER_INVALIDATION_KEY)) {
209
208
  return false;
210
- }
209
+ } // $FlowFixMe[incompatible-type] - storing values in records is not typed
211
210
 
212
- var originalInputs = RelayModernRecord.getValue(record, RELAY_RESOLVER_INPUTS_KEY); // $FlowFixMe[incompatible-type] - storing values in records is not typed
213
211
 
214
- var readerSelector = RelayModernRecord.getValue(record, RELAY_RESOLVER_READER_SELECTOR_KEY);
212
+ var snapshot = RelayModernRecord.getValue(record, RELAY_RESOLVER_SNAPSHOT_KEY);
213
+ var originalInputs = snapshot === null || snapshot === void 0 ? void 0 : snapshot.data;
214
+ var readerSelector = snapshot === null || snapshot === void 0 ? void 0 : snapshot.selector;
215
215
 
216
216
  if (originalInputs == null || readerSelector == null) {
217
217
  process.env.NODE_ENV !== "production" ? warning(false, 'Expected previous inputs and reader selector on resolver record with ID %s, but they were missing.', RelayModernRecord.getDataID(record)) : void 0;
@@ -29,10 +29,8 @@ var RelayRecordSource = require('../RelayRecordSource');
29
29
 
30
30
  var _require3 = require('../RelayStoreUtils'),
31
31
  RELAY_RESOLVER_ERROR_KEY = _require3.RELAY_RESOLVER_ERROR_KEY,
32
- RELAY_RESOLVER_INPUTS_KEY = _require3.RELAY_RESOLVER_INPUTS_KEY,
33
32
  RELAY_RESOLVER_INVALIDATION_KEY = _require3.RELAY_RESOLVER_INVALIDATION_KEY,
34
- RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY = _require3.RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY,
35
- RELAY_RESOLVER_READER_SELECTOR_KEY = _require3.RELAY_RESOLVER_READER_SELECTOR_KEY,
33
+ RELAY_RESOLVER_SNAPSHOT_KEY = _require3.RELAY_RESOLVER_SNAPSHOT_KEY,
36
34
  RELAY_RESOLVER_VALUE_KEY = _require3.RELAY_RESOLVER_VALUE_KEY,
37
35
  getStorageKey = _require3.getStorageKey;
38
36
 
@@ -85,7 +83,7 @@ var LiveResolverCache = /*#__PURE__*/function () {
85
83
  var linkedRecord = linkedID == null ? null : recordSource.get(linkedID);
86
84
 
87
85
  if (linkedRecord == null || this._isInvalid(linkedRecord, getDataForResolverFragment)) {
88
- var _linkedID;
86
+ var _linkedID, _evaluationResult$sna;
89
87
 
90
88
  // Cache miss; evaluate the selector and store the result in a new record:
91
89
  linkedID = (_linkedID = linkedID) !== null && _linkedID !== void 0 ? _linkedID : generateClientID(recordID, storageKey);
@@ -105,10 +103,8 @@ var LiveResolverCache = /*#__PURE__*/function () {
105
103
  RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_VALUE_KEY, evaluationResult.resolverResult);
106
104
  }
107
105
 
108
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_INPUTS_KEY, evaluationResult.fragmentValue);
109
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_READER_SELECTOR_KEY, evaluationResult.readerSelector);
110
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY, evaluationResult.missingRequiredFields);
111
- RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_ERROR_KEY, evaluationResult.errors);
106
+ RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_SNAPSHOT_KEY, evaluationResult.snapshot);
107
+ RelayModernRecord.setValue(linkedRecord, RELAY_RESOLVER_ERROR_KEY, evaluationResult.error);
112
108
  recordSource.set(linkedID, linkedRecord); // Link the resolver value record to the resolver field of the record being read:
113
109
 
114
110
  var nextRecord = RelayModernRecord.clone(record);
@@ -118,19 +114,22 @@ var LiveResolverCache = /*#__PURE__*/function () {
118
114
  var resolverID = evaluationResult.resolverID;
119
115
  addDependencyEdge(this._resolverIDToRecordIDs, resolverID, linkedID);
120
116
  addDependencyEdge(this._recordIDToResolverIDs, recordID, resolverID);
117
+ var seenRecordIds = (_evaluationResult$sna = evaluationResult.snapshot) === null || _evaluationResult$sna === void 0 ? void 0 : _evaluationResult$sna.seenRecords;
121
118
 
122
- var _iterator = (0, _createForOfIteratorHelper2["default"])(evaluationResult.seenRecordIDs),
123
- _step;
119
+ if (seenRecordIds != null) {
120
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(seenRecordIds),
121
+ _step;
124
122
 
125
- try {
126
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
127
- var seenRecordID = _step.value;
128
- addDependencyEdge(this._recordIDToResolverIDs, seenRecordID, resolverID);
123
+ try {
124
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
125
+ var seenRecordID = _step.value;
126
+ addDependencyEdge(this._recordIDToResolverIDs, seenRecordID, resolverID);
127
+ }
128
+ } catch (err) {
129
+ _iterator.e(err);
130
+ } finally {
131
+ _iterator.f();
129
132
  }
130
- } catch (err) {
131
- _iterator.e(err);
132
- } finally {
133
- _iterator.f();
134
133
  }
135
134
  } else if (field.kind === RELAY_LIVE_RESOLVER && RelayModernRecord.getValue(linkedRecord, RELAY_RESOLVER_LIVE_STATE_DIRTY)) {
136
135
  var _linkedID2;
@@ -152,12 +151,12 @@ var LiveResolverCache = /*#__PURE__*/function () {
152
151
  } // $FlowFixMe[incompatible-type] - will always be empty
153
152
 
154
153
 
155
- var answer = linkedRecord[RELAY_RESOLVER_VALUE_KEY];
156
- var missingRequiredFields = // $FlowFixMe[incompatible-type] - casting mixed
157
- linkedRecord[RELAY_RESOLVER_MISSING_REQUIRED_FIELDS_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
154
+ var answer = linkedRecord[RELAY_RESOLVER_VALUE_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
155
+
156
+ var snapshot = linkedRecord[RELAY_RESOLVER_SNAPSHOT_KEY]; // $FlowFixMe[incompatible-type] - casting mixed
158
157
 
159
- var errors = linkedRecord[RELAY_RESOLVER_ERROR_KEY];
160
- return [answer, linkedID, errors, missingRequiredFields];
158
+ var error = linkedRecord[RELAY_RESOLVER_ERROR_KEY];
159
+ return [answer, linkedID, error, snapshot];
161
160
  } // Register a new Live State object in the store, subscribing to future
162
161
  // updates.
163
162
  ;
@@ -288,11 +287,12 @@ var LiveResolverCache = /*#__PURE__*/function () {
288
287
  _proto._isInvalid = function _isInvalid(record, getDataForResolverFragment) {
289
288
  if (!RelayModernRecord.getValue(record, RELAY_RESOLVER_INVALIDATION_KEY)) {
290
289
  return false;
291
- }
290
+ } // $FlowFixMe[incompatible-type] - storing values in records is not typed
292
291
 
293
- var originalInputs = RelayModernRecord.getValue(record, RELAY_RESOLVER_INPUTS_KEY); // $FlowFixMe[incompatible-type] - storing values in records is not typed
294
292
 
295
- var readerSelector = RelayModernRecord.getValue(record, RELAY_RESOLVER_READER_SELECTOR_KEY);
293
+ var snapshot = RelayModernRecord.getValue(record, RELAY_RESOLVER_SNAPSHOT_KEY);
294
+ var originalInputs = snapshot === null || snapshot === void 0 ? void 0 : snapshot.data;
295
+ var readerSelector = snapshot === null || snapshot === void 0 ? void 0 : snapshot.selector;
296
296
 
297
297
  if (originalInputs == null || readerSelector == null) {
298
298
  process.env.NODE_ENV !== "production" ? warning(false, 'Expected previous inputs and reader selector on resolver record with ID %s, but they were missing.', RelayModernRecord.getDataID(record)) : void 0;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "relay-runtime",
3
3
  "description": "A core runtime for building GraphQL-driven applications.",
4
- "version": "0.0.0-main-2abce249",
4
+ "version": "0.0.0-main-e78cd90a",
5
5
  "keywords": [
6
6
  "graphql",
7
7
  "relay"