go-html/cmd/codegen/main.go
Snider 4c657377c4 fix(wasm): reduce binary from 1.56MB to 830KB gzip
Move heavyweight imports out of WASM build via //go:build !js tags:
- register.go: encoding/json + text/template (codegen)
- pipeline.go: go-i18n/reversal (grammar imprint)
- layout.go: replace fmt.Sprintf with string concat

Add cmd/codegen/ CLI as build-time replacement for in-browser
registerComponents(). Reads slot JSON from stdin, writes WC bundle
JS to stdout.

Result: 2.90MB raw / 830KB gzip (was 6.04MB / 1.56MB).
Makefile gate passes (limit 1MB gzip).

Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-20 08:29:54 +00:00

43 lines
888 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"
"io"
"os"
"forge.lthn.ai/core/go-html/codegen"
)
func run(r io.Reader, w io.Writer) error {
data, err := io.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 = io.WriteString(w, js)
return err
}
func main() {
if err := run(os.Stdin, os.Stdout); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}