https://github.com/samthor/graphql-query-codegen
Custom GraphQL queries → typesafe code
https://github.com/samthor/graphql-query-codegen
Last synced: 9 months ago
JSON representation
Custom GraphQL queries → typesafe code
- Host: GitHub
- URL: https://github.com/samthor/graphql-query-codegen
- Owner: samthor
- License: apache-2.0
- Created: 2022-08-31T08:01:18.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-09-28T05:59:32.000Z (over 3 years ago)
- Last Synced: 2025-08-21T00:15:29.502Z (10 months ago)
- Language: TypeScript
- Homepage:
- Size: 32.2 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
GraphQL query code generator for TypeScript types.
This generates code specific to provided queries.
## Example
You might have a model like this:
```graphql
# model.graphql
type Query {
getFoo(a: Int) {
b
c
}
}
```
But want to write a query with a limited selection:
```graphql
# query.graphql
query GetFoo {
getFoo(a: 123) {
b
}
}
```
This library will generate limited types for you.
It can be run either as a binary or as a library.
For use as a binary, run:
```bash
$ graphql-query-codegen -q query.graphql model.graphql
```
You can also specify `--loose` to be less restrictive on checks, and `-s ScalarName:tsTypeName` to specify a scalar resolution.
(e.g., `-s AWSDateTime:string` tells this code to render `AWSDateTime` as a `string`).
## Library
You can also import this library.
It exports a `Builder` class which is typed.
## Notes
This treats the field `__typename` specially, and asssume it looks like `String!` but with a constant value of name of the type being requested (…unless that type specifically overrides it).
(This is part of the spec, but is a bit weird.)
## Known Issues
### Input Validation
This library doesn't check that the input types of variables match the expected values in field arguments.
For example, this is still allowed:
```graphql
type Query {
getFoo(a: Int!) {
b
c
}
}
# This probably shouldn't pass: String is not Int.
# ...(although GraphQL treats both as "scalars" anyway)
query GetFoo($a: String!) {
getFoo(a: $a) {
b
}
}
```
### Fragments, Unions & Interfaces
This package has limited support for fragments, unions and interfaces.
It does not support top-level fragment definitions, but this should work fine:
```graphql
# query.graphql
query GetWhatever {
getInterface {
__typename
... on OneOption {
hasFieldA
}
... on AnotherOption {
hasFieldB
}
}
}
```