blob: 4def3cc719f9b360e6dcb15c6dbde1f6d737bafc [file] [log] [blame]
Sean McCulloughd9f13372025-04-21 15:08:49 -07001// A command line tool for generating typescript type declarations from go
2// struct types.
3//
4// Exmaple:
5//
Philip Zeyliger2032b1c2025-04-23 19:40:42 -07006// go run cmd/go2ts -o webui/src/types.ts
Sean McCulloughd9f13372025-04-21 15:08:49 -07007package main
8
9import (
10 "flag"
11 "fmt"
12 "os"
13
14 "go.skia.org/infra/go/go2ts"
15 "sketch.dev/ant"
16 "sketch.dev/loop"
17 "sketch.dev/loop/server"
18)
19
20func main() {
21 outputPath := flag.String("o", "", "Path to the output TypeScript file.")
22 flag.Parse()
23
24 generator := TS()
25
26 w, err := os.Create(*outputPath)
27 if err != nil {
28 fmt.Printf("error: %v\n", err)
29 os.Exit(1)
30 }
31 fmt.Fprintf(w, "// Auto-generated by sketch.dev/cmd/go2ts.go\n")
32 generator.Render(w)
33}
34
35// TS returns a Go2TS generator for go types we want to use in TypeScript.
36func TS() *go2ts.Go2TS {
37 generator := go2ts.New()
38
39 // Enum types
40 generator.AddMultipleUnion(
41 []loop.CodingAgentMessageType{
42 loop.UserMessageType,
43 loop.AgentMessageType,
44 loop.ErrorMessageType,
45 loop.BudgetMessageType,
46 loop.ToolUseMessageType,
47 loop.CommitMessageType,
48 loop.AutoMessageType,
49 },
50 )
51
52 // Struct types
53 generator.AddMultiple(
54 loop.AgentMessage{},
55 loop.GitCommit{},
56 loop.ToolCall{},
57 ant.Usage{},
58 server.State{},
59 )
60
61 generator.GenerateNominalTypes = true
62
63 return generator
64}