github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/newapp/web/web.go (about) 1 package web 2 3 import ( 4 "embed" 5 "html/template" 6 "io/fs" 7 8 "github.com/JarrahG/buffalocli/internal/genny/assets/standard" 9 "github.com/JarrahG/buffalocli/internal/genny/assets/webpack" 10 "github.com/JarrahG/buffalocli/internal/genny/newapp/core" 11 "github.com/gobuffalo/genny/v2" 12 "github.com/gobuffalo/genny/v2/gogen" 13 ) 14 15 //go:embed templates/* templates/templates/_flash.plush.html.tmpl 16 var templates embed.FS 17 18 // Templates used for web project files 19 // (exported mostly for the "fix" command) 20 func Templates() (fs.FS, error) { 21 return fs.Sub(templates, "templates") 22 } 23 24 // New generator for creating a Buffalo Web application 25 func New(opts *Options) (*genny.Group, error) { 26 if err := opts.Validate(); err != nil { 27 return nil, err 28 } 29 30 gg, err := core.New(opts.Options) 31 if err != nil { 32 return gg, err 33 } 34 35 g := genny.New() 36 g.Transformer(genny.Dot()) 37 data := map[string]interface{}{ 38 "opts": opts, 39 } 40 41 helpers := template.FuncMap{} 42 43 t := gogen.TemplateTransformer(data, helpers) 44 g.Transformer(t) 45 sub, err := Templates() 46 if err != nil { 47 return gg, err 48 } 49 50 if err := g.FS(sub); err != nil { 51 return gg, err 52 } 53 54 gg.Add(g) 55 56 if opts.Webpack != nil { 57 // add the webpack generator 58 g, err = webpack.New(opts.Webpack) 59 if err != nil { 60 return gg, err 61 } 62 gg.Add(g) 63 } 64 65 if opts.Standard != nil { 66 // add the standard generator 67 g, err = standard.New(opts.Standard) 68 if err != nil { 69 return gg, err 70 } 71 gg.Add(g) 72 } 73 74 return gg, nil 75 }