feat: Add generator function for WebAwesome
This commit is contained in:
79
cmd/generate/main.go
Normal file
79
cmd/generate/main.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user