- Alias stdlib `io` as `goio` in cmd/codegen/main.go to follow project conventions - Add compile-time Node interface checks for all node types in node.go and Layout in layout.go - Replace fmt.Fprintf stderr logging with go-log in cmd/codegen/main.go - Replace fmt.Println with go-log in cmd/wasm/register.go Co-Authored-By: Virgil <virgil@lethean.io>
44 lines
938 B
Go
44 lines
938 B
Go
// 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
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
goio "io"
|
|
"os"
|
|
|
|
"forge.lthn.ai/core/go-html/codegen"
|
|
log "forge.lthn.ai/core/go-log"
|
|
)
|
|
|
|
func run(r goio.Reader, w goio.Writer) error {
|
|
data, err := goio.ReadAll(r)
|
|
if err != nil {
|
|
return fmt.Errorf("codegen: reading stdin: %w", err)
|
|
}
|
|
|
|
var slots map[string]string
|
|
if err := json.Unmarshal(data, &slots); err != nil {
|
|
return fmt.Errorf("codegen: invalid JSON: %w", err)
|
|
}
|
|
|
|
js, err := codegen.GenerateBundle(slots)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = goio.WriteString(w, js)
|
|
return err
|
|
}
|
|
|
|
func main() {
|
|
if err := run(os.Stdin, os.Stdout); err != nil {
|
|
log.Error("codegen failed", "err", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|