diff --git a/packages/react-relay/__tests__/LiveResolvers-test.js b/packages/react-relay/__tests__/LiveResolvers-test.js index 18db554e7f50c..4cec83cc0e745 100644 --- a/packages/react-relay/__tests__/LiveResolvers-test.js +++ b/packages/react-relay/__tests__/LiveResolvers-test.js @@ -12,7 +12,7 @@ 'use strict'; import type {IEnvironment} from 'relay-runtime'; -import type {RequiredFieldLoggerEvent} from 'relay-runtime/store/RelayStoreTypes'; +import type {RelayFieldLoggerEvent} from 'relay-runtime/store/RelayStoreTypes'; import type {MutableRecordSource} from 'relay-runtime/store/RelayStoreTypes'; const React = require('react'); @@ -909,15 +909,15 @@ describe.each([ ); } - const requiredFieldLogger = jest.fn< - $FlowFixMe | [RequiredFieldLoggerEvent], + const relayFieldLogger = jest.fn< + $FlowFixMe | [RelayFieldLoggerEvent], void, >(); function createEnvironment(source: MutableRecordSource) { return new RelayModernEnvironment({ network: RelayNetwork.create(jest.fn()), store: new LiveResolverStore(source), - requiredFieldLogger, + relayFieldLogger, }); } @@ -951,7 +951,7 @@ describe.each([ }).toThrow( "Relay: Missing @required value at path 'username' in 'ResolverThatThrows'.", ); - expect(requiredFieldLogger.mock.calls).toEqual([ + expect(relayFieldLogger.mock.calls).toEqual([ [ { kind: 'missing_field.throw', @@ -960,7 +960,7 @@ describe.each([ }, ], ]); - requiredFieldLogger.mockReset(); + relayFieldLogger.mockReset(); // Render with complete data let renderer; @@ -974,7 +974,7 @@ describe.each([ throw new Error('Renderer is expected to be defined.'); } - expect(requiredFieldLogger.mock.calls).toEqual([ + expect(relayFieldLogger.mock.calls).toEqual([ [ { error: new Error( diff --git a/packages/react-relay/multi-actor/__tests__/ActorChange-test.js b/packages/react-relay/multi-actor/__tests__/ActorChange-test.js index 7196b99c87a80..144cc098f0fee 100644 --- a/packages/react-relay/multi-actor/__tests__/ActorChange-test.js +++ b/packages/react-relay/multi-actor/__tests__/ActorChange-test.js @@ -172,7 +172,7 @@ describe('ActorChange', () => { createNetworkForActor: actorIdentifier => Network.create((...args) => fetchFnForActor(actorIdentifier, ...args)), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); environment = multiActorEnvironment.forActor( getActorIdentifier('actor:1234'), diff --git a/packages/react-relay/multi-actor/__tests__/ActorChangeWithDefer-test.js b/packages/react-relay/multi-actor/__tests__/ActorChangeWithDefer-test.js index d5274ffc97d2b..a7170ab872a70 100644 --- a/packages/react-relay/multi-actor/__tests__/ActorChangeWithDefer-test.js +++ b/packages/react-relay/multi-actor/__tests__/ActorChangeWithDefer-test.js @@ -152,7 +152,7 @@ describe('ActorChange with @defer', () => { createNetworkForActor: actorIdentifier => Network.create((...args) => fetchFnForActor(...args)), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); environment = multiActorEnvironment.forActor( getActorIdentifier('actor:1234'), diff --git a/packages/react-relay/multi-actor/__tests__/ActorChangeWithMutation-test.js b/packages/react-relay/multi-actor/__tests__/ActorChangeWithMutation-test.js index 8b8239af73150..a3f0ea1415592 100644 --- a/packages/react-relay/multi-actor/__tests__/ActorChangeWithMutation-test.js +++ b/packages/react-relay/multi-actor/__tests__/ActorChangeWithMutation-test.js @@ -199,7 +199,7 @@ describe('ActorChange', () => { createNetworkForActor: actorIdentifier => Network.create((...args) => fetchFnForActor(actorIdentifier, ...args)), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); environment = multiActorEnvironment.forActor( getActorIdentifier('actor:1234'), diff --git a/packages/react-relay/multi-actor/__tests__/ActorChangeWithStream-test.js b/packages/react-relay/multi-actor/__tests__/ActorChangeWithStream-test.js index 08c7424695aa0..82a8bbf0d0e2b 100644 --- a/packages/react-relay/multi-actor/__tests__/ActorChangeWithStream-test.js +++ b/packages/react-relay/multi-actor/__tests__/ActorChangeWithStream-test.js @@ -141,7 +141,7 @@ describe('ActorChange with @stream', () => { createNetworkForActor: actorIdentifier => Network.create((...args) => fetchFnForActor(...args)), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); environment = multiActorEnvironment.forActor( getActorIdentifier('actor:1234'), diff --git a/packages/react-relay/relay-hooks/__tests__/FragmentResource-Resolver-test.js b/packages/react-relay/relay-hooks/__tests__/FragmentResource-Resolver-test.js index e307cfe60d9c1..6e2ed90baf95a 100644 --- a/packages/react-relay/relay-hooks/__tests__/FragmentResource-Resolver-test.js +++ b/packages/react-relay/relay-hooks/__tests__/FragmentResource-Resolver-test.js @@ -11,7 +11,7 @@ 'use strict'; -import type {RequiredFieldLoggerEvent} from 'relay-runtime/store/RelayStoreTypes'; +import type {RelayFieldLoggerEvent} from 'relay-runtime/store/RelayStoreTypes'; const { getFragmentResourceForEnvironment, @@ -59,12 +59,12 @@ describe('FragmentResource RelayResolver behavior', () => { let query; let fragmentNode; let fragmentRef; - let mockRequiredFieldLogger; + let mockRelayFieldLogger; beforeEach(() => { - mockRequiredFieldLogger = jest.fn<[RequiredFieldLoggerEvent], void>(); + mockRelayFieldLogger = jest.fn<[RelayFieldLoggerEvent], void>(); environment = createMockEnvironment({ - requiredFieldLogger: mockRequiredFieldLogger, + relayFieldLogger: mockRelayFieldLogger, }); FragmentResource = getFragmentResourceForEnvironment(environment); query = createOperationDescriptor(BASIC_QUERY, {id: '1'}); @@ -87,9 +87,9 @@ describe('FragmentResource RelayResolver behavior', () => { it('Reports an error to the logger when a resolver field throws an error.', async () => { FragmentResource.read(fragmentNode, fragmentRef, 'componentDisplayName'); - expect(environment.requiredFieldLogger).toHaveBeenCalledTimes(1); + expect(environment.relayFieldLogger).toHaveBeenCalledTimes(1); - const event = mockRequiredFieldLogger.mock.calls[0][0]; + const event = mockRelayFieldLogger.mock.calls[0][0]; if (event.kind !== 'relay_resolver.error') { throw new Error( "Expected log event to be of kind 'relay_resolver.error'", diff --git a/packages/react-relay/relay-hooks/__tests__/FragmentResourceRequiredField-test.js b/packages/react-relay/relay-hooks/__tests__/FragmentResourceRequiredField-test.js index 76213bb063508..d9e4d1e26cf7d 100644 --- a/packages/react-relay/relay-hooks/__tests__/FragmentResourceRequiredField-test.js +++ b/packages/react-relay/relay-hooks/__tests__/FragmentResourceRequiredField-test.js @@ -12,7 +12,7 @@ 'use strict'; import type { LogEvent, - RequiredFieldLoggerEvent, + RelayFieldLoggerEvent, } from 'relay-runtime/store/RelayStoreTypes'; const {getFragmentResourceForEnvironment} = require('../FragmentResource'); @@ -36,15 +36,15 @@ let environment; let query; let FragmentResource; let logger; -let requiredFieldLogger; +let relayFieldLogger; beforeEach(() => { logger = jest.fn<[LogEvent], void>(); - requiredFieldLogger = jest.fn<[RequiredFieldLoggerEvent], void>(); + relayFieldLogger = jest.fn<[RelayFieldLoggerEvent], void>(); environment = createMockEnvironment({ log: logger, - requiredFieldLogger, + relayFieldLogger, }); FragmentResource = getFragmentResourceForEnvironment(environment); @@ -107,7 +107,7 @@ test('Logs if a @required(action: LOG) field is null', () => { }, componentDisplayName, ); - expect(requiredFieldLogger).toHaveBeenCalledWith({ + expect(relayFieldLogger).toHaveBeenCalledWith({ fieldPath: 'alternate_name', kind: 'missing_field.log', owner: 'FragmentResourceRequiredFieldTestUserFragment', @@ -170,7 +170,7 @@ test('Throws if a @required(action: THROW) field is present and then goes missin "Relay: Missing @required value at path 'name' in 'FragmentResourceRequiredFieldTestUserFragment'.", ); - expect(requiredFieldLogger).toHaveBeenCalledWith({ + expect(relayFieldLogger).toHaveBeenCalledWith({ fieldPath: 'name', kind: 'missing_field.throw', owner: 'FragmentResourceRequiredFieldTestUserFragment', diff --git a/packages/react-relay/relay-hooks/__tests__/useFragment-with-required-test.js b/packages/react-relay/relay-hooks/__tests__/useFragment-with-required-test.js index d6f46409458ed..c572e5ff60d02 100644 --- a/packages/react-relay/relay-hooks/__tests__/useFragment-with-required-test.js +++ b/packages/react-relay/relay-hooks/__tests__/useFragment-with-required-test.js @@ -11,7 +11,7 @@ 'use strict'; import type {MutableRecordSource} from 'relay-runtime/store/RelayStoreTypes'; -import type {RequiredFieldLoggerEvent} from 'relay-runtime/store/RelayStoreTypes'; +import type {RelayFieldLoggerEvent} from 'relay-runtime/store/RelayStoreTypes'; const useFragmentOriginal_EXPERIMENTAL = require('../experimental/useFragment_EXPERIMENTAL'); const RelayEnvironmentProvider = require('../RelayEnvironmentProvider'); @@ -77,15 +77,15 @@ describe.each([ ); } - const requiredFieldLogger = jest.fn< - $FlowFixMe | [RequiredFieldLoggerEvent], + const relayFieldLogger = jest.fn< + $FlowFixMe | [RelayFieldLoggerEvent], void, >(); function createEnvironment(source: MutableRecordSource) { return new RelayModernEnvironment({ network: RelayNetwork.create(jest.fn()), store: new LiveResolverStore(source), - requiredFieldLogger, + relayFieldLogger, }); } @@ -108,7 +108,7 @@ describe.each([ ); // Validate that the missing required field was logged. - expect(requiredFieldLogger.mock.calls).toEqual([ + expect(relayFieldLogger.mock.calls).toEqual([ [ { fieldPath: 'name', diff --git a/packages/relay-runtime/index.js b/packages/relay-runtime/index.js index 6dd973ed2966a..0de0012a54e56 100644 --- a/packages/relay-runtime/index.js +++ b/packages/relay-runtime/index.js @@ -157,7 +157,7 @@ export type { RecordSourceSelectorProxy, RelayContext, RequestDescriptor, - RequiredFieldLogger, + RelayFieldLogger, SelectorData, SelectorStoreUpdater, SingularReaderSelector, diff --git a/packages/relay-runtime/multi-actor-environment/ActorSpecificEnvironment.js b/packages/relay-runtime/multi-actor-environment/ActorSpecificEnvironment.js index 9cc08011c7444..422102c3884cf 100644 --- a/packages/relay-runtime/multi-actor-environment/ActorSpecificEnvironment.js +++ b/packages/relay-runtime/multi-actor-environment/ActorSpecificEnvironment.js @@ -25,7 +25,7 @@ import type { OperationTracker, OptimisticResponseConfig, OptimisticUpdateFunction, - RequiredFieldLogger, + RelayFieldLogger, SelectorStoreUpdater, SingularReaderSelector, Snapshot, @@ -54,7 +54,7 @@ export type ActorSpecificEnvironmentConfig = $ReadOnly<{ logFn: LogFunction, multiActorEnvironment: IMultiActorEnvironment, network: INetwork, - requiredFieldLogger: RequiredFieldLogger, + relayFieldLogger: RelayFieldLogger, store: Store, missingFieldHandlers: $ReadOnlyArray, }>; @@ -70,7 +70,7 @@ class ActorSpecificEnvironment implements IActorEnvironment { +configName: ?string; +multiActorEnvironment: IMultiActorEnvironment; +options: mixed; - requiredFieldLogger: RequiredFieldLogger; + relayFieldLogger: RelayFieldLogger; constructor(config: ActorSpecificEnvironmentConfig) { this.configName = config.configName; @@ -78,7 +78,7 @@ class ActorSpecificEnvironment implements IActorEnvironment { this.multiActorEnvironment = config.multiActorEnvironment; this.__log = config.logFn; - this.requiredFieldLogger = config.requiredFieldLogger; + this.relayFieldLogger = config.relayFieldLogger; this._operationTracker = new RelayOperationTracker(); this._store = config.store; this._network = wrapNetworkWithLogObserver(this, config.network); diff --git a/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js b/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js index 8709d476d64c4..18f55a366d30a 100644 --- a/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js +++ b/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js @@ -28,7 +28,7 @@ import type { OperationLoader, OptimisticResponseConfig, OptimisticUpdateFunction, - RequiredFieldLogger, + RelayFieldLogger, SelectorStoreUpdater, SingularReaderSelector, Snapshot, @@ -48,7 +48,7 @@ import type { const RelayDefaultHandlerProvider = require('../handlers/RelayDefaultHandlerProvider'); const RelayObservable = require('../network/RelayObservable'); const defaultGetDataID = require('../store/defaultGetDataID'); -const defaultRequiredFieldLogger = require('../store/defaultRequiredFieldLogger'); +const defaultRelayFieldLogger = require('../store/defaultRelayFieldLogger'); const normalizeResponse = require('../store/normalizeResponse'); const OperationExecutor = require('../store/OperationExecutor'); const RelayModernStore = require('../store/RelayModernStore'); @@ -67,7 +67,7 @@ export type MultiActorEnvironmentConfig = $ReadOnly<{ missingFieldHandlers?: ?$ReadOnlyArray, normalizeResponse?: NormalizeResponseFunction, operationLoader?: ?OperationLoader, - requiredFieldLogger?: ?RequiredFieldLogger, + relayFieldLogger?: ?RelayFieldLogger, scheduler?: ?TaskScheduler, shouldProcessClientComponents?: ?boolean, treatMissingFieldsAsNull?: boolean, @@ -87,7 +87,7 @@ class MultiActorEnvironment implements IMultiActorEnvironment { +_normalizeResponse: NormalizeResponseFunction; +_operationExecutions: Map; +_operationLoader: ?OperationLoader; - +_requiredFieldLogger: RequiredFieldLogger; + +_relayFieldLogger: RelayFieldLogger; +_scheduler: ?TaskScheduler; +_shouldProcessClientComponents: ?boolean; +_treatMissingFieldsAsNull: boolean; @@ -103,8 +103,7 @@ class MultiActorEnvironment implements IMultiActorEnvironment { : RelayDefaultHandlerProvider; this._logFn = config.logFn ?? emptyFunction; this._operationExecutions = new Map(); - this._requiredFieldLogger = - config.requiredFieldLogger ?? defaultRequiredFieldLogger; + this._relayFieldLogger = config.relayFieldLogger ?? defaultRelayFieldLogger; this._shouldProcessClientComponents = config.shouldProcessClientComponents; this._treatMissingFieldsAsNull = config.treatMissingFieldsAsNull ?? false; this._isServer = config.isServer ?? false; @@ -130,7 +129,7 @@ class MultiActorEnvironment implements IMultiActorEnvironment { actorIdentifier, multiActorEnvironment: this, logFn: this._logFn, - requiredFieldLogger: this._requiredFieldLogger, + relayFieldLogger: this._relayFieldLogger, store: this._createStoreForActor != null ? this._createStoreForActor(actorIdentifier) diff --git a/packages/relay-runtime/multi-actor-environment/__tests__/actorEnvironment_execute-test.js b/packages/relay-runtime/multi-actor-environment/__tests__/actorEnvironment_execute-test.js index 4bf1a81fe379a..dc5dfeef50444 100644 --- a/packages/relay-runtime/multi-actor-environment/__tests__/actorEnvironment_execute-test.js +++ b/packages/relay-runtime/multi-actor-environment/__tests__/actorEnvironment_execute-test.js @@ -32,7 +32,7 @@ test('send a network request with actor specific params', () => { // $FlowFixMe[incompatible-call] error found when enabling Flow LTI mode createNetworkForActor: () => create(fetchFn), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); const actorEnvironment = multiActorEnvironment.forActor(actorIdentifier); diff --git a/packages/relay-runtime/multi-actor-environment/__tests__/forActor-test.js b/packages/relay-runtime/multi-actor-environment/__tests__/forActor-test.js index 9cddd98055977..c92e6593ab9b3 100644 --- a/packages/relay-runtime/multi-actor-environment/__tests__/forActor-test.js +++ b/packages/relay-runtime/multi-actor-environment/__tests__/forActor-test.js @@ -38,7 +38,7 @@ test('forActor: creates an environment', () => { const multiActorEnvironment = new MultiActorEnvironment({ createNetworkForActor: () => create(fetchFn), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); const actorEnvironment = multiActorEnvironment.forActor(actorIdentifer); @@ -61,7 +61,7 @@ test('forActor: memoize an environment', () => { const multiActorEnvironment = new MultiActorEnvironment({ createNetworkForActor: () => create(fetchFn), logFn: jest.fn(), - requiredFieldLogger: jest.fn(), + relayFieldLogger: jest.fn(), }); const actorEnvironment = multiActorEnvironment.forActor(actorIdentifer); diff --git a/packages/relay-runtime/query/__tests__/fetchQuery-test.js b/packages/relay-runtime/query/__tests__/fetchQuery-test.js index 25a1cec3baaa5..17d9e4ab8a739 100644 --- a/packages/relay-runtime/query/__tests__/fetchQuery-test.js +++ b/packages/relay-runtime/query/__tests__/fetchQuery-test.js @@ -11,7 +11,7 @@ 'use strict'; -import type {RequiredFieldLoggerEvent} from '../../store/RelayStoreTypes'; +import type {RelayFieldLoggerEvent} from '../../store/RelayStoreTypes'; import type {fetchQueryTest1Query$data} from './__generated__/fetchQueryTest1Query.graphql'; import type {RequestParameters} from 'relay-runtime'; @@ -240,9 +240,9 @@ describe('fetchQuery', () => { describe('fetchQuery with missing @required value', () => { it('provides data snapshot on next', () => { - const requiredFieldLogger = jest.fn<[RequiredFieldLoggerEvent], void>(); + const relayFieldLogger = jest.fn<[RelayFieldLoggerEvent], void>(); const environment = createMockEnvironment({ - requiredFieldLogger, + relayFieldLogger, }); const query = graphql` query fetchQueryTest2Query { @@ -267,7 +267,7 @@ describe('fetchQuery with missing @required value', () => { }); subscription.unsubscribe(); expect(observer.next).toHaveBeenCalledWith({me: null}); - expect(requiredFieldLogger).toHaveBeenCalledWith({ + expect(relayFieldLogger).toHaveBeenCalledWith({ fieldPath: 'me.name', kind: 'missing_field.log', owner: 'fetchQueryTest2Query', @@ -275,8 +275,8 @@ describe('fetchQuery with missing @required value', () => { }); it('throws on resolution', () => { - const requiredFieldLogger = jest.fn<[RequiredFieldLoggerEvent], void>(); - const environment = createMockEnvironment({requiredFieldLogger}); + const relayFieldLogger = jest.fn<[RelayFieldLoggerEvent], void>(); + const environment = createMockEnvironment({relayFieldLogger}); const query = graphql` query fetchQueryTest3Query { me { @@ -299,7 +299,7 @@ describe('fetchQuery with missing @required value', () => { data: {me: {id: 'ID-1', name: null}}, }); subscription.unsubscribe(); - expect(requiredFieldLogger).toHaveBeenCalledWith({ + expect(relayFieldLogger).toHaveBeenCalledWith({ fieldPath: 'me.name', kind: 'missing_field.throw', owner: 'fetchQueryTest3Query', diff --git a/packages/relay-runtime/store/RelayModernEnvironment.js b/packages/relay-runtime/store/RelayModernEnvironment.js index 142fdc7fceeca..2a9a708bd1711 100644 --- a/packages/relay-runtime/store/RelayModernEnvironment.js +++ b/packages/relay-runtime/store/RelayModernEnvironment.js @@ -36,7 +36,7 @@ import type { OptimisticResponseConfig, OptimisticUpdateFunction, PublishQueue, - RequiredFieldLogger, + RelayFieldLogger, SelectorStoreUpdater, SingularReaderSelector, Snapshot, @@ -55,7 +55,7 @@ const wrapNetworkWithLogObserver = require('../network/wrapNetworkWithLogObserve const RelayOperationTracker = require('../store/RelayOperationTracker'); const registerEnvironmentWithDevTools = require('../util/registerEnvironmentWithDevTools'); const defaultGetDataID = require('./defaultGetDataID'); -const defaultRequiredFieldLogger = require('./defaultRequiredFieldLogger'); +const defaultRelayFieldLogger = require('./defaultRelayFieldLogger'); const normalizeResponse = require('./normalizeResponse'); const OperationExecutor = require('./OperationExecutor'); const RelayPublishQueue = require('./RelayPublishQueue'); @@ -78,7 +78,7 @@ export type EnvironmentConfig = { +UNSTABLE_defaultRenderPolicy?: ?RenderPolicy, +options?: mixed, +isServer?: boolean, - +requiredFieldLogger?: ?RequiredFieldLogger, + +relayFieldLogger?: ?RelayFieldLogger, +shouldProcessClientComponents?: ?boolean, }; @@ -99,7 +99,7 @@ class RelayModernEnvironment implements IEnvironment { _operationExecutions: Map; +options: mixed; +_isServer: boolean; - requiredFieldLogger: RequiredFieldLogger; + relayFieldLogger: RelayFieldLogger; _normalizeResponse: NormalizeResponseFunction; constructor(config: EnvironmentConfig) { @@ -119,8 +119,7 @@ class RelayModernEnvironment implements IEnvironment { } } this.__log = config.log ?? emptyFunction; - this.requiredFieldLogger = - config.requiredFieldLogger ?? defaultRequiredFieldLogger; + this.relayFieldLogger = config.relayFieldLogger ?? defaultRelayFieldLogger; this._defaultRenderPolicy = config.UNSTABLE_defaultRenderPolicy ?? 'partial'; this._operationLoader = operationLoader; diff --git a/packages/relay-runtime/store/RelayStoreTypes.js b/packages/relay-runtime/store/RelayStoreTypes.js index 428a84d8b9905..07eee3d4151b5 100644 --- a/packages/relay-runtime/store/RelayStoreTypes.js +++ b/packages/relay-runtime/store/RelayStoreTypes.js @@ -957,7 +957,7 @@ export interface IEnvironment { * Called by Relay when it encounters a missing field that has been annotated * with `@required(action: LOG)`. */ - requiredFieldLogger: RequiredFieldLogger; + relayFieldLogger: RelayFieldLogger; } /** @@ -1191,7 +1191,7 @@ export type MissingFieldHandler = ) => ?Array, }; -export type RequiredFieldLoggerEvent = +export type RelayFieldLoggerEvent = | { +kind: 'missing_field.log', +owner: string, @@ -1213,7 +1213,7 @@ export type RequiredFieldLoggerEvent = * A handler for events related to @required fields. Currently reports missing * fields with either `action: LOG` or `action: THROW`. */ -export type RequiredFieldLogger = (event: RequiredFieldLoggerEvent) => void; +export type RelayFieldLogger = (event: RelayFieldLoggerEvent) => void; /** * The results of normalizing a query. diff --git a/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredField-test.js b/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredField-test.js index 5b471b26fe51d..2a614e999fad8 100644 --- a/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredField-test.js +++ b/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredField-test.js @@ -26,7 +26,7 @@ describe('RelayModernFragmentSpecResolver', () => { let zuckOperation; let variables; let logger; - let requiredFieldLogger; + let relayFieldLogger; function setUserField(id, fieldName, value) { environment.applyUpdate({ @@ -39,8 +39,8 @@ describe('RelayModernFragmentSpecResolver', () => { beforeEach(() => { logger = jest.fn(); - requiredFieldLogger = jest.fn(); - environment = createMockEnvironment({log: logger, requiredFieldLogger}); + relayFieldLogger = jest.fn(); + environment = createMockEnvironment({log: logger, relayFieldLogger}); UserFragment = graphql` fragment RelayModernFragmentSpecResolverRequiredFieldTestUserFragment on User { id @@ -99,7 +99,7 @@ describe('RelayModernFragmentSpecResolver', () => { true /* rootIsQueryRenderer */, ); resolver.resolve(); - expect(requiredFieldLogger).toHaveBeenCalledWith({ + expect(relayFieldLogger).toHaveBeenCalledWith({ fieldPath: 'alternate_name', kind: 'missing_field.log', owner: 'RelayModernFragmentSpecResolverRequiredFieldTestUserFragment', @@ -122,7 +122,7 @@ describe('RelayModernFragmentSpecResolver', () => { "Relay: Missing @required value at path 'name' in 'RelayModernFragmentSpecResolverRequiredFieldTestUserFragment'.", ); - expect(requiredFieldLogger).toHaveBeenCalledWith({ + expect(relayFieldLogger).toHaveBeenCalledWith({ fieldPath: 'name', kind: 'missing_field.throw', owner: 'RelayModernFragmentSpecResolverRequiredFieldTestUserFragment', diff --git a/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredFieldNoLogger-test.js b/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredFieldNoLogger-test.js index d530a69d0be2c..d6afca959519d 100644 --- a/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredFieldNoLogger-test.js +++ b/packages/relay-runtime/store/__tests__/RelayModernFragmentSpecResolverRequiredFieldNoLogger-test.js @@ -88,7 +88,7 @@ describe('RelayModernFragmentSpecResolver', () => { true /* rootIsQueryRenderer */, ); expect(() => resolver.resolve()).toThrow( - 'Relay Environment Configuration Error (dev only): `@required(action: LOG)` requires that the Relay Environment be configured with a `requiredFieldLogger`', + 'Relay Environment Configuration Error (dev only): `@required(action: LOG)` requires that the Relay Environment be configured with a `relayFieldLogger`', ); }); diff --git a/packages/relay-runtime/store/defaultRequiredFieldLogger.js b/packages/relay-runtime/store/defaultRelayFieldLogger.js similarity index 69% rename from packages/relay-runtime/store/defaultRequiredFieldLogger.js rename to packages/relay-runtime/store/defaultRelayFieldLogger.js index 025a127194e92..689992ef965c0 100644 --- a/packages/relay-runtime/store/defaultRequiredFieldLogger.js +++ b/packages/relay-runtime/store/defaultRelayFieldLogger.js @@ -11,14 +11,14 @@ 'use strict'; -import type {RequiredFieldLogger} from './RelayStoreTypes'; +import type {RelayFieldLogger} from './RelayStoreTypes'; -const defaultRequiredFieldLogger: RequiredFieldLogger = event => { +const defaultRelayFieldLogger: RelayFieldLogger = event => { if (__DEV__ && event.kind === 'missing_field.log') { throw new Error( - 'Relay Environment Configuration Error (dev only): `@required(action: LOG)` requires that the Relay Environment be configured with a `requiredFieldLogger`.', + 'Relay Environment Configuration Error (dev only): `@required(action: LOG)` requires that the Relay Environment be configured with a `relayFieldLogger`.', ); } }; -module.exports = defaultRequiredFieldLogger; +module.exports = defaultRelayFieldLogger; diff --git a/packages/relay-runtime/util/handlePotentialSnapshotErrors.js b/packages/relay-runtime/util/handlePotentialSnapshotErrors.js index db1549f31fca6..474ae46b239d7 100644 --- a/packages/relay-runtime/util/handlePotentialSnapshotErrors.js +++ b/packages/relay-runtime/util/handlePotentialSnapshotErrors.js @@ -23,7 +23,7 @@ function handlePotentialSnapshotErrors( relayResolverErrors: RelayResolverErrors, ) { for (const resolverError of relayResolverErrors) { - environment.requiredFieldLogger({ + environment.relayFieldLogger({ kind: 'relay_resolver.error', owner: resolverError.field.owner, fieldPath: resolverError.field.path, @@ -35,7 +35,7 @@ function handlePotentialSnapshotErrors( case 'THROW': { const {path, owner} = missingRequiredFields.field; // This gives the consumer the chance to throw their own error if they so wish. - environment.requiredFieldLogger({ + environment.relayFieldLogger({ kind: 'missing_field.throw', owner, fieldPath: path, @@ -46,7 +46,7 @@ function handlePotentialSnapshotErrors( } case 'LOG': missingRequiredFields.fields.forEach(({path, owner}) => { - environment.requiredFieldLogger({ + environment.relayFieldLogger({ kind: 'missing_field.log', owner, fieldPath: path, diff --git a/website/docs/guides/relay-resolvers.md b/website/docs/guides/relay-resolvers.md index ad72843d4d2d2..8e44a3f197893 100644 --- a/website/docs/guides/relay-resolvers.md +++ b/website/docs/guides/relay-resolvers.md @@ -111,7 +111,7 @@ When the field is first read by a component, Relay will evaluate the Relay Resol ## Error Handling -In order to make product code as robust as possible, Relay Resolvers follow the GraphQL spec’s documented [best practice](https://graphql.org/learn/best-practices/#nullability) of returning null when a field resolver errors. Instead of throwing, errors thrown by Relay Resolvers will be logged to your environment's configured `requiredFieldLogger` with an event of kind `"relay_resolver.error"`. If you make use of Relay Resolves you should be sure to configure your environment with a `requiredFieldLogger` which reports those events to whatever system you use for tracking runtime errors. +In order to make product code as robust as possible, Relay Resolvers follow the GraphQL spec’s documented [best practice](https://graphql.org/learn/best-practices/#nullability) of returning null when a field resolver errors. Instead of throwing, errors thrown by Relay Resolvers will be logged to your environment's configured `relayFieldLogger` with an event of kind `"relay_resolver.error"`. If you make use of Relay Resolves you should be sure to configure your environment with a `relayFieldLogger` which reports those events to whatever system you use for tracking runtime errors. If your component requires a non-null value in order to render, and can’t provide a reasonable fallback experience, you can annotate the field access with `@required`. diff --git a/website/versioned_docs/version-v15.0.0/guides/relay-resolvers.md b/website/versioned_docs/version-v15.0.0/guides/relay-resolvers.md index ad72843d4d2d2..8e44a3f197893 100644 --- a/website/versioned_docs/version-v15.0.0/guides/relay-resolvers.md +++ b/website/versioned_docs/version-v15.0.0/guides/relay-resolvers.md @@ -111,7 +111,7 @@ When the field is first read by a component, Relay will evaluate the Relay Resol ## Error Handling -In order to make product code as robust as possible, Relay Resolvers follow the GraphQL spec’s documented [best practice](https://graphql.org/learn/best-practices/#nullability) of returning null when a field resolver errors. Instead of throwing, errors thrown by Relay Resolvers will be logged to your environment's configured `requiredFieldLogger` with an event of kind `"relay_resolver.error"`. If you make use of Relay Resolves you should be sure to configure your environment with a `requiredFieldLogger` which reports those events to whatever system you use for tracking runtime errors. +In order to make product code as robust as possible, Relay Resolvers follow the GraphQL spec’s documented [best practice](https://graphql.org/learn/best-practices/#nullability) of returning null when a field resolver errors. Instead of throwing, errors thrown by Relay Resolvers will be logged to your environment's configured `relayFieldLogger` with an event of kind `"relay_resolver.error"`. If you make use of Relay Resolves you should be sure to configure your environment with a `relayFieldLogger` which reports those events to whatever system you use for tracking runtime errors. If your component requires a non-null value in order to render, and can’t provide a reasonable fallback experience, you can annotate the field access with `@required`.