From 03e5a27b4e12f7902b396ec35ef58337f6278743 Mon Sep 17 00:00:00 2001 From: Lucas Schumacher Date: Mon, 24 Jun 2024 21:37:36 -0400 Subject: [PATCH] Refactor server.go --- server.go | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/server.go b/server.go index ce1263f..3be953f 100644 --- a/server.go +++ b/server.go @@ -11,10 +11,6 @@ import ( const PORT = 3003 -type frontendInfo struct { - Name, Mountpoint string -} - //go:embed "all:vuejs/dist" var vueFiles embed.FS @@ -33,11 +29,26 @@ var alpineFiles embed.FS //go:embed "react" var reactFiles embed.FS -func addFrontend(files embed.FS, mountpoint string, subfs string, name string) frontendInfo { - subFiles, _ := fs.Sub(files, subfs) - fileServer := http.FileServerFS(subFiles) - http.Handle(mountpoint, http.StripPrefix(mountpoint, fileServer)) - return frontendInfo{name, mountpoint} +type frontendInfo struct { + Name, Mountpoint string + Filesystem fs.FS +} + +var frontends = []frontendInfo{ + {"JS Only", "/vanillaJS/", getSubFS(vanillaFiles, "vanillaJS")}, + {"Alpine.js", "/alpinejs/", getSubFS(alpineFiles, "alpinejs")}, + {"React", "/react/", getSubFS(reactFiles, "react")}, + {"React (Next)", "/reactNextJS/", getSubFS(nextFiles, "reactNextJS/out")}, + {"Vue.js", "/vuejs/", getSubFS(vueFiles, "vuejs/dist")}, + {"Svelte", "/svelte/", getSubFS(svelteFiles, "svelte/dist")}, +} + +func getSubFS(f fs.FS, dir string) fs.FS { + files, err := fs.Sub(f, dir) + if err != nil { + panic(err) + } + return files } func outputIndexAndExit(indexTemplate template.Template, frontends []frontendInfo) { @@ -45,8 +56,8 @@ func outputIndexAndExit(indexTemplate template.Template, frontends []frontendInf if err != nil { panic(err) // Handle error } - defer file.Close() indexTemplate.Execute(file, frontends) + file.Close() os.Exit(0) } @@ -58,19 +69,15 @@ func main() { panic(fmt.Sprintf("Error parsing homepage template\n%s", err)) } - frontends := []frontendInfo{ - addFrontend(vanillaFiles, "/vanillaJS/", "vanillaJS", "JS Only"), - addFrontend(alpineFiles, "/alpinejs/", "alpinejs", "Alpine.js"), - addFrontend(reactFiles, "/react/", "react", "React"), - addFrontend(nextFiles, "/reactNextJS/", "reactNextJS/out", "React (Next.js)"), - addFrontend(vueFiles, "/vuejs/", "vuejs/dist", "Vue.js"), - addFrontend(svelteFiles, "/svelte/", "svelte/dist", "Svelte"), - } - if len(args) == 2 && args[1] == "generate" { outputIndexAndExit(*home_template, frontends) } + for _, info := range frontends { + fileServer := http.FileServerFS(info.Filesystem) + http.Handle(info.Mountpoint, http.StripPrefix(info.Mountpoint, fileServer)) + } + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { err = home_template.Execute(w, frontends) })