Skip to content

Commit

Permalink
Added introspection query to embedded statikdata.
Browse files Browse the repository at this point in the history
  • Loading branch information
shakahl committed Oct 25, 2020
1 parent 2b88712 commit 27254ba
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 442 deletions.
Empty file removed assets/IntrospectionQuery.graphql
Empty file.
66 changes: 42 additions & 24 deletions internal/gqlassist/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import (
"github.com/shakahl/gqlassist/internal/utils"
)

func init() {

}
const (
FileHeaderText = "// Code generated by gqlassist; DO NOT EDIT.\n\n"
)

type GraphQLTypeDefGeneratorConfig struct {
Endpoint string
Expand Down Expand Up @@ -64,7 +64,7 @@ func (g *GraphQLTypeDefGenerator) GetTemplates(params map[string]interface{}) ma

for name, path := range statikTemplates {
content := statikdata.MustReadFileString(path)
g.templates[name] = renderGeneratorTemplate(name, content)
g.templates[name] = ParseTemplate(name, content)
}

return g.templates
Expand Down Expand Up @@ -99,18 +99,19 @@ func (g *GraphQLTypeDefGenerator) getClient() *apiclient.ApiClient {
return c
}

func (g *GraphQLTypeDefGenerator) fetchGraphQLSchema() (string, error) {
func (g *GraphQLTypeDefGenerator) FetchRemoteSchema() (string, error) {
query := statikdata.MustReadFileString("/IntrospectionQuery.graphql")
client := g.getClient()
result, err := client.SendGraphQLQuery(context.Background(), GeneratorTemplateIntrospectionQuery, nil)
result, err := client.SendGraphQLQuery(context.Background(), query, nil)
if err != nil {
return "", err
}
return string(result.GetBody()), nil
}

func (g *GraphQLTypeDefGenerator) decodeStringToInterface(schema string) (map[string]interface{}, error) {
func (g *GraphQLTypeDefGenerator) parseJson(txt string) (map[string]interface{}, error) {
var target map[string]interface{}
s := strings.NewReader(schema)
s := strings.NewReader(txt)
if err := json.NewDecoder(s).Decode(&target); err != nil {
return nil, err
}
Expand All @@ -126,21 +127,21 @@ func (g *GraphQLTypeDefGenerator) Generate() error {
return err
}

schemaJson, err := g.fetchGraphQLSchema()
schemaJson, err := g.FetchRemoteSchema()
if err != nil {
return err
}

if err := utils.WriteToFile(schemaFile, schemaJson); err != nil {
return err
}
g.infof("GraphQL schema written into: %s", schemaFile)

g.logger.Printf("GraphQL schema written into: %s", schemaFile)

schema, err := g.decodeStringToInterface(schemaJson)
schema, err := g.parseJson(schemaJson)
if err != nil {
return err
}
g.infof("Schema parsed successfully!")

params := make(map[string]interface{})
params["FileHeader"] = FileHeaderText
Expand All @@ -149,30 +150,47 @@ func (g *GraphQLTypeDefGenerator) Generate() error {
params["FeatureFlags"] = map[string]interface{}{
"UseIntegerEnums": true,
}
// use_integer_enums

templates := g.GetTemplates(params)
for filename, t := range g.GetTemplates(params) {
g.infof("Processing template: %s\n", filename)

for filename, t := range templates {
outputFile := g.getOutputFilePath(filename)
g.logger.Printf("Processing template: %s\n", filename)
var buf bytes.Buffer
err := t.Execute(&buf, params)
outfile := g.getOutputFilePath(filename)
buf := new(bytes.Buffer)
err := t.Execute(buf, params)
if err != nil {
g.logger.Printf("ERR: %+v\n", err)
return err
g.error(err)
}

g.infof("formating source with gofmt: %s", outfile)
out, err := format.Source(buf.Bytes())
if err != nil {
g.logger.Println(err)
g.infof("gofmt error: %s", err)
out = []byte("// gofmt error: " + err.Error() + "\n\n" + buf.String())
}
g.logger.Printf("writing %s\n", outputFile)
err = ioutil.WriteFile(outputFile, out, 0644)

g.infof("writing template file: %s", outfile)
err = ioutil.WriteFile(outfile, out, 0644)
if err != nil {
return err
}
g.infof("successfully generated: %s", outfile)
}

return nil
}

func (g *GraphQLTypeDefGenerator) info(args ...interface{}) {
g.infof("", args...)
}

func (g *GraphQLTypeDefGenerator) infof(format string, args ...interface{}) {
g.logger.Printf("INFO: "+format+"\n", args...)
}

func (g *GraphQLTypeDefGenerator) error(args ...interface{}) {
g.errorf("", args...)
}

func (g *GraphQLTypeDefGenerator) errorf(format string, args ...interface{}) {
g.logger.Printf("ERROR: "+format+"\n", args...)
}
Loading

0 comments on commit 27254ba

Please sign in to comment.