diff --git a/.prettierignore b/.prettierignore index b867565a093..a8646a2bf02 100644 --- a/.prettierignore +++ b/.prettierignore @@ -38,4 +38,5 @@ packages/graphql-codegen-cli/tests/test-files/error-document.graphql # Ignore dev-tests with no prettier requirement dev-test/general/githunt-invalid/invalid.graphql dev-test/general/test-schema/flow-types.flow.js +dev-test/graphql-config/**/__generated__/ dev-test-apollo-tooling/src/__generated__/ diff --git a/dev-test/graphql-config/multi/.graphqlrc.yml b/dev-test/graphql-config/multi/.graphqlrc.yml new file mode 100644 index 00000000000..0feb7a1a716 --- /dev/null +++ b/dev-test/graphql-config/multi/.graphqlrc.yml @@ -0,0 +1,10 @@ +projects: + default: + schema: 'default/schema.graphql' + project1: + schema: 'project1/schema.graphql' + extensions: + codegen: + generates: + 'project1/__generated__/types.ts': + plugins: ['typescript'] diff --git a/dev-test/graphql-config/multi/default/schema.graphql b/dev-test/graphql-config/multi/default/schema.graphql new file mode 100644 index 00000000000..f5964388868 --- /dev/null +++ b/dev-test/graphql-config/multi/default/schema.graphql @@ -0,0 +1,3 @@ +type Query { + default: String +} diff --git a/dev-test/graphql-config/multi/project1/__generated__/types.ts b/dev-test/graphql-config/multi/project1/__generated__/types.ts new file mode 100644 index 00000000000..0920b543be9 --- /dev/null +++ b/dev-test/graphql-config/multi/project1/__generated__/types.ts @@ -0,0 +1,15 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } +}; + +export type Query = { + __typename?: 'Query'; + project1?: Maybe; +}; diff --git a/dev-test/graphql-config/multi/project1/schema.graphql b/dev-test/graphql-config/multi/project1/schema.graphql new file mode 100644 index 00000000000..9dc4569a976 --- /dev/null +++ b/dev-test/graphql-config/multi/project1/schema.graphql @@ -0,0 +1,3 @@ +type Query { + project1: String +} diff --git a/dev-test/graphql-config/package.json b/dev-test/graphql-config/package.json new file mode 100644 index 00000000000..7d44a816a19 --- /dev/null +++ b/dev-test/graphql-config/package.json @@ -0,0 +1,21 @@ +{ + "name": "dev-test-graphql-config", + "version": "0.0.1", + "description": "Test graphql-config integration", + "private": true, + "scripts": { + "generate": "pnpm generate:esm", + "generate:cjs": "pnpm generate:cjs:single && pnpm generate:cjs:multi && pnpm generate:cjs:multi:project1", + "generate:cjs:multi": "node ../../packages/graphql-codegen-cli/dist/cjs/bin.js --config multi/.graphqlrc.yml || [ $? -eq 1 ]", + "generate:cjs:multi:project1": "node ../../packages/graphql-codegen-cli/dist/cjs/bin.js --config multi/.graphqlrc.yml --project project1", + "generate:cjs:single": "node ../../packages/graphql-codegen-cli/dist/cjs/bin.js --config single/.graphqlrc.yml", + "generate:esm": "pnpm generate:esm:single && pnpm generate:esm:multi && pnpm generate:esm:multi:project1", + "generate:esm:multi": "node ../../packages/graphql-codegen-cli/dist/esm/bin.js --config multi/.graphqlrc.yml || [ $? -eq 1 ]", + "generate:esm:multi:project1": "node ../../packages/graphql-codegen-cli/dist/esm/bin.js --config multi/.graphqlrc.yml --project project1", + "generate:esm:single": "node ../../packages/graphql-codegen-cli/dist/esm/bin.js --config single/.graphqlrc.yml" + }, + "devDependencies": { + "@graphql-codegen/cli": "workspace:*", + "@graphql-codegen/typescript": "workspace:*" + } +} diff --git a/dev-test/graphql-config/single/.graphqlrc.yml b/dev-test/graphql-config/single/.graphqlrc.yml new file mode 100644 index 00000000000..1997407a4b5 --- /dev/null +++ b/dev-test/graphql-config/single/.graphqlrc.yml @@ -0,0 +1,6 @@ +schema: 'schema.graphql' +extensions: + codegen: + generates: + '__generated__/types.ts': + plugins: ['typescript'] diff --git a/dev-test/graphql-config/single/__generated__/types.ts b/dev-test/graphql-config/single/__generated__/types.ts new file mode 100644 index 00000000000..e1e6a8ca0c3 --- /dev/null +++ b/dev-test/graphql-config/single/__generated__/types.ts @@ -0,0 +1,15 @@ +export type Maybe = T | null; +export type InputMaybe = Maybe; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } +}; + +export type Query = { + __typename?: 'Query'; + single?: Maybe; +}; diff --git a/dev-test/graphql-config/single/schema.graphql b/dev-test/graphql-config/single/schema.graphql new file mode 100644 index 00000000000..64b40ac8e75 --- /dev/null +++ b/dev-test/graphql-config/single/schema.graphql @@ -0,0 +1,3 @@ +type Query { + single: String +} diff --git a/packages/graphql-codegen-cli/CHANGELOG.md b/packages/graphql-codegen-cli/CHANGELOG.md index 2822294da40..16714c20fc6 100644 --- a/packages/graphql-codegen-cli/CHANGELOG.md +++ b/packages/graphql-codegen-cli/CHANGELOG.md @@ -1,5 +1,35 @@ # @graphql-codegen/cli +## 7.1.3 + +### Patch Changes + +- [#10335](https://github.com/dotansimha/graphql-code-generator/pull/10335) + [`3280ace`](https://github.com/dotansimha/graphql-code-generator/commit/3280ace4505dcadf5398b6cbf157a8c8d7a713c2) + Thanks [@Diluka](https://github.com/Diluka)! - Fix graphql-config loading order to correctly + detect codegen projects + + Previously, a `graphql-config` file like this failed: + + ```yml + projects: + default: + schema: 'default/schema.graphql' + project1: + schema: 'project1/schema.graphql' + extensions: + codegen: + generates: + 'project1/__generated__/types.ts': + plugins: ['typescript'] + ``` + + This is because the `default` project doesn't have a `codegen` extension, which caused previous + logic to short circuit before reading `project1`'s config. + + The fix reads every named project first, before reading the `default` project to exhaustively go + through every single project. + ## 7.1.2 ### Patch Changes diff --git a/packages/graphql-codegen-cli/package.json b/packages/graphql-codegen-cli/package.json index b14ed8fc034..1698e6b2a4e 100644 --- a/packages/graphql-codegen-cli/package.json +++ b/packages/graphql-codegen-cli/package.json @@ -1,6 +1,6 @@ { "name": "@graphql-codegen/cli", - "version": "7.1.2", + "version": "7.1.3", "type": "module", "repository": { "type": "git", diff --git a/packages/graphql-codegen-cli/src/graphql-config.ts b/packages/graphql-codegen-cli/src/graphql-config.ts index 2701f108743..89ee75bb67d 100644 --- a/packages/graphql-codegen-cli/src/graphql-config.ts +++ b/packages/graphql-codegen-cli/src/graphql-config.ts @@ -53,10 +53,6 @@ function isGraphQLConfig(config: GraphQLConfig): config is GraphQLConfig { return false; } - try { - return config.getDefault().hasExtension('codegen'); - } catch {} - try { for (const projectName in config.projects) { if (Object.prototype.hasOwnProperty.call(config.projects, projectName)) { @@ -69,5 +65,9 @@ function isGraphQLConfig(config: GraphQLConfig): config is GraphQLConfig { } } catch {} + try { + return config.getDefault().hasExtension('codegen'); + } catch {} + return false; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 678cabf1c39..a484b874f14 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -189,6 +189,15 @@ importers: specifier: workspace:* version: link:../../packages/plugins/typescript/resolvers/dist + dev-test/graphql-config: + devDependencies: + '@graphql-codegen/cli': + specifier: workspace:* + version: link:../../packages/graphql-codegen-cli/dist + '@graphql-codegen/typescript': + specifier: workspace:* + version: link:../../packages/plugins/typescript/typescript/dist + examples/persisted-documents: dependencies: '@graphql-yoga/plugin-persisted-operations':