package webfs import ( "embed" "fmt" "io/fs" "path" ) //go:embed assets scripts styles templates var webFS embed.FS var Root fs.FS func init() { Root = prefixFS{root: "web", fs: webFS} } type prefixFS struct { root string fs fs.FS } func (p prefixFS) Open(name string) (fs.File, error) { clean := path.Clean(name) if clean == p.root { return p.fs.Open(".") } return p.fs.Open(clean[len(p.root + "/"):]) } func (p prefixFS) ReadDir(name string) ([]fs.DirEntry, error) { clean := path.Clean(name) if clean == p.root { return fs.ReadDir(p.fs, ".") } return fs.ReadDir(p.fs, clean[len(p.root + "/"):]) } func Sub(dir string) fs.FS { sub, err := fs.Sub(Root, dir) if err != nil { panic(fmt.Errorf("failed to create subfs: %w", err)) } return sub }