80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
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)
|
|
}
|