Named Operations Object
| Package name | Weekly Downloads | Version | License | Updated |
|---|---|---|---|---|
@graphql-codegen/named-operations-object | Aug 8th, 2022 |
Installation
yarn add -D @graphql-codegen/named-operations-objectThis plugin generates an object containing a list of all your GraphQL operations and fragments. This is useful if you are using Apollo-Client and wish to have type validation when you are using refetchQueries.
All operations and fragments are being exported by their name (so unnamed operations are being ignored), in the following structure:
export const namedOperations = {
Query: [...],
Mutation: [...],
Subscription: [...],
Fragment: [...]
}Config API Reference
identifierName
useConsts
type: boolean
default: false
Will generate a const string instead of regular string.
How to use?
Include the plugin within your output (into an existing .js/.ts file, or a new file), for example:
import type { CodegenConfig } from '@graphql-codegen/cli'
const config: CodegenConfig = {
schema: 'YOUR_SCHEMA',
documents: 'YOUR_OPERATIONS',
generates: {
'./types.ts': {
plugins: ['typescript', 'typescript-operations', 'named-operations-object']
}
}
}
export default configRefetch queries without input parameters
From this point, you should be able to import namedOperations from that file, and use the names within your code. For example, with Apollo Client and a refetch query that has no input parameters, you can simply add the named operation to the refetchQueries array:
client
.mutate(
{ ... },
// No more typos, and you get auto-completion and build time validation
{ refetchQueries: [namedOperations.Query.myQuery] }
)Refetch queries with input parameters
For refetch queries that contain input parameters, instead of adding a named operation to the refetchQueries array, you need to add an Apollo QueryOptions object. The query value inside the QueryOptions object does not take one of the entries in the namedOperations list. Instead, the query value takes a TypedDocument constant which corresponds to your query and should be generated by default.
A refetchQueries array that contains multiple queries, some of which contain input parameters, might look something like this:
client
.mutate(
{ ... },
// No more typos, and you get auto-completion and build time validation
{ refetchQueries: [
namedOperations.Query.myQueryWithoutInputParams,
{
query: MyQueryWithInputParamsDocument,
variables: { inputParam }
}
] }
)