Skip to content

Commit 94cb8fc

Browse files
authored
Merge pull request #261 from Yamashou/newfunction
Add new function for plugin
2 parents 88a613e + 0a2b512 commit 94cb8fc

File tree

5 files changed

+45
-17
lines changed

5 files changed

+45
-17
lines changed

clientgenv2/client.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"github.com/99designs/gqlgen/codegen/config"
77
"github.com/99designs/gqlgen/plugin"
88
gqlgencConfig "github.com/Yamashou/gqlgenc/config"
9+
"github.com/Yamashou/gqlgenc/parsequery"
10+
"github.com/Yamashou/gqlgenc/querydocument"
911
"github.com/vektah/gqlparser/v2/ast"
1012
)
1113

@@ -19,25 +21,54 @@ type Plugin struct {
1921
GenerateConfig *gqlgencConfig.GenerateConfig
2022
}
2123

22-
func New(queryFilePaths []string, queryDocument *ast.QueryDocument, operationQueryDocuments []*ast.QueryDocument, client config.PackageConfig, generateConfig *gqlgencConfig.GenerateConfig) *Plugin {
24+
func New(queryDocument *ast.QueryDocument, operationQueryDocuments []*ast.QueryDocument, client config.PackageConfig, generateConfig *gqlgencConfig.GenerateConfig) *Plugin {
2325
return &Plugin{
24-
queryFilePaths: queryFilePaths,
2526
queryDocument: queryDocument,
2627
operationQueryDocuments: operationQueryDocuments,
2728
Client: client,
2829
GenerateConfig: generateConfig,
2930
}
3031
}
3132

33+
func NewWithQueryDocument(queryFilePaths []string, client config.PackageConfig, generateConfig *gqlgencConfig.GenerateConfig) *Plugin {
34+
return &Plugin{
35+
queryFilePaths: queryFilePaths,
36+
Client: client,
37+
GenerateConfig: generateConfig,
38+
}
39+
}
40+
3241
func (p *Plugin) Name() string {
3342
return "clientgen"
3443
}
3544

3645
func (p *Plugin) MutateConfig(cfg *config.Config) error {
46+
queryDocument := p.queryDocument
47+
if queryDocument == nil {
48+
querySources, err := parsequery.LoadQuerySources(p.queryFilePaths)
49+
if err != nil {
50+
return fmt.Errorf("load query sources failed: %w", err)
51+
}
52+
53+
queryDocument, err = parsequery.ParseQueryDocuments(cfg.Schema, querySources)
54+
if err != nil {
55+
return fmt.Errorf(": %w", err)
56+
}
57+
}
58+
59+
var err error
60+
operationQueryDocuments := p.operationQueryDocuments
61+
if operationQueryDocuments == nil {
62+
operationQueryDocuments, err = querydocument.QueryDocumentsByOperations(cfg.Schema, queryDocument.Operations)
63+
if err != nil {
64+
return fmt.Errorf(": %w", err)
65+
}
66+
}
67+
3768
// テンプレートと情報ソースを元にコード生成
3869
// Generate code from template and document source
3970
sourceGenerator := NewSourceGenerator(cfg, p.Client, p.GenerateConfig)
40-
source := NewSource(cfg.Schema, p.queryDocument, sourceGenerator, p.GenerateConfig)
71+
source := NewSource(cfg.Schema, queryDocument, sourceGenerator, p.GenerateConfig)
4172

4273
fragments, err := source.Fragments()
4374
if err != nil {
@@ -49,7 +80,7 @@ func (p *Plugin) MutateConfig(cfg *config.Config) error {
4980
return fmt.Errorf("generating operation response failed: %w", err)
5081
}
5182

52-
operations, err := source.Operations(p.operationQueryDocuments)
83+
operations, err := source.Operations(operationQueryDocuments)
5384
if err != nil {
5485
return fmt.Errorf("generating operation failed: %w", err)
5586
}

clientgenv2/source_generator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func NewStructGenerator(responseFieldList ResponseFieldList) *StructGenerator {
124124
}
125125
}
126126

127-
func mergeFieldsRecursively(targetFields ResponseFieldList, sourceFields ResponseFieldList, preMerged, postMerged []*StructSource) (ResponseFieldList, []*StructSource, []*StructSource) {
127+
func mergeFieldsRecursively(targetFields, sourceFields ResponseFieldList, preMerged, postMerged []*StructSource) (ResponseFieldList, []*StructSource, []*StructSource) {
128128
responseFieldList := make(ResponseFieldList, 0)
129129
targetFieldsMap := targetFields.MapByName()
130130
newPreMerged := preMerged

clientv2/client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1018,7 +1018,7 @@ func TestEncoder_encodeStruct(t *testing.T) {
10181018
enableOmitemptyTag: true,
10191019
want: map[string]any{
10201020
"name": "John",
1021-
"email2": nil,
1021+
"email2": nil,
10221022
"address": map[string]any{"city": "Tokyo"},
10231023
},
10241024
},

generator/generator.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,14 @@ func Generate(ctx context.Context, cfg *config.Config) error {
116116
return fmt.Errorf(": %w", err)
117117
}
118118

119-
usedTypes := querydocument.CollectTypesFromQueryDocuments(cfg.GQLConfig.Schema, operationQueryDocuments)
120-
121119
var clientGen api.Option
122120
if cfg.Generate != nil {
123-
clientGen = api.AddPlugin(clientgenv2.New(cfg.Query, queryDocument, operationQueryDocuments, cfg.Client, cfg.Generate))
121+
clientGen = api.AddPlugin(clientgenv2.New(queryDocument, operationQueryDocuments, cfg.Client, cfg.Generate))
124122
}
125123

126124
var plugins []plugin.Plugin
127125
if cfg.Model.IsDefined() {
126+
usedTypes := querydocument.CollectTypesFromQueryDocuments(cfg.GQLConfig.Schema, operationQueryDocuments)
128127
p := &modelgen.Plugin{
129128
MutateHook: mutateHook(cfg, usedTypes),
130129
FieldHook: modelgen.DefaultFieldMutateHook,

generator/generator_test.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ package generator_test
22

33
import (
44
"context"
5+
"os"
6+
"path/filepath"
7+
"testing"
8+
59
"github.com/Yamashou/gqlgenc/config"
610
"github.com/Yamashou/gqlgenc/generator"
711
"github.com/stretchr/testify/suite"
812
"golang.org/x/tools/go/packages"
9-
"os"
10-
"path/filepath"
11-
"testing"
1213
)
1314

1415
type Suite struct {
@@ -25,12 +26,10 @@ const (
2526
)
2627

2728
func (s *Suite) TestGenerator_withTestData() {
28-
2929
dirs := s.getTestDirs()
3030

3131
for _, dir := range dirs {
3232
s.Run(dir, func() {
33-
3433
// temporary change working directory
3534
s.useDirForTest(filepath.Join("testdata", dir))
3635

@@ -64,8 +63,8 @@ func (s *Suite) TestGenerator_withTestData() {
6463
for path, content := range actualFiles {
6564
s.T().Logf("resetting expected file %s", path)
6665
expectedPath := filepath.Join(expected, path)
67-
_ = os.MkdirAll(filepath.Dir(expectedPath), 0700)
68-
err = os.WriteFile(expectedPath, []byte(content), 0644)
66+
_ = os.MkdirAll(filepath.Dir(expectedPath), 0o700)
67+
err = os.WriteFile(expectedPath, []byte(content), 0o644)
6968
s.Require().NoError(err)
7069
}
7170
return
@@ -115,7 +114,6 @@ func (s *Suite) loadFiles(dir string) map[string]string {
115114
rel, err := filepath.Rel(dir, path)
116115
if err != nil {
117116
return err
118-
119117
}
120118
files[rel] = string(content)
121119
return nil

0 commit comments

Comments
 (0)