@@ -32,12 +32,13 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
32
32
onRoute: routes.add,
33
33
onMiddleware: middleware.add,
34
34
);
35
-
35
+ final publicDirectory = Directory (path. join (directory.path, 'public' ));
36
36
return RouteConfiguration (
37
37
globalMiddleware: globalMiddleware,
38
38
middleware: middleware,
39
39
directories: directories,
40
40
routes: routes,
41
+ serveStaticFiles: publicDirectory.existsSync (),
41
42
);
42
43
}
43
44
@@ -47,7 +48,7 @@ List<RouteDirectory> _getRouteDirectories(
47
48
void Function (MiddlewareFile route)? onMiddleware,
48
49
}) {
49
50
final directories = < RouteDirectory > [];
50
- final entities = directory.listSync ();
51
+ final entities = directory.listSync (). sorted () ;
51
52
final directorySegment =
52
53
directory.path.split ('routes' ).last.replaceAll (r'\' , '/' );
53
54
final directoryPath = directorySegment.startsWith ('/' )
@@ -106,6 +107,7 @@ List<RouteFile> _getRouteFilesForDynamicDirectories(
106
107
final files = < RouteFile > [];
107
108
directory
108
109
.listSync ()
110
+ .sorted ()
109
111
.whereType <Directory >()
110
112
.where ((d) => d.isDynamicRoute)
111
113
.forEach ((dynamicDirectory) {
@@ -136,7 +138,7 @@ List<RouteFile> _getRouteFiles(
136
138
final directoryPath = directorySegment.startsWith ('/' )
137
139
? directorySegment
138
140
: '/$directorySegment ' ;
139
- final entities = directory.listSync ();
141
+ final entities = directory.listSync (). sorted () ;
140
142
entities.where ((e) => e.isRoute).cast <File >().forEach ((entity) {
141
143
final filePath =
142
144
path.join ('..' , path.relative (entity.path)).replaceAll (r'\' , '/' );
@@ -177,6 +179,12 @@ extension on String {
177
179
}
178
180
}
179
181
182
+ extension on List <FileSystemEntity > {
183
+ List <FileSystemEntity > sorted () {
184
+ return this ..sort ((a, b) => b.path.compareTo (a.path));
185
+ }
186
+ }
187
+
180
188
extension on Directory {
181
189
bool get isDynamicRoute {
182
190
return RegExp (r'\[(.*)\]' ).hasMatch (path.basename (this .path));
@@ -202,8 +210,12 @@ class RouteConfiguration {
202
210
required this .middleware,
203
211
required this .directories,
204
212
required this .routes,
213
+ this .serveStaticFiles = false ,
205
214
});
206
215
216
+ /// Whether to serve static files. Defaults to false.
217
+ final bool serveStaticFiles;
218
+
207
219
/// Optional global middleware.
208
220
final MiddlewareFile ? globalMiddleware;
209
221
0 commit comments