gql-hook-codegen
v1.2.0
Published
A utility to generate graphql hook from query string and schema
Downloads
39
Readme
gql-hook-codegen
This tool generates TypeScript types for queries/mutations written in an GraphQL project given a valid GraphQL schema.
Install
Yarn
yarn add gql-hook-codegen
NPM
npm install gql-hook-codegen
How to use
Step 1: Create a Typescript file use-user.gql.ts
with the following content
import gql from 'graphql-tag'
const query = gql`
query {
user {
name
}
}
`
Step 2: Add schema file schema.gql
type User {
id: ID!
name: String
}
type Query {
user(id: ID!): User
}
Step 3: Run the following code:
npx gql-hook-codegen generate --pattern="*.gql.ts"
Step 4: Script will update use-user.gql.ts
to the following:
import { QueryHookOptions, useQuery } from '@apollo/client'
import gql from 'graphql-tag'
const query = gql`
query fetchUser($id: ID!) {
user(id: $id) {
name
}
}
`
export interface RequestType {
id: string | undefined
}
export interface QueryType {
user?: UserType
}
export interface UserType {
name?: string
__typename?: 'User'
}
export function useUserQuery(
request: RequestType,
options?: QueryHookOptions<QueryType, RequestType>,
) {
return useQuery<QueryType, RequestType>(query, {
variables: request,
skip: !request.id,
...options,
})
}
VS Code Integration
Install Save and Run plugin
and add the following code to .settings.json
{
"saveAndRun": {
"commands": [
{
"match": ".gql.ts",
"cmd": "npx gql-hook-codegen generate --schema-file=../partner-portal-be/schema.gql --pattern='${file}'",
"useShortcut": false,
"silent": false
}
]
}
}
More Examples
- Schema
- Query
- Query with no parameters
- Batched Queries
- Query with multiple inputs
- Query with enum
- Query with date
- Query with shared variable
- Mutation
- Lazy query
- Query with union
Options
gql-hook-codegen <generate> [--help] [--doc]
COMMANDS
generate
COMMON
--help Show help
--doc Generate documentation
gql-hook-codegen generate
gql-hook-codegen generate [--pattern=<string>]
[--file=<string>]
[--schema-file=<string>]
[--schema-url=<string>]
[--ignore=<string>]
[--package=<string>]
[--save]
OPTIONS
--pattern=<string> File pattern
--file=<string> A specific file to process
--schema-file=<string> Location of the schema file
--schema-url=<string> Url to fetch graphql schema from
--ignore=<string> Folders to ignore
--package=<string> Default package to use
--save Save schema locally if --schema-url is
used
Automatic Release
Here is an example of the release type that will be done based on a commit messages:
| Commit message | Release type | | ------------------- | --------------------- | | fix: [comment] | Patch Release | | feat: [comment] | Minor Feature Release | | perf: [comment] | Major Feature Release | | doc: [comment] | No Release | | refactor: [comment] | No Release | | chore: [comment] | No Release |