Skip to content

Commit

Permalink
Add a type of stitching resolver without selectionSet (#6281)
Browse files Browse the repository at this point in the history
  • Loading branch information
highwide committed Jul 12, 2021
1 parent 89e30d5 commit 8e4d582
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 6 deletions.
5 changes: 5 additions & 0 deletions .changeset/gold-pans-sneeze.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphql-codegen/typescript-resolvers': minor
---

Add a new type for StitchResolver without selectionSet
5 changes: 5 additions & 0 deletions dev-test/modules/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ export type User = {

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};

export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
fragment: string;
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
Expand All @@ -108,6 +112,7 @@ export type StitchingResolver<TResult, TParent, TContext, TArgs> =
| NewStitchingResolver<TResult, TParent, TContext, TArgs>;
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
Expand Down
5 changes: 5 additions & 0 deletions dev-test/test-schema/resolvers-federation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ type NullableCheck<T, S> = Maybe<T> extends T ? Maybe<ListCheck<NonNullable<T>,
type ListCheck<T, S> = T extends (infer U)[] ? NullableCheck<U, S>[] : GraphQLRecursivePick<T, S>;
export type GraphQLRecursivePick<T, S> = { [K in keyof T & keyof S]: ScalarCheck<T[K], S[K]> };

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};

export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
fragment: string;
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
Expand All @@ -71,6 +75,7 @@ export type StitchingResolver<TResult, TParent, TContext, TArgs> =
| NewStitchingResolver<TResult, TParent, TContext, TArgs>;
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
Expand Down
5 changes: 5 additions & 0 deletions dev-test/test-schema/resolvers-root.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ export type User = {

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};

export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
fragment: string;
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
Expand All @@ -58,6 +62,7 @@ export type StitchingResolver<TResult, TParent, TContext, TArgs> =
| NewStitchingResolver<TResult, TParent, TContext, TArgs>;
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
Expand Down
5 changes: 5 additions & 0 deletions dev-test/test-schema/resolvers-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ export type User = {

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};

export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
fragment: string;
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
Expand All @@ -55,6 +59,7 @@ export type StitchingResolver<TResult, TParent, TContext, TArgs> =
| NewStitchingResolver<TResult, TParent, TContext, TArgs>;
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
Expand Down
5 changes: 5 additions & 0 deletions dev-test/test-schema/typings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ export type User = {

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};

export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
fragment: string;
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
Expand All @@ -47,6 +51,7 @@ export type StitchingResolver<TResult, TParent, TContext, TArgs> =
| NewStitchingResolver<TResult, TParent, TContext, TArgs>;
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
Expand Down
12 changes: 10 additions & 2 deletions packages/plugins/typescript/resolvers/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,13 @@ export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};`;
const stitchingResolverType = `export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>;`;
const resolverWithResolve = `
export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};`;
const resolverType = `export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =`;
const resolverFnUsage = `ResolverFn<TResult, TParent, TContext, TArgs>`;
const resolverWithResolveUsage = `ResolverWithResolve<TResult, TParent, TContext, TArgs>`;
const stitchingResolverUsage = `StitchingResolver<TResult, TParent, TContext, TArgs>`;

if (visitor.hasFederation()) {
Expand All @@ -82,13 +87,15 @@ export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
`);
}

defsToInclude.push(resolverWithResolve);
if (noSchemaStitching) {
// Resolver = ResolverFn;
defsToInclude.push(`${resolverType} ${resolverFnUsage};`);
// Resolver = ResolverFn | ResolverWithResolve;
defsToInclude.push(`${resolverType} ${resolverFnUsage} | ${resolverWithResolveUsage};`);
} else {
// StitchingResolver
// Resolver =
// | ResolverFn
// | ResolverWithResolve
// | StitchingResolver;
defsToInclude.push(
[
Expand All @@ -97,6 +104,7 @@ export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
stitchingResolverType,
resolverType,
` | ${resolverFnUsage}`,
` | ${resolverWithResolveUsage}`,
` | ${stitchingResolverUsage};`,
].join('\n')
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,11 @@ export type ResolversObject<TObject> = WithIndex<TObject>;

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs>;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
Expand Down Expand Up @@ -270,7 +274,11 @@ export type ResolversObject<TObject> = WithIndex<TObject>;

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs>;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
Expand Down Expand Up @@ -523,7 +531,11 @@ export type ResolversObject<TObject> = WithIndex<TObject>;

export type ResolverTypeWrapper<T> = Promise<T> | T;

export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs>;

export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
};
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;

export type ResolverFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ describe('TypeScript Resolvers Plugin', () => {
expect(result.content).toBeSimilarStringTo(`
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;
`);

Expand Down Expand Up @@ -515,12 +516,13 @@ describe('TypeScript Resolvers Plugin', () => {
expect(result.content).not.toBeSimilarStringTo(`
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
| ResolverFn<TResult, TParent, TContext, TArgs>
| ResolverWithResolve<TResult, TParent, TContext, TArgs>
| StitchingResolver<TResult, TParent, TContext, TArgs>;
`);

expect(result.content).toBeSimilarStringTo(`
export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
ResolverFn<TResult, TParent, TContext, TArgs>;
ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
`);

await validate(result);
Expand Down

0 comments on commit 8e4d582

Please sign in to comment.