Skip to content
This repository was archived by the owner on Apr 1, 2024. It is now read-only.

Commit a82102c

Browse files
authored
Merge pull request #10 from Code-Hex/add/readme-toc
Add readme toc
2 parents 6ae8e1a + 633c9c2 commit a82102c

File tree

5 files changed

+123
-13
lines changed

5 files changed

+123
-13
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ This todo list is written the order of priority.
6969
- https://github.com/Code-Hex/gqldoc-actions
7070
- [ ] Subscription
7171
- [ ] Directive and it's location.
72-
- [ ] Put README.md in output directory
72+
- [x] ~~Put README.md in output directory~~
7373
- TOC purpose
7474
- [ ] Custom Template
7575
- [ ] Render HTML

example/github/README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# API Reference
2+
3+
View reference documentation to learn about the data types available in your GraphQL API schema.
4+
5+
6+
- [Query](queries.md)
7+
- [Mutations](mutations.md)
8+
- [Objects](objects.md)
9+
- [Interfaces](interfaces.md)
10+
- [Enums](enums.md)
11+
- [Unions](unions.md)
12+
- [Input objects](input_objects.md)
13+
- [Scalars](scalars.md)

example/starwars/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# API Reference
2+
3+
View reference documentation to learn about the data types available in your GraphQL API schema.
4+
5+
6+
- [Query](queries.md)
7+
- [Objects](objects.md)
8+
- [Interfaces](interfaces.md)
9+
- [Scalars](scalars.md)

internal/markdown/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# API Reference
2+
3+
View reference documentation to learn about the data types available in your GraphQL API schema.
4+
5+
{{ range $i := .Items }}
6+
- [{{ $i.Type }}]({{ $i.Link }})
7+
{{- end }}

internal/markdown/markdown.go

Lines changed: 93 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"os"
77
"path/filepath"
88
"strings"
9+
"text/template"
910
"unsafe"
1011

1112
"github.com/Code-Hex/gqldoc/internal/introspection"
@@ -50,40 +51,120 @@ func (m *Config) MakeLinkFromType(typ *introspection.Type) (string, error) {
5051
}
5152

5253
func (m *Config) Render(s *introspection.Schema) error {
54+
readmeContent := &README{}
55+
5356
if s.QueryType != nil {
5457
if err := m.renderQuery(s); err != nil {
5558
return errors.WithStack(err)
5659
}
60+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
61+
Type: "Query",
62+
Link: "queries.md",
63+
})
5764
}
5865
if s.MutationType != nil {
5966
if err := m.renderMutation(s); err != nil {
6067
return errors.WithStack(err)
6168
}
69+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
70+
Type: "Mutations",
71+
Link: "mutations.md",
72+
})
6273
}
6374
if len(s.Types) > 0 {
6475
types := make(map[introspection.TypeKind][]*introspection.Types, len(s.Types))
6576
for _, typ := range s.Types {
6677
types[typ.Kind] = append(types[typ.Kind], typ)
6778
}
68-
if err := m.renderObjects(types[introspection.OBJECT]); err != nil {
69-
return errors.WithStack(err)
79+
if typs := types[introspection.OBJECT]; len(typs) > 0 {
80+
if err := m.renderObjects(typs); err != nil {
81+
return errors.WithStack(err)
82+
}
83+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
84+
Type: "Objects",
85+
Link: "objects.md",
86+
})
7087
}
71-
if err := m.renderInterfaces(types[introspection.INTERFACE]); err != nil {
72-
return errors.WithStack(err)
88+
if typs := types[introspection.INTERFACE]; len(typs) > 0 {
89+
if err := m.renderInterfaces(typs); err != nil {
90+
return errors.WithStack(err)
91+
}
92+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
93+
Type: "Interfaces",
94+
Link: "interfaces.md",
95+
})
7396
}
74-
if err := m.renderEnums(types[introspection.ENUM]); err != nil {
75-
return errors.WithStack(err)
97+
if typs := types[introspection.ENUM]; len(typs) > 0 {
98+
if err := m.renderEnums(typs); err != nil {
99+
return errors.WithStack(err)
100+
}
101+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
102+
Type: "Enums",
103+
Link: "enums.md",
104+
})
76105
}
77-
if err := m.renderUnions(types[introspection.UNION]); err != nil {
78-
return errors.WithStack(err)
106+
if typs := types[introspection.UNION]; len(typs) > 0 {
107+
if err := m.renderUnions(typs); err != nil {
108+
return errors.WithStack(err)
109+
}
110+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
111+
Type: "Unions",
112+
Link: "unions.md",
113+
})
79114
}
80-
if err := m.renderInputObjects(types[introspection.INPUT_OBJECT]); err != nil {
81-
return errors.WithStack(err)
115+
if typs := types[introspection.INPUT_OBJECT]; len(typs) > 0 {
116+
if err := m.renderInputObjects(typs); err != nil {
117+
return errors.WithStack(err)
118+
}
119+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
120+
Type: "Input objects",
121+
Link: "input_objects.md",
122+
})
82123
}
83-
if err := m.renderScalars(types[introspection.SCALAR]); err != nil {
84-
return errors.WithStack(err)
124+
if typs := types[introspection.SCALAR]; len(typs) > 0 {
125+
if err := m.renderScalars(typs); err != nil {
126+
return errors.WithStack(err)
127+
}
128+
readmeContent.Items = append(readmeContent.Items, &READMEItem{
129+
Type: "Scalars",
130+
Link: "scalars.md",
131+
})
85132
}
86133
}
87134

135+
if err := m.renderREADME(readmeContent); err != nil {
136+
return errors.WithStack(err)
137+
}
138+
139+
return nil
140+
}
141+
142+
//go:embed README.md
143+
var readme string
144+
145+
type README struct {
146+
Items []*READMEItem
147+
}
148+
149+
type READMEItem struct {
150+
Type string
151+
Link string
152+
}
153+
154+
func (m *Config) renderREADME(r *README) error {
155+
f, err := m.Create("README.md")
156+
if err != nil {
157+
return errors.WithStack(err)
158+
}
159+
defer f.Close()
160+
161+
t, err := template.New("README").Parse(readme)
162+
if err != nil {
163+
return errors.WithStack(err)
164+
}
165+
166+
if err := t.Execute(f, r); err != nil {
167+
return errors.WithStack(err)
168+
}
88169
return nil
89170
}

0 commit comments

Comments
 (0)