Skip to content

Commit 37c506c

Browse files
committedSep 13, 2023
simplify asset building functionality, remove all from the main guiapi package
1 parent 6cbd2ce commit 37c506c

File tree

5 files changed

+44
-66
lines changed

5 files changed

+44
-66
lines changed
 

‎assets.go

-27
This file was deleted.

‎assets/assets_production.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//go:build production
22

3-
package guiapi
3+
package assets
44

55
import "errors"
66

‎examples/main.go

+38-19
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,60 @@ package main
33
import (
44
"embed"
55
"flag"
6+
"io/fs"
67
"log"
78
"net/http"
9+
"os"
10+
"path/filepath"
811

912
"github.com/mbertschler/guiapi"
13+
"github.com/mbertschler/guiapi/assets"
1014
)
1115

1216
//go:embed dist/*
13-
var distEmbedFS embed.FS
17+
var prebuiltAssets embed.FS
18+
19+
func assetsFS() (fs.FS, error) {
20+
if !assets.EsbuildAvailable() {
21+
// in production, esbuild is not available
22+
// and assets are compiled into the binary
23+
assets, err := fs.Sub(prebuiltAssets, "dist")
24+
if err != nil {
25+
return nil, err
26+
}
27+
return assets, nil
28+
}
29+
30+
build := assets.DefaultBuildOptions()
31+
build.Infile = "js/main.js"
32+
build.Outfile = "dist/bundle.js"
33+
build.EsbuildArgs = []string{"--metafile=dist/meta.json"}
34+
35+
dir := filepath.Dir(build.Outfile)
36+
37+
err := assets.BuildAssets(build)
38+
if err != nil {
39+
return nil, err
40+
}
41+
return os.DirFS(dir), nil
42+
}
1443

15-
func setup() (*guiapi.Server, error) {
44+
func setupServer(assetsFS fs.FS) *guiapi.Server {
1645
db := NewDB()
1746

1847
reports := NewReportsComponent(db)
1948
counter := &Counter{DB: db}
2049
todo := &TodoList{DB: db}
2150

22-
options := guiapi.DefaultOptions()
23-
options.DistFS = distEmbedFS
24-
options.Assets.Infile = "js/main.js"
25-
options.Assets.Outfile = "dist/bundle.js"
26-
options.Assets.EsbuildArgs = []string{"--metafile=dist/meta.json"}
51+
server := guiapi.New()
2752

28-
// better struct options
29-
server := guiapi.New(options, reports.StreamRouter)
30-
31-
distFS, err := server.BuildAssets()
32-
if err != nil {
33-
return nil, err
34-
}
35-
36-
// move into guiapi?
37-
server.AddFiles("/dist/", http.FS(distFS))
53+
server.AddFiles("/dist/", http.FS(assetsFS))
3854

3955
reports.Register(server)
4056
counter.Register(server)
4157
todo.Register(server)
4258

43-
return server, nil
59+
return server
4460
}
4561

4662
func main() {
@@ -50,15 +66,18 @@ func main() {
5066
flag.BoolVar(&exitAfterBuild, "build", false, "build assets and exit")
5167
flag.Parse()
5268

53-
server, err := setup()
69+
fs, err := assetsFS()
5470
if err != nil {
5571
log.Fatal(err)
5672
}
5773

5874
if exitAfterBuild {
75+
log.Println("built assets, exit after build flag provided")
5976
return
6077
}
6178

79+
server := setupServer(fs)
80+
6281
log.Println("listening on localhost:8000")
6382
err = http.ListenAndServe("localhost:8000", server)
6483
if err != nil {

‎examples/todolist.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,11 @@ func (t *TodoList) RenderFullPage(page string) guiapi.PageFunc {
148148
if err != nil {
149149
return nil, err
150150
}
151-
return &TodoPage{Content: content}, nil
151+
return &TodoPage{
152+
Content: content,
153+
State: TodoListState{
154+
Page: page,
155+
}}, nil
152156
})
153157
}
154158

‎options.go

-18
This file was deleted.

0 commit comments

Comments
 (0)