feat: Add generator function for WebAwesome

This commit is contained in:
2026-01-01 14:26:25 -05:00
parent 45b17f53b4
commit ec87807487
7 changed files with 7946 additions and 3 deletions

79
cmd/generate/main.go Normal file
View File

@@ -0,0 +1,79 @@
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)
}