- Updated dependencies [
920b443
,ed9c205
]:- @graphql-codegen/visitor-plugin-common@5.1.0
- @graphql-codegen/typescript@4.0.6
- Updated dependencies [
53f270a
]:- @graphql-codegen/visitor-plugin-common@5.0.0
- @graphql-codegen/typescript@4.0.5
-
Updated dependencies [
4e69568
]:- @graphql-codegen/visitor-plugin-common@4.1.2
- @graphql-codegen/typescript@4.0.4
- @graphql-codegen/plugin-helpers@5.0.3
-
#9673
7718a8113
Thanks @maclockard! - Respect avoidOptionals when all arguments are optional -
Updated dependencies [
7718a8113
]:- @graphql-codegen/visitor-plugin-common@4.1.1
- @graphql-codegen/typescript@4.0.3
- #9811
d8364e045
Thanks @saihaj! - dependencies updates:- Updated dependency
tslib@~2.6.0
↗︎ (from~2.5.0
, independencies
)
- Updated dependency
- Updated dependencies [
d8364e045
,d8364e045
,d8364e045
,d8364e045
,d8364e045
]:- @graphql-codegen/plugin-helpers@5.0.2
- @graphql-codegen/typescript@4.0.2
- @graphql-codegen/visitor-plugin-common@4.1.0
-
#9497
2276708d0
Thanks @eddeee888! - Revert default ID scalar input type to stringWe changed the ID Scalar input type from
string
tostring | number
in the latest major version oftypescript
plugin. This causes issues for server plugins (e.g. typescript-resolvers) that depends ontypescript
plugin. This is because the scalar type needs to be manually inverted on setup which is confusing. -
Updated dependencies [
2276708d0
]:- @graphql-codegen/visitor-plugin-common@4.0.1
- @graphql-codegen/typescript@4.0.1
-
#9375
ba84a3a27
Thanks @eddeee888! - Implement Scalars with input/output typesIn GraphQL, Scalar types can be different for client and server. For example, given the native GraphQL ID:
- A client may send
string
ornumber
in the input - A client receives
string
in its selection set (i.e output) - A server receives
string
in the resolver (GraphQL parsesstring
ornumber
received from the client tostring
) - A server may return
string
ornumber
(GraphQL serializes the value tostring
before sending it to the client )
Currently, we represent every Scalar with only one type. This is what codegen generates as base type:
export type Scalars = { ID: string; };
Then, this is used in both input and output type e.g.
export type Book = { __typename?: 'Book'; id: Scalars['ID']; // Output's ID can be `string` 👍 }; export type QueryBookArgs = { id: Scalars['ID']; // Input's ID can be `string` or `number`. However, the type is only `string` here 👎 };
This PR extends each Scalar to have input and output:
export type Scalars = { ID: { input: string | number; output: string; }; };
Then, each input/output GraphQL type can correctly refer to the correct input/output scalar type:
export type Book = { __typename?: 'Book'; id: Scalars['ID']['output']; // Output's ID can be `string` 👍 }; export type QueryBookArgs = { id: Scalars['ID']['input']; // Input's ID can be `string` or `number` 👍 };
Note that for
typescript-resolvers
, the type of ID needs to be inverted. However, the referenced types in GraphQL input/output types should still work correctly:export type Scalars = { ID: { input: string; output: string | number; } } export type Book = { __typename?: "Book"; id: Scalars["ID"]['output']; // Resolvers can return `string` or `number` in ID fields 👍 }; export type QueryBookArgs = { id: Scalars["ID"]['input']; // Resolvers receive `string` in ID fields 👍 }; export type ResolversTypes = { ID: ID: ResolverTypeWrapper<Scalars['ID']['output']>; // Resolvers can return `string` or `number` in ID fields 👍 } export type ResolversParentTypes = { ID: Scalars['ID']['output']; // Resolvers receive `string` or `number` from parents 👍 };
Config changes:
- Scalars option can now take input/output types:
config: { scalars: { ID: { input: 'string', output: 'string | number' } } }
- If a string is given (instead of an object with input/output fields), it will be used as both input and output types:
config: { scalars: { ID: 'string'; // This means `string` will be used for both ID's input and output types } }
- BREAKING CHANGE: External module Scalar types need to be an object with input/output fields
config: { scalars: { ID: './path/to/scalar-module'; } }
If correctly, wired up, the following will be generated:
// Previously, imported `ID` type can be a primitive type, now it must be an object with input/output fields import { ID } from './path/to/scalar-module'; export type Scalars = { ID: { input: ID['input']; output: ID['output'] }; };
BREAKING CHANGE: This changes Scalar types which could be referenced in other plugins. If you are a plugin maintainer and reference Scalar, please update your plugin to use the correct input/output types.
- A client may send
-
bb66c2a31
Thanks @n1ru4l! - Require Node.js>= 16
. Drop support for Node.js 14
-
#9196
3848a2b73
Thanks @beerose! - Add@defer
directive supportWhen a query includes a deferred fragment field, the server will return a partial response with the non-deferred fields first, followed by the remaining fields once they have been resolved.
Once start using the
@defer
directive in your queries, the generated code will automatically include support for the directive.// src/index.tsx import { graphql } from './gql'; const OrdersFragment = graphql(` fragment OrdersFragment on User { orders { id total } } `); const GetUserQuery = graphql(` query GetUser($id: ID!) { user(id: $id) { id name ...OrdersFragment @defer } } `);
The generated type for
GetUserQuery
will have information that the fragment is incremental, meaning it may not be available right away.// gql/graphql.ts export type GetUserQuery = { __typename?: 'Query'; id: string; name: string } & ({ __typename?: 'Query'; } & { ' $fragmentRefs'?: { OrdersFragment: Incremental<OrdersFragment> }; });
Apart from generating code that includes support for the
@defer
directive, the Codegen also exports a utility function calledisFragmentReady
. You can use it to conditionally render components based on whether the data for a deferred fragment is available:const OrdersList = (props: { data: FragmentType<typeof OrdersFragment> }) => { const data = useFragment(OrdersFragment, props.data); return ( // render orders list ) }; function App() { const { data } = useQuery(GetUserQuery); return ( {data && ( <> {isFragmentReady(GetUserQuery, OrdersFragment, data) && <OrdersList data={data} />} </> )} ); } export default App;
-
#9339
50471e651
Thanks @AaronMoat! - Add excludeTypes config to resolversNonOptionalTypenameThis disables the adding of
__typename
in resolver types for any specified typename. This could be useful e.g. if you're wanting to enable this for all new types going forward but not do a big migration.Usage example:
const config: CodegenConfig = { schema: 'src/schema/**/*.graphql', generates: { 'src/schema/types.ts': { plugins: ['typescript', 'typescript-resolvers'], config: { resolversNonOptionalTypename: { unionMember: true, excludeTypes: ['MyType'], }, }, }, }, };
-
#9229
5aa95aa96
Thanks @eddeee888! - Use generic to simplify ResolversUnionTypesThis follows the
ResolversInterfaceTypes
's approach where theRefType
generic is used to refer back toResolversTypes
orResolversParentTypes
in cases of nested Union types -
#9304
e1dc75f3c
Thanks @esfomeado! - Added support for disabling suffixes on Enums. -
#9229
5aa95aa96
Thanks @eddeee888! - Extract interfaces to ResolversInterfaceTypes and add to resolversNonOptionalTypenameResolversInterfaceTypes
is a new type that keeps track of a GraphQL interface and its implementing types.
For example, consider this schema:
extend type Query { character(id: ID!): CharacterNode } interface CharacterNode { id: ID! } type Wizard implements CharacterNode { id: ID! screenName: String! spells: [String!]! } type Fighter implements CharacterNode { id: ID! screenName: String! powerLevel: Int! }
The generated types will look like this:
export type ResolversInterfaceTypes<RefType extends Record<string, unknown>> = { CharacterNode: Fighter | Wizard; }; export type ResolversTypes = { // other types... CharacterNode: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['CharacterNode']>; Fighter: ResolverTypeWrapper<Fighter>; Wizard: ResolverTypeWrapper<Wizard>; // other types... }; export type ResolversParentTypes = { // other types... CharacterNode: ResolversInterfaceTypes<ResolversParentTypes>['CharacterNode']; Fighter: Fighter; Wizard: Wizard; // other types... };
The
RefType
generic is used to reference back toResolversTypes
andResolversParentTypes
in some cases such as field returning a Union.resolversNonOptionalTypename
also affectsResolversInterfaceTypes
Using the schema above, if we use
resolversNonOptionalTypename
option:const config: CodegenConfig = { schema: 'src/schema/**/*.graphql', generates: { 'src/schema/types.ts': { plugins: ['typescript', 'typescript-resolvers'], config: { resolversNonOptionalTypename: true, // Or `resolversNonOptionalTypename: { interfaceImplementingType: true }` }, }, }, };
Then, the generated type looks like this:
export type ResolversInterfaceTypes<RefType extends Record<string, unknown>> = { CharacterNode: (Fighter & { __typename: 'Fighter' }) | (Wizard & { __typename: 'Wizard' }); }; export type ResolversTypes = { // other types... CharacterNode: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['CharacterNode']>; Fighter: ResolverTypeWrapper<Fighter>; Wizard: ResolverTypeWrapper<Wizard>; // other types... }; export type ResolversParentTypes = { // other types... CharacterNode: ResolversInterfaceTypes<ResolversParentTypes>['CharacterNode']; Fighter: Fighter; Wizard: Wizard; // other types... };
- #9449
4d9ea1a5a
Thanks @n1ru4l! - dependencies updates:- Updated dependency
@graphql-tools/utils@^10.0.0
↗︎ (from^9.0.0
, independencies
)
- Updated dependency
- Updated dependencies [
4d9ea1a5a
,4d9ea1a5a
,f46803a8c
,3848a2b73
,ba84a3a27
,63827fabe
,50471e651
,5aa95aa96
,ca02ad172
,e1dc75f3c
,bb66c2a31
,5950f5a68
,5aa95aa96
]:- @graphql-codegen/plugin-helpers@5.0.0
- @graphql-codegen/visitor-plugin-common@4.0.0
- @graphql-codegen/typescript@4.0.0
-
#9231
402cb8ac0
Thanks @eddeee888! - Implement resolversNonOptionalTypename for mapper cases -
Updated dependencies [
386cf9044
,402cb8ac0
]:- @graphql-codegen/visitor-plugin-common@3.1.1
- @graphql-codegen/typescript@3.0.4
-
#9146
9f4d9c5a4
Thanks @eddeee888! - [typescript-resolvers] AddresolversNonOptionalTypename
config option.This is extending on
ResolversUnionTypes
implemented in #9069resolversNonOptionalTypename
adds non-optional__typename
to union members ofResolversUnionTypes
, without affecting the union members' base intefaces.A common use case for non-optional
__typename
of union members is using it as the common field to work out the final schema type. This makes implementing the union's__resolveType
very simple as we can use__typename
to decide which union member the resolved object is. Without this, we have to check the existence of field/s on the incoming object which could be verbose.For example, consider this schema:
type Query { book(id: ID!): BookPayload! } type Book { id: ID! isbn: String! } type BookResult { node: Book } type PayloadError { message: String! } union BookPayload = BookResult | PayloadError
With optional
__typename
: We need to check existence of certain fields to resolve type in the union resolver:// Query/book.ts export const book = async () => { try { const book = await fetchBook(); // 1. No `__typename` in resolver results... return { node: book, }; } catch (e) { return { message: 'Failed to fetch book', }; } }; // BookPayload.ts export const BookPayload = { __resolveType: parent => { // 2. ... means more checks in `__resolveType` if ('message' in parent) { return 'PayloadError'; } return 'BookResult'; }, };
With non-optional
__typename
: Resolvers declare the type. This which gives us better TypeScript support in resolvers and simplify__resolveType
implementation:// Query/book.ts export const book = async () => { try { const book = await fetchBook(); // 1. `__typename` is declared in resolver results... return { __typename: 'BookResult', // 1a. this also types `node` for us 🎉 node: book, }; } catch (e) { return { __typename: 'PayloadError', message: 'Failed to fetch book', }; } }; // BookPayload.ts export const BookPayload = { __resolveType: parent => parent.__typename, // 2. ... means a very simple check in `__resolveType` };
Using
resolversNonOptionalTypename
: add it intotypescript-resolvers
plugin config:// codegen.ts const config: CodegenConfig = { schema: 'src/schema/**/*.graphql', generates: { 'src/schema/types.ts': { plugins: ['typescript', 'typescript-resolvers'], config: { resolversNonOptionalTypename: true, // Or `resolversNonOptionalTypename: { unionMember: true }` }, }, }, };
-
#9206
e56790104
Thanks @eddeee888! - FixResolversUnionTypes
being used inResolversParentTypes
Previously, objects with mappable fields are converted to Omit format that references its own type group or
ResolversTypes
orResolversParentTypes
e.g.export type ResolversTypes = { Book: ResolverTypeWrapper<BookMapper>; BookPayload: ResolversTypes['BookResult'] | ResolversTypes['StandardError']; // Note: `result` on the next line references `ResolversTypes["Book"]` BookResult: ResolverTypeWrapper<Omit<BookResult, 'result'> & { result?: Maybe<ResolversTypes['Book']> }>; StandardError: ResolverTypeWrapper<StandardError>; }; export type ResolversParentTypes = { Book: BookMapper; BookPayload: ResolversParentTypes['BookResult'] | ResolversParentTypes['StandardError']; // Note: `result` on the next line references `ResolversParentTypes["Book"]` BookResult: Omit<BookResult, 'result'> & { result?: Maybe<ResolversParentTypes['Book']> }; StandardError: StandardError; };
In #9069, we extracted resolver union types to its own group:
export type ResolversUnionTypes = { // Note: `result` on the next line references `ResolversTypes["Book"]` which is only correct for the `ResolversTypes` case BookPayload: (Omit<BookResult, 'result'> & { result?: Maybe<ResolversTypes['Book']> }) | StandardError; }; export type ResolversTypes = { Book: ResolverTypeWrapper<BookMapper>; BookPayload: ResolverTypeWrapper<ResolversUnionTypes['BookPayload']>; BookResult: ResolverTypeWrapper<Omit<BookResult, 'result'> & { result?: Maybe<ResolversTypes['Book']> }>; StandardError: ResolverTypeWrapper<StandardError>; }; export type ResolversParentTypes = { Book: BookMapper; BookPayload: ResolversUnionTypes['BookPayload']; BookResult: Omit<BookResult, 'result'> & { result?: Maybe<ResolversParentTypes['Book']> }; StandardError: StandardError; };
This change creates an extra
ResolversUnionParentTypes
that is referenced byResolversParentTypes
to ensure backwards compatibility:export type ResolversUnionTypes = { BookPayload: (Omit<BookResult, 'result'> & { result?: Maybe<ResolversParentTypes['Book']> }) | StandardError; }; // ... and the reference is changed in ResolversParentTypes: export type ResolversParentTypes = { // ... other fields BookPayload: ResolversUnionParentTypes['BookPayload']; };
-
f104619ac
Thanks @saihaj! - Resolve issue with nesting fields in@provides
directive being prevented -
Updated dependencies [
e56790104
,b7dacb21f
,f104619ac
,92d86b009
,acb647e4e
,9f4d9c5a4
]:- @graphql-codegen/visitor-plugin-common@3.1.0
- @graphql-codegen/plugin-helpers@4.2.0
- @graphql-codegen/typescript@3.0.3
-
#9110
ba0610bbd
Thanks @gilgardosh! - Custom mappers with placeholder will apply omit -
#9069
4b49f6fbe
Thanks @eddeee888! - Extract union types to ResolversUnionTypes -
Updated dependencies [
ba0610bbd
,4b49f6fbe
,b343626c9
]:- @graphql-codegen/visitor-plugin-common@3.0.2
- @graphql-codegen/typescript@3.0.2
- #8853
b13aa7449
Thanks @KGAdamCook! - Updated customResolveInfo to use the correct importType for external imports
- #8879
8206b268d
Thanks @renovate! - dependencies updates:- Updated dependency
tslib@~2.5.0
↗︎ (from~2.4.0
, independencies
)
- Updated dependency
- Updated dependencies [
8206b268d
,8206b268d
,8206b268d
,a118c307a
,6b6fe3cbc
,a3309e63e
]:- @graphql-codegen/plugin-helpers@4.1.0
- @graphql-codegen/typescript@3.0.1
- @graphql-codegen/visitor-plugin-common@3.0.1
-
Updated dependencies [
fc79b65d4
,fd0b0c813
]:- @graphql-codegen/visitor-plugin-common@3.0.0
- @graphql-codegen/plugin-helpers@4.0.0
- @graphql-codegen/typescript@3.0.0
- Updated dependencies [
a98198524
]:- @graphql-codegen/visitor-plugin-common@2.13.8
- @graphql-codegen/typescript@2.8.8
- Updated dependencies [
eb454d06c
]:- @graphql-codegen/visitor-plugin-common@2.13.7
- @graphql-codegen/typescript@2.8.7
- #8771
ed87c782b
Thanks @renovate! - dependencies updates:- Updated dependency
@graphql-tools/utils@^9.0.0
↗︎ (from^8.8.0
, independencies
)
- Updated dependency
- Updated dependencies [
ed87c782b
,ed87c782b
,6c6b6f2df
]:- @graphql-codegen/plugin-helpers@3.1.2
- @graphql-codegen/visitor-plugin-common@2.13.6
- @graphql-codegen/typescript@2.8.6
-
46f75304a
Thanks @saihaj! - fix the version of@graphql-codegen/plugin-helpers@3.1.1
-
Updated dependencies [
307a5d350
,46f75304a
]:- @graphql-codegen/plugin-helpers@3.1.1
- @graphql-codegen/visitor-plugin-common@2.13.5
- @graphql-codegen/typescript@2.8.5
- Updated dependencies [
a6c2097f4
,a6c2097f4
,f79a00e8a
,c802a0c0b
]:- @graphql-codegen/plugin-helpers@3.0.0
- @graphql-codegen/visitor-plugin-common@2.13.4
- @graphql-codegen/typescript@2.8.4
- Updated dependencies [
62f655452
]:- @graphql-codegen/visitor-plugin-common@2.13.3
- @graphql-codegen/typescript@2.8.3
- Updated dependencies [
ef4c2c9c2
]:- @graphql-codegen/visitor-plugin-common@2.13.2
- @graphql-codegen/typescript@2.8.2
- Updated dependencies [
63dc8f205
]:- @graphql-codegen/visitor-plugin-common@2.13.1
- @graphql-codegen/plugin-helpers@2.7.2
- @graphql-codegen/typescript@2.8.1
- Updated dependencies [
a46b8d99c
]:- @graphql-codegen/visitor-plugin-common@2.13.0
- @graphql-codegen/typescript@2.7.5
- Updated dependencies [
1bd7f771c
]:- @graphql-codegen/visitor-plugin-common@2.12.2
- @graphql-codegen/typescript@2.7.4
-
#8189
b408f8238
Thanks @n1ru4l! - Fix CommonJS TypeScript resolution withmoduleResolution
node16
ornodenext
-
Updated dependencies [
b408f8238
,47d0a57e2
]:- @graphql-codegen/visitor-plugin-common@2.12.1
- @graphql-codegen/typescript@2.7.3
- @graphql-codegen/plugin-helpers@2.6.2
- Updated dependencies [2cbcbb371]
- @graphql-codegen/visitor-plugin-common@2.12.0
- @graphql-codegen/plugin-helpers@2.6.0
- @graphql-codegen/typescript@2.7.2
- 525ad580b: Revert breaking change for Next.js applications that are incapable of resolving an import with a
.js
extension. - Updated dependencies [525ad580b]
- @graphql-codegen/visitor-plugin-common@2.11.1
- @graphql-codegen/typescript@2.7.1
-
d84afec09: Support TypeScript ESM modules (
"module": "node16"
and"moduleResolution": "node16"
).
- Updated dependencies [68bb30e19]
- Updated dependencies [d84afec09]
- Updated dependencies [a4fe5006b]
- Updated dependencies [8e44df58b]
- @graphql-codegen/visitor-plugin-common@2.11.0
- @graphql-codegen/typescript@2.7.0
- @graphql-codegen/plugin-helpers@2.5.0
- Updated dependencies [aa1e6eafd]
- Updated dependencies [a42fcbfe4]
- Updated dependencies [8b10f22be]
- @graphql-codegen/typescript@2.6.0
- @graphql-codegen/visitor-plugin-common@2.10.0
- Updated dependencies [d16bebacb]
- @graphql-codegen/visitor-plugin-common@2.9.1
- @graphql-codegen/typescript@2.5.1
- Updated dependencies [c3d7b7226]
- @graphql-codegen/visitor-plugin-common@2.9.0
- @graphql-codegen/typescript@2.5.0
- Updated dependencies [f1fb77bd4]
- @graphql-codegen/visitor-plugin-common@2.8.0
- @graphql-codegen/typescript@2.4.11
- Updated dependencies [9a5f31cb6]
- @graphql-codegen/typescript@2.4.10
- @graphql-codegen/visitor-plugin-common@2.7.6
- Updated dependencies [2966686e9]
- @graphql-codegen/visitor-plugin-common@2.7.5
- @graphql-codegen/typescript@2.4.9
- 337fd4f77: WP: [typescript-resolvers] Add directiveContextTypes option
- Updated dependencies [337fd4f77]
- @graphql-codegen/visitor-plugin-common@2.7.4
- @graphql-codegen/typescript@2.4.8
- a3b348cd7: feat(resolvers): add factory signature to 'selectionSet' param of stitching resolvers
- Updated dependencies [54718c039]
- @graphql-codegen/typescript@2.4.7
- @graphql-codegen/visitor-plugin-common@2.7.3
- 1f5aaf097: Fix #7566 external resolver name export for directiveResolverMappings
- Updated dependencies [11d05e361]
- @graphql-codegen/visitor-plugin-common@2.7.2
- @graphql-codegen/typescript@2.4.6
- Updated dependencies [fd55e2039]
- @graphql-codegen/visitor-plugin-common@2.7.1
- @graphql-codegen/typescript@2.4.5
- Updated dependencies [1479233df]
- @graphql-codegen/visitor-plugin-common@2.7.0
- @graphql-codegen/typescript@2.4.4
- bef4376d5: fix: RequireFields generic making all other fields optional
- c8ef37ae0: fix(typescript-resolvers): Fix optional field types
- Updated dependencies [c8ef37ae0]
- Updated dependencies [754a33715]
- Updated dependencies [bef4376d5]
- Updated dependencies [be7cb3a82]
- @graphql-codegen/visitor-plugin-common@2.6.0
- @graphql-codegen/plugin-helpers@2.4.0
- @graphql-codegen/typescript@2.4.3
- 6002feb3d: Fix exports in package.json files for react-native projects
- Updated dependencies [6002feb3d]
- @graphql-codegen/visitor-plugin-common@2.5.2
- @graphql-codegen/typescript@2.4.2
- @graphql-codegen/plugin-helpers@2.3.2
- Updated dependencies [a9f1f1594]
- Updated dependencies [9ea6621ec]
- @graphql-codegen/visitor-plugin-common@2.5.1
- @graphql-codegen/typescript@2.4.1
- 3d57ec666: loosen return type of SubscriptionSubscribeFn from
PromiseOrValue<AsyncIterator>
toPromiseOrValue<AsyncIterable>
. This fixes type conflicts with libraries such asix/asynciterable
and is whatgraphql-js
expects.
- 97ddb487a: feat: GraphQL v16 compatibility
- Updated dependencies [97ddb487a]
- @graphql-codegen/visitor-plugin-common@2.5.0
- @graphql-codegen/typescript@2.3.0
- @graphql-codegen/plugin-helpers@2.3.0
- Updated dependencies [ad02cb9b8]
- @graphql-codegen/visitor-plugin-common@2.4.0
- @graphql-codegen/typescript@2.2.4
- Updated dependencies [b9e85adae]
- Updated dependencies [7c60e5acc]
- Updated dependencies [3c2c847be]
- @graphql-codegen/visitor-plugin-common@2.3.0
- @graphql-codegen/plugin-helpers@2.2.0
- @graphql-codegen/typescript@2.2.3
- 46b38d9c1: Add makeResolverTypeCallable property to config which allows a resolver function to be called
- Updated dependencies [0b090e31a]
- @graphql-codegen/visitor-plugin-common@2.2.1
- @graphql-codegen/typescript@2.2.2
-
5086791ac: Allow overwriting the resolver type signature based on directive usages.
WARNING: Using this option does only change the generated type definitions.
For actually ensuring that a type is correct at runtime you will have to use schema transforms (e.g. with @graphql-tools/utils mapSchema) that apply those rules! Otherwise, you might end up with a runtime type mismatch which could cause unnoticed bugs or runtime errors.
Example configuration:
config: # This was possible before customResolverFn: ../resolver-types.ts#UnauthenticatedResolver # This is new directiveResolverMappings: authenticated: ../resolvers-types.ts#AuthenticatedResolver
Example mapping file (
resolver-types.ts
):export type UnauthenticatedContext = { user: null; }; export type AuthenticatedContext = { user: { id: string }; }; export type UnauthenticatedResolver<TResult, TParent, _TContext, TArgs> = ( parent: TParent, args: TArgs, context: UnauthenticatedContext, info: GraphQLResolveInfo ) => Promise<TResult> | TResult; export type AuthenticatedResolver<TResult, TParent, _TContext, TArgs> = ( parent: TParent, args: TArgs, context: AuthenticatedContext, info: GraphQLResolveInfo ) => Promise<TResult> | TResult;
Example Schema:
directive @authenticated on FIELD_DEFINITION type Query { yee: String foo: String @authenticated }
- Updated dependencies [d6c2d4c09]
- Updated dependencies [feeae1c66]
- Updated dependencies [8261e4161]
- Updated dependencies [5086791ac]
- @graphql-codegen/visitor-plugin-common@2.2.0
- @graphql-codegen/typescript@2.2.0
- Updated dependencies [6470e6cc9]
- Updated dependencies [263570e50]
- Updated dependencies [35199dedf]
- @graphql-codegen/visitor-plugin-common@2.1.2
- @graphql-codegen/plugin-helpers@2.1.1
- @graphql-codegen/typescript@2.1.2
- Updated dependencies [aabeff181]
- @graphql-codegen/visitor-plugin-common@2.1.1
- @graphql-codegen/typescript@2.1.1
- 39773f59b: enhance(plugins): use getDocumentNodeFromSchema and other utilities from @graphql-tools/utils
- 440172cfe: support ESM
- 24185985a: bump graphql-tools package versions
- 440172cfe: export config types
- Updated dependencies [290170262]
- Updated dependencies [24185985a]
- Updated dependencies [39773f59b]
- Updated dependencies [440172cfe]
- @graphql-codegen/visitor-plugin-common@2.1.0
- @graphql-codegen/plugin-helpers@2.1.0
- @graphql-codegen/typescript@2.1.0
-
d80efdec4: Set
noSchemaStitching: true
by default.If you need the resolvers signature to support schema-stitching, please add to your config:
noSchemaStitching: false
-
d80efdec4: Remove deprecated
IDirectiveResolvers
andIResolvers
signaturesPlease use
DirectiveResolvers
andResolvers
types instead. -
b0cb13df4: Update to latest
graphql-tools
andgraphql-config
version.‼️ ‼️ ‼️ Please note‼️ ‼️ ‼️ :This is a breaking change since Node 10 is no longer supported in
graphql-tools
, and also no longer supported for Codegen packages.
- Updated dependencies [d80efdec4]
- Updated dependencies [d80efdec4]
- Updated dependencies [b0cb13df4]
- @graphql-codegen/visitor-plugin-common@2.0.0
- @graphql-codegen/typescript@2.0.0
- @graphql-codegen/plugin-helpers@2.0.0
- 8e4d5826: Add a new type for StitchResolver without selectionSet
- 9005cc17: add
allowEnumStringTypes
option for allowing string literals as valid return types from resolvers in addition to enum values._
- df19a4ed: Allow multiple
{T}
instances in defaultMapper - Updated dependencies [df19a4ed]
- Updated dependencies [470336a1]
- Updated dependencies [9005cc17]
- @graphql-codegen/visitor-plugin-common@1.22.0
- @graphql-codegen/plugin-helpers@1.18.8
- @graphql-codegen/typescript@1.23.0
- Updated dependencies [6762aff5]
- @graphql-codegen/visitor-plugin-common@1.21.3
- @graphql-codegen/typescript@1.22.4
- Updated dependencies [6aaecf1c]
- @graphql-codegen/visitor-plugin-common@1.21.2
- @graphql-codegen/typescript@1.22.3
- Updated dependencies [cf1e5abc]
- @graphql-codegen/visitor-plugin-common@1.21.1
- @graphql-codegen/typescript@1.22.2
- dfd25caf: chore(deps): bump graphql-tools versions
- Updated dependencies [dfd25caf]
- Updated dependencies [8da7dff6]
- @graphql-codegen/visitor-plugin-common@1.21.0
- @graphql-codegen/plugin-helpers@1.18.7
- @graphql-codegen/typescript@1.22.1
- d9212aa0: fix(visitor-plugin-common): guard for a runtime type error
- Updated dependencies [d9212aa0]
- Updated dependencies [f0b5ea53]
- Updated dependencies [097bea2f]
- @graphql-codegen/visitor-plugin-common@1.20.0
- @graphql-codegen/typescript@1.22.0
- @graphql-codegen/plugin-helpers@1.18.5
- d4942d04: NEW CONFIG (
onlyResolveTypeForInterfaces
): Allow to generate only __resolveType for interfaces
- 29b75b1e: enhance(namingConvention): use change-case-all instead of individual packages for naming convention
- Updated dependencies [e947f8e3]
- Updated dependencies [29b75b1e]
- Updated dependencies [d4942d04]
- Updated dependencies [1f6f3db6]
- Updated dependencies [29b75b1e]
- @graphql-codegen/visitor-plugin-common@1.19.0
- @graphql-codegen/typescript@1.21.1
- @graphql-codegen/plugin-helpers@1.18.3
- 5749cb8a: chore: fix type-level incompatibilities of the
avoidOptionals
- Updated dependencies [34b8087e]
- Updated dependencies [5749cb8a]
- Updated dependencies [5a12fe58]
- @graphql-codegen/typescript@1.21.0
- @graphql-codegen/visitor-plugin-common@1.18.3
- fd5843a7: Fixed a bug where some import namespacing is missed when generating resolver types.
- Updated dependencies [64293437]
- Updated dependencies [fd5843a7]
- Updated dependencies [d75051f5]
- @graphql-codegen/visitor-plugin-common@1.17.22
- 8356f8a2: Added a new config flag for customizing
isTypeOf
andresolveType
prefix (internalResolversPrefix
)
- Updated dependencies [8356f8a2]
- Updated dependencies [1d6a593f]
- @graphql-codegen/visitor-plugin-common@1.17.21
- @graphql-codegen/typescript@1.19.0
- 1183d173: Bump all packages to resolve issues with shared dependencies
- Updated dependencies [1183d173]
- @graphql-codegen/visitor-plugin-common@1.17.20
- @graphql-codegen/typescript@1.18.1
- @graphql-codegen/plugin-helpers@1.18.2
- faa13973: Fixed issues with mappers setup
- Updated dependencies [faa13973]
- @graphql-codegen/visitor-plugin-common@1.17.18
- d2cde3d5: fixed isTypeOf resolvers signature
- 89a6aa80: Fixes issues with typesSuffix and arguments type name
- Updated dependencies [d2cde3d5]
- Updated dependencies [89a6aa80]
- Updated dependencies [f603b8f8]
- Updated dependencies [7ad7a1ae]
- Updated dependencies [da8bdd17]
- @graphql-codegen/visitor-plugin-common@1.17.15
- @graphql-codegen/typescript@1.17.10
- @graphql-codegen/plugin-helpers@1.17.9
- ed7f6b97: Fix issues with mappers not being applied for interfaces or unions
- 1d7c6432: Bump all packages to allow "^" in deps and fix compatibility issues
- 1d7c6432: Bump versions of @graphql-tools/ packages to fix issues with loading schemas and SDL comments
- af3803b8: only transform federated parent types when they contain @external directive
- Updated dependencies [1d7c6432]
- Updated dependencies [1d7c6432]
- @graphql-codegen/visitor-plugin-common@1.17.13
- @graphql-codegen/plugin-helpers@1.17.8
- @graphql-codegen/typescript@1.17.8