blob: a4015e0ff3c7ae072622ac5ae953e02f22a62df7 [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//
Josh Bleecher Snyderbc4947e2025-04-30 18:23:11 -07004// Example:
Sean McCulloughd9f13372025-04-21 15:08:49 -07005//
Sean McCulloughd9d45812025-04-30 16:53:41 -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"
Philip Zeyliger272a90e2025-05-16 14:49:51 -070015 "sketch.dev/git_tools"
Josh Bleecher Snyder4f84ab72025-04-22 16:40:54 -070016 "sketch.dev/llm"
Sean McCulloughd9f13372025-04-21 15:08:49 -070017 "sketch.dev/loop"
18 "sketch.dev/loop/server"
19)
20
21func main() {
22 outputPath := flag.String("o", "", "Path to the output TypeScript file.")
23 flag.Parse()
24
25 generator := TS()
26
27 w, err := os.Create(*outputPath)
28 if err != nil {
29 fmt.Printf("error: %v\n", err)
30 os.Exit(1)
31 }
32 fmt.Fprintf(w, "// Auto-generated by sketch.dev/cmd/go2ts.go\n")
33 generator.Render(w)
34}
35
36// TS returns a Go2TS generator for go types we want to use in TypeScript.
37func TS() *go2ts.Go2TS {
38 generator := go2ts.New()
39
40 // Enum types
41 generator.AddMultipleUnion(
42 []loop.CodingAgentMessageType{
43 loop.UserMessageType,
44 loop.AgentMessageType,
45 loop.ErrorMessageType,
46 loop.BudgetMessageType,
47 loop.ToolUseMessageType,
48 loop.CommitMessageType,
49 loop.AutoMessageType,
Josh Bleecher Snyder289525b2025-07-08 04:03:02 +000050 loop.PortMessageType,
Josh Bleecher Snyder3b44cc32025-07-22 02:28:14 +000051 loop.CompactMessageType,
52 loop.SlugMessageType,
Sean McCulloughd9f13372025-04-21 15:08:49 -070053 },
54 )
55
56 // Struct types
57 generator.AddMultiple(
58 loop.AgentMessage{},
59 loop.GitCommit{},
60 loop.ToolCall{},
Josh Bleecher Snyder4f84ab72025-04-22 16:40:54 -070061 llm.Usage{},
Sean McCulloughd9f13372025-04-21 15:08:49 -070062 server.State{},
Josh Bleecher Snyder112b9232025-05-23 11:26:33 -070063 server.TodoItem{},
64 server.TodoList{},
Philip Zeyliger254c49f2025-07-17 17:26:24 -070065 server.Remote{},
66 server.GitPushInfoResponse{},
67 server.GitPushRequest{},
68 server.GitPushResponse{},
Philip Zeyliger272a90e2025-05-16 14:49:51 -070069 git_tools.DiffFile{},
70 git_tools.GitLogEntry{},
Sean McCulloughd9f13372025-04-21 15:08:49 -070071 )
72
73 generator.GenerateNominalTypes = true
74
75 return generator
76}