// Package main provides a build-time CLI for generating Web Component JS bundles. // Reads a JSON slot map from stdin, writes the generated JS to stdout. // // Usage: // // echo '{"H":"nav-bar","C":"main-content"}' | go run ./cmd/codegen/ > components.js // echo '{"H":"nav-bar","C":"main-content"}' | go run ./cmd/codegen/ -dts > components.d.ts package main import ( "encoding/json" "flag" goio "io" "os" "dappco.re/go/core/html/codegen" log "dappco.re/go/core/log" ) var emitTypeDefinitions = flag.Bool("dts", false, "emit TypeScript declarations instead of JavaScript") func run(r goio.Reader, w goio.Writer) error { return runWithMode(r, w, false) } func runTypeDefinitions(r goio.Reader, w goio.Writer) error { return runWithMode(r, w, true) } func runWithMode(r goio.Reader, w goio.Writer, emitTypes bool) error { data, err := goio.ReadAll(r) if err != nil { return log.E("codegen", "reading stdin", err) } var slots map[string]string if err := json.Unmarshal(data, &slots); err != nil { return log.E("codegen", "invalid JSON", err) } if emitTypes { dts, err := codegen.GenerateTypeDefinitions(slots) if err != nil { return err } _, err = goio.WriteString(w, dts) return err } js, err := codegen.GenerateBundle(slots) if err != nil { return err } _, err = goio.WriteString(w, js) return err } func main() { flag.Parse() var err error if *emitTypeDefinitions { err = runTypeDefinitions(os.Stdin, os.Stdout) } else { err = run(os.Stdin, os.Stdout) } if err != nil { log.Error("codegen failed", "err", err) os.Exit(1) } }