blob: 65fc9abf769d0e4769f5a44113e3065ad398394c [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"
Josh Bleecher Snyder4f84ab72025-04-22 16:40:54 -070015 "sketch.dev/llm"
Sean McCulloughd9f13372025-04-21 15:08:49 -070016 "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{},
Josh Bleecher Snyder4f84ab72025-04-22 16:40:54 -070057 llm.Usage{},
Sean McCulloughd9f13372025-04-21 15:08:49 -070058 server.State{},
Sean McCullough485afc62025-04-28 14:28:39 -070059 loop.MultipleChoiceOption{},
60 loop.MultipleChoiceParams{},
Sean McCulloughd9f13372025-04-21 15:08:49 -070061 )
62
63 generator.GenerateNominalTypes = true
64
65 return generator
66}