Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion types/relay-runtime/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ export {
RecordSourceProxy,
RecordSourceSelectorProxy,
RelayContext,
RelayFieldLogger,
RequestDescriptor,
RequiredFieldLogger,
SelectorData,
SelectorStoreUpdater,
SingularReaderSelector,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
OperationLoader,
OptimisticResponseConfig,
OptimisticUpdateFunction,
RequiredFieldLogger,
RelayFieldLogger,
SelectorStoreUpdater,
SingularReaderSelector,
Snapshot,
Expand All @@ -39,7 +39,7 @@ export type MultiActorEnvironmentConfig = Readonly<{
logFn?: LogFunction | null;
missingFieldHandlers?: readonly MissingFieldHandler[] | null;
operationLoader?: OperationLoader | null;
requiredFieldLogger?: RequiredFieldLogger | null;
relayFieldLogger?: RelayFieldLogger | null;
scheduler?: TaskScheduler | null;
shouldProcessClientComponents?: boolean | null;
treatMissingFieldsAsNull?: boolean;
Expand Down
6 changes: 3 additions & 3 deletions types/relay-runtime/lib/store/RelayModernEnvironment.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
OperationTracker,
OptimisticResponseConfig,
OptimisticUpdateFunction,
RequiredFieldLogger,
RelayFieldLogger,
SelectorStoreUpdater,
SingularReaderSelector,
Snapshot,
Expand All @@ -38,14 +38,14 @@ export interface EnvironmentConfig {
readonly UNSTABLE_defaultRenderPolicy?: RenderPolicy | null | undefined;
readonly options?: unknown | undefined;
readonly isServer?: boolean | undefined;
readonly requiredFieldLogger?: RequiredFieldLogger | null | undefined;
readonly relayFieldLogger?: RelayFieldLogger | null | undefined;
readonly shouldProcessClientComponents?: boolean | null | undefined;
}

export default class RelayModernEnvironment implements Environment {
options: unknown;
configName: string | null | undefined;
requiredFieldLogger: RequiredFieldLogger;
relayFieldLogger: RelayFieldLogger;
constructor(config: EnvironmentConfig);
getStore(): Store;
getNetwork(): Network;
Expand Down
54 changes: 30 additions & 24 deletions types/relay-runtime/lib/store/RelayStoreTypes.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ export interface Environment {
/**
* Returns an Observable of GraphQLResponse resulting from executing the
* provided Query or Subscription operation responses, the result of which is
* then normalized and comitted to the publish queue.
* then normalized and committed to the publish queue.
*
* Note: Observables are lazy, so calling this method will do nothing until
* the result is subscribed to:
Expand Down Expand Up @@ -732,9 +732,9 @@ export interface Environment {

/**
* Called by Relay when it encounters a missing field that has been annotated
* with `@required(action: LOG)`.
* with `@required(action: LOG)` or `@required(action: THROW)`.
*/
requiredFieldLogger: RequiredFieldLogger;
relayFieldLogger: RelayFieldLogger;
}

/**
Expand Down Expand Up @@ -932,29 +932,35 @@ export type MissingFieldHandler =
) => Array<DataID | null | undefined> | null | undefined;
};

export type RelayFieldLoggerEvent =
| Readonly<{
kind: "missing_field.log";
owner: string;
fieldPath: string;
}>
| Readonly<{
kind: "missing_field.throw";
owner: string;
fieldPath: string;
}>
| Readonly<{
kind: "relay_resolver.error";
owner: string;
fieldPath: string;
error: Error;
}>
| Readonly<{
kind: "relay_field_payload.error";
owner: string;
fieldPath: string;
error: Error;
}>;

/**
* A handler for events related to @required fields or Relay Resolvers. Currently reports missing
* fields with either `action: LOG` or `action: THROW` or when a Relay Resolver throws.
* A handler for events related to `@required` fields. Currently reports missing
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Backticks here to prevent JSDoc treating this as an operator.

* fields with either `action: LOG` or `action: THROW`.
*/
export type RequiredFieldLogger = (
arg:
| Readonly<{
kind: "missing_field.log";
owner: string;
fieldPath: string;
}>
| Readonly<{
kind: "missing_field.throw";
owner: string;
fieldPath: string;
}>
| Readonly<{
kind: "relay_resolver.error";
owner: string;
fieldPath: string;
error: Error;
}>,
) => void;
export type RelayFieldLogger = (event: RelayFieldLoggerEvent) => void;

/**
* The results of normalizing a query.
Expand Down
6 changes: 4 additions & 2 deletions types/relay-runtime/relay-runtime-tests.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -137,13 +137,15 @@ const environment = new Environment({
break;
}
},
requiredFieldLogger: arg => {
relayFieldLogger: arg => {
if (arg.kind === "missing_field.log") {
console.log(arg.fieldPath, arg.owner);
} else if (arg.kind === "missing_field.throw") {
console.log(arg.fieldPath, arg.owner);
} else if (arg.kind === "relay_resolver.error") {
console.log(arg.fieldPath, arg.owner);
} else {
arg.kind; // $ExpectType "relay_resolver.error"
arg.kind; // $ExpectType "relay_field_payload.error"
console.log(arg.fieldPath, arg.owner, arg.error);
}
},
Expand Down