package main import ( "encoding/json" "flag" "fmt" "os" "path/filepath" "github.com/sonr-io/nebula/internal/generator" "github.com/sonr-io/nebula/internal/parser" ) func main() { var ( input = flag.String("input", "web-types.json", "Path to web-types.json") output = flag.String("output", "pkg/wa", "Output directory for generated files") pkg = flag.String("package", "wa", "Package name for generated files") verbose = flag.Bool("verbose", false, "Verbose output") ) flag.Parse() data, err := os.ReadFile(*input) if err != nil { fmt.Fprintf(os.Stderr, "Error reading input: %v\n", err) os.Exit(1) } var wt parser.WebTypes if err := json.Unmarshal(data, &wt); err != nil { fmt.Fprintf(os.Stderr, "Error parsing JSON: %v\n", err) os.Exit(1) } if err := os.MkdirAll(*output, 0755); err != nil { fmt.Fprintf(os.Stderr, "Error creating output directory: %v\n", err) os.Exit(1) } gen := generator.New(*pkg, *verbose) // Generate component files for _, el := range wt.Contributions.HTML.Elements { filename := filepath.Join(*output, gen.ComponentFilename(el.Name)) if err := gen.GenerateComponent(filename, el); err != nil { fmt.Fprintf(os.Stderr, "Error generating %s: %v\n", el.Name, err) continue } if *verbose { fmt.Printf("Generated: %s\n", filename) } } // Generate shared types and utilities if err := gen.GenerateTypes(filepath.Join(*output, "types.go")); err != nil { fmt.Fprintf(os.Stderr, "Error generating types: %v\n", err) os.Exit(1) } // Generate builder helpers if err := gen.GenerateBuilders(filepath.Join(*output, "builders.go"), wt.Contributions.HTML.Elements); err != nil { fmt.Fprintf(os.Stderr, "Error generating builders: %v\n", err) os.Exit(1) } // Generate CDN loader if err := gen.GenerateCDN(filepath.Join(*output, "cdn.templ"), wt.Version); err != nil { fmt.Fprintf(os.Stderr, "Error generating CDN loader: %v\n", err) os.Exit(1) } // Generate events helper if err := gen.GenerateEvents(filepath.Join(*output, "events.go"), wt.Contributions.HTML.Elements); err != nil { fmt.Fprintf(os.Stderr, "Error generating events: %v\n", err) os.Exit(1) } fmt.Printf("Generated %d components in %s\n", len(wt.Contributions.HTML.Elements), *output) }