Skip to content

Commit

Permalink
fix: properly type extensions in GraphQLFormattedError (#4286)
Browse files Browse the repository at this point in the history
Following typescript documentation, it's not possible override interface
property, we can only add new props.

Since it's declared as unknown dict, even if we merge
`GraphQLErrorExtensions`, we can't access to our extensions without
workaround and verbose typescript in source-code.

It's annoying since apollo expose `GraphQLFormattedError` instead
`GraphQLError`

Refs:
https://www.typescriptlang.org/docs/handbook/declaration-merging.html
Refs: apollographql/apollo-client#11789
  • Loading branch information
tpoisseau authored Nov 8, 2024
1 parent 423e72d commit 3f49961
Showing 3 changed files with 16 additions and 1 deletion.
15 changes: 14 additions & 1 deletion src/error/GraphQLError.ts
Original file line number Diff line number Diff line change
@@ -20,6 +20,19 @@ export interface GraphQLErrorExtensions {
[attributeName: string]: unknown;
}

/**
* Custom formatted extensions
*
* @remarks
* Use a unique identifier name for your extension, for example the name of
* your library or project. Do not use a shortened identifier as this increases
* the risk of conflicts. We recommend you add at most one extension field,
* an object which can contain all the values you need.
*/
export interface GraphQLFormattedErrorExtensions {
[attributeName: string]: unknown;
}

export interface GraphQLErrorOptions {
nodes?: ReadonlyArray<ASTNode> | ASTNode | null;
source?: Maybe<Source>;
@@ -275,7 +288,7 @@ export interface GraphQLFormattedError {
* Reserved for implementors to extend the protocol however they see fit,
* and hence there are no additional restrictions on its contents.
*/
readonly extensions?: { [key: string]: unknown };
readonly extensions?: GraphQLFormattedErrorExtensions;
}

/**
1 change: 1 addition & 0 deletions src/error/index.ts
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@ export type {
GraphQLErrorOptions,
GraphQLFormattedError,
GraphQLErrorExtensions,
GraphQLFormattedErrorExtensions,
} from './GraphQLError';

export { syntaxError } from './syntaxError';
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -398,6 +398,7 @@ export type {
GraphQLErrorOptions,
GraphQLFormattedError,
GraphQLErrorExtensions,
GraphQLFormattedErrorExtensions,
} from './error/index';

// Utilities for operating on GraphQL type schema and parsed sources.

0 comments on commit 3f49961

Please # to comment.