Skip to content

Commit 692776f

Browse files
zchasecnunciato
andauthored
Clean typescript generation (#125)
* Move typescrip gen into its own package * Refactor union generation [ts] * Refactor string generation [ts] * Refactor object generation [ts] * Refactor number generation [ts] * Refactor enum generation [ts] * Refactor boolean generation [ts] * Refactor array generation [ts] * Use raw value for interface key [ts] * Refactor main generation [ts] * Add ordered map struct [utils] * Add keys method [utils] * Use new ordered map stuff * Apply Claude's suggestions (#126) * Fix up ai stuff * Clean up comment and line indentation --------- Co-authored-by: Christian Nunciato <[email protected]>
1 parent 3478eec commit 692776f

File tree

23 files changed

+482
-447
lines changed

23 files changed

+482
-447
lines changed

internal/gen/go.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package main
33
import (
44
"fmt"
55

6-
"github.com/buildkite/buildkite-sdk/internal/gen/schema"
76
"github.com/buildkite/buildkite-sdk/internal/gen/types"
87
"github.com/buildkite/buildkite-sdk/internal/gen/utils"
98
)
@@ -13,8 +12,10 @@ func generateGoTypes(
1312
outDir string,
1413
) error {
1514
for _, name := range generator.Definitions.Keys() {
16-
val, _ := generator.Definitions.Get(name)
17-
prop := val.(schema.PropertyDefinition)
15+
prop, err := generator.Definitions.Get(name)
16+
if err != nil {
17+
return err
18+
}
1819

1920
property, _, err := generator.PropertyDefinitionToValue(name, prop)
2021
if err != nil {

internal/gen/main.go

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ import (
44
"fmt"
55
"os"
66
"path"
7-
"sort"
87

98
"github.com/buildkite/buildkite-sdk/internal/gen/schema"
109
"github.com/buildkite/buildkite-sdk/internal/gen/types"
11-
"github.com/iancoleman/orderedmap"
1210
)
1311

1412
func generateTypes(outDir, language string) error {
@@ -17,32 +15,13 @@ func generateTypes(outDir, language string) error {
1715
return fmt.Errorf("reading pipeline schema: %v", err)
1816
}
1917

20-
definitions := orderedmap.New()
21-
for key, prop := range pipelineSchema.Definitions {
22-
definitions.Set(key, prop)
23-
}
24-
definitions.SortKeys(sort.Strings)
25-
26-
properties := orderedmap.New()
27-
for key, prop := range pipelineSchema.Properties {
28-
properties.Set(key, prop)
29-
}
30-
properties.SortKeys(sort.Strings)
31-
32-
generator := types.PipelineSchemaGenerator{
33-
Definitions: definitions,
34-
Properties: properties,
35-
}
36-
37-
if language == "ts" {
18+
generator := types.NewPipelineSchemaGenerator(pipelineSchema)
19+
switch language {
20+
case "ts":
3821
return generateTypeScriptTypes(generator, outDir)
39-
}
40-
41-
if language == "py" {
22+
case "py":
4223
return generatePythonTypes(generator, outDir)
43-
}
44-
45-
if language == "go" {
24+
case "go":
4625
return generateGoTypes(generator, outDir)
4726
}
4827

internal/gen/python.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"path"
66
"strings"
77

8-
"github.com/buildkite/buildkite-sdk/internal/gen/schema"
98
"github.com/buildkite/buildkite-sdk/internal/gen/types"
109
"github.com/buildkite/buildkite-sdk/internal/gen/utils"
1110
"github.com/iancoleman/orderedmap"
@@ -85,8 +84,10 @@ func generatePythonTypes(
8584
}
8685

8786
for _, name := range typeNames {
88-
val, _ := generator.Definitions.Get(name)
89-
prop := val.(schema.PropertyDefinition)
87+
prop, err := generator.Definitions.Get(name)
88+
if err != nil {
89+
return err
90+
}
9091

9192
property, dependencies, err := generator.PropertyDefinitionToValue(name, prop)
9293
if err != nil {

internal/gen/types/array.go

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"strings"
66

7+
"github.com/buildkite/buildkite-sdk/internal/gen/typescript"
78
"github.com/buildkite/buildkite-sdk/internal/gen/utils"
89
)
910

@@ -22,7 +23,7 @@ func (a Array) IsReference() bool {
2223
return a.Reference
2324
}
2425

25-
func (Array) IsPrimative() bool {
26+
func (Array) IsPrimitive() bool {
2627
return false
2728
}
2829

@@ -101,23 +102,18 @@ func (a Array) Go() (string, error) {
101102
}
102103

103104
// TypeScript
104-
func (a Array) TypeScript() (string, error) {
105-
block := utils.NewCodeBlock()
106-
107-
if a.Description != "" {
108-
block.AddLines(utils.NewTypeDocComment(a.Description))
105+
func (a Array) TypeScript() string {
106+
arrayType := a.Type.TypeScriptInterfaceType()
107+
if _, ok := a.Type.(Union); ok {
108+
arrayType = fmt.Sprintf("(%s)", arrayType)
109109
}
110110

111-
if union, ok := a.Type.(Union); ok {
112-
block.AddLines(
113-
fmt.Sprintf("export type %s = (%s)[]", a.Name.ToTitleCase(), union.TypeScriptInterfaceType()),
114-
)
115-
116-
return block.String(), nil
117-
}
118-
119-
block.AddLines(fmt.Sprintf("export type %s = %s[]", a.Name.ToTitleCase(), a.Type.TypeScriptInterfaceType()))
120-
return block.String(), nil
111+
typ := typescript.NewType(
112+
a.Name.ToTitleCase(),
113+
a.Description,
114+
fmt.Sprintf("%s[]", arrayType),
115+
)
116+
return typ.String()
121117
}
122118

123119
func (a Array) TypeScriptInterfaceType() string {
@@ -138,7 +134,7 @@ func (a Array) TypeScriptInterfaceType() string {
138134
}
139135

140136
func (a Array) TypeScriptInterfaceKey() string {
141-
return a.Name.ToTitleCase()
137+
return a.Name.Value
142138
}
143139

144140
// Python

internal/gen/types/boolean.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package types
33
import (
44
"fmt"
55

6+
"github.com/buildkite/buildkite-sdk/internal/gen/typescript"
67
"github.com/buildkite/buildkite-sdk/internal/gen/utils"
78
)
89

@@ -19,7 +20,7 @@ func (b Boolean) IsReference() bool {
1920
return false
2021
}
2122

22-
func (Boolean) IsPrimative() bool {
23+
func (Boolean) IsPrimitive() bool {
2324
return true
2425
}
2526

@@ -47,16 +48,13 @@ func (b Boolean) Go() (string, error) {
4748
}
4849

4950
// TypeScript
50-
51-
func (b Boolean) TypeScript() (string, error) {
52-
block := utils.NewCodeBlock()
53-
54-
if b.Description != "" {
55-
block.AddLines(utils.NewTypeDocComment(b.Description))
56-
}
57-
58-
block.AddLines(fmt.Sprintf("type %s = boolean", b.Name.ToTitleCase()))
59-
return block.String(), nil
51+
func (b Boolean) TypeScript() string {
52+
typ := typescript.NewType(
53+
b.Name.ToTitleCase(),
54+
b.Description,
55+
"boolean",
56+
)
57+
return typ.String()
6058
}
6159

6260
func (b Boolean) TypeScriptInterfaceKey() string {

internal/gen/types/enum.go

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"sort"
66
"strings"
77

8+
"github.com/buildkite/buildkite-sdk/internal/gen/typescript"
89
"github.com/buildkite/buildkite-sdk/internal/gen/utils"
910
"github.com/iancoleman/orderedmap"
1011
)
@@ -56,7 +57,7 @@ func (e Enum) IsReference() bool {
5657
return false
5758
}
5859

59-
func (Enum) IsPrimative() bool {
60+
func (Enum) IsPrimitive() bool {
6061
return false
6162
}
6263

@@ -147,25 +148,14 @@ func (e Enum) Go() (string, error) {
147148
}
148149

149150
// TypeScript
150-
func (e Enum) TypeScript() (string, error) {
151-
parts := make([]string, len(e.Values))
152-
for i, val := range e.Values {
153-
if _, ok := val.(string); ok {
154-
parts[i] = fmt.Sprintf("'%v'", val)
155-
continue
156-
}
157-
158-
parts[i] = fmt.Sprintf("%v", val)
159-
}
160-
values := strings.Join(parts, " | ")
161-
162-
block := utils.NewCodeBlock()
163-
if e.Description != "" {
164-
block.AddLines(utils.NewTypeDocComment(e.Description))
165-
}
151+
func (e Enum) TypeScript() string {
152+
typ := typescript.NewType(
153+
e.Name.ToTitleCase(),
154+
e.Description,
155+
e.TypeScriptInterfaceType(),
156+
)
166157

167-
block.AddLines(fmt.Sprintf("export type %s = %s", e.Name.ToTitleCase(), values))
168-
return block.String(), nil
158+
return typ.String()
169159
}
170160

171161
func (e Enum) TypeScriptInterfaceKey() string {

internal/gen/types/number.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package types
33
import (
44
"fmt"
55

6+
"github.com/buildkite/buildkite-sdk/internal/gen/typescript"
67
"github.com/buildkite/buildkite-sdk/internal/gen/utils"
78
)
89

@@ -19,7 +20,7 @@ func (Number) IsReference() bool {
1920
return false
2021
}
2122

22-
func (Number) IsPrimative() bool {
23+
func (Number) IsPrimitive() bool {
2324
return true
2425
}
2526

@@ -47,14 +48,13 @@ func (n Number) GoStructKey(isUnion bool) string {
4748
}
4849

4950
// TypeScript
50-
func (n Number) TypeScript() (string, error) {
51-
block := utils.NewCodeBlock()
52-
if n.Description != "" {
53-
block.AddLines(utils.NewTypeDocComment(n.Description))
54-
}
55-
56-
block.AddLines(fmt.Sprintf("type %s = number", n.Name.ToTitleCase()))
57-
return block.String(), nil
51+
func (n Number) TypeScript() string {
52+
typ := typescript.NewType(
53+
n.Name.ToTitleCase(),
54+
n.Description,
55+
"number",
56+
)
57+
return typ.String()
5858
}
5959

6060
func (n Number) TypeScriptInterfaceKey() string {

0 commit comments

Comments
 (0)