- Updated dependencies [
53f270a
]:- @graphql-codegen/visitor-plugin-common@5.0.0
-
Updated dependencies [
4e69568
]:- @graphql-codegen/visitor-plugin-common@4.1.2
- @graphql-codegen/schema-ast@4.0.2
- @graphql-codegen/plugin-helpers@5.0.3
- Updated dependencies [
7718a8113
]:- @graphql-codegen/visitor-plugin-common@4.1.1
- #9811
d8364e045
Thanks @saihaj! - dependencies updates:- Updated dependency
tslib@~2.6.0
↗︎ (from~2.5.0
, independencies
)
- Updated dependency
- Updated dependencies [
d8364e045
,d8364e045
,d8364e045
,d8364e045
,d8364e045
]:- @graphql-codegen/plugin-helpers@5.0.2
- @graphql-codegen/schema-ast@4.0.1
- @graphql-codegen/visitor-plugin-common@4.1.0
-
#9497
2276708d0
Thanks @eddeee888! - Revert default ID scalar input type to stringWe changed the ID Scalar input type from
string
tostring | number
in the latest major version oftypescript
plugin. This causes issues for server plugins (e.g. typescript-resolvers) that depends ontypescript
plugin. This is because the scalar type needs to be manually inverted on setup which is confusing. -
Updated dependencies [
2276708d0
]:- @graphql-codegen/visitor-plugin-common@4.0.1
-
#9375
ba84a3a27
Thanks @eddeee888! - Implement Scalars with input/output typesIn GraphQL, Scalar types can be different for client and server. For example, given the native GraphQL ID:
- A client may send
string
ornumber
in the input - A client receives
string
in its selection set (i.e output) - A server receives
string
in the resolver (GraphQL parsesstring
ornumber
received from the client tostring
) - A server may return
string
ornumber
(GraphQL serializes the value tostring
before sending it to the client )
Currently, we represent every Scalar with only one type. This is what codegen generates as base type:
export type Scalars = { ID: string; };
Then, this is used in both input and output type e.g.
export type Book = { __typename?: 'Book'; id: Scalars['ID']; // Output's ID can be `string` 👍 }; export type QueryBookArgs = { id: Scalars['ID']; // Input's ID can be `string` or `number`. However, the type is only `string` here 👎 };
This PR extends each Scalar to have input and output:
export type Scalars = { ID: { input: string | number; output: string; }; };
Then, each input/output GraphQL type can correctly refer to the correct input/output scalar type:
export type Book = { __typename?: 'Book'; id: Scalars['ID']['output']; // Output's ID can be `string` 👍 }; export type QueryBookArgs = { id: Scalars['ID']['input']; // Input's ID can be `string` or `number` 👍 };
Note that for
typescript-resolvers
, the type of ID needs to be inverted. However, the referenced types in GraphQL input/output types should still work correctly:export type Scalars = { ID: { input: string; output: string | number; } } export type Book = { __typename?: "Book"; id: Scalars["ID"]['output']; // Resolvers can return `string` or `number` in ID fields 👍 }; export type QueryBookArgs = { id: Scalars["ID"]['input']; // Resolvers receive `string` in ID fields 👍 }; export type ResolversTypes = { ID: ID: ResolverTypeWrapper<Scalars['ID']['output']>; // Resolvers can return `string` or `number` in ID fields 👍 } export type ResolversParentTypes = { ID: Scalars['ID']['output']; // Resolvers receive `string` or `number` from parents 👍 };
Config changes:
- Scalars option can now take input/output types:
config: { scalars: { ID: { input: 'string', output: 'string | number' } } }
- If a string is given (instead of an object with input/output fields), it will be used as both input and output types:
config: { scalars: { ID: 'string'; // This means `string` will be used for both ID's input and output types } }
- BREAKING CHANGE: External module Scalar types need to be an object with input/output fields
config: { scalars: { ID: './path/to/scalar-module'; } }
If correctly, wired up, the following will be generated:
// Previously, imported `ID` type can be a primitive type, now it must be an object with input/output fields import { ID } from './path/to/scalar-module'; export type Scalars = { ID: { input: ID['input']; output: ID['output'] }; };
BREAKING CHANGE: This changes Scalar types which could be referenced in other plugins. If you are a plugin maintainer and reference Scalar, please update your plugin to use the correct input/output types.
- A client may send
-
bb66c2a31
Thanks @n1ru4l! - Require Node.js>= 16
. Drop support for Node.js 14
-
#9196
3848a2b73
Thanks @beerose! - Add@defer
directive supportWhen a query includes a deferred fragment field, the server will return a partial response with the non-deferred fields first, followed by the remaining fields once they have been resolved.
Once start using the
@defer
directive in your queries, the generated code will automatically include support for the directive.// src/index.tsx import { graphql } from './gql'; const OrdersFragment = graphql(` fragment OrdersFragment on User { orders { id total } } `); const GetUserQuery = graphql(` query GetUser($id: ID!) { user(id: $id) { id name ...OrdersFragment @defer } } `);
The generated type for
GetUserQuery
will have information that the fragment is incremental, meaning it may not be available right away.// gql/graphql.ts export type GetUserQuery = { __typename?: 'Query'; id: string; name: string } & ({ __typename?: 'Query'; } & { ' $fragmentRefs'?: { OrdersFragment: Incremental<OrdersFragment> }; });
Apart from generating code that includes support for the
@defer
directive, the Codegen also exports a utility function calledisFragmentReady
. You can use it to conditionally render components based on whether the data for a deferred fragment is available:const OrdersList = (props: { data: FragmentType<typeof OrdersFragment> }) => { const data = useFragment(OrdersFragment, props.data); return ( // render orders list ) }; function App() { const { data } = useQuery(GetUserQuery); return ( {data && ( <> {isFragmentReady(GetUserQuery, OrdersFragment, data) && <OrdersList data={data} />} </> )} ); } export default App;
-
#9304
e1dc75f3c
Thanks @esfomeado! - Added support for disabling suffixes on Enums.
- Updated dependencies [
4d9ea1a5a
,4d9ea1a5a
,4d9ea1a5a
,f46803a8c
,3848a2b73
,ba84a3a27
,63827fabe
,50471e651
,5aa95aa96
,ca02ad172
,e1dc75f3c
,bb66c2a31
,5950f5a68
,5aa95aa96
]:- @graphql-codegen/plugin-helpers@5.0.0
- @graphql-codegen/schema-ast@4.0.0
- @graphql-codegen/visitor-plugin-common@4.0.0
-
#9150
92d86b009
Thanks @rliljest! - Properly escape enum identifiers when enumsAsConst is used -
Updated dependencies [
e56790104
,b7dacb21f
,f104619ac
,acb647e4e
,9f4d9c5a4
]:- @graphql-codegen/visitor-plugin-common@3.1.0
- @graphql-codegen/plugin-helpers@4.2.0
- Updated dependencies [
ba0610bbd
,4b49f6fbe
,b343626c9
]:- @graphql-codegen/visitor-plugin-common@3.0.2
- #8879
8206b268d
Thanks @renovate! - dependencies updates:- Updated dependency
tslib@~2.5.0
↗︎ (from~2.4.0
, independencies
)
- Updated dependency
- Updated dependencies [
8206b268d
,8206b268d
,8206b268d
,a118c307a
,6b6fe3cbc
,a3309e63e
]:- @graphql-codegen/plugin-helpers@4.1.0
- @graphql-codegen/schema-ast@3.0.1
- @graphql-codegen/visitor-plugin-common@3.0.1
- Updated dependencies [
fc79b65d4
,fd0b0c813
]:- @graphql-codegen/visitor-plugin-common@3.0.0
- @graphql-codegen/plugin-helpers@4.0.0
- @graphql-codegen/schema-ast@3.0.0
- Updated dependencies [
a98198524
]:- @graphql-codegen/visitor-plugin-common@2.13.8
- Updated dependencies [
eb454d06c
]:- @graphql-codegen/visitor-plugin-common@2.13.7
- Updated dependencies [
ed87c782b
,ed87c782b
,ed87c782b
,6c6b6f2df
]:- @graphql-codegen/plugin-helpers@3.1.2
- @graphql-codegen/schema-ast@2.6.1
- @graphql-codegen/visitor-plugin-common@2.13.6
-
46f75304a
Thanks @saihaj! - fix the version of@graphql-codegen/plugin-helpers@3.1.1
-
Updated dependencies [
fedd71cbb
,307a5d350
,46f75304a
]:- @graphql-codegen/schema-ast@2.6.0
- @graphql-codegen/plugin-helpers@3.1.1
- @graphql-codegen/visitor-plugin-common@2.13.5
- Updated dependencies [
a6c2097f4
,a6c2097f4
,f79a00e8a
,c802a0c0b
]:- @graphql-codegen/plugin-helpers@3.0.0
- @graphql-codegen/visitor-plugin-common@2.13.4
- @graphql-codegen/schema-ast@2.5.2
- Updated dependencies [
62f655452
]:- @graphql-codegen/visitor-plugin-common@2.13.3
-
#8586
ef4c2c9c2
Thanks @levrik! - Fix incompatibility between@oneOf
input types and declaration kind other thantype
-
Updated dependencies [
ef4c2c9c2
]:- @graphql-codegen/visitor-plugin-common@2.13.2
- Updated dependencies [
63dc8f205
]:- @graphql-codegen/visitor-plugin-common@2.13.1
- @graphql-codegen/plugin-helpers@2.7.2
- #8390
12ecbe067
Thanks @Diizzayy! - handle undefined namedType when including introspection type definitions
- Updated dependencies [
a46b8d99c
]:- @graphql-codegen/visitor-plugin-common@2.13.0
- Updated dependencies [
1bd7f771c
]:- @graphql-codegen/visitor-plugin-common@2.12.2
-
#8189
b408f8238
Thanks @n1ru4l! - Fix CommonJS TypeScript resolution withmoduleResolution
node16
ornodenext
-
Updated dependencies [
b408f8238
,47d0a57e2
]:- @graphql-codegen/schema-ast@2.5.1
- @graphql-codegen/visitor-plugin-common@2.12.1
- @graphql-codegen/plugin-helpers@2.6.2
- Updated dependencies [2cbcbb371]
- @graphql-codegen/visitor-plugin-common@2.12.0
- @graphql-codegen/plugin-helpers@2.6.0
- Updated dependencies [525ad580b]
- @graphql-codegen/visitor-plugin-common@2.11.1
-
d84afec09: Support TypeScript ESM modules (
"module": "node16"
and"moduleResolution": "node16"
).
- Updated dependencies [68bb30e19]
- Updated dependencies [d84afec09]
- Updated dependencies [a4fe5006b]
- Updated dependencies [8e44df58b]
- @graphql-codegen/visitor-plugin-common@2.11.0
- @graphql-codegen/schema-ast@2.5.0
- @graphql-codegen/plugin-helpers@2.5.0
- aa1e6eafd: Add @Deprecated support for input
- 8b10f22be: Ensure falsy enum values are still mapped
- Updated dependencies [aa1e6eafd]
- Updated dependencies [a42fcbfe4]
- Updated dependencies [8b10f22be]
- @graphql-codegen/visitor-plugin-common@2.10.0
- Updated dependencies [d16bebacb]
- @graphql-codegen/visitor-plugin-common@2.9.1
- c3d7b7226: support the
@oneOf
directive on input types.
- Updated dependencies [c3d7b7226]
- @graphql-codegen/visitor-plugin-common@2.9.0
- Updated dependencies [f1fb77bd4]
- @graphql-codegen/visitor-plugin-common@2.8.0
- 9a5f31cb6: New option
onlyEnums
for Typescript - Updated dependencies [9a5f31cb6]
- @graphql-codegen/visitor-plugin-common@2.7.6
- Updated dependencies [2966686e9]
- @graphql-codegen/visitor-plugin-common@2.7.5
- Updated dependencies [337fd4f77]
- @graphql-codegen/visitor-plugin-common@2.7.4
- 54718c039: Improve @Deprecated Enum Type developer experience
- Updated dependencies [54718c039]
- @graphql-codegen/visitor-plugin-common@2.7.3
- Updated dependencies [11d05e361]
- @graphql-codegen/visitor-plugin-common@2.7.2
- Updated dependencies [fd55e2039]
- @graphql-codegen/visitor-plugin-common@2.7.1
- Updated dependencies [1479233df]
- @graphql-codegen/visitor-plugin-common@2.7.0
- Updated dependencies [c8ef37ae0]
- Updated dependencies [754a33715]
- Updated dependencies [bef4376d5]
- Updated dependencies [be7cb3a82]
- @graphql-codegen/visitor-plugin-common@2.6.0
- @graphql-codegen/plugin-helpers@2.4.0
- 6002feb3d: Fix exports in package.json files for react-native projects
- Updated dependencies [6002feb3d]
- @graphql-codegen/schema-ast@2.4.1
- @graphql-codegen/visitor-plugin-common@2.5.2
- @graphql-codegen/plugin-helpers@2.3.2
- Updated dependencies [a9f1f1594]
- Updated dependencies [9ea6621ec]
- @graphql-codegen/visitor-plugin-common@2.5.1
- 4c5c84c1b: Added InputMaybe, a different type of Maybe type for input/arguments
- 6c898efe5: list all dependencies used by the package in the package.json
- Updated dependencies [f3833243d]
- Updated dependencies [6c898efe5]
- @graphql-codegen/schema-ast@2.4.0
- 97ddb487a: feat: GraphQL v16 compatibility
- Updated dependencies [97ddb487a]
- @graphql-codegen/visitor-plugin-common@2.5.0
- @graphql-codegen/plugin-helpers@2.3.0
- Updated dependencies [ad02cb9b8]
- @graphql-codegen/visitor-plugin-common@2.4.0
- Updated dependencies [b9e85adae]
- Updated dependencies [7c60e5acc]
- Updated dependencies [3c2c847be]
- @graphql-codegen/visitor-plugin-common@2.3.0
- @graphql-codegen/plugin-helpers@2.2.0
- Updated dependencies [0b090e31a]
- @graphql-codegen/visitor-plugin-common@2.2.1
- cfa0a8f80: Apply missing namingConvention when numericEnums is used
-
d6c2d4c09: Allow declaring Argument and InputType field mappings based on directive annotations.
WARNING: Using this option does only change the type definitions.
For actually ensuring that a type is correct at runtime you will have to use schema transforms (e.g. with @graphql-tools/utils mapSchema) that apply those rules! Otherwise, you might end up with a runtime type mismatch which could cause unnoticed bugs or runtime errors.
Please use this configuration option with care!
plugins: config: directiveArgumentAndInputFieldMappings: asNumber: number
directive @asNumber on ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION input MyInput { id: ID! @asNumber } type User { id: ID! } type Query { user(id: ID! @asNumber): User }
Usage e.g. with
typescript-resolvers
const Query: QueryResolvers = { user(_, args) { // args.id is of type 'number' }, };
-
8261e4161: Make futureProofEnums option work for all enum output types, (it worked only with enumsAsTypes)
- Updated dependencies [d6c2d4c09]
- Updated dependencies [feeae1c66]
- Updated dependencies [5086791ac]
- @graphql-codegen/visitor-plugin-common@2.2.0
- Updated dependencies [6470e6cc9]
- Updated dependencies [263570e50]
- Updated dependencies [35199dedf]
- @graphql-codegen/visitor-plugin-common@2.1.2
- @graphql-codegen/plugin-helpers@2.1.1
- Updated dependencies [aabeff181]
- @graphql-codegen/visitor-plugin-common@2.1.1
- 440172cfe: support ESM
- Updated dependencies [290170262]
- Updated dependencies [24185985a]
- Updated dependencies [39773f59b]
- Updated dependencies [440172cfe]
- @graphql-codegen/visitor-plugin-common@2.1.0
- @graphql-codegen/plugin-helpers@2.1.0
-
b0cb13df4: Update to latest
graphql-tools
andgraphql-config
version.‼️ ‼️ ‼️ Please note‼️ ‼️ ‼️ :This is a breaking change since Node 10 is no longer supported in
graphql-tools
, and also no longer supported for Codegen packages.
- Updated dependencies [d80efdec4]
- Updated dependencies [d80efdec4]
- Updated dependencies [b0cb13df4]
- @graphql-codegen/visitor-plugin-common@2.0.0
- @graphql-codegen/plugin-helpers@2.0.0
- 9005cc17: add
allowEnumStringTypes
option for allowing string literals as valid return types from resolvers in addition to enum values._
- Updated dependencies [df19a4ed]
- Updated dependencies [470336a1]
- Updated dependencies [9005cc17]
- @graphql-codegen/visitor-plugin-common@1.22.0
- @graphql-codegen/plugin-helpers@1.18.8
- Updated dependencies [6762aff5]
- @graphql-codegen/visitor-plugin-common@1.21.3
- Updated dependencies [6aaecf1c]
- @graphql-codegen/visitor-plugin-common@1.21.2
- Updated dependencies [cf1e5abc]
- @graphql-codegen/visitor-plugin-common@1.21.1
- Updated dependencies [dfd25caf]
- Updated dependencies [8da7dff6]
- @graphql-codegen/visitor-plugin-common@1.21.0
- @graphql-codegen/plugin-helpers@1.18.7
- f0b5ea53: Add entireFieldWrapperValue configuration option, to wrap arrays
- 097bea2f: Added new configuration settings for scalars:
strictScalars
anddefaultScalarType
- d9212aa0: fix(visitor-plugin-common): guard for a runtime type error
- Updated dependencies [d9212aa0]
- Updated dependencies [f0b5ea53]
- Updated dependencies [097bea2f]
- @graphql-codegen/visitor-plugin-common@1.20.0
- @graphql-codegen/plugin-helpers@1.18.5
- e947f8e3: Allow to have declarationKind of type: class, interface: interface
- 29b75b1e: enhance(namingConvention): use change-case-all instead of individual packages for naming convention
- Updated dependencies [e947f8e3]
- Updated dependencies [29b75b1e]
- Updated dependencies [d4942d04]
- Updated dependencies [1f6f3db6]
- Updated dependencies [29b75b1e]
- @graphql-codegen/visitor-plugin-common@1.19.0
- @graphql-codegen/plugin-helpers@1.18.3
- 34b8087e: Adds futureProofUnion option to account for a possible unknown new type added to union types
- Updated dependencies [5749cb8a]
- Updated dependencies [5a12fe58]
- @graphql-codegen/visitor-plugin-common@1.18.3
- ca66569f: Fix issues with undefined calls for str.replace
- Updated dependencies [ca66569f]
- @graphql-codegen/visitor-plugin-common@1.18.2
- 4444348d: Correctly escape enum values defined in the GraphQLSchema object
- Updated dependencies [63be0f40]
- Updated dependencies [190482a1]
- Updated dependencies [4444348d]
- Updated dependencies [142b32b3]
- Updated dependencies [42213fa0]
- @graphql-codegen/visitor-plugin-common@1.18.1
- d95db95b: feat(typescript): bump visitor-plugin-common
- 1d6a593f: Added
useImplementingTypes
flag for generating code that uses implementing types instead of interfaces
- Updated dependencies [8356f8a2]
- @graphql-codegen/visitor-plugin-common@1.17.21
- 1183d173: Bump all packages to resolve issues with shared dependencies
- Updated dependencies [1183d173]
- @graphql-codegen/visitor-plugin-common@1.17.20
- @graphql-codegen/plugin-helpers@1.18.2
- 49242c20: Added a "defaultValue" option in the "avoidOptionals" config See #5112
- Updated dependencies [99819bf1]
- Updated dependencies [c3b59e81]
- @graphql-codegen/visitor-plugin-common@1.17.19
- 077cf064: Fixed reading of enumValues config values
- 92d8f876: Fixed unquoted numeric enum identifiers
- Updated dependencies [92d8f876]
- @graphql-codegen/visitor-plugin-common@1.17.16
- 7ad7a1ae: Make non nullable input field with default value optional
- Updated dependencies [d2cde3d5]
- Updated dependencies [89a6aa80]
- Updated dependencies [f603b8f8]
- Updated dependencies [da8bdd17]
- @graphql-codegen/visitor-plugin-common@1.17.15
- @graphql-codegen/plugin-helpers@1.17.9
- 07f9b1b2: Fix a bug caused numeric enum values defined in the GraphQLSchema to be printed incorrectly
- Updated dependencies [07f9b1b2]
- Updated dependencies [35f67120]
- @graphql-codegen/visitor-plugin-common@1.17.14
- 1d7c6432: Bump all packages to allow "^" in deps and fix compatibility issues
- 1d7c6432: Bump versions of @graphql-tools/ packages to fix issues with loading schemas and SDL comments
- Updated dependencies [1d7c6432]
- Updated dependencies [1d7c6432]
- @graphql-codegen/visitor-plugin-common@1.17.13
- @graphql-codegen/plugin-helpers@1.17.8