internal/frontend serves a Vite build from an fs.FS: hashed files under /assets/ are cached for a year, HTML and other files get no-cache, ETags are computed (and cached for a build that can't change), precompressed variants are served when the client accepts them, and a path without an extension falls back to index.html for client-side routes. Only GET and HEAD are allowed. server.WithFrontend serves it for every path outside /api and /ws, behind compression and the frontend group's hooks. job-search serve passes the directory in server.frontend.dir, checked for an index.html at start; empty means no frontend. Its option building moved into serverOptions, with the access log.
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
// JSCKServerFrontend is the frontend section's configuration key.
|
|
const JSCKServerFrontend string = "frontend"
|
|
|
|
// JSCServerFrontend configures how the server serves the frontend. Dir is
|
|
// the directory of the frontend's build output (holding index.html); empty
|
|
// means no frontend is served, as there is no embedded build yet.
|
|
// ImmutablePrefix is where Vite emits content-hashed files, cached for a
|
|
// year; empty means "/assets/". IndexCacheControl is the Cache-Control of
|
|
// HTML and other files without a hash; empty means "no-cache".
|
|
type JSCServerFrontend struct {
|
|
Dir string `cfg:"dir"`
|
|
ImmutablePrefix string `cfg:"immutable_prefix"`
|
|
IndexCacheControl string `cfg:"index_cache_control"`
|
|
}
|
|
|
|
// ---------- Section methods (see Section) ----------
|
|
|
|
// Map implements Section.
|
|
func (c JSCServerFrontend) Map() map[string]any { return mapOf(c) }
|
|
|
|
// Flatten implements Section.
|
|
func (c JSCServerFrontend) Flatten() map[string]any {
|
|
return flattenOf(JSCKServerFrontend, c)
|
|
}
|
|
|
|
// TypeOf implements Section.
|
|
func (c JSCServerFrontend) TypeOf(key string) (reflect.Kind, error) {
|
|
return typeOf(c, key)
|
|
}
|
|
|
|
// ValueOf implements Section.
|
|
func (c JSCServerFrontend) ValueOf(key string) (any, error) {
|
|
return valueOf(c, key)
|
|
}
|
|
|
|
// SetValue implements Section.
|
|
func (c *JSCServerFrontend) SetValue(key string, value any) error {
|
|
return setValue(c, key, value)
|
|
}
|