From 5dfb88bc16998feaa6e2766ca00a1ac9fd008f67 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Mon, 12 Jun 2023 14:21:35 -0700 Subject: [PATCH] Simplify what we keep in the store for resolver errors Reviewed By: josephsavona Differential Revision: D46499963 Privacy Context Container: L1125407 fbshipit-source-id: 6d94ebd16f0e1542936543ee76568f13fe88917d --- packages/relay-runtime/store/RelayReader.js | 17 ++++++----------- packages/relay-runtime/store/ResolverCache.js | 11 +++++------ .../LiveResolverCache.js | 5 ++--- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/packages/relay-runtime/store/RelayReader.js b/packages/relay-runtime/store/RelayReader.js index 33df2f435c3ef..742f4f7962599 100644 --- a/packages/relay-runtime/store/RelayReader.js +++ b/packages/relay-runtime/store/RelayReader.js @@ -577,7 +577,6 @@ class RelayReader { field, this._variables, key, - this._fragmentName, ); return { resolverResult, @@ -590,7 +589,6 @@ class RelayReader { field, this._variables, null, - this._fragmentName, ); return { resolverResult, @@ -646,7 +644,10 @@ class RelayReader { // the errors can be attached to this read's snapshot. This allows the error // to be logged. if (resolverError) { - this._resolverErrors.push(resolverError); + this._resolverErrors.push({ + field: {path: field.path, owner: this._fragmentName}, + error: resolverError, + }); } // The resolver itself creates a record in the store. We record that we've @@ -1175,8 +1176,7 @@ function getResolverValue( field: ReaderRelayResolver | ReaderRelayLiveResolver, variables: Variables, fragmentKey: mixed, - ownerName: string, -) { +): [mixed, ?Error] { // Support for languages that work (best) with ES6 modules, such as TypeScript. const resolverFunction = typeof field.resolverModule === 'function' @@ -1201,12 +1201,7 @@ function getResolverValue( if (e === RESOLVER_FRAGMENT_MISSING_DATA_SENTINEL) { resolverResult = undefined; } else { - // `field.path` is typed as nullable while we rollout compiler changes. - const path = field.path ?? '[UNKNOWN]'; - resolverError = { - field: {path, owner: ownerName}, - error: e, - }; + resolverError = e; } } return [resolverResult, resolverError]; diff --git a/packages/relay-runtime/store/ResolverCache.js b/packages/relay-runtime/store/ResolverCache.js index be8752b6b5128..ca38072a5602e 100644 --- a/packages/relay-runtime/store/ResolverCache.js +++ b/packages/relay-runtime/store/ResolverCache.js @@ -20,7 +20,6 @@ import type { DataIDSet, MutableRecordSource, Record, - RelayResolverError, SingularReaderSelector, Snapshot, } from './RelayStoreTypes'; @@ -44,7 +43,7 @@ type ResolverID = string; export type EvaluationResult = { resolverResult: ?T, snapshot: ?Snapshot, - error: ?RelayResolverError, + error: ?Error, }; export type ResolverFragmentResult = { @@ -65,7 +64,7 @@ export interface ResolverCache { ): [ ?T /* Answer */, ?DataID /* Seen record */, - ?RelayResolverError, + ?Error, ?Snapshot, ?DataID /* ID of record containing a suspended Live field */, ?DataIDSet /** Set of updated records after read. Then need to be consumed by `processFollowupUpdates` */, @@ -90,7 +89,7 @@ class NoopResolverCache implements ResolverCache { ): [ ?T /* Answer */, ?DataID /* Seen record */, - ?RelayResolverError, + ?Error, ?Snapshot, ?DataID /* ID of record containing a suspended Live field */, ?DataIDSet /** Set of dirty records after read */, @@ -147,7 +146,7 @@ class RecordResolverCache implements ResolverCache { ): [ ?T /* Answer */, ?DataID /* Seen record */, - ?RelayResolverError, + ?Error, ?Snapshot, ?DataID /* ID of record containing a suspended Live field */, ?DataIDSet /** Set of dirty records after read */, @@ -228,7 +227,7 @@ class RecordResolverCache implements ResolverCache { // $FlowFixMe[incompatible-type] - casting mixed const snapshot: ?Snapshot = linkedRecord[RELAY_RESOLVER_SNAPSHOT_KEY]; // $FlowFixMe[incompatible-type] - casting mixed - const error: ?RelayResolverError = linkedRecord[RELAY_RESOLVER_ERROR_KEY]; + const error: ?Error = linkedRecord[RELAY_RESOLVER_ERROR_KEY]; return [answer, linkedID, error, snapshot, undefined, undefined]; } diff --git a/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverCache.js b/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverCache.js index 20e2ce7daa992..cee55589d5f4e 100644 --- a/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverCache.js +++ b/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverCache.js @@ -23,7 +23,6 @@ import type { MutableRecordSource, Record, RecordSource, - RelayResolverError, SingularReaderSelector, Snapshot, } from '../RelayStoreTypes'; @@ -115,7 +114,7 @@ class LiveResolverCache implements ResolverCache { ): [ ?T /* Answer */, ?DataID /* Seen record */, - ?RelayResolverError, + ?Error, ?Snapshot, ?DataID /* ID of record containing a suspended Live field */, ?DataIDSet /** Set of dirty records after read */, @@ -292,7 +291,7 @@ class LiveResolverCache implements ResolverCache { // $FlowFixMe[incompatible-type] - casting mixed const snapshot: ?Snapshot = linkedRecord[RELAY_RESOLVER_SNAPSHOT_KEY]; // $FlowFixMe[incompatible-type] - casting mixed - const error: ?RelayResolverError = linkedRecord[RELAY_RESOLVER_ERROR_KEY]; + const error: ?Error = linkedRecord[RELAY_RESOLVER_ERROR_KEY]; let suspenseID = null;