diff --git a/.changeset/tricky-mappers-warn.md b/.changeset/tricky-mappers-warn.md index acb379b1..a2c69fea 100644 --- a/.changeset/tricky-mappers-warn.md +++ b/.changeset/tricky-mappers-warn.md @@ -1,5 +1,5 @@ --- -'@eddeee888/gcg-typescript-resolver-files': patch +'@eddeee888/gcg-typescript-resolver-files': minor --- Fix `fixObjectTypeResolvers` treating an unresolvable mapper type as an empty mapper and injecting a stub for every field diff --git a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/resolvers.generated.ts b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/resolvers.generated.ts index dca2e3c4..17790718 100644 --- a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/resolvers.generated.ts +++ b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/resolvers.generated.ts @@ -2,11 +2,15 @@ import type { Resolvers } from './types.generated'; import { user as Query_user } from './test/resolvers/Query/user'; import { Book } from './test/resolvers/Book'; +import { MappedResolveEmptyObject } from './test/resolvers/MappedResolveEmptyObject'; +import { MappedResolveError } from './test/resolvers/MappedResolveError'; import { User } from './test/resolvers/User'; export const resolvers: Resolvers = { Query: { user: Query_user }, Book: Book, +MappedResolveEmptyObject: MappedResolveEmptyObject, +MappedResolveError: MappedResolveError, User: User } \ No newline at end of file diff --git a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/resolvers/MappedResolveEmptyObject.ts b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/resolvers/MappedResolveEmptyObject.ts new file mode 100644 index 00000000..5a967a05 --- /dev/null +++ b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/resolvers/MappedResolveEmptyObject.ts @@ -0,0 +1,15 @@ +import type { MappedResolveEmptyObjectResolvers } from './../../types.generated'; + /* + * Note: This object type is generated because "MappedResolveEmptyObjectMapper" is declared. This is to ensure runtime safety. + * + * When a mapper is used, it is possible to hit runtime errors in some scenarios: + * - given a field name, the schema type's field type does not match mapper's field type + * - or a schema type's field does not exist in the mapper's fields + * + * If you want to skip this file generation, remove the mapper or update the pattern in the `resolverGeneration.object` config. + */ +export const MappedResolveEmptyObject: MappedResolveEmptyObjectResolvers = { + /* Implement MappedResolveEmptyObject resolver logic here */ + field: async (_parent, _arg, _ctx) => { /* MappedResolveEmptyObject.field resolver is required because MappedResolveEmptyObject.field exists but MappedResolveEmptyObjectMapper.field does not */ }, + id: async (_parent, _arg, _ctx) => { /* MappedResolveEmptyObject.id resolver is required because MappedResolveEmptyObject.id exists but MappedResolveEmptyObjectMapper.id does not */ } +}; \ No newline at end of file diff --git a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/resolvers/MappedResolveError.ts b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/resolvers/MappedResolveError.ts new file mode 100644 index 00000000..e4718d1c --- /dev/null +++ b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/resolvers/MappedResolveError.ts @@ -0,0 +1,13 @@ +import type { MappedResolveErrorResolvers } from './../../types.generated'; + /* + * Note: This object type is generated because "MappedResolveErrorMapper" is declared. This is to ensure runtime safety. + * + * When a mapper is used, it is possible to hit runtime errors in some scenarios: + * - given a field name, the schema type's field type does not match mapper's field type + * - or a schema type's field does not exist in the mapper's fields + * + * If you want to skip this file generation, remove the mapper or update the pattern in the `resolverGeneration.object` config. + */ +export const MappedResolveError: MappedResolveErrorResolvers = { + /* Implement MappedResolveError resolver logic here */ + }; \ No newline at end of file diff --git a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.graphqls b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.graphqls index 8623f1f3..4739f3f5 100644 --- a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.graphqls +++ b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.graphqls @@ -39,6 +39,16 @@ type Book { nextBookInSeries: Book! } +type MappedResolveEmptyObject { + id: ID! + field: String! +} + +type MappedResolveError { + id: ID! + field: String! +} + type NotMapped { id: ID! } diff --git a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.mappers.ts b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.mappers.ts index b3112464..c3cf98a0 100644 --- a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.mappers.ts +++ b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/test/schema.mappers.ts @@ -1,3 +1,6 @@ +export type { MappedResolveErrorMapper } from 'does-not-exist'; +export type MappedResolveEmptyObjectMapper = {}; + export type UserMapper = { id: number; diff --git a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/types.generated.ts b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/types.generated.ts index 36a27cc0..07e14136 100644 --- a/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/types.generated.ts +++ b/packages/typescript-resolver-files-e2e/src/test-mappers-vs-schema-types-advanced/modules/types.generated.ts @@ -1,5 +1,5 @@ import { GraphQLResolveInfo } from 'graphql'; -import { BookMapper, UserMapper } from './test/schema.mappers'; +import { BookMapper, MappedResolveEmptyObjectMapper, MappedResolveErrorMapper, UserMapper } from './test/schema.mappers'; export type Maybe = T | null | undefined; export type InputMaybe = T | null | undefined; /** All built-in and custom scalars, mapped to their actual values */ @@ -19,6 +19,18 @@ export type Book = { relatedBooks: Array; }; +export type MappedResolveEmptyObject = { + __typename?: 'MappedResolveEmptyObject'; + field: Scalars['String']['output']; + id: Scalars['ID']['output']; +}; + +export type MappedResolveError = { + __typename?: 'MappedResolveError'; + field: Scalars['String']['output']; + id: Scalars['ID']['output']; +}; + export type NotMapped = { __typename?: 'NotMapped'; id: Scalars['ID']['output']; @@ -127,6 +139,8 @@ export type ResolversTypes = { Book: ResolverTypeWrapper; ID: ResolverTypeWrapper; String: ResolverTypeWrapper; + MappedResolveEmptyObject: ResolverTypeWrapper; + MappedResolveError: ResolverTypeWrapper; NotMapped: ResolverTypeWrapper; Query: ResolverTypeWrapper>; User: ResolverTypeWrapper; @@ -138,6 +152,8 @@ export type ResolversParentTypes = { Book: BookMapper; ID: Scalars['ID']['output']; String: Scalars['String']['output']; + MappedResolveEmptyObject: MappedResolveEmptyObjectMapper; + MappedResolveError: MappedResolveErrorMapper; NotMapped: NotMapped; Query: Record; User: UserMapper; @@ -151,6 +167,16 @@ export type BookResolvers, ParentType, ContextType>; }; +export type MappedResolveEmptyObjectResolvers = { + field?: Resolver; + id?: Resolver; +}; + +export type MappedResolveErrorResolvers = { + field?: Resolver; + id?: Resolver; +}; + export type NotMappedResolvers = { id?: Resolver; }; @@ -182,6 +208,8 @@ export type UserResolvers = { Book?: BookResolvers; + MappedResolveEmptyObject?: MappedResolveEmptyObjectResolvers; + MappedResolveError?: MappedResolveErrorResolvers; NotMapped?: NotMappedResolvers; Query?: QueryResolvers; User?: UserResolvers;