From 1586f6b7393457cc783ffed09725cb536f145fc2 Mon Sep 17 00:00:00 2001 From: Tobbe Lundberg Date: Tue, 15 Mar 2022 11:32:04 +0100 Subject: [PATCH] Add tests to make sure important errors are still surfaced --- .../fixtures/.redwood/schema.graphql | 31 ++++ .../__tests__/fixtures/api/types/graphql.d.ts | 174 ++++++++++++++++++ .../invalidQueryType/.redwood/schema.graphql | 21 +++ .../invalidQueryType/redwood.toml | 2 + .../invalidQueryType/web/src/gql.js | 7 + .../invalidQueryType/web/types/graphql.d.ts | 55 ++++++ .../missingType/.redwood/schema.graphql | 25 +++ .../typeDefinitions/missingType/redwood.toml | 2 + .../missingType/web/src/gql.js | 8 + .../missingType/web/types/graphql.d.ts | 55 ++++++ .../nonExistingField/.redwood/schema.graphql | 31 ++++ .../nonExistingField/redwood.toml | 2 + .../nonExistingField/web/src/gql.js | 9 + .../nonExistingField/web/types/graphql.d.ts | 55 ++++++ .../__tests__/fixtures/web/types/graphql.d.ts | 55 ++++++ .../src/__tests__/typeDefinitions.test.ts | 69 +++++++ .../internal/src/generate/typeDefinitions.ts | 22 ++- 17 files changed, 617 insertions(+), 6 deletions(-) create mode 100644 packages/internal/src/__tests__/fixtures/.redwood/schema.graphql create mode 100644 packages/internal/src/__tests__/fixtures/api/types/graphql.d.ts create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/.redwood/schema.graphql create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/redwood.toml create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/src/gql.js create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/types/graphql.d.ts create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/.redwood/schema.graphql create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/redwood.toml create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/src/gql.js create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/types/graphql.d.ts create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/.redwood/schema.graphql create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/redwood.toml create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/src/gql.js create mode 100644 packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/types/graphql.d.ts create mode 100644 packages/internal/src/__tests__/fixtures/web/types/graphql.d.ts diff --git a/packages/internal/src/__tests__/fixtures/.redwood/schema.graphql b/packages/internal/src/__tests__/fixtures/.redwood/schema.graphql new file mode 100644 index 000000000000..58b0ebd56fe0 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/.redwood/schema.graphql @@ -0,0 +1,31 @@ +scalar BigInt + +scalar Date + +scalar DateTime + +scalar JSON + +scalar JSONObject + +type Mutation { + createTodo(body: String!): Todo +} + +type Query { + redwood: Redwood +} + +type Redwood { + currentUser: JSON + prismaVersion: String + version: String +} + +scalar Time + +type Todo { + body: String! + id: Int! + status: String! +} diff --git a/packages/internal/src/__tests__/fixtures/api/types/graphql.d.ts b/packages/internal/src/__tests__/fixtures/api/types/graphql.d.ts new file mode 100644 index 000000000000..d2e76e788bc0 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/api/types/graphql.d.ts @@ -0,0 +1,174 @@ +import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigInt: number; + Date: string; + DateTime: string; + JSON: Record; + JSONObject: Record; + Time: string; +}; + +export type Query = { + __typename?: 'Query'; + redwood?: Maybe; +}; + +export type Redwood = { + __typename?: 'Redwood'; + currentUser?: Maybe; + prismaVersion?: Maybe; + version?: Maybe; +}; + + + +export type ResolverTypeWrapper = Promise | T; + + +export type ResolverWithResolve = { + resolve: ResolverFn; +}; +export type Resolver = ResolverFn | ResolverWithResolve; + +export type ResolverFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => Promise | TResult; + +export type SubscriptionSubscribeFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => AsyncIterable | Promise>; + +export type SubscriptionResolveFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +export interface SubscriptionSubscriberObject { + subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>; + resolve?: SubscriptionResolveFn; +} + +export interface SubscriptionResolverObject { + subscribe: SubscriptionSubscribeFn; + resolve: SubscriptionResolveFn; +} + +export type SubscriptionObject = + | SubscriptionSubscriberObject + | SubscriptionResolverObject; + +export type SubscriptionResolver = + | ((...args: any[]) => SubscriptionObject) + | SubscriptionObject; + +export type TypeResolveFn = ( + parent: TParent, + context: TContext, + info: GraphQLResolveInfo +) => Maybe | Promise>; + +export type IsTypeOfResolverFn = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise; + +export type NextResolverFn = () => Promise; + +export type DirectiveResolverFn = ( + next: NextResolverFn, + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +/** Mapping between all available schema types and the resolvers types */ +export type ResolversTypes = { + BigInt: ResolverTypeWrapper; + Boolean: ResolverTypeWrapper; + Date: ResolverTypeWrapper; + DateTime: ResolverTypeWrapper; + JSON: ResolverTypeWrapper; + JSONObject: ResolverTypeWrapper; + Query: ResolverTypeWrapper<{}>; + Redwood: ResolverTypeWrapper; + String: ResolverTypeWrapper; + Time: ResolverTypeWrapper; +}; + +/** Mapping between all available schema types and the resolvers parents */ +export type ResolversParentTypes = { + BigInt: Scalars['BigInt']; + Boolean: Scalars['Boolean']; + Date: Scalars['Date']; + DateTime: Scalars['DateTime']; + JSON: Scalars['JSON']; + JSONObject: Scalars['JSONObject']; + Query: {}; + Redwood: Redwood; + String: Scalars['String']; + Time: Scalars['Time']; +}; + +export interface BigIntScalarConfig extends GraphQLScalarTypeConfig { + name: 'BigInt'; +} + +export interface DateScalarConfig extends GraphQLScalarTypeConfig { + name: 'Date'; +} + +export interface DateTimeScalarConfig extends GraphQLScalarTypeConfig { + name: 'DateTime'; +} + +export interface JSONScalarConfig extends GraphQLScalarTypeConfig { + name: 'JSON'; +} + +export interface JSONObjectScalarConfig extends GraphQLScalarTypeConfig { + name: 'JSONObject'; +} + +export type QueryResolvers = { + redwood?: Resolver, ParentType, ContextType>; +}; + +export type RedwoodResolvers = { + currentUser?: Resolver, ParentType, ContextType>; + prismaVersion?: Resolver, ParentType, ContextType>; + version?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}; + +export interface TimeScalarConfig extends GraphQLScalarTypeConfig { + name: 'Time'; +} + +export type Resolvers = { + BigInt?: GraphQLScalarType; + Date?: GraphQLScalarType; + DateTime?: GraphQLScalarType; + JSON?: GraphQLScalarType; + JSONObject?: GraphQLScalarType; + Query?: QueryResolvers; + Redwood?: RedwoodResolvers; + Time?: GraphQLScalarType; +}; + diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/.redwood/schema.graphql b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/.redwood/schema.graphql new file mode 100644 index 000000000000..911f3095cc3c --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/.redwood/schema.graphql @@ -0,0 +1,21 @@ +scalar BigInt + +scalar Date + +scalar DateTime + +scalar JSON + +scalar JSONObject + +scalar Time + +type Query { + redwood: Redwood +} + +type Redwood { + currentUser: JSON + prismaVersion: String + version: String +} diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/redwood.toml b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/redwood.toml new file mode 100644 index 000000000000..efd2d2d4d26e --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/redwood.toml @@ -0,0 +1,2 @@ +[web] + port = 8910 diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/src/gql.js b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/src/gql.js new file mode 100644 index 000000000000..55115506c7d1 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/src/gql.js @@ -0,0 +1,7 @@ +export const someOtherQuery = gql` + query FindSoftKitten($id: String!) { + softKitten: softKitten(id: $id) { + id + } + } +` diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/types/graphql.d.ts b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/types/graphql.d.ts new file mode 100644 index 000000000000..2ceabf283616 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/invalidQueryType/web/types/graphql.d.ts @@ -0,0 +1,55 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigInt: number; + Date: string; + DateTime: string; + JSON: Record; + JSONObject: Record; + Time: string; +}; + +export type Mutation = { + __typename?: 'Mutation'; + createTodo?: Maybe; +}; + + +export type MutationcreateTodoArgs = { + body: Scalars['String']; +}; + +export type Query = { + __typename?: 'Query'; + redwood?: Maybe; +}; + +export type Redwood = { + __typename?: 'Redwood'; + currentUser?: Maybe; + prismaVersion?: Maybe; + version?: Maybe; +}; + +export type Todo = { + __typename?: 'Todo'; + body: Scalars['String']; + id: Scalars['Int']; + status: Scalars['String']; +}; + +export type AddTodo_CreateTodo_CellVariables = Exact<{ + body: Scalars['String']; +}>; + + +export type AddTodo_CreateTodo_Cell = { __typename?: 'Mutation', createTodo?: { __typename?: 'Todo', id: number, body: string } | null }; diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/.redwood/schema.graphql b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/.redwood/schema.graphql new file mode 100644 index 000000000000..2fb83f8e2c30 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/.redwood/schema.graphql @@ -0,0 +1,25 @@ +scalar BigInt + +scalar Date + +scalar DateTime + +scalar JSON + +scalar JSONObject + +scalar Time + +type Mutation { + createTodo(body: String!): Todo +} + +type Query { + redwood: Redwood +} + +type Redwood { + currentUser: JSON + prismaVersion: String + version: String +} diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/redwood.toml b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/redwood.toml new file mode 100644 index 000000000000..efd2d2d4d26e --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/redwood.toml @@ -0,0 +1,2 @@ +[web] + port = 8910 diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/src/gql.js b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/src/gql.js new file mode 100644 index 000000000000..55c24dad4d1a --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/src/gql.js @@ -0,0 +1,8 @@ +export const CREATE_TODO_CELL = gql` + mutation AddTodo_CreateTodo_Cell($body: String!) { + createTodo(body: $body) { + id + task + } + } +` diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/types/graphql.d.ts b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/types/graphql.d.ts new file mode 100644 index 000000000000..2ceabf283616 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/missingType/web/types/graphql.d.ts @@ -0,0 +1,55 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigInt: number; + Date: string; + DateTime: string; + JSON: Record; + JSONObject: Record; + Time: string; +}; + +export type Mutation = { + __typename?: 'Mutation'; + createTodo?: Maybe; +}; + + +export type MutationcreateTodoArgs = { + body: Scalars['String']; +}; + +export type Query = { + __typename?: 'Query'; + redwood?: Maybe; +}; + +export type Redwood = { + __typename?: 'Redwood'; + currentUser?: Maybe; + prismaVersion?: Maybe; + version?: Maybe; +}; + +export type Todo = { + __typename?: 'Todo'; + body: Scalars['String']; + id: Scalars['Int']; + status: Scalars['String']; +}; + +export type AddTodo_CreateTodo_CellVariables = Exact<{ + body: Scalars['String']; +}>; + + +export type AddTodo_CreateTodo_Cell = { __typename?: 'Mutation', createTodo?: { __typename?: 'Todo', id: number, body: string } | null }; diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/.redwood/schema.graphql b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/.redwood/schema.graphql new file mode 100644 index 000000000000..0c301b6ddb26 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/.redwood/schema.graphql @@ -0,0 +1,31 @@ +scalar BigInt + +scalar Date + +scalar DateTime + +scalar JSON + +scalar JSONObject + +scalar Time + +type Mutation { + createTodo(body: String!): Todo +} + +type Query { + redwood: Redwood +} + +type Redwood { + currentUser: JSON + prismaVersion: String + version: String +} + +type Todo { + id: String! + task: String! + # done: Boolean +} diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/redwood.toml b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/redwood.toml new file mode 100644 index 000000000000..efd2d2d4d26e --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/redwood.toml @@ -0,0 +1,2 @@ +[web] + port = 8910 diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/src/gql.js b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/src/gql.js new file mode 100644 index 000000000000..e3cfc20f9f88 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/src/gql.js @@ -0,0 +1,9 @@ +export const CREATE_TODO_CELL = gql` + mutation AddTodo_CreateTodo_Cell($body: String!) { + createTodo(body: $body) { + id + task + done + } + } +` diff --git a/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/types/graphql.d.ts b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/types/graphql.d.ts new file mode 100644 index 000000000000..4a71a5000587 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/typeDefinitions/nonExistingField/web/types/graphql.d.ts @@ -0,0 +1,55 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigInt: number; + Date: string; + DateTime: string; + JSON: Record; + JSONObject: Record; + Time: string; +}; + +export type Mutation = { + __typename?: 'Mutation'; + createTodo?: Maybe; +}; + + +export type MutationcreateTodoArgs = { + body: Scalars['String']; +}; + +export type Query = { + __typename?: 'Query'; + redwood?: Maybe; +}; + +export type Redwood = { + __typename?: 'Redwood'; + currentUser?: Maybe; + prismaVersion?: Maybe; + version?: Maybe; +}; + +export type Todo = { + __typename?: 'Todo'; + done?: Maybe; + id: Scalars['String']; + task: Scalars['String']; +}; + +export type AddTodo_CreateTodo_CellVariables = Exact<{ + body: Scalars['String']; +}>; + + +export type AddTodo_CreateTodo_Cell = { __typename?: 'Mutation', createTodo?: { __typename?: 'Todo', id: string, task: string, done?: boolean | null } | null }; diff --git a/packages/internal/src/__tests__/fixtures/web/types/graphql.d.ts b/packages/internal/src/__tests__/fixtures/web/types/graphql.d.ts new file mode 100644 index 000000000000..2ceabf283616 --- /dev/null +++ b/packages/internal/src/__tests__/fixtures/web/types/graphql.d.ts @@ -0,0 +1,55 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigInt: number; + Date: string; + DateTime: string; + JSON: Record; + JSONObject: Record; + Time: string; +}; + +export type Mutation = { + __typename?: 'Mutation'; + createTodo?: Maybe; +}; + + +export type MutationcreateTodoArgs = { + body: Scalars['String']; +}; + +export type Query = { + __typename?: 'Query'; + redwood?: Maybe; +}; + +export type Redwood = { + __typename?: 'Redwood'; + currentUser?: Maybe; + prismaVersion?: Maybe; + version?: Maybe; +}; + +export type Todo = { + __typename?: 'Todo'; + body: Scalars['String']; + id: Scalars['Int']; + status: Scalars['String']; +}; + +export type AddTodo_CreateTodo_CellVariables = Exact<{ + body: Scalars['String']; +}>; + + +export type AddTodo_CreateTodo_Cell = { __typename?: 'Mutation', createTodo?: { __typename?: 'Todo', id: number, body: string } | null }; diff --git a/packages/internal/src/__tests__/typeDefinitions.test.ts b/packages/internal/src/__tests__/typeDefinitions.test.ts index 682ad3aa9add..949c97adb885 100644 --- a/packages/internal/src/__tests__/typeDefinitions.test.ts +++ b/packages/internal/src/__tests__/typeDefinitions.test.ts @@ -250,3 +250,72 @@ test("Doesn't throw or print any errors with empty project", async () => { delete process.env.RWJS_CWD } }) + +test("Doesn't swallow legit errors - invalidQueryType", async () => { + const fixturePath = path.resolve( + __dirname, + './fixtures/typeDefinitions/invalidQueryType' + ) + process.env.RWJS_CWD = fixturePath + const oldConsoleError = console.error + console.error = jest.fn() + + await generateTypeDefGraphQLWeb({ logErrors: true }) + + try { + expect(console.error).toHaveBeenCalledWith( + expect.objectContaining({ + message: expect.stringMatching(/field.*softKitten.*Query/), + }) + ) + } finally { + console.error = oldConsoleError + delete process.env.RWJS_CWD + } +}) + +test("Doesn't swallow legit errors - missingType", async () => { + const fixturePath = path.resolve( + __dirname, + './fixtures/typeDefinitions/missingType' + ) + process.env.RWJS_CWD = fixturePath + const oldConsoleError = console.error + console.error = jest.fn() + + await generateTypeDefGraphQLWeb({ logErrors: true }) + + try { + expect(console.error).toHaveBeenCalledWith( + expect.objectContaining({ + message: expect.stringMatching(/Unknown type.*Todo/), + }) + ) + } finally { + console.error = oldConsoleError + delete process.env.RWJS_CWD + } +}) + +test("Doesn't swallow legit errors - nonExistingField", async () => { + const fixturePath = path.resolve( + __dirname, + './fixtures/typeDefinitions/nonExistingField' + ) + process.env.RWJS_CWD = fixturePath + const oldConsoleError = console.error + console.error = jest.fn() + + await generateTypeDefGraphQLWeb({ logErrors: true }) + + try { + expect(console.error).toHaveBeenCalledWith( + expect.objectContaining({ + message: expect.stringMatching(/field.*done.*Todo/), + }) + ) + } finally { + console.error = oldConsoleError + delete process.env.RWJS_CWD + } +}) diff --git a/packages/internal/src/generate/typeDefinitions.ts b/packages/internal/src/generate/typeDefinitions.ts index 71c7dda21e6c..0c198abb17af 100644 --- a/packages/internal/src/generate/typeDefinitions.ts +++ b/packages/internal/src/generate/typeDefinitions.ts @@ -217,7 +217,7 @@ export const generateTypeDefGraphQLApi = async () => { } } -function generateLoadTypedefsConfig( +function getLoadDocumentsOptions( generates: Record< string, CodegenTypes.ConfiguredOutput | CodegenTypes.ConfiguredPlugin[] @@ -251,7 +251,7 @@ function generateLoadTypedefsConfig( return loadTypedefsConfig } -function generateCodegenConfig( +function getCodegenInput( generates: Record< string, CodegenTypes.ConfiguredOutput | CodegenTypes.ConfiguredPlugin[] @@ -287,7 +287,12 @@ function generateCodegenConfig( return codegenConfig } -export const generateTypeDefGraphQLWeb = async () => { +interface Args { + /** used for tests */ + logErrors?: boolean | undefined +} + +export const generateTypeDefGraphQLWeb = async ({ logErrors }: Args = {}) => { const rwjsPaths = getPaths() const documentsGlob = './web/src/**/!(*.d).{ts,tsx,js,jsx}' @@ -305,7 +310,7 @@ export const generateTypeDefGraphQLWeb = async () => { }, } - const options = generateLoadTypedefsConfig(generates) + const options = getLoadDocumentsOptions(generates) try { await loadDocuments([documentsGlob], options) @@ -316,10 +321,15 @@ export const generateTypeDefGraphQLWeb = async () => { try { return await runCodegenGraphQL(generates) - } catch { + } catch (e) { console.error() console.error('Error: Could not generate GraphQL type definitions (web)') console.error() + + if (logErrors) { + console.error(e) + } + return [] } } @@ -347,7 +357,7 @@ const runCodegenGraphQL = async ( // https://www.graphql-code-generator.com/docs/getting-started/programmatic-usage#using-the-cli-instead-of-core const f: GenerateResponse = await generate( // Merge in user codegen config with the rw built-in one - { ...generateCodegenConfig(generates), ...userCodegenConfig?.config }, + { ...getCodegenInput(generates), ...userCodegenConfig?.config }, true ) return f.map(({ filename }) => filename)