@@ -12,6 +12,8 @@ import (
1212
1313const spacing = " "
1414
15+ var scalarNames []string
16+
1517type Schema struct {
1618 Ast * ast.Schema
1719}
@@ -21,7 +23,15 @@ func (schema *Schema) String() string {
2123 var enumOnly = ""
2224 var typesOnly = ""
2325 var objectsOnly = ""
26+
2427 sortedTypeKeys := schema .getSortedTypeKeys ()
28+ for _ , key := range * sortedTypeKeys {
29+ def := schema .Ast .Types [key ]
30+ if def .Kind == ast .Scalar {
31+ scalarNames = append (scalarNames , def .Name )
32+ }
33+ }
34+
2535 for _ , key := range * sortedTypeKeys {
2636 def := schema .Ast .Types [key ]
2737 if def .Kind == ast .Enum {
@@ -39,11 +49,10 @@ func (schema *Schema) String() string {
3949 //if def.Kind == ast.Union {
4050 // fmt.Printf("Union: %s\n", def.Name)
4151 //}
42- //if def.Kind == ast.Scalar {
43- //fmt.Printf("Scalar: %s\n", def.Name)
44- //}
52+
4553 }
46- return schema .getTypesHeader () + enumOnly + typesOnly + objectsOnly
54+ scalars := genScalars (scalarNames )
55+ return schema .getTypesHeader () + scalars + enumOnly + typesOnly + objectsOnly
4756}
4857
4958func (schema * Schema ) getSortedTypeKeys () * []string {
@@ -66,29 +75,31 @@ export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K]
6675export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
6776export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
6877/** All built-in and custom scalars, mapped to their actual values */
69- export type Scalars = {
70- ID: string;
71- String: string;
72- Boolean: boolean;
73- Int: number;
74- Float: number;
75- Bigint: any;
76- date: any;
77- Date: any;
78- Float8: any;
79- Timestamp: any;
80- Timestamptz: any;
81- Json: any;
82- Jsonb: any;
83- Numeric: any;
84- Point: any;
85- Polygon: any;
86- Uuid: any;
87- };
88-
8978`
9079}
9180
81+ func genScalars (scalarNames []string ) string {
82+ head := "export type Scalars = {\n "
83+ body := ""
84+ for _ , name := range scalarNames {
85+ switch name {
86+ case "ID" :
87+ body += spacing + "ID: string;\n "
88+ case "Int" :
89+ body += spacing + "Int: number;\n "
90+ case "Float" :
91+ body += spacing + "Float: number;\n "
92+ case "String" :
93+ body += spacing + "String: string;\n "
94+ case "Boolean" :
95+ body += spacing + "Boolean: boolean;\n "
96+ default :
97+ body += spacing + name + ": any;\n "
98+ }
99+ }
100+ return head + body + "}\n "
101+ }
102+
92103func genEnum (def * ast.Definition ) string {
93104 var tmpl = `export enum %s {
94105%s
@@ -147,7 +158,7 @@ func genInputObject(def *ast.Definition) string {
147158}
148159
149160func generateFieldType (astType * ast.Type ) string {
150- normalName := wrapScalar (normalizedName ( astType .Name () ))
161+ normalName := wrapScalar (astType .Name ())
151162
152163 if astType .NamedType != "" {
153164 if astType .NonNull == false {
@@ -167,16 +178,12 @@ func generateFieldType(astType *ast.Type) string {
167178// given type like "Int" will wrap it into "Scalars['Int']"
168179// if given type is not scalar, return as is
169180func wrapScalar (typeName string ) string {
170- scalars := []string {
171- "Boolean" , "String" , "Int" , "Float8" , "Float" , "Bigint" , "Timestamp" , "Timestamptz" ,
172- "Numeric" , "Uuid" , "Json" , "Jsonb" , "Polygon" , "Point" , "Date" , "date" ,
173- }
174- for _ , scalar := range scalars {
181+ for _ , scalar := range scalarNames {
175182 if typeName == scalar {
176183 return "Scalars['" + typeName + "']"
177184 }
178185 }
179- return typeName
186+ return normalizedName ( typeName )
180187}
181188
182189func generateFieldName (astFieldDef * ast.FieldDefinition ) string {
@@ -191,7 +198,7 @@ func genNullable(astFieldDef *ast.FieldDefinition) string {
191198}
192199
193200func genInputFieldType (astType * ast.Type ) string {
194- normalName := wrapScalar (normalizedName ( astType .Name () ))
201+ normalName := wrapScalar (astType .Name ())
195202
196203 if astType .NamedType != "" {
197204 if astType .NonNull == false {
0 commit comments