Releases: dotansimha/graphql-code-generator
June 01, 2023
@graphql-codegen/[email protected]
Patch Changes
-
#9479
0aa444b5dThanks @gilgardosh! - dependencies updates:- Updated dependency
graphql-config@^5.0.2↗︎ (from^5.0.1, independencies)
- Updated dependency
-
#9479
0aa444b5dThanks @gilgardosh! - Update graphql-config to v^5.0.2
May 24, 2023
@graphql-codegen/[email protected]
Major Changes
Patch Changes
-
#9449
4d9ea1a5aThanks @n1ru4l! - dependencies updates:- Updated dependency
graphql-config@^5.0.0↗︎ (from^4.5.0, independencies)
- Updated dependency
-
#9449
4d9ea1a5aThanks @n1ru4l! - dependencies updates:- Updated dependency
@graphql-tools/apollo-engine-loader@^8.0.0↗︎ (from^7.3.6, independencies) - Updated dependency
@graphql-tools/code-file-loader@^8.0.0↗︎ (from^7.3.17, independencies) - Updated dependency
@graphql-tools/git-loader@^8.0.0↗︎ (from^7.2.13, independencies) - Updated dependency
@graphql-tools/github-loader@^8.0.0↗︎ (from^7.3.28, independencies) - Updated dependency
@graphql-tools/graphql-file-loader@^8.0.0↗︎ (from^7.5.0, independencies) - Updated dependency
@graphql-tools/json-file-loader@^8.0.0↗︎ (from^7.4.1, independencies) - Updated dependency
@graphql-tools/load@^8.0.0↗︎ (from^7.8.0, independencies) - Updated dependency
@graphql-tools/prisma-loader@^8.0.0↗︎ (from^7.2.69, independencies) - Updated dependency
@graphql-tools/url-loader@^8.0.0↗︎ (from^7.17.17, independencies) - Updated dependency
@graphql-tools/utils@^10.0.0↗︎ (from^9.0.0, independencies) - Updated dependency
cosmiconfig@^8.1.3↗︎ (from^7.0.0, independencies) - Updated dependency
graphql-config@^5.0.1↗︎ (from^4.5.0, independencies)
- Updated dependency
-
#9371
d431f426eThanks @Axxxx0n! - Fixed option ignoreNoDocuments when using graphql configs -
#9275
2a5da5894Thanks @milesrichardson! - Trigger rebuilds in watch mode while respecting rules of precedence and negation, both in terms of global (top-level) config vs. local (per-output target) config, and in terms of watch patterns (higher priority) vs. documents/schemas (lower priority). This fixes an issue with overly-aggressive rebuilds during watch mode. -
Updated dependencies [
4d9ea1a5a,4d9ea1a5a,f46803a8c,63827fabe,bb66c2a31]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- #9449
4d9ea1a5aThanks @n1ru4l! - dependencies updates:- Updated dependency
@graphql-tools/schema@^10.0.0↗︎ (from^9.0.0, independencies) - Updated dependency
@graphql-tools/utils@^10.0.0↗︎ (from^9.1.1, independencies)
- Updated dependency
- Updated dependencies [
4d9ea1a5a,f46803a8c,63827fabe,bb66c2a31]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
4d9ea1a5a,f46803a8c,63827fabe,bb66c2a31]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
4d9ea1a5a,f46803a8c,63827fabe,bb66c2a31]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
4d9ea1a5a,4d9ea1a5a,f46803a8c,3848a2b73,ba84a3a27,63827fabe,50471e651,5aa95aa96,ca02ad172,e1dc75f3c,bb66c2a31,5950f5a68,5aa95aa96]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- #9449 [
4d9ea1a5a](https://gi...
April 22, 2023
@graphql-codegen/[email protected]
Patch Changes
-
#9267
183749346Thanks @milesrichardson! - Fix watch mode to listen to longest common directory prefix of relevant files, rather than only files below the current working directory (fixes #9266). -
#9280
ca1d72c40Thanks @saihaj! - fix the default output directory for init command
@graphql-codegen/[email protected]
Patch Changes
-
#9301
386cf9044Thanks @wassim-k! - Fix fragment imports for near-operation-file with graphQLTag -
#9231
402cb8ac0Thanks @eddeee888! - Implement resolversNonOptionalTypename for mapper cases
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
-
#9231
402cb8ac0Thanks @eddeee888! - Implement resolversNonOptionalTypename for mapper cases -
Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
386cf9044,402cb8ac0]:- @graphql-codegen/[email protected]
April 04, 2023
@graphql-codegen/[email protected]
Minor Changes
-
#9151
b7dacb21fThanks @eddeee888! - AddwatchPatternconfig option forgeneratessections.By default,
watchmode automatically watches all GraphQL schema and document files. This means when a change is detected, Codegen CLI is run.A user may want to run Codegen CLI when non-schema and non-document files are changed. Each
generatessection now has awatchPatternoption to allow more file patterns to be added to the list of patterns to watch.In the example below, mappers are exported from
schema.mappers.tsfiles. We want to re-run Codegen if the content of*.mappers.tsfiles change because they change the generated types file. To solve this, we can add mapper file patterns to watch using the glob pattern used for schema and document files.// codegen.ts const config: CodegenConfig = { schema: 'src/schema/**/*.graphql', generates: { 'src/schema/types.ts': { plugins: ['typescript', 'typescript-resolvers'], config: { mappers: { User: './user/schema.mappers#UserMapper', Book: './book/schema.mappers#BookMapper', }, } watchPattern: 'src/schema/**/*.mappers.ts', // Watches mapper files in `watch` mode. Use an array for multiple patterns e.g. `['src/*.pattern1.ts','src/*.pattern2.ts']` }, }, };
Then, run Codegen CLI in
watchmode:yarn graphql-codegen --watch
Now, updating
*.mappers.tsfiles re-runs Codegen! 🎉Note:
watchPatternis only used inwatchmode i.e. running CLI with--watchflag.
Patch Changes
- Updated dependencies [
b7dacb21f,f104619ac]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Minor Changes
-
#9146
9f4d9c5a4Thanks @eddeee888! - [typescript-resolvers] AddresolversNonOptionalTypenameconfig option.This is extending on
ResolversUnionTypesimplemented in #9069resolversNonOptionalTypenameadds non-optional__typenameto union members ofResolversUnionTypes, without affecting the union members' base intefaces.A common use case for non-optional
__typenameof union members is using it as the common field to work out the final schema type. This makes implementing the union's__resolveTypevery simple as we can use__typenameto 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__resolveTypeimplementation:// 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-resolversplugin 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 }` }, }, }, };
Patch Changes
-
#9206
e56790104Thanks @eddeee888! - FixResolversUnionTypesbeing used inResolversParentTypesPreviously, objects with mappable fields are converted to Omit format that references its own type group or
ResolversTypesorResolversParentTypese.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
ResolversUnionParentTypesthat is referenced byResolversParentTypesto 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']; };
-
#9194
acb647e4eThanks @dstaley! - Don't emit import statements for unused fragments -
Updated dependencies [
b7dacb21f,f104619ac]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
March 07, 2023
@graphql-cli/[email protected]
Patch Changes
- Updated dependencies [
a34cef35b,a34cef35b]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
-
#9086
a34cef35bThanks @beerose! - dependencies updates:- Updated dependency
graphql-config@^4.5.0↗︎ (from^4.4.0, independencies) - Added dependency
jiti@^1.17.1↗︎ (todependencies) - Removed dependency
cosmiconfig-typescript-loader@^4.3.0↗︎ (fromdependencies) - Removed dependency
ts-node@^10.9.1↗︎ (fromdependencies)
- Updated dependency
-
#9086
a34cef35bThanks @beerose! - Supportcodegen.tsin ESM projects
@graphql-codegen/[email protected]
Patch Changes
-
#9110
ba0610bbdThanks @gilgardosh! - Custom mappers with placeholder will apply omit -
#9069
4b49f6fbeThanks @eddeee888! - Extract union types to ResolversUnionTypes -
#8895
b343626c9Thanks @benkroeger! - Preserve .js extension when importDocumentNodeExternallyFrom and emitLegacyCommonJSImports is false
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
-
#9110
ba0610bbdThanks @gilgardosh! - Custom mappers with placeholder will apply omit -
#9069
4b49f6fbeThanks @eddeee888! - Extract union types to ResolversUnionTypes -
Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- #9049
9430c3811Thanks @renovate! - dependencies updates:- Updated dependency
@graphql-typed-document-node/[email protected]↗︎ (from3.1.1, independencies)
- Updated dependency
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
- Updated dependencies [
ba0610bbd,4b49f6fbe,b343626c9]:- @graphql-codegen/[email protected]
February 23, 2023
@graphql-cli/[email protected]
Patch Changes
- Updated dependencies [
f7313f7ca,f7313f7ca]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Patch Changes
February 22, 2023
@graphql-cli/[email protected]
Patch Changes
- Updated dependencies [
288ed0977,288ed0977]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Minor Changes
Patch Changes
- #9009
288ed0977Thanks @saihaj! - dependencies updates:- Added dependency
@parcel/watcher@^2.1.0↗︎ (todependencies) - Removed dependency
chokidar@^3.5.2↗︎ (fromdependencies)
- Added dependency
February 21, 2023
@graphql-codegen/[email protected]
Minor Changes
-
#8893
a118c307aThanks @n1ru4l! - It is no longer mandatory to declare an empty plugins array when using a preset -
#8723
a3309e63eThanks @kazekyo! - Introduce a new feature called DocumentTransform.DocumentTransform is a functionality that allows you to modify
documentsbefore they are processed by plugins. You can use functions passed to thedocumentTransformsoption to make changes to GraphQL documents.To use this feature, you can write
documentTransformsas follows:import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { schema: 'https://localhost:4000/graphql', documents: ['src/**/*.tsx'], generates: { './src/gql/': { preset: 'client', documentTransforms: [ { transform: ({ documents }) => { // Make some changes to the documents return documents; }, }, ], }, }, }; export default config;
For instance, to remove a
@localOnlyDirectivedirective fromdocuments, you can write the following code:import type { CodegenConfig } from '@graphql-codegen/cli'; import { visit } from 'graphql'; const config: CodegenConfig = { schema: 'https://localhost:4000/graphql', documents: ['src/**/*.tsx'], generates: { './src/gql/': { preset: 'client', documentTransforms: [ { transform: ({ documents }) => { return documents.map(documentFile => { documentFile.document = visit(documentFile.document, { Directive: { leave(node) { if (node.name.value === 'localOnlyDirective') return null; }, }, }); return documentFile; }); }, }, ], }, }, }; export default config;
DocumentTransform can also be specified by file name. You can create a custom file for a specific transformation and pass it to
documentTransforms.Let's create the document transform as a file:
module.exports = { transform: ({ documents }) => { // Make some changes to the documents return documents; }, };
Then, you can specify the file name as follows:
import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { schema: 'https://localhost:4000/graphql', documents: ['src/**/*.tsx'], generates: { './src/gql/': { preset: 'client', documentTransforms: ['./my-document-transform.js'], }, }, }; export default config;
Patch Changes
- #9000
4c422ccf6Thanks @renovate! - dependencies updates:- Updated dependency
@whatwg-node/fetch@^0.8.0↗︎ (from^0.6.0, independencies)
- Updated dependency
- Updated dependencies [
8206b268d,8206b268d,a118c307a,a3309e63e]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Minor Changes
-
#8723
a3309e63eThanks @kazekyo! - Introduce a new feature called DocumentTransform.DocumentTransform is a functionality that allows you to modify
documentsbefore they are processed by plugins. You can use functions passed to thedocumentTransformsoption to make changes to GraphQL documents.To use this feature, you can write
documentTransformsas follows:import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { schema: 'https://localhost:4000/graphql', documents: ['src/**/*.tsx'], generates: { './src/gql/': { preset: 'client', documentTransforms: [ { transform: ({ documents }) => { // Make some changes to the documents return documents; }, }, ], }, }, }; export default config;
For instance, to remove a
@localOnlyDirectivedirective fromdocuments, you can write the following code:import type { CodegenConfig } from '@graphql-codegen/cli'; import { visit } from 'graphql'; const config: CodegenConfig = { schema: 'https://localhost:4000/graphql', documents: ['src/**/*.tsx'], generates: { './src/gql/': { preset: 'client', documentTransforms: [ { transform: ({ documents }) => { return documents.map(documentFile => { documentFile.document = visit(documentFile.document, { Directive: { leave(node) { if (node.name.value === 'localOnlyDirective') return null; }, }, }); return documentFile; }); }, }, ], }, }, }; export default config;
DocumentTransform can also be specified by file name. You can create a custom file for a specific transformation and pass it to
documentTransforms.Let's create the document transform as a file:
module.exports = { transform: ({ documents }) => { // Make some changes to the documents return documents; }, };
Then, you can specify the file name as follows:
import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { schema: 'https://localhost:4000/graphql', documents: ['src/**/*.tsx'], generates: { './src/gql/': { preset: 'client', documentTransforms: ['./my-document-transform.js'], }, }, }; export default config;
Patch Changes
- #8879
8206b268dThanks @renovate! - dependencies updates:- Updated dependency
tslib@~2.5.0↗︎ (from~2.4.0, independencies)
- Updated dependency
- Updated dependencies [
8206b268d,a118c307a,a3309e63e]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Minor Changes
- #8853
b13aa7449Thanks @KGAdamCook! - Updated customResolveInfo to use the correct importType for external imports
Patch Changes
February 03, 2023
@graphql-cli/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
321d5112e,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
-
#8883
321d5112eThanks @Solo-steven! - Fix PluckConfig overwrite problem. -
Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
-
Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
-
Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
- Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
Patch Changes
-
Updated dependencies [
fc79b65d4,fd0b0c813]:- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
- @graphql-codegen/[email protected]
@graphql-codegen/[email protected]
Major Changes
January 30, 2023
@graphql-codegen/[email protected]
Patch Changes
- #8836
4fa0a566eThanks @renovate! - dependencies updates:- Updated dependency
[email protected]↗︎ (from13.2.9, independencies)
- Updated dependency