Skip to content

Commit 0237f45

Browse files
committed
feat: generate types for query and mutation arguments
1 parent 3b6aee2 commit 0237f45

File tree

5 files changed

+46
-12
lines changed

5 files changed

+46
-12
lines changed

.idea/recodegen.iml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ The following config will:
9494
* [ ] some output is not properly formatted
9595
* [x] types in the generated output may change order on every new generation
9696
* [x] generated files are overwritten even if there is no change
97+
* [ ] No Interface support
98+
* [ ] No Union support
9799
* [ ] no unit tests
98100
* [ ] GraphQL fragment support is limited but something is supported
99101
* [ ] some type names might differ a bit from what is generated by `@graphql-codegen/cli`

cmd/recodegen/recodegen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"runtime"
1414
)
1515

16-
const VERSION = "v0.2.2"
16+
const VERSION = "v0.3.0"
1717

1818
func main() {
1919
configFileName := flag.String("config", "recodegen.json", "Configuration file name")

npm/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@graphql-recodegen/cli",
3-
"version": "0.2.2",
3+
"version": "0.3.0",
44
"description": "Faster GraphQL codegen for TypeScript projects",
55
"main": "index.js",
66
"type": "module",

typescript/schema.go

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,17 @@ func (schema *Schema) String() string {
3131
typesOnly += genInputObject(def)
3232
}
3333
if def.Kind == ast.Object {
34-
objectsOnly += generateObject(def)
35-
}
36-
if def.Kind == ast.Interface {
37-
//fmt.Printf("%s\n", def.Name)
34+
objectsOnly += schema.generateObject(def)
3835
}
36+
//if def.Kind == ast.Interface {
37+
// fmt.Printf("Interface: %s\n", def.Name)
38+
//}
39+
//if def.Kind == ast.Union {
40+
// fmt.Printf("Union: %s\n", def.Name)
41+
//}
42+
//if def.Kind == ast.Scalar {
43+
//fmt.Printf("Scalar: %s\n", def.Name)
44+
//}
3945
}
4046
return schema.getTypesHeader() + enumOnly + typesOnly + objectsOnly
4147
}
@@ -97,7 +103,7 @@ func genEnum(def *ast.Definition) string {
97103
for _, enumVal := range def.EnumValues {
98104
desc := ""
99105
if len(enumVal.Description) > 0 {
100-
desc = fmt.Sprintf("%s/** %s */", spacing, enumVal.Description)
106+
desc = fmt.Sprintf("%s/** %s */\n", spacing, enumVal.Description)
101107
}
102108
// /** desc */
103109
// enumName = 'enumValue'
@@ -128,6 +134,9 @@ func normalizedName(snakeCase string) string {
128134

129135
func genInputObject(def *ast.Definition) string {
130136
desc := generateDesc(def.Description)
137+
if len(desc) > 0 {
138+
desc += "\n"
139+
}
131140
start := desc + "export type " + normalizedName(def.Name) + " = {\n"
132141
var fields []string
133142
for _, field := range def.Fields {
@@ -224,10 +233,11 @@ func splitUnderscoredString(snakeCase string) []string {
224233
return split
225234
}
226235

227-
func generateObject(def *ast.Definition) string {
236+
func (schema *Schema) generateObject(def *ast.Definition) string {
228237
objectName := normalizedName(def.Name)
229238
desc := generateDesc(def.Description)
230239
header := fmt.Sprintf("\nexport type %s = {", objectName)
240+
args := ""
231241
if len(desc) > 0 {
232242
header = "\n" + desc + header
233243
}
@@ -241,10 +251,32 @@ func generateObject(def *ast.Definition) string {
241251
if field.Name == "__type" {
242252
continue
243253
}
254+
if len(field.Arguments) > 0 {
255+
args += generateArgDefinition(objectName, field.Name, field.Arguments)
256+
}
244257
if len(field.Description) > 0 {
245258
body += "\n" + spacing + generateDesc(field.Description)
246259
}
247260
body += "\n" + spacing + generateFieldName(field) + ": " + generateFieldType(field.Type) + ";"
248261
}
249-
return header + body + footer
262+
return header + body + footer + args
263+
}
264+
265+
func generateArgDefinition(parentName string, fieldName string, args []*ast.ArgumentDefinition) string {
266+
output := "export type " + parentName + normalizedName(fieldName) + "Args = {\n"
267+
fields := ""
268+
for _, arg := range args {
269+
if len(arg.Description) > 0 {
270+
fields += spacing + "/** " + arg.Description + " */\n"
271+
}
272+
fields += spacing + arg.Name
273+
if arg.Type.NonNull == false {
274+
fields += "?: "
275+
} else {
276+
fields += ": "
277+
}
278+
fields += genInputFieldType(arg.Type) + ";\n"
279+
}
280+
output += fields + "};\n\n"
281+
return output
250282
}

0 commit comments

Comments
 (0)