update wasmgen
This commit is contained in:
@@ -36,7 +36,7 @@ app/ the application — neutral, standalone functions (no centra
|
||||
pages.go Deps + Shell + App/Public layouts + nav + Counter + pages
|
||||
chart.go Chart page (go-chart, renders on both sides)
|
||||
server_counter.go //gowasm:server component (server-only; clicks-over-time chart)
|
||||
*.gen.go GENERATED by kjol/cmd/gowasmgen (routes, layout dispatch, stubs)
|
||||
*.gen.go GENERATED by kjol/cmd/wasmgen (routes, layout dispatch, stubs)
|
||||
wasm/ the js/wasm client entry point (main_native.go is a host stub)
|
||||
server/ the dev-server main: injects Build/Render/Document into wasmdevserver
|
||||
wwwroot/ bootstrap.js, bootstrap.min.css (+ generated wasm_exec.js, app.wasm)
|
||||
@@ -50,14 +50,14 @@ wwwroot/ bootstrap.js, bootstrap.min.css (+ generated wasm_exec.js, a
|
||||
| `kjol/wasmruntime` | wasm client runtime: reconcile, `Run`/`Hydrate`, router, fetch, HMR state | `wasm/main.go` calls `Hydrate`/`Run` |
|
||||
| `kjol/rsc` | stateless server components over HTTP (gob) | `//gowasm:server` + the generated client stub |
|
||||
| `kjol/wasmdevserver` | reusable dev server: SSR, `/rsc`, hot reload, error overlay | `server/main.go` fills a `wasmdevserver.Config` |
|
||||
| `kjol/cmd/gowasmgen` | directive codegen → `app/*.gen.go` | run by `buildWasm` and `//go:generate` |
|
||||
| `kjol/cmd/wasmgen` | directive codegen → `app/*.gen.go` | run by `buildWasm` and `//go:generate` |
|
||||
|
||||
The **golden rule** holds: `wasmdevserver` imports no app code. The app injects
|
||||
`Build` (how to compile the wasm), `Render` (SSR a route → HTML), and `Document`
|
||||
(wrap it in a page) via `wasmdevserver.Config` — the same coupling inversion kjol
|
||||
uses elsewhere.
|
||||
|
||||
## Directives (expanded by `gowasmgen` at build time)
|
||||
## Directives (expanded by `wasmgen` at build time)
|
||||
|
||||
```go
|
||||
//gowasm:page / static layout=public // a route; `static` SSRs it, `layout=` wraps it
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Code generated by gowasmgen. DO NOT EDIT.
|
||||
// Code generated by wasmgen. DO NOT EDIT.
|
||||
|
||||
//go:build js && wasm
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// functions (no central App struct). It is platform-neutral, so the SAME code
|
||||
// renders on the server (SSR) and hydrates on the client.
|
||||
//
|
||||
// Directives (processed by cmd/gowasmgen at build time):
|
||||
// Directives (processed by cmd/wasmgen at build time):
|
||||
//
|
||||
// //gowasm:page <path> [static] [layout=<name>]
|
||||
// marks a page factory as a route. `static`
|
||||
@@ -19,7 +19,7 @@
|
||||
// generated from these directives.
|
||||
package app
|
||||
|
||||
//go:generate go run kjol/cmd/gowasmgen .
|
||||
//go:generate go run kjol/cmd/wasmgen .
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Code generated by gowasmgen. DO NOT EDIT.
|
||||
// Code generated by wasmgen. DO NOT EDIT.
|
||||
package app
|
||||
|
||||
import "kjol/vdom"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Code generated by gowasmgen. DO NOT EDIT.
|
||||
// Code generated by wasmgen. DO NOT EDIT.
|
||||
|
||||
//go:build !(js && wasm)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
echo "==> Generating directive glue (//gowasm:page, //gowasm:layout, //gowasm:server)"
|
||||
go run kjol/cmd/gowasmgen ./app
|
||||
go run kjol/cmd/wasmgen ./app
|
||||
|
||||
echo "==> Compiling ./wasm to wwwroot/app.wasm (GOOS=js GOARCH=wasm)"
|
||||
GOOS=js GOARCH=wasm go build -o wwwroot/app.wasm ./wasm
|
||||
|
||||
@@ -69,11 +69,11 @@ func document(inner string) string {
|
||||
</html>`
|
||||
}
|
||||
|
||||
// buildWasm runs the directive codegen (kjol/cmd/gowasmgen), then compiles
|
||||
// buildWasm runs the directive codegen (kjol/cmd/wasmgen), then compiles
|
||||
// ./wasm to wwwroot/app.wasm. Returned combined output is shown in the browser
|
||||
// overlay on failure.
|
||||
func buildWasm() ([]byte, error) {
|
||||
if out, err := exec.Command("go", "run", "kjol/cmd/gowasmgen", "./app").CombinedOutput(); err != nil {
|
||||
if out, err := exec.Command("go", "run", "kjol/cmd/wasmgen", "./app").CombinedOutput(); err != nil {
|
||||
return out, err
|
||||
}
|
||||
cmd := exec.Command("go", "build", "-o", filepath.Join("wwwroot", "app.wasm"), "./wasm")
|
||||
|
||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
// Command gowasmgen preprocesses component directives into glue code so that
|
||||
// Command wasmgen preprocesses component directives into glue code so that
|
||||
// server-component calls look identical to client-component calls, and routes
|
||||
// can opt into SSR with a tag.
|
||||
//
|
||||
@@ -61,7 +61,7 @@ func main() {
|
||||
return !strings.HasSuffix(fi.Name(), ".gen.go")
|
||||
}, parser.ParseComments)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "gowasmgen: parse:", err)
|
||||
fmt.Fprintln(os.Stderr, "wasmgen: parse:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ func main() {
|
||||
write(filepath.Join(dir, "server.gen.go"), serverTmpl, data)
|
||||
write(filepath.Join(dir, "client.gen.go"), clientTmpl, data)
|
||||
|
||||
fmt.Printf("gowasmgen: %d page(s), %d server component(s)\n", len(data.Pages), len(data.Servers))
|
||||
fmt.Printf("wasmgen: %d page(s), %d server component(s)\n", len(data.Pages), len(data.Servers))
|
||||
}
|
||||
|
||||
func write(path, tmpl string, data genData) {
|
||||
@@ -139,7 +139,7 @@ func write(path, tmpl string, data genData) {
|
||||
}
|
||||
src, err := format.Source([]byte(b.String()))
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "gowasmgen: format %s: %v\n---\n%s\n", path, err, b.String())
|
||||
fmt.Fprintf(os.Stderr, "wasmgen: format %s: %v\n---\n%s\n", path, err, b.String())
|
||||
os.Exit(1)
|
||||
}
|
||||
// Only write when changed, so re-running codegen doesn't churn mtimes (which
|
||||
@@ -152,7 +152,7 @@ func write(path, tmpl string, data genData) {
|
||||
}
|
||||
}
|
||||
|
||||
const routesTmpl = `// Code generated by gowasmgen. DO NOT EDIT.
|
||||
const routesTmpl = `// Code generated by wasmgen. DO NOT EDIT.
|
||||
package app
|
||||
|
||||
import "kjol/vdom"
|
||||
@@ -185,7 +185,7 @@ func LayoutFor(d Deps, path string, content *vdom.VNode) *vdom.VNode {
|
||||
{{end}}}
|
||||
`
|
||||
|
||||
const serverTmpl = `// Code generated by gowasmgen. DO NOT EDIT.
|
||||
const serverTmpl = `// Code generated by wasmgen. DO NOT EDIT.
|
||||
|
||||
//go:build !(js && wasm)
|
||||
|
||||
@@ -198,7 +198,7 @@ func init() {
|
||||
{{end}}}
|
||||
`
|
||||
|
||||
const clientTmpl = `// Code generated by gowasmgen. DO NOT EDIT.
|
||||
const clientTmpl = `// Code generated by wasmgen. DO NOT EDIT.
|
||||
|
||||
//go:build js && wasm
|
||||
|
||||
Reference in New Issue
Block a user