@@ -23,28 +23,34 @@ func serve(fileSystem fs.FS, filePath string) http.HandlerFunc {
23
23
}
24
24
}
25
25
26
- func buildRouter (parentFileSystem fs.FS , path string ) (chi. Router , error ) {
27
- fileSystem , err := fs .Sub ( parentFileSystem , path )
26
+ func buildRouter (rtr chi. Router , fileSystem fs.FS , path string ) {
27
+ files , err := fs .ReadDir ( fileSystem , "." )
28
28
if err != nil {
29
- return nil , err
29
+ // TODO(Bryan): Log
30
+ return
30
31
}
31
- files , err := fs .ReadDir (fileSystem , "." )
32
- rtr := chi .NewRouter ()
32
+
33
33
rtr .Route ("/" , func (r chi.Router ) {
34
34
for _ , file := range files {
35
35
name := file .Name ()
36
- rtr .Get ("/" + name , serve (fileSystem , name ))
36
+
37
+ if file .IsDir () {
38
+ sub , err := fs .Sub (fileSystem , name )
39
+ if err != nil {
40
+ // TODO(Bryan): Log
41
+ continue
42
+ }
43
+ buildRouter (r , sub , path + "/" + name )
44
+ } else {
45
+ rtr .Get ("/" + name , serve (fileSystem , name ))
46
+ }
37
47
}
38
48
})
39
- return rtr , nil
40
49
}
41
50
42
51
// Handler returns an HTTP handler for serving a next-based static site
43
52
func Handler (fileSystem fs.FS ) (http.Handler , error ) {
44
-
45
- router , err := buildRouter (fileSystem , "." )
46
- if err != nil {
47
- return nil , err
48
- }
49
- return router , nil
53
+ rtr := chi .NewRouter ()
54
+ buildRouter (rtr , fileSystem , "" )
55
+ return rtr , nil
50
56
}
0 commit comments